@vibgrate/cli 2026.722.2 → 2026.727.2

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.
Files changed (145) hide show
  1. package/DOCS.md +418 -213
  2. package/README.md +34 -8
  3. package/dist/baseline-TG4ATZGZ.js +8 -0
  4. package/dist/{baseline-BD3A7EXD.js.map → baseline-TG4ATZGZ.js.map} +1 -1
  5. package/dist/chunk-2MBL43EJ.js +82 -0
  6. package/dist/chunk-2MBL43EJ.js.map +1 -0
  7. package/dist/chunk-2XQDMLKB.js +465 -0
  8. package/dist/chunk-2XQDMLKB.js.map +1 -0
  9. package/dist/{chunk-PY3DNX5H.js → chunk-3Q7QBWFW.js} +13 -2
  10. package/dist/chunk-3Q7QBWFW.js.map +1 -0
  11. package/dist/chunk-3V24O47U.js +478 -0
  12. package/dist/chunk-3V24O47U.js.map +1 -0
  13. package/dist/chunk-5I4VSBWQ.js +764 -0
  14. package/dist/chunk-5I4VSBWQ.js.map +1 -0
  15. package/dist/{chunk-WNIIKCNF.js → chunk-6ABXHZRN.js} +59 -311
  16. package/dist/chunk-6ABXHZRN.js.map +1 -0
  17. package/dist/chunk-6AYDFFP5.js +136 -0
  18. package/dist/chunk-6AYDFFP5.js.map +1 -0
  19. package/dist/chunk-6UQMXIAG.js +122 -0
  20. package/dist/chunk-6UQMXIAG.js.map +1 -0
  21. package/dist/chunk-7N4Y3E47.js +108 -0
  22. package/dist/chunk-7N4Y3E47.js.map +1 -0
  23. package/dist/chunk-BPF3YX2U.js +64 -0
  24. package/dist/chunk-BPF3YX2U.js.map +1 -0
  25. package/dist/chunk-BWPBB45M.js +88 -0
  26. package/dist/chunk-BWPBB45M.js.map +1 -0
  27. package/dist/{chunk-6CXTPC74.js → chunk-CY4WKXB2.js} +27 -6
  28. package/dist/chunk-CY4WKXB2.js.map +1 -0
  29. package/dist/chunk-DGUM43GV.js +10 -0
  30. package/dist/chunk-DGUM43GV.js.map +1 -0
  31. package/dist/{chunk-NONYJLOJ.js → chunk-EX4PQT6W.js} +3 -3
  32. package/dist/{chunk-NONYJLOJ.js.map → chunk-EX4PQT6W.js.map} +1 -1
  33. package/dist/chunk-IS7VTH2Q.js +627 -0
  34. package/dist/chunk-IS7VTH2Q.js.map +1 -0
  35. package/dist/chunk-IZDH67DX.js +289 -0
  36. package/dist/chunk-IZDH67DX.js.map +1 -0
  37. package/dist/chunk-J4RFRKZH.js +2496 -0
  38. package/dist/chunk-J4RFRKZH.js.map +1 -0
  39. package/dist/chunk-J7LKEB2R.js +51 -0
  40. package/dist/chunk-J7LKEB2R.js.map +1 -0
  41. package/dist/chunk-JIBOJTGS.js +313 -0
  42. package/dist/chunk-JIBOJTGS.js.map +1 -0
  43. package/dist/chunk-K3MZIVZW.js +88 -0
  44. package/dist/chunk-K3MZIVZW.js.map +1 -0
  45. package/dist/chunk-K7REHDQS.js +776 -0
  46. package/dist/chunk-K7REHDQS.js.map +1 -0
  47. package/dist/{chunk-2O5YZVZV.js → chunk-KCKYKDMS.js} +23 -19
  48. package/dist/chunk-KCKYKDMS.js.map +1 -0
  49. package/dist/{chunk-3MXNNBLI.js → chunk-KNELIQJO.js} +1647 -2042
  50. package/dist/chunk-KNELIQJO.js.map +1 -0
  51. package/dist/chunk-KSBHGWRV.js +613 -0
  52. package/dist/chunk-KSBHGWRV.js.map +1 -0
  53. package/dist/chunk-LKVMI67M.js +1695 -0
  54. package/dist/chunk-LKVMI67M.js.map +1 -0
  55. package/dist/chunk-NDMDSPFX.js +69 -0
  56. package/dist/chunk-NDMDSPFX.js.map +1 -0
  57. package/dist/{chunk-CS37OBE3.js → chunk-OFUC6RYN.js} +791 -783
  58. package/dist/chunk-OFUC6RYN.js.map +1 -0
  59. package/dist/chunk-OOIG3RUM.js +276 -0
  60. package/dist/chunk-OOIG3RUM.js.map +1 -0
  61. package/dist/chunk-PMYWZRRS.js +62 -0
  62. package/dist/chunk-PMYWZRRS.js.map +1 -0
  63. package/dist/chunk-PXHNTC6D.js +382 -0
  64. package/dist/chunk-PXHNTC6D.js.map +1 -0
  65. package/dist/{chunk-I7GY7MVN.js → chunk-RNP3SMTV.js} +60 -12
  66. package/dist/chunk-RNP3SMTV.js.map +1 -0
  67. package/dist/chunk-TCDAZZNP.js +843 -0
  68. package/dist/chunk-TCDAZZNP.js.map +1 -0
  69. package/dist/{chunk-5BDHQ7DD.js → chunk-WGUL45AV.js} +24 -17
  70. package/dist/chunk-WGUL45AV.js.map +1 -0
  71. package/dist/cli.d.ts +3 -0
  72. package/dist/cli.js +3373 -617
  73. package/dist/cli.js.map +1 -1
  74. package/dist/execution-env-ZU45JZ4G.js +4 -0
  75. package/dist/execution-env-ZU45JZ4G.js.map +1 -0
  76. package/dist/federation-SZWZIFZ7.js +7 -0
  77. package/dist/federation-SZWZIFZ7.js.map +1 -0
  78. package/dist/{fs-IPY4FJKH.js → fs-B5HZ2MIU.js} +3 -2
  79. package/dist/fs-B5HZ2MIU.js.map +1 -0
  80. package/dist/{fs-KCABDURV.js → fs-O5IQYXHO.js} +3 -2
  81. package/dist/fs-O5IQYXHO.js.map +1 -0
  82. package/dist/git-ref-XDXB6JP5.js +4 -0
  83. package/dist/git-ref-XDXB6JP5.js.map +1 -0
  84. package/dist/graph-backend-73URGTFY.js +11 -0
  85. package/dist/graph-backend-73URGTFY.js.map +1 -0
  86. package/dist/index.d.ts +472 -137
  87. package/dist/index.js +15 -7
  88. package/dist/index.js.map +1 -1
  89. package/dist/{interactive-A4DISSIW.js → interactive-372NLI5C.js} +186 -226
  90. package/dist/interactive-372NLI5C.js.map +1 -0
  91. package/dist/llm-host-7GWDO6IX.js +9 -0
  92. package/dist/llm-host-7GWDO6IX.js.map +1 -0
  93. package/dist/load-I333TGNI.js +8 -0
  94. package/dist/load-I333TGNI.js.map +1 -0
  95. package/dist/local-runtime-5O2NN3GA.js +5 -0
  96. package/dist/local-runtime-5O2NN3GA.js.map +1 -0
  97. package/dist/mcp-tools-I7JK3S2M.js +4 -0
  98. package/dist/{mcp-tools-I6PME3AV.js.map → mcp-tools-I7JK3S2M.js.map} +1 -1
  99. package/dist/model-execution-profile-TFBKCNJG.js +4 -0
  100. package/dist/model-execution-profile-TFBKCNJG.js.map +1 -0
  101. package/dist/model-orchestrator-TVONAUPS.js +9 -0
  102. package/dist/model-orchestrator-TVONAUPS.js.map +1 -0
  103. package/dist/parse-worker.d.ts +1 -1
  104. package/dist/parse-worker.js +2 -1
  105. package/dist/parse-worker.js.map +1 -1
  106. package/dist/paths-2RAH3GME.js +6 -0
  107. package/dist/paths-2RAH3GME.js.map +1 -0
  108. package/dist/resolve-gguf-VPL4YQ6J.js +8 -0
  109. package/dist/resolve-gguf-VPL4YQ6J.js.map +1 -0
  110. package/dist/runtime-session-JRKCQUHY.js +18 -0
  111. package/dist/runtime-session-JRKCQUHY.js.map +1 -0
  112. package/dist/session-ITPYQ5XI.js +11 -0
  113. package/dist/{session-POJUDFPH.js.map → session-ITPYQ5XI.js.map} +1 -1
  114. package/dist/session-store-WFBX7HXL.js +4 -0
  115. package/dist/{session-store-W5RZZHA3.js.map → session-store-WFBX7HXL.js.map} +1 -1
  116. package/dist/{stream-json-Q2JGWPHB.js → stream-json-SLMDKLXP.js} +17 -6
  117. package/dist/stream-json-SLMDKLXP.js.map +1 -0
  118. package/dist/{types-Jl6RJ175.d.ts → types-7AHBUbFm.d.ts} +8 -2
  119. package/dist/ui-Q6DJ3GCU.js +5 -0
  120. package/dist/ui-Q6DJ3GCU.js.map +1 -0
  121. package/dist/vgd-7JV5KCNJ.js +17 -0
  122. package/dist/vgd-7JV5KCNJ.js.map +1 -0
  123. package/package.json +9 -6
  124. package/dist/baseline-BD3A7EXD.js +0 -7
  125. package/dist/chunk-2O5YZVZV.js.map +0 -1
  126. package/dist/chunk-3MXNNBLI.js.map +0 -1
  127. package/dist/chunk-5BDHQ7DD.js.map +0 -1
  128. package/dist/chunk-6CXTPC74.js.map +0 -1
  129. package/dist/chunk-CS37OBE3.js.map +0 -1
  130. package/dist/chunk-GGJZA3Q6.js +0 -961
  131. package/dist/chunk-GGJZA3Q6.js.map +0 -1
  132. package/dist/chunk-I7GY7MVN.js.map +0 -1
  133. package/dist/chunk-JBXNQCGE.js +0 -484
  134. package/dist/chunk-JBXNQCGE.js.map +0 -1
  135. package/dist/chunk-PY3DNX5H.js.map +0 -1
  136. package/dist/chunk-WNIIKCNF.js.map +0 -1
  137. package/dist/fs-IPY4FJKH.js.map +0 -1
  138. package/dist/fs-KCABDURV.js.map +0 -1
  139. package/dist/interactive-A4DISSIW.js.map +0 -1
  140. package/dist/mcp-tools-I6PME3AV.js +0 -3
  141. package/dist/session-POJUDFPH.js +0 -6
  142. package/dist/session-store-W5RZZHA3.js +0 -3
  143. package/dist/stream-json-Q2JGWPHB.js.map +0 -1
  144. package/dist/ui-HOVOPWMX.js +0 -4
  145. package/dist/ui-HOVOPWMX.js.map +0 -1
@@ -0,0 +1,382 @@
1
+ import { acquireHostSession, generateOnSession } from './chunk-K7REHDQS.js';
2
+ import { annotateUnknownIdentifiers } from './chunk-JIBOJTGS.js';
3
+ import { vibgrateRuntimeDir } from './chunk-BWPBB45M.js';
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
+ import * as net from 'net';
7
+
8
+ // src/runtime/llm-host/binding.ts
9
+ async function generateWithLlamaBinding(input) {
10
+ const lib = input.lib;
11
+ if (!lib || typeof lib.getLlama !== "function") {
12
+ throw new Error("llm-host: invalid node-llama-cpp module (getLlama missing)");
13
+ }
14
+ const llama = await lib.getLlama();
15
+ const model = await llama.loadModel({ modelPath: input.modelPath });
16
+ const ctx = await model.createContext();
17
+ const { LlamaChatSession } = lib;
18
+ if (typeof LlamaChatSession !== "function") {
19
+ throw new Error("llm-host: LlamaChatSession missing from node-llama-cpp module");
20
+ }
21
+ const chat = new LlamaChatSession({ contextSequence: ctx.getSequence() });
22
+ const prompt = input.messages.map((m) => `${m.role}: ${m.content}`).join("\n\n");
23
+ const temperature = input.opts?.temperature ?? 0;
24
+ const maxTokens = input.opts?.maxTokens;
25
+ const promptOpts = { temperature };
26
+ if (typeof maxTokens === "number") promptOpts.maxTokens = maxTokens;
27
+ if (input.opts?.grammar) {
28
+ promptOpts.grammar = input.opts.grammar;
29
+ }
30
+ const text = await chat.prompt(prompt, promptOpts);
31
+ return typeof text === "string" ? text : String(text ?? "");
32
+ }
33
+
34
+ // src/runtime/llm-host/embedded.ts
35
+ var EmbeddedLlmHost = class {
36
+ isolation = "embedded";
37
+ modelRef = null;
38
+ loaded = false;
39
+ binding = null;
40
+ preferGrammar = false;
41
+ lastReport = null;
42
+ /** Attach the dynamically loaded node-llama-cpp module. */
43
+ setBinding(lib) {
44
+ this.binding = lib;
45
+ }
46
+ /** Hint from MEP: attempt constrained decoding when grammar is supplied. */
47
+ setPreferGrammar(on) {
48
+ this.preferGrammar = on;
49
+ }
50
+ /** Last generate metrics (KV plan, draft accept, warm start). */
51
+ lastGenerateReport() {
52
+ return this.lastReport;
53
+ }
54
+ async load(modelRef) {
55
+ this.modelRef = modelRef;
56
+ this.loaded = true;
57
+ if (this.binding) {
58
+ await acquireHostSession(this.binding, modelRef);
59
+ }
60
+ }
61
+ async unload() {
62
+ this.modelRef = null;
63
+ this.loaded = false;
64
+ this.lastReport = null;
65
+ }
66
+ supportsConstrainedDecoding() {
67
+ return this.preferGrammar && this.binding != null;
68
+ }
69
+ memoryReport() {
70
+ return {
71
+ isolation: this.isolation,
72
+ modelRef: this.modelRef,
73
+ loaded: this.loaded
74
+ };
75
+ }
76
+ async generate(messages, opts = {}) {
77
+ if (!this.loaded || !this.modelRef) {
78
+ throw new Error("llm-host: no model loaded \u2014 orchestrator must call load() after resolve/install");
79
+ }
80
+ if (!this.binding) {
81
+ throw new Error(
82
+ "llm-host: node-llama-cpp binding not attached \u2014 run `vg models install` for the llama-cpp provider, then retry"
83
+ );
84
+ }
85
+ try {
86
+ const session = await acquireHostSession(this.binding, this.modelRef);
87
+ const report = await generateOnSession(session, messages, {
88
+ grammar: opts.grammar,
89
+ requireGrammar: opts.requireGrammar,
90
+ identifierTrie: opts.identifierTrie,
91
+ annotateUnknownIdentifiers: opts.annotateUnknownIdentifiers,
92
+ draftCandidates: opts.draftCandidates,
93
+ maxTokens: opts.maxTokens,
94
+ temperature: opts.temperature,
95
+ promptSegments: opts.promptSegments
96
+ });
97
+ this.lastReport = report;
98
+ return {
99
+ text: report.text,
100
+ model: report.model,
101
+ isolation: report.isolation,
102
+ constrained: report.constrained || !!(opts.grammar && this.preferGrammar),
103
+ unknownIdentifiers: report.unknownIdentifiers
104
+ };
105
+ } catch {
106
+ let text = await generateWithLlamaBinding({
107
+ lib: this.binding,
108
+ modelPath: this.modelRef,
109
+ messages,
110
+ opts
111
+ });
112
+ let unknownIdentifiers;
113
+ if (opts.identifierTrie && opts.annotateUnknownIdentifiers !== false) {
114
+ const ann = annotateUnknownIdentifiers(text, opts.identifierTrie);
115
+ text = ann.text;
116
+ unknownIdentifiers = ann.unknown.length ? ann.unknown : void 0;
117
+ }
118
+ return {
119
+ text,
120
+ model: this.modelRef,
121
+ isolation: this.isolation,
122
+ constrained: !!(opts.grammar && this.supportsConstrainedDecoding()),
123
+ unknownIdentifiers
124
+ };
125
+ }
126
+ }
127
+ };
128
+ var LLM_HOST_IPC_SCHEMA = "llm-host-ipc/0";
129
+ function startProcessHostServer(options) {
130
+ const state = {
131
+ modelRef: null,
132
+ loaded: false,
133
+ binding: options.binding ?? null
134
+ };
135
+ try {
136
+ if (fs.existsSync(options.socketPath)) fs.unlinkSync(options.socketPath);
137
+ } catch {
138
+ }
139
+ fs.mkdirSync(path.dirname(options.socketPath), { recursive: true });
140
+ return new Promise((resolve, reject) => {
141
+ const server = net.createServer((socket) => {
142
+ let buf = "";
143
+ socket.setEncoding("utf8");
144
+ socket.on("data", (chunk) => {
145
+ buf += chunk;
146
+ let nl;
147
+ while ((nl = buf.indexOf("\n")) >= 0) {
148
+ const line = buf.slice(0, nl).trim();
149
+ buf = buf.slice(nl + 1);
150
+ if (!line) continue;
151
+ void handleLine(line, state, (resp) => {
152
+ socket.write(`${JSON.stringify(resp)}
153
+ `);
154
+ });
155
+ }
156
+ });
157
+ });
158
+ server.once("error", reject);
159
+ server.listen(options.socketPath, () => {
160
+ options.onListen?.(options.socketPath);
161
+ resolve({
162
+ close: () => new Promise((res, rej) => {
163
+ server.close((err) => {
164
+ try {
165
+ if (fs.existsSync(options.socketPath)) fs.unlinkSync(options.socketPath);
166
+ } catch {
167
+ }
168
+ if (err) rej(err);
169
+ else res();
170
+ });
171
+ })
172
+ });
173
+ });
174
+ });
175
+ }
176
+ async function handleLine(line, state, reply) {
177
+ let req;
178
+ try {
179
+ req = JSON.parse(line);
180
+ } catch {
181
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: "?", ok: false, error: "invalid JSON" });
182
+ return;
183
+ }
184
+ if (req.v !== LLM_HOST_IPC_SCHEMA) {
185
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: false, error: `unsupported schema ${String(req.v)}` });
186
+ return;
187
+ }
188
+ try {
189
+ switch (req.op) {
190
+ case "ping":
191
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: "ping" });
192
+ return;
193
+ case "load":
194
+ state.modelRef = req.modelRef;
195
+ state.loaded = true;
196
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: "load" });
197
+ return;
198
+ case "unload":
199
+ state.modelRef = null;
200
+ state.loaded = false;
201
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: "unload" });
202
+ return;
203
+ case "memory":
204
+ reply({
205
+ v: LLM_HOST_IPC_SCHEMA,
206
+ id: req.id,
207
+ ok: true,
208
+ op: "memory",
209
+ report: { isolation: "process", modelRef: state.modelRef, loaded: state.loaded }
210
+ });
211
+ return;
212
+ case "capabilities":
213
+ reply({
214
+ v: LLM_HOST_IPC_SCHEMA,
215
+ id: req.id,
216
+ ok: true,
217
+ op: "capabilities",
218
+ constrainedDecoding: state.binding != null,
219
+ isolation: "process"
220
+ });
221
+ return;
222
+ case "generate": {
223
+ if (!state.loaded || !state.modelRef) {
224
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: false, error: "no model loaded" });
225
+ return;
226
+ }
227
+ if (!state.binding) {
228
+ reply({
229
+ v: LLM_HOST_IPC_SCHEMA,
230
+ id: req.id,
231
+ ok: false,
232
+ error: "binding not loaded in host process \u2014 start host after vg models install"
233
+ });
234
+ return;
235
+ }
236
+ let result;
237
+ try {
238
+ const session = await acquireHostSession(state.binding, state.modelRef);
239
+ const report = await generateOnSession(session, req.messages, {
240
+ grammar: req.opts?.grammar,
241
+ requireGrammar: req.opts?.requireGrammar,
242
+ identifierTrie: req.opts?.identifierTrie,
243
+ annotateUnknownIdentifiers: req.opts?.annotateUnknownIdentifiers,
244
+ draftCandidates: req.opts?.draftCandidates,
245
+ maxTokens: req.opts?.maxTokens,
246
+ temperature: req.opts?.temperature,
247
+ promptSegments: req.opts?.promptSegments
248
+ });
249
+ result = {
250
+ text: report.text,
251
+ model: state.modelRef,
252
+ isolation: "process",
253
+ constrained: report.constrained,
254
+ unknownIdentifiers: report.unknownIdentifiers
255
+ };
256
+ } catch {
257
+ const text = await generateWithLlamaBinding({
258
+ lib: state.binding,
259
+ modelPath: state.modelRef,
260
+ messages: req.messages,
261
+ opts: req.opts
262
+ });
263
+ result = {
264
+ text,
265
+ model: state.modelRef,
266
+ isolation: "process",
267
+ constrained: !!(req.opts?.grammar && state.binding)
268
+ };
269
+ }
270
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: "generate", result });
271
+ return;
272
+ }
273
+ default:
274
+ reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: false, error: "unknown op" });
275
+ }
276
+ } catch (e) {
277
+ reply({
278
+ v: LLM_HOST_IPC_SCHEMA,
279
+ id: req.id,
280
+ ok: false,
281
+ error: e instanceof Error ? e.message : String(e)
282
+ });
283
+ }
284
+ }
285
+ var ProcessLlmHost = class {
286
+ constructor(socketPath) {
287
+ this.socketPath = socketPath;
288
+ }
289
+ socketPath;
290
+ isolation = "process";
291
+ seq = 0;
292
+ getEndpoint() {
293
+ return this.socketPath;
294
+ }
295
+ supportsConstrainedDecoding() {
296
+ return true;
297
+ }
298
+ async load(modelRef) {
299
+ await this.rpc({ op: "load", modelRef });
300
+ }
301
+ async unload() {
302
+ await this.rpc({ op: "unload" });
303
+ }
304
+ async generate(messages, opts) {
305
+ const res = await this.rpc({ op: "generate", messages, opts });
306
+ if (!res.ok || res.op !== "generate") {
307
+ throw new Error(!res.ok ? res.error : "unexpected response");
308
+ }
309
+ return res.result;
310
+ }
311
+ memoryReport() {
312
+ return { isolation: "process", modelRef: null, loaded: false };
313
+ }
314
+ async memoryReportAsync() {
315
+ const res = await this.rpc({ op: "memory" });
316
+ if (!res.ok || res.op !== "memory") {
317
+ throw new Error(!res.ok ? res.error : "unexpected response");
318
+ }
319
+ return res.report;
320
+ }
321
+ rpc(body) {
322
+ const id = `r${++this.seq}`;
323
+ const req = { v: LLM_HOST_IPC_SCHEMA, id, ...body };
324
+ return new Promise((resolve, reject) => {
325
+ const socket = net.createConnection(this.socketPath);
326
+ let buf = "";
327
+ const timer = setTimeout(() => {
328
+ socket.destroy();
329
+ reject(new Error(`llm-host IPC timeout (${this.socketPath})`));
330
+ }, 12e4);
331
+ socket.setEncoding("utf8");
332
+ socket.on("connect", () => {
333
+ socket.write(`${JSON.stringify(req)}
334
+ `);
335
+ });
336
+ socket.on("data", (chunk) => {
337
+ buf += chunk;
338
+ const nl = buf.indexOf("\n");
339
+ if (nl < 0) return;
340
+ const line = buf.slice(0, nl).trim();
341
+ clearTimeout(timer);
342
+ socket.end();
343
+ try {
344
+ resolve(JSON.parse(line));
345
+ } catch (e) {
346
+ reject(e);
347
+ }
348
+ });
349
+ socket.on("error", (e) => {
350
+ clearTimeout(timer);
351
+ reject(e);
352
+ });
353
+ });
354
+ }
355
+ };
356
+ var ProcessBridgeLlmHost = class extends ProcessLlmHost {
357
+ };
358
+
359
+ // src/runtime/llm-host/index.ts
360
+ function createLlmHost(options = {}) {
361
+ const isolation = options.isolation ?? "embedded";
362
+ if (isolation === "process") {
363
+ return new ProcessLlmHost(options.endpoint ?? defaultProcessEndpoint());
364
+ }
365
+ const host = new EmbeddedLlmHost();
366
+ if (options.binding) host.setBinding(options.binding);
367
+ if (options.preferGrammar) host.setPreferGrammar(true);
368
+ return host;
369
+ }
370
+ function defaultProcessEndpoint(env = process.env) {
371
+ return path.join(vibgrateRuntimeDir(env), "llm-host.sock");
372
+ }
373
+ function resolveInferenceIsolation(explicit, env = process.env) {
374
+ if (explicit === "embedded" || explicit === "process") return explicit;
375
+ const v = (env.VIBGRATE_INFERENCE_ISOLATION || env.VG_INFERENCE_ISOLATION || "").toLowerCase();
376
+ if (v === "process" || v === "isolated") return "process";
377
+ return "embedded";
378
+ }
379
+
380
+ export { EmbeddedLlmHost, LLM_HOST_IPC_SCHEMA, ProcessBridgeLlmHost, ProcessLlmHost, createLlmHost, defaultProcessEndpoint, generateWithLlamaBinding, resolveInferenceIsolation, startProcessHostServer };
381
+ //# sourceMappingURL=chunk-PXHNTC6D.js.map
382
+ //# sourceMappingURL=chunk-PXHNTC6D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/llm-host/binding.ts","../src/runtime/llm-host/embedded.ts","../src/runtime/llm-host/process-bridge.ts","../src/runtime/llm-host/index.ts"],"names":["path2"],"mappings":"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","file":"chunk-PXHNTC6D.js","sourcesContent":["/**\n * node-llama-cpp binding adapter — pure glue so embedded + process hosts share\n * one code path. The module is injected (from ensurePackage); never imported\n * statically so the published CLI stays free of native deps.\n */\n\nimport type { LlmChatMessage, LlmGenerateOptions } from './types.js';\n\nexport interface LlamaBindingGenerateInput {\n /** Loaded node-llama-cpp module (dynamic). */\n lib: unknown;\n modelPath: string;\n messages: LlmChatMessage[];\n opts?: LlmGenerateOptions;\n}\n\n/**\n * Run one chat completion via node-llama-cpp. Throws on binding/model errors\n * (callers wrap with redaction).\n */\nexport async function generateWithLlamaBinding(input: LlamaBindingGenerateInput): Promise<string> {\n const lib: any = input.lib;\n if (!lib || typeof lib.getLlama !== 'function') {\n throw new Error('llm-host: invalid node-llama-cpp module (getLlama missing)');\n }\n const llama = await lib.getLlama();\n const model = await llama.loadModel({ modelPath: input.modelPath });\n const ctx = await model.createContext();\n const { LlamaChatSession } = lib;\n if (typeof LlamaChatSession !== 'function') {\n throw new Error('llm-host: LlamaChatSession missing from node-llama-cpp module');\n }\n const chat = new LlamaChatSession({ contextSequence: ctx.getSequence() });\n const prompt = input.messages.map((m) => `${m.role}: ${m.content}`).join('\\n\\n');\n const temperature = input.opts?.temperature ?? 0;\n const maxTokens = input.opts?.maxTokens;\n // Grammar: pass through when binding supports it (future constrained PatchIR).\n const promptOpts: Record<string, unknown> = { temperature };\n if (typeof maxTokens === 'number') promptOpts.maxTokens = maxTokens;\n if (input.opts?.grammar) {\n // Best-effort: node-llama-cpp versions differ on the grammar API surface.\n promptOpts.grammar = input.opts.grammar;\n }\n const text: string = await chat.prompt(prompt, promptOpts);\n return typeof text === 'string' ? text : String(text ?? '');\n}\n","/**\n * Embedded llm-host (Approach B default) — same address space as the agent.\n *\n * Production path: warm session pool ({@link acquireHostSession}) so models are\n * not reloaded every chat turn. Binding is injected via {@link setBinding}.\n */\n\nimport { annotateUnknownIdentifiers } from '../identifier-mask.js';\nimport { generateWithLlamaBinding } from './binding.js';\nimport {\n acquireHostSession,\n generateOnSession,\n type HostGenerateReport,\n} from './session.js';\nimport type {\n LlmChatMessage,\n LlmGenerateOptions,\n LlmGenerateResult,\n LlmHost,\n LlmMemoryReport,\n} from './types.js';\n\nexport class EmbeddedLlmHost implements LlmHost {\n readonly isolation = 'embedded' as const;\n private modelRef: string | null = null;\n private loaded = false;\n private binding: unknown | null = null;\n private preferGrammar = false;\n private lastReport: HostGenerateReport | null = null;\n\n /** Attach the dynamically loaded node-llama-cpp module. */\n setBinding(lib: unknown): void {\n this.binding = lib;\n }\n\n /** Hint from MEP: attempt constrained decoding when grammar is supplied. */\n setPreferGrammar(on: boolean): void {\n this.preferGrammar = on;\n }\n\n /** Last generate metrics (KV plan, draft accept, warm start). */\n lastGenerateReport(): HostGenerateReport | null {\n return this.lastReport;\n }\n\n async load(modelRef: string): Promise<void> {\n this.modelRef = modelRef;\n this.loaded = true;\n // Eagerly warm the session when binding is already available.\n if (this.binding) {\n await acquireHostSession(this.binding, modelRef);\n }\n }\n\n async unload(): Promise<void> {\n this.modelRef = null;\n this.loaded = false;\n this.lastReport = null;\n }\n\n supportsConstrainedDecoding(): boolean {\n return this.preferGrammar && this.binding != null;\n }\n\n memoryReport(): LlmMemoryReport {\n return {\n isolation: this.isolation,\n modelRef: this.modelRef,\n loaded: this.loaded,\n };\n }\n\n async generate(messages: LlmChatMessage[], opts: LlmGenerateOptions = {}): Promise<LlmGenerateResult> {\n if (!this.loaded || !this.modelRef) {\n throw new Error('llm-host: no model loaded — orchestrator must call load() after resolve/install');\n }\n if (!this.binding) {\n throw new Error(\n 'llm-host: node-llama-cpp binding not attached — run `vg models install` for the llama-cpp provider, then retry',\n );\n }\n\n // Production path: pooled warm session.\n try {\n const session = await acquireHostSession(this.binding, this.modelRef);\n const report = await generateOnSession(session, messages, {\n grammar: opts.grammar,\n requireGrammar: opts.requireGrammar,\n identifierTrie: opts.identifierTrie,\n annotateUnknownIdentifiers: opts.annotateUnknownIdentifiers,\n draftCandidates: opts.draftCandidates,\n maxTokens: opts.maxTokens,\n temperature: opts.temperature,\n promptSegments: opts.promptSegments,\n });\n this.lastReport = report;\n return {\n text: report.text,\n model: report.model,\n isolation: report.isolation,\n constrained: report.constrained || !!(opts.grammar && this.preferGrammar),\n unknownIdentifiers: report.unknownIdentifiers,\n };\n } catch {\n // Fallback one-shot (tests / minimal bindings).\n let text = await generateWithLlamaBinding({\n lib: this.binding,\n modelPath: this.modelRef,\n messages,\n opts,\n });\n let unknownIdentifiers: string[] | undefined;\n if (opts.identifierTrie && opts.annotateUnknownIdentifiers !== false) {\n const ann = annotateUnknownIdentifiers(text, opts.identifierTrie);\n text = ann.text;\n unknownIdentifiers = ann.unknown.length ? ann.unknown : undefined;\n }\n return {\n text,\n model: this.modelRef,\n isolation: this.isolation,\n constrained: !!(opts.grammar && this.supportsConstrainedDecoding()),\n unknownIdentifiers,\n };\n }\n }\n}\n","/**\n * Process-isolation llm-host: client + server over a Unix/local socket.\n *\n * Management (Code Modes, fit, packs, install) stays in vgd / the CLI.\n * This process only loads weights and decodes (ADR-005).\n */\n\nimport * as fs from 'node:fs';\nimport * as net from 'node:net';\nimport * as path from 'node:path';\nimport { generateWithLlamaBinding } from './binding.js';\nimport { acquireHostSession, generateOnSession } from './session.js';\nimport type {\n LlmChatMessage,\n LlmGenerateOptions,\n LlmGenerateResult,\n LlmHost,\n LlmMemoryReport,\n} from './types.js';\n\nexport const LLM_HOST_IPC_SCHEMA = 'llm-host-ipc/0' as const;\n\nexport type LlmHostIpcRequest =\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'load'; modelRef: string }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'unload' }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'generate'; messages: LlmChatMessage[]; opts?: LlmGenerateOptions }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'memory' }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'capabilities' }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; op: 'ping' };\n\nexport type LlmHostIpcResponse =\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; ok: true; op: 'load' | 'unload' | 'ping' }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; ok: true; op: 'generate'; result: LlmGenerateResult }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; ok: true; op: 'memory'; report: LlmMemoryReport }\n | {\n v: typeof LLM_HOST_IPC_SCHEMA;\n id: string;\n ok: true;\n op: 'capabilities';\n constrainedDecoding: boolean;\n isolation: 'process';\n }\n | { v: typeof LLM_HOST_IPC_SCHEMA; id: string; ok: false; error: string };\n\n/** Request body without envelope — distribute Omit over the union (keyof union is only common keys). */\nexport type LlmHostIpcBody = LlmHostIpcRequest extends infer R\n ? R extends { v: typeof LLM_HOST_IPC_SCHEMA; id: string }\n ? Omit<R, 'v' | 'id'>\n : never\n : never;\n\nexport interface ProcessHostServerOptions {\n socketPath: string;\n /** node-llama-cpp module (optional until first generate). */\n binding?: unknown;\n onListen?: (socketPath: string) => void;\n}\n\n/**\n * Serve llm-host IPC on a local socket. Resolves when the server is listening;\n * call the returned `close` to stop.\n */\nexport function startProcessHostServer(options: ProcessHostServerOptions): Promise<{ close: () => Promise<void> }> {\n const state = {\n modelRef: null as string | null,\n loaded: false,\n binding: options.binding ?? null,\n };\n\n try {\n if (fs.existsSync(options.socketPath)) fs.unlinkSync(options.socketPath);\n } catch {\n /* ignore */\n }\n fs.mkdirSync(path.dirname(options.socketPath), { recursive: true });\n\n return new Promise((resolve, reject) => {\n const server = net.createServer((socket) => {\n let buf = '';\n socket.setEncoding('utf8');\n socket.on('data', (chunk: string) => {\n buf += chunk;\n let nl: number;\n while ((nl = buf.indexOf('\\n')) >= 0) {\n const line = buf.slice(0, nl).trim();\n buf = buf.slice(nl + 1);\n if (!line) continue;\n void handleLine(line, state, (resp) => {\n socket.write(`${JSON.stringify(resp)}\\n`);\n });\n }\n });\n });\n\n server.once('error', reject);\n server.listen(options.socketPath, () => {\n options.onListen?.(options.socketPath);\n resolve({\n close: () =>\n new Promise((res, rej) => {\n server.close((err) => {\n try {\n if (fs.existsSync(options.socketPath)) fs.unlinkSync(options.socketPath);\n } catch {\n /* ignore */\n }\n if (err) rej(err);\n else res();\n });\n }),\n });\n });\n });\n}\n\n/** Attach binding after server start (e.g. after ensurePackage). */\nexport type ProcessHostState = {\n modelRef: string | null;\n loaded: boolean;\n binding: unknown | null;\n};\n\nasync function handleLine(\n line: string,\n state: ProcessHostState,\n reply: (r: LlmHostIpcResponse) => void,\n): Promise<void> {\n let req: LlmHostIpcRequest;\n try {\n req = JSON.parse(line) as LlmHostIpcRequest;\n } catch {\n reply({ v: LLM_HOST_IPC_SCHEMA, id: '?', ok: false, error: 'invalid JSON' });\n return;\n }\n if (req.v !== LLM_HOST_IPC_SCHEMA) {\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: false, error: `unsupported schema ${String((req as { v?: string }).v)}` });\n return;\n }\n\n try {\n switch (req.op) {\n case 'ping':\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: 'ping' });\n return;\n case 'load':\n state.modelRef = req.modelRef;\n state.loaded = true;\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: 'load' });\n return;\n case 'unload':\n state.modelRef = null;\n state.loaded = false;\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: 'unload' });\n return;\n case 'memory':\n reply({\n v: LLM_HOST_IPC_SCHEMA,\n id: req.id,\n ok: true,\n op: 'memory',\n report: { isolation: 'process', modelRef: state.modelRef, loaded: state.loaded },\n });\n return;\n case 'capabilities':\n reply({\n v: LLM_HOST_IPC_SCHEMA,\n id: req.id,\n ok: true,\n op: 'capabilities',\n constrainedDecoding: state.binding != null,\n isolation: 'process',\n });\n return;\n case 'generate': {\n if (!state.loaded || !state.modelRef) {\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: false, error: 'no model loaded' });\n return;\n }\n if (!state.binding) {\n reply({\n v: LLM_HOST_IPC_SCHEMA,\n id: req.id,\n ok: false,\n error: 'binding not loaded in host process — start host after vg models install',\n });\n return;\n }\n // Same warm session path as embedded (Approach B parity for enterprise isolation).\n let result: LlmGenerateResult;\n try {\n const session = await acquireHostSession(state.binding, state.modelRef);\n const report = await generateOnSession(session, req.messages, {\n grammar: req.opts?.grammar,\n requireGrammar: req.opts?.requireGrammar,\n identifierTrie: req.opts?.identifierTrie,\n annotateUnknownIdentifiers: req.opts?.annotateUnknownIdentifiers,\n draftCandidates: req.opts?.draftCandidates,\n maxTokens: req.opts?.maxTokens,\n temperature: req.opts?.temperature,\n promptSegments: req.opts?.promptSegments,\n });\n result = {\n text: report.text,\n model: state.modelRef,\n isolation: 'process',\n constrained: report.constrained,\n unknownIdentifiers: report.unknownIdentifiers,\n };\n } catch {\n const text = await generateWithLlamaBinding({\n lib: state.binding,\n modelPath: state.modelRef,\n messages: req.messages,\n opts: req.opts,\n });\n result = {\n text,\n model: state.modelRef,\n isolation: 'process',\n constrained: !!(req.opts?.grammar && state.binding),\n };\n }\n reply({ v: LLM_HOST_IPC_SCHEMA, id: req.id, ok: true, op: 'generate', result });\n return;\n }\n default:\n reply({ v: LLM_HOST_IPC_SCHEMA, id: (req as { id: string }).id, ok: false, error: 'unknown op' });\n }\n } catch (e) {\n reply({\n v: LLM_HOST_IPC_SCHEMA,\n id: req.id,\n ok: false,\n error: e instanceof Error ? e.message : String(e),\n });\n }\n}\n\n/** Client: full {@link LlmHost} over the process socket. */\nexport class ProcessLlmHost implements LlmHost {\n readonly isolation = 'process' as const;\n private seq = 0;\n\n constructor(private readonly socketPath: string) {}\n\n getEndpoint(): string {\n return this.socketPath;\n }\n\n supportsConstrainedDecoding(): boolean {\n return true; // host may apply grammar when binding is present\n }\n\n async load(modelRef: string): Promise<void> {\n await this.rpc({ op: 'load', modelRef });\n }\n\n async unload(): Promise<void> {\n await this.rpc({ op: 'unload' });\n }\n\n async generate(messages: LlmChatMessage[], opts?: LlmGenerateOptions): Promise<LlmGenerateResult> {\n const res = await this.rpc({ op: 'generate', messages, opts });\n if (!res.ok || res.op !== 'generate') {\n throw new Error(!res.ok ? res.error : 'unexpected response');\n }\n return res.result;\n }\n\n memoryReport(): LlmMemoryReport {\n // Sync surface required by LlmHost; use last known or empty (async memory via rpc elsewhere).\n return { isolation: 'process', modelRef: null, loaded: false };\n }\n\n async memoryReportAsync(): Promise<LlmMemoryReport> {\n const res = await this.rpc({ op: 'memory' });\n if (!res.ok || res.op !== 'memory') {\n throw new Error(!res.ok ? res.error : 'unexpected response');\n }\n return res.report;\n }\n\n private rpc(body: LlmHostIpcBody): Promise<LlmHostIpcResponse> {\n const id = `r${++this.seq}`;\n const req = { v: LLM_HOST_IPC_SCHEMA, id, ...body } as LlmHostIpcRequest;\n return new Promise((resolve, reject) => {\n const socket = net.createConnection(this.socketPath);\n let buf = '';\n const timer = setTimeout(() => {\n socket.destroy();\n reject(new Error(`llm-host IPC timeout (${this.socketPath})`));\n }, 120_000);\n socket.setEncoding('utf8');\n socket.on('connect', () => {\n socket.write(`${JSON.stringify(req)}\\n`);\n });\n socket.on('data', (chunk: string) => {\n buf += chunk;\n const nl = buf.indexOf('\\n');\n if (nl < 0) return;\n const line = buf.slice(0, nl).trim();\n clearTimeout(timer);\n socket.end();\n try {\n resolve(JSON.parse(line) as LlmHostIpcResponse);\n } catch (e) {\n reject(e);\n }\n });\n socket.on('error', (e) => {\n clearTimeout(timer);\n reject(e);\n });\n });\n }\n}\n\n/** @deprecated use ProcessLlmHost */\nexport class ProcessBridgeLlmHost extends ProcessLlmHost {}\n","/**\n * Factory for the dual-mode llm-host (ADR-005).\n *\n * `createLlmHost({ isolation: 'embedded' })` — default Approach B.\n * `createLlmHost({ isolation: 'process', endpoint })` — enterprise shell.\n */\n\nimport * as path from 'node:path';\nimport { vibgrateRuntimeDir } from '../paths.js';\nimport { EmbeddedLlmHost } from './embedded.js';\nimport { ProcessLlmHost } from './process-bridge.js';\nimport type { LlmHost, LlmHostIsolation } from './types.js';\n\nexport type {\n LlmHost,\n LlmHostConfig,\n LlmHostIsolation,\n LlmChatMessage,\n LlmGenerateResult,\n LlmGenerateOptions,\n LlmMemoryReport,\n} from './types.js';\nexport { EmbeddedLlmHost } from './embedded.js';\nexport {\n ProcessLlmHost,\n ProcessBridgeLlmHost,\n LLM_HOST_IPC_SCHEMA,\n startProcessHostServer,\n} from './process-bridge.js';\nexport type { LlmHostIpcRequest, LlmHostIpcResponse, ProcessHostServerOptions } from './process-bridge.js';\nexport { generateWithLlamaBinding } from './binding.js';\nexport {\n acquireHostSession,\n generateOnSession,\n clearHostSessionPool,\n hostSessionPoolSize,\n listHostSessions,\n dropHostSession,\n evictIdleSessions,\n sessionKey,\n} from './session.js';\nexport type { HostGenerateExtras, HostGenerateReport, HostSessionInfo } from './session.js';\nexport { attachGrammar, assertGrammarOrThrow, allowGrammarStringFallback } from './grammar.js';\nexport type { GrammarAttachResult, GrammarAttachMethod } from './grammar.js';\nexport {\n buildIdentifierTokenBias,\n planNextCharMask,\n tokenCompatibleWithTrie,\n trieFingerprint,\n} from './logit-mask.js';\nexport type { LogitMaskBuildResult, SamplerHookMethod, BuildLogitMaskOptions } from './logit-mask.js';\nexport {\n createIdentStreamState,\n stepIdentStream,\n filterTokenTexts,\n attachDynamicIdentFilter,\n dynamicAllowedNextChars,\n} from './identifier-sampler.js';\nexport type { IdentStreamState, IdentStepResult } from './identifier-sampler.js';\nexport { probeBindingCapabilities, supportsDynamicIdentSampler, supportsKvPrefixEvaluate } from './binding-capabilities.js';\nexport type { BindingCapabilities, ProbeBindingOptions } from './binding-capabilities.js';\nexport { composePromptConstraints } from './compose-constraints.js';\nexport { rankDraftCandidates, pickBestDraft } from './speculative.js';\nexport type { RankedDraft } from './speculative.js';\n\nexport interface CreateLlmHostOptions {\n isolation?: LlmHostIsolation;\n /** Socket path when isolation is `process`. Defaults under vibgrate runtime dir. */\n endpoint?: string;\n /** Pre-attach binding for embedded hosts (avoids a second ensure). */\n binding?: unknown;\n preferGrammar?: boolean;\n}\n\nexport function createLlmHost(options: CreateLlmHostOptions = {}): LlmHost {\n const isolation = options.isolation ?? 'embedded';\n if (isolation === 'process') {\n return new ProcessLlmHost(options.endpoint ?? defaultProcessEndpoint());\n }\n const host = new EmbeddedLlmHost();\n if (options.binding) host.setBinding(options.binding);\n if (options.preferGrammar) host.setPreferGrammar(true);\n return host;\n}\n\n/** Default IPC socket path for the isolated llm-host process. */\nexport function defaultProcessEndpoint(env: NodeJS.ProcessEnv = process.env): string {\n return path.join(vibgrateRuntimeDir(env), 'llm-host.sock');\n}\n\n/** Resolve isolation from env / explicit override (MEP / config later). */\nexport function resolveInferenceIsolation(\n explicit?: LlmHostIsolation,\n env: NodeJS.ProcessEnv = process.env,\n): LlmHostIsolation {\n if (explicit === 'embedded' || explicit === 'process') return explicit;\n const v = (env.VIBGRATE_INFERENCE_ISOLATION || env.VG_INFERENCE_ISOLATION || '').toLowerCase();\n if (v === 'process' || v === 'isolated') return 'process';\n return 'embedded';\n}\n"]}
@@ -1,9 +1,13 @@
1
- import { usageError, buildGraph, UsageError, ResourceLimitError, CliError, ExitCode, writeArtifacts, writeSnapshot, refreshInstalledInstructions, SMALL_REPO_FILES, epistemicBreakdown, verifyDeterminism, renderHtml, renderReport, discoverModels, loadGraph } from './chunk-3MXNNBLI.js';
2
- import { VERSION, brandProgressBar, resolveHead, workingTreeDirty } from './chunk-5BDHQ7DD.js';
3
- import { MockProvider, OPENAI_COMPATIBLE, OllamaProvider, LocalLlamaProvider, OpenAiCompatibleProvider } from './chunk-CS37OBE3.js';
4
- import { resolveEmbedModel, isModelReady, countPending, serializeGraph } from './chunk-WNIIKCNF.js';
5
- import { canonicalize } from './chunk-JFGYT6BI.js';
1
+ import { resolveGgufPath } from './chunk-NDMDSPFX.js';
2
+ import { MockProvider, OPENAI_COMPATIBLE, OllamaProvider, LocalLlamaProvider, OpenAiCompatibleProvider } from './chunk-OFUC6RYN.js';
6
3
  import { c, info, json, out } from './chunk-CT5BS56U.js';
4
+ import { usageError, buildGraph, UsageError, ResourceLimitError, CliError, ExitCode, writeSnapshot, refreshInstalledInstructions, SMALL_REPO_FILES, epistemicBreakdown, verifyDeterminism } from './chunk-KNELIQJO.js';
5
+ import { VERSION, brandProgressBar, resolveHead, workingTreeDirty } from './chunk-WGUL45AV.js';
6
+ import { discoverModels } from './chunk-OOIG3RUM.js';
7
+ import { resolveEmbedModel, isModelReady, countPending } from './chunk-6ABXHZRN.js';
8
+ import { writeArtifacts, renderHtml, renderReport, loadGraph } from './chunk-2XQDMLKB.js';
9
+ import { serializeGraph } from './chunk-K3MZIVZW.js';
10
+ import { canonicalize } from './chunk-JFGYT6BI.js';
7
11
  import * as path from 'path';
8
12
  import * as fs from 'fs';
9
13
  import { spawn, execFile } from 'child_process';
@@ -357,7 +361,7 @@ function readGlobal(cmd) {
357
361
 
358
362
  // src/commands/build.ts
359
363
  function registerBuild(program) {
360
- const cmd = program.command("build").description("build / update the code map (incremental, deterministic)").argument("[paths...]", "folders or files to map (default: current folder)").option("--only <langs>", "restrict to languages, e.g. ts,py,go").option("--exclude <glob>", "extra ignore glob (repeatable)", collect, []).option("--no-html", "do not write graph.html").option("--no-report", "do not write GRAPH_REPORT.md").option("--no-ground", "do not attach grounding (Phase 2)").option("--jobs <n>", "worker count (1 = single-threaded)").option("--scip <file>", "ingest a SCIP index for precise resolution (default: auto-detect index.scip)").option("--no-scip", "ignore any SCIP index").option("--no-tsc", "skip the in-process TypeScript resolver (heuristic floor only)").option("--no-warm", "do not warm the semantic index in the background after building").option("--grammars <dir>", "directory of grammar .wasm files (offline / air-gapped)").option("-o, --export <file>", "also write the map to a file (format inferred)").option("--attest", "sign the built graph \u2192 .vibgrate/attestation.intoto.jsonl").option("--verify", "verify a committed attestation against the graph (no rebuild)").option("--attest-key <path>", "signing key PEM (else $VG_ATTEST_KEY, else .vibgrate/attest-key.pem)").option("--attestation <file>", "attestation path (out for --attest, in for --verify)").option("--pub <path>", "public key PEM to pin the signer (with --verify)").action(async function(paths, opts) {
364
+ const cmd = program.command("build").description("build / update the code map (incremental, deterministic)").argument("[paths...]", "folders or files to map (default: current folder)").option("--only <langs>", "restrict to languages, e.g. ts,py,go").option("--exclude <glob>", "extra ignore glob (repeatable)", collect, []).option("--no-html", "do not write graph.html").option("--no-report", "do not write GRAPH_REPORT.md").option("--no-ground", "do not attach grounding (Phase 2)").option("--jobs <n>", "worker count (1 = single-threaded)").option("--scip <file>", "ingest a SCIP index for precise resolution (default: auto-detect index.scip)").option("--no-scip", "ignore any SCIP index").option("--no-tsc", "skip the in-process TypeScript resolver (heuristic floor only)").option("--fast", "skip precise tsc resolve (heuristic only \u2014 faster XL cold builds)").option("--no-index", "do not write the SQLite serve index under .vibgrate/cache/").option("--analysis-tier <tier>", "force analysis tier: full | large | xl (default: auto)").option("--no-warm", "do not warm the semantic index in the background after building").option("--grammars <dir>", "directory of grammar .wasm files (offline / air-gapped)").option("-o, --export <file>", "also write the map to a file (format inferred)").option("--attest", "sign the built graph \u2192 .vibgrate/attestation.intoto.jsonl").option("--verify", "verify a committed attestation against the graph (no rebuild)").option("--attest-key <path>", "signing key PEM (else $VG_ATTEST_KEY, else .vibgrate/attest-key.pem)").option("--attestation <file>", "attestation path (out for --attest, in for --verify)").option("--pub <path>", "public key PEM to pin the signer (with --verify)").action(async function(paths, opts) {
361
365
  await runBuild(paths, opts, readGlobal(this));
362
366
  });
363
367
  applyGlobalOptions(cmd);
@@ -376,6 +380,11 @@ async function runBuild(paths, opts, global) {
376
380
  throw usageError(`--jobs must be a positive integer (got "${opts.jobs}")`);
377
381
  }
378
382
  const only = opts.only ? opts.only.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
383
+ const tierRaw = opts.analysisTier?.toLowerCase();
384
+ const analysisTier = tierRaw === "full" || tierRaw === "large" || tierRaw === "xl" ? tierRaw : void 0;
385
+ if (opts.analysisTier && !analysisTier) {
386
+ throw usageError(`--analysis-tier must be full, large, or xl (got "${opts.analysisTier}")`);
387
+ }
379
388
  let result;
380
389
  try {
381
390
  result = await buildGraph({
@@ -390,6 +399,9 @@ async function runBuild(paths, opts, global) {
390
399
  scip: typeof opts.scip === "string" ? opts.scip : void 0,
391
400
  noScip: opts.scip === false,
392
401
  noTsc: opts.tsc === false,
402
+ fast: opts.fast === true,
403
+ noIndex: opts.index === false,
404
+ analysisTier,
393
405
  generatedAt: global.generatedAt,
394
406
  onParseProgress: bar ? (done, total) => bar.update(done, total) : void 0,
395
407
  grammarsDir: opts.grammars
@@ -777,13 +789,29 @@ function resolveProviders(opts, deps = {}) {
777
789
  function buildExplicit(id, opts, env, discover) {
778
790
  if (id === "ollama") return new OllamaProvider(resolveLocalModel(opts, discover, "ollama"), env.OLLAMA_HOST);
779
791
  if (id === "llama-cpp") {
780
- const modelPath = opts.modelPath || env.VG_CODE_MODEL_PATH;
781
- if (!modelPath) throw new CliError("--provider llama-cpp needs a gguf path via --model-path or VG_CODE_MODEL_PATH (no weights are downloaded automatically; see `vg models`).", ExitCode.USAGE_ERROR);
782
- return new LocalLlamaProvider(opts.model ?? basename2(modelPath), modelPath, void 0, !!opts.consent);
792
+ const resolved = resolveGgufPath({
793
+ modelPath: opts.modelPath || env.VG_CODE_MODEL_PATH,
794
+ modelRef: opts.model,
795
+ env,
796
+ discover
797
+ });
798
+ if (!resolved) {
799
+ throw new CliError(
800
+ "--provider llama-cpp needs a GGUF: pass --model-path, set VG_CODE_MODEL_PATH, or run `vg models install` so the weight store has a catalogued gguf. See `vg models`.",
801
+ ExitCode.USAGE_ERROR
802
+ );
803
+ }
804
+ return new LocalLlamaProvider(opts.model ?? basename2(resolved.path), resolved.path, void 0, !!opts.consent);
783
805
  }
784
806
  if (id === "lmstudio") return buildHosted("lmstudio", resolveHostedModel(opts, env, "lmstudio"));
807
+ if (id === "foundry-local" || id === "foundry") {
808
+ return buildHosted("foundry-local", resolveHostedModel(opts, env, "foundry-local"));
809
+ }
785
810
  if (HOSTED_IDS.has(id)) return buildHosted(id, resolveHostedModel(opts, env, id));
786
- throw new CliError(`unknown --provider "${id}". Known: ollama, lmstudio, openrouter, litellm, openai, together, llama-cpp.`, ExitCode.USAGE_ERROR);
811
+ throw new CliError(
812
+ `unknown --provider "${id}". Known: ollama, lmstudio, foundry-local, openrouter, litellm, openai, together, llama-cpp.`,
813
+ ExitCode.USAGE_ERROR
814
+ );
787
815
  }
788
816
  function buildHosted(id, model) {
789
817
  const base = OPENAI_COMPATIBLE[id];
@@ -793,10 +821,30 @@ function buildHosted(id, model) {
793
821
  function localFallbacks(opts, env, discover, exclude) {
794
822
  const out2 = [];
795
823
  const models = safeDiscover(discover);
824
+ const preferOllama = env.VG_PREFER_OLLAMA === "1" || env.VIBGRATE_PREFER_OLLAMA === "1" || opts.preferEmbedded === false;
825
+ const gguf = exclude === "llama-cpp" ? null : resolveGgufPath({
826
+ modelPath: opts.modelPath || env.VG_CODE_MODEL_PATH,
827
+ modelRef: opts.model,
828
+ env,
829
+ discover: () => models
830
+ });
831
+ if (gguf && !preferOllama) {
832
+ out2.push(new LocalLlamaProvider(opts.model ?? basename2(gguf.path), gguf.path, void 0, !!opts.consent));
833
+ }
796
834
  const ollamaModel = opts.model ?? firstOfRuntime(models, "ollama");
797
835
  if (exclude !== "ollama" && ollamaModel) out2.push(new OllamaProvider(ollamaModel, env.OLLAMA_HOST));
798
836
  const lmModel = opts.model ?? firstOfRuntime(models, "lm-studio");
799
837
  if (exclude !== "lmstudio" && lmModel) out2.push(buildHosted("lmstudio", lmModel));
838
+ if (exclude !== "foundry-local" && exclude !== "foundry" && (env.FOUNDRY_LOCAL_BASE_URL || env.VG_CODE_PROVIDER === "foundry-local")) {
839
+ try {
840
+ const m = opts.model || env.VG_CODE_MODEL;
841
+ if (m) out2.push(buildHosted("foundry-local", m));
842
+ } catch {
843
+ }
844
+ }
845
+ if (gguf && !out2.some((p) => p.id === "llama-cpp")) {
846
+ out2.push(new LocalLlamaProvider(opts.model ?? basename2(gguf.path), gguf.path, void 0, !!opts.consent));
847
+ }
800
848
  return out2;
801
849
  }
802
850
  function resolveLocalModel(opts, discover, runtime) {
@@ -829,5 +877,5 @@ function basename2(p) {
829
877
  }
830
878
 
831
879
  export { DSSE_PAYLOAD_TYPE, ProgressBar, applyGlobalOptions, dssePae, fetchCatalog, generateKeypair, keyId, printCodeLogo, printLogo, readGlobal, registerBuild, resolveProviders, runBuild, sha256Hex, topProviders };
832
- //# sourceMappingURL=chunk-I7GY7MVN.js.map
833
- //# sourceMappingURL=chunk-I7GY7MVN.js.map
880
+ //# sourceMappingURL=chunk-RNP3SMTV.js.map
881
+ //# sourceMappingURL=chunk-RNP3SMTV.js.map