Skip to content

Commit 4ffb8e2

Browse files
committed
build(deps): refresh compatible workspace dependencies
Release highlights: - Keep runtime, build, and publishing dependencies current and vulnerability-free. Release details: - Upgrade compatible dependencies across Core, Chat, TTS, and the landing site. - Pin patched sharp and protobufjs transitive versions. - Align PDF cleanup and Chat runtime metadata with the updated packages. Verification: - pnpm validate - pnpm audit --audit-level moderate
1 parent 2212001 commit 4ffb8e2

16 files changed

Lines changed: 1951 additions & 1773 deletions

File tree

biome.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
2+
"$schema": "https://biomejs.dev/schemas/2.5.9/schema.json",
33
"vcs": {
44
"enabled": true,
55
"clientKind": "git",

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@
7474
"validate": "pnpm lint && pnpm audit:security && pnpm check && pnpm test:coverage && pnpm build && pnpm api:check && pnpm smoke && pnpm package:check && pnpm release:semantic:smoke && pnpm release:artifacts"
7575
},
7676
"devDependencies": {
77-
"@biomejs/biome": "^2.5.1",
78-
"@commitlint/cli": "^21.1.0",
79-
"@commitlint/config-conventional": "^21.1.0",
77+
"@biomejs/biome": "^2.5.9",
78+
"@commitlint/cli": "^21.2.2",
79+
"@commitlint/config-conventional": "^21.2.2",
8080
"@semantic-release/exec": "^7.1.0",
81-
"@vitest/coverage-v8": "4.1.9",
82-
"semantic-release": "^25.0.5",
81+
"@vitest/coverage-v8": "4.1.10",
82+
"semantic-release": "^25.0.9",
8383
"yaml": "^2.9.0"
8484
},
8585
"main": "index.js",

packages/ragmir-chat/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@
6464
"test:coverage": "vitest run --coverage"
6565
},
6666
"dependencies": {
67-
"node-llama-cpp": "3.19.0"
67+
"node-llama-cpp": "3.20.0"
6868
},
6969
"devDependencies": {
7070
"@types/node": "^24.10.1",
71-
"publint": "^0.3.21",
71+
"publint": "^0.3.23",
7272
"typescript": "^5.9.3",
73-
"vitest": "^4.0.15"
73+
"vitest": "^4.1.10"
7474
}
7575
}

packages/ragmir-chat/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
DEFAULT_CHAT_MODEL_PATH,
1414
DEFAULT_CHAT_PROFILE,
1515
inspectChatModel,
16+
NODE_LLAMA_RUNTIME_VERSION,
1617
resolveChatModelPaths,
1718
setupChatModelFiles,
1819
} from "./profiles.js"
@@ -52,7 +53,7 @@ export async function doctor(options: DoctorOptions = {}): Promise<DoctorReport>
5253
return {
5354
node: process.versions.node,
5455
provider: "node-llama-cpp",
55-
runtimeVersion: "3.19.0",
56+
runtimeVersion: NODE_LLAMA_RUNTIME_VERSION,
5657
profile,
5758
defaultProfile: DEFAULT_CHAT_PROFILE,
5859
defaultModel: DEFAULT_CHAT_MODEL,

packages/ragmir-chat/src/profiles.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type {
1111
SetupChatModelResult,
1212
} from "./types.js"
1313

14-
export const NODE_LLAMA_RUNTIME_VERSION = "3.19.0" as const
14+
export const NODE_LLAMA_RUNTIME_VERSION = "3.20.0" as const
1515
export const DEFAULT_CHAT_PROFILE: ChatModelProfile = "fast"
1616
export const DEFAULT_CHAT_MODEL_PATH = ".ragmir/models/chat"
1717
export const CHAT_MODEL_MANIFEST_FILE = "manifest.json"

packages/ragmir-chat/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export interface ChatModelProfileDefinition {
5959
export interface ChatModelManifest {
6060
schemaVersion: 1
6161
provider: "node-llama-cpp"
62-
runtimeVersion: "3.19.0"
62+
runtimeVersion: "3.20.0"
6363
profile: ChatModelProfile
6464
modelId: string
6565
revision: string
@@ -196,7 +196,7 @@ export interface DoctorOptions {
196196
export interface DoctorReport {
197197
node: string
198198
provider: "node-llama-cpp"
199-
runtimeVersion: "3.19.0"
199+
runtimeVersion: "3.20.0"
200200
profile: ChatModelProfile
201201
defaultProfile: ChatModelProfile
202202
defaultModel: string

packages/ragmir-core/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,16 @@
9898
"dependencies": {
9999
"@huggingface/transformers": "^4.2.0",
100100
"@lancedb/lancedb": "^0.30.0",
101-
"@modelcontextprotocol/sdk": "^1.29.0",
101+
"@modelcontextprotocol/sdk": "^1.30.0",
102102
"commander": "^14.0.2",
103103
"fast-glob": "^3.3.3",
104104
"fflate": "^0.8.3",
105105
"html-to-text": "^9.0.5",
106-
"mammoth": "^1.12.0",
106+
"mammoth": "^1.12.1",
107107
"picocolors": "^1.1.1",
108-
"read-excel-file": "^9.2.0",
108+
"read-excel-file": "^9.3.10",
109109
"safe-regex2": "^5.1.1",
110-
"unpdf": "^1.4.0",
110+
"unpdf": "^1.8.1",
111111
"yaml": "^2.9.0",
112112
"zod": "^4.1.13"
113113
},
@@ -129,8 +129,8 @@
129129
"@types/html-to-text": "^9.0.4",
130130
"@types/node": "^24.10.1",
131131
"apache-arrow": "^18.1.0",
132-
"publint": "^0.3.21",
132+
"publint": "^0.3.23",
133133
"typescript": "^5.9.3",
134-
"vitest": "^4.0.15"
134+
"vitest": "^4.1.10"
135135
}
136136
}

packages/ragmir-core/src/index-write-lock.test.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -144,24 +144,24 @@ describe("withIndexWriteLock", () => {
144144
await expect(readIndexWriteLockOwner(storageDir)).resolves.toBeNull()
145145
})
146146

147-
it.each([
148-
"SIGINT",
149-
"SIGTERM",
150-
] as const)("should release the writer lock during %s shutdown", async (signal) => {
151-
if (process.platform === "win32") {
152-
return
153-
}
154-
const root = await temporaryRoot(`ragmir-lock-${signal.toLowerCase()}-`)
155-
const storageDir = path.join(root, "storage")
156-
const interrupted = spawnLockChild(storageDir, "interrupted", 5_000, 2_000)
157-
await waitForEvent(interrupted, "acquired")
158-
interrupted.process.kill(signal)
159-
await waitForExit(interrupted)
160-
161-
const next = spawnLockChild(storageDir, "next", 10, 2_000)
162-
await expect(waitForEvent(next, "acquired")).resolves.toMatchObject({ label: "next" })
163-
await expect(waitForExit(next)).resolves.toMatchObject({ code: 0 })
164-
})
147+
it.each(["SIGINT", "SIGTERM"] as const)(
148+
"should release the writer lock during %s shutdown",
149+
async (signal) => {
150+
if (process.platform === "win32") {
151+
return
152+
}
153+
const root = await temporaryRoot(`ragmir-lock-${signal.toLowerCase()}-`)
154+
const storageDir = path.join(root, "storage")
155+
const interrupted = spawnLockChild(storageDir, "interrupted", 5_000, 2_000)
156+
await waitForEvent(interrupted, "acquired")
157+
interrupted.process.kill(signal)
158+
await waitForExit(interrupted)
159+
160+
const next = spawnLockChild(storageDir, "next", 10, 2_000)
161+
await expect(waitForEvent(next, "acquired")).resolves.toMatchObject({ label: "next" })
162+
await expect(waitForExit(next)).resolves.toMatchObject({ code: 0 })
163+
},
164+
)
165165

166166
it("should keep rows, manifests, state, and audit consistent after two concurrent CLI ingests", async () => {
167167
const root = await temporaryRoot("ragmir-lock-ingest-")

packages/ragmir-core/src/mcp-output.test.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,19 +182,20 @@ describe("MCP output budgeting", () => {
182182
})
183183
})
184184

185-
it.each([
186-
1_024, 32_768, 1_048_576,
187-
])("should preserve the best citation within a %i-byte generated output budget", (budget) => {
188-
for (let seed = 1; seed <= 25; seed += 1) {
189-
const results: McpSearchPayload = Array.from({ length: (seed % 8) + 1 }, (_value, index) =>
190-
searchResult(`${"évidence ".repeat(seed * 9 + index * 3)}${index}`),
191-
)
192-
const fitted = fitSearchPayload(results, budget)
185+
it.each([1_024, 32_768, 1_048_576])(
186+
"should preserve the best citation within a %i-byte generated output budget",
187+
(budget) => {
188+
for (let seed = 1; seed <= 25; seed += 1) {
189+
const results: McpSearchPayload = Array.from({ length: (seed % 8) + 1 }, (_value, index) =>
190+
searchResult(`${"évidence ".repeat(seed * 9 + index * 3)}${index}`),
191+
)
192+
const fitted = fitSearchPayload(results, budget)
193193

194-
expect(Buffer.byteLength(JSON.stringify(fitted.value), "utf8")).toBeLessThanOrEqual(budget)
195-
expect(fitted.value[0]?.citation).toBe(results[0]?.citation)
196-
}
197-
})
194+
expect(Buffer.byteLength(JSON.stringify(fitted.value), "utf8")).toBeLessThanOrEqual(budget)
195+
expect(fitted.value[0]?.citation).toBe(results[0]?.citation)
196+
}
197+
},
198+
)
198199

199200
it("should reject oversized generic output without a typed compact schema", () => {
200201
expect(() =>

packages/ragmir-core/src/parsing.test.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -140,27 +140,25 @@ describe("parseFile", () => {
140140
)
141141
})
142142

143-
it.each([
144-
{ extension: ".docx" },
145-
{ extension: ".xlsx" },
146-
])("should reject $extension archives when they exceed Office entry limits", async ({
147-
extension,
148-
}) => {
149-
const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-office-limit-"))
150-
tempDirs.push(root)
151-
const filePath = path.join(root, `oversized${extension}`)
152-
const entries = Object.fromEntries(
153-
Array.from({ length: 513 }, (_entry, index) => [
154-
`payload/entry-${index}.xml`,
155-
strToU8("<root>bounded</root>"),
156-
]),
157-
)
158-
await writeFile(filePath, zipSync(entries))
143+
it.each([{ extension: ".docx" }, { extension: ".xlsx" }])(
144+
"should reject $extension archives when they exceed Office entry limits",
145+
async ({ extension }) => {
146+
const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-office-limit-"))
147+
tempDirs.push(root)
148+
const filePath = path.join(root, `oversized${extension}`)
149+
const entries = Object.fromEntries(
150+
Array.from({ length: 513 }, (_entry, index) => [
151+
`payload/entry-${index}.xml`,
152+
strToU8("<root>bounded</root>"),
153+
]),
154+
)
155+
await writeFile(filePath, zipSync(entries))
159156

160-
await expect(parseFile(sourceFile(root, filePath, extension))).rejects.toThrow(
161-
"Archive text payload exceeds Ragmir safety limits.",
162-
)
163-
})
157+
await expect(parseFile(sourceFile(root, filePath, extension))).rejects.toThrow(
158+
"Archive text payload exceeds Ragmir safety limits.",
159+
)
160+
},
161+
)
164162

165163
it("should cancel XLSX parsing between rows", async () => {
166164
const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-xlsx-cancel-"))

0 commit comments

Comments
 (0)