@vibgrate/cli 2026.729.2 → 2026.730.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.
Files changed (107) hide show
  1. package/DOCS.md +5 -1
  2. package/dist/agent-33BMKWJC.js +22 -0
  3. package/dist/agent-33BMKWJC.js.map +1 -0
  4. package/dist/baseline-V6MYDEMS.js +9 -0
  5. package/dist/{baseline-UOTGTJYT.js.map → baseline-V6MYDEMS.js.map} +1 -1
  6. package/dist/checkpoint-4WFZMKEO.js +56 -0
  7. package/dist/checkpoint-4WFZMKEO.js.map +1 -0
  8. package/dist/chunk-543E6WDJ.js +61 -0
  9. package/dist/chunk-543E6WDJ.js.map +1 -0
  10. package/dist/{chunk-P3QIO4ZU.js → chunk-5G7C6H2G.js} +14 -204
  11. package/dist/chunk-5G7C6H2G.js.map +1 -0
  12. package/dist/{chunk-JIBOJTGS.js → chunk-5HYCB55P.js} +101 -101
  13. package/dist/chunk-5HYCB55P.js.map +1 -0
  14. package/dist/{chunk-67YG3R5F.js → chunk-6D4BCGRQ.js} +6 -62
  15. package/dist/chunk-6D4BCGRQ.js.map +1 -0
  16. package/dist/{chunk-F6ZPUKED.js → chunk-6WNJJXFY.js} +4 -4
  17. package/dist/{chunk-F6ZPUKED.js.map → chunk-6WNJJXFY.js.map} +1 -1
  18. package/dist/{chunk-PXXVLX7K.js → chunk-CFL3QQQZ.js} +7 -6
  19. package/dist/chunk-CFL3QQQZ.js.map +1 -0
  20. package/dist/{chunk-74ZMAOVF.js → chunk-CQDCZQFV.js} +55 -9
  21. package/dist/chunk-CQDCZQFV.js.map +1 -0
  22. package/dist/{chunk-VZRQUI54.js → chunk-DBMYWNLC.js} +4 -4
  23. package/dist/{chunk-VZRQUI54.js.map → chunk-DBMYWNLC.js.map} +1 -1
  24. package/dist/{chunk-QDZ47G45.js → chunk-EKCNSRNJ.js} +20 -11
  25. package/dist/chunk-EKCNSRNJ.js.map +1 -0
  26. package/dist/{chunk-SIPGDJT4.js → chunk-EVLS2M5G.js} +4 -4
  27. package/dist/{chunk-SIPGDJT4.js.map → chunk-EVLS2M5G.js.map} +1 -1
  28. package/dist/{chunk-G4HTI4ZM.js → chunk-FHJBGPJZ.js} +3 -2
  29. package/dist/chunk-FHJBGPJZ.js.map +1 -0
  30. package/dist/{chunk-CYC3ZI32.js → chunk-GLT3N7T2.js} +9 -6
  31. package/dist/chunk-GLT3N7T2.js.map +1 -0
  32. package/dist/chunk-HTLDXEHW.js +60 -0
  33. package/dist/chunk-HTLDXEHW.js.map +1 -0
  34. package/dist/{chunk-GI6W53LM.js → chunk-IDAQV3NQ.js} +4 -2
  35. package/dist/chunk-IDAQV3NQ.js.map +1 -0
  36. package/dist/{chunk-2ZHWF7C6.js → chunk-KGWEBM2J.js} +43 -68
  37. package/dist/chunk-KGWEBM2J.js.map +1 -0
  38. package/dist/{chunk-RZEXHDCF.js → chunk-MYM5VIJ4.js} +14 -3
  39. package/dist/chunk-MYM5VIJ4.js.map +1 -0
  40. package/dist/{chunk-HDQG3QYV.js → chunk-ON7PZNYV.js} +42 -26
  41. package/dist/chunk-ON7PZNYV.js.map +1 -0
  42. package/dist/chunk-Q4UQ73NA.js +6 -0
  43. package/dist/{chunk-WQE4OIZS.js.map → chunk-Q4UQ73NA.js.map} +1 -1
  44. package/dist/{chunk-PMYWZRRS.js → chunk-RBIRXQR6.js} +21 -3
  45. package/dist/chunk-RBIRXQR6.js.map +1 -0
  46. package/dist/{chunk-TCJTQGAO.js → chunk-RGEVBSLK.js} +3 -3
  47. package/dist/{chunk-TCJTQGAO.js.map → chunk-RGEVBSLK.js.map} +1 -1
  48. package/dist/chunk-TJ3WIJ7H.js +216 -0
  49. package/dist/chunk-TJ3WIJ7H.js.map +1 -0
  50. package/dist/chunk-VOEYUAER.js +203 -0
  51. package/dist/chunk-VOEYUAER.js.map +1 -0
  52. package/dist/{chunk-PRGCCW7D.js → chunk-WBMMRERH.js} +3 -3
  53. package/dist/{chunk-PRGCCW7D.js.map → chunk-WBMMRERH.js.map} +1 -1
  54. package/dist/{chunk-6HX47EBL.js → chunk-X634FZVG.js} +3 -3
  55. package/dist/{chunk-6HX47EBL.js.map → chunk-X634FZVG.js.map} +1 -1
  56. package/dist/cli.js +563 -340
  57. package/dist/cli.js.map +1 -1
  58. package/dist/{fs-6JKZNQ3U.js → fs-HNR6LAI7.js} +3 -3
  59. package/dist/fs-HNR6LAI7.js.map +1 -0
  60. package/dist/{graph-backend-GBL33GMW.js → graph-backend-G5Y6QQV4.js} +4 -4
  61. package/dist/{graph-backend-GBL33GMW.js.map → graph-backend-G5Y6QQV4.js.map} +1 -1
  62. package/dist/index.d.ts +1 -1
  63. package/dist/index.js +12 -10
  64. package/dist/index.js.map +1 -1
  65. package/dist/{interactive-HLGJJFLI.js → interactive-NJG6467J.js} +27 -24
  66. package/dist/interactive-NJG6467J.js.map +1 -0
  67. package/dist/{llm-host-5RE34322.js → llm-host-DZBD5D36.js} +5 -5
  68. package/dist/{llm-host-5RE34322.js.map → llm-host-DZBD5D36.js.map} +1 -1
  69. package/dist/load-YPSEDYIW.js +10 -0
  70. package/dist/{load-4MLIHGXF.js.map → load-YPSEDYIW.js.map} +1 -1
  71. package/dist/rules-ASYEUNB5.js +74 -0
  72. package/dist/rules-ASYEUNB5.js.map +1 -0
  73. package/dist/run-outcome-5FQWHWYK.js +253 -0
  74. package/dist/run-outcome-5FQWHWYK.js.map +1 -0
  75. package/dist/runtime-session-Y4ZD3QDO.js +20 -0
  76. package/dist/{runtime-session-5M6QZZOS.js.map → runtime-session-Y4ZD3QDO.js.map} +1 -1
  77. package/dist/{session-2JT4AUZT.js → session-3OBIQLE4.js} +5 -5
  78. package/dist/{session-2JT4AUZT.js.map → session-3OBIQLE4.js.map} +1 -1
  79. package/dist/{stream-json-Y45JBNYP.js → stream-json-3YOPU3LF.js} +82 -10
  80. package/dist/stream-json-3YOPU3LF.js.map +1 -0
  81. package/dist/{vg-mcp-bridge-ZCKBYQ2D.js → vg-mcp-bridge-PZFGTZSA.js} +8 -7
  82. package/dist/vg-mcp-bridge-PZFGTZSA.js.map +1 -0
  83. package/dist/{vgd-TGGEAGQZ.js → vgd-DH7AHQ23.js} +9 -8
  84. package/dist/vgd-DH7AHQ23.js.map +1 -0
  85. package/package.json +1 -1
  86. package/dist/baseline-UOTGTJYT.js +0 -9
  87. package/dist/chunk-2ZHWF7C6.js.map +0 -1
  88. package/dist/chunk-67YG3R5F.js.map +0 -1
  89. package/dist/chunk-74ZMAOVF.js.map +0 -1
  90. package/dist/chunk-CYC3ZI32.js.map +0 -1
  91. package/dist/chunk-G4HTI4ZM.js.map +0 -1
  92. package/dist/chunk-GI6W53LM.js.map +0 -1
  93. package/dist/chunk-HDQG3QYV.js.map +0 -1
  94. package/dist/chunk-JIBOJTGS.js.map +0 -1
  95. package/dist/chunk-P3QIO4ZU.js.map +0 -1
  96. package/dist/chunk-PMYWZRRS.js.map +0 -1
  97. package/dist/chunk-PXXVLX7K.js.map +0 -1
  98. package/dist/chunk-QDZ47G45.js.map +0 -1
  99. package/dist/chunk-RZEXHDCF.js.map +0 -1
  100. package/dist/chunk-WQE4OIZS.js +0 -6
  101. package/dist/fs-6JKZNQ3U.js.map +0 -1
  102. package/dist/interactive-HLGJJFLI.js.map +0 -1
  103. package/dist/load-4MLIHGXF.js +0 -9
  104. package/dist/runtime-session-5M6QZZOS.js +0 -19
  105. package/dist/stream-json-Y45JBNYP.js.map +0 -1
  106. package/dist/vg-mcp-bridge-ZCKBYQ2D.js.map +0 -1
  107. package/dist/vgd-TGGEAGQZ.js.map +0 -1
@@ -78,105 +78,6 @@ function trieEnumerateWords(root, limit = 4096) {
78
78
  walk(root, "");
79
79
  return out;
80
80
  }
81
-
82
- // src/runtime/identifier-mask.ts
83
- var IDENT_RE = /\b[A-Za-z_][A-Za-z0-9_]{2,}\b/g;
84
- var STOP = /* @__PURE__ */ new Set([
85
- "the",
86
- "and",
87
- "for",
88
- "var",
89
- "let",
90
- "const",
91
- "function",
92
- "class",
93
- "return",
94
- "import",
95
- "export",
96
- "from",
97
- "async",
98
- "await",
99
- "true",
100
- "false",
101
- "null",
102
- "undefined",
103
- "this",
104
- "new",
105
- "typeof",
106
- "interface",
107
- "type",
108
- "string",
109
- "number",
110
- "boolean",
111
- "void",
112
- "any",
113
- "unknown",
114
- "Promise",
115
- "Array",
116
- "Object",
117
- "Error",
118
- "console",
119
- "process",
120
- "require",
121
- "module",
122
- "exports",
123
- "default",
124
- "extends",
125
- "implements",
126
- "public",
127
- "private",
128
- "protected",
129
- "static",
130
- "readonly",
131
- "if",
132
- "else",
133
- "while",
134
- "switch",
135
- "case",
136
- "break",
137
- "continue",
138
- "try",
139
- "catch",
140
- "finally",
141
- "throw",
142
- "with",
143
- "yield",
144
- "of",
145
- "in",
146
- "as",
147
- "is",
148
- "get",
149
- "set"
150
- ]);
151
- function extractIdentifiers(text) {
152
- const out = /* @__PURE__ */ new Set();
153
- for (const m of text.matchAll(IDENT_RE)) {
154
- const t = m[0];
155
- if (STOP.has(t) || STOP.has(t.toLowerCase())) continue;
156
- out.add(t);
157
- }
158
- return [...out].sort();
159
- }
160
- function scanIdentifiersAgainstTrie(text, trie) {
161
- const known = [];
162
- const unknown = [];
163
- for (const id of extractIdentifiers(text)) {
164
- if (trieHas(trie, id) || trieHasPrefix(trie, id)) known.push(id);
165
- else unknown.push(id);
166
- }
167
- return { known, unknown, clean: unknown.length === 0 };
168
- }
169
- function maskAllowedNextChars(trie, partialIdent) {
170
- return trieAllowedNextChars(trie, partialIdent);
171
- }
172
- function annotateUnknownIdentifiers(text, trie) {
173
- const scan = scanIdentifiersAgainstTrie(text, trie);
174
- if (scan.clean) return { text, unknown: [] };
175
- const note = `
176
-
177
- /* vg: unknown identifiers vs graph (not rewritten): ${scan.unknown.slice(0, 12).join(", ")}${scan.unknown.length > 12 ? "\u2026" : ""} */`;
178
- return { text: text + note, unknown: scan.unknown };
179
- }
180
81
  var KV_CACHE_SCHEMA = "kv-cache/0";
181
82
  function contentHash(text) {
182
83
  return createHash("sha256").update(text, "utf8").digest("hex");
@@ -308,6 +209,105 @@ function graphDraftCandidates(knownVerbatim, max = 8) {
308
209
  return knownVerbatim.map((s) => s.trim()).filter((s) => s.length >= 8 && s.length <= 400).slice(0, max);
309
210
  }
310
211
 
212
+ // src/runtime/identifier-mask.ts
213
+ var IDENT_RE = /\b[A-Za-z_][A-Za-z0-9_]{2,}\b/g;
214
+ var STOP = /* @__PURE__ */ new Set([
215
+ "the",
216
+ "and",
217
+ "for",
218
+ "var",
219
+ "let",
220
+ "const",
221
+ "function",
222
+ "class",
223
+ "return",
224
+ "import",
225
+ "export",
226
+ "from",
227
+ "async",
228
+ "await",
229
+ "true",
230
+ "false",
231
+ "null",
232
+ "undefined",
233
+ "this",
234
+ "new",
235
+ "typeof",
236
+ "interface",
237
+ "type",
238
+ "string",
239
+ "number",
240
+ "boolean",
241
+ "void",
242
+ "any",
243
+ "unknown",
244
+ "Promise",
245
+ "Array",
246
+ "Object",
247
+ "Error",
248
+ "console",
249
+ "process",
250
+ "require",
251
+ "module",
252
+ "exports",
253
+ "default",
254
+ "extends",
255
+ "implements",
256
+ "public",
257
+ "private",
258
+ "protected",
259
+ "static",
260
+ "readonly",
261
+ "if",
262
+ "else",
263
+ "while",
264
+ "switch",
265
+ "case",
266
+ "break",
267
+ "continue",
268
+ "try",
269
+ "catch",
270
+ "finally",
271
+ "throw",
272
+ "with",
273
+ "yield",
274
+ "of",
275
+ "in",
276
+ "as",
277
+ "is",
278
+ "get",
279
+ "set"
280
+ ]);
281
+ function extractIdentifiers(text) {
282
+ const out = /* @__PURE__ */ new Set();
283
+ for (const m of text.matchAll(IDENT_RE)) {
284
+ const t = m[0];
285
+ if (STOP.has(t) || STOP.has(t.toLowerCase())) continue;
286
+ out.add(t);
287
+ }
288
+ return [...out].sort();
289
+ }
290
+ function scanIdentifiersAgainstTrie(text, trie) {
291
+ const known = [];
292
+ const unknown = [];
293
+ for (const id of extractIdentifiers(text)) {
294
+ if (trieHas(trie, id) || trieHasPrefix(trie, id)) known.push(id);
295
+ else unknown.push(id);
296
+ }
297
+ return { known, unknown, clean: unknown.length === 0 };
298
+ }
299
+ function maskAllowedNextChars(trie, partialIdent) {
300
+ return trieAllowedNextChars(trie, partialIdent);
301
+ }
302
+ function annotateUnknownIdentifiers(text, trie) {
303
+ const scan = scanIdentifiersAgainstTrie(text, trie);
304
+ if (scan.clean) return { text, unknown: [] };
305
+ const note = `
306
+
307
+ /* vg: unknown identifiers vs graph (not rewritten): ${scan.unknown.slice(0, 12).join(", ")}${scan.unknown.length > 12 ? "\u2026" : ""} */`;
308
+ return { text: text + note, unknown: scan.unknown };
309
+ }
310
+
311
311
  export { KvBlockRegistry, SessionPrefixCursor, annotateUnknownIdentifiers, buildIdentifierTrieFromGraph, contentHash, extractIdentifiers, graphDraftCandidates, longestWarmPrefix, maskAllowedNextChars, scanIdentifiersAgainstTrie, trieEnumerateWords, trieHas, trieHasPrefix };
312
- //# sourceMappingURL=chunk-JIBOJTGS.js.map
313
- //# sourceMappingURL=chunk-JIBOJTGS.js.map
312
+ //# sourceMappingURL=chunk-5HYCB55P.js.map
313
+ //# sourceMappingURL=chunk-5HYCB55P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/identifier-trie.ts","../src/runtime/kv-cache.ts","../src/runtime/identifier-mask.ts"],"names":[],"mappings":"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","file":"chunk-5HYCB55P.js","sourcesContent":["/**\n * Identifier trie for future logit masking (Approach B sampler hooks).\n *\n * Built from ActiveGraph symbol short/qualified names so constrained generation\n * can refuse identifiers that do not exist in the repo. Pure data structure —\n * no model binding required to unit-test.\n */\n\nexport interface TrieNode {\n children: Map<string, TrieNode>;\n terminal: boolean;\n}\n\nexport function createTrieNode(): TrieNode {\n return { children: new Map(), terminal: false };\n}\n\nexport function trieInsert(root: TrieNode, word: string): void {\n let node = root;\n for (const ch of word) {\n let next = node.children.get(ch);\n if (!next) {\n next = createTrieNode();\n node.children.set(ch, next);\n }\n node = next;\n }\n node.terminal = true;\n}\n\nexport function trieHas(root: TrieNode, word: string): boolean {\n let node = root;\n for (const ch of word) {\n const next = node.children.get(ch);\n if (!next) return false;\n node = next;\n }\n return node.terminal;\n}\n\nexport function trieHasPrefix(root: TrieNode, prefix: string): boolean {\n let node = root;\n for (const ch of prefix) {\n const next = node.children.get(ch);\n if (!next) return false;\n node = next;\n }\n return true;\n}\n\n/** Completions that extend `prefix` (capped). */\nexport function trieComplete(root: TrieNode, prefix: string, limit = 32): string[] {\n let node = root;\n for (const ch of prefix) {\n const next = node.children.get(ch);\n if (!next) return [];\n node = next;\n }\n const out: string[] = [];\n const walk = (n: TrieNode, acc: string): void => {\n if (out.length >= limit) return;\n if (n.terminal) out.push(acc);\n for (const [ch, child] of [...n.children.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n walk(child, acc + ch);\n if (out.length >= limit) return;\n }\n };\n walk(node, prefix);\n return out;\n}\n\nexport interface GraphLikeForTrie {\n nodes: Array<{ name?: string; qualifiedName?: string; id?: string }>;\n}\n\n/**\n * Build a trie of symbol identifiers from a graph. Includes short names and\n * the last segment of qualified names (e.g. `Foo` from `pkg.Foo`).\n */\nexport function buildIdentifierTrieFromGraph(graph: GraphLikeForTrie): TrieNode {\n const root = createTrieNode();\n const seen = new Set<string>();\n const add = (s: string | undefined): void => {\n const t = (s ?? '').trim();\n if (!t || seen.has(t)) return;\n seen.add(t);\n trieInsert(root, t);\n // Path segments for dotted / slash-qualified names (e.g. pkg.util.Foo → util, Foo).\n for (const part of t.split(/[./:#]/)) {\n const p = part.trim();\n if (!p || seen.has(p)) continue;\n seen.add(p);\n trieInsert(root, p);\n }\n };\n for (const n of graph.nodes) {\n add(n.name);\n add(n.qualifiedName);\n add(n.id);\n }\n return root;\n}\n\n/** Characters allowed to continue after `prefix` under the trie (for logit mask). */\nexport function trieAllowedNextChars(root: TrieNode, prefix: string): string[] {\n let node = root;\n for (const ch of prefix) {\n const next = node.children.get(ch);\n if (!next) return [];\n node = next;\n }\n return [...node.children.keys()].sort();\n}\n\n/**\n * Enumerate terminal words in the trie (capped). Used to positively bias known\n * graph identifiers when building a TokenBias without scanning the full vocab.\n */\nexport function trieEnumerateWords(root: TrieNode, limit = 4096): string[] {\n const out: string[] = [];\n const walk = (n: TrieNode, acc: string): void => {\n if (out.length >= limit) return;\n if (n.terminal && acc.length > 0) out.push(acc);\n for (const [ch, child] of [...n.children.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n walk(child, acc + ch);\n if (out.length >= limit) return;\n }\n };\n walk(root, '');\n return out;\n}\n","/**\n * Block-level KV / prompt prefix cache keyed by content hash (Approach B).\n *\n * Pure planning layer + multi-turn prefix cursor (P1/P2). The warm host uses\n * {@link longestWarmPrefix} / {@link SessionPrefixCursor} and may call the\n * binding's `evaluateWithoutGeneratingNewTokens` so RoPE state for warm\n * system/capsule blocks is not rebuilt every turn.\n *\n * schemaVersion: kv-cache/0\n */\n\nimport { createHash } from 'node:crypto';\n\nexport const KV_CACHE_SCHEMA = 'kv-cache/0' as const;\n\nexport interface KvBlockMeta {\n /** Content hash (sha256 hex, truncated in keys for path safety). */\n hash: string;\n /** Human label (system, capsule, tools, …). */\n kind: string;\n /** UTF-8 byte length of the source text. */\n bytes: number;\n /** Approx token count (chars/4 heuristic when unknown). */\n approxTokens: number;\n /** When this block entered the registry. */\n createdAt: number;\n}\n\nexport interface KvAssemblyPlan {\n schemaVersion: typeof KV_CACHE_SCHEMA;\n /** Blocks to reuse from cache (hashes). */\n hit: string[];\n /** Blocks that must be prefilled (hash + kind). */\n miss: Array<{ hash: string; kind: string; approxTokens: number }>;\n /** Ordered sequence of block hashes for the full prompt. */\n order: string[];\n /** Estimated tokens already “warm” vs total. */\n hitTokens: number;\n totalTokens: number;\n /**\n * P2: tokens that must be re-evaluated because the multi-turn cursor\n * diverged (subset of miss + trailing hits after fork).\n */\n deltaTokens?: number;\n /** How many leading blocks the session cursor already has evaluated. */\n cursorSkipBlocks?: number;\n}\n\nexport function contentHash(text: string): string {\n return createHash('sha256').update(text, 'utf8').digest('hex');\n}\n\nexport function approxTokens(text: string): number {\n return Math.max(1, Math.ceil(text.length / 4));\n}\n\nexport function blockMeta(kind: string, text: string, now = Date.now()): KvBlockMeta {\n return {\n hash: contentHash(text),\n kind,\n bytes: Buffer.byteLength(text, 'utf8'),\n approxTokens: approxTokens(text),\n createdAt: now,\n };\n}\n\n/** In-memory registry of which content hashes are considered warm. */\nexport class KvBlockRegistry {\n private readonly warm = new Map<string, KvBlockMeta>();\n\n markWarm(meta: KvBlockMeta): void {\n this.warm.set(meta.hash, meta);\n }\n\n isWarm(hash: string): boolean {\n return this.warm.has(hash);\n }\n\n get(hash: string): KvBlockMeta | undefined {\n return this.warm.get(hash);\n }\n\n clear(): void {\n this.warm.clear();\n }\n\n size(): number {\n return this.warm.size;\n }\n\n /**\n * Plan assembly for ordered text segments. Hits reuse warm blocks; misses\n * need prefill. After a successful forward pass, call {@link commit} on miss hashes.\n */\n plan(segments: Array<{ kind: string; text: string }>, cursor?: SessionPrefixCursor): KvAssemblyPlan {\n const order: string[] = [];\n const hit: string[] = [];\n const miss: KvAssemblyPlan['miss'] = [];\n let hitTokens = 0;\n let totalTokens = 0;\n for (const seg of segments) {\n const meta = blockMeta(seg.kind, seg.text);\n order.push(meta.hash);\n totalTokens += meta.approxTokens;\n if (this.isWarm(meta.hash)) {\n hit.push(meta.hash);\n hitTokens += meta.approxTokens;\n } else {\n miss.push({ hash: meta.hash, kind: meta.kind, approxTokens: meta.approxTokens });\n }\n }\n let cursorSkipBlocks = 0;\n let deltaTokens = totalTokens;\n if (cursor) {\n const d = cursor.delta(order, segments);\n cursorSkipBlocks = d.skipBlocks;\n deltaTokens = d.evaluateTokens;\n }\n return {\n schemaVersion: KV_CACHE_SCHEMA,\n hit,\n miss,\n order,\n hitTokens,\n totalTokens,\n cursorSkipBlocks,\n deltaTokens,\n };\n }\n\n /** After prefill, mark miss segments warm. */\n commit(segments: Array<{ kind: string; text: string }>): void {\n for (const seg of segments) {\n this.markWarm(blockMeta(seg.kind, seg.text));\n }\n }\n}\n\n/**\n * Multi-turn cursor: remembers the hash chain last evaluated on the sequence\n * so we only re-evaluate from the first divergence (P2 RoPE-friendly delta).\n */\nexport class SessionPrefixCursor {\n private chain: string[] = [];\n\n /** Hashes currently considered evaluated on the sequence. */\n get evaluatedHashes(): readonly string[] {\n return this.chain;\n }\n\n /**\n * Compute how many leading blocks match the previous chain and how many\n * approx tokens still need evaluate (from the fork point).\n */\n delta(\n order: string[],\n segments: Array<{ kind: string; text: string }>,\n ): { skipBlocks: number; evaluateTokens: number; evaluateText: string } {\n let skip = 0;\n while (skip < order.length && skip < this.chain.length && order[skip] === this.chain[skip]) {\n skip++;\n }\n let evaluateTokens = 0;\n const parts: string[] = [];\n for (let i = skip; i < segments.length; i++) {\n const meta = blockMeta(segments[i].kind, segments[i].text);\n evaluateTokens += meta.approxTokens;\n parts.push(segments[i].text);\n }\n return { skipBlocks: skip, evaluateTokens, evaluateText: parts.join('\\n') };\n }\n\n /** After successful evaluate of full ordered hashes, advance the cursor. */\n commit(order: string[]): void {\n this.chain = [...order];\n }\n\n /** Reset after sequence dispose / model reload. */\n reset(): void {\n this.chain = [];\n }\n}\n\n/**\n * Longest leading run of warm segments (stable system/capsule prefix).\n * Host can skip re-prefilling these when the sequence API allows evaluate-only.\n */\nexport function longestWarmPrefix(\n registry: KvBlockRegistry,\n segments: Array<{ kind: string; text: string }>,\n): {\n count: number;\n tokens: number;\n text: string;\n hashes: string[];\n} {\n let count = 0;\n let tokens = 0;\n const hashes: string[] = [];\n const parts: string[] = [];\n for (const seg of segments) {\n const meta = blockMeta(seg.kind, seg.text);\n if (!registry.isWarm(meta.hash)) break;\n count++;\n tokens += meta.approxTokens;\n hashes.push(meta.hash);\n parts.push(seg.text);\n }\n return { count, tokens, text: parts.join('\\n'), hashes };\n}\n\n/**\n * Speculative draft tokens for quotational spans the graph already knows\n * verbatim (signatures / imports). The big model verifies; high acceptance\n * expected on code. Pure: returns candidate draft strings, does not call a model.\n */\nexport function graphDraftCandidates(\n knownVerbatim: string[],\n max = 8,\n): string[] {\n return knownVerbatim\n .map((s) => s.trim())\n .filter((s) => s.length >= 8 && s.length <= 400)\n .slice(0, max);\n}\n","/**\n * Identifier masking helpers for Approach B sampler integration.\n *\n * Full logit masking needs the llama.cpp binding's token callback. Until that\n * hook is universal across binding versions, we:\n * 1. Expose allowed-next-char sets from the trie (for native mask hooks)\n * 2. Post-validate free-text model output for repo identifiers\n * 3. Optionally rewrite / flag unknown identifiers in code-like spans\n */\n\nimport type { TrieNode } from './identifier-trie.js';\nimport { trieAllowedNextChars, trieHas, trieHasPrefix } from './identifier-trie.js';\n\n/** JS/TS-ish identifier token (conservative). */\nconst IDENT_RE = /\\b[A-Za-z_][A-Za-z0-9_]{2,}\\b/g;\n\n/** Tokens we never treat as \"must exist in the graph\". */\nconst STOP = new Set([\n 'the',\n 'and',\n 'for',\n 'var',\n 'let',\n 'const',\n 'function',\n 'class',\n 'return',\n 'import',\n 'export',\n 'from',\n 'async',\n 'await',\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'this',\n 'new',\n 'typeof',\n 'interface',\n 'type',\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'any',\n 'unknown',\n 'Promise',\n 'Array',\n 'Object',\n 'Error',\n 'console',\n 'process',\n 'require',\n 'module',\n 'exports',\n 'default',\n 'extends',\n 'implements',\n 'public',\n 'private',\n 'protected',\n 'static',\n 'readonly',\n 'if',\n 'else',\n 'while',\n 'switch',\n 'case',\n 'break',\n 'continue',\n 'try',\n 'catch',\n 'finally',\n 'throw',\n 'with',\n 'yield',\n 'of',\n 'in',\n 'as',\n 'is',\n 'get',\n 'set',\n]);\n\nexport interface IdentifierScanResult {\n /** Identifiers that appear in text and exist in the trie. */\n known: string[];\n /** Identifiers that appear in text but are absent from the trie. */\n unknown: string[];\n /** True when every scanned identifier is known (or stopword). */\n clean: boolean;\n}\n\n/** Extract candidate identifiers from model text. */\nexport function extractIdentifiers(text: string): string[] {\n const out = new Set<string>();\n for (const m of text.matchAll(IDENT_RE)) {\n const t = m[0];\n if (STOP.has(t) || STOP.has(t.toLowerCase())) continue;\n out.add(t);\n }\n return [...out].sort();\n}\n\nexport function scanIdentifiersAgainstTrie(text: string, trie: TrieNode): IdentifierScanResult {\n const known: string[] = [];\n const unknown: string[] = [];\n for (const id of extractIdentifiers(text)) {\n if (trieHas(trie, id) || trieHasPrefix(trie, id)) known.push(id);\n else unknown.push(id);\n }\n return { known, unknown, clean: unknown.length === 0 };\n}\n\n/**\n * Allowed next characters for a partial identifier under the trie — the hook\n * surface for real logit masks when the binding supports custom samplers.\n */\nexport function maskAllowedNextChars(trie: TrieNode, partialIdent: string): string[] {\n return trieAllowedNextChars(trie, partialIdent);\n}\n\n/**\n * Annotate model output when unknown identifiers appear (non-destructive).\n * Returns original text when clean; otherwise appends a short warning block the\n * agent/tools can surface without rewriting the patch body blindly.\n */\nexport function annotateUnknownIdentifiers(text: string, trie: TrieNode): { text: string; unknown: string[] } {\n const scan = scanIdentifiersAgainstTrie(text, trie);\n if (scan.clean) return { text, unknown: [] };\n const note = `\\n\\n/* vg: unknown identifiers vs graph (not rewritten): ${scan.unknown.slice(0, 12).join(', ')}${scan.unknown.length > 12 ? '…' : ''} */`;\n return { text: text + note, unknown: scan.unknown };\n}\n"]}
@@ -1,6 +1,7 @@
1
- import { searchSymbols, resolveVersion, resolveLib, loadCatalog, driftFor, localPackageDocs, readDoc, inventory, localApiSurface } from './chunk-G4HTI4ZM.js';
2
- import { loadConfig, computeUpgradeImpact, getChangelogSignals, gitHistoryAvailable, buildVersionTimelines, findPackageTimeline, severityRank, projectTypeToVulnEcosystem } from './chunk-HDQG3QYV.js';
1
+ import { availableRegionIds, resolveIngestHost, dashHostForIngestHost, ingestHostForRegionId } from './chunk-HTLDXEHW.js';
2
+ import { loadConfig, computeUpgradeImpact, getChangelogSignals, gitHistoryAvailable, buildVersionTimelines, findPackageTimeline, severityRank, projectTypeToVulnEcosystem } from './chunk-ON7PZNYV.js';
3
3
  import { writeTextFile, pathExists, readJsonFile } from './chunk-CRAMOEBE.js';
4
+ import { searchSymbols, resolveVersion, resolveLib, loadCatalog, driftFor, localPackageDocs, readDoc, inventory, localApiSurface } from './chunk-FHJBGPJZ.js';
4
5
  import { resolveOne } from './chunk-J7LKEB2R.js';
5
6
  import { impactOf, indexFor, withTimeout, getNodeEmbeddings, queryGraphSemantic, queryGraph, loadEmbedder, isModelReady } from './chunk-EETK7S43.js';
6
7
  import { discoverModels } from './chunk-CQDUBAQY.js';
@@ -257,63 +258,6 @@ function ensureGitignored(entry, startDir = process.cwd()) {
257
258
  return { status: fileExisted ? "added" : "created", entry, gitignorePath };
258
259
  }
259
260
 
260
- // src/reporting/regions.ts
261
- var REGIONS = [
262
- {
263
- id: "us",
264
- label: "United States",
265
- ingestHost: "us.ingest.vibgrate.com",
266
- dashHost: "dash.vibgrate.com",
267
- available: true
268
- },
269
- {
270
- id: "eu",
271
- label: "European Union",
272
- ingestHost: "eu.ingest.vibgrate.com",
273
- dashHost: "dash.vibgrate.eu",
274
- available: true
275
- },
276
- {
277
- id: "apac",
278
- label: "Asia-Pacific (coming soon)",
279
- ingestHost: "apac.ingest.vibgrate.com",
280
- dashHost: "dash.vibgrate.com",
281
- available: false
282
- }
283
- ];
284
- var DEFAULT_REGION = "us";
285
- function availableRegionIds() {
286
- return REGIONS.filter((r) => r.available).map((r) => r.id);
287
- }
288
- function findRegion(id) {
289
- return REGIONS.find((r) => r.id === id);
290
- }
291
- function resolveIngestHost(region, ingest) {
292
- if (ingest) {
293
- try {
294
- return new URL(ingest).host;
295
- } catch {
296
- throw new Error(`Invalid ingest URL: ${ingest}`);
297
- }
298
- }
299
- const id = (region ?? DEFAULT_REGION).toLowerCase();
300
- const match = findRegion(id);
301
- if (!match) {
302
- throw new Error(`Unknown region "${id}". Supported: ${availableRegionIds().join(", ")}`);
303
- }
304
- if (!match.available) {
305
- throw new Error(`Region "${id}" (${match.label}) is not yet available. Supported: ${availableRegionIds().join(", ")}`);
306
- }
307
- return match.ingestHost;
308
- }
309
- function dashHostForIngestHost(ingestHost) {
310
- const match = REGIONS.find((r) => r.ingestHost === ingestHost);
311
- return match?.dashHost ?? "dash.vibgrate.com";
312
- }
313
- function ingestHostForRegionId(region) {
314
- return findRegion(region.toLowerCase())?.ingestHost;
315
- }
316
-
317
261
  // src/reporting/commands/dsn.ts
318
262
  function generateKeyMaterial() {
319
263
  return {
@@ -2179,6 +2123,6 @@ function navigationToolsetConfig(serverName = "vibgrate") {
2179
2123
  };
2180
2124
  }
2181
2125
 
2182
- export { FREE_PACK, HOT_TOOLS, TOOLS, assessDocQuality, availableRegionIds, clearStoredCredentials, countTokens, coveringTests, createWorkspaceDsn, credentialsPath, dashHostForIngestHost, deferredToolNames, detectRunner, dsnCommand, ensureGitignored, fetchHostedDocsCached, findGitRoot, gitignoreEntryForCredentials, homeCredentialsPath, hostedBase, ingestHostForRegionId, navigationToolsetConfig, parseDsn, pathDisconnect, projectCredentialsPath, publishPrivateLibrary, pushCommand, readScanArtifact, readStoredCredentials, renderToolResult, resolveDsn, resolveIngestHost, selectForBudget, shortestPath, symbolsFromApi, testsToRun, uploadScanArtifact, warmEmbedderInBackground, writeStoredCredentials };
2183
- //# sourceMappingURL=chunk-67YG3R5F.js.map
2184
- //# sourceMappingURL=chunk-67YG3R5F.js.map
2126
+ export { FREE_PACK, HOT_TOOLS, TOOLS, assessDocQuality, clearStoredCredentials, countTokens, coveringTests, createWorkspaceDsn, credentialsPath, deferredToolNames, detectRunner, dsnCommand, ensureGitignored, fetchHostedDocsCached, findGitRoot, gitignoreEntryForCredentials, homeCredentialsPath, hostedBase, navigationToolsetConfig, parseDsn, pathDisconnect, projectCredentialsPath, publishPrivateLibrary, pushCommand, readScanArtifact, readStoredCredentials, renderToolResult, resolveDsn, selectForBudget, shortestPath, symbolsFromApi, testsToRun, uploadScanArtifact, warmEmbedderInBackground, writeStoredCredentials };
2127
+ //# sourceMappingURL=chunk-6D4BCGRQ.js.map
2128
+ //# sourceMappingURL=chunk-6D4BCGRQ.js.map