@vibgrate/cli 2026.731.3 → 2026.803.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 (116) hide show
  1. package/dist/agent-HNV2VUCO.js +24 -0
  2. package/dist/{agent-6XOI7RVW.js.map → agent-HNV2VUCO.js.map} +1 -1
  3. package/dist/baseline-6WTULHM5.js +9 -0
  4. package/dist/{baseline-PY6TETA5.js.map → baseline-6WTULHM5.js.map} +1 -1
  5. package/dist/{chunk-B6S2DSBS.js → chunk-2TLQDF6C.js} +129 -20
  6. package/dist/chunk-2TLQDF6C.js.map +1 -0
  7. package/dist/{chunk-X634FZVG.js → chunk-3LOWJSAF.js} +11 -16
  8. package/dist/{chunk-X634FZVG.js.map → chunk-3LOWJSAF.js.map} +1 -1
  9. package/dist/{chunk-BMUTNUB7.js → chunk-4HFSUIIN.js} +117 -6
  10. package/dist/chunk-4HFSUIIN.js.map +1 -0
  11. package/dist/{chunk-3VSU7G75.js → chunk-536J6HUR.js} +235 -13
  12. package/dist/chunk-536J6HUR.js.map +1 -0
  13. package/dist/{chunk-EETK7S43.js → chunk-5VH3Y4QC.js} +111 -33
  14. package/dist/chunk-5VH3Y4QC.js.map +1 -0
  15. package/dist/{chunk-PHGAUWWF.js → chunk-6I4TXAI6.js} +3 -3
  16. package/dist/{chunk-PHGAUWWF.js.map → chunk-6I4TXAI6.js.map} +1 -1
  17. package/dist/{chunk-FF5ZQ6KI.js → chunk-6JP7HGIF.js} +4 -4
  18. package/dist/{chunk-FF5ZQ6KI.js.map → chunk-6JP7HGIF.js.map} +1 -1
  19. package/dist/chunk-AJ2KE3NT.js +446 -0
  20. package/dist/chunk-AJ2KE3NT.js.map +1 -0
  21. package/dist/{chunk-WK52LWRX.js → chunk-B2KLJPFY.js} +5 -5
  22. package/dist/{chunk-WK52LWRX.js.map → chunk-B2KLJPFY.js.map} +1 -1
  23. package/dist/{chunk-Z7VH4RPO.js → chunk-BBFQZ7CA.js} +4 -4
  24. package/dist/{chunk-Z7VH4RPO.js.map → chunk-BBFQZ7CA.js.map} +1 -1
  25. package/dist/{chunk-FHJBGPJZ.js → chunk-BWMMR5XA.js} +4 -4
  26. package/dist/{chunk-FHJBGPJZ.js.map → chunk-BWMMR5XA.js.map} +1 -1
  27. package/dist/{chunk-KLO2XBUX.js → chunk-CC6F75GI.js} +14 -7
  28. package/dist/chunk-CC6F75GI.js.map +1 -0
  29. package/dist/{chunk-SCTLOFNH.js → chunk-CE45STY5.js} +4 -4
  30. package/dist/{chunk-SCTLOFNH.js.map → chunk-CE45STY5.js.map} +1 -1
  31. package/dist/{chunk-MOLBANFB.js → chunk-DIU3MXB3.js} +4 -4
  32. package/dist/{chunk-MOLBANFB.js.map → chunk-DIU3MXB3.js.map} +1 -1
  33. package/dist/{chunk-5IA2TA57.js → chunk-FKFRASAB.js} +323 -152
  34. package/dist/chunk-FKFRASAB.js.map +1 -0
  35. package/dist/{chunk-EVLS2M5G.js → chunk-JFE7XCAE.js} +3 -3
  36. package/dist/{chunk-EVLS2M5G.js.map → chunk-JFE7XCAE.js.map} +1 -1
  37. package/dist/{chunk-RGEVBSLK.js → chunk-JUSXLCSE.js} +3 -3
  38. package/dist/{chunk-RGEVBSLK.js.map → chunk-JUSXLCSE.js.map} +1 -1
  39. package/dist/{chunk-7G5S5KZN.js → chunk-KUZLILN3.js} +16 -3
  40. package/dist/chunk-KUZLILN3.js.map +1 -0
  41. package/dist/{chunk-AVCBKQKA.js → chunk-N4IDP2M2.js} +218 -51
  42. package/dist/chunk-N4IDP2M2.js.map +1 -0
  43. package/dist/{chunk-XRN7DQGR.js → chunk-NJFQCDGA.js} +3 -3
  44. package/dist/{chunk-XRN7DQGR.js.map → chunk-NJFQCDGA.js.map} +1 -1
  45. package/dist/{chunk-LTTVCI5C.js → chunk-O7MTBC52.js} +134 -9
  46. package/dist/chunk-O7MTBC52.js.map +1 -0
  47. package/dist/chunk-QT2PMGN3.js +6 -0
  48. package/dist/{chunk-DEKGSQHL.js.map → chunk-QT2PMGN3.js.map} +1 -1
  49. package/dist/{chunk-5XIEVZLW.js → chunk-S4NSF5AZ.js} +6 -6
  50. package/dist/{chunk-5XIEVZLW.js.map → chunk-S4NSF5AZ.js.map} +1 -1
  51. package/dist/{chunk-TRKRRX2S.js → chunk-SJFBXCII.js} +35 -6
  52. package/dist/chunk-SJFBXCII.js.map +1 -0
  53. package/dist/{chunk-RIWLXMMT.js → chunk-SNKTD23L.js} +109 -10
  54. package/dist/chunk-SNKTD23L.js.map +1 -0
  55. package/dist/{chunk-IPICO2RV.js → chunk-VIWZ4QT7.js} +14 -3
  56. package/dist/chunk-VIWZ4QT7.js.map +1 -0
  57. package/dist/{chunk-US2DAKCM.js → chunk-Y7YKUZ3T.js} +8 -7
  58. package/dist/chunk-Y7YKUZ3T.js.map +1 -0
  59. package/dist/cli.js +732 -347
  60. package/dist/cli.js.map +1 -1
  61. package/dist/ensure-map-5YEI7R7V.js +29 -0
  62. package/dist/{ensure-map-UQL7SM34.js.map → ensure-map-5YEI7R7V.js.map} +1 -1
  63. package/dist/{graph-backend-G5Y6QQV4.js → graph-backend-CPHLUKUC.js} +5 -5
  64. package/dist/{graph-backend-G5Y6QQV4.js.map → graph-backend-CPHLUKUC.js.map} +1 -1
  65. package/dist/index.d.ts +127 -9
  66. package/dist/index.js +17 -16
  67. package/dist/index.js.map +1 -1
  68. package/dist/{interactive-QWT7ERXJ.js → interactive-TNRE4OEK.js} +46 -33
  69. package/dist/interactive-TNRE4OEK.js.map +1 -0
  70. package/dist/{llm-host-DZBD5D36.js → llm-host-XFYFOAAX.js} +4 -4
  71. package/dist/{llm-host-DZBD5D36.js.map → llm-host-XFYFOAAX.js.map} +1 -1
  72. package/dist/load-MWG6WZTK.js +10 -0
  73. package/dist/{load-WA53B3GW.js.map → load-MWG6WZTK.js.map} +1 -1
  74. package/dist/model-manager-GJ2YSTSK.js +1 -1
  75. package/dist/{run-outcome-J2IDIVYI.js → run-outcome-375HMSQG.js} +6 -6
  76. package/dist/{run-outcome-J2IDIVYI.js.map → run-outcome-375HMSQG.js.map} +1 -1
  77. package/dist/runtime-session-3MPWXNRL.js +20 -0
  78. package/dist/{runtime-session-52P2Y5LX.js.map → runtime-session-3MPWXNRL.js.map} +1 -1
  79. package/dist/session-2NGJLI5Y.js +15 -0
  80. package/dist/{session-L7SJNE55.js.map → session-2NGJLI5Y.js.map} +1 -1
  81. package/dist/session-store-F7NX7SZN.js +4 -0
  82. package/dist/{session-store-SQECEXUU.js.map → session-store-F7NX7SZN.js.map} +1 -1
  83. package/dist/{stream-json-TSGYC2MQ.js → stream-json-AUMU3NLV.js} +48 -16
  84. package/dist/stream-json-AUMU3NLV.js.map +1 -0
  85. package/dist/{vg-mcp-bridge-IFAXEQMZ.js → vg-mcp-bridge-D463EHQI.js} +13 -11
  86. package/dist/vg-mcp-bridge-D463EHQI.js.map +1 -0
  87. package/dist/{vgd-PNR7UKLL.js → vgd-Z23PXSP4.js} +10 -10
  88. package/dist/vgd-Z23PXSP4.js.map +1 -0
  89. package/package.json +4 -2
  90. package/dist/agent-6XOI7RVW.js +0 -22
  91. package/dist/baseline-PY6TETA5.js +0 -9
  92. package/dist/chunk-3VSU7G75.js.map +0 -1
  93. package/dist/chunk-5IA2TA57.js.map +0 -1
  94. package/dist/chunk-7G5S5KZN.js.map +0 -1
  95. package/dist/chunk-AVCBKQKA.js.map +0 -1
  96. package/dist/chunk-B6S2DSBS.js.map +0 -1
  97. package/dist/chunk-BMUTNUB7.js.map +0 -1
  98. package/dist/chunk-DEKGSQHL.js +0 -6
  99. package/dist/chunk-EETK7S43.js.map +0 -1
  100. package/dist/chunk-IPICO2RV.js.map +0 -1
  101. package/dist/chunk-KLO2XBUX.js.map +0 -1
  102. package/dist/chunk-LTTVCI5C.js.map +0 -1
  103. package/dist/chunk-RIWLXMMT.js.map +0 -1
  104. package/dist/chunk-TRKRRX2S.js.map +0 -1
  105. package/dist/chunk-US2DAKCM.js.map +0 -1
  106. package/dist/chunk-ZKNB4YH4.js +0 -102
  107. package/dist/chunk-ZKNB4YH4.js.map +0 -1
  108. package/dist/ensure-map-UQL7SM34.js +0 -28
  109. package/dist/interactive-QWT7ERXJ.js.map +0 -1
  110. package/dist/load-WA53B3GW.js +0 -10
  111. package/dist/runtime-session-52P2Y5LX.js +0 -20
  112. package/dist/session-L7SJNE55.js +0 -13
  113. package/dist/session-store-SQECEXUU.js +0 -4
  114. package/dist/stream-json-TSGYC2MQ.js.map +0 -1
  115. package/dist/vg-mcp-bridge-IFAXEQMZ.js.map +0 -1
  116. package/dist/vgd-PNR7UKLL.js.map +0 -1
@@ -209,11 +209,22 @@ function relativeResolver(relSet) {
209
209
  }
210
210
  };
211
211
  }
212
+ var ESM_EMITTED = {
213
+ ".js": [".ts", ".tsx"],
214
+ ".jsx": [".tsx"],
215
+ ".mjs": [".mts"],
216
+ ".cjs": [".cts"]
217
+ };
212
218
  function makeProbe(relSet) {
213
219
  return (base) => {
214
220
  const norm = normalizeRel(base);
215
221
  if (!norm) return null;
216
222
  if (relSet.has(norm)) return norm;
223
+ const emittedExt = Object.keys(ESM_EMITTED).find((e) => norm.endsWith(e));
224
+ if (emittedExt) {
225
+ const stem = norm.slice(0, -emittedExt.length);
226
+ for (const ext of ESM_EMITTED[emittedExt]) if (relSet.has(stem + ext)) return stem + ext;
227
+ }
217
228
  for (const ext of JS_TS_EXT) if (relSet.has(norm + ext)) return norm + ext;
218
229
  for (const ext of JS_TS_EXT) if (relSet.has(`${norm}/index${ext}`)) return `${norm}/index${ext}`;
219
230
  for (const ext of OTHER_EXT) if (relSet.has(norm + ext)) return norm + ext;
@@ -632,7 +643,7 @@ function resolve2(parses, resolver) {
632
643
  const unresolvedList = [...unresolved.values()].sort(
633
644
  (a, b) => a.from.localeCompare(b.from) || a.kind.localeCompare(b.kind) || a.name.localeCompare(b.name)
634
645
  );
635
- return { nodes, edges: edges.toArray(), unresolved: unresolvedList, stats };
646
+ return { nodes, edges: edges.toArray(), unresolved: unresolvedList, stats, importsByFile: importedFilesByRel };
636
647
  }
637
648
  function bumpUnresolved(map, from, name, kind, fromRel) {
638
649
  const key = `${from}${kind}${name}`;
@@ -785,5 +796,5 @@ var EdgeSet = class {
785
796
  };
786
797
 
787
798
  export { applyStaticTestLinkage, buildModuleResolver, edgeId, isTestFile, nodeId, parseJsonc, relativeResolver, resolve2 as resolve };
788
- //# sourceMappingURL=chunk-IPICO2RV.js.map
789
- //# sourceMappingURL=chunk-IPICO2RV.js.map
799
+ //# sourceMappingURL=chunk-VIWZ4QT7.js.map
800
+ //# sourceMappingURL=chunk-VIWZ4QT7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/module-resolver.ts","../src/engine/ids.ts","../src/engine/tests.ts","../src/engine/resolve.ts"],"names":["resolve","path2","mod","sep"],"mappings":"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","file":"chunk-VIWZ4QT7.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * Module resolution for import edges. Resolves an import specifier (relative,\n * `tsconfig` path alias, or workspace-package name) to a repo-relative file —\n * the fix for alias-heavy TS monorepos (Nx/Turborepo) where every cross-package\n * import looked \"external\" and tanked call resolution.\n *\n * Deterministic: it reads the repo's tsconfig(s) and workspace manifests once at\n * construction, then `resolve()` is pure over those in-memory maps. Still the\n * heuristic rung — precise SCIP/stack-graphs slot above it later — but now\n * scope-aware of the project's own module map.\n */\n\nexport interface ModuleResolver {\n /** Resolve `source` imported from `fromRel`; returns a repo-rel path or null (external). */\n resolve(fromRel: string, source: string): string | null;\n}\n\n// Container SFC formats (.vue/.svelte/.astro) resolve as part of the JS/TS\n// group: their script region is JS/TS, they import ts/js modules, and ts/js\n// files import them back (`import Foo from './Foo.vue'`).\nconst JS_TS_EXT = ['.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs', '.vue', '.svelte', '.astro'];\nconst OTHER_EXT = [\n '.py', '.pyi', '.go', '.rs', '.rb', '.java', '.cs',\n '.php', '.kt', '.kts', '.swift', '.scala', '.sc', '.dart', '.lua',\n '.ex', '.exs', '.sh', '.bash', '.zig', '.c', '.cpp', '.cc', '.cxx', '.hpp', '.hh', '.hxx', '.h',\n '.m', '.mm', '.ml', '.mli', '.res', '.sol',\n];\n\n// Which target extensions a dotted import from a given file may resolve to.\n// Keeps Python imports matching Python files, Java matching Java, etc. — a\n// dotted module path must not cross languages.\nconst EXT_GROUPS: Record<string, string[]> = {\n '.py': ['.py', '.pyi'],\n '.pyi': ['.py', '.pyi'],\n '.java': ['.java'],\n '.cs': ['.cs'],\n '.go': ['.go'],\n '.rs': ['.rs'],\n '.rb': ['.rb'],\n};\nfor (const e of JS_TS_EXT) EXT_GROUPS[e] = JS_TS_EXT;\nconst CPP_EXT = ['.cpp', '.cc', '.cxx', '.hpp', '.hh', '.hxx', '.h'];\nObject.assign(EXT_GROUPS, {\n '.php': ['.php'],\n '.kt': ['.kt', '.kts'],\n '.kts': ['.kt', '.kts'],\n '.swift': ['.swift'],\n '.scala': ['.scala', '.sc'],\n '.sc': ['.scala', '.sc'],\n '.dart': ['.dart'],\n '.lua': ['.lua'],\n '.ex': ['.ex', '.exs'],\n '.exs': ['.ex', '.exs'],\n '.sh': ['.sh', '.bash'],\n '.bash': ['.sh', '.bash'],\n '.zig': ['.zig'],\n '.c': ['.c', '.h'],\n '.cpp': CPP_EXT,\n '.cc': CPP_EXT,\n '.cxx': CPP_EXT,\n '.hpp': CPP_EXT,\n '.hh': CPP_EXT,\n '.hxx': CPP_EXT,\n '.h': [...CPP_EXT, '.c'],\n // ObjC #imports headers; ObjC++ additionally reaches C++ headers.\n '.m': ['.h', '.m', '.mm'],\n '.mm': ['.h', '.m', '.mm', ...CPP_EXT],\n '.ml': ['.ml', '.mli'],\n '.mli': ['.ml', '.mli'],\n '.res': ['.res'],\n '.sol': ['.sol'],\n // Template containers: ERB fragments are Ruby; HTML/EJS script is JS.\n '.erb': ['.rb', '.erb'],\n '.html': JS_TS_EXT,\n '.htm': JS_TS_EXT,\n '.ejs': JS_TS_EXT,\n});\n\nexport function buildModuleResolver(root: string, relSet: Set<string>): ModuleResolver {\n const probe = makeProbe(relSet);\n const suffixIndex = buildSuffixIndex(relSet);\n const tsPaths = loadTsconfigPaths(root); // {baseUrlRel, paths}\n const workspaces = loadWorkspacePackages(root); // name -> dirRel\n\n function resolveAlias(source: string): string | null {\n if (!tsPaths) return null;\n for (const [pattern, targets] of tsPaths.paths) {\n const m = matchPattern(pattern, source);\n if (m === null) continue;\n for (const target of targets) {\n const sub = target.replace('*', m);\n const rel = posixJoin(tsPaths.baseUrlRel, sub);\n const hit = probe(rel);\n if (hit) return hit;\n }\n }\n return null;\n }\n\n function resolveWorkspace(source: string): string | null {\n if (!workspaces.size) return null;\n // longest package-name match (so @org/a/b prefers @org/a/b over @org/a)\n let best: { dirRel: string; rest: string } | null = null;\n for (const [name, dirRel] of workspaces) {\n if (source === name || source.startsWith(`${name}/`)) {\n const rest = source === name ? '' : source.slice(name.length + 1);\n if (!best || name.length > best.dirRel.length) best = { dirRel, rest };\n }\n }\n if (!best) return null;\n const base = best.rest ? posixJoin(best.dirRel, best.rest) : best.dirRel;\n return probe(base) ?? probe(posixJoin(base, 'src/index')) ?? probe(posixJoin(base, 'index'));\n }\n\n return {\n resolve(fromRel, source) {\n // PHP namespaces (`App\\\\Models\\\\User`) — treat as a dotted module path so\n // the PSR-4-style suffix machinery can match `src/Models/User.php`.\n if (source.includes('\\\\')) source = source.split('\\\\').join('.');\n // JS/TS relative (`./x`, `../x`) — join against the importer's directory.\n if (source.startsWith('./') || source.startsWith('../')) {\n return probe(posixJoin(path.posix.dirname(fromRel), source));\n }\n // Bare relative FILE references: `require 'helpers.php'` (PHP),\n // `import 'util.dart'`, `@import(\"util.zig\")`, `#include \"util.h\"` — an\n // extension-bearing name resolves against the importer's directory first.\n if (/\\.[A-Za-z0-9]+$/.test(source) && !source.startsWith('<')) {\n const hit = probe(posixJoin(path.posix.dirname(fromRel), source));\n if (hit) return hit;\n }\n // Python-style relative (`.models`, `..core.utils`, `.`) — leading dots are\n // package levels, not a filename. One dot = the file's package (its dir),\n // each extra dot goes up one package.\n if (source.startsWith('.')) {\n return resolvePyRelative(probe, fromRel, source);\n }\n return (\n resolveAlias(source) ??\n resolveWorkspace(source) ??\n resolveSuffix(suffixIndex, fromRel, source) ??\n resolveDotted(probe, source)\n );\n },\n };\n}\n\n// --- suffix-based module resolution (Python/Java packages, src-layout) ---\n\ninterface SuffixEntry {\n rel: string;\n key: string; // path without extension (or directory, for __init__/index)\n ext: string;\n}\n\n/**\n * Index every file by the LAST segment of its module key, so a dotted import can\n * be matched against the *tail* of a repo path. This is what makes real Python\n * and Java layouts resolve: `from src.feature_pipeline.services.x import Y` in a\n * monorepo where the file actually lives at\n * `feature-pipeline/src/feature_pipeline/services/x.py` (per-subproject `src/`\n * roots, PYTHONPATH-style), or `import com.example.Foo` →\n * `.../src/main/java/com/example/Foo.java`. A repo-root/`src/` prefix probe\n * (the old behaviour) resolved none of these, so cross-file edges were ~0.\n */\nfunction buildSuffixIndex(relSet: Set<string>): Map<string, SuffixEntry[]> {\n const byLast = new Map<string, SuffixEntry[]>();\n for (const rel of relSet) {\n const dot = rel.lastIndexOf('.');\n if (dot < 0) continue;\n const ext = rel.slice(dot);\n if (!EXT_GROUPS[ext]) continue;\n let key = rel.slice(0, dot);\n const base = key.slice(key.lastIndexOf('/') + 1);\n if (base === '__init__' || base === 'index') {\n key = key.slice(0, Math.max(0, key.length - base.length - 1)); // → directory key\n }\n if (!key) continue;\n const last = key.slice(key.lastIndexOf('/') + 1);\n const list = byLast.get(last);\n if (list) list.push({ rel, key, ext });\n else byLast.set(last, [{ rel, key, ext }]);\n }\n return byLast;\n}\n\n/**\n * Resolve a dotted module path (Python/Java) by matching it against the tail of\n * a repo file's path, restricted to the importer's language group. On multiple\n * matches, pick the file sharing the longest path prefix with the importer\n * (same subproject), then the shortest path, then lexicographically — fully\n * deterministic.\n */\nfunction resolveSuffix(\n index: Map<string, SuffixEntry[]>,\n fromRel: string,\n source: string,\n): string | null {\n if (!/^[A-Za-z_][\\w.]*$/.test(source) || !source.includes('.')) return null;\n const fromDot = fromRel.lastIndexOf('.');\n const fromExt = fromDot >= 0 ? fromRel.slice(fromDot) : '';\n const allowed = EXT_GROUPS[fromExt];\n if (!allowed) return null; // unknown importer language — don't risk a cross-language match\n const q = source.replace(/\\./g, '/');\n const last = q.slice(q.lastIndexOf('/') + 1);\n const cands = index.get(last);\n if (!cands) return null;\n const matches = cands.filter(\n (c) => allowed.includes(c.ext) && (c.key === q || c.key.endsWith('/' + q)),\n );\n if (matches.length === 0) return null;\n if (matches.length === 1) return matches[0].rel;\n return pickClosest(matches, fromRel).rel;\n}\n\nfunction pickClosest(matches: SuffixEntry[], fromRel: string): SuffixEntry {\n const fromSegs = fromRel.split('/');\n const score = (rel: string): number => {\n const segs = rel.split('/');\n let i = 0;\n while (i < segs.length && i < fromSegs.length && segs[i] === fromSegs[i]) i++;\n return i;\n };\n return [...matches].sort((a, b) => {\n const d = score(b.rel) - score(a.rel);\n if (d) return d;\n if (a.rel.length !== b.rel.length) return a.rel.length - b.rel.length;\n return a.rel < b.rel ? -1 : 1;\n })[0];\n}\n\n/**\n * Dotted-module resolution (Python/Java style): `app.core.security` →\n * `app/core/security(.py|/__init__.py)`. Tries a repo-root and `src/` layout.\n * Safe across languages — it only returns a hit when a real repo file matches,\n * so JS packages that contain a dot (e.g. `socket.io`) fall through to external.\n */\nfunction resolveDotted(probe: (base: string) => string | null, source: string): string | null {\n if (!/^[A-Za-z_][\\w.]*$/.test(source) || !source.includes('.')) return null;\n const slashed = source.replace(/\\./g, '/');\n return probe(slashed) ?? probe(posixJoin('src', slashed));\n}\n\n/**\n * Resolve a Python-style relative import. `source` is leading dots plus an\n * optional dotted module (`.models`, `..core.utils`, or just `.`). The number of\n * dots is the package level: one dot = the importer's own package (directory),\n * each additional dot ascends one package. A bare `from . import x` resolves to\n * the package itself (its `__init__.py`); the dotted-module form targets the\n * submodule file.\n */\nfunction resolvePyRelative(\n probe: (base: string) => string | null,\n fromRel: string,\n source: string,\n): string | null {\n let dots = 0;\n while (source[dots] === '.') dots++;\n const rest = source.slice(dots); // dotted submodule path, possibly empty\n let dir = path.posix.dirname(fromRel);\n for (let i = 1; i < dots; i++) dir = path.posix.dirname(dir);\n const sub = rest.replace(/\\./g, '/');\n return probe(sub ? posixJoin(dir, sub) : dir);\n}\n\n/** A resolver that only handles relative imports (no fs) — for tests/embedding. */\nexport function relativeResolver(relSet: Set<string>): ModuleResolver {\n const probe = makeProbe(relSet);\n return {\n resolve(fromRel, source) {\n if (source.startsWith('.')) return probe(posixJoin(path.posix.dirname(fromRel), source));\n return resolveDotted(probe, source);\n },\n };\n}\n\n// --- probing ---\n\n/** ESM-in-TS specifiers name the EMITTED file (`./x.js` for `x.ts`); map the\n * JS extension back to the source extensions TS itself would try. */\nconst ESM_EMITTED: Record<string, string[]> = {\n '.js': ['.ts', '.tsx'],\n '.jsx': ['.tsx'],\n '.mjs': ['.mts'],\n '.cjs': ['.cts'],\n};\n\nfunction makeProbe(relSet: Set<string>): (base: string) => string | null {\n return (base: string) => {\n const norm = normalizeRel(base);\n if (!norm) return null;\n if (relSet.has(norm)) return norm;\n const emittedExt = Object.keys(ESM_EMITTED).find((e) => norm.endsWith(e));\n if (emittedExt) {\n const stem = norm.slice(0, -emittedExt.length);\n for (const ext of ESM_EMITTED[emittedExt]) if (relSet.has(stem + ext)) return stem + ext;\n }\n for (const ext of JS_TS_EXT) if (relSet.has(norm + ext)) return norm + ext;\n for (const ext of JS_TS_EXT) if (relSet.has(`${norm}/index${ext}`)) return `${norm}/index${ext}`;\n for (const ext of OTHER_EXT) if (relSet.has(norm + ext)) return norm + ext;\n if (relSet.has(`${norm}/__init__.py`)) return `${norm}/__init__.py`;\n return null;\n };\n}\n\nfunction normalizeRel(p: string): string {\n const norm = path.posix.normalize(p);\n const stripped = norm.startsWith('./') ? norm.slice(2) : norm;\n return stripped.startsWith('..') ? '' : stripped;\n}\n\nfunction posixJoin(a: string, b: string): string {\n return path.posix.normalize(path.posix.join(a, b));\n}\n\n/** Match a tsconfig paths pattern (`@app/*`) against a specifier; returns the `*` capture or '' on exact, null on no match. */\nfunction matchPattern(pattern: string, source: string): string | null {\n const star = pattern.indexOf('*');\n if (star === -1) return source === pattern ? '' : null;\n const prefix = pattern.slice(0, star);\n const suffix = pattern.slice(star + 1);\n if (!source.startsWith(prefix) || !source.endsWith(suffix)) return null;\n if (source.length < prefix.length + suffix.length) return null;\n return source.slice(prefix.length, source.length - suffix.length);\n}\n\n// --- tsconfig ---\n\ninterface TsPaths {\n baseUrlRel: string; // relative to root\n paths: [string, string[]][];\n}\n\nfunction loadTsconfigPaths(root: string): TsPaths | null {\n // Prefer tsconfig.base.json (Nx) then tsconfig.json; follow `extends`.\n for (const name of ['tsconfig.base.json', 'tsconfig.json']) {\n const file = path.join(root, name);\n if (fs.existsSync(file)) {\n const merged = readTsconfigChain(root, file, new Set());\n if (merged && merged.paths.length) return merged;\n }\n }\n return null;\n}\n\nfunction readTsconfigChain(root: string, file: string, seen: Set<string>): TsPaths | null {\n if (seen.has(file) || seen.size > 6) return null;\n seen.add(file);\n let cfg: { extends?: string; compilerOptions?: { baseUrl?: string; paths?: Record<string, string[]> } };\n try {\n cfg = parseJsonc(fs.readFileSync(file, 'utf8'));\n } catch {\n return null;\n }\n const dir = path.dirname(file);\n let base: TsPaths = { baseUrlRel: '', paths: [] };\n if (cfg.extends && cfg.extends.startsWith('.')) {\n const extPath = path.resolve(dir, cfg.extends.endsWith('.json') ? cfg.extends : `${cfg.extends}.json`);\n if (fs.existsSync(extPath)) {\n const inherited = readTsconfigChain(root, extPath, seen);\n if (inherited) base = inherited;\n }\n }\n const co = cfg.compilerOptions ?? {};\n // baseUrl is relative to THIS config's dir; express it relative to the repo root.\n const baseUrlRel =\n co.baseUrl !== undefined\n ? path.relative(root, path.resolve(dir, co.baseUrl)).split(path.sep).join('/')\n : base.baseUrlRel;\n const paths: [string, string[]][] = [...base.paths];\n if (co.paths) for (const [k, v] of Object.entries(co.paths)) paths.push([k, v]);\n return { baseUrlRel, paths };\n}\n\n// --- workspaces ---\n\nfunction loadWorkspacePackages(root: string): Map<string, string> {\n const map = new Map<string, string>();\n const globs: string[] = [];\n\n const rootPkg = path.join(root, 'package.json');\n if (fs.existsSync(rootPkg)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(rootPkg, 'utf8')) as { workspaces?: string[] | { packages?: string[] } };\n const ws = Array.isArray(pkg.workspaces) ? pkg.workspaces : pkg.workspaces?.packages;\n if (ws) globs.push(...ws);\n } catch {\n /* ignore */\n }\n }\n const pnpmWs = path.join(root, 'pnpm-workspace.yaml');\n if (fs.existsSync(pnpmWs)) {\n for (const line of fs.readFileSync(pnpmWs, 'utf8').split('\\n')) {\n const m = /^\\s*-\\s*['\"]?([^'\"\\n]+)['\"]?\\s*$/.exec(line);\n if (m) globs.push(m[1].trim());\n }\n }\n\n for (const dir of expandWorkspaceGlobs(root, globs)) {\n const pj = path.join(dir, 'package.json');\n try {\n const name = (JSON.parse(fs.readFileSync(pj, 'utf8')) as { name?: string }).name;\n if (name) map.set(name, path.relative(root, dir).split(path.sep).join('/'));\n } catch {\n /* ignore */\n }\n }\n return map;\n}\n\n/** Resolve simple workspace globs (`packages/*`, `apps/*`, `libs/**`) to dirs containing package.json. */\nfunction expandWorkspaceGlobs(root: string, globs: string[]): string[] {\n const out = new Set<string>();\n for (const glob of globs) {\n const clean = glob.replace(/\\/\\*\\*$/, '').replace(/\\/\\*$/, '');\n const baseDir = path.join(root, clean);\n const recurse = glob.endsWith('**');\n if (glob === clean) {\n // No wildcard — a direct package dir.\n if (fs.existsSync(path.join(baseDir, 'package.json'))) out.add(baseDir);\n continue;\n }\n collectPackageDirs(baseDir, recurse ? 4 : 1, out);\n }\n return [...out];\n}\n\nfunction collectPackageDirs(dir: string, depth: number, out: Set<string>): void {\n if (depth < 0) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n if (!e.isDirectory() || e.name === 'node_modules' || e.name.startsWith('.')) continue;\n const child = path.join(dir, e.name);\n if (fs.existsSync(path.join(child, 'package.json'))) out.add(child);\n else collectPackageDirs(child, depth - 1, out);\n }\n}\n\n// --- tolerant JSONC ---\n\nexport function parseJsonc<T = unknown>(text: string): T {\n return JSON.parse(stripJsonc(text)) as T;\n}\n\nfunction stripJsonc(text: string): string {\n let out = '';\n let inStr = false;\n let strCh = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n const next = text[i + 1];\n if (inStr) {\n out += ch;\n if (ch === '\\\\') {\n out += next ?? '';\n i++;\n } else if (ch === strCh) {\n inStr = false;\n }\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n inStr = true;\n strCh = ch;\n out += ch;\n continue;\n }\n if (ch === '/' && next === '/') {\n while (i < text.length && text[i] !== '\\n') i++;\n out += '\\n';\n continue;\n }\n if (ch === '/' && next === '*') {\n i += 2;\n while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) i++;\n i++;\n continue;\n }\n out += ch;\n }\n // drop trailing commas before } or ]\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n","import { canonicalize, shortId } from './hash.js';\nimport type { EdgeKind, NodeKind } from '../schema.js';\n\n/**\n * Content-addressed ids. The id of a node is a function only of its *identity*\n * (kind, qualified name, file, signature) — never its line span, which can move\n * without changing the node. So adding a blank line above a function leaves its\n * id (and every edge touching it) byte-identical.\n */\n\nexport interface NodeIdParts {\n kind: NodeKind;\n qualifiedName: string;\n file: string;\n signature?: string;\n}\n\nexport function nodeId(parts: NodeIdParts): string {\n return shortId(\n canonicalize({\n t: 'node',\n kind: parts.kind,\n qn: parts.qualifiedName,\n file: parts.file,\n sig: parts.signature ?? '',\n }),\n );\n}\n\nexport function edgeId(kind: EdgeKind, src: string, dst: string): string {\n return shortId(canonicalize({ t: 'edge', kind, src, dst }));\n}\n","import { edgeId } from './ids.js';\nimport type { GraphEdge, GraphNode } from '../schema.js';\n\n/**\n * Test-awareness (VG-ENGINE-TEARDOWN §3.6).\n *\n * Deterministic, two signals:\n * 1. **Static linkage** — calls from a test file into product code become `test`\n * edges (test file → covered node), so we can answer \"which tests exercise\n * this\" from structure alone, no runner needed.\n * 2. **Coverage** (coverage.ts) — runtime-grounded line coverage applied as\n * `coverage` on nodes (stronger than static linkage when present).\n *\n * A node's `tested` flag is true when it has any incoming test/coverage signal;\n * false for analyzable code with none; null for non-analyzable kinds.\n */\n\nexport function isTestFile(rel: string): boolean {\n const lower = rel.toLowerCase();\n const base = rel.split('/').pop() ?? rel; // original case (for CamelCase rules)\n const lbase = base.toLowerCase();\n // Directory-based conventions (case-insensitive).\n if (/(^|\\/)(__tests__|__test__)\\//.test(lower)) return true;\n if (/(^|\\/)(tests?|spec|specs)\\//.test(lower)) return true;\n if (/(^|\\/)src\\/test\\//.test(lower)) return true;\n // Filename-based conventions across languages.\n if (/\\.(test|spec)\\.[cm]?[jt]sx?$/.test(lbase)) return true; // JS/TS\n if (/^test_.*\\.py$/.test(lbase) || /_test\\.py$/.test(lbase)) return true; // Python\n if (/_test\\.go$/.test(lbase)) return true; // Go\n if (/[A-Za-z0-9](Test|Tests|IT)\\.java$/.test(base)) return true; // *Test.java (CamelCase)\n if (/_spec\\.rb$/.test(lbase) || /_test\\.rb$/.test(lbase)) return true; // Ruby\n if (/[A-Za-z0-9](Test|Tests)\\.cs$/.test(base)) return true; // *Test.cs (CamelCase)\n if (/[A-Za-z0-9](Test|Tests)\\.swift$/.test(base)) return true; // XCTest *Tests.swift (CamelCase)\n return false;\n}\n\nexport interface TestAwarenessResult {\n nodes: GraphNode[];\n edges: GraphEdge[];\n testFiles: string[]; // rel paths\n testEdgeCount: number;\n}\n\n/**\n * Apply static test linkage. Adds `test` edges from each test file node to the\n * product-code nodes its functions call, and sets `tested` on analyzable nodes.\n */\nexport function applyStaticTestLinkage(nodes: GraphNode[], edges: GraphEdge[]): TestAwarenessResult {\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const testFiles = new Set<string>();\n for (const n of nodes) if (n.kind === 'file' && isTestFile(n.file)) testFiles.add(n.file);\n\n // File node id per rel (to source test edges from the file).\n const fileNodeIdByRel = new Map<string, string>();\n for (const n of nodes) if (n.kind === 'file') fileNodeIdByRel.set(n.file, n.id);\n\n const covered = new Set<string>(); // node ids with a test signal\n const newEdges = new Map<string, GraphEdge>();\n\n for (const e of edges) {\n if (e.kind !== 'call') continue;\n const src = byId.get(e.src);\n const dst = byId.get(e.dst);\n if (!src || !dst) continue;\n // A call originating in a test file into non-test product code → test edge.\n if (testFiles.has(src.file) && !testFiles.has(dst.file) && dst.kind !== 'external') {\n const testFileId = fileNodeIdByRel.get(src.file);\n if (!testFileId) continue;\n const id = edgeId('test', testFileId, dst.id);\n if (!newEdges.has(id)) {\n newEdges.set(id, {\n id,\n kind: 'test',\n src: testFileId,\n dst: dst.id,\n resolution: e.resolution,\n confidence: e.confidence,\n });\n }\n covered.add(dst.id);\n }\n }\n\n const outNodes = nodes.map((n) => ({ ...n, tested: testedFlag(n, covered.has(n.id), testFiles) }));\n const outEdges = [...edges, ...newEdges.values()].sort(\n (a, b) => a.kind.localeCompare(b.kind) || a.src.localeCompare(b.src) || a.dst.localeCompare(b.dst),\n );\n\n return {\n nodes: outNodes,\n edges: outEdges,\n testFiles: [...testFiles].sort(),\n testEdgeCount: newEdges.size,\n };\n}\n\n/** Analyzable code units get true/false; everything else stays null. */\nfunction testedFlag(node: GraphNode, covered: boolean, testFiles: Set<string>): boolean | null {\n if (node.kind === 'external' || node.kind === 'file' || node.kind === 'package' || node.kind === 'module') {\n return null;\n }\n if (testFiles.has(node.file)) return null; // the test code itself isn't \"tested\"\n if (node.kind === 'function' || node.kind === 'method') return covered;\n // Classes/interfaces/etc.: covered if any signal, else leave null (not a unit).\n return covered ? true : node.tested ?? null;\n}\n","import * as path from 'node:path';\nimport { nodeId, edgeId } from './ids.js';\nimport { relativeResolver, type ModuleResolver } from './module-resolver.js';\nimport { isTestFile } from './tests.js';\nimport type { FileParse } from './types.js';\nimport type { EdgeKind, GraphEdge, GraphNode, NodeKind, ResolverKind } from '../schema.js';\n\n/**\n * Resolution: turn per-file symbol/edge tables into a connected graph of nodes\n * and typed, id'd edges.\n *\n * The Phase-0 resolver is the deterministic **heuristic** rung of the ladder\n * (VG-ENGINE-TEARDOWN §3.2). It is already well beyond a\n * single-candidate label match: it is scope-aware (same-file first), import-aware\n * (callees reachable through imported files next), and arity/visibility-honest\n * (records its confidence and resolution rung per edge rather than silently\n * dropping ambiguity). SCIP/stack-graphs rungs slot in above it later, recorded\n * via `edge.resolution`.\n */\n\n/**\n * A reference the heuristic resolver could not connect to a definition — the raw\n * material for `vg unknowns`. `from` is the node id of the enclosing definition\n * (or file) where the reference occurs; `name` is the callee/type it names. We\n * keep the source-relative path so a later precise rung that covers this file can\n * suppress the unknown (the compiler is authoritative there).\n */\nexport interface UnresolvedRef {\n from: string;\n name: string;\n kind: 'call' | 'extends' | 'implements';\n count: number;\n fromRel: string;\n}\n\nexport interface ResolveResult {\n nodes: GraphNode[];\n edges: GraphEdge[];\n /** References the heuristic rung could not resolve (deduped, sorted). */\n unresolved: UnresolvedRef[];\n /** File-level resolved import targets (rel → rels), for downstream\n * change-scoping (the tsc cache's dependency-closure keys). Not serialized. */\n importsByFile: Map<string, Set<string>>;\n /** Diagnostic counts, surfaced by `vg status`. */\n stats: {\n callsResolved: number;\n callsUnresolved: number;\n importsResolvedToFile: number;\n importsExternal: number;\n resolvers: ResolverKind[];\n };\n}\n\ninterface DefNodeRef {\n id: string;\n name: string;\n qualifiedName: string;\n rel: string;\n lang: string;\n kind: NodeKind;\n startByte: number; // for enclosing-scope lookup (not persisted)\n endByte: number;\n}\n\n// A partial node we fill analysis fields onto later (centrality/area/etc.).\ntype BaseNode = Omit<\n GraphNode,\n 'importance' | 'centrality' | 'area' | 'isHub' | 'tested' | 'coverage' | 'changeCoupling'\n>;\n\nexport function resolve(parses: FileParse[], resolver?: ModuleResolver): ResolveResult {\n const baseNodes = new Map<string, BaseNode>();\n const relSet = new Set(parses.map((p) => p.rel));\n // Default to relative-only resolution; build.ts passes a full resolver that\n // also follows tsconfig path aliases and workspace-package names.\n const mod = resolver ?? relativeResolver(relSet);\n\n // Index of definitions for resolution.\n const defsByName = new Map<string, DefNodeRef[]>(); // short name → defs\n const defsByFile = new Map<string, DefNodeRef[]>(); // rel → defs\n const fileNodeIdByRel = new Map<string, string>();\n\n // --- 1. file + definition nodes ---\n for (const p of parses) {\n const fileId = nodeId({ kind: 'file', qualifiedName: p.rel, file: p.rel });\n fileNodeIdByRel.set(p.rel, fileId);\n addNode(baseNodes, {\n id: fileId,\n kind: 'file',\n name: path.posix.basename(p.rel),\n qualifiedName: p.rel,\n file: p.rel,\n span: { start: 1, end: 1 },\n lang: p.lang,\n });\n\n for (const d of p.defs) {\n const id = nodeId({\n kind: d.kind,\n qualifiedName: d.qualifiedName,\n file: p.rel,\n signature: d.signature,\n });\n addNode(baseNodes, {\n id,\n kind: d.kind,\n name: d.name,\n qualifiedName: d.qualifiedName,\n file: p.rel,\n span: { start: d.startLine, end: d.endLine },\n lang: p.lang,\n signature: d.signature,\n doc: d.doc,\n });\n const ref: DefNodeRef = {\n id,\n name: d.name,\n qualifiedName: d.qualifiedName,\n rel: p.rel,\n lang: p.lang,\n kind: d.kind,\n startByte: d.startByte,\n endByte: d.endByte,\n };\n push(defsByName, d.name, ref);\n push(defsByFile, p.rel, ref);\n }\n }\n\n // --- namespace reachability (C#-style: a namespace is decoupled from the\n // directory, so cross-directory refs resolve through `using`, not co-location).\n // filesByNamespace: which files declare types in a namespace. nsReachableByRel:\n // for each file, the files reachable through a namespace it declares (same\n // namespace, split across files/dirs) or `using`-imports.\n const filesByNamespace = new Map<string, Set<string>>();\n for (const p of parses) for (const ns of p.namespaces ?? []) addToSet(filesByNamespace, ns, p.rel);\n const relsByLang = new Map<string, string[]>();\n for (const p of parses) push(relsByLang, p.lang, p.rel);\n // EXPLICIT namespace reachability (a shared namespace, or a `using`/`import`\n // of the target's namespace). Strong enough to justify a unique-name match —\n // the developer named the scope.\n const nsReachableByRel = new Map<string, Set<string>>();\n // IMPLICIT whole-module reachability (Swift: every file in the module sees the\n // others with no import). Too broad to justify a unique-name match — used ONLY\n // to let the heritage-anchored interface/implementation disambiguation see the\n // conforming type. Otherwise a lone same-named symbol anywhere in the repo\n // would wrongly resolve (the precision guard covers exactly this).\n const moduleReachableByRel = new Map<string, Set<string>>();\n for (const p of parses) {\n if (MODULE_SCOPED_LANGS.has(p.lang)) {\n const mod = new Set<string>();\n for (const rel of relsByLang.get(p.lang) ?? []) if (rel !== p.rel) mod.add(rel);\n moduleReachableByRel.set(p.rel, mod);\n }\n const reach = new Set<string>();\n const namespaces = new Set<string>(p.namespaces ?? []);\n for (const imp of p.imports) {\n namespaces.add(imp.source); // C# `using X.Y` names the namespace directly\n // Java/Kotlin/Scala `import a.b.Foo` names a CLASS, so the package (its\n // dotted parent) is what becomes reachable. Only matched candidates that\n // are ACTUALLY declared namespaces survive, so this never invents scope.\n if (IMPORT_NAMES_A_TYPE.has(p.lang)) {\n const sep = Math.max(imp.source.lastIndexOf('.'), imp.source.lastIndexOf('\\\\'));\n if (sep > 0) namespaces.add(imp.source.slice(0, sep));\n }\n }\n for (const ns of namespaces) for (const rel of filesByNamespace.get(ns) ?? []) if (rel !== p.rel) reach.add(rel);\n nsReachableByRel.set(p.rel, reach);\n }\n\n // --- interface/implementation index: type name → the super types it declares\n // (`class Foo : IFoo` → Foo⇒{IFoo}). Anchors DI call disambiguation on a real\n // heritage declaration, so `_svc.M()` (ambiguous between an interface method\n // and its implementation) resolves to the concrete implementation instead of\n // being dropped — the exact reason DI-wired services looked like orphans.\n const superTypesByType = new Map<string, Set<string>>();\n for (const p of parses) {\n const localDefs = defsByFile.get(p.rel) ?? [];\n for (const h of p.heritage) {\n const encl = enclosingDefRef(localDefs, h.byte);\n if (encl && (encl.kind === 'class' || encl.kind === 'interface')) addToSet(superTypesByType, encl.name, h.superName);\n }\n }\n\n const edges = new EdgeSet();\n const unresolved = new Map<string, UnresolvedRef>();\n const stats: ResolveResult['stats'] = {\n callsResolved: 0,\n callsUnresolved: 0,\n importsResolvedToFile: 0,\n importsExternal: 0,\n resolvers: ['heuristic'],\n };\n\n // --- 2. contains edges (file → top-level def, def → nested def) ---\n for (const p of parses) {\n const fileId = fileNodeIdByRel.get(p.rel)!;\n const localByQn = new Map<string, string>();\n for (const ref of defsByFile.get(p.rel) ?? []) localByQn.set(ref.qualifiedName, ref.id);\n for (const d of p.defs) {\n const id = localByQn.get(d.qualifiedName)!;\n const parentQn = parentQualifiedName(d.qualifiedName);\n const parentId = parentQn ? localByQn.get(parentQn) : undefined;\n edges.add('contains', parentId ?? fileId, id, 'heuristic', 1.0);\n }\n }\n\n // --- 3. import edges (file → file | external) ---\n const importedFilesByRel = new Map<string, Set<string>>();\n for (const p of parses) {\n const fileId = fileNodeIdByRel.get(p.rel)!;\n const importedRels = new Set<string>();\n for (const imp of p.imports) {\n const targetRel = mod.resolve(p.rel, imp.source);\n if (targetRel && targetRel !== p.rel) {\n importedRels.add(targetRel);\n edges.add('import', fileId, fileNodeIdByRel.get(targetRel)!, 'heuristic', 0.9);\n stats.importsResolvedToFile++;\n } else {\n const extId = ensureExternalNode(baseNodes, imp.source);\n edges.add('import', fileId, extId, 'heuristic', 1.0);\n stats.importsExternal++;\n }\n }\n importedFilesByRel.set(p.rel, importedRels);\n }\n\n // --- 4. call edges (heuristic resolution ladder) ---\n for (const p of parses) {\n const fileId = fileNodeIdByRel.get(p.rel)!;\n const localDefs = defsByFile.get(p.rel) ?? [];\n const imported = importedFilesByRel.get(p.rel) ?? new Set<string>();\n const testCaller = isTestFile(p.rel);\n const nsReach = nsReachableByRel.get(p.rel) ?? new Set<string>();\n const modReach = moduleReachableByRel.get(p.rel) ?? new Set<string>();\n for (const call of p.calls) {\n const srcId = enclosingDefId(localDefs, call.byte) ?? fileId;\n const resolved = resolveCall(call, p.rel, p.lang, imported, defsByName, srcId, testCaller, nsReach, superTypesByType, modReach);\n if (resolved) {\n edges.add('call', srcId, resolved.id, 'heuristic', resolved.confidence);\n stats.callsResolved++;\n } else {\n stats.callsUnresolved++;\n bumpUnresolved(unresolved, srcId, call.callee, 'call', p.rel);\n }\n }\n }\n\n // --- 4b. type-reference edges (constructor/field DI wiring, not a call) ---\n // A constructor parameter or field's declared type is a structural\n // dependency even when it's never invoked directly (Spring-style injection).\n // Most misses here are JDK/stdlib types (String, List, …) with no local\n // definition — expected and not actionable, so unlike calls/heritage these\n // don't get tracked as `unresolved` (it would swamp `vg unknowns`).\n for (const p of parses) {\n const fileId = fileNodeIdByRel.get(p.rel)!;\n const localDefs = defsByFile.get(p.rel) ?? [];\n const imported = importedFilesByRel.get(p.rel) ?? new Set<string>();\n const testCaller = isTestFile(p.rel);\n const nsReach = nsReachableByRel.get(p.rel) ?? new Set<string>();\n const modReach = moduleReachableByRel.get(p.rel) ?? new Set<string>();\n for (const ref of p.typeRefs) {\n const srcId = enclosingDefId(localDefs, ref.byte) ?? fileId;\n const target = resolveType(ref.name, p.rel, p.lang, imported, defsByName, testCaller, nsReach, modReach);\n if (target) edges.add('references', srcId, target.id, 'heuristic', 0.7);\n }\n }\n\n // --- 5. heritage edges (extends / implements) ---\n for (const p of parses) {\n const localDefs = defsByFile.get(p.rel) ?? [];\n const imported = importedFilesByRel.get(p.rel) ?? new Set<string>();\n const testCaller = isTestFile(p.rel);\n for (const h of p.heritage) {\n const srcId = enclosingDefId(localDefs, h.byte);\n if (!srcId) continue;\n const nsReach = nsReachableByRel.get(p.rel) ?? new Set<string>();\n const modReach = moduleReachableByRel.get(p.rel) ?? new Set<string>();\n const target = resolveType(h.superName, p.rel, p.lang, imported, defsByName, testCaller, nsReach, modReach);\n if (target) edges.add(h.kind as EdgeKind, srcId, target.id, 'heuristic', 0.85);\n else bumpUnresolved(unresolved, srcId, h.superName, h.kind as 'extends' | 'implements', p.rel);\n }\n }\n\n // Finalise: assemble GraphNodes (analysis fields filled later by analyze()).\n // `tested` is null in Phase 0 (not yet analyzed); test-awareness lands in\n // Phase 2 and will set true/false for analyzable nodes.\n const nodes: GraphNode[] = [...baseNodes.values()].map((n) => ({\n ...n,\n importance: 0,\n centrality: { degree: 0, pagerank: 0, betweenness: 0, eigenvector: 0 },\n area: 0,\n isHub: false,\n tested: null,\n }));\n\n const unresolvedList = [...unresolved.values()].sort(\n (a, b) =>\n a.from.localeCompare(b.from) || a.kind.localeCompare(b.kind) || a.name.localeCompare(b.name),\n );\n\n return { nodes, edges: edges.toArray(), unresolved: unresolvedList, stats, importsByFile: importedFilesByRel };\n}\n\n// --- helpers ---\n\n/** Accumulate an unresolved reference, deduped by (from, kind, name) with a count. */\nfunction bumpUnresolved(\n map: Map<string, UnresolvedRef>,\n from: string,\n name: string,\n kind: UnresolvedRef['kind'],\n fromRel: string,\n): void {\n const key = `${from}${kind}${name}`;\n const existing = map.get(key);\n if (existing) existing.count++;\n else map.set(key, { from, name, kind, count: 1, fromRel });\n}\n\nfunction addNode(map: Map<string, BaseNode>, n: BaseNode): void {\n if (!map.has(n.id)) map.set(n.id, n);\n}\n\nfunction ensureExternalNode(map: Map<string, BaseNode>, source: string): string {\n const id = nodeId({ kind: 'external', qualifiedName: source, file: '' });\n if (!map.has(id)) {\n map.set(id, {\n id,\n kind: 'external',\n name: source,\n qualifiedName: source,\n file: '',\n span: { start: 1, end: 1 },\n lang: 'external',\n });\n }\n return id;\n}\n\nfunction push<T>(map: Map<string, T[]>, key: string, value: T): void {\n const list = map.get(key);\n if (list) list.push(value);\n else map.set(key, [value]);\n}\n\nfunction parentQualifiedName(qn: string): string | null {\n const idx = qn.lastIndexOf('.');\n return idx > 0 ? qn.slice(0, idx) : null;\n}\n\nfunction enclosingDefRef(defs: DefNodeRef[], byte: number): DefNodeRef | undefined {\n let best: DefNodeRef | undefined;\n for (const d of defs) {\n if (d.startByte <= byte && d.endByte >= byte) {\n if (!best || d.endByte - d.startByte < best.endByte - best.startByte) best = d;\n }\n }\n return best;\n}\n\nfunction enclosingDefId(defs: DefNodeRef[], byte: number): string | undefined {\n return enclosingDefRef(defs, byte)?.id;\n}\n\nfunction addToSet(map: Map<string, Set<string>>, key: string, value: string): void {\n const s = map.get(key);\n if (s) s.add(value);\n else map.set(key, new Set([value]));\n}\n\n/** The declaring type of a method, from its dotted qualified name (`Foo.bar` → `Foo`). */\nfunction parentTypeName(qualifiedName: string): string | null {\n const i = qualifiedName.lastIndexOf('.');\n return i > 0 ? qualifiedName.slice(0, i) : null;\n}\n\n/**\n * Disambiguate an interface/implementation family among same-named candidate\n * methods, anchored on real heritage (`class Impl : IFace`):\n * - exactly one implementation → resolve to it (the concrete runtime target,\n * so impact_of/tests_for/find_path on the service work);\n * - several implementations of one interface → resolve to the interface method\n * (the stable contract) rather than fan out to every impl or pick arbitrarily;\n * - not an interface/impl family → null (stay honestly ambiguous).\n * Returns the chosen def, or null when the pool is not a single such family.\n */\nfunction disambiguateInterfaceImpl(\n pool: DefNodeRef[],\n superTypesByType: Map<string, Set<string>>,\n): DefNodeRef | null {\n const withParent = pool\n .map((c) => ({ c, parent: parentTypeName(c.qualifiedName) }))\n .filter((x): x is { c: DefNodeRef; parent: string } => x.parent !== null);\n if (withParent.length < 2) return null;\n const parents = new Set(withParent.map((x) => x.parent));\n // An impl candidate: its parent type declares (implements/extends) another\n // candidate's parent type.\n const impls = withParent.filter((x) =>\n [...parents].some((other) => other !== x.parent && superTypesByType.get(x.parent)?.has(other)),\n );\n if (impls.length === 0) return null;\n // The interface(s) those impls satisfy (a candidate whose parent is a super of an impl's parent).\n const interfaceParents = new Set<string>();\n for (const impl of impls) for (const s of superTypesByType.get(impl.parent) ?? []) interfaceParents.add(s);\n const interfaces = withParent.filter((x) => interfaceParents.has(x.parent));\n const uniqueImplIds = new Set(impls.map((x) => x.c.id));\n if (uniqueImplIds.size === 1) return impls[0].c;\n const uniqueIfaceIds = new Set(interfaces.map((x) => x.c.id));\n if (uniqueIfaceIds.size === 1) return interfaces[0].c;\n return null;\n}\n\n/**\n * Languages where definitions in the same directory share a visibility scope\n * (package / namespace) and reference each other WITHOUT an import — so a\n * same-directory match is justified resolution, not a guess:\n * - Go: a package IS a directory; all files in it see each other's identifiers.\n * - Java: same-package classes (package == directory by convention).\n * - C#: file-scoped/co-located namespaces commonly align with the directory.\n * - Kotlin/Scala: Java-style package visibility (package == directory by convention).\n * - Swift: module-wide visibility; files in one target see each other un-imported.\n * TS/JS, Python, Ruby, PHP, Dart, Lua, Elixir, Shell, Zig, C and C++ require an\n * explicit import/include for cross-file refs, so they get NO directory rung —\n * a same-name def elsewhere is not reachable.\n */\nconst PACKAGE_SCOPED_LANGS = new Set(['go', 'java', 'cs', 'kotlin', 'scala', 'swift']);\n\n/** Languages whose `import` names a TYPE (not a namespace), so the reachable\n * namespace is the import's parent (`import a.b.Foo` → package `a.b`, PHP\n * `use A\\B\\Foo` → namespace `A\\B`). Separator is `.` except PHP's `\\`. */\nconst IMPORT_NAMES_A_TYPE = new Set(['java', 'kotlin', 'scala', 'php']);\n\n/** Languages with whole-module visibility — every file in the module sees the\n * others' top-level symbols with no import (Swift). Treated as one module. */\nconst MODULE_SCOPED_LANGS = new Set(['swift']);\n\nfunction dirOf(rel: string): string {\n const i = rel.lastIndexOf('/');\n return i >= 0 ? rel.slice(0, i) : '';\n}\n\n/**\n * The heuristic call resolution ladder. A call resolves only when the target is\n * *reachable*: same-file scope, an imported file, or — for package-scoped\n * languages — the same package directory. There is deliberately NO \"single\n * global definition with this name\" fallback: that rung produced the dominant\n * class of false positives (every `fetch()` linking to a lone repo method named\n * `fetch`, every `parse()` to an unrelated `Parser.parse`). Honest\n * non-resolution (null) beats a wrong edge that corrupts centrality, areas and\n * impact; the SCIP/tsc rungs recover the precise edge where a user needs it.\n */\nfunction resolveCall(\n call: { callee: string; qualified?: boolean },\n fromRel: string,\n fromLang: string,\n importedRels: Set<string>,\n defsByName: Map<string, DefNodeRef[]>,\n enclosingId?: string,\n fromIsTestFile = false,\n nsReachableRels: Set<string> = new Set(),\n superTypesByType: Map<string, Set<string>> = new Map(),\n moduleReachableRels: Set<string> = new Set(),\n): { id: string; confidence: number } | null {\n const candidates = defsByName.get(call.callee);\n if (!candidates || candidates.length === 0) return null;\n\n const callable = candidates.filter((c) => c.kind === 'function' || c.kind === 'method');\n const pool = callable.length ? callable : candidates;\n\n // 1. Same-file scope (the strongest signal). A *qualified* call (`crud.foo()`)\n // must not match the enclosing def itself: the parser drops the receiver, so a\n // handler `foo` that delegates to `module.foo(...)` would otherwise resolve to\n // *itself* — on FastAPI/Django-style codebases that false self-loop was the\n // dominant edge (100% of resolved calls in one corpus repo). A bare `foo()`\n // inside `foo` is still honest recursion and is kept.\n let sameFile = pool.filter((c) => c.rel === fromRel);\n if (call.qualified && enclosingId) sameFile = sameFile.filter((c) => c.id !== enclosingId);\n if (sameFile.length === 1) return { id: sameFile[0].id, confidence: 0.85 };\n if (sameFile.length > 1) {\n // Overloads/redefinitions in one file — pick deterministically, low confidence.\n const pick = [...sameFile].sort((a, b) => a.id.localeCompare(b.id))[0];\n return { id: pick.id, confidence: 0.4 };\n }\n\n // 2. Reachable-candidate resolution, in two tiers of trust.\n //\n // STRICT reachability (imported file, same package directory, or an\n // explicitly named namespace) is strong enough to resolve a UNIQUE match —\n // the developer named the scope. Unified into one pool BEFORE deciding, so\n // a DI call reaches the concrete implementation even when only the interface\n // was directly imported (interface via `import`, impl via its package) —\n // the ordering that previously stopped at the interface method.\n const dir = dirOf(fromRel);\n const notSelf = (c: DefNodeRef): boolean => !(call.qualified && enclosingId && c.id === enclosingId);\n const strict = pool.filter(\n (c) =>\n notSelf(c) &&\n (importedRels.has(c.rel) ||\n (PACKAGE_SCOPED_LANGS.has(fromLang) && c.lang === fromLang && dirOf(c.rel) === dir) ||\n nsReachableRels.has(c.rel)),\n );\n if (strict.length === 1) return { id: strict[0].id, confidence: 0.75 };\n\n // The DISAMBIGUATION pool additionally admits whole-module reachability\n // (Swift) — too broad for a unique-name match, but fine for the\n // heritage-anchored interface/implementation family, which requires a real\n // `implements`/`extends` declaration and so cannot fire on an unrelated\n // same-named symbol. Resolve a DI family to the concrete implementation.\n const broad = pool.filter((c) => notSelf(c) && (moduleReachableRels.has(c.rel) || strict.includes(c)));\n if (broad.length > 1) {\n const dedup = disambiguateInterfaceImpl(broad, superTypesByType);\n if (dedup) return { id: dedup.id, confidence: 0.6 };\n }\n // Ambiguous within STRICT scope with no interface/impl resolution → do not\n // guess (the \"lone global match\" false-positive class stays out).\n if (strict.length > 1) return null;\n\n // 4. Swift-only test-file fallback. Xcode test targets commonly live in a\n // sibling `Tests/` tree, not the product code's directory, so rung 3's\n // same-directory check never reaches them even though the whole module is\n // visible unimported — the dominant cause of `tests_for` undercounting a\n // class that a test directly constructs (including via a local helper).\n // Gated on the *caller* being test code (this only adds test-linkage/call\n // visibility, never a product-to-product edge) and an unambiguous\n // repo-wide name match, so it can't reintroduce the \"lone global match\"\n // false-positive class rung 4 elsewhere refuses to guess.\n if (fromLang === 'swift' && fromIsTestFile && pool.length === 1) {\n return { id: pool[0].id, confidence: 0.5 };\n }\n\n // 5. No reachability justification → do not guess (precision over recall).\n return null;\n}\n\n/** Heritage/type-reference resolution — same reachability rule as calls. */\nfunction resolveType(\n name: string,\n fromRel: string,\n fromLang: string,\n importedRels: Set<string>,\n defsByName: Map<string, DefNodeRef[]>,\n fromIsTestFile = false,\n nsReachableRels: Set<string> = new Set(),\n moduleReachableRels: Set<string> = new Set(),\n): { id: string } | null {\n const candidates = (defsByName.get(name) ?? []).filter(\n (c) => c.kind === 'class' || c.kind === 'interface',\n );\n if (candidates.length === 0) return null;\n\n const sameFile = candidates.filter((c) => c.rel === fromRel);\n if (sameFile.length === 1) return { id: sameFile[0].id };\n\n const imported = candidates.filter((c) => importedRels.has(c.rel));\n if (imported.length === 1) return { id: imported[0].id };\n if (imported.length > 1) return null;\n\n if (PACKAGE_SCOPED_LANGS.has(fromLang)) {\n const dir = dirOf(fromRel);\n const samePkg = candidates.filter((c) => c.lang === fromLang && dirOf(c.rel) === dir);\n if (samePkg.length === 1) return { id: samePkg[0].id };\n }\n\n // Namespace / whole-module reachable type: the type's file declares a\n // namespace this file `using`/`import`s or shares (C#/JVM), or is in the same\n // module (Swift). An explicit type annotation naming a unique reachable type\n // is unambiguous — this is not a call, so the lone-name-call precision guard\n // does not apply. A type name matching two reachable types stays unresolved.\n if (nsReachableRels.size || moduleReachableRels.size) {\n const reach = candidates.filter((c) => nsReachableRels.has(c.rel) || moduleReachableRels.has(c.rel));\n if (reach.length === 1) return { id: reach[0].id };\n }\n\n // Swift-only test-file fallback — see the matching rung in resolveCall.\n if (fromLang === 'swift' && fromIsTestFile && candidates.length === 1) {\n return { id: candidates[0].id };\n }\n return null; // no global single-match fallback (false-positive source)\n}\n\n/** Accumulates edges, deduping on (kind, src, dst) and counting multiplicity. */\nclass EdgeSet {\n private map = new Map<string, GraphEdge>();\n\n add(kind: EdgeKind, src: string, dst: string, resolution: ResolverKind, confidence: number): void {\n const id = edgeId(kind, src, dst);\n const existing = this.map.get(id);\n if (existing) {\n existing.count = (existing.count ?? 1) + 1;\n // Keep the highest confidence seen for this logical edge.\n if (confidence > existing.confidence) existing.confidence = confidence;\n return;\n }\n this.map.set(id, { id, kind, src, dst, resolution, confidence, count: 1 });\n }\n\n toArray(): GraphEdge[] {\n return [...this.map.values()].sort(\n (a, b) =>\n a.kind.localeCompare(b.kind) || a.src.localeCompare(b.src) || a.dst.localeCompare(b.dst),\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { indexFor, queryGraph, impactOf, extractLiteralNeedles } from './chunk-EETK7S43.js';
2
- import { cacheDir } from './chunk-ZKNB4YH4.js';
1
+ import { indexFor, queryGraph, impactOf, extractLiteralNeedles } from './chunk-5VH3Y4QC.js';
2
+ import { cacheDir } from './chunk-AJ2KE3NT.js';
3
3
  import { hashString } from './chunk-JFGYT6BI.js';
4
4
  import * as fs from 'fs';
5
5
  import * as path from 'path';
@@ -221,7 +221,7 @@ function buildCodeContext(graph, instruction, options = {}) {
221
221
  const seedLimit = options.seeds ?? 8;
222
222
  const impactDepth = options.impactDepth ?? 2;
223
223
  const index = indexFor(graph);
224
- const q = queryGraph(graph, instruction, { budget: Math.floor(budget * 0.6), limit: seedLimit * 2 });
224
+ const q = queryGraph(graph, instruction, { budget: Math.floor(budget * 0.6), limit: seedLimit * 2, relevance: options.relevance, topicTags: options.topicTags });
225
225
  let seeds = q.matches.map((m) => ({ node: m.node, why: m.why }));
226
226
  if (options.files && options.files.length) {
227
227
  const set = new Set(options.files.map(normalize));
@@ -322,7 +322,7 @@ function estimateTokens(text) {
322
322
 
323
323
  // src/code/capsule.ts
324
324
  var TASK_CAPSULE_SCHEMA_VERSION = "task-capsule/0";
325
- var CAPSULE_RANKING_VERSION = "capsule-rank@2026.07.1";
325
+ var CAPSULE_RANKING_VERSION = "capsule-rank@2026.08.2";
326
326
  var CAPSULE_COMPILER_ID = "vg-task-capsule/0";
327
327
  function summarizeCapsule(capsule) {
328
328
  const sourceFiles = [...new Set(capsule.sourceSlices.map((s) => s.file))].sort();
@@ -383,7 +383,8 @@ function buildTaskCapsule(graph, instruction, options = {}) {
383
383
  repositoryId: options.repositoryId ?? null,
384
384
  modelProfileId: options.provenance?.modelProfileId ?? null,
385
385
  securityTier: options.provenance?.securityTier ?? null,
386
- policyVersion: options.provenance?.policyVersion ?? null
386
+ policyVersion: options.provenance?.policyVersion ?? null,
387
+ relevanceVersion: options.relevance?.version ?? null
387
388
  }
388
389
  };
389
390
  }
@@ -619,5 +620,5 @@ function estimateTokens2(text) {
619
620
  }
620
621
 
621
622
  export { CAPSULE_COMPILER_ID, CAPSULE_RANKING_VERSION, CLI_TOOL_ALIASES, PER_FILE_TOKENS, SAVINGS_TOOLS, TASK_CAPSULE_SCHEMA_VERSION, buildCodeContext, buildTaskCapsule, capsuleToCodeContext, clearSavings, readModelSavings, readSavings, readUsage, recordCliCall, recordSaving, sanitizeClient, savingsLedgerPath, savingsRecorded, summarizeCapsule };
622
- //# sourceMappingURL=chunk-US2DAKCM.js.map
623
- //# sourceMappingURL=chunk-US2DAKCM.js.map
623
+ //# sourceMappingURL=chunk-Y7YKUZ3T.js.map
624
+ //# sourceMappingURL=chunk-Y7YKUZ3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/savings.ts","../src/code/context.ts","../src/code/capsule.ts"],"names":["estimateTokens","normalize"],"mappings":"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","file":"chunk-Y7YKUZ3T.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { cacheDir } from './cache.js';\n\n/**\n * Usage-savings tracking (VG-DEVELOPMENT-PLAN §5) — local, privacy-safe, and\n * **opt-in**. We record *counts only* — never code, never the question text —\n * comparing the context tokens vg returned against a grep/read baseline estimate.\n * `vg savings` reports it with the assumptions shown; figures are labelled\n * estimates, never a hero number.\n *\n * Each entry also carries which path served the call (`source`: an MCP tool call\n * vs a `vg <subcommand>` CLI invocation) and, when known, a coarse `client` label\n * (the AI on the other end). That powers the command-vs-MCP split and the\n * per-client breakdown in `vg savings`, and is the basis for the opt-in\n * `vg serve --share-stats` upload (see ./stats-share.ts). Nothing here leaves the\n * machine unless the operator explicitly enables sharing.\n */\n\nconst LEDGER = 'savings.jsonl';\n// A conservative, documented estimate: tokens an agent reads per file it opens.\nexport const PER_FILE_TOKENS = 400;\n\n/** The tools whose grep/read token baseline the savings summary is computed from.\n * search_symbols belongs here: it is the direct grep replacement (the server\n * instructions steer agents to it INSTEAD of grep), yet it used to contribute\n * zero to the estimate — on search-heavy sessions most of the real saving went\n * uncounted. Its baseline is the same measure as query_graph's: the distinct\n * files its matches point at, at PER_FILE_TOKENS each. */\nexport const SAVINGS_TOOLS = new Set(['query_graph', 'get_node', 'search_symbols']);\n\n/**\n * How a navigation call reached the map:\n * - `mcp` — a tool call over the local `vg serve` MCP server;\n * - `cli` — a `vg <subcommand>` invocation that identified itself with `--client`.\n * Both are recorded into one ledger under a shared tool vocabulary (CLI\n * subcommands are normalised to their MCP tool names via CLI_TOOL_ALIASES), so\n * `(tool, source)` is the command-vs-MCP split and the token math stays unified.\n * Absent on ledger lines written before sources existed → read as `mcp` (the\n * only path that recorded then).\n */\nexport type Source = 'mcp' | 'cli';\n\n/**\n * Canonical tool name a CLI navigation subcommand maps to — the same vocabulary\n * the MCP tools use, so a `vg ask --client=claude` and an MCP `query_graph` call\n * land on one row distinguished only by `source`. A subcommand with no MCP twin\n * (e.g. `tree`) keeps its own name.\n */\nexport const CLI_TOOL_ALIASES: Readonly<Record<string, string>> = {\n ask: 'query_graph',\n show: 'get_node',\n impact: 'impact_of',\n path: 'find_path',\n hubs: 'list_hubs',\n areas: 'list_areas',\n tree: 'tree',\n};\n\n/**\n * Normalise a free-form client name (from `--client` or the MCP `initialize`\n * handshake) to a short, bounded, non-PII token: lowercase, `[a-z0-9._-]` only,\n * ≤ 40 chars. Never carries arbitrary user input into the ledger or an upload —\n * it is a coarse client label (e.g. `claude`, `cursor`, `cline`), not identity.\n * Returns `'unknown'` when nothing usable is provided.\n */\nexport function sanitizeClient(name: string | undefined | null): string {\n if (typeof name !== 'string') return 'unknown';\n const cleaned = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40);\n return cleaned || 'unknown';\n}\n\n/**\n * Outcome of a recorded navigation call:\n * - `complete` — returned results, with nothing capped or paginated;\n * - `partial` — returned results, but more were available/truncated;\n * - `miss` — returned no result (no match, not-found, not-connected).\n */\nexport type Outcome = 'complete' | 'partial' | 'miss';\n\nexport interface SavingEntry {\n ts: number; // epoch ms (runtime ledger state, not part of any artifact)\n tool: string;\n // Optional for back-compat with ledger lines written before outcomes existed;\n // an absent value is read as `complete` (those lines only recorded hits).\n outcome?: Outcome;\n vgTokens: number;\n baselineTokens: number;\n // Optional for back-compat: absent `source` reads as `mcp`. `client` is a\n // sanitized coarse label (see sanitizeClient) or absent when unidentified.\n source?: Source;\n client?: string;\n // The model that made the call, for per-model savings auditing. `provider` is\n // a coarse provider label (e.g. `anthropic`, `ollama`), `model` the sanitized\n // model slug. VG Code sets both so `vg savings` can break usage down per model.\n // Absent on lines from callers that don't identify a model.\n provider?: string;\n model?: string;\n // Wall time of the call, ms. Optional: absent on lines written before timing\n // existed (and on CLI-sourced lines) — absent means \"not measured\", never 0.\n ms?: number;\n}\n\n/**\n * Normalise a model slug to a bounded, non-PII token — like {@link sanitizeClient}\n * but keeping the `/` and `:` that model ids use (`anthropic/claude-3.5-sonnet`,\n * `qwen2.5-coder:7b`). Returns undefined when nothing usable is given.\n */\nexport function sanitizeModelId(name: string | undefined | null): string | undefined {\n if (typeof name !== 'string') return undefined;\n const cleaned = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._:/-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 60);\n return cleaned || undefined;\n}\n\n/**\n * Record a CLI navigation call (`vg <subcommand> --client=<ai>`) into the same\n * local ledger the MCP path uses. Only ever called when the caller passed\n * `--client` — i.e. an AI host explicitly identified itself — so a human's bare\n * `vg ask` still records nothing. Counts only; never the question or code.\n */\nexport function recordCliCall(\n root: string,\n entry: { tool: string; client?: string; provider?: string; model?: string; outcome: Outcome; vgTokens?: number; baselineFiles?: number },\n now: number,\n): void {\n recordSaving(\n root,\n {\n tool: entry.tool,\n source: 'cli',\n client: sanitizeClient(entry.client),\n provider: entry.provider ? sanitizeClient(entry.provider) : undefined,\n model: sanitizeModelId(entry.model),\n outcome: entry.outcome,\n vgTokens: entry.vgTokens ?? 0,\n baselineTokens: (entry.baselineFiles ?? 0) * PER_FILE_TOKENS,\n },\n now,\n );\n}\n\n/**\n * Absolute path of the local usage ledger for this repo. Exported so the serve\n * status display can tail it live (mcp/ledger-tail.ts) — the file itself stays\n * local-only (GUARDRAILS §3.4; upload is the separate opt-in stats-share path).\n */\nexport function savingsLedgerPath(root: string): string {\n return path.join(cacheDir(root), LEDGER);\n}\n\nfunction ledgerPath(root: string): string {\n return savingsLedgerPath(root);\n}\n\n/** Whether a savings ledger exists for this repo (i.e. `vg serve --savings` has recorded). */\nexport function savingsRecorded(root: string): boolean {\n return fs.existsSync(ledgerPath(root));\n}\n\n/**\n * Delete the recorded usage data for this repo: the ledger itself plus the\n * stats-share state that indexes into it (a byte offset into the ledger and the\n * random per-install id) — a stale offset against a fresh ledger would silently\n * skip new entries, and clearing \"my data\" should also reset the id. Everything\n * removed lives under `.vibgrate/cache/`; nothing else is touched. Returns\n * whether a ledger existed.\n */\nexport function clearSavings(root: string): boolean {\n const file = ledgerPath(root);\n const existed = fs.existsSync(file);\n fs.rmSync(file, { force: true });\n fs.rmSync(path.join(cacheDir(root), 'stats-share.json'), { force: true });\n return existed;\n}\n\nexport function recordSaving(root: string, entry: Omit<SavingEntry, 'ts'>, now: number): void {\n try {\n fs.mkdirSync(cacheDir(root), { recursive: true });\n const line = JSON.stringify({ ts: now, ...entry });\n fs.appendFileSync(ledgerPath(root), line + '\\n');\n } catch {\n /* never let telemetry break a tool call */\n }\n}\n\nexport interface SavingsReport {\n enabled: boolean;\n days: number;\n queries: number;\n vgTokens: number;\n baselineTokens: number;\n ratio: number;\n estCostVg: number;\n estCostBaseline: number;\n saved: number;\n rateLabel: string;\n}\n\n// Published-style input rate ($/1M tokens), shipped with the CLI. Labelled\n// estimate; the user can pass their own model rate.\nconst DEFAULT_RATE_PER_M = 3.0; // e.g. a mid-tier model input rate\nconst DEFAULT_RATE_LABEL = 'input @ $3/1M';\n\nexport function readSavings(root: string, days: number, now: number, ratePerM = DEFAULT_RATE_PER_M): SavingsReport {\n const file = ledgerPath(root);\n const cutoff = now - days * 24 * 60 * 60 * 1000;\n let queries = 0;\n let vgTokens = 0;\n let baselineTokens = 0;\n if (fs.existsSync(file)) {\n for (const line of fs.readFileSync(file, 'utf8').split('\\n')) {\n if (!line.trim()) continue;\n try {\n const e = JSON.parse(line) as SavingEntry;\n if (e.ts < cutoff) continue;\n // The token-savings figures compare only the tools with a meaningful\n // grep/read baseline; the full per-command breakdown lives in readUsage.\n if (!SAVINGS_TOOLS.has(e.tool)) continue;\n queries++;\n vgTokens += e.vgTokens;\n baselineTokens += e.baselineTokens;\n } catch {\n /* skip corrupt line */\n }\n }\n }\n const estCostVg = (vgTokens / 1e6) * ratePerM;\n const estCostBaseline = (baselineTokens / 1e6) * ratePerM;\n return {\n enabled: savingsRecorded(root),\n days,\n queries,\n vgTokens,\n baselineTokens,\n ratio: vgTokens > 0 ? Math.round((baselineTokens / vgTokens) * 100) / 100 : 0,\n estCostVg: round2(estCostVg),\n estCostBaseline: round2(estCostBaseline),\n saved: round2(estCostBaseline - estCostVg),\n rateLabel: DEFAULT_RATE_LABEL,\n };\n}\n\nfunction round2(x: number): number {\n return Math.round(x * 100) / 100;\n}\n\n/** Token + cost savings attributed to one model (VG Code per-model auditing). */\nexport interface ModelSaving {\n /** `provider/model`, the ledger's per-model key. */\n key: string;\n provider: string;\n model: string;\n queries: number;\n vgTokens: number;\n baselineTokens: number;\n saved: number;\n}\n\n/**\n * Per-model breakdown of the token-savings figures — the basis of \"full savings\n * auditing per model\". Only entries that carry a `model` and are savings-baseline\n * tools contribute, so it lines up with the headline `readSavings` totals.\n * Sorted by dollars saved (desc), then key.\n */\nexport function readModelSavings(root: string, days: number, now: number, ratePerM = DEFAULT_RATE_PER_M): ModelSaving[] {\n const file = ledgerPath(root);\n const cutoff = now - days * 24 * 60 * 60 * 1000;\n const byModel = new Map<string, { provider: string; model: string; queries: number; vg: number; base: number }>();\n if (fs.existsSync(file)) {\n for (const line of fs.readFileSync(file, 'utf8').split('\\n')) {\n if (!line.trim()) continue;\n try {\n const e = JSON.parse(line) as SavingEntry;\n if (e.ts < cutoff || !e.model || !SAVINGS_TOOLS.has(e.tool)) continue;\n const provider = e.provider ?? 'unknown';\n const key = `${provider}/${e.model}`;\n const row = byModel.get(key) ?? { provider, model: e.model, queries: 0, vg: 0, base: 0 };\n row.queries++;\n row.vg += e.vgTokens;\n row.base += e.baselineTokens;\n byModel.set(key, row);\n } catch {\n /* skip corrupt line */\n }\n }\n }\n return [...byModel.entries()]\n .map(([key, r]) => ({\n key,\n provider: r.provider,\n model: r.model,\n queries: r.queries,\n vgTokens: r.vg,\n baselineTokens: r.base,\n saved: round2(((r.base - r.vg) / 1e6) * ratePerM),\n }))\n .sort((a, b) => b.saved - a.saved || a.key.localeCompare(b.key));\n}\n\n/** Per-command usage stats over the ledger window (all recorded tools). */\nexport interface CommandStat {\n tool: string;\n calls: number;\n complete: number;\n partial: number;\n miss: number;\n /** (complete + partial) / calls, as a whole-number percentage. */\n successPct: number;\n /** Mean wall time over the calls that recorded one; null when none did. */\n avgMs: number | null;\n}\n\n/** Calls attributed to one dimension value (a source, or a client). */\nexport interface DimensionStat {\n key: string;\n calls: number;\n complete: number;\n partial: number;\n miss: number;\n successPct: number;\n}\n\nexport interface UsageReport {\n enabled: boolean;\n days: number;\n /** One row per tool used, ordered by call count (desc), then name. */\n commands: CommandStat[];\n /** The command-vs-MCP split: calls grouped by `source` (`cli` / `mcp`). */\n sources: DimensionStat[];\n /** Which AI is calling: calls grouped by coarse `client` label. */\n clients: DimensionStat[];\n /** Column sums across all commands. */\n totals: { calls: number; complete: number; partial: number; miss: number };\n /** The mean of the per-command success percentages (each command weighted equally). */\n avgSuccessPct: number;\n}\n\ninterface OutcomeCounts {\n complete: number;\n partial: number;\n miss: number;\n}\n\n/** Turn a name→outcome-count map into sorted DimensionStat rows. */\nfunction toDimensionStats(byKey: Map<string, OutcomeCounts>): DimensionStat[] {\n return [...byKey.entries()]\n .map(([key, r]) => {\n const calls = r.complete + r.partial + r.miss;\n return {\n key,\n calls,\n complete: r.complete,\n partial: r.partial,\n miss: r.miss,\n successPct: calls ? Math.round(((r.complete + r.partial) / calls) * 100) : 0,\n };\n })\n .sort((a, b) => b.calls - a.calls || a.key.localeCompare(b.key));\n}\n\n/**\n * Per-command breakdown of recorded navigation calls: how often each tool was\n * used and how those calls resolved (complete / partial / miss), plus column\n * totals and the average success rate. Complements the token-savings summary —\n * this counts *every* recorded tool, not just the grep-baseline ones.\n */\nexport function readUsage(root: string, days: number, now: number): UsageReport {\n const file = ledgerPath(root);\n const cutoff = now - days * 24 * 60 * 60 * 1000;\n const byTool = new Map<string, OutcomeCounts>();\n const bySource = new Map<string, OutcomeCounts>();\n const byClient = new Map<string, OutcomeCounts>();\n // Per-tool timing over the entries that recorded a duration (older ledger\n // lines and CLI-sourced calls carry none — \"not measured\", never zero).\n const msByTool = new Map<string, { sum: number; n: number }>();\n const bump = (m: Map<string, OutcomeCounts>, key: string, outcome: Outcome): void => {\n const row = m.get(key) ?? { complete: 0, partial: 0, miss: 0 };\n row[outcome]++;\n m.set(key, row);\n };\n if (fs.existsSync(file)) {\n for (const line of fs.readFileSync(file, 'utf8').split('\\n')) {\n if (!line.trim()) continue;\n try {\n const e = JSON.parse(line) as SavingEntry;\n if (e.ts < cutoff) continue;\n const outcome: Outcome = e.outcome ?? 'complete';\n // Back-compat: lines written before these dims existed are MCP calls\n // from an unidentified client.\n bump(byTool, e.tool, outcome);\n bump(bySource, e.source ?? 'mcp', outcome);\n bump(byClient, e.client ?? 'unknown', outcome);\n if (typeof e.ms === 'number' && e.ms >= 0) {\n const timing = msByTool.get(e.tool) ?? { sum: 0, n: 0 };\n timing.sum += e.ms;\n timing.n++;\n msByTool.set(e.tool, timing);\n }\n } catch {\n /* skip corrupt line */\n }\n }\n }\n const commands: CommandStat[] = toDimensionStats(byTool).map((d) => {\n const timing = msByTool.get(d.key);\n return {\n tool: d.key,\n calls: d.calls,\n complete: d.complete,\n partial: d.partial,\n miss: d.miss,\n successPct: d.successPct,\n avgMs: timing && timing.n > 0 ? Math.round(timing.sum / timing.n) : null,\n };\n });\n const totals = commands.reduce(\n (t, c) => ({\n calls: t.calls + c.calls,\n complete: t.complete + c.complete,\n partial: t.partial + c.partial,\n miss: t.miss + c.miss,\n }),\n { calls: 0, complete: 0, partial: 0, miss: 0 },\n );\n const avgSuccessPct = commands.length\n ? Math.round(commands.reduce((s, c) => s + c.successPct, 0) / commands.length)\n : 0;\n return {\n enabled: savingsRecorded(root),\n days,\n commands,\n sources: toDimensionStats(bySource),\n clients: toDimensionStats(byClient),\n totals,\n avgSuccessPct,\n };\n}\n","/**\n * Graph-grounded context assembly for `vg code` (VG-CLI-CODE §3).\n *\n * A generic coding agent starts blind and reconstructs structure by grepping and\n * reading whole files — which is exactly what blows the context window and\n * degrades the model. This module instead uses the deterministic code graph to\n * hand the planner a *small, high-signal, budget-bounded* context: the symbols\n * most relevant to the instruction, their immediate relations, the blast radius\n * of changing them, and any declared facts (hard constraints) that must not be\n * dropped by later compaction. Deterministic given a graph + instruction, so it\n * is fully offline-testable and benchmarkable.\n */\n\nimport { extractLiteralNeedles, queryGraph } from '../engine/query.js';\nimport type { RelevanceAnalysis } from '../engine/relevance-provider.js';\nimport { indexFor } from '../engine/relations.js';\nimport { impactOf } from '../engine/impact.js';\nimport type { CodeContext } from './types.js';\nimport type { GraphNode, VgGraph } from '../schema.js';\n\nexport interface BuildContextOptions {\n /** Approx token budget for the rendered block (default 3000). */\n budget?: number;\n /** How many retrieval seeds to expand (default 8). */\n seeds?: number;\n /** Impact BFS depth for the blast radius (default 2). */\n impactDepth?: number;\n /** Restrict the edit surface to these files (from `--file`), if given. */\n files?: string[];\n /** Optional pre-computed relevance analysis (engine/relevance-provider.ts),\n * loaded by the async caller; widens seed vocabulary deterministically. */\n relevance?: RelevanceAnalysis | null;\n /** Optional per-node topic tags (engine/relevance-enrich.ts). */\n topicTags?: Map<string, readonly string[]> | null;\n}\n\n/**\n * Build the context block for a coding instruction. The ordering is\n * cache-stable by design (see router.ts): the invariant, repo-derived material\n * (facts, symbols, relations) comes first and the volatile instruction is\n * echoed last, so a provider's prompt cache can reuse the stable prefix across\n * turns.\n */\nexport function buildCodeContext(graph: VgGraph, instruction: string, options: BuildContextOptions = {}): CodeContext {\n const budget = options.budget ?? 3000;\n const seedLimit = options.seeds ?? 8;\n const impactDepth = options.impactDepth ?? 2;\n const index = indexFor(graph);\n\n // Retrieval seeds: reuse the deterministic lexical/structural retrieval that\n // backs `vg ask`. When `--file` narrows the surface, keep only seeds in those\n // files (but still let impact reach outside them, so the review is honest).\n // URL / quoted-string needles are stripped inside queryGraph so path tokens\n // cannot poison seeds (dash→dashboard, exist→NonExisting, …).\n const q = queryGraph(graph, instruction, { budget: Math.floor(budget * 0.6), limit: seedLimit * 2, relevance: options.relevance, topicTags: options.topicTags });\n let seeds = q.matches.map((m) => ({ node: m.node, why: m.why }));\n if (options.files && options.files.length) {\n const set = new Set(options.files.map(normalize));\n const inScope = seeds.filter((s) => set.has(normalize(s.node.file)));\n // If nothing matched inside the named files, keep the best global seeds but\n // still steer target files to what the caller asked for.\n if (inScope.length) seeds = inScope;\n }\n seeds = seeds.slice(0, seedLimit);\n\n // Blast radius: who depends on the seeds. This is the impact-aware review\n // signal — an edit to a hub is riskier and the context says so.\n const impacted = new Map<string, { node: GraphNode; via: string }>();\n for (const s of seeds) {\n const impact = impactOf(graph, s.node.id, { depth: impactDepth });\n for (const item of impact.affected.slice(0, 6)) {\n const node = index.node(item.id);\n if (node && !impacted.has(node.id)) impacted.set(node.id, { node, via: s.node.qualifiedName });\n }\n }\n\n // Target files: the seed files (or the explicit --file set), stable order.\n const targetFiles = options.files?.length\n ? [...new Set(options.files.map(normalize))].sort()\n : [...new Set(seeds.map((s) => s.node.file))].sort();\n\n // Pinned facts: declared invariants/contracts that touch the seeds. These are\n // hard constraints; they are surfaced explicitly and never summarized away.\n const seedIds = new Set(seeds.map((s) => s.node.id));\n const pinnedFacts = [\n ...literalNeedleFacts(instruction),\n ...pinnedFactsFor(graph, seedIds),\n ];\n\n const rendered = render(instruction, seeds, [...impacted.values()], targetFiles, pinnedFacts, index, budget);\n return {\n instruction,\n seeds,\n targetFiles,\n impacted: [...impacted.values()],\n pinnedFacts,\n rendered,\n tokensEstimate: estimateTokens(rendered),\n };\n}\n\n/** Pin URL / quoted needles so the agent does not treat path tokens as symbols. */\nfunction literalNeedleFacts(instruction: string): string[] {\n const needles = extractLiteralNeedles(instruction);\n if (!needles.length) return [];\n return needles.map(\n (n) =>\n `literal-locate: search the workspace for the exact string \\`${n}\\` (use search_code with the quoted needle). This is not a graph symbol name. If there are zero hits, report that honestly and finish — do not invent an edit.`,\n );\n}\n\nfunction pinnedFactsFor(graph: VgGraph, seedIds: Set<string>): string[] {\n if (!graph.facts?.length) return [];\n const out: string[] = [];\n for (const f of graph.facts) {\n if (f.kind === 'characterization') continue; // keep hard constraints only\n if (!f.subjectIds.some((id) => seedIds.has(id))) continue;\n const subjects = f.subjectIds\n .map((id) => graph.nodes.find((n) => n.id === id)?.qualifiedName ?? id)\n .join(', ');\n out.push(`${f.kind}: ${subjects} — ${JSON.stringify(f.predicate)}`);\n }\n return out.sort().slice(0, 12);\n}\n\nfunction render(\n instruction: string,\n seeds: { node: GraphNode; why: string }[],\n impacted: { node: GraphNode; via: string }[],\n targetFiles: string[],\n pinnedFacts: string[],\n index: ReturnType<typeof indexFor>,\n budget: number,\n): string {\n const lines: string[] = [];\n lines.push('# Repository context (from the deterministic code graph)');\n lines.push('');\n\n if (pinnedFacts.length) {\n lines.push('## Hard constraints (do not violate)');\n for (const f of pinnedFacts) lines.push(`- ${f}`);\n lines.push('');\n }\n\n lines.push('## Relevant symbols');\n for (const { node, why } of seeds) {\n const block: string[] = [];\n block.push(`### ${node.qualifiedName} (${node.kind}, ${node.file}:${node.span.start}-${node.span.end})`);\n if (node.signature) block.push('`' + node.signature + '`');\n const callees = uniqueNames(index.callees(node.id).map((x) => x.node.qualifiedName)).slice(0, 6);\n const callers = uniqueNames(index.callers(node.id).map((x) => x.node.qualifiedName)).slice(0, 6);\n if (callees.length) block.push(`calls: ${callees.join(', ')}`);\n if (callers.length) block.push(`called by: ${callers.join(', ')}`);\n block.push(`importance ${node.importance.toFixed(3)}${node.isHub ? ' · hub (high blast radius)' : ''} · ${why}`);\n block.push('');\n const candidate = lines.concat(block).join('\\n');\n if (estimateTokens(candidate) > budget && lines.length > 3) break;\n lines.push(...block);\n }\n\n if (impacted.length) {\n lines.push('## Blast radius (would be affected by a change here)');\n for (const { node, via } of impacted.slice(0, 10)) {\n lines.push(`- ${node.qualifiedName} (${node.file}:${node.span.start}) — depends on ${via}`);\n }\n lines.push('');\n }\n\n lines.push('## Files in scope for this edit');\n for (const f of targetFiles) lines.push(`- ${f}`);\n lines.push('');\n\n lines.push('## Task');\n lines.push(instruction);\n return lines.join('\\n');\n}\n\nfunction uniqueNames(xs: string[]): string[] {\n return [...new Set(xs)];\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n}\n","/**\n * Source-bearing Task Capsule compiler (Fusion Runtime Phase 0).\n *\n * Today's {@link buildCodeContext} pays for graph metadata, then the model still\n * calls `read_file` — double payment. This module compiles a Task Capsule that\n * includes exact source ranges (from Tree-sitter spans already on graph nodes)\n * so the first inference can solve without navigation tool calls (ZNS@1 path).\n *\n * Deterministic given (graph, instruction, file contents, options). Injectable\n * `readFile` keeps unit tests offline and pure.\n *\n * Schema: docs/fusion/task-capsule-v0.schema.json\n */\n\nimport { queryGraph } from '../engine/query.js';\nimport { indexFor } from '../engine/relations.js';\nimport { impactOf } from '../engine/impact.js';\nimport { hashString } from '../engine/hash.js';\nimport type { GraphNode, VgGraph } from '../schema.js';\nimport type { CodeContext } from './types.js';\nimport { buildCodeContext, type BuildContextOptions } from './context.js';\n\nexport const TASK_CAPSULE_SCHEMA_VERSION = 'task-capsule/0' as const;\n/** Frozen ranking policy id — bump when the heuristic changes (benchmark gate). */\n/** Bumped 2026.07.1: strip URL/quoted needles from seed ranking (no path-token false positives). */\n/** Bumped 2026.08.1: term roles (weak process verbs never seed alone), concept/bigram\n * expansion (payments→stripe, \"direct debit\"→sepa/bacs/mandate), multi-term coverage\n * bonus, directory-segment evidence — gated by the ask-quality corpus (bench/ask-corpus.mjs). */\n/** Bumped 2026.08.2: optional relevance-provider seam — sanitized provider expansions\n * join term preparation (own 0..1 weight capped at EXPANSION_WEIGHT; weak-provenance\n * dropped); provider version recorded as `relevanceVersion` provenance. Absent\n * provider = 2026.08.1 behaviour exactly — gated by the same corpus, dual-mode. */\nexport const CAPSULE_RANKING_VERSION = 'capsule-rank@2026.08.2' as const;\nexport const CAPSULE_COMPILER_ID = 'vg-task-capsule/0' as const;\n\nexport interface BuildCapsuleOptions extends BuildContextOptions {\n /**\n * Read file contents relative to the repository root. Required for source\n * slices; when omitted, the capsule still builds metadata + empty slices\n * (useful for schema/shape tests).\n */\n readFile?: (relativePath: string) => string | null;\n /** Extra lines of context around each symbol span (default 1). */\n padding?: number;\n /** Max source slices after merge (default 12). */\n maxSlices?: number;\n repositoryId?: string | null;\n /** Optional provenance from the Model Execution Profile / security ladder. */\n provenance?: CapsuleProvenanceExtras;\n /**\n * Extra pinned facts (e.g. high-confidence federation bridge edges) appended\n * after graph-derived facts. Secret-free, short strings only.\n */\n extraPinnedFacts?: string[];\n}\n\nexport interface CapsuleSymbolRef {\n id: string;\n qualifiedName: string;\n kind: string;\n file: string;\n span: { start: number; end: number };\n signature?: string | null;\n why: string;\n importance: number;\n}\n\nexport interface SourceSlice {\n file: string;\n start: number;\n end: number;\n content: string;\n contentHash: string;\n symbolIds: string[];\n}\n\nexport interface CapsuleRelationship {\n kind: 'calls' | 'called-by' | 'impacts' | 'contains' | 'other';\n from: string;\n to: string;\n}\n\nexport interface VerificationPlan {\n syntaxFiles: string[];\n suggestedTests: string[];\n notes: string[];\n}\n\nexport interface TaskCapsule {\n schemaVersion: typeof TASK_CAPSULE_SCHEMA_VERSION;\n instruction: string;\n primary: CapsuleSymbolRef[];\n supporting: CapsuleSymbolRef[];\n sourceSlices: SourceSlice[];\n relationships: CapsuleRelationship[];\n pinnedFacts: string[];\n targetFiles: string[];\n verificationPlan: VerificationPlan;\n rendered: string;\n tokensEstimate: number;\n provenance: {\n compiler: string;\n rankingVersion: string;\n graphCorpusHash: string | null;\n repositoryId: string | null;\n /** Model Execution Profile id when resolved (Fusion Phase 4/7). */\n modelProfileId?: string | null;\n /** Security tier for shell during this task. */\n securityTier?: string | null;\n /** Frozen policy / ranking patch id if any. */\n policyVersion?: string | null;\n /** Version of the optional relevance provider that widened seed\n * vocabulary for this capsule, or null when none was active. */\n relevanceVersion?: string | null;\n };\n}\n\nexport interface CapsuleProvenanceExtras {\n modelProfileId?: string | null;\n securityTier?: string | null;\n policyVersion?: string | null;\n}\n\n/** Host-safe capsule summary for VS Code / stream-json capsule transparency. */\nexport interface CapsuleSummary {\n schemaVersion: string;\n instruction: string;\n primary: Array<{ qualifiedName: string; file: string; kind: string }>;\n supporting: Array<{ qualifiedName: string; file: string; kind: string }>;\n sourceSliceCount: number;\n sourceFiles: string[];\n tokensEstimate: number;\n rankingVersion: string;\n /** Truncated rendered capsule for display (not the full prompt dump). */\n preview: string;\n}\n\n/** Host-safe capsule summary (capsule transparency UI / stream-json). */\nexport function summarizeCapsule(capsule: TaskCapsule): CapsuleSummary {\n const sourceFiles = [...new Set(capsule.sourceSlices.map((s) => s.file))].sort();\n const preview = capsule.rendered.length > 4000 ? `${capsule.rendered.slice(0, 4000)}\\n… (truncated)` : capsule.rendered;\n return {\n schemaVersion: capsule.schemaVersion,\n instruction: capsule.instruction,\n primary: capsule.primary.map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind })),\n supporting: capsule.supporting.map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind })),\n sourceSliceCount: capsule.sourceSlices.length,\n sourceFiles,\n tokensEstimate: capsule.tokensEstimate,\n rankingVersion: capsule.provenance.rankingVersion,\n preview,\n };\n}\n\n/**\n * Compile a source-bearing Task Capsule. Reuses the same seed / impact /\n * fact-pinning path as {@link buildCodeContext}, then attaches exact source\n * slices and a verification sketch.\n */\nexport function buildTaskCapsule(graph: VgGraph, instruction: string, options: BuildCapsuleOptions = {}): TaskCapsule {\n const base = buildCodeContext(graph, instruction, options);\n const padding = options.padding ?? 1;\n const maxSlices = options.maxSlices ?? 12;\n const budget = options.budget ?? 3000;\n const index = indexFor(graph);\n\n const primary = base.seeds.map((s) => toRef(s.node, s.why));\n const primaryIds = new Set(primary.map((p) => p.id));\n\n const supporting: CapsuleSymbolRef[] = [];\n for (const { node, via } of base.impacted) {\n if (primaryIds.has(node.id)) continue;\n supporting.push(toRef(node, `depends on ${via}`));\n }\n\n const relationships = collectRelationships(base, index);\n const sourceSlices = options.readFile\n ? buildSourceSlices(\n [...base.seeds.map((s) => s.node), ...base.impacted.map((i) => i.node)],\n options.readFile,\n padding,\n maxSlices,\n )\n : [];\n\n const extraFacts = (options.extraPinnedFacts ?? []).filter((f) => typeof f === 'string' && f.trim());\n const pinnedFacts = [...base.pinnedFacts, ...extraFacts];\n const verificationPlan = buildVerificationPlan(graph, base);\n const rendered = renderCapsule(instruction, primary, supporting, sourceSlices, pinnedFacts, base.targetFiles, verificationPlan, relationships, budget);\n\n return {\n schemaVersion: TASK_CAPSULE_SCHEMA_VERSION,\n instruction,\n primary,\n supporting,\n sourceSlices,\n relationships,\n pinnedFacts,\n targetFiles: base.targetFiles,\n verificationPlan,\n rendered,\n tokensEstimate: estimateTokens(rendered),\n provenance: {\n compiler: CAPSULE_COMPILER_ID,\n rankingVersion: CAPSULE_RANKING_VERSION,\n graphCorpusHash: graph.provenance?.corpusHash ?? null,\n repositoryId: options.repositoryId ?? null,\n modelProfileId: options.provenance?.modelProfileId ?? null,\n securityTier: options.provenance?.securityTier ?? null,\n policyVersion: options.provenance?.policyVersion ?? null,\n relevanceVersion: options.relevance?.version ?? null,\n },\n };\n}\n\n/**\n * Project a capsule into the legacy {@link CodeContext} shape so the existing\n * agent prompt path can consume it without a full rewrite (A/B flag).\n */\nexport function capsuleToCodeContext(capsule: TaskCapsule): CodeContext {\n return {\n instruction: capsule.instruction,\n seeds: capsule.primary.map((p) => ({\n node: {\n id: p.id,\n qualifiedName: p.qualifiedName,\n kind: p.kind,\n file: p.file,\n span: p.span,\n signature: p.signature ?? undefined,\n importance: p.importance,\n } as GraphNode,\n why: p.why,\n })),\n targetFiles: capsule.targetFiles,\n impacted: capsule.supporting.map((s) => ({\n node: {\n id: s.id,\n qualifiedName: s.qualifiedName,\n kind: s.kind,\n file: s.file,\n span: s.span,\n signature: s.signature ?? undefined,\n importance: s.importance,\n } as GraphNode,\n via: s.why.replace(/^depends on /, ''),\n })),\n pinnedFacts: capsule.pinnedFacts,\n rendered: capsule.rendered,\n tokensEstimate: capsule.tokensEstimate,\n };\n}\n\nfunction toRef(node: GraphNode, why: string): CapsuleSymbolRef {\n return {\n id: node.id,\n qualifiedName: node.qualifiedName,\n kind: node.kind,\n file: normalize(node.file),\n span: { start: node.span.start, end: node.span.end },\n signature: node.signature ?? null,\n why,\n importance: node.importance,\n };\n}\n\nfunction collectRelationships(\n base: CodeContext,\n index: ReturnType<typeof indexFor>,\n): CapsuleRelationship[] {\n const out: CapsuleRelationship[] = [];\n const seen = new Set<string>();\n const push = (kind: CapsuleRelationship['kind'], from: string, to: string) => {\n const key = `${kind}|${from}|${to}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push({ kind, from, to });\n };\n\n for (const { node } of base.seeds) {\n for (const c of index.callees(node.id).slice(0, 6)) {\n push('calls', node.qualifiedName, c.node.qualifiedName);\n }\n for (const c of index.callers(node.id).slice(0, 6)) {\n push('called-by', node.qualifiedName, c.node.qualifiedName);\n }\n }\n for (const { node, via } of base.impacted.slice(0, 10)) {\n push('impacts', via, node.qualifiedName);\n }\n\n // Stable order for determinism.\n return out.sort((a, b) => a.kind.localeCompare(b.kind) || a.from.localeCompare(b.from) || a.to.localeCompare(b.to));\n}\n\nfunction buildSourceSlices(\n nodes: GraphNode[],\n readFile: (relativePath: string) => string | null,\n padding: number,\n maxSlices: number,\n): SourceSlice[] {\n // Prefer concrete symbols over file/module containers for source evidence.\n const eligible = nodes.filter((n) => !['file', 'module', 'package'].includes(n.kind));\n const byFile = new Map<string, GraphNode[]>();\n for (const n of eligible) {\n const file = normalize(n.file);\n const list = byFile.get(file) ?? [];\n list.push(n);\n byFile.set(file, list);\n }\n\n type Range = { file: string; start: number; end: number; symbolIds: string[]; score: number };\n const ranges: Range[] = [];\n\n for (const [file, fileNodes] of [...byFile.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const sorted = [...fileNodes].sort((a, b) => a.span.start - b.span.start || b.importance - a.importance);\n let current: Range | null = null;\n for (const n of sorted) {\n const start = Math.max(1, n.span.start - padding);\n const end = n.span.end + padding;\n const score = n.importance + (n.isHub ? 0.25 : 0);\n if (current && current.file === file && start <= current.end + 2) {\n current.end = Math.max(current.end, end);\n current.symbolIds.push(n.id);\n current.score = Math.max(current.score, score);\n } else {\n if (current) ranges.push(current);\n current = { file, start, end, symbolIds: [n.id], score };\n }\n }\n if (current) ranges.push(current);\n }\n\n ranges.sort((a, b) => b.score - a.score || a.file.localeCompare(b.file) || a.start - b.start);\n\n const slices: SourceSlice[] = [];\n for (const range of ranges) {\n if (slices.length >= maxSlices) break;\n const raw = readFile(range.file);\n if (raw === null) continue;\n const lines = raw.split('\\n');\n const start = Math.min(range.start, lines.length);\n const end = Math.min(range.end, lines.length);\n if (start < 1 || end < start) continue;\n const content = lines.slice(start - 1, end).join('\\n');\n slices.push({\n file: range.file,\n start,\n end,\n content,\n contentHash: hashString(content),\n symbolIds: [...new Set(range.symbolIds)].sort(),\n });\n }\n\n // Stable final order: file then start line (score only used for selection).\n return slices.sort((a, b) => a.file.localeCompare(b.file) || a.start - b.start);\n}\n\nfunction buildVerificationPlan(graph: VgGraph, base: CodeContext): VerificationPlan {\n const syntaxFiles = [...base.targetFiles].sort();\n const seedIds = new Set(base.seeds.map((s) => s.node.id));\n const suggestedTests: string[] = [];\n\n for (const n of graph.nodes) {\n if (n.kind !== 'test') continue;\n // Prefer tests that share a file with seeds or whose name mentions a seed.\n const sameFile = base.seeds.some((s) => normalize(s.node.file) === normalize(n.file));\n const nameHit = base.seeds.some((s) => n.qualifiedName.toLowerCase().includes(s.node.name.toLowerCase()));\n if (sameFile || nameHit || seedIds.has(n.id)) {\n suggestedTests.push(n.qualifiedName);\n }\n }\n suggestedTests.sort();\n\n const notes: string[] = [];\n if (!suggestedTests.length) {\n notes.push('No graph-linked tests found for seed symbols; run the nearest project test command after apply.');\n }\n if (base.impacted.some((i) => i.node.isHub || i.node.importance >= 0.7)) {\n notes.push('High-importance dependents in blast radius — prefer targeted tests before a full build.');\n }\n\n return {\n syntaxFiles,\n suggestedTests: suggestedTests.slice(0, 12),\n notes,\n };\n}\n\nfunction renderCapsule(\n instruction: string,\n primary: CapsuleSymbolRef[],\n supporting: CapsuleSymbolRef[],\n slices: SourceSlice[],\n pinnedFacts: string[],\n targetFiles: string[],\n verification: VerificationPlan,\n relationships: CapsuleRelationship[],\n budget: number,\n): string {\n const lines: string[] = [];\n lines.push('# Task capsule (source-bearing, from the deterministic code graph)');\n lines.push('');\n lines.push('Use the exact source evidence below. Search or read outside it only if this capsule is insufficient.');\n lines.push('');\n\n if (pinnedFacts.length) {\n lines.push('## Hard constraints (do not violate)');\n for (const f of pinnedFacts) lines.push(`- ${f}`);\n lines.push('');\n }\n\n lines.push('## Primary symbols');\n for (const s of primary) {\n lines.push(`- ${s.qualifiedName} (${s.kind}, ${s.file}:${s.span.start}-${s.span.end})${s.signature ? ` — \\`${s.signature}\\`` : ''} — ${s.why}`);\n }\n lines.push('');\n\n if (supporting.length) {\n lines.push('## Supporting / blast radius');\n for (const s of supporting.slice(0, 10)) {\n lines.push(`- ${s.qualifiedName} (${s.file}:${s.span.start}) — ${s.why}`);\n }\n lines.push('');\n }\n\n if (relationships.length) {\n lines.push('## Relationships');\n for (const r of relationships.slice(0, 24)) {\n lines.push(`- ${r.kind}: ${r.from} → ${r.to}`);\n }\n lines.push('');\n }\n\n lines.push('## Exact source evidence');\n if (!slices.length) {\n lines.push('_No source slices available (file reader missing or spans unreadable)._');\n lines.push('');\n } else {\n let included = 0;\n for (const slice of slices) {\n const block = [\n `### ${slice.file}:${slice.start}-${slice.end}`,\n `\\`\\`\\`${langFor(slice.file)}`,\n slice.content,\n '```',\n '',\n ];\n const candidate = [...lines, ...block, '## Task', instruction].join('\\n');\n if (estimateTokens(candidate) > budget && included > 0) break;\n lines.push(...block);\n included += 1;\n }\n }\n\n lines.push('## Files in scope');\n for (const f of targetFiles) lines.push(`- ${f}`);\n lines.push('');\n\n lines.push('## Verification plan');\n for (const f of verification.syntaxFiles) lines.push(`- syntax: ${f}`);\n for (const t of verification.suggestedTests) lines.push(`- test: ${t}`);\n for (const n of verification.notes) lines.push(`- note: ${n}`);\n lines.push('');\n\n lines.push('## Task');\n lines.push(instruction);\n return lines.join('\\n');\n}\n\nfunction langFor(file: string): string {\n const ext = file.split('.').pop()?.toLowerCase() ?? '';\n const map: Record<string, string> = {\n ts: 'ts',\n tsx: 'tsx',\n js: 'js',\n jsx: 'jsx',\n mjs: 'js',\n cjs: 'js',\n py: 'python',\n rs: 'rust',\n go: 'go',\n java: 'java',\n cs: 'csharp',\n md: 'md',\n json: 'json',\n };\n return map[ext] ?? '';\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n}\n\n// Re-export query touch so tree-shaking keeps the dependency explicit for tests.\nexport const __testing = { queryGraph, impactOf };\n"]}