@orquentra/codebuddy 2.15.0 → 2.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +1 -1
- package/README.md +2 -2
- package/dist/{chunk-UR3DF74I.js → chunk-4DTO2E4Y.js} +8 -8
- package/dist/chunk-6OQKL35B.js +55 -0
- package/dist/chunk-6OQKL35B.js.map +1 -0
- package/dist/{chunk-ITXE27SZ.js → chunk-7JPUMXFE.js} +67 -12
- package/dist/chunk-7JPUMXFE.js.map +1 -0
- package/dist/{chunk-JJQDVGF7.js → chunk-AFXWCSQ4.js} +3 -3
- package/dist/{chunk-UATJCD2T.js → chunk-BNZDEU5K.js} +6 -6
- package/dist/{chunk-D5E7SGI5.js → chunk-GNV4X67F.js} +14 -14
- package/dist/{chunk-D5E7SGI5.js.map → chunk-GNV4X67F.js.map} +1 -1
- package/dist/{chunk-KYRM3HPP.js → chunk-IM5RFEW4.js} +3 -3
- package/dist/{chunk-UTPC66MV.js → chunk-K4XNTYV7.js} +12 -4
- package/dist/chunk-K4XNTYV7.js.map +1 -0
- package/dist/{chunk-6YI2D5F5.js → chunk-MNSMW4MZ.js} +3 -3
- package/dist/{chunk-BTTQWSDS.js → chunk-NNJSAYHY.js} +1 -1
- package/dist/chunk-NNJSAYHY.js.map +1 -0
- package/dist/{chunk-KQCP3ZYH.js → chunk-OO7Q7XZF.js} +7 -7
- package/dist/{chunk-RZ266NHE.js → chunk-PZ4EBFIA.js} +5 -5
- package/dist/{chunk-RZ266NHE.js.map → chunk-PZ4EBFIA.js.map} +1 -1
- package/dist/{chunk-WHKXUXHE.js → chunk-RGIVHKBH.js} +5 -5
- package/dist/chunk-RGIVHKBH.js.map +1 -0
- package/dist/{chunk-4BSO3HST.js → chunk-RKF4HBBQ.js} +3 -3
- package/dist/{chunk-YMXFSHXT.js → chunk-VBDM7HC5.js} +2 -2
- package/dist/{chunk-YMXFSHXT.js.map → chunk-VBDM7HC5.js.map} +1 -1
- package/dist/{chunk-U7KDM62P.js → chunk-VF7DKRIU.js} +15 -8
- package/dist/chunk-VF7DKRIU.js.map +1 -0
- package/dist/{chunk-M75SN4D4.js → chunk-Y4QQML24.js} +3 -3
- package/dist/{chunk-M75SN4D4.js.map → chunk-Y4QQML24.js.map} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/{config-TXQJCCVI.js → config-S2BDMT4B.js} +4 -4
- package/dist/{expand-KWYGNCKZ.js → expand-TONFVT5D.js} +5 -5
- package/dist/{file-vectors-MKXTSGGH.js → file-vectors-VREL75MA.js} +3 -3
- package/dist/{index-facts-4MTEHKMN.js → index-facts-MBJKBYA3.js} +7 -7
- package/dist/index-pass-RP23G2CR.js +15 -0
- package/dist/index.js +8 -8
- package/dist/{install-E3JWINTN.js → install-MCJIJMFF.js} +7 -7
- package/dist/{lean-MLTAFS5L.js → lean-CBHVW6JM.js} +4 -4
- package/dist/{local-75DJECVR.js → local-TH5XCLVJ.js} +2 -2
- package/dist/{local-llm-MECVJTVU.js → local-llm-GZREB5DF.js} +4 -4
- package/dist/{main-RLMKQZW4.js → main-QF6Z552J.js} +39 -42
- package/dist/main-QF6Z552J.js.map +1 -0
- package/dist/{memory-PFFVMTCH.js → memory-LSZKSF53.js} +5 -5
- package/dist/{operations-STR7S5UO.js → operations-BPI633VN.js} +4 -4
- package/dist/{rerank-XXKWDI5Q.js → rerank-EPCTSEVP.js} +5 -5
- package/dist/{runtime-SWFWGTQ4.js → runtime-W5ACTDFS.js} +5 -5
- package/dist/{summaries-QXWFFDUZ.js → summaries-W2J5FCLG.js} +9 -8
- package/dist/{zvec-F73IBWO5.js → zvec-LSA2IRAU.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-BTTQWSDS.js.map +0 -1
- package/dist/chunk-ITXE27SZ.js.map +0 -1
- package/dist/chunk-U7KDM62P.js.map +0 -1
- package/dist/chunk-UTPC66MV.js.map +0 -1
- package/dist/chunk-WHKXUXHE.js.map +0 -1
- package/dist/index-pass-TBDUEZCB.js +0 -14
- package/dist/main-RLMKQZW4.js.map +0 -1
- /package/dist/{chunk-UR3DF74I.js.map → chunk-4DTO2E4Y.js.map} +0 -0
- /package/dist/{chunk-JJQDVGF7.js.map → chunk-AFXWCSQ4.js.map} +0 -0
- /package/dist/{chunk-UATJCD2T.js.map → chunk-BNZDEU5K.js.map} +0 -0
- /package/dist/{chunk-KYRM3HPP.js.map → chunk-IM5RFEW4.js.map} +0 -0
- /package/dist/{chunk-6YI2D5F5.js.map → chunk-MNSMW4MZ.js.map} +0 -0
- /package/dist/{chunk-KQCP3ZYH.js.map → chunk-OO7Q7XZF.js.map} +0 -0
- /package/dist/{chunk-4BSO3HST.js.map → chunk-RKF4HBBQ.js.map} +0 -0
- /package/dist/{config-TXQJCCVI.js.map → config-S2BDMT4B.js.map} +0 -0
- /package/dist/{expand-KWYGNCKZ.js.map → expand-TONFVT5D.js.map} +0 -0
- /package/dist/{file-vectors-MKXTSGGH.js.map → file-vectors-VREL75MA.js.map} +0 -0
- /package/dist/{index-facts-4MTEHKMN.js.map → index-facts-MBJKBYA3.js.map} +0 -0
- /package/dist/{index-pass-TBDUEZCB.js.map → index-pass-RP23G2CR.js.map} +0 -0
- /package/dist/{install-E3JWINTN.js.map → install-MCJIJMFF.js.map} +0 -0
- /package/dist/{lean-MLTAFS5L.js.map → lean-CBHVW6JM.js.map} +0 -0
- /package/dist/{local-75DJECVR.js.map → local-TH5XCLVJ.js.map} +0 -0
- /package/dist/{local-llm-MECVJTVU.js.map → local-llm-GZREB5DF.js.map} +0 -0
- /package/dist/{memory-PFFVMTCH.js.map → memory-LSZKSF53.js.map} +0 -0
- /package/dist/{operations-STR7S5UO.js.map → operations-BPI633VN.js.map} +0 -0
- /package/dist/{rerank-XXKWDI5Q.js.map → rerank-EPCTSEVP.js.map} +0 -0
- /package/dist/{runtime-SWFWGTQ4.js.map → runtime-W5ACTDFS.js.map} +0 -0
- /package/dist/{summaries-QXWFFDUZ.js.map → summaries-W2J5FCLG.js.map} +0 -0
- /package/dist/{zvec-F73IBWO5.js.map → zvec-LSA2IRAU.js.map} +0 -0
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
sessionSummaries,
|
|
20
20
|
shares,
|
|
21
21
|
validSearchVector
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-VBDM7HC5.js";
|
|
23
23
|
import {
|
|
24
24
|
computeContentHash,
|
|
25
25
|
computeFactHash,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
migrateLegacyNamespace,
|
|
43
43
|
readConfigFile,
|
|
44
44
|
redactSecrets
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-Y4QQML24.js";
|
|
46
46
|
import {
|
|
47
47
|
LocalModelProvider
|
|
48
48
|
} from "./chunk-3QGW53GD.js";
|
|
@@ -3388,4 +3388,4 @@ export {
|
|
|
3388
3388
|
inspectNamespace,
|
|
3389
3389
|
runDoctor
|
|
3390
3390
|
};
|
|
3391
|
-
//# sourceMappingURL=chunk-
|
|
3391
|
+
//# sourceMappingURL=chunk-IM5RFEW4.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readConfigFile,
|
|
3
3
|
setConfigBlock
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Y4QQML24.js";
|
|
5
5
|
import {
|
|
6
6
|
LLAMA_RUNTIME,
|
|
7
7
|
LOCAL_MODELS,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
localModelPath,
|
|
14
14
|
localRuntimeAvailable,
|
|
15
15
|
removeLocalModels
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-NNJSAYHY.js";
|
|
17
17
|
|
|
18
18
|
// src/cli/commands/local-llm.ts
|
|
19
19
|
import { spawn } from "child_process";
|
|
@@ -116,7 +116,15 @@ async function printLocalLlmStatus(cards) {
|
|
|
116
116
|
);
|
|
117
117
|
if (llm?.enabled === false)
|
|
118
118
|
console.log(row("status", warn("disabled in .codebuddy/config.json")));
|
|
119
|
-
if (cards)
|
|
119
|
+
if (!cards) return;
|
|
120
|
+
const pass = cards.lastPass;
|
|
121
|
+
const detail = cards.writer ? `being written by pid ${cards.writer}` : pass && `last pass: ${pass.summarized} written${pass.timedOut ? `, ${pass.timedOut} timed out` : ""}, ${pass.remaining} left (${pass.stoppedBy})`;
|
|
122
|
+
console.log(
|
|
123
|
+
row(
|
|
124
|
+
"cards",
|
|
125
|
+
`${cards.carded} / ${cards.eligible} source files${detail ? pc.dim(` (${detail})`) : ""}`
|
|
126
|
+
)
|
|
127
|
+
);
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
export {
|
|
@@ -125,4 +133,4 @@ export {
|
|
|
125
133
|
removeLocalLlm,
|
|
126
134
|
printLocalLlmStatus
|
|
127
135
|
};
|
|
128
|
-
//# sourceMappingURL=chunk-
|
|
136
|
+
//# sourceMappingURL=chunk-K4XNTYV7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/local-llm.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { confirm, isCancel, spinner } from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfigFile, setConfigBlock } from \"../../core/config-file.js\";\nimport {\n checkLocalModelResources,\n downloadLocalModel,\n formatBytes,\n freeMemory,\n installedLocalModel,\n LLAMA_RUNTIME,\n LOCAL_MODELS,\n type LocalModelSize,\n localModelPath,\n localRuntimeAvailable,\n removeLocalModels,\n} from \"../../llm/local.js\";\nimport type { cardProgress } from \"../../llm/summaries.js\";\n\nconst ok = (text: string) => `${pc.green(\"✓\")} ${text}`;\nconst warn = (text: string) => `${pc.yellow(\"!\")} ${text}`;\nconst row = (label: string, value: string) => ` ${label.padEnd(10)} ${value}`;\n\nexport const LOCAL_LLM_SIZES = Object.keys(LOCAL_MODELS) as LocalModelSize[];\n\n/**\n * `codebuddy models add local-llm`: the explicit opt-in for the local small\n * model. Shows the size, checks disk and RAM, installs the node-llama-cpp\n * runtime when missing (after confirmation), downloads the pinned GGUF with a\n * checksum check, and records the size in `.codebuddy/config.json`.\n */\nexport async function addLocalLlm(\n options: { size?: LocalModelSize; yes?: boolean; interactive?: boolean } = {},\n): Promise<boolean> {\n const spec = LOCAL_MODELS[options.size ?? \"default\"];\n const interactive = options.interactive ?? process.stdin.isTTY === true;\n console.log(\n `${pc.bold(\"Local LLM\")} ${spec.id} ${pc.dim(`(${formatBytes(spec.bytes)} download, ~${formatBytes(spec.ramBytes)} RAM while carding)`)}`,\n );\n const resources = await checkLocalModelResources(spec);\n if (!resources.ok) {\n console.log(warn(resources.reason));\n return false;\n }\n if (freeMemory() < spec.ramBytes) {\n console.log(warn(`only ${formatBytes(freeMemory())} RAM free right now; carding may be slow`));\n }\n if (!(await localRuntimeAvailable())) {\n const install = options.yes\n ? true\n : interactive\n ? await confirm({\n message: `Install the local runtime (${LLAMA_RUNTIME}, ~20–35 MB prebuilt) with npm -g?`,\n initialValue: true,\n })\n : false;\n if (isCancel(install) || !install) {\n console.log(warn(`Runtime missing. Install it with: npm install -g ${LLAMA_RUNTIME}`));\n return false;\n }\n const code = await new Promise<number>((resolve) => {\n const child = spawn(\"npm\", [\"install\", \"-g\", LLAMA_RUNTIME], { stdio: \"inherit\" });\n child.on(\"error\", () => resolve(1));\n child.on(\"close\", (exit) => resolve(exit ?? 1));\n });\n if (code !== 0 || !(await localRuntimeAvailable())) {\n console.log(warn(`Runtime install failed. Run: npm install -g ${LLAMA_RUNTIME}`));\n return false;\n }\n }\n if ((await installedLocalModel(spec.size))?.id !== spec.id) {\n const progress = spinner();\n progress.start(`Downloading ${spec.file}`);\n let shown = 0;\n try {\n await downloadLocalModel(spec, (received, total) => {\n const percent = Math.floor((received / total) * 100);\n if (percent !== shown) {\n shown = percent;\n progress.message(`Downloading ${spec.file} ${percent}%`);\n }\n });\n progress.stop(ok(`${spec.id} verified ${pc.dim(localModelPath(spec))}`));\n } catch (error) {\n progress.stop(warn((error as Error).message));\n return false;\n }\n } else {\n console.log(ok(`${spec.id} already installed`));\n }\n const llm = (await readConfigFile()).llm;\n // A BYOK block stays as it is (the local model is then unused until it is switched).\n if (llm === undefined || llm.provider === \"local\" || llm.enabled === false) {\n await setConfigBlock(\"llm\", { ...llm, enabled: true, provider: \"local\", size: spec.size });\n } else {\n console.log(\n pc.dim(\n ` .codebuddy/config.json uses ${llm.provider}; set llm.provider to \"local\" to use it.`,\n ),\n );\n }\n console.log(\n pc.dim(\n \" Cards are written in the background by `codebuddy serve` or `codebuddy index --cards`.\",\n ),\n );\n return true;\n}\n\nexport async function removeLocalLlm(): Promise<void> {\n const removed = await removeLocalModels();\n const llm = (await readConfigFile()).llm;\n if (llm?.provider === \"local\") await setConfigBlock(\"llm\", { ...llm, enabled: false });\n console.log(\n removed.length > 0\n ? ok(`removed ${removed.join(\", \")}; CodeBuddy falls back to 2.14 behaviour`)\n : pc.dim(\"no local LLM installed\"),\n );\n}\n\nexport async function printLocalLlmStatus(\n cards: Awaited<ReturnType<typeof cardProgress>> | null,\n): Promise<void> {\n const llm = (await readConfigFile()).llm;\n const installed = await installedLocalModel(llm?.size);\n console.log(pc.bold(\"Local LLM\"));\n if (!installed) {\n console.log(row(\"model\", pc.dim(\"not installed (optional: codebuddy models add local-llm)\")));\n return;\n }\n const runtime = await localRuntimeAvailable();\n console.log(row(\"model\", ok(`${installed.id} ${pc.dim(formatBytes(installed.bytes))}`)));\n console.log(\n row(\"runtime\", runtime ? ok(LLAMA_RUNTIME) : warn(`missing: npm install -g ${LLAMA_RUNTIME}`)),\n );\n if (llm?.enabled === false)\n console.log(row(\"status\", warn(\"disabled in .codebuddy/config.json\")));\n if (!cards) return;\n const pass = cards.lastPass;\n const detail = cards.writer\n ? `being written by pid ${cards.writer}`\n : pass &&\n `last pass: ${pass.summarized} written${pass.timedOut ? `, ${pass.timedOut} timed out` : \"\"}, ${pass.remaining} left (${pass.stoppedBy})`;\n console.log(\n row(\n \"cards\",\n `${cards.carded} / ${cards.eligible} source files${detail ? pc.dim(` (${detail})`) : \"\"}`,\n ),\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactLlmKeys
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RGIVHKBH.js";
|
|
4
4
|
import {
|
|
5
5
|
writeAtomic
|
|
6
6
|
} from "./chunk-CG5B3LYG.js";
|
|
7
7
|
import {
|
|
8
8
|
localChatJson
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NNJSAYHY.js";
|
|
10
10
|
|
|
11
11
|
// src/llm/budget.ts
|
|
12
12
|
import { mkdir, readFile } from "fs/promises";
|
|
@@ -224,4 +224,4 @@ export {
|
|
|
224
224
|
coolingDown,
|
|
225
225
|
chatJson
|
|
226
226
|
};
|
|
227
|
-
//# sourceMappingURL=chunk-
|
|
227
|
+
//# sourceMappingURL=chunk-MNSMW4MZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/local.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { createWriteStream } from \"node:fs\";\nimport { mkdir, rename, rm, stat, statfs, utimes, writeFile } from \"node:fs/promises\";\nimport { availableParallelism, freemem, totalmem } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { z } from \"zod\";\nimport { modelCacheDir } from \"../providers/local.js\";\nimport type { ChatJsonRequest, LlmResult } from \"./client.js\";\n\n/**\n * Local text generation (Qwen3 only: 0.6B default, 1.7B \"better\") for the small-model features (intent cards, index\n * facts, query expansion, and optionally rerank): a GGUF model run by\n * node-llama-cpp (llama.cpp bindings; prebuilt for macOS arm64/x64, Linux\n * x64/arm64 and Windows x64; Metal/CUDA/Vulkan when present, CPU otherwise).\n * See ARCHITECTURE.md for why node-llama-cpp and not Cactus.\n *\n * Installed by setup (`codebuddy`, skipped with `--no-local-llm` or\n * `CODEBUDDY_LOCAL_LLM=0`) or `codebuddy models add local-llm`: the runtime with\n * npm, the weights checksum-verified into the shared model cache. Without\n * either, every caller gets `disabled` and keeps 2.14.0 behaviour. Nothing\n * here makes a network call except `downloadLocalModel`.\n *\n * Generation runs on llama.cpp's own native threads (capped at cores − 1),\n * so the MCP event loop keeps answering while a card is written; background\n * passes also yield to foreground work through `waitForForeground`.\n */\n\nexport type LocalModelSize = \"default\" | \"better\";\n\nexport type LocalModelSpec = {\n size: LocalModelSize;\n id: string;\n repo: string;\n revision: string;\n file: string;\n bytes: number;\n sha256: string;\n /** Rough resident memory while loaded, for the free-RAM check. */\n ramBytes: number;\n /** Qwen3 thinks unless told not to; the JSON grammar alone does not stop it. */\n noThink: boolean;\n};\n\nconst GB = 1024 ** 3;\n\n/** Pinned revisions and checksums (Hugging Face LFS sha256). */\nexport const LOCAL_MODELS: Record<LocalModelSize, LocalModelSpec> = {\n default: {\n size: \"default\",\n id: \"qwen3-0.6b-q4_k_m\",\n repo: \"unsloth/Qwen3-0.6B-GGUF\",\n revision: \"50968a4468ef4233ed78cd7c3de230dd1d61a56b\",\n file: \"Qwen3-0.6B-Q4_K_M.gguf\",\n bytes: 396_705_472,\n sha256: \"ac2d97712095a558e31573f62f466a3f9d93990898b0ec79d7c974c1780d524a\",\n ramBytes: 1 * GB,\n noThink: true,\n },\n better: {\n size: \"better\",\n id: \"qwen3-1.7b-q4_k_m\",\n repo: \"unsloth/Qwen3-1.7B-GGUF\",\n revision: \"d7f544eead698dbd1f15126ef60b45a1e1933222\",\n file: \"Qwen3-1.7B-Q4_K_M.gguf\",\n bytes: 1_107_409_472,\n sha256: \"b139949c5bd74937ad8ed8c8cf3d9ffb1e99c866c823204dc42c0d91fa181897\",\n ramBytes: 2.2 * GB,\n noThink: true,\n },\n};\n\n/** Exact runtime version the adapter was tested against. */\nexport const LLAMA_RUNTIME = \"node-llama-cpp@3.22.3\";\n\nexport function localModelPath(spec: LocalModelSpec): string {\n return join(modelCacheDir(), \"gguf\", spec.file);\n}\n\n/** The installed model of `preferred` size, else any installed one (default first). */\nexport async function installedLocalModel(\n preferred?: LocalModelSize,\n): Promise<LocalModelSpec | null> {\n if (process.env.CODEBUDDY_LOCAL_LLM === \"0\") return null;\n const order: LocalModelSize[] = [...(preferred ? [preferred] : []), \"default\", \"better\"];\n for (const size of new Set(order)) {\n const spec = LOCAL_MODELS[size];\n const info = await stat(localModelPath(spec)).catch(() => null);\n if (info?.isFile() && info.size === spec.bytes) return spec;\n }\n return null;\n}\n\n/** Whether the node-llama-cpp runtime can be imported from this install. */\nexport async function localRuntimeAvailable(): Promise<boolean> {\n try {\n await importRuntime();\n return true;\n } catch {\n return false;\n }\n}\n\nexport type DownloadCheck = { ok: true } | { ok: false; reason: string };\n\n/**\n * Whether setup should install the model on its own. A low-end machine (under\n * 4 GB of RAM or a single core) would spend most of a session carding at a few\n * tokens per second; it keeps keyword + vector discovery, and\n * `codebuddy models add local-llm` still works there by hand.\n */\nexport function machineCanCard(): DownloadCheck {\n if (totalmem() < 4 * GB) {\n return { ok: false, reason: `${formatBytes(totalmem())} RAM (setup installs it from 4 GB)` };\n }\n if (availableParallelism() < 2) return { ok: false, reason: \"a single CPU core\" };\n return { ok: true };\n}\n\n/** Free disk (model cache volume) and RAM before a download. */\nexport async function checkLocalModelResources(spec: LocalModelSpec): Promise<DownloadCheck> {\n const directory = modelCacheDir();\n await mkdir(directory, { recursive: true });\n const fs = await statfs(directory).catch(() => null);\n if (fs && fs.bavail * fs.bsize < spec.bytes * 1.1) {\n return {\n ok: false,\n reason: `needs ${formatBytes(spec.bytes * 1.1)} free in ${directory}, ${formatBytes(fs.bavail * fs.bsize)} available`,\n };\n }\n if (totalmem() < spec.ramBytes * 2) {\n return {\n ok: false,\n reason: `needs about ${formatBytes(spec.ramBytes)} of RAM while loaded; this machine has ${formatBytes(totalmem())} in total`,\n };\n }\n return { ok: true };\n}\n\n/**\n * Download the pinned GGUF into the model cache, verifying size and sha256\n * before it is moved into place (a partial or corrupt file is never used).\n */\nexport async function downloadLocalModel(\n spec: LocalModelSpec,\n onProgress?: (received: number, total: number) => void,\n fetchImpl: typeof fetch = fetch,\n): Promise<string> {\n const target = localModelPath(spec);\n await mkdir(dirname(target), { recursive: true });\n const partial = `${target}.partial`;\n const url = `https://huggingface.co/${spec.repo}/resolve/${spec.revision}/${spec.file}`;\n const response = await fetchImpl(url);\n if (!response.ok || !response.body) {\n throw new Error(`download failed: HTTP ${response.status} for ${url}`);\n }\n const hash = createHash(\"sha256\");\n let received = 0;\n const source = Readable.fromWeb(response.body as import(\"node:stream/web\").ReadableStream);\n source.on(\"data\", (chunk: Buffer) => {\n hash.update(chunk);\n received += chunk.length;\n onProgress?.(received, spec.bytes);\n });\n try {\n await pipeline(source, createWriteStream(partial));\n const digest = hash.digest(\"hex\");\n if (received !== spec.bytes || digest !== spec.sha256) {\n throw new Error(\n `checksum mismatch for ${spec.file} (got ${received} bytes, sha256 ${digest.slice(0, 12)}…); not installed`,\n );\n }\n await rename(partial, target);\n } finally {\n await rm(partial, { force: true });\n }\n return target;\n}\n\nexport async function removeLocalModels(): Promise<string[]> {\n const removed: string[] = [];\n for (const spec of Object.values(LOCAL_MODELS)) {\n const path = localModelPath(spec);\n if (await stat(path).catch(() => null)) {\n await rm(path, { force: true });\n removed.push(spec.id);\n }\n }\n return removed;\n}\n\n// ── Generation ──────────────────────────────────────────────────────────\n\n/** Minimal structural types for the dynamically imported runtime. */\ntype Llama = {\n loadModel(options: { modelPath: string }): Promise<LlamaModel>;\n createGrammarForJsonSchema(schema: unknown): Promise<unknown>;\n getGrammarFor(type: \"json\"): Promise<unknown>;\n};\ntype LlamaModel = {\n createContext(options: { contextSize: number; threads: number }): Promise<LlamaContext>;\n dispose(): Promise<void>;\n};\ntype LlamaContext = { getSequence(): unknown; dispose(): Promise<void> };\ntype ChatSession = {\n prompt(\n text: string,\n options: {\n grammar?: unknown;\n maxTokens: number;\n temperature: number;\n budgets?: { thoughtTokens: number };\n signal?: AbortSignal;\n stopOnAbortSignal?: boolean;\n },\n ): Promise<string>;\n resetChatHistory(): void;\n setChatHistory?(history: unknown): void;\n dispose(options?: { disposeSequence?: boolean }): void;\n};\ntype Runtime = {\n getLlama(options?: { gpu?: \"auto\" | false }): Promise<Llama>;\n LlamaChatSession: new (options: {\n contextSequence: unknown;\n autoDisposeSequence?: boolean;\n systemPrompt?: string;\n }) => ChatSession;\n};\n\ntype Loaded = {\n spec: LocalModelSpec;\n llama: Llama;\n model: LlamaModel;\n context: LlamaContext;\n sequence: unknown;\n runtime: Runtime;\n};\n\nlet loading: Promise<Loaded> | null = null;\nlet loaded: Loaded | null = null;\n/** One generation at a time: a single context sequence is shared. */\nlet queue: Promise<unknown> = Promise.resolve();\nconst grammars = new Map<unknown, Promise<unknown>>();\n\nasync function importRuntime(): Promise<Runtime> {\n // A variable specifier: not a dependency, never bundled, resolved at run time.\n const specifier = process.env.CODEBUDDY_LLAMA_RUNTIME ?? \"node-llama-cpp\";\n return (await import(specifier)) as Runtime;\n}\n\n/** Context large enough for the bounded card/fact prompts (~1k tokens in, ≤ 400 out). */\nconst CONTEXT_TOKENS = 4096;\n\n/** Physical cores minus one (logical on SMT machines: a ceiling, not an exact count). */\nexport function generationThreads(): number {\n const configured = Number(process.env.CODEBUDDY_LLM_THREADS);\n if (Number.isInteger(configured) && configured > 0) return configured;\n return Math.max(1, availableParallelism() - 1);\n}\n\nasync function load(spec: LocalModelSpec): Promise<Loaded> {\n if (loaded?.spec.id === spec.id) return loaded;\n if (!loading) {\n loading = (async () => {\n const runtime = await importRuntime();\n const llama = await runtime.getLlama({ gpu: \"auto\" });\n const model = await llama.loadModel({ modelPath: localModelPath(spec) });\n const context = await model.createContext({\n contextSize: CONTEXT_TOKENS,\n threads: generationThreads(),\n });\n loaded = { spec, llama, model, context, sequence: context.getSequence(), runtime };\n return loaded;\n })().finally(() => {\n loading = null;\n });\n }\n return loading;\n}\n\n/**\n * The model leaves memory this long after its last generation, so a finished\n * card pass does not keep ~1 GB resident in `codebuddy serve` for the rest of\n * the session. The next pass (or a warm-up) loads it again in under a second.\n */\nexport const IDLE_UNLOAD_MS = 60_000;\nlet idleTimer: NodeJS.Timeout | null = null;\nlet running = 0;\n\nfunction scheduleUnload(): void {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => void unloadLocalModel(), IDLE_UNLOAD_MS);\n // Never keeps the process alive on its own.\n idleTimer.unref();\n}\n\n/** Free the model and its context now (idle timer, `serve` shutdown). Never throws. */\nexport async function unloadLocalModel(): Promise<void> {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = null;\n const current = loaded;\n if (!current || running > 0) return;\n loaded = null;\n grammars.clear();\n await current.context.dispose().catch(() => {});\n await current.model.dispose().catch(() => {});\n}\n\n/** True once the model is resident in this process (query expansion only runs then). */\nexport function isLocalModelWarm(): boolean {\n return loaded !== null;\n}\n\n/** Load the model now (background warm-up); resolves false when it cannot load. */\nexport async function warmLocalModel(spec: LocalModelSpec): Promise<boolean> {\n try {\n await load(spec);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * `chatJson` for the local backend: JSON constrained by a grammar built from\n * the request's zod schema (plain JSON grammar if the schema cannot be\n * converted), then validated with zod. Never throws.\n */\nexport async function localChatJson<T>(\n spec: LocalModelSpec,\n request: ChatJsonRequest<T>,\n): Promise<LlmResult<T>> {\n const started = Date.now();\n const fail = (reason: \"timeout\" | \"invalid\" | \"disabled\", detail: string): LlmResult<T> => ({\n ok: false,\n reason,\n detail: detail.slice(0, 300),\n latencyMs: Date.now() - started,\n });\n let model: Loaded;\n try {\n model = await withDeadline(load(spec), request.deadlineMs);\n } catch (error) {\n return (error as Error).name === \"TimeoutError\"\n ? fail(\"timeout\", \"model still loading\")\n : fail(\"disabled\", `local model unavailable: ${(error as Error).message}`);\n }\n const run = async (): Promise<LlmResult<T>> => {\n running++;\n try {\n return await generate();\n } finally {\n running--;\n scheduleUnload();\n }\n };\n const generate = async (): Promise<LlmResult<T>> => {\n // The idle unload may have run while this call waited in the queue.\n if (!loaded) model = await load(spec);\n const remaining = request.deadlineMs - (Date.now() - started);\n if (remaining <= 0) return fail(\"timeout\", `no answer within ${request.deadlineMs} ms`);\n const grammar = await grammarFor(model.llama, request.jsonSchema ?? request.schema);\n const session = new model.runtime.LlamaChatSession({\n contextSequence: model.sequence,\n autoDisposeSequence: false,\n systemPrompt: request.system,\n });\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), remaining);\n try {\n const text = await session.prompt(`${spec.noThink ? \"/no_think\\n\" : \"\"}${request.user}`, {\n grammar,\n maxTokens: request.maxTokens,\n temperature: 0,\n ...(spec.noThink ? { budgets: { thoughtTokens: 0 } } : {}),\n signal: controller.signal,\n stopOnAbortSignal: true,\n });\n if (controller.signal.aborted) {\n return fail(\"timeout\", `no answer within ${request.deadlineMs} ms`);\n }\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return fail(\"invalid\", `output is not JSON: ${text.slice(0, 120)}`);\n }\n const parsed = request.schema.safeParse(value);\n if (!parsed.success)\n return fail(\"invalid\", `output failed validation: ${text.slice(0, 120)}`);\n return {\n ok: true,\n value: parsed.data,\n model: spec.id,\n latencyMs: Date.now() - started,\n tokens: Math.ceil((request.system.length + request.user.length + text.length) / 4),\n cached: false,\n };\n } catch (error) {\n return controller.signal.aborted\n ? fail(\"timeout\", `no answer within ${request.deadlineMs} ms`)\n : fail(\"invalid\", String((error as Error)?.message ?? error));\n } finally {\n clearTimeout(timer);\n session.dispose({ disposeSequence: false });\n }\n };\n const result = queue.then(run, run);\n queue = result.catch(() => undefined);\n return result;\n}\n\nasync function grammarFor(llama: Llama, schema: z.ZodType | object): Promise<unknown> {\n let grammar = grammars.get(schema);\n if (!grammar) {\n grammar = (async () => {\n try {\n const json =\n schema instanceof z.ZodType\n ? z.toJSONSchema(schema, { io: \"input\", unrepresentable: \"any\" })\n : schema;\n return await llama.createGrammarForJsonSchema(stripSchemaMeta(json));\n } catch {\n return llama.getGrammarFor(\"json\");\n }\n })();\n grammars.set(schema, grammar);\n }\n return grammar;\n}\n\n/** llama.cpp's schema grammar wants plain structure: no `$schema`, no defaults. */\nfunction stripSchemaMeta(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripSchemaMeta);\n if (!value || typeof value !== \"object\") return value;\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === \"$schema\" || key === \"default\" || key === \"additionalProperties\") continue;\n out[key] = stripSchemaMeta(child);\n }\n return out;\n}\n\nfunction withDeadline<T>(promise: Promise<T>, ms: number): Promise<T> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(\n () => reject(Object.assign(new Error(\"deadline\"), { name: \"TimeoutError\" })),\n ms,\n );\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\n// ── Foreground yield ────────────────────────────────────────────────────\n\n/** A prompt hook or MCP tool call touched this within the window: background work waits. */\nconst FOREGROUND_WINDOW_MS = 2_000;\nconst FOREGROUND_MAX_WAIT_MS = 15_000;\n\nfunction foregroundPath(root: string): string {\n return join(root, \".codebuddy\", \"cache\", \"foreground\");\n}\n\n/** Record that a hook or tool call is running (cheap: one utimes). Never throws. */\nexport async function markForeground(root: string): Promise<void> {\n const path = foregroundPath(root);\n const now = new Date();\n try {\n await utimes(path, now, now);\n } catch {\n await mkdir(dirname(path), { recursive: true }).catch(() => {});\n await writeFile(path, \"\").catch(() => {});\n }\n}\n\n/** Wait (bounded) until no foreground work was marked within the window. */\nexport async function waitForForeground(root: string, signal?: AbortSignal): Promise<void> {\n const until = Date.now() + FOREGROUND_MAX_WAIT_MS;\n while (Date.now() < until && !signal?.aborted) {\n const info = await stat(foregroundPath(root)).catch(() => null);\n if (!info || Date.now() - info.mtimeMs > FOREGROUND_WINDOW_MS) return;\n await new Promise((resolve) => setTimeout(resolve, 250));\n }\n}\n\n// ── Status ──────────────────────────────────────────────────────────────\n\nexport type LocalModelStatus = {\n runtime: boolean;\n installed: LocalModelSpec | null;\n path: string | null;\n};\n\nexport async function localModelStatus(preferred?: LocalModelSize): Promise<LocalModelStatus> {\n const installed = await installedLocalModel(preferred);\n return {\n runtime: await localRuntimeAvailable(),\n installed,\n path: installed ? localModelPath(installed) : null,\n };\n}\n\nexport function formatBytes(bytes: number): string {\n return bytes >= GB ? `${(bytes / GB).toFixed(1)} GB` : `${Math.round(bytes / 1024 ** 2)} MB`;\n}\n\n/** Free RAM now (for the `models add` warning; the hard check uses total RAM). */\nexport function freeMemory(): number {\n return freemem();\n}\n"],"mappings":"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","names":[]}
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
readBoundedSource,
|
|
32
32
|
syncFileVectors,
|
|
33
33
|
taskTerms
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-4DTO2E4Y.js";
|
|
35
35
|
import {
|
|
36
36
|
extractSymbolTable,
|
|
37
37
|
supportsSymbols
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
isEligibleMemory,
|
|
44
44
|
lexicalTerms,
|
|
45
45
|
termOverlap
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-VBDM7HC5.js";
|
|
47
47
|
import {
|
|
48
48
|
generateEntityId
|
|
49
49
|
} from "./chunk-EMWGLKPR.js";
|
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
loadPlanPolicy,
|
|
63
63
|
loadRuntimeConfig,
|
|
64
64
|
readConfigFile
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-Y4QQML24.js";
|
|
66
66
|
import {
|
|
67
67
|
assertNoSymlinkBetween,
|
|
68
68
|
composeMarkdown,
|
|
@@ -3850,7 +3850,7 @@ async function openHookSemantics(repositoryRoot) {
|
|
|
3850
3850
|
const connect = async () => {
|
|
3851
3851
|
const config = await loadRuntimeConfig(repositoryRoot, { requireDatabase: false });
|
|
3852
3852
|
if (!config.postgresUrl) return null;
|
|
3853
|
-
const { createRuntime } = await import("./operations-
|
|
3853
|
+
const { createRuntime } = await import("./operations-BPI633VN.js");
|
|
3854
3854
|
const opening = createRuntime(config, {
|
|
3855
3855
|
repositoryRoot,
|
|
3856
3856
|
startWorker: false,
|
|
@@ -4180,7 +4180,7 @@ async function runStageHook(input) {
|
|
|
4180
4180
|
}
|
|
4181
4181
|
async function llmMemoryOptions(repositoryRoot) {
|
|
4182
4182
|
try {
|
|
4183
|
-
return await (await import("./memory-
|
|
4183
|
+
return await (await import("./memory-LSZKSF53.js")).llmCaptureOptions(repositoryRoot);
|
|
4184
4184
|
} catch {
|
|
4185
4185
|
return {};
|
|
4186
4186
|
}
|
|
@@ -4275,7 +4275,7 @@ async function runSyncHook(repositoryRoot, options = {}) {
|
|
|
4275
4275
|
await writeFile(dirty, "").catch(() => void 0);
|
|
4276
4276
|
return null;
|
|
4277
4277
|
}
|
|
4278
|
-
const { createRuntime } = await import("./operations-
|
|
4278
|
+
const { createRuntime } = await import("./operations-BPI633VN.js");
|
|
4279
4279
|
const runtime = await createRuntime(config, { repositoryRoot }).catch(async (error) => {
|
|
4280
4280
|
await rm5(lock, { recursive: true, force: true });
|
|
4281
4281
|
throw error;
|
|
@@ -4733,4 +4733,4 @@ export {
|
|
|
4733
4733
|
readCaptureTurn,
|
|
4734
4734
|
renderContextBlock
|
|
4735
4735
|
};
|
|
4736
|
-
//# sourceMappingURL=chunk-
|
|
4736
|
+
//# sourceMappingURL=chunk-OO7Q7XZF.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runLeanHook
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AFXWCSQ4.js";
|
|
4
4
|
import {
|
|
5
5
|
CLIENT_ADAPTERS,
|
|
6
6
|
CLIENT_IDS,
|
|
@@ -21,16 +21,16 @@ import {
|
|
|
21
21
|
runResetHook,
|
|
22
22
|
runResumeHook,
|
|
23
23
|
runStageHook
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-OO7Q7XZF.js";
|
|
25
25
|
import {
|
|
26
26
|
hookRoot
|
|
27
27
|
} from "./chunk-TGFTKWOR.js";
|
|
28
28
|
import {
|
|
29
29
|
indexRepository
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-4DTO2E4Y.js";
|
|
31
31
|
import {
|
|
32
32
|
resolveNamespaceFrom
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-Y4QQML24.js";
|
|
34
34
|
import {
|
|
35
35
|
writeAtomic
|
|
36
36
|
} from "./chunk-CG5B3LYG.js";
|
|
@@ -1662,4 +1662,4 @@ export {
|
|
|
1662
1662
|
setHooks,
|
|
1663
1663
|
detectClient
|
|
1664
1664
|
};
|
|
1665
|
-
//# sourceMappingURL=chunk-
|
|
1665
|
+
//# sourceMappingURL=chunk-PZ4EBFIA.js.map
|