@vibgrate/cli 2026.730.2 → 2026.731.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/{agent-33BMKWJC.js → agent-6PPW5GIV.js} +4 -4
  2. package/dist/{agent-33BMKWJC.js.map → agent-6PPW5GIV.js.map} +1 -1
  3. package/dist/baseline-ZMHL6DXF.js +9 -0
  4. package/dist/{baseline-536TQZIB.js.map → baseline-ZMHL6DXF.js.map} +1 -1
  5. package/dist/{chunk-EGCB5K3P.js → chunk-4CGLQXSI.js} +3 -3
  6. package/dist/{chunk-EGCB5K3P.js.map → chunk-4CGLQXSI.js.map} +1 -1
  7. package/dist/chunk-4DZC3ADC.js +42 -0
  8. package/dist/chunk-4DZC3ADC.js.map +1 -0
  9. package/dist/chunk-4TC6RJ7U.js +326 -0
  10. package/dist/chunk-4TC6RJ7U.js.map +1 -0
  11. package/dist/{chunk-ZW5W627G.js → chunk-5J45MN3K.js} +13 -328
  12. package/dist/chunk-5J45MN3K.js.map +1 -0
  13. package/dist/{chunk-IDAQV3NQ.js → chunk-DT4KIVRI.js} +57 -17
  14. package/dist/chunk-DT4KIVRI.js.map +1 -0
  15. package/dist/{chunk-NSK25UT2.js → chunk-EX2SH5CT.js} +3 -3
  16. package/dist/{chunk-NSK25UT2.js.map → chunk-EX2SH5CT.js.map} +1 -1
  17. package/dist/{chunk-UPH2RJ7L.js → chunk-FF5ZQ6KI.js} +23 -6
  18. package/dist/chunk-FF5ZQ6KI.js.map +1 -0
  19. package/dist/{chunk-HWN4P64B.js → chunk-IZNOMGR6.js} +3 -3
  20. package/dist/{chunk-HWN4P64B.js.map → chunk-IZNOMGR6.js.map} +1 -1
  21. package/dist/chunk-L6BRBFBP.js +65 -0
  22. package/dist/chunk-L6BRBFBP.js.map +1 -0
  23. package/dist/{chunk-WHXVU23K.js → chunk-LZX5NH4V.js} +7 -7
  24. package/dist/{chunk-WHXVU23K.js.map → chunk-LZX5NH4V.js.map} +1 -1
  25. package/dist/chunk-NNB2H4BA.js +6 -0
  26. package/dist/{chunk-BZPZ3OM6.js.map → chunk-NNB2H4BA.js.map} +1 -1
  27. package/dist/{chunk-KGWEBM2J.js → chunk-Q7HUXIUF.js} +3 -3
  28. package/dist/{chunk-KGWEBM2J.js.map → chunk-Q7HUXIUF.js.map} +1 -1
  29. package/dist/{chunk-PHVVVOW7.js → chunk-QWOJO32H.js} +3 -3
  30. package/dist/{chunk-PHVVVOW7.js.map → chunk-QWOJO32H.js.map} +1 -1
  31. package/dist/{chunk-RV5DTGYT.js → chunk-RIWLXMMT.js} +3 -3
  32. package/dist/{chunk-RV5DTGYT.js.map → chunk-RIWLXMMT.js.map} +1 -1
  33. package/dist/{chunk-LCQILWQL.js → chunk-TNCD5VFX.js} +3 -3
  34. package/dist/{chunk-LCQILWQL.js.map → chunk-TNCD5VFX.js.map} +1 -1
  35. package/dist/{chunk-CPX7XP3O.js → chunk-XRN7DQGR.js} +11 -11
  36. package/dist/{chunk-CPX7XP3O.js.map → chunk-XRN7DQGR.js.map} +1 -1
  37. package/dist/{chunk-A5LF4VS4.js → chunk-Y44GPOBL.js} +41 -65
  38. package/dist/chunk-Y44GPOBL.js.map +1 -0
  39. package/dist/cli.d.ts +5 -1
  40. package/dist/cli.js +467 -86
  41. package/dist/cli.js.map +1 -1
  42. package/dist/ensure-map-C3NEC2GI.js +28 -0
  43. package/dist/ensure-map-C3NEC2GI.js.map +1 -0
  44. package/dist/fs-NTQUFCXV.js +4 -0
  45. package/dist/fs-NTQUFCXV.js.map +1 -0
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.js +10 -9
  48. package/dist/index.js.map +1 -1
  49. package/dist/{interactive-MR7DTVYS.js → interactive-2TAYVEHE.js} +19 -16
  50. package/dist/interactive-2TAYVEHE.js.map +1 -0
  51. package/dist/load-A5BGEQWP.js +10 -0
  52. package/dist/{load-RFQFTTIT.js.map → load-A5BGEQWP.js.map} +1 -1
  53. package/dist/{run-outcome-EKB6YQIK.js → run-outcome-OSIVMVT7.js} +5 -5
  54. package/dist/{run-outcome-EKB6YQIK.js.map → run-outcome-OSIVMVT7.js.map} +1 -1
  55. package/dist/{runtime-session-23RZLEA4.js → runtime-session-UPTC3E6N.js} +7 -7
  56. package/dist/{runtime-session-23RZLEA4.js.map → runtime-session-UPTC3E6N.js.map} +1 -1
  57. package/dist/{stream-json-3YOPU3LF.js → stream-json-CFKBL3MR.js} +4 -4
  58. package/dist/{stream-json-3YOPU3LF.js.map → stream-json-CFKBL3MR.js.map} +1 -1
  59. package/dist/{vg-mcp-bridge-UZFHPP2Q.js → vg-mcp-bridge-JHRKJBVT.js} +6 -6
  60. package/dist/{vg-mcp-bridge-UZFHPP2Q.js.map → vg-mcp-bridge-JHRKJBVT.js.map} +1 -1
  61. package/dist/{vgd-VIPBL7W4.js → vgd-HNPOSXKZ.js} +6 -6
  62. package/dist/vgd-HNPOSXKZ.js.map +1 -0
  63. package/package.json +1 -1
  64. package/dist/baseline-536TQZIB.js +0 -9
  65. package/dist/chunk-A5LF4VS4.js.map +0 -1
  66. package/dist/chunk-BZPZ3OM6.js +0 -6
  67. package/dist/chunk-IDAQV3NQ.js.map +0 -1
  68. package/dist/chunk-UPH2RJ7L.js.map +0 -1
  69. package/dist/chunk-ZW5W627G.js.map +0 -1
  70. package/dist/fs-HNR6LAI7.js +0 -4
  71. package/dist/fs-HNR6LAI7.js.map +0 -1
  72. package/dist/interactive-MR7DTVYS.js.map +0 -1
  73. package/dist/load-RFQFTTIT.js +0 -10
  74. package/dist/vgd-VIPBL7W4.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/code/capsule-delta.ts","../src/code/advanced-mode.ts","../src/code/session-graph.ts","../src/code/worktree-overlay.ts","../src/code/patch-ir.ts","../src/code/apply-patch-ir.ts","../src/code/preview-sides.ts","../src/code/safety.ts","../src/code/network-policy.ts","../src/code/failure-capsule.ts","../src/code/verify-ladder.ts","../src/code/inspect-change.ts","../src/code/identifier-enforce.ts","../src/code/tools.ts","../src/code/overlay.ts","../src/code/trajectory.ts","../src/code/run-provenance.ts","../src/code/patch-ir-grammar.ts","../src/code/locate-answer.ts","../src/code/agent.ts"],"names":["normalize","readFile","lines","path","search","fc"],"mappings":"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","file":"chunk-KGWEBM2J.js","sourcesContent":["/**\n * Task Capsule deltas (Fusion Phase 3 — subsequent-turn context).\n *\n * After mutations, recompile a capsule and emit only what changed so the model\n * does not re-pay for the full first-turn evidence. Pure over two capsules.\n */\n\nimport type { CapsuleSymbolRef, SourceSlice, TaskCapsule, VerificationPlan } from './capsule.js';\n\nexport const CAPSULE_DELTA_SCHEMA_VERSION = 'capsule-delta/0' as const;\n\nexport interface CapsuleDelta {\n schemaVersion: typeof CAPSULE_DELTA_SCHEMA_VERSION;\n /** Files whose source slices changed (content hash). */\n changedSourceFiles: string[];\n /** New primary symbols not in the previous capsule. */\n addedPrimary: Array<{ qualifiedName: string; file: string; kind: string }>;\n /** Primaries that disappeared. */\n removedPrimary: Array<{ qualifiedName: string; file: string }>;\n /** Supporting symbols newly present. */\n addedSupporting: Array<{ qualifiedName: string; file: string; kind: string }>;\n /** Verification plan notes / files that differ. */\n verificationDelta: {\n syntaxFilesAdded: string[];\n syntaxFilesRemoved: string[];\n notesAdded: string[];\n };\n /** Compact human/model-facing summary. */\n rendered: string;\n tokensEstimate: number;\n}\n\n/**\n * Diff two capsules. Deterministic given the same pair.\n */\nexport function buildCapsuleDelta(previous: TaskCapsule, next: TaskCapsule): CapsuleDelta {\n const prevPrimary = keySet(previous.primary);\n const nextPrimary = keySet(next.primary);\n const prevSupport = keySet(previous.supporting);\n const nextSupport = keySet(next.supporting);\n\n const addedPrimary = next.primary\n .filter((p) => !prevPrimary.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind }));\n const removedPrimary = previous.primary\n .filter((p) => !nextPrimary.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file }));\n const addedSupporting = next.supporting\n .filter((p) => !prevSupport.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind }));\n\n const changedSourceFiles = diffSourceFiles(previous.sourceSlices, next.sourceSlices);\n const verificationDelta = diffVerification(previous.verificationPlan, next.verificationPlan);\n\n const delta: CapsuleDelta = {\n schemaVersion: CAPSULE_DELTA_SCHEMA_VERSION,\n changedSourceFiles,\n addedPrimary,\n removedPrimary,\n addedSupporting,\n verificationDelta,\n rendered: '',\n tokensEstimate: 0,\n };\n delta.rendered = renderCapsuleDelta(delta, next);\n delta.tokensEstimate = Math.max(1, Math.ceil(delta.rendered.length / 4));\n return delta;\n}\n\n/** True when the delta is empty (no model update needed). */\nexport function isEmptyCapsuleDelta(d: CapsuleDelta): boolean {\n return (\n d.changedSourceFiles.length === 0 &&\n d.addedPrimary.length === 0 &&\n d.removedPrimary.length === 0 &&\n d.addedSupporting.length === 0 &&\n d.verificationDelta.syntaxFilesAdded.length === 0 &&\n d.verificationDelta.syntaxFilesRemoved.length === 0 &&\n d.verificationDelta.notesAdded.length === 0\n );\n}\n\nfunction keySet(syms: CapsuleSymbolRef[]): Set<string> {\n return new Set(syms.map(symKey));\n}\n\nfunction symKey(p: { qualifiedName: string; file: string }): string {\n return `${p.qualifiedName}\\0${p.file}`;\n}\n\nfunction diffSourceFiles(prev: SourceSlice[], next: SourceSlice[]): string[] {\n const prevHash = new Map<string, string>();\n for (const s of prev) {\n const k = `${s.file}:${s.start}-${s.end}`;\n prevHash.set(k, s.contentHash);\n }\n const changed = new Set<string>();\n for (const s of next) {\n const k = `${s.file}:${s.start}-${s.end}`;\n const old = prevHash.get(k);\n if (old !== s.contentHash) changed.add(s.file);\n }\n // Files that vanished entirely.\n const nextFiles = new Set(next.map((s) => s.file));\n for (const s of prev) {\n if (!nextFiles.has(s.file)) changed.add(s.file);\n }\n return [...changed].sort();\n}\n\nfunction diffVerification(prev: VerificationPlan, next: VerificationPlan): CapsuleDelta['verificationDelta'] {\n const prevFiles = new Set(prev.syntaxFiles);\n const nextFiles = new Set(next.syntaxFiles);\n const prevNotes = new Set(prev.notes);\n return {\n syntaxFilesAdded: next.syntaxFiles.filter((f) => !prevFiles.has(f)).sort(),\n syntaxFilesRemoved: prev.syntaxFiles.filter((f) => !nextFiles.has(f)).sort(),\n notesAdded: next.notes.filter((n) => !prevNotes.has(n)),\n };\n}\n\nfunction renderCapsuleDelta(d: CapsuleDelta, next: TaskCapsule): string {\n const lines: string[] = [\n '## Capsule delta (since last context)',\n `Instruction: ${next.instruction}`,\n ];\n if (d.changedSourceFiles.length) {\n lines.push(`Source updated: ${d.changedSourceFiles.join(', ')}`);\n }\n if (d.addedPrimary.length) {\n lines.push('New primary:');\n for (const p of d.addedPrimary) lines.push(`- ${p.qualifiedName} (${p.kind}) ${p.file}`);\n }\n if (d.removedPrimary.length) {\n lines.push('Removed primary:');\n for (const p of d.removedPrimary) lines.push(`- ${p.qualifiedName} ${p.file}`);\n }\n if (d.addedSupporting.length) {\n lines.push('New supporting:');\n for (const p of d.addedSupporting.slice(0, 8)) lines.push(`- ${p.qualifiedName} ${p.file}`);\n }\n if (d.verificationDelta.syntaxFilesAdded.length || d.verificationDelta.notesAdded.length) {\n lines.push('Verification plan updates:');\n for (const f of d.verificationDelta.syntaxFilesAdded) lines.push(`- +syntax ${f}`);\n for (const n of d.verificationDelta.notesAdded.slice(0, 4)) lines.push(`- +note ${n}`);\n }\n if (isEmptyCapsuleDelta(d)) {\n lines.push('(no structural capsule changes)');\n }\n // Include re-rendered slices for changed files only (bounded).\n const changed = new Set(d.changedSourceFiles);\n const slices = next.sourceSlices.filter((s) => changed.has(s.file)).slice(0, 6);\n if (slices.length) {\n lines.push('', '### Updated source slices');\n for (const s of slices) {\n lines.push(`\\`\\`\\`${s.file}:${s.start}-${s.end}`, s.content, '```');\n }\n }\n return lines.join('\\n');\n}\n","/**\n * Discovery-tool gating for capsule-first runs (Fusion Phase 4).\n *\n * Under Task Capsule context the model should solve from source evidence first\n * (ZNS@1 path). Low-level discovery tools remain available as rescue, but we\n * soft-nudge on early overuse and optionally hard-cap discovery until a\n * mutation or inspect_change has run.\n *\n * Pure counters — unit-tested without a model.\n */\n\nexport const DISCOVERY_TOOL_NAMES = new Set([\n 'search_code',\n 'read_file',\n 'list_files',\n 'graph_impact',\n 'library_docs',\n]);\n\nexport interface DiscoveryGateOptions {\n /**\n * When true (default for non-capsule runs), every tool is free.\n * When false, apply soft/hard discovery limits.\n */\n advancedMode: boolean;\n /** Soft nudge after this many discovery calls (default 2). */\n softLimit?: number;\n /** Hard block discovery after this many calls until progress (default 6). 0 = never hard-block. */\n hardLimit?: number;\n}\n\nexport interface DiscoveryGateState {\n discoveryCount: number;\n mutations: number;\n inspectChangeUsed: boolean;\n}\n\nexport type DiscoveryGateDecision =\n | { allow: true; note?: string }\n | { allow: false; reason: string };\n\nexport function createDiscoveryGateState(): DiscoveryGateState {\n return { discoveryCount: 0, mutations: 0, inspectChangeUsed: false };\n}\n\n/**\n * Decide whether a tool call may proceed under the discovery policy.\n * Call {@link recordDiscoveryGateOutcome} after the tool runs.\n */\nexport function gateDiscoveryTool(\n name: string,\n state: DiscoveryGateState,\n options: DiscoveryGateOptions,\n): DiscoveryGateDecision {\n if (options.advancedMode) return { allow: true };\n if (!DISCOVERY_TOOL_NAMES.has(name)) return { allow: true };\n\n // After real progress, discovery is unrestricted (repair / follow-up).\n if (state.mutations > 0 || state.inspectChangeUsed) return { allow: true };\n\n const soft = options.softLimit ?? 2;\n const hard = options.hardLimit ?? 6;\n\n if (hard > 0 && state.discoveryCount >= hard) {\n return {\n allow: false,\n reason:\n `Discovery tools are limited for capsule-first runs (${hard} free calls used). ` +\n `Use inspect_task / inspect_change / apply_patch / edit_file with the capsule evidence, ` +\n `or re-run with advanced mode if you need free search.`,\n };\n }\n\n if (state.discoveryCount >= soft) {\n return {\n allow: true,\n note:\n `(capsule-first) Prefer the Task Capsule evidence over further navigation. ` +\n `Call inspect_change before multi-file edits. Discovery calls so far: ${state.discoveryCount + 1}.`,\n };\n }\n\n return { allow: true };\n}\n\n/** Update counters after a tool completes (or is blocked — do not call if blocked). */\nexport function recordDiscoveryGateOutcome(\n name: string,\n state: DiscoveryGateState,\n result: { mutated: boolean },\n): void {\n if (DISCOVERY_TOOL_NAMES.has(name)) state.discoveryCount++;\n if (result.mutated) state.mutations++;\n if (name === 'inspect_change') state.inspectChangeUsed = true;\n}\n","/**\n * Session graph (Fusion Runtime Phase 5).\n *\n * Materializes a code-map **view** that reflects the session overlay:\n * deleted overlay files drop their nodes/edges; written files are re-parsed\n * (when a parser is available) and merged so `search_code` / `graph_impact`\n * see the agent's uncommitted edits, not only the on-disk baseline.\n *\n * Deterministic given (base graph, overlay snapshot, reparses). Failures to\n * reparse a dirty file fall back to stripping that file's prior nodes (never\n * invent symbols).\n */\n\nimport { resolve } from '../engine/resolve.js';\nimport { parseSource } from '../engine/parse.js';\nimport { langForExtension } from '../engine/languages.js';\nimport type { FileParse } from '../engine/types.js';\nimport type { GraphEdge, GraphNode, VgGraph } from '../schema.js';\nimport type { OverlayEntry } from './overlay.js';\nimport type { SessionOverlay } from './overlay.js';\n\nexport interface SessionGraphResult {\n graph: VgGraph;\n /** Overlay paths that were deleted in this view. */\n deleted: string[];\n /** Overlay paths that were rewritten (with or without successful reparse). */\n rewritten: string[];\n /** Paths successfully re-parsed into the session graph. */\n reparsed: string[];\n}\n\nexport type SessionParseFn = (rel: string, source: string, langId: string) => Promise<FileParse>;\n\n/**\n * Build a session-scoped graph from the baseline map + overlay.\n * When `parseFile` is omitted, uses {@link parseSource} (tree-sitter).\n */\nexport async function materializeSessionGraph(\n base: VgGraph,\n overlay: SessionOverlay,\n options: { parseFile?: SessionParseFn } = {},\n): Promise<SessionGraphResult> {\n return applyOverlayToGraph(base, overlay.snapshot(), {\n parseFile: options.parseFile ?? defaultParse,\n readContent: (rel) => {\n const entry = overlay.snapshot().get(normalize(rel));\n if (!entry) return null;\n if (entry.kind === 'delete') return null;\n return entry.content;\n },\n });\n}\n\n/**\n * Pure-ish core (async only for parse). `dirty` is the overlay snapshot.\n */\nexport async function applyOverlayToGraph(\n base: VgGraph,\n dirty: Map<string, OverlayEntry>,\n options: {\n parseFile?: SessionParseFn;\n /** Content for rewritten files (required for reparse). */\n readContent?: (rel: string) => string | null;\n } = {},\n): Promise<SessionGraphResult> {\n if (dirty.size === 0) {\n return { graph: base, deleted: [], rewritten: [], reparsed: [] };\n }\n\n const deleted: string[] = [];\n const rewritten: string[] = [];\n for (const [file, entry] of [...dirty.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n if (entry.kind === 'delete') deleted.push(file);\n else rewritten.push(file);\n }\n\n const drop = new Set([...deleted, ...rewritten].map(normalize));\n\n // 1) Strip every node that lives in a dirty path; drop edges that touch them.\n const keptNodes = base.nodes.filter((n) => !drop.has(normalize(n.file)));\n const keptIds = new Set(keptNodes.map((n) => n.id));\n const keptEdges = base.edges.filter((e) => keptIds.has(e.src) && keptIds.has(e.dst));\n\n // 2) Reparse rewritten files and merge heuristic nodes/edges.\n const reparsed: string[] = [];\n const newNodes: GraphNode[] = [];\n const newEdges: GraphEdge[] = [];\n const parseFile = options.parseFile;\n const readContent = options.readContent;\n\n if (parseFile && readContent) {\n for (const file of rewritten) {\n const content = readContent(file);\n if (content === null) continue;\n const lang = langIdFor(file);\n if (!lang) continue;\n try {\n const fp = await parseFile(file, content, lang);\n const resolved = resolve([fp]);\n // Fill analysis defaults for session-only nodes (base graph already analysed).\n for (const n of resolved.nodes) {\n newNodes.push(withAnalysisDefaults(n));\n }\n for (const e of resolved.edges) {\n newEdges.push(e);\n }\n reparsed.push(file);\n } catch {\n // Reparse failed — file stays stripped (no stale symbols).\n }\n }\n }\n\n const nodes = [...keptNodes, ...newNodes].sort((a, b) => a.id.localeCompare(b.id));\n const edges = [...keptEdges, ...newEdges].sort((a, b) => a.id.localeCompare(b.id));\n const nodeIds = new Set(nodes.map((n) => n.id));\n const edgesFinal = edges.filter((e) => nodeIds.has(e.src) && nodeIds.has(e.dst));\n\n const graph: VgGraph = {\n ...base,\n nodes,\n edges: edgesFinal,\n meta: {\n ...base.meta,\n counts: {\n ...base.meta.counts,\n nodes: nodes.length,\n edges: edgesFinal.length,\n },\n },\n provenance: {\n ...base.provenance,\n // Session view fingerprint — not a corpus commit; consumers must not confuse with disk map.\n corpusHash: `${base.provenance.corpusHash}:session:${deleted.length}:${rewritten.length}:${reparsed.join(',')}`,\n },\n };\n\n return { graph, deleted, rewritten, reparsed };\n}\n\n/** Structural-only overlay (no parse) — deletes strip nodes; rewrites strip until reparse. */\nexport function applyOverlayStructural(base: VgGraph, dirty: Map<string, OverlayEntry>): SessionGraphResult {\n const deleted: string[] = [];\n const rewritten: string[] = [];\n for (const [file, entry] of dirty) {\n if (entry.kind === 'delete') deleted.push(normalize(file));\n else rewritten.push(normalize(file));\n }\n const drop = new Set([...deleted, ...rewritten]);\n const nodes = base.nodes.filter((n) => !drop.has(normalize(n.file)));\n const ids = new Set(nodes.map((n) => n.id));\n const edges = base.edges.filter((e) => ids.has(e.src) && ids.has(e.dst));\n return {\n graph: {\n ...base,\n nodes,\n edges,\n meta: {\n ...base.meta,\n counts: { ...base.meta.counts, nodes: nodes.length, edges: edges.length },\n },\n },\n deleted: deleted.sort(),\n rewritten: rewritten.sort(),\n reparsed: [],\n };\n}\n\nasync function defaultParse(rel: string, source: string, langId: string): Promise<FileParse> {\n return parseSource(rel, langId, source);\n}\n\nfunction langIdFor(rel: string): string | null {\n const ext = rel.includes('.') ? rel.slice(rel.lastIndexOf('.')) : '';\n const def = langForExtension(ext);\n return def?.id ?? null;\n}\n\nfunction withAnalysisDefaults(n: GraphNode): GraphNode {\n return {\n ...n,\n importance: n.importance ?? 0.5,\n centrality: n.centrality ?? { degree: 0, pagerank: 0, betweenness: 0, eigenvector: 0 },\n area: n.area ?? 0,\n isHub: n.isHub ?? false,\n tested: n.tested ?? false,\n };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Worktree overlay (Fusion Phase 5).\n *\n * The on-disk code map is keyed by git commit/branch tip. Uncommitted edits in\n * the working tree are not in that map until reparsed. This module lists dirty\n * worktree paths (via `git status --porcelain`) and builds an overlay of those\n * files so {@link applyOverlayToGraph} can produce a worktree-aware ActiveGraph\n * view: base ⊕ worktree (and later ⊕ session).\n *\n * Pure helpers are unit-tested with injectable git status / readFile.\n */\n\nimport { spawnSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { OverlayEntry } from './overlay.js';\nimport { applyOverlayToGraph, type SessionGraphResult, type SessionParseFn } from './session-graph.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface WorktreeDirtyOptions {\n /** Injectable `git status --porcelain` body (tests). */\n porcelain?: string;\n /** Max files to reparse (default 80). */\n maxFiles?: number;\n /** File extensions to include (default common source). */\n extensions?: string[];\n}\n\nconst DEFAULT_EXTS = new Set([\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.py',\n '.go',\n '.rs',\n '.java',\n '.cs',\n '.rb',\n '.kt',\n '.swift',\n]);\n\n/**\n * List relative paths changed in the worktree (modified/added/untracked).\n * Deterministic sort. Never throws — empty on non-git / errors.\n */\nexport function listWorktreeDirtyFiles(root: string, options: WorktreeDirtyOptions = {}): string[] {\n const max = options.maxFiles ?? 80;\n const exts = options.extensions ? new Set(options.extensions) : DEFAULT_EXTS;\n const body =\n options.porcelain ??\n (() => {\n try {\n const res = spawnSync('git', ['status', '--porcelain', '-uall'], {\n cwd: root,\n encoding: 'utf8',\n timeout: 15_000,\n });\n if (res.status !== 0) return '';\n return res.stdout ?? '';\n } catch {\n return '';\n }\n })();\n\n const files = new Set<string>();\n for (const line of body.split('\\n')) {\n if (!line.trim()) continue;\n // XY PATH or XY ORIG -> PATH for renames\n const ren = /^.. (.+) -> (.+)$/.exec(line);\n const raw = ren ? ren[2]! : line.slice(3).trim();\n const rel = raw.replace(/^\"|\"$/g, '').replace(/\\\\\"/g, '\"');\n if (!rel || rel.startsWith('.git/')) continue;\n const ext = path.extname(rel).toLowerCase();\n if (exts.size && !exts.has(ext)) continue;\n // Skip deleted-only paths (status D) — no content to reparse; strip via delete entry.\n files.add(rel.replace(/\\\\/g, '/'));\n }\n return [...files].sort().slice(0, max);\n}\n\n/**\n * Build overlay entries for dirty worktree files by reading disk content.\n * Deleted paths (missing on disk) become delete entries.\n */\nexport function buildWorktreeOverlayEntries(\n root: string,\n dirtyFiles: string[],\n options: { readFile?: (abs: string) => string | null } = {},\n): Map<string, OverlayEntry> {\n const read =\n options.readFile ??\n ((abs: string) => {\n try {\n return fs.readFileSync(abs, 'utf8');\n } catch {\n return null;\n }\n });\n const out = new Map<string, OverlayEntry>();\n for (const rel of dirtyFiles) {\n const abs = path.resolve(root, rel);\n const content = read(abs);\n if (content === null) out.set(normalize(rel), { kind: 'delete' });\n else out.set(normalize(rel), { kind: 'write', content });\n }\n return out;\n}\n\n/**\n * Materialize base ⊕ worktree graph. Returns base unchanged when no dirty files.\n */\nexport async function materializeWorktreeGraph(\n base: VgGraph,\n root: string,\n options: WorktreeDirtyOptions & {\n parseFile?: SessionParseFn;\n readFile?: (abs: string) => string | null;\n dirtyFiles?: string[];\n } = {},\n): Promise<SessionGraphResult & { dirtyFiles: string[] }> {\n const dirtyFiles = options.dirtyFiles ?? listWorktreeDirtyFiles(root, options);\n if (!dirtyFiles.length) {\n return { graph: base, deleted: [], rewritten: [], reparsed: [], dirtyFiles: [] };\n }\n const entries = buildWorktreeOverlayEntries(root, dirtyFiles, { readFile: options.readFile });\n const result = await applyOverlayToGraph(base, entries, {\n parseFile: options.parseFile,\n readContent: (rel) => {\n const e = entries.get(normalize(rel));\n if (!e || e.kind === 'delete') return null;\n return e.content;\n },\n });\n return { ...result, dirtyFiles };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * PatchIR — validated intermediate representation for model-proposed edits\n * (Fusion Runtime Phase 0 / 4).\n *\n * Every model-native format (search/replace blocks, whole-file create/delete,\n * future grammar-constrained JSON) normalizes here before the deterministic\n * apply engine runs. Assumptions let the engine reject stale or hallucinated\n * spans before any write.\n *\n * Schema: docs/fusion/patch-ir-v0.schema.json\n */\n\nimport type { CodeEdit } from './types.js';\n\nexport const PATCH_IR_SCHEMA_VERSION = 'patch-ir/0' as const;\n\nexport type PatchFormat =\n | 'search-replace'\n | 'whole-file'\n | 'structured-json'\n | 'grammar-constrained'\n | 'code-edit';\n\nexport type PatchOperation =\n | {\n op: 'replace-range';\n file: string;\n start: number;\n end: number;\n replacement: string;\n expectedHash?: string | null;\n anchorSymbol?: string | null;\n }\n | {\n op: 'replace-text';\n file: string;\n search: string;\n replace: string;\n anchorSymbol?: string | null;\n }\n | {\n op: 'create-file';\n file: string;\n content: string;\n }\n | {\n op: 'delete-file';\n file: string;\n }\n | {\n op: 'replace-symbol';\n symbolId: string;\n file?: string | null;\n replacement: string;\n expectedHash?: string | null;\n };\n\nexport interface PatchAssumption {\n kind: 'file-hash' | 'symbol-span' | 'symbol-exists' | 'text-present' | 'other';\n detail: string;\n file?: string | null;\n symbolId?: string | null;\n expectedHash?: string | null;\n}\n\nexport interface VerificationTarget {\n kind: 'syntax' | 'typecheck' | 'test' | 'build' | 'command';\n target: string;\n}\n\nexport interface PatchIR {\n schemaVersion: typeof PATCH_IR_SCHEMA_VERSION;\n operations: PatchOperation[];\n assumptions: PatchAssumption[];\n requestedVerification: VerificationTarget[];\n provenance: {\n modelId?: string | null;\n format: PatchFormat;\n raw?: string | null;\n };\n}\n\nexport interface PatchIRValidation {\n ok: boolean;\n errors: string[];\n}\n\n/** Lift existing {@link CodeEdit} values (from parseEdits) into PatchIR. */\nexport function codeEditsToPatchIR(\n edits: CodeEdit[],\n options: { modelId?: string | null; raw?: string | null; format?: PatchFormat } = {},\n): PatchIR {\n const operations: PatchOperation[] = edits.map((edit): PatchOperation => {\n if (edit.op === 'replace') {\n return {\n op: 'replace-text',\n file: normalizeFile(edit.file),\n search: edit.search,\n replace: edit.replace,\n anchorSymbol: edit.anchorSymbol ?? null,\n };\n }\n if (edit.op === 'create') {\n return { op: 'create-file', file: normalizeFile(edit.file), content: edit.content };\n }\n return { op: 'delete-file', file: normalizeFile(edit.file) };\n });\n\n return {\n schemaVersion: PATCH_IR_SCHEMA_VERSION,\n operations,\n assumptions: [],\n requestedVerification: [],\n provenance: {\n modelId: options.modelId ?? null,\n format: options.format ?? 'code-edit',\n raw: options.raw ?? null,\n },\n };\n}\n\n/** Lower PatchIR ops that the current apply engine understands back to CodeEdit. */\nexport function patchIRToCodeEdits(patch: PatchIR): CodeEdit[] {\n const out: CodeEdit[] = [];\n for (const op of patch.operations) {\n if (op.op === 'replace-text') {\n out.push({\n op: 'replace',\n file: op.file,\n search: op.search,\n replace: op.replace,\n anchorSymbol: op.anchorSymbol ?? undefined,\n });\n continue;\n }\n if (op.op === 'create-file') {\n out.push({ op: 'create', file: op.file, content: op.content });\n continue;\n }\n if (op.op === 'delete-file') {\n out.push({ op: 'delete', file: op.file });\n continue;\n }\n // replace-range / replace-symbol need the full PatchIR engine (Phase 4).\n }\n return out;\n}\n\n/**\n * Structural validation only — no filesystem I/O. Rejects empty patches and\n * ops missing required fields so callers fail closed before apply.\n */\nexport function validatePatchIR(patch: PatchIR): PatchIRValidation {\n const errors: string[] = [];\n if (patch.schemaVersion !== PATCH_IR_SCHEMA_VERSION) {\n errors.push(`unsupported schemaVersion: ${String(patch.schemaVersion)}`);\n }\n if (!Array.isArray(patch.operations) || patch.operations.length === 0) {\n errors.push('operations must be a non-empty array');\n } else {\n patch.operations.forEach((op, i) => {\n if (!op || typeof op !== 'object' || !('op' in op)) {\n errors.push(`operations[${i}]: missing op`);\n return;\n }\n switch (op.op) {\n case 'replace-text':\n if (!op.file?.trim()) errors.push(`operations[${i}]: replace-text requires file`);\n if (typeof op.search !== 'string') errors.push(`operations[${i}]: replace-text requires search`);\n if (typeof op.replace !== 'string') errors.push(`operations[${i}]: replace-text requires replace`);\n break;\n case 'replace-range':\n if (!op.file?.trim()) errors.push(`operations[${i}]: replace-range requires file`);\n if (!Number.isInteger(op.start) || op.start < 1) errors.push(`operations[${i}]: replace-range start must be >= 1`);\n if (!Number.isInteger(op.end) || op.end < op.start) errors.push(`operations[${i}]: replace-range end must be >= start`);\n if (typeof op.replacement !== 'string') errors.push(`operations[${i}]: replace-range requires replacement`);\n break;\n case 'create-file':\n if (!op.file?.trim()) errors.push(`operations[${i}]: create-file requires file`);\n if (typeof op.content !== 'string') errors.push(`operations[${i}]: create-file requires content`);\n break;\n case 'delete-file':\n if (!op.file?.trim()) errors.push(`operations[${i}]: delete-file requires file`);\n break;\n case 'replace-symbol':\n if (!op.symbolId?.trim()) errors.push(`operations[${i}]: replace-symbol requires symbolId`);\n if (typeof op.replacement !== 'string') errors.push(`operations[${i}]: replace-symbol requires replacement`);\n break;\n default:\n errors.push(`operations[${i}]: unknown op`);\n }\n });\n }\n return { ok: errors.length === 0, errors };\n}\n\nfunction normalizeFile(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Deterministic PatchIR apply engine (Fusion Runtime Phase 4).\n *\n * Validates structure + assumptions, then applies every operation against an\n * in-memory working copy. Either all ops that can apply are threaded in order\n * (best-effort, like applyEdits), or callers use `transactional: true` to\n * require every op to succeed before any file state is returned as \"commit\".\n *\n * No disk I/O — pure over injectables. Agent tools write only after approval.\n */\n\nimport { applyEdit, type SymbolSpan } from './apply.js';\nimport { hashString } from '../engine/hash.js';\nimport {\n patchIRToCodeEdits,\n validatePatchIR,\n type PatchAssumption,\n type PatchIR,\n type PatchOperation,\n} from './patch-ir.js';\nimport type { CodeEdit, EditOutcome } from './types.js';\n\nexport interface SymbolLocator {\n id: string;\n file: string;\n /** 1-based inclusive line range. */\n start: number;\n end: number;\n}\n\nexport interface ApplyPatchIROptions {\n readFile: (relativePath: string) => string | null;\n /** Graph symbol spans by file path (for replace-text anchors). */\n spansForFile?: (file: string) => SymbolSpan[];\n /** Resolve replace-symbol by graph node id. */\n locateSymbol?: (symbolId: string) => SymbolLocator | null;\n /**\n * When true, if any op fails (not applied / no-op that was required), return\n * ok:false and the pre-patch file snapshot (no partial commit view).\n * Default false: thread partial applies like applyEdits.\n */\n transactional?: boolean;\n}\n\nexport interface ApplyPatchIROpResult {\n index: number;\n op: PatchOperation['op'];\n file: string;\n status: EditOutcome['status'] | 'assumption-failed' | 'unsupported';\n reason?: string;\n}\n\nexport interface ApplyPatchIRResult {\n ok: boolean;\n /** Per-file before/after after applying (null after = deleted). */\n files: Map<string, { before: string | null; after: string | null }>;\n ops: ApplyPatchIROpResult[];\n errors: string[];\n}\n\n/**\n * Apply a validated PatchIR. Runs structural validation first; failed validation\n * returns ok:false with no file mutations in the result map.\n */\nexport function applyPatchIR(patch: PatchIR, options: ApplyPatchIROptions): ApplyPatchIRResult {\n const structural = validatePatchIR(patch);\n if (!structural.ok) {\n return { ok: false, files: new Map(), ops: [], errors: structural.errors };\n }\n\n const spansForFile = options.spansForFile ?? (() => []);\n const locateSymbol = options.locateSymbol ?? (() => null);\n const working = new Map<string, string | null>();\n const befores = new Map<string, string | null>();\n const ops: ApplyPatchIROpResult[] = [];\n const errors: string[] = [];\n\n const read = (file: string): string | null => {\n if (working.has(file)) return working.get(file)!;\n const before = options.readFile(file);\n befores.set(file, before);\n working.set(file, before);\n return before;\n };\n const write = (file: string, content: string | null): void => {\n if (!befores.has(file)) befores.set(file, options.readFile(file));\n working.set(file, content);\n };\n\n // Assumptions against the pre-patch snapshot (not intermediate working state).\n for (const assumption of patch.assumptions) {\n const check = checkAssumption(assumption, (f) => options.readFile(f), locateSymbol);\n if (!check.ok) {\n errors.push(check.reason ?? 'assumption failed');\n ops.push({\n index: -1,\n op: 'replace-text',\n file: assumption.file ?? '',\n status: 'assumption-failed',\n reason: check.reason,\n });\n if (options.transactional) {\n return { ok: false, files: new Map(), ops, errors };\n }\n }\n }\n if (options.transactional && errors.length) {\n return { ok: false, files: new Map(), ops, errors };\n }\n\n // Preview pass for transactional mode: apply on a copy, require all applied.\n if (options.transactional) {\n const preview = applyAll(patch.operations, read, write, spansForFile, locateSymbol, ops);\n const failed = preview.some((o) => o.status !== 'applied' && o.status !== 'no-op');\n if (failed) {\n const failErrors = preview.filter((o) => o.status !== 'applied' && o.status !== 'no-op').map((o) => o.reason ?? o.status);\n return { ok: false, files: new Map(), ops: preview, errors: failErrors };\n }\n } else {\n applyAll(patch.operations, read, write, spansForFile, locateSymbol, ops);\n }\n\n const files = new Map<string, { before: string | null; after: string | null }>();\n for (const [file, after] of working) {\n files.set(file, { before: befores.get(file) ?? null, after });\n }\n\n const hardFail = ops.some((o) => o.status === 'assumption-failed' || o.status === 'unsupported' || o.status === 'invalid' || o.status === 'not-found' || o.status === 'ambiguous' || o.status === 'conflict');\n return {\n ok: !hardFail && errors.length === 0,\n files,\n ops,\n errors,\n };\n}\n\nfunction applyAll(\n operations: PatchOperation[],\n read: (f: string) => string | null,\n write: (f: string, c: string | null) => void,\n spansForFile: (file: string) => SymbolSpan[],\n locateSymbol: (id: string) => SymbolLocator | null,\n ops: ApplyPatchIROpResult[],\n): ApplyPatchIROpResult[] {\n // Clear ops if reusing (transactional preview starts empty).\n const out = ops;\n out.length = 0;\n\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n const result = applyOne(op, i, read, write, spansForFile, locateSymbol);\n out.push(result);\n }\n return out;\n}\n\nfunction applyOne(\n op: PatchOperation,\n index: number,\n read: (f: string) => string | null,\n write: (f: string, c: string | null) => void,\n spansForFile: (file: string) => SymbolSpan[],\n locateSymbol: (id: string) => SymbolLocator | null,\n): ApplyPatchIROpResult {\n if (op.op === 'replace-text' || op.op === 'create-file' || op.op === 'delete-file') {\n const edits = patchIRToCodeEdits({\n schemaVersion: 'patch-ir/0',\n operations: [op],\n assumptions: [],\n requestedVerification: [],\n provenance: { format: 'code-edit' },\n });\n const edit = edits[0] as CodeEdit;\n const file = edit.file;\n const before = read(file);\n const { content, outcome } = applyEdit(before, edit, spansForFile(file));\n if (outcome.status === 'applied' || outcome.status === 'no-op') {\n write(file, content);\n }\n return { index, op: op.op, file, status: outcome.status, reason: outcome.reason };\n }\n\n if (op.op === 'replace-range') {\n const file = op.file;\n const before = read(file);\n if (before === null) {\n return { index, op: op.op, file, status: 'not-found', reason: `${file} does not exist` };\n }\n if (op.expectedHash) {\n const h = hashString(before);\n if (h !== op.expectedHash) {\n return { index, op: op.op, file, status: 'conflict', reason: `file hash mismatch for ${file} (stale capsule or concurrent edit)` };\n }\n }\n const lines = before.split('\\n');\n if (op.start < 1 || op.end > lines.length || op.end < op.start) {\n return { index, op: op.op, file, status: 'invalid', reason: `replace-range ${op.start}-${op.end} outside file (${lines.length} lines)` };\n }\n const next = [...lines.slice(0, op.start - 1), ...op.replacement.split('\\n'), ...lines.slice(op.end)].join('\\n');\n write(file, next);\n return { index, op: op.op, file, status: next === before ? 'no-op' : 'applied' };\n }\n\n if (op.op === 'replace-symbol') {\n const loc = locateSymbol(op.symbolId);\n if (!loc) {\n return { index, op: op.op, file: op.file ?? '', status: 'not-found', reason: `symbol ${op.symbolId} not in the map` };\n }\n const file = op.file?.trim() ? op.file : loc.file;\n if (normalize(file) !== normalize(loc.file)) {\n return { index, op: op.op, file, status: 'conflict', reason: `symbol ${op.symbolId} lives in ${loc.file}, not ${file}` };\n }\n const rangeOp: PatchOperation = {\n op: 'replace-range',\n file: loc.file,\n start: loc.start,\n end: loc.end,\n replacement: op.replacement,\n expectedHash: op.expectedHash,\n anchorSymbol: op.symbolId,\n };\n return applyOne(rangeOp, index, read, write, spansForFile, locateSymbol);\n }\n\n return { index, op: (op as PatchOperation).op, file: '', status: 'unsupported', reason: 'unknown operation' };\n}\n\nfunction checkAssumption(\n a: PatchAssumption,\n readFile: (f: string) => string | null,\n locateSymbol: (id: string) => SymbolLocator | null,\n): { ok: boolean; reason?: string } {\n switch (a.kind) {\n case 'file-hash': {\n if (!a.file || !a.expectedHash) return { ok: false, reason: 'file-hash assumption needs file and expectedHash' };\n const content = readFile(a.file);\n if (content === null) return { ok: false, reason: `assumption file-hash: ${a.file} missing` };\n if (hashString(content) !== a.expectedHash) return { ok: false, reason: `assumption file-hash failed for ${a.file}` };\n return { ok: true };\n }\n case 'text-present': {\n if (!a.file || !a.detail) return { ok: false, reason: 'text-present assumption needs file and detail' };\n const content = readFile(a.file);\n if (content === null || !content.includes(a.detail)) {\n return { ok: false, reason: `assumption text-present failed for ${a.file}` };\n }\n return { ok: true };\n }\n case 'symbol-exists': {\n if (!a.symbolId) return { ok: false, reason: 'symbol-exists assumption needs symbolId' };\n if (!locateSymbol(a.symbolId)) return { ok: false, reason: `assumption symbol-exists failed: ${a.symbolId}` };\n return { ok: true };\n }\n case 'symbol-span': {\n if (!a.symbolId) return { ok: false, reason: 'symbol-span assumption needs symbolId' };\n const loc = locateSymbol(a.symbolId);\n if (!loc) return { ok: false, reason: `assumption symbol-span: ${a.symbolId} missing` };\n if (a.file && normalize(a.file) !== normalize(loc.file)) {\n return { ok: false, reason: `assumption symbol-span file mismatch for ${a.symbolId}` };\n }\n return { ok: true };\n }\n case 'other':\n return { ok: true };\n default:\n return { ok: false, reason: `unknown assumption kind: ${String((a as PatchAssumption).kind)}` };\n }\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n\n/** Build a symbol locator map from graph nodes (id → span). */\nexport function locatorsFromGraph(nodes: Array<{ id: string; file: string; span: { start: number; end: number } }>): (symbolId: string) => SymbolLocator | null {\n const map = new Map<string, SymbolLocator>();\n for (const n of nodes) {\n map.set(n.id, { id: n.id, file: normalize(n.file), start: n.span.start, end: n.span.end });\n }\n return (id) => map.get(id) ?? null;\n}\n","/**\n * Before/after content carried on a mutating action so a host can review a\n * change in a real diff editor (VG-CLI-CODE §18.3).\n *\n * The unified diff on the action is enough to *summarize* a change, but not to\n * open it in an editor's diff view — that needs both whole sides. This is the\n * only reason the sides are carried, so they are bounded: a host that cannot be\n * given the sides falls back to the inline diff it already renders, rather than\n * a multi-megabyte frame stalling the panel.\n *\n * Content is not redacted, deliberately. These sides go to the human reviewing\n * their own files in their own editor — the same trust boundary as the diff\n * already on the action — and redacting would corrupt the very text they are\n * being asked to approve. Nothing here is sent to a model.\n */\n\n/** Per-side cap. Beyond this a host is expected to fall back to the diff. */\nexport const MAX_PREVIEW_CHARS = 256_000;\n\nexport interface PreviewSides {\n /** File content before the change; empty string for a create. */\n before: string;\n /** File content after the change; empty string for a delete. */\n after: string;\n}\n\n/**\n * Bound the sides for transport. Returns undefined when either side is too\n * large, so the caller omits the field entirely rather than sending a truncated\n * side — a half-file diff would misrepresent the change being approved.\n */\nexport function previewSides(\n before: string | null | undefined,\n after: string | null | undefined,\n): PreviewSides | undefined {\n const b = before ?? '';\n const a = after ?? '';\n if (b.length > MAX_PREVIEW_CHARS || a.length > MAX_PREVIEW_CHARS) return undefined;\n return { before: b, after: a };\n}\n","/**\n * Command safety for autonomous agent runs (VG-CLI-CODE §13).\n *\n * Interactively, `run_command` is gated by a human who sees the exact command\n * and says yes. Under `--auto` there is no human in the loop, so a small\n * denylist blocks the handful of commands that are catastrophic or exfiltrating\n * — a filesystem wipe, piping the internet into a shell, a force-push, a fork\n * bomb. This is defense-in-depth for autonomous mode, not a substitute for\n * review: it fails safe (an unrecognised command is still gated/approved), and a\n * project can extend the denylist in `.vibgrate/code.json`.\n *\n * Pure and unit-tested.\n */\n\nconst DANGEROUS: { pattern: RegExp; reason: string }[] = [\n { pattern: /\\brm\\s+(-[a-z]*f[a-z]*\\s+)?(-[a-z]*r[a-z]*\\s+)?(-[a-z]*\\s+)*(\\/|~|\\$HOME|\\.)(\\s|$)/i, reason: 'recursive/forced delete of a root or home path' },\n { pattern: /\\brm\\s+-[a-z]*r[a-z]*f|\\brm\\s+-[a-z]*f[a-z]*r/i, reason: 'recursive force delete' },\n { pattern: /\\bmkfs\\b|\\bmke2fs\\b/i, reason: 'formats a filesystem' },\n { pattern: /\\bdd\\b[^|]*\\bof=\\/dev\\//i, reason: 'writes raw to a device' },\n { pattern: />\\s*\\/dev\\/(sd|nvme|hd|disk)/i, reason: 'writes raw to a disk device' },\n { pattern: /:\\s*\\(\\s*\\)\\s*\\{[^}]*\\}\\s*;\\s*:/, reason: 'fork bomb' },\n { pattern: /\\b(curl|wget|fetch)\\b[^\\n|]*\\|\\s*(sudo\\s+)?(sh|bash|zsh|python|node|ruby|perl)\\b/i, reason: 'pipes a download straight into a shell/interpreter' },\n { pattern: /\\bgit\\s+push\\b[^\\n]*(--force\\b|-f\\b)/i, reason: 'force-push (rewrites remote history)' },\n { pattern: /\\bgit\\s+(reset\\s+--hard|clean\\s+-[a-z]*f)/i, reason: 'destroys uncommitted work' },\n { pattern: /\\b(shutdown|reboot|halt|poweroff)\\b/i, reason: 'powers off / reboots the machine' },\n { pattern: /\\bchmod\\s+-R\\s+0*777\\s+(\\/|~)/i, reason: 'world-writable on a root/home path' },\n { pattern: /\\bsudo\\b/i, reason: 'runs as root (never automatic)' },\n { pattern: /\\beval\\b\\s+[\"'`]?\\$\\(/i, reason: 'evaluates dynamically-constructed shell' },\n];\n\n/**\n * Return a reason string when `command` is too dangerous to run autonomously, or\n * null when it is allowed. `extraDeny` are project-configured substrings/regex\n * sources to also block. Matching is deliberately conservative — only clearly\n * destructive shapes trip it, so ordinary build/test commands run freely.\n */\nexport function dangerousCommand(command: string, extraDeny: string[] = []): string | null {\n const cmd = command.trim();\n for (const { pattern, reason } of DANGEROUS) {\n if (pattern.test(cmd)) return reason;\n }\n for (const raw of extraDeny) {\n if (!raw) continue;\n try {\n if (new RegExp(raw, 'i').test(cmd)) return `matches a project denylist rule (${raw})`;\n } catch {\n // Not a valid regex → treat as a literal substring.\n if (cmd.toLowerCase().includes(raw.toLowerCase())) return `matches a project denylist rule (${raw})`;\n }\n }\n return null;\n}\n","/**\n * Agent network policy (Fusion Runtime Phase 7).\n *\n * schemaVersion: network-policy/0\n *\n * Outbound network for **agent shell commands** is default-deny. Hosted model\n * calls and library-catalog fetches are separate channels (providers /\n * catalog) and are not gated here — only `run_command` strings the model\n * proposes. Allowlisted host suffixes document what engine-level HTTP may\n * touch when a future wire-up routes agent fetches through this policy.\n *\n * Pure and unit-tested — no I/O.\n */\n\nexport const NETWORK_POLICY_SCHEMA_VERSION = 'network-policy/0' as const;\n\n/**\n * Pinned network policy id for this release train. Bump with maintainer\n * sign-off when allowlists change materially.\n */\nexport const NETWORK_POLICY_VERSION = 'network-policy@2026.07.0' as const;\n\nexport interface NetworkPolicy {\n schemaVersion: typeof NETWORK_POLICY_SCHEMA_VERSION;\n policyVersion: string;\n /** Always true for v0 — agent shell is closed unless a detector says local. */\n denyOutboundByDefault: true;\n /**\n * Host suffixes the engine may contact for docs / model catalog / pulls\n * (not a free pass for arbitrary `curl` from `run_command`).\n */\n allowHostSuffixes: string[];\n}\n\n/** Default policy: deny agent shell egress; engine HTTP allowlist only. */\nexport const DEFAULT_NETWORK_POLICY: NetworkPolicy = {\n schemaVersion: NETWORK_POLICY_SCHEMA_VERSION,\n policyVersion: NETWORK_POLICY_VERSION,\n denyOutboundByDefault: true,\n allowHostSuffixes: [\n 'openrouter.ai',\n 'api.openrouter.ai',\n 'registry.npmjs.org',\n 'npmjs.org',\n 'ollama.com',\n 'huggingface.co',\n 'github.com',\n 'raw.githubusercontent.com',\n 'vibgrate.com',\n 'api.vibgrate.com',\n ],\n};\n\n/**\n * True when a shell command looks like it opens the network (download, reverse\n * shell, SSH tunnel, raw socket tools, …). Conservative: ordinary package\n * managers without explicit remote flags are **not** flagged (they may use\n * cache offline).\n */\nexport function commandSuggestsNetwork(command: string): boolean {\n const cmd = command.trim();\n if (!cmd) return false;\n // Explicit network clients / tunnels.\n if (\n /\\b(curl|wget|fetch|httpie|aria2c|nc|ncat|netcat|socat|telnet|ftp|sftp|scp|rsync|ssh|nmap|masscan)\\b/i.test(\n cmd,\n )\n ) {\n return true;\n }\n // Node/Python one-liners that open sockets.\n if (/\\b(node|nodejs)\\b[^\\n]*\\b(fetch|https?\\.get|http\\.request|net\\.connect)\\b/i.test(cmd)) return true;\n if (/\\bpython[23]?\\b[^\\n]*\\b(urllib|requests|http\\.client|socket)\\b/i.test(cmd)) return true;\n // URL in command line (http/https).\n if (/https?:\\/\\//i.test(cmd)) return true;\n // Package managers with explicit online install of remote packages.\n if (/\\b(npm|pnpm|yarn|bun)\\s+(install|add|update)\\b/i.test(cmd) && !/\\s--offline\\b/i.test(cmd)) {\n // Local path installs (npm install ./pkg) are not network.\n if (!/\\s(\\.\\/|\\/|\\.\\.\\/)/.test(cmd) && !/\\sfile:/i.test(cmd)) return true;\n }\n if (/\\bpip[23]?\\s+install\\b/i.test(cmd) && !/\\s--no-index\\b/i.test(cmd) && !/\\s\\.\\/|\\/|\\.\\.\\//.test(cmd)) {\n return true;\n }\n return false;\n}\n\n/** True when `host` matches an allowlisted suffix (exact or dotted suffix). */\nexport function hostAllowed(host: string, policy: NetworkPolicy = DEFAULT_NETWORK_POLICY): boolean {\n const h = host.trim().toLowerCase().replace(/\\.$/, '');\n if (!h) return false;\n for (const suffix of policy.allowHostSuffixes) {\n const s = suffix.toLowerCase();\n if (h === s || h.endsWith(`.${s}`)) return true;\n }\n return false;\n}\n\n/**\n * Decide whether `run_command` may proceed under the network policy.\n * Returns null when allowed, or an actionable refusal reason.\n *\n * When `enforce` is false (interactive L0 with a human reviewing each\n * command), network-looking commands are still allowed — the human is the gate.\n * When `enforce` is true (`--auto`, or L1+ intent without a real sandbox),\n * network-looking shell is refused.\n */\nexport function networkCommandRefusal(\n command: string,\n options: { enforce: boolean; policy?: NetworkPolicy } = { enforce: true },\n): string | null {\n if (!options.enforce) return null;\n if (!commandSuggestsNetwork(command)) return null;\n const ver = options.policy?.policyVersion ?? NETWORK_POLICY_VERSION;\n return (\n `network policy ${ver} denies outbound network from agent shell commands ` +\n `(default-deny). Run the command yourself outside the agent, or re-run ` +\n `interactively without --auto if a human should approve it.`\n );\n}\n","/**\n * Failure Capsule (Fusion Runtime Phase 5 / plan §3).\n *\n * After a verification step fails, the agent should receive a focused repair\n * context — not a raw multi-thousand-line log. This module builds a\n * deterministic Failure Capsule: failed step, first causal diagnostic, affected\n * symbols/files, optional source slices, and ranked correction hints.\n *\n * Schema: docs/fusion/failure-capsule-v0.schema.json\n */\n\nimport { hashString } from '../engine/hash.js';\nimport type { TaskCapsule } from './capsule.js';\nimport type { LadderStepResult } from './verify-ladder.js';\n\nexport const FAILURE_CAPSULE_SCHEMA_VERSION = 'failure-capsule/0' as const;\nexport const FAILURE_CAPSULE_COMPILER_ID = 'vg-failure-capsule/0' as const;\n\nexport interface FailureStep {\n type: 'command' | 'syntax' | 'verify' | 'ladder' | 'other';\n command?: string;\n exitCode?: number;\n detail?: string;\n}\n\nexport interface FailureSymbolRef {\n qualifiedName: string;\n file: string;\n reason?: string;\n}\n\nexport interface FailureSourceSlice {\n file: string;\n startLine: number;\n endLine: number;\n content: string;\n contentHash: string;\n}\n\nexport interface FailureCapsule {\n schemaVersion: typeof FAILURE_CAPSULE_SCHEMA_VERSION;\n failedStep: FailureStep;\n /** Truncated, secret-free diagnostic — prefer first causal line over full log. */\n diagnosticExcerpt: string;\n affectedSymbols: FailureSymbolRef[];\n sourceSlices: FailureSourceSlice[];\n previousOpsSummary: string[];\n graphDeltaNote?: string;\n likelyCorrections: string[];\n rendered: string;\n provenance: {\n compiler: string;\n modelId: string | null;\n policyVersion: string | null;\n };\n}\n\nexport interface BuildFailureCapsuleOptions {\n /** Ladder results that failed (first non-ok non-note preferred). */\n ladderSteps?: LadderStepResult[];\n /** Explicit verify command failure. */\n verify?: { command: string; exitCode: number; stdout: string };\n /** Original task capsule for symbol/source context. */\n capsule?: TaskCapsule | null;\n /** Files the agent already changed this run. */\n changedFiles?: string[];\n /** Optional short summaries of prior patch ops. */\n previousOpsSummary?: string[];\n graphDeltaNote?: string;\n modelId?: string | null;\n policyVersion?: string | null;\n /** Max diagnostic chars (default 2500). */\n maxDiagnostic?: number;\n /** Max source slices (default 6). */\n maxSlices?: number;\n}\n\n/**\n * Build a Failure Capsule from a ladder failure and/or verify command failure.\n * Pure and deterministic given the same inputs.\n */\nexport function buildFailureCapsule(options: BuildFailureCapsuleOptions): FailureCapsule {\n const maxDiag = options.maxDiagnostic ?? 2500;\n const maxSlices = options.maxSlices ?? 6;\n\n const failed = pickFailedStep(options);\n const diagnosticExcerpt = redactAndTrim(failed.rawDiagnostic, maxDiag);\n const affectedSymbols = collectAffected(options.capsule, options.changedFiles ?? [], diagnosticExcerpt);\n const sourceSlices = pickSourceSlices(options.capsule, affectedSymbols, maxSlices);\n const likelyCorrections = rankCorrections(failed, diagnosticExcerpt, options.changedFiles ?? []);\n const previousOpsSummary = options.previousOpsSummary ?? (options.changedFiles ?? []).map((f) => `touched ${f}`);\n\n const capsule: FailureCapsule = {\n schemaVersion: FAILURE_CAPSULE_SCHEMA_VERSION,\n failedStep: failed.step,\n diagnosticExcerpt,\n affectedSymbols,\n sourceSlices,\n previousOpsSummary,\n graphDeltaNote: options.graphDeltaNote,\n likelyCorrections,\n rendered: '',\n provenance: {\n compiler: FAILURE_CAPSULE_COMPILER_ID,\n modelId: options.modelId ?? null,\n policyVersion: options.policyVersion ?? null,\n },\n };\n capsule.rendered = renderFailureCapsule(capsule);\n return capsule;\n}\n\n/** Project a Failure Capsule into a user/model message. */\nexport function renderFailureCapsule(fc: FailureCapsule): string {\n const lines: string[] = [\n '## Failure Capsule',\n `Failed step: ${fc.failedStep.type}${fc.failedStep.command ? ` \\`${fc.failedStep.command}\\`` : ''}${fc.failedStep.exitCode != null ? ` (exit ${fc.failedStep.exitCode})` : ''}`,\n '',\n '### Diagnostic',\n fc.diagnosticExcerpt || '(no output)',\n ];\n if (fc.affectedSymbols.length) {\n lines.push('', '### Affected symbols / files');\n for (const s of fc.affectedSymbols.slice(0, 12)) {\n lines.push(`- ${s.qualifiedName} (${s.file})${s.reason ? ` — ${s.reason}` : ''}`);\n }\n }\n if (fc.sourceSlices.length) {\n lines.push('', '### Relevant source');\n for (const sl of fc.sourceSlices) {\n lines.push(`\\`\\`\\`${sl.file}:${sl.startLine}-${sl.endLine}`, sl.content, '```');\n }\n }\n if (fc.previousOpsSummary.length) {\n lines.push('', '### Prior ops', ...fc.previousOpsSummary.map((o) => `- ${o}`));\n }\n if (fc.likelyCorrections.length) {\n lines.push('', '### Likely corrections', ...fc.likelyCorrections.map((c) => `- ${c}`));\n }\n if (fc.graphDeltaNote) {\n lines.push('', `Graph: ${fc.graphDeltaNote}`);\n }\n return lines.join('\\n');\n}\n\n// ── internals ──────────────────────────────────────────────────────────────\n\nfunction pickFailedStep(options: BuildFailureCapsuleOptions): { step: FailureStep; rawDiagnostic: string } {\n if (options.verify && options.verify.exitCode !== 0) {\n return {\n step: {\n type: 'verify',\n command: options.verify.command,\n exitCode: options.verify.exitCode,\n },\n rawDiagnostic: options.verify.stdout || `exit ${options.verify.exitCode}`,\n };\n }\n const fail = (options.ladderSteps ?? []).find((s) => !s.ok && s.step.kind !== 'note');\n if (fail) {\n if (fail.step.kind === 'command') {\n return {\n step: { type: 'command', command: fail.step.command, detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n if (fail.step.kind === 'syntax') {\n return {\n step: { type: 'syntax', detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n return {\n step: { type: 'ladder', detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n return {\n step: { type: 'other', detail: 'verification failed' },\n rawDiagnostic: 'verification failed (no diagnostic detail)',\n };\n}\n\nfunction collectAffected(\n capsule: TaskCapsule | null | undefined,\n changedFiles: string[],\n diagnostic: string,\n): FailureSymbolRef[] {\n const out: FailureSymbolRef[] = [];\n const seen = new Set<string>();\n const push = (qualifiedName: string, file: string, reason?: string): void => {\n const key = `${qualifiedName}|${file}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push({ qualifiedName, file, reason });\n };\n\n for (const f of changedFiles) {\n push(f, f, 'modified this session');\n }\n\n if (capsule) {\n for (const p of capsule.primary) {\n if (changedFiles.includes(p.file) || diagnosticIncludes(diagnostic, p.file) || diagnosticIncludes(diagnostic, p.qualifiedName)) {\n push(p.qualifiedName, p.file, 'primary seed');\n }\n }\n for (const p of capsule.supporting) {\n if (changedFiles.includes(p.file) || diagnosticIncludes(diagnostic, p.file)) {\n push(p.qualifiedName, p.file, 'supporting seed');\n }\n }\n // If nothing matched, still surface primaries as repair candidates.\n if (!out.length) {\n for (const p of capsule.primary.slice(0, 6)) push(p.qualifiedName, p.file, 'primary seed');\n }\n }\n return out;\n}\n\nfunction pickSourceSlices(\n capsule: TaskCapsule | null | undefined,\n affected: FailureSymbolRef[],\n maxSlices: number,\n): FailureSourceSlice[] {\n if (!capsule?.sourceSlices?.length) return [];\n const files = new Set(affected.map((a) => a.file));\n const preferred = capsule.sourceSlices.filter((s) => files.has(s.file));\n const rest = capsule.sourceSlices.filter((s) => !files.has(s.file));\n const picked = [...preferred, ...rest].slice(0, maxSlices);\n return picked.map((s) => ({\n file: s.file,\n startLine: s.start,\n endLine: s.end,\n content: s.content,\n contentHash: s.contentHash || hashString(s.content),\n }));\n}\n\nfunction rankCorrections(failed: { step: FailureStep; rawDiagnostic: string }, diagnostic: string, changedFiles: string[]): string[] {\n const hints: string[] = [];\n const d = diagnostic.toLowerCase();\n if (failed.step.type === 'syntax') {\n hints.push('Restore missing files or write non-empty content before re-verifying.');\n }\n if (/cannot find module|module not found|enoent/i.test(diagnostic)) {\n hints.push('Check import paths and that new files were created where imports expect them.');\n }\n if (/typeerror|typescript|ts\\d{4}/i.test(diagnostic)) {\n hints.push('Fix the reported type error in the touched files; re-run the typecheck command.');\n }\n if (/assert|expect|fail(ed)?/i.test(d) && /test/.test(d)) {\n hints.push('Align the implementation with the failing assertion; avoid changing the test unless the task requires it.');\n }\n if (/syntaxerror|unexpected token|parse error/i.test(diagnostic)) {\n hints.push('Repair syntax around the last edit; re-read the file span before patching again.');\n }\n if (changedFiles.length) {\n hints.push(`Re-read and patch: ${changedFiles.slice(0, 5).join(', ')}.`);\n }\n if (!hints.length) {\n hints.push('Inspect the diagnostic excerpt, re-read the affected files, apply a minimal fix, then verify again.');\n }\n return hints.slice(0, 6);\n}\n\nfunction diagnosticIncludes(diagnostic: string, needle: string): boolean {\n if (!needle) return false;\n return diagnostic.toLowerCase().includes(needle.toLowerCase());\n}\n\nfunction redactAndTrim(raw: string, max: number): string {\n // Lightweight secret redaction for common token shapes (defense-in-depth;\n // providers.ts also redacts model-facing transport errors).\n let s = raw\n .replace(/(api[_-]?key|token|secret|password)\\s*[:=]\\s*\\S+/gi, '$1=[REDACTED]')\n .replace(/\\b(sk|ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{8,}\\b/g, '[REDACTED]')\n .replace(/\\bBearer\\s+[A-Za-z0-9._\\-]+\\b/gi, 'Bearer [REDACTED]');\n // Prefer the first error-looking lines when the log is huge.\n if (s.length > max) {\n const lines = s.split('\\n');\n const errorish = lines.filter((l) => /error|fail|assert|exception|enoent|cannot/i.test(l));\n const head = (errorish.length ? errorish : lines).slice(0, 40).join('\\n');\n s = head.length > max ? head.slice(0, max) + '\\n… (truncated)' : head + (lines.length > 40 ? '\\n… (truncated)' : '');\n }\n return s.trim();\n}\n","/**\n * Graph-derived verification ladder (Fusion Runtime Phase 5).\n *\n * Compiles a deterministic ordered checklist from a Task Capsule verification\n * plan (and optional project test command), then runs the steps that can be\n * checked without a model. Shell steps use an injected runner — never spawn\n * implicitly.\n */\n\nimport type { VerificationPlan } from './capsule.js';\nimport type { VerificationTarget } from './patch-ir.js';\n\nexport type LadderStep =\n | { kind: 'syntax'; files: string[]; detail: string }\n | { kind: 'command'; command: string; detail: string }\n | { kind: 'note'; detail: string };\n\nexport interface LadderStepResult {\n step: LadderStep;\n ok: boolean;\n /** Actionable detail for the model / user (no secrets). */\n message: string;\n}\n\nexport interface LadderResult {\n ok: boolean;\n steps: LadderStepResult[];\n /** True if any command step was run. */\n ranCommands: boolean;\n}\n\nexport interface CompileLadderOptions {\n /** Project test / verify command (e.g. from code.json). */\n testCommand?: string;\n /** Extra targets from PatchIR.requestedVerification. */\n patchTargets?: VerificationTarget[];\n /** Cap how many syntax files to check (default 20). */\n maxSyntaxFiles?: number;\n}\n\n/**\n * Compile an ordered verification ladder. Deterministic given the same plan + options.\n *\n * Order: notes → syntax (touched files exist & non-empty) → patch commands →\n * project testCommand → suggested test symbols as notes (hints only).\n */\nexport function compileVerificationLadder(plan: VerificationPlan, options: CompileLadderOptions = {}): LadderStep[] {\n const steps: LadderStep[] = [];\n const maxSyntax = options.maxSyntaxFiles ?? 20;\n\n for (const note of plan.notes) {\n steps.push({ kind: 'note', detail: note });\n }\n\n const syntaxFiles = [...new Set(plan.syntaxFiles.map(normalize))].filter(Boolean).sort().slice(0, maxSyntax);\n if (syntaxFiles.length) {\n steps.push({\n kind: 'syntax',\n files: syntaxFiles,\n detail: `check ${syntaxFiles.length} target file(s) exist after edit`,\n });\n }\n\n const commands = new Set<string>();\n for (const t of options.patchTargets ?? []) {\n if (t.kind === 'command' || t.kind === 'test' || t.kind === 'build' || t.kind === 'typecheck') {\n if (t.target.trim()) commands.add(t.target.trim());\n }\n }\n if (options.testCommand?.trim()) commands.add(options.testCommand.trim());\n\n for (const command of [...commands].sort()) {\n steps.push({ kind: 'command', command, detail: `run \\`${command}\\`` });\n }\n\n if (plan.suggestedTests.length) {\n steps.push({\n kind: 'note',\n detail: `graph-linked tests to prefer: ${plan.suggestedTests.slice(0, 8).join(', ')}`,\n });\n }\n\n return steps;\n}\n\nexport interface RunLadderOptions {\n readFile: (relativePath: string) => string | null;\n run?: (command: string) => { stdout: string; exitCode: number };\n /** When false, command steps are skipped (reported as ok notes). Default true. */\n runCommands?: boolean;\n}\n\n/** Execute a compiled ladder. Stops early on the first failing non-note step when `failFast` is true (default). */\nexport function runVerificationLadder(\n steps: LadderStep[],\n options: RunLadderOptions,\n failFast = true,\n): LadderResult {\n const results: LadderStepResult[] = [];\n let ranCommands = false;\n let ok = true;\n\n for (const step of steps) {\n const result = runStep(step, options);\n if (result.step.kind === 'command' && options.runCommands !== false) ranCommands = true;\n results.push(result);\n if (!result.ok) {\n ok = false;\n if (failFast && step.kind !== 'note') break;\n }\n }\n\n return { ok, steps: results, ranCommands };\n}\n\nfunction runStep(step: LadderStep, options: RunLadderOptions): LadderStepResult {\n if (step.kind === 'note') {\n return { step, ok: true, message: step.detail };\n }\n\n if (step.kind === 'syntax') {\n const missing: string[] = [];\n const empty: string[] = [];\n for (const file of step.files) {\n const content = options.readFile(file);\n if (content === null) missing.push(file);\n else if (content.length === 0) empty.push(file);\n }\n if (missing.length || empty.length) {\n const parts: string[] = [];\n if (missing.length) parts.push(`missing: ${missing.join(', ')}`);\n if (empty.length) parts.push(`empty: ${empty.join(', ')}`);\n return { step, ok: false, message: `syntax check failed — ${parts.join('; ')}` };\n }\n return { step, ok: true, message: `syntax ok — ${step.files.length} file(s) present` };\n }\n\n // command\n if (options.runCommands === false || !options.run) {\n return { step, ok: true, message: `skipped command (not configured): ${step.command}` };\n }\n const res = options.run(step.command);\n if (res.exitCode === 0) {\n return { step, ok: true, message: `\\`${step.command}\\` exit 0` };\n }\n const tail = (res.stdout ?? '').slice(0, 2000);\n return {\n step,\n ok: false,\n message: `\\`${step.command}\\` exit ${res.exitCode}${tail ? `:\\n${tail}` : ''}`,\n };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * inspect_change — blast radius of a proposed edit (Fusion Phase 4).\n *\n * Pure over a graph + optional dirty files / symbols. Does not write the\n * filesystem. Used by the agent tool and unit tests.\n */\n\nimport { impactOf } from '../engine/impact.js';\nimport { resolveOne } from '../engine/lookup.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface InspectChangeInput {\n /** Explicit symbol ids / qualified names. */\n symbols?: string[];\n /** Files touched by the proposed change (relative paths). */\n files?: string[];\n /** Max impact depth (default 3). */\n depth?: number;\n /** Cap how many root symbols to expand (default 12). */\n maxRoots?: number;\n /** Cap affected rows in the report (default 40). */\n maxAffected?: number;\n}\n\nexport interface InspectChangeRoot {\n id: string;\n qualifiedName: string;\n kind: string;\n file: string;\n line: number;\n}\n\nexport interface InspectChangeAffected {\n id: string;\n name: string;\n kind: string;\n file: string;\n line: number;\n depth: number;\n confidence: number;\n viaRoot: string;\n}\n\nexport interface InspectChangeReport {\n roots: InspectChangeRoot[];\n affected: InspectChangeAffected[];\n direct: number;\n transitive: number;\n filesTouched: string[];\n rendered: string;\n}\n\n/**\n * Compute impact of changing the given symbols and/or any symbols defined in\n * the given files. Deterministic for a fixed graph + input.\n */\nexport function inspectChange(graph: VgGraph, input: InspectChangeInput = {}): InspectChangeReport {\n const depth = input.depth ?? 3;\n const maxRoots = input.maxRoots ?? 12;\n const maxAffected = input.maxAffected ?? 40;\n const filesTouched = [...new Set((input.files ?? []).map(normalize).filter(Boolean))].sort();\n const symbolHints = [...new Set((input.symbols ?? []).map((s) => s.trim()).filter(Boolean))];\n\n const roots = collectRoots(graph, symbolHints, filesTouched).slice(0, maxRoots);\n const affectedMap = new Map<string, InspectChangeAffected>();\n let direct = 0;\n let transitive = 0;\n\n for (const root of roots) {\n const imp = impactOf(graph, root.id, { depth });\n direct += imp.direct;\n transitive += imp.transitive;\n for (const a of imp.affected) {\n const prev = affectedMap.get(a.id);\n if (!prev || a.depth < prev.depth || (a.depth === prev.depth && a.confidence > prev.confidence)) {\n affectedMap.set(a.id, {\n id: a.id,\n name: a.name,\n kind: a.kind,\n file: a.file,\n line: a.line,\n depth: a.depth,\n confidence: a.confidence,\n viaRoot: root.qualifiedName,\n });\n }\n }\n }\n\n const affected = [...affectedMap.values()]\n .sort((a, b) => a.depth - b.depth || b.confidence - a.confidence || a.name.localeCompare(b.name))\n .slice(0, maxAffected);\n\n const report: InspectChangeReport = {\n roots,\n affected,\n direct,\n transitive,\n filesTouched,\n rendered: '',\n };\n report.rendered = renderInspectChange(report);\n return report;\n}\n\nfunction collectRoots(graph: VgGraph, symbols: string[], files: string[]): InspectChangeRoot[] {\n const out: InspectChangeRoot[] = [];\n const seen = new Set<string>();\n const push = (id: string): void => {\n if (seen.has(id)) return;\n const node = graph.nodes.find((n) => n.id === id);\n if (!node || node.kind === 'file' || node.kind === 'external') return;\n seen.add(id);\n out.push({\n id: node.id,\n qualifiedName: node.qualifiedName,\n kind: node.kind,\n file: node.file,\n line: node.span?.start ?? 0,\n });\n };\n\n for (const s of symbols) {\n if (graph.nodes.some((n) => n.id === s)) {\n push(s);\n continue;\n }\n const hit = resolveOne(graph, s);\n if (hit.node) push(hit.node.id);\n else if (hit.candidates.length === 1 && hit.candidates[0]) push(hit.candidates[0].id);\n }\n\n for (const file of files) {\n for (const n of graph.nodes) {\n if (n.kind === 'file' || n.kind === 'external') continue;\n if (normalize(n.file) === file) push(n.id);\n }\n }\n\n return out.sort((a, b) => a.file.localeCompare(b.file) || a.qualifiedName.localeCompare(b.qualifiedName));\n}\n\nfunction renderInspectChange(r: InspectChangeReport): string {\n const lines: string[] = ['## Inspect change (blast radius)'];\n if (r.filesTouched.length) lines.push(`Files: ${r.filesTouched.join(', ')}`);\n if (!r.roots.length) {\n lines.push('No graph symbols resolved for this change — impact unknown.');\n return lines.join('\\n');\n }\n lines.push(`Roots (${r.roots.length}):`);\n for (const root of r.roots) {\n lines.push(`- ${root.qualifiedName} (${root.kind}) ${root.file}:${root.line}`);\n }\n lines.push(`Affected: ${r.affected.length} (direct≈${r.direct}, transitive≈${r.transitive})`);\n if (!r.affected.length) {\n lines.push('Nothing depends on these symbols (safe to change in isolation).');\n } else {\n for (const a of r.affected.slice(0, 30)) {\n lines.push(`- ${a.name} (${a.file}:${a.line}) d=${a.depth} via ${a.viaRoot}`);\n }\n if (r.affected.length > 30) lines.push(`… +${r.affected.length - 30} more`);\n }\n return lines.join('\\n');\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Identifier enforcement before apply (Approach B / B3).\n *\n * Annotation after generation is not enough: patches that invent symbols must\n * not write. This module scans PatchIR and free-text edits against the graph\n * trie and blocks apply when unknown identifiers appear in replacement bodies.\n *\n * Allowances (so ordinary local edits are not blocked):\n * - Identifiers already present in the target file (or the search string)\n * - Tokens that only appear inside comments / string literals (code-only scan)\n */\n\nimport { extractIdentifiers, scanIdentifiersAgainstTrie } from '../runtime/identifier-mask.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport type { PatchIR, PatchOperation } from './patch-ir.js';\n\nexport interface IdentifierEnforceResult {\n ok: boolean;\n /** Unknown identifiers that blocked the change. */\n unknown: string[];\n /** Human message for the model / tool result. */\n reason?: string;\n}\n\nexport interface EnforceIdentifiersOptions {\n /**\n * Identifiers already in the edited file / search string — reusing them is\n * not \"inventing\" a symbol (covers locals, params, existing helpers).\n */\n allow?: Iterable<string>;\n /**\n * When true (default), strip comments and string/template literals before\n * scanning so doc comments do not trip invent-checks.\n */\n codeOnly?: boolean;\n}\n\n/**\n * Approximate strip of comments and string-like spans so invent-checks focus\n * on executable code. Conservative: better to under-scan than block prose.\n */\nexport function stripNonCodeSpans(text: string): string {\n return text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n .replace(/\\/\\/[^\\n]*/g, ' ')\n .replace(/(^|[^:])#[^\\n]*/gm, '$1 ')\n .replace(/'(?:\\\\.|[^'\\\\])*'/g, ' ')\n .replace(/\"(?:\\\\.|[^\"\\\\])*\"/g, ' ')\n .replace(/`(?:\\\\.|[^`\\\\])*`/g, ' ');\n}\n\n/**\n * Scan free-text for identifiers not present in the trie.\n * Empty trie / no text → ok.\n */\nexport function enforceIdentifiersInText(\n text: string | null | undefined,\n trie: TrieNode | null | undefined,\n options: EnforceIdentifiersOptions = {},\n): IdentifierEnforceResult {\n if (!trie || text == null || text === '') return { ok: true, unknown: [] };\n const codeOnly = options.codeOnly !== false;\n const scanned = codeOnly ? stripNonCodeSpans(text) : text;\n const scan = scanIdentifiersAgainstTrie(scanned, trie);\n const allow = new Set(options.allow ?? []);\n const unknown = scan.unknown.filter((id) => !allow.has(id));\n if (unknown.length === 0) return { ok: true, unknown: [] };\n return {\n ok: false,\n unknown,\n reason:\n `blocked: ${unknown.length} identifier(s) not in the code graph: ${unknown.slice(0, 16).join(', ')}` +\n `${unknown.length > 16 ? '…' : ''}. Use only symbols from inspect_task / the graph, or add them before inventing names.`,\n };\n}\n\n/** Extract replacement/content bodies from a PatchIR. */\nexport function patchBodies(patch: PatchIR): string[] {\n const out: string[] = [];\n for (const op of patch.operations) {\n const body = bodyFromOp(op);\n if (body) out.push(body);\n }\n return out;\n}\n\nfunction bodyFromOp(op: PatchOperation): string | null {\n switch (op.op) {\n case 'replace-range':\n return op.replacement;\n case 'replace-text':\n return op.replace;\n case 'create-file':\n return op.content;\n case 'replace-symbol':\n return op.replacement;\n case 'delete-file':\n return null;\n default:\n return null;\n }\n}\n\nfunction fileFromOp(op: PatchOperation): string | null {\n if ('file' in op && typeof op.file === 'string') return op.file;\n return null;\n}\n\nexport interface EnforcePatchOptions extends EnforceIdentifiersOptions {\n /** Read current file text so existing identifiers are allowlisted. */\n readFile?: (path: string) => string | null;\n}\n\n/**\n * Enforce identifiers across all patch bodies. Fails if any body introduces\n * unknown identifiers (relative to the pre-change graph trie + existing file).\n */\nexport function enforceIdentifiersInPatch(\n patch: PatchIR,\n trie: TrieNode | null | undefined,\n options: EnforcePatchOptions = {},\n): IdentifierEnforceResult {\n if (!trie) return { ok: true, unknown: [] };\n const unknown = new Set<string>();\n for (const op of patch.operations) {\n const body = bodyFromOp(op);\n if (!body) continue;\n const allow = new Set<string>(options.allow ?? []);\n const file = fileFromOp(op);\n if (file && options.readFile) {\n const existing = options.readFile(file);\n if (existing) {\n for (const id of extractIdentifiers(existing)) allow.add(id);\n }\n }\n if (op.op === 'replace-text' && typeof op.search === 'string') {\n for (const id of extractIdentifiers(op.search)) allow.add(id);\n }\n const r = enforceIdentifiersInText(body, trie, { ...options, allow });\n for (const u of r.unknown) unknown.add(u);\n }\n if (unknown.size === 0) return { ok: true, unknown: [] };\n const list = [...unknown].sort();\n return {\n ok: false,\n unknown: list,\n reason:\n `blocked apply_patch: ${list.length} identifier(s) not in the code graph: ${list.slice(0, 16).join(', ')}` +\n `${list.length > 16 ? '…' : ''}. Do not invent symbols — use graph names only.`,\n };\n}\n\n/** For tests / diagnostics: count extracted identifiers. */\nexport function countIdentifiers(text: string): number {\n return extractIdentifiers(text).length;\n}\n","/**\n * The VG Code agent tool set (VG-CLI-CODE §12).\n *\n * These are the tools the model calls during a coding session — the same shape\n * as any coding agent (read a file, list files, search, edit, run a command),\n * but with two Vibgrate differences: **search is the code graph** (a deterministic\n * `query_graph`, not a grep), and **every mutating tool is governed** — edits and\n * shell commands go through an approval gate, never applied silently. Read-only\n * tools (read/list/search/impact) are side-effect-free and auto-approved.\n *\n * The executor is pure over an injected {@link ToolContext} (filesystem, graph,\n * shell runner, approval callback), so the whole tool layer is unit-tested with\n * no real disk, model, or shell.\n */\n\nimport { loadCatalog, resolveLib, readDoc, localPackageDocs, resolveVersion } from '../engine/lib.js';\nimport { searchSymbols } from '../engine/search.js';\nimport { applyEdit, type SymbolSpan } from './apply.js';\nimport { applyPatchIR, locatorsFromGraph } from './apply-patch-ir.js';\nimport { PATCH_IR_SCHEMA_VERSION, validatePatchIR, type PatchIR } from './patch-ir.js';\nimport { unifiedDiff } from './diff.js';\nimport { previewSides, type PreviewSides } from './preview-sides.js';\nimport { isSecretPath, secretRefusal, redactText, secretEgressRefusal } from './secrets.js';\nimport { dangerousCommand } from './safety.js';\nimport { networkCommandRefusal } from './network-policy.js';\nimport { buildFailureCapsule } from './failure-capsule.js';\nimport { compileVerificationLadder, runVerificationLadder } from './verify-ladder.js';\nimport { summarizeCapsule, type TaskCapsule } from './capsule.js';\nimport { localGraphBackend, type GraphBackend } from './graph-backend.js';\nimport { inspectChange } from './inspect-change.js';\nimport { enforceIdentifiersInPatch, enforceIdentifiersInText } from './identifier-enforce.js';\nimport { extractIdentifiers } from '../runtime/identifier-mask.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport type { CodeFs } from './session.js';\nimport type { ToolCall, ToolSpec, FileChange } from './types.js';\nimport type { VgGraph } from '../schema.js';\n\n/** One file entry inside a multi-file {@link MutatingAction} of kind `patch`. */\nexport type PatchFileAction = {\n file: string;\n op: 'edit' | 'create' | 'delete';\n /** Unified diff for edits (and creates/deletes when available). */\n diff?: string;\n /** Byte size for creates. */\n bytes?: number;\n /** Whole sides, when small enough, so a host can open a real diff editor. */\n sides?: PreviewSides;\n};\n\n/** A state-changing action the agent wants to take — shown to the gate for approval. */\nexport type MutatingAction =\n | { kind: 'edit'; file: string; diff: string; sides?: PreviewSides }\n | { kind: 'create'; file: string; bytes: number }\n | { kind: 'delete'; file: string }\n | { kind: 'run'; command: string }\n | { kind: 'tool'; name: string; args: Record<string, unknown> }\n /** Atomic multi-file PatchIR apply — one decision for the whole transaction. */\n | { kind: 'patch'; files: PatchFileAction[] };\n\nexport interface ShellResult {\n stdout: string;\n exitCode: number;\n}\n\n/** Clarifying question for the human (Claude Code / Codex-style follow-up). */\nexport interface AskUserRequest {\n question: string;\n /** Optional multiple-choice labels (free text always allowed in the host). */\n options?: string[];\n}\n\nexport interface ToolContext {\n root: string;\n graph: VgGraph;\n fsImpl: CodeFs;\n spans: Map<string, SymbolSpan[]>;\n /** Run a shell command (injected; tests pass a fake). */\n run: (command: string) => ShellResult;\n /** Approval gate for a mutating action. Resolve false to refuse. */\n approve: (action: MutatingAction) => Promise<boolean>;\n /**\n * Ask the human a clarifying question and wait for their answer.\n * Host UIs (VS Code) surface a prompt card; CLI may use stdin / auto default.\n */\n askUser?: (req: AskUserRequest) => Promise<string>;\n /** Autonomous mode — enforce the command denylist since no human reviews each call. */\n auto?: boolean;\n /** Project-configured extra denylist rules for autonomous commands. */\n denyCommands?: string[];\n /** Active Task Capsule when the run used source-bearing context. */\n capsule?: TaskCapsule | null;\n /** Live capsule accessor (session may refresh). */\n getTaskCapsule?: () => TaskCapsule | null;\n /**\n * Graph query backend (vgd when attached, else in-process). When omitted,\n * tools use {@link localGraphBackend} over {@link graph}.\n */\n graphBackend?: GraphBackend;\n /** Session overlay dirty paths (for inspect_change without explicit files). */\n dirtyFiles?: () => string[];\n /** Transcript file changes this run (inspect_change default surface). */\n changedFiles?: () => string[];\n /**\n * Enforce default-deny network policy on `run_command` (Phase 7).\n * Defaults to true under `--auto`; hosts may set true whenever there is no\n * human reviewing each shell line (or when the sandbox cannot deny net).\n */\n enforceNetworkPolicy?: boolean;\n /**\n * Graph identifier trie for Approach B enforce-before-apply (B3).\n * When set, inventing symbols in edit/create/apply_patch bodies is blocked.\n */\n identifierTrie?: TrieNode | null;\n /** When false, skip identifier enforcement (tests / explicit escape). Default true when trie set. */\n enforceIdentifiers?: boolean;\n}\n\nexport interface ToolResult {\n /** Text handed back to the model as the tool result. */\n content: string;\n /** True if the action changed workspace state (write/delete/command). */\n mutated: boolean;\n /** Set by `finish` — the loop stops. */\n finished?: boolean;\n finalSummary?: string;\n /** The file change produced by an approved edit/create/delete (for the transcript). */\n change?: FileChange;\n}\n\n/** Max characters of file/command output we feed back, to protect the context window. */\nconst MAX_OUTPUT = 12_000;\n\n/** The tools advertised to the model. Names are stable — they are the wire contract. */\nexport const AGENT_TOOLS: ToolSpec[] = [\n {\n name: 'search_code',\n description:\n 'Search the codebase by identifier, concept, or exact string/URL. Uses the deterministic code graph for symbols, plus a literal text sweep for phrases, quoted strings, and URLs (preferred over reading files blindly). For \"find every occurrence of …\", pass the exact needle (optionally quoted).',\n parameters: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'What to find, e.g. \"scanDir\", \"where auth failures are handled\", or a URL / \"exact phrase\"',\n },\n },\n required: ['query'],\n },\n },\n {\n name: 'read_file',\n description: 'Read a file (optionally a line range). Use after search_code to see the exact code.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, start_line: { type: 'number' }, end_line: { type: 'number' } }, required: ['path'] },\n },\n {\n name: 'list_files',\n description: 'List files known to the code map, optionally filtered by directory prefix and a simple substring/extension pattern.',\n parameters: { type: 'object', properties: { dir: { type: 'string' }, pattern: { type: 'string' } } },\n },\n {\n name: 'graph_impact',\n description: 'What depends on a symbol — the blast radius of changing it (callers/importers/subtypes). Use before editing shared code.',\n parameters: { type: 'object', properties: { symbol: { type: 'string' } }, required: ['symbol'] },\n },\n {\n name: 'library_docs',\n description: \"Get version-correct documentation for a dependency this project actually uses (from the installed package), so you use the right API for the installed version. Prefer this over guessing a library's API.\",\n parameters: { type: 'object', properties: { name: { type: 'string', description: 'package name, e.g. \"react\" or \"zod\"' } }, required: ['name'] },\n },\n {\n name: 'edit_file',\n description: 'Edit a file by replacing an exact snippet. The SEARCH text must match current file contents (whitespace-flexible). Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, search: { type: 'string' }, replace: { type: 'string' } }, required: ['path', 'search', 'replace'] },\n },\n {\n name: 'create_file',\n description: 'Create a new file with the given contents. Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, content: { type: 'string' } }, required: ['path', 'content'] },\n },\n {\n name: 'delete_file',\n description: 'Delete a file. Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' } }, required: ['path'] },\n },\n {\n name: 'apply_patch',\n description:\n 'Apply a validated PatchIR (patch-ir/0) multi-op edit transactionally. Prefer for multi-file changes with assumptions. JSON object with operations[], optional assumptions[]. Requires approval per file change.',\n parameters: {\n type: 'object',\n properties: {\n patch: {\n type: 'object',\n description: 'PatchIR document: { operations: [...], assumptions?: [...] } (schemaVersion optional, defaults to patch-ir/0)',\n },\n },\n required: ['patch'],\n },\n },\n {\n name: 'run_command',\n description: 'Run a shell command (e.g. the test or build command) and read its output. Requires approval.',\n parameters: { type: 'object', properties: { command: { type: 'string' } }, required: ['command'] },\n },\n {\n name: 'inspect_task',\n description:\n 'Return (or refresh) the current Task Capsule summary — primary symbols, source files, and verification plan. Prefer this over re-searching when capsule context is already available.',\n parameters: { type: 'object', properties: {} },\n },\n {\n name: 'inspect_change',\n description:\n 'Blast radius of a proposed change before (or after) editing — what depends on the symbols/files you will touch. Prefer before multi-file edits. Does not write files.',\n parameters: {\n type: 'object',\n properties: {\n symbols: {\n type: 'array',\n items: { type: 'string' },\n description: 'Symbol ids or qualified names under change',\n },\n files: {\n type: 'array',\n items: { type: 'string' },\n description: 'Relative file paths under change (defaults to session dirty/changed files)',\n },\n depth: { type: 'number', description: 'Impact depth (default 3)' },\n },\n },\n },\n {\n name: 'verify_change',\n description:\n 'Run the graph-derived verification ladder (syntax + optional test command). On failure returns a Failure Capsule for focused repair. Read-only regarding files; may run the project test command.',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: 'Optional verify command override (default: project test command from capsule plan)' },\n },\n },\n },\n {\n name: 'ask_user',\n description:\n 'Ask the human a clarifying question when intent, scope, or preferred approach is ambiguous. Prefer this over guessing. The host shows the question and returns their answer. Do not use for pure code facts you can look up with search_code/read_file.',\n parameters: {\n type: 'object',\n properties: {\n question: { type: 'string', description: 'Clear question for the user' },\n options: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional short multiple-choice options (user may still type free text)',\n },\n },\n required: ['question'],\n },\n },\n {\n name: 'finish',\n description:\n 'Finish the task. Pass a user-facing summary in Markdown: what changed (or what you found), key file:line refs, and any follow-ups. For Q&A / locate tasks, the summary IS the answer.',\n parameters: {\n type: 'object',\n properties: {\n summary: {\n type: 'string',\n description: 'Markdown summary or answer shown in the VG Code panel',\n },\n },\n required: ['summary'],\n },\n },\n {\n name: 'abort',\n description:\n 'Stop without further edits when the request is impossible. Prefer ask_user when intent is merely unclear.',\n parameters: {\n type: 'object',\n properties: { reason: { type: 'string', description: 'Why the task is aborted' } },\n required: ['reason'],\n },\n },\n];\n\n/** Execute one tool call against the workspace. Never throws — errors come back as tool content. */\nexport async function executeTool(call: ToolCall, ctx: ToolContext): Promise<ToolResult> {\n const a = call.arguments;\n try {\n switch (call.name) {\n case 'search_code':\n return await search(ctx, str(a.query));\n case 'read_file':\n return readFile(ctx, str(a.path), num(a.start_line), num(a.end_line));\n case 'list_files':\n return listFiles(ctx, str(a.dir), str(a.pattern));\n case 'graph_impact':\n return await graphImpact(ctx, str(a.symbol));\n case 'library_docs':\n return libraryDocs(ctx, str(a.name));\n case 'edit_file':\n return editFile(ctx, str(a.path), str(a.search), str(a.replace));\n case 'create_file':\n return createFile(ctx, str(a.path), str(a.content));\n case 'delete_file':\n return deleteFile(ctx, str(a.path));\n case 'apply_patch':\n return applyPatchTool(ctx, a.patch);\n case 'run_command':\n return runCommand(ctx, str(a.command));\n case 'inspect_task':\n return inspectTask(ctx);\n case 'inspect_change':\n return inspectChangeTool(ctx, a);\n case 'verify_change':\n return verifyChange(ctx, str(a.command) || undefined);\n case 'ask_user':\n return askUser(ctx, str(a.question), arrStr(a.options));\n case 'finish':\n return { content: 'done', mutated: false, finished: true, finalSummary: str(a.summary) || 'done' };\n case 'abort':\n return {\n content: `aborted: ${str(a.reason) || 'no reason given'}`,\n mutated: false,\n finished: true,\n finalSummary: `aborted: ${str(a.reason) || 'no reason given'}`,\n };\n default:\n return { content: `unknown tool \"${call.name}\". Available: ${AGENT_TOOLS.map((t) => t.name).join(', ')}`, mutated: false };\n }\n } catch (e) {\n return { content: `tool ${call.name} failed: ${(e as Error).message}`, mutated: false };\n }\n}\n\n/* ── read-only tools (auto-approved) ─────────────────────────────────────── */\n\nasync function askUser(ctx: ToolContext, question: string, options?: string[]): Promise<ToolResult> {\n if (!question.trim()) return { content: 'ask_user needs a question', mutated: false };\n if (!ctx.askUser) {\n return {\n content:\n 'No interactive host for ask_user (headless). Proceed with your best judgment, state assumptions, and call finish — or abort if you cannot continue safely.',\n mutated: false,\n };\n }\n if (ctx.auto) {\n return {\n content:\n 'Autonomous mode: no human available. Proceed with the safest default, state assumptions clearly in finish, and do not block on clarification.',\n mutated: false,\n };\n }\n try {\n const answer = await ctx.askUser({\n question: question.trim(),\n options: options?.map((o) => o.trim()).filter(Boolean).slice(0, 8),\n });\n const text = (answer ?? '').trim();\n if (!text) {\n return {\n content: 'User dismissed the question without answering. Ask once more only if essential; otherwise finish with open questions listed.',\n mutated: false,\n };\n }\n return { content: `User answered:\\n${text}`, mutated: false };\n } catch (e) {\n return { content: `ask_user failed: ${(e as Error).message}`, mutated: false };\n }\n}\n\nfunction arrStr(v: unknown): string[] | undefined {\n if (!Array.isArray(v)) return undefined;\n return v.map((x) => (typeof x === 'string' ? x : String(x ?? ''))).filter(Boolean);\n}\n\nasync function search(ctx: ToolContext, query: string): Promise<ToolResult> {\n if (!query) return { content: 'search_code needs a query', mutated: false };\n\n // Hybrid path (same engine as MCP `search_symbols`): graph name index +\n // literal phrase/URL sweep. Without this, a URL occurrence search only ran\n // lexical symbol ranking and returned confidently wrong hubs (field report).\n if (ctx.root) {\n try {\n const hybrid = await searchSymbols(ctx.graph, ctx.root, query, 20);\n if (hybrid.matches.length > 0) {\n const lines = hybrid.matches.map((m) => {\n if ('preview' in m) {\n return `- text ${m.file}:${m.line} ${m.preview}`;\n }\n return `- ${m.name} (${m.kind}) ${m.file}:${m.line} score ${m.score}`;\n });\n const parts = [`Matches for \"${query}\":`, ...lines];\n if (hybrid.totalTextMatches !== undefined) {\n parts.push(\n `(${hybrid.totalTextMatches} literal match(es) in tree${hybrid.moreAvailable ? '; list truncated — raise limit or narrow the needle' : ''})`,\n );\n }\n if (hybrid.hint) parts.push(hybrid.hint);\n return { content: parts.join('\\n'), mutated: false };\n }\n // Honest empty for a pure string locate (prefer this over graph false positives).\n if (hybrid.totalTextMatches === 0 || /\\s|https?:\\/\\//i.test(query) || /^[\"'`]/.test(query.trim())) {\n const hint = hybrid.hint ? `\\n${hybrid.hint}` : '';\n return {\n content: `no symbol or text match for \"${query}\".${hint}`,\n mutated: false,\n };\n }\n } catch {\n // Fall through to graph-only backend (e.g. root not a real tree in unit tests).\n }\n }\n\n const backend = ctx.graphBackend ?? localGraphBackend(ctx.graph);\n const res = await backend.search(query, { limit: 10 });\n if (res.matches.length === 0) return { content: `no symbols matched \"${query}\"`, mutated: false };\n const lines = res.matches.map(\n (m) =>\n `- ${m.qualifiedName} (${m.kind}) ${m.file}:${m.line}${m.signature ? ` ${m.signature}` : ''}`,\n );\n const via = res.source === 'vgd' ? ' via vgd' : '';\n return { content: `Matches for \"${query}\"${via}:\\n${lines.join('\\n')}`, mutated: false };\n}\n\nfunction readFile(ctx: ToolContext, path: string, start?: number, end?: number): ToolResult {\n // Never send a secrets file to the model (GUARDRAILS §1.1).\n if (isSecretPath(path)) return { content: secretRefusal(path), mutated: false };\n const content = ctx.fsImpl.read(path);\n if (content === null) return { content: `${path} not found`, mutated: false };\n const lines = content.split('\\n');\n const from = start && start > 0 ? start - 1 : 0;\n const to = end && end > 0 ? end : lines.length;\n const slice = lines.slice(from, to).join('\\n');\n // Redact any stray credential shapes before the content reaches the model.\n const shown = truncate(redactText(slice));\n const header = start || end ? `${path} (lines ${from + 1}-${Math.min(to, lines.length)} of ${lines.length})` : `${path} (${lines.length} lines)`;\n return { content: `${header}:\\n${shown}`, mutated: false };\n}\n\nfunction listFiles(ctx: ToolContext, dir?: string, pattern?: string): ToolResult {\n const prefix = dir ? dir.replace(/\\\\/g, '/').replace(/^\\.\\//, '').replace(/\\/$/, '') : '';\n const files = [...new Set(ctx.graph.nodes.filter((n) => n.kind === 'file').map((n) => n.file))]\n .filter((f) => !isSecretPath(f)) // don't surface secret files to the model\n .filter((f) => (prefix ? f === prefix || f.startsWith(prefix + '/') : true))\n .filter((f) => (pattern ? f.includes(pattern) || f.endsWith(pattern) : true))\n .sort();\n if (files.length === 0) return { content: `no files${dir ? ` under ${dir}` : ''}${pattern ? ` matching \"${pattern}\"` : ''}`, mutated: false };\n return { content: `${files.length} file(s):\\n${files.slice(0, 200).join('\\n')}`, mutated: false };\n}\n\n/** Version-correct docs for an installed dependency — the Vibgrate differentiator, as a tool. */\nfunction libraryDocs(ctx: ToolContext, name: string): ToolResult {\n if (!name) return { content: 'library_docs needs a package name', mutated: false };\n // Committed catalog first (curated/pinned docs), then the installed package on disk.\n const entry = resolveLib(loadCatalog(ctx.root), name);\n if (entry) {\n const doc = readDoc(ctx.root, entry);\n if (doc.trim()) return { content: `Docs for ${name}${entry.version && entry.version !== '*' ? ` @ ${entry.version}` : ''} (${entry.source.type}):\\n${truncate(redactText(doc))}`, mutated: false };\n }\n const local = localPackageDocs(ctx.root, name);\n if (local?.docs.trim()) {\n return { content: `Docs for ${name}${local.version ? ` @ ${local.version}` : ''} (${local.source}):\\n${truncate(redactText(local.docs))}`, mutated: false };\n }\n const v = resolveVersion(ctx.root, name);\n return {\n content: `no bundled docs for ${name}${v.served ? ` (installed ${v.served})` : ' (not found in this project)'}. Read its source under node_modules/${name}, or add curated docs with \\`vg lib add\\`.`,\n mutated: false,\n };\n}\n\nasync function graphImpact(ctx: ToolContext, symbol: string): Promise<ToolResult> {\n const backend = ctx.graphBackend ?? localGraphBackend(ctx.graph);\n const impact = await backend.impact(symbol, { depth: 3 });\n if (!impact) return { content: `no symbol named \"${symbol}\" in the map`, mutated: false };\n if (impact.affected.length === 0) {\n return {\n content: `nothing depends on ${impact.root.name} (safe to change in isolation)`,\n mutated: false,\n };\n }\n const lines = impact.affected.slice(0, 20).map((i) => `- ${i.name} (${i.file}:${i.line})`);\n const via = impact.source === 'vgd' ? ' via vgd' : '';\n return {\n content: `${impact.affected.length} symbol(s) depend on ${impact.root.name}${via}:\\n${lines.join('\\n')}`,\n mutated: false,\n };\n}\n\n/* ── mutating tools (gated) ──────────────────────────────────────────────── */\n\nasync function editFile(ctx: ToolContext, path: string, search: string, replace: string): Promise<ToolResult> {\n const before = ctx.fsImpl.read(path);\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n // Reusing locals / symbols already in the file (or the search span) is fine;\n // only inventing graph-unknown identifiers is blocked (B3).\n const allow = new Set([\n ...extractIdentifiers(before ?? ''),\n ...extractIdentifiers(search),\n ]);\n const idCheck = enforceIdentifiersInText(replace, ctx.identifierTrie, { allow });\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers in edit', mutated: false };\n }\n }\n const { content: after, outcome } = applyEdit(before, { op: 'replace', file: path, search, replace }, ctx.spans.get(normalize(path)) ?? []);\n if (outcome.status !== 'applied') {\n return { content: `edit not applied (${outcome.status}): ${outcome.reason ?? ''}`, mutated: false };\n }\n const diff = unifiedDiff(before, after, path);\n if (!(await ctx.approve({ kind: 'edit', file: path, diff, sides: previewSides(before, after) }))) {\n return { content: `edit to ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.write(path, after ?? '');\n return { content: `edited ${path}`, mutated: true, change: { file: path, before, after, outcomes: [outcome], diff } };\n}\n\nasync function createFile(ctx: ToolContext, path: string, content: string): Promise<ToolResult> {\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n const idCheck = enforceIdentifiersInText(content, ctx.identifierTrie);\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers in create', mutated: false };\n }\n }\n const existing = ctx.fsImpl.read(path);\n if (existing !== null) return { content: `${path} already exists — use edit_file`, mutated: false };\n if (!(await ctx.approve({ kind: 'create', file: path, bytes: Buffer.byteLength(content) }))) {\n return { content: `creating ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.write(path, content);\n return { content: `created ${path}`, mutated: true, change: { file: path, before: null, after: content, outcomes: [{ edit: { op: 'create', file: path, content }, status: 'applied' }], diff: unifiedDiff(null, content, path) } };\n}\n\nasync function deleteFile(ctx: ToolContext, path: string): Promise<ToolResult> {\n const before = ctx.fsImpl.read(path);\n if (before === null) return { content: `${path} does not exist`, mutated: false };\n if (!(await ctx.approve({ kind: 'delete', file: path }))) {\n return { content: `deleting ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.remove(path);\n return { content: `deleted ${path}`, mutated: true, change: { file: path, before, after: null, outcomes: [{ edit: { op: 'delete', file: path }, status: 'applied' }], diff: unifiedDiff(before, null, path) } };\n}\n\n/**\n * Apply a multi-op PatchIR transactionally. Each touched file is approved with\n * a unified diff before any write (all-or-nothing after dry-run validation).\n */\nasync function applyPatchTool(ctx: ToolContext, raw: unknown): Promise<ToolResult> {\n const patch = coercePatchIR(raw);\n if (!patch) {\n return { content: 'apply_patch needs a patch object with operations[] (patch-ir/0)', mutated: false };\n }\n const structural = validatePatchIR(patch);\n if (!structural.ok) {\n return { content: `invalid PatchIR: ${structural.errors.join('; ')}`, mutated: false };\n }\n\n // B3: block patches that invent identifiers not present in the graph\n // (existing file locals + search spans are allowlisted).\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n const idCheck = enforceIdentifiersInPatch(patch, ctx.identifierTrie, {\n readFile: (f) => ctx.fsImpl.read(f),\n });\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers', mutated: false };\n }\n }\n\n const locate = locatorsFromGraph(ctx.graph.nodes);\n const dry = applyPatchIR(patch, {\n readFile: (f) => ctx.fsImpl.read(f),\n spansForFile: (f) => ctx.spans.get(normalize(f)) ?? [],\n locateSymbol: locate,\n transactional: true,\n });\n if (!dry.ok) {\n const detail = dry.errors.length ? dry.errors.join('; ') : dry.ops.map((o) => `${o.op}@${o.file}:${o.status}`).join('; ');\n return { content: `patch not applied: ${detail}`, mutated: false };\n }\n\n // Build the full multi-file plan first, then one atomic approval. Hosts (VS Code\n // multi-file tray, stream-json) show every file + diff together — no per-file\n // round-trip that would leave a half-approved transaction.\n const planned: Array<{\n file: string;\n op: PatchFileAction['op'];\n before: string | null;\n after: string | null;\n diff: string;\n }> = [];\n for (const [file, entry] of [...dry.files.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (entry.before === entry.after) continue;\n if (isSecretPath(file)) return { content: secretRefusal(file), mutated: false };\n const op: PatchFileAction['op'] =\n entry.after === null ? 'delete' : entry.before === null ? 'create' : 'edit';\n planned.push({\n file,\n op,\n before: entry.before,\n after: entry.after,\n diff: unifiedDiff(entry.before, entry.after, file),\n });\n }\n\n if (planned.length === 0) {\n return { content: 'patch applied with no content changes (no-op)', mutated: false };\n }\n\n const files: PatchFileAction[] = planned.map((p) => {\n const sides = previewSides(p.before, p.after);\n if (p.op === 'delete') return { file: p.file, op: 'delete', diff: p.diff, sides };\n if (p.op === 'create') {\n return { file: p.file, op: 'create', bytes: Buffer.byteLength(p.after ?? ''), diff: p.diff, sides };\n }\n return { file: p.file, op: 'edit', diff: p.diff, sides };\n });\n\n if (!(await ctx.approve({ kind: 'patch', files }))) {\n return {\n content: `patch declined — ${planned.length} file change(s) refused (nothing written)`,\n mutated: false,\n };\n }\n\n const changes: FileChange[] = [];\n for (const p of planned) {\n const edit =\n p.after === null\n ? ({ op: 'delete' as const, file: p.file })\n : p.before === null\n ? ({ op: 'create' as const, file: p.file, content: p.after })\n : ({ op: 'replace' as const, file: p.file, search: '', replace: p.after });\n changes.push({\n file: p.file,\n before: p.before,\n after: p.after,\n outcomes: [{ edit, status: 'applied' }],\n diff: p.diff,\n });\n if (p.after === null) ctx.fsImpl.remove(p.file);\n else ctx.fsImpl.write(p.file, p.after);\n }\n\n const summary = changes.map((c) => c.file).join(', ');\n // Surface the first change for the agent transcript accumulator; multi-file\n // details are in the content string and the patch approval payload.\n return {\n content: `applied patch to ${changes.length} file(s): ${summary}`,\n mutated: true,\n change: changes[0],\n };\n}\n\nfunction coercePatchIR(raw: unknown): PatchIR | null {\n if (!raw || typeof raw !== 'object') return null;\n const o = raw as Record<string, unknown>;\n if (!Array.isArray(o.operations)) return null;\n return {\n schemaVersion: PATCH_IR_SCHEMA_VERSION,\n operations: o.operations as PatchIR['operations'],\n assumptions: Array.isArray(o.assumptions) ? (o.assumptions as PatchIR['assumptions']) : [],\n requestedVerification: Array.isArray(o.requestedVerification)\n ? (o.requestedVerification as PatchIR['requestedVerification'])\n : [],\n provenance: { format: 'structured-json', modelId: null, raw: null },\n };\n}\n\nasync function runCommand(ctx: ToolContext, command: string): Promise<ToolResult> {\n if (!command) return { content: 'run_command needs a command', mutated: false };\n // In autonomous mode there is no human reviewing each command, so the denylist\n // blocks the catastrophic/exfiltrating shapes outright. Interactively, the\n // human sees the exact command at the approval prompt, so we don't pre-block.\n if (ctx.auto) {\n const reason = dangerousCommand(command, ctx.denyCommands);\n if (reason) return { content: `refused to run \\`${command}\\` autonomously — ${reason}. Run it yourself if you intend to, or re-run without --auto to approve it interactively.`, mutated: false };\n }\n // Phase 7 network policy: default-deny outbound from agent shell when\n // enforceNetworkPolicy is set (defaults on under --auto).\n const enforceNet = ctx.enforceNetworkPolicy ?? !!ctx.auto;\n const netReason = networkCommandRefusal(command, { enforce: enforceNet });\n if (netReason) {\n return { content: `refused to run \\`${command}\\` — ${netReason}`, mutated: false };\n }\n // Scan the command line for credential shapes before any shell (and before\n // approval) so secrets never ride out on a curl/header line.\n const secretReason = secretEgressRefusal(command, 'shell command');\n if (secretReason) {\n return { content: `refused to run \\`${command}\\` — ${secretReason}`, mutated: false };\n }\n if (!(await ctx.approve({ kind: 'run', command }))) {\n return { content: `running \\`${command}\\` was declined by the user`, mutated: false };\n }\n const res = ctx.run(command);\n return { content: `$ ${command}\\nexit ${res.exitCode}\\n${truncate(res.stdout)}`, mutated: true };\n}\n\nfunction inspectTask(ctx: ToolContext): ToolResult {\n const capsule = ctx.getTaskCapsule?.() ?? ctx.capsule ?? null;\n if (!capsule) {\n return {\n content:\n 'No Task Capsule for this run (metadata-only context). Re-run with --capsule, or use search_code / read_file to gather evidence.',\n mutated: false,\n };\n }\n const summary = summarizeCapsule(capsule);\n const lines = [\n `Task Capsule ${summary.schemaVersion} · ranking ${summary.rankingVersion} · ~${summary.tokensEstimate} tokens`,\n `Instruction: ${summary.instruction}`,\n `Primary (${summary.primary.length}):`,\n ...summary.primary.map((p) => ` - ${p.qualifiedName} (${p.kind}) ${p.file}`),\n `Supporting (${summary.supporting.length}):`,\n ...summary.supporting.slice(0, 8).map((p) => ` - ${p.qualifiedName} ${p.file}`),\n `Source slices: ${summary.sourceSliceCount} across ${summary.sourceFiles.join(', ') || '(none)'}`,\n `Verification files: ${capsule.verificationPlan.syntaxFiles.slice(0, 8).join(', ') || '(none)'}`,\n ];\n if (capsule.provenance.modelProfileId) lines.push(`Model profile: ${capsule.provenance.modelProfileId}`);\n if (capsule.provenance.securityTier) lines.push(`Security tier: ${capsule.provenance.securityTier}`);\n return { content: lines.join('\\n'), mutated: false };\n}\n\nfunction inspectChangeTool(ctx: ToolContext, args: Record<string, unknown>): ToolResult {\n const symbols = Array.isArray(args.symbols)\n ? args.symbols.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [];\n let files = Array.isArray(args.files)\n ? args.files.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [];\n if (!files.length) {\n const dirty = ctx.dirtyFiles?.() ?? [];\n const changed = ctx.changedFiles?.() ?? [];\n files = [...new Set([...dirty, ...changed])];\n }\n if (!symbols.length && !files.length) {\n return {\n content:\n 'inspect_change needs symbols[] or files[] (or session dirty/changed files). Example: { \"files\": [\"src/auth.ts\"] }',\n mutated: false,\n };\n }\n const depth = typeof args.depth === 'number' && args.depth > 0 ? args.depth : 3;\n const report = inspectChange(ctx.graph, { symbols, files, depth });\n return { content: report.rendered, mutated: false };\n}\n\nfunction verifyChange(ctx: ToolContext, commandOverride?: string): ToolResult {\n const capsule = ctx.getTaskCapsule?.() ?? ctx.capsule ?? null;\n if (!capsule) {\n if (commandOverride) {\n const res = ctx.run(commandOverride);\n if (res.exitCode === 0) return { content: `verify ok — \\`${commandOverride}\\` exit 0`, mutated: false };\n const fc = buildFailureCapsule({\n verify: { command: commandOverride, exitCode: res.exitCode, stdout: res.stdout },\n changedFiles: [],\n });\n return { content: fc.rendered, mutated: false };\n }\n return { content: 'verify_change needs a Task Capsule or an explicit command', mutated: false };\n }\n const steps = compileVerificationLadder(capsule.verificationPlan, {\n testCommand: commandOverride,\n });\n const ladder = runVerificationLadder(steps, {\n readFile: (f) => ctx.fsImpl.read(f),\n run: ctx.run,\n runCommands: true,\n });\n if (ladder.ok) {\n return {\n content: `verification ladder passed:\\n${ladder.steps.map((s) => `✔ ${s.message}`).join('\\n')}`,\n mutated: false,\n };\n }\n const fc = buildFailureCapsule({\n ladderSteps: ladder.steps,\n capsule,\n changedFiles: [],\n });\n return { content: fc.rendered, mutated: false };\n}\n\nfunction truncate(s: string): string {\n if (s.length <= MAX_OUTPUT) return s;\n return s.slice(0, MAX_OUTPUT) + `\\n… (truncated ${s.length - MAX_OUTPUT} chars)`;\n}\n\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : v === undefined || v === null ? '' : String(v);\n}\nfunction num(v: unknown): number | undefined {\n const n = typeof v === 'number' ? v : typeof v === 'string' ? Number(v) : NaN;\n return Number.isFinite(n) ? n : undefined;\n}\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Session file overlay (Fusion Runtime Phase 5).\n *\n * Mutations land in an in-memory layer first so the agent can read its own\n * uncommitted edits, run a verification ladder against the session view, and\n * only then {@link SessionOverlay.flush} to the real filesystem. The base\n * {@link CodeFs} is never written until flush.\n *\n * Audit lines always go through to the base (governance must not be buffered).\n */\n\nimport type { CodeFs } from './session.js';\n\nexport type OverlayEntry =\n | { kind: 'write'; content: string }\n | { kind: 'delete' };\n\nexport class SessionOverlay implements CodeFs {\n private readonly dirty = new Map<string, OverlayEntry>();\n\n constructor(private readonly base: CodeFs) {}\n\n /** Paths with uncommitted writes or deletes (sorted). */\n dirtyFiles(): string[] {\n return [...this.dirty.keys()].sort();\n }\n\n /** True if the overlay has any uncommitted mutation. */\n isDirty(): boolean {\n return this.dirty.size > 0;\n }\n\n read(file: string): string | null {\n const key = normalize(file);\n const entry = this.dirty.get(key);\n if (entry) {\n if (entry.kind === 'delete') return null;\n return entry.content;\n }\n return this.base.read(file);\n }\n\n write(file: string, content: string): void {\n this.dirty.set(normalize(file), { kind: 'write', content });\n }\n\n remove(file: string): void {\n this.dirty.set(normalize(file), { kind: 'delete' });\n }\n\n appendAudit(line: string): void {\n this.base.appendAudit(line);\n }\n\n /**\n * Commit every dirty entry to the base filesystem, then clear the overlay.\n * Returns the paths flushed (sorted).\n */\n flush(): string[] {\n const files = this.dirtyFiles();\n for (const file of files) {\n const entry = this.dirty.get(file)!;\n if (entry.kind === 'delete') this.base.remove(file);\n else this.base.write(file, entry.content);\n }\n this.dirty.clear();\n return files;\n }\n\n /** Drop uncommitted mutations without writing the base. */\n discard(): void {\n this.dirty.clear();\n }\n\n /**\n * Snapshot of dirty entries for tests / diagnostics (path → entry).\n * Does not include base-only files.\n */\n snapshot(): Map<string, OverlayEntry> {\n return new Map(this.dirty);\n }\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Agent trajectory metrics (Fusion Runtime Phase 0 / plan §0.2).\n *\n * Pure helpers that turn a finished agent run into a TrajectoryRecord so we can\n * compute ZNS@1 (zero-navigation solve) and FCS (first-capsule sufficiency)\n * offline without a live model. Discovery tools force another navigation hop;\n * a ZNS@1 solve uses only edit/verify/finish after the initial capsule.\n */\n\nexport const TRAJECTORY_SCHEMA_VERSION = 'trajectory/0' as const;\n\n/** Tools that count as model-driven navigation / discovery (not ZNS). */\nexport const DISCOVERY_TOOLS = new Set([\n 'search_code',\n 'read_file',\n 'list_files',\n 'graph_impact',\n 'library_docs',\n]);\n\n/** Tools that mutate workspace state. */\nexport const MUTATION_TOOLS = new Set([\n 'edit_file',\n 'create_file',\n 'delete_file',\n 'apply_patch',\n 'run_command',\n]);\n\nexport type TrajectoryArm = 'metadata' | 'capsule' | 'oracle' | 'other';\n\nexport interface ToolCallRecord {\n name: string;\n /** Wall-clock step index (1-based agent step). */\n step: number;\n mutated: boolean;\n}\n\nexport interface TrajectoryRecord {\n schemaVersion: typeof TRAJECTORY_SCHEMA_VERSION;\n /** Stable task id (fixture / SWE-bench instance id). */\n taskId: string;\n arm: TrajectoryArm;\n /** True when the run stopped finished and verification (if any) passed. */\n solved: boolean;\n /** True when verification was run and passed (or no verify configured). */\n verified: boolean;\n znsAt1: boolean;\n steps: number;\n stopped: string;\n inferenceTurns: number;\n toolCalls: ToolCallRecord[];\n discoveryToolCalls: number;\n mutationToolCalls: number;\n shellCommands: number;\n promptTokens: number;\n completionTokens: number;\n elapsedMs: number | null;\n filesChanged: number;\n usedCapsule: boolean;\n failureCapsuleBuilt: boolean;\n provider?: { id: string; model: string };\n}\n\nexport interface TrajectoryCollector {\n recordTool(name: string, step: number, mutated: boolean): void;\n recordUsage(promptTokens: number, completionTokens: number): void;\n markFailureCapsule(): void;\n finalize(input: {\n taskId: string;\n arm: TrajectoryArm;\n solved: boolean;\n verified: boolean;\n steps: number;\n stopped: string;\n inferenceTurns: number;\n filesChanged: number;\n usedCapsule: boolean;\n elapsedMs?: number | null;\n provider?: { id: string; model: string };\n }): TrajectoryRecord;\n}\n\n/** Create a mutable collector for one agent run. */\nexport function createTrajectoryCollector(): TrajectoryCollector {\n const toolCalls: ToolCallRecord[] = [];\n let promptTokens = 0;\n let completionTokens = 0;\n let failureCapsuleBuilt = false;\n\n return {\n recordTool(name, step, mutated) {\n toolCalls.push({ name, step, mutated });\n },\n recordUsage(p, c) {\n promptTokens += p;\n completionTokens += c;\n },\n markFailureCapsule() {\n failureCapsuleBuilt = true;\n },\n finalize(input) {\n const discoveryToolCalls = toolCalls.filter((t) => DISCOVERY_TOOLS.has(t.name)).length;\n const mutationToolCalls = toolCalls.filter((t) => MUTATION_TOOLS.has(t.name)).length;\n const shellCommands = toolCalls.filter((t) => t.name === 'run_command').length;\n const znsAt1 = computeZnsAt1({\n solved: input.solved && input.verified,\n usedCapsule: input.usedCapsule,\n toolCalls,\n });\n return {\n schemaVersion: TRAJECTORY_SCHEMA_VERSION,\n taskId: input.taskId,\n arm: input.arm,\n solved: input.solved,\n verified: input.verified,\n znsAt1,\n steps: input.steps,\n stopped: input.stopped,\n inferenceTurns: input.inferenceTurns,\n toolCalls,\n discoveryToolCalls,\n mutationToolCalls,\n shellCommands,\n promptTokens,\n completionTokens,\n elapsedMs: input.elapsedMs ?? null,\n filesChanged: input.filesChanged,\n usedCapsule: input.usedCapsule,\n failureCapsuleBuilt,\n provider: input.provider,\n };\n },\n };\n}\n\n/**\n * ZNS@1: task solved + verified from the initial capsule with zero discovery\n * tool calls (model never navigated). Requires capsule arm.\n */\nexport function computeZnsAt1(input: {\n solved: boolean;\n usedCapsule: boolean;\n toolCalls: Array<{ name: string }>;\n}): boolean {\n if (!input.solved || !input.usedCapsule) return false;\n return !input.toolCalls.some((t) => DISCOVERY_TOOLS.has(t.name));\n}\n\nexport interface FcsReport {\n schemaVersion: 'fcs-report/0';\n /** Solved under capsule arm ÷ solved under oracle arm (same task ids). */\n fcs: number | null;\n /** Tasks in both arms used for FCS. */\n pairedTasks: number;\n capsuleSolved: number;\n oracleSolved: number;\n /** Zero-navigation solve rate among capsule solves. */\n znsAt1Rate: number | null;\n capsuleRuns: number;\n oracleRuns: number;\n metadataRuns: number;\n byArm: Record<\n string,\n {\n runs: number;\n solved: number;\n passRate: number;\n znsAt1: number;\n medianDiscovery: number | null;\n medianSteps: number | null;\n medianPromptTokens: number | null;\n }\n >;\n records: TrajectoryRecord[];\n}\n\n/**\n * Aggregate trajectory records into FCS / ZNS@1 report.\n * FCS = |tasks solved under capsule| / |tasks solved under oracle| for the\n * intersection of task ids present in both arms. When no oracle arm exists,\n * fcs is null and pass rates are still reported per arm.\n */\nexport function computeFcsReport(records: TrajectoryRecord[]): FcsReport {\n const byArm: FcsReport['byArm'] = {};\n for (const arm of ['capsule', 'oracle', 'metadata', 'other'] as TrajectoryArm[]) {\n const armRecs = records.filter((r) => r.arm === arm);\n if (!armRecs.length && arm === 'other') continue;\n byArm[arm] = summarizeArm(armRecs);\n }\n\n const capsule = records.filter((r) => r.arm === 'capsule');\n const oracle = records.filter((r) => r.arm === 'oracle');\n const oracleSolvedIds = new Set(oracle.filter((r) => r.solved).map((r) => r.taskId));\n const capsuleByTask = new Map<string, TrajectoryRecord>();\n for (const r of capsule) {\n // Prefer solved record if duplicates.\n const prev = capsuleByTask.get(r.taskId);\n if (!prev || (r.solved && !prev.solved)) capsuleByTask.set(r.taskId, r);\n }\n const pairedIds = [...capsuleByTask.keys()].filter((id) => oracle.some((o) => o.taskId === id));\n const oracleSolvedPaired = pairedIds.filter((id) => oracleSolvedIds.has(id));\n const capsuleSolvedAmongOracle = oracleSolvedPaired.filter((id) => capsuleByTask.get(id)?.solved).length;\n\n const fcs =\n oracleSolvedPaired.length > 0 ? round(capsuleSolvedAmongOracle / oracleSolvedPaired.length) : null;\n\n const capsuleSolved = capsule.filter((r) => r.solved);\n const znsAt1Rate =\n capsuleSolved.length > 0 ? round(capsuleSolved.filter((r) => r.znsAt1).length / capsuleSolved.length) : null;\n\n return {\n schemaVersion: 'fcs-report/0',\n fcs,\n pairedTasks: pairedIds.length,\n capsuleSolved: capsuleSolvedAmongOracle,\n oracleSolved: oracleSolvedPaired.length,\n znsAt1Rate,\n capsuleRuns: capsule.length,\n oracleRuns: oracle.length,\n metadataRuns: records.filter((r) => r.arm === 'metadata').length,\n byArm,\n records,\n };\n}\n\n/** Markdown summary suitable for CI artifacts / docs. */\nexport function renderFcsReportMarkdown(report: FcsReport): string {\n const lines: string[] = [\n '# Fusion trajectory / FCS report',\n '',\n `| Metric | Value |`,\n `|---|---:|`,\n `| FCS (capsule ÷ oracle solves) | ${report.fcs == null ? 'n/a (no oracle arm)' : report.fcs.toFixed(3)} |`,\n `| ZNS@1 rate (capsule solves) | ${report.znsAt1Rate == null ? 'n/a' : (report.znsAt1Rate * 100).toFixed(1) + '%'} |`,\n `| Paired tasks | ${report.pairedTasks} |`,\n `| Capsule runs | ${report.capsuleRuns} |`,\n `| Oracle runs | ${report.oracleRuns} |`,\n `| Metadata runs | ${report.metadataRuns} |`,\n '',\n '## Per arm',\n '',\n '| Arm | Runs | Solved | Pass rate | ZNS@1 | Discovery p50 | Steps p50 | Prompt tokens p50 |',\n '|---|---:|---:|---:|---:|---:|---:|---:|',\n ];\n for (const [arm, s] of Object.entries(report.byArm)) {\n if (!s.runs) continue;\n lines.push(\n `| ${arm} | ${s.runs} | ${s.solved} | ${(s.passRate * 100).toFixed(1)}% | ${s.znsAt1} | ${fmt(s.medianDiscovery)} | ${fmt(s.medianSteps)} | ${fmt(s.medianPromptTokens)} |`,\n );\n }\n lines.push(\n '',\n '## Definitions',\n '',\n '- **ZNS@1**: solved + verified from a Task Capsule with zero discovery tool calls (`search_code`, `read_file`, `list_files`, `graph_impact`, `library_docs`).',\n '- **FCS**: among tasks the oracle arm solves, the fraction also solved under the capsule arm (same task ids).',\n );\n return lines.join('\\n') + '\\n';\n}\n\nfunction summarizeArm(recs: TrajectoryRecord[]): FcsReport['byArm'][string] {\n const solved = recs.filter((r) => r.solved).length;\n return {\n runs: recs.length,\n solved,\n passRate: recs.length ? round(solved / recs.length) : 0,\n znsAt1: recs.filter((r) => r.znsAt1).length,\n medianDiscovery: median(recs.map((r) => r.discoveryToolCalls)),\n medianSteps: median(recs.map((r) => r.steps)),\n medianPromptTokens: median(recs.map((r) => r.promptTokens)),\n };\n}\n\nfunction median(values: number[]): number | null {\n if (!values.length) return null;\n const sorted = [...values].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 ? sorted[mid]! : round((sorted[mid - 1]! + sorted[mid]!) / 2);\n}\n\nfunction round(n: number): number {\n return Math.round(n * 1000) / 1000;\n}\n\nfunction fmt(n: number | null): string {\n return n == null ? 'n/a' : String(n);\n}\n","/**\n * Run provenance (Fusion Runtime Phase 7).\n *\n * schemaVersion: run-provenance/0\n *\n * Every finished agent run records a content-hashed, policy-versioned summary:\n * which Model Execution Profile and security tier ran, which graph corpus and\n * ranking policy fed the capsule, and blake3 hashes of every mutation\n * (before/after/diff). Pure and deterministic — identical inputs always yield\n * the same provenance record. Learning / ranking changes only ship as a new\n * pinned `context-policy@YYYY.MM.*` string after benchmark significance.\n */\n\nimport { hashString, canonicalize } from '../engine/hash.js';\nimport { CAPSULE_RANKING_VERSION } from './capsule.js';\nimport type { FileChange } from './types.js';\n\nexport const RUN_PROVENANCE_SCHEMA_VERSION = 'run-provenance/0' as const;\n\n/**\n * Pinned context / ranking / governance policy id for this release train.\n * Bump only with maintainer sign-off after ContextBench significance — never\n * from a single task outcome.\n */\nexport const CONTEXT_POLICY_VERSION = 'context-policy@2026.07.0' as const;\n\nexport type MutationOp = 'edit' | 'create' | 'delete';\n\nexport interface MutationProvenance {\n file: string;\n op: MutationOp;\n /** blake3 of pre-image content; null for creates. */\n beforeHash: string | null;\n /** blake3 of post-image content; null for deletes. */\n afterHash: string | null;\n /** blake3 of the unified diff text (empty string → null). */\n diffHash: string | null;\n}\n\nexport interface VerificationStepProvenance {\n /** Ladder step kind or \"command\". */\n kind: string;\n /** Command string when present. */\n command?: string | null;\n passed: boolean;\n /** blake3 of truncated diagnostic/stdout when present. */\n diagnosticHash?: string | null;\n}\n\nexport interface RunProvenance {\n schemaVersion: typeof RUN_PROVENANCE_SCHEMA_VERSION;\n policyVersion: string;\n rankingVersion: string | null;\n modelProfileId: string | null;\n securityTier: string | null;\n graphCorpusHash: string | null;\n mutations: MutationProvenance[];\n /**\n * blake3 over the canonical mutations array — stable fingerprint of what\n * the run wrote (empty mutations → hash of `[]`).\n */\n mutationsRootHash: string;\n /** Optional verification ladder / command outcomes for this run. */\n verification?: VerificationStepProvenance[];\n /** blake3 over canonical verification array when present. */\n verificationRootHash?: string | null;\n}\n\nexport interface BuildRunProvenanceInput {\n modelProfileId?: string | null;\n securityTier?: string | null;\n graphCorpusHash?: string | null;\n rankingVersion?: string | null;\n policyVersion?: string | null;\n changes?: FileChange[];\n verification?: Array<{\n kind: string;\n command?: string | null;\n passed: boolean;\n diagnostic?: string | null;\n }>;\n}\n\n/** Infer create/edit/delete from before/after nullability. */\nexport function mutationOp(before: string | null, after: string | null): MutationOp {\n if (before === null && after !== null) return 'create';\n if (before !== null && after === null) return 'delete';\n return 'edit';\n}\n\n/** Content-hash one FileChange into a MutationProvenance entry. */\nexport function hashMutation(change: FileChange): MutationProvenance {\n const op = mutationOp(change.before, change.after);\n return {\n file: change.file,\n op,\n beforeHash: change.before === null ? null : hashString(change.before),\n afterHash: change.after === null ? null : hashString(change.after),\n diffHash: change.diff ? hashString(change.diff) : null,\n };\n}\n\n/**\n * Build a full run-provenance/0 record. Mutations are sorted by file path for\n * stability; root hash covers the sorted list only.\n */\nexport function buildRunProvenance(input: BuildRunProvenanceInput = {}): RunProvenance {\n const mutations = (input.changes ?? [])\n .map(hashMutation)\n .sort((a, b) => a.file.localeCompare(b.file) || a.op.localeCompare(b.op));\n const verification: VerificationStepProvenance[] | undefined = input.verification?.length\n ? input.verification\n .map((v) => ({\n kind: v.kind,\n command: v.command ?? null,\n passed: !!v.passed,\n diagnosticHash: v.diagnostic ? hashString(v.diagnostic.slice(0, 4000)) : null,\n }))\n .sort(\n (a, b) =>\n a.kind.localeCompare(b.kind) ||\n (a.command ?? '').localeCompare(b.command ?? '') ||\n Number(a.passed) - Number(b.passed),\n )\n : undefined;\n return {\n schemaVersion: RUN_PROVENANCE_SCHEMA_VERSION,\n policyVersion: input.policyVersion ?? CONTEXT_POLICY_VERSION,\n rankingVersion: input.rankingVersion ?? CAPSULE_RANKING_VERSION,\n modelProfileId: input.modelProfileId ?? null,\n securityTier: input.securityTier ?? null,\n graphCorpusHash: input.graphCorpusHash ?? null,\n mutations,\n mutationsRootHash: hashString(canonicalize(mutations)),\n ...(verification\n ? {\n verification,\n verificationRootHash: hashString(canonicalize(verification)),\n }\n : { verificationRootHash: null }),\n };\n}\n","/**\n * Constrained-decoding grammars for PatchIR (Fusion Approach B / ADR-005).\n *\n * Spark-tier local models should emit syntactically valid PatchIR JSON so apply\n * never parses free-text tool calls. Providers that support GBNF (llama.cpp via\n * llm-host) receive {@link patchIrGbnf}; others ignore the grammar field.\n *\n * The grammar is intentionally permissive on string contents (file paths, code)\n * while fixing the structural keys and op enum — highest leverage for zero\n * retry loops without needing a full JSON Schema compiler in-process.\n *\n * **llama.cpp GBNF constraint:** each production must be a single line. Indented\n * continuations are parsed as new (invalid) rules and fail with\n * `failed to parse grammar` — which aborts Spark's requireGrammar path.\n */\n\n/** GBNF that constrains the model to a PatchIR-shaped JSON object (schema patch-ir/0). */\nexport function patchIrGbnf(): string {\n // One production per line — required by llama.cpp / node-llama-cpp GBNF parser.\n return [\n 'root ::= ws patch',\n 'ws ::= [ \\\\t\\\\n]*',\n 'patch ::= \"{\" ws \"\\\\\"schemaVersion\\\\\"\" ws \":\" ws \"\\\\\"patch-ir/0\\\\\"\" ws \",\" ws \"\\\\\"operations\\\\\"\" ws \":\" ws operations ws \",\" ws \"\\\\\"assumptions\\\\\"\" ws \":\" ws array-any ws \",\" ws \"\\\\\"requestedVerification\\\\\"\" ws \":\" ws array-any ws \",\" ws \"\\\\\"provenance\\\\\"\" ws \":\" ws provenance ws \"}\"',\n 'operations ::= \"[\" ws operation (ws \",\" ws operation)* ws \"]\"',\n 'operation ::= replace-range | replace-text | create-file | delete-file | replace-symbol',\n 'replace-range ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-range\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"start\\\\\"\" ws \":\" ws number ws \",\" ws \"\\\\\"end\\\\\"\" ws \":\" ws number ws \",\" ws \"\\\\\"replacement\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"expectedHash\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"anchorSymbol\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'replace-text ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-text\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"search\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"replace\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"anchorSymbol\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'create-file ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"create-file\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"content\\\\\"\" ws \":\" ws string ws \"}\"',\n 'delete-file ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"delete-file\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \"}\"',\n 'replace-symbol ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-symbol\\\\\"\" ws \",\" ws \"\\\\\"symbolId\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"replacement\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"expectedHash\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'provenance ::= \"{\" ws \"\\\\\"format\\\\\"\" ws \":\" ws format (ws \",\" ws \"\\\\\"modelId\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"raw\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'format ::= \"\\\\\"search-replace\\\\\"\" | \"\\\\\"whole-file\\\\\"\" | \"\\\\\"structured-json\\\\\"\" | \"\\\\\"grammar-constrained\\\\\"\" | \"\\\\\"code-edit\\\\\"\"',\n 'array-any ::= \"[\" ws (value (ws \",\" ws value)*)? ws \"]\"',\n 'value ::= object | array-any | string | number | \"true\" | \"false\" | null',\n 'object ::= \"{\" ws (string ws \":\" ws value (ws \",\" ws string ws \":\" ws value)*)? ws \"}\"',\n 'string ::= \"\\\\\"\" ( [^\"\\\\\\\\] | \"\\\\\\\\\" ([\"\\\\\\\\/bfnrt] | \"u\" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) )* \"\\\\\"\"',\n 'number ::= \"-\"? (\"0\" | [1-9] [0-9]*) (\".\" [0-9]+)? ([eE] [+-]? [0-9]+)?',\n 'null ::= \"null\"',\n '',\n ].join('\\n');\n}\n\n/**\n * Whether the agent should attach a PatchIR grammar for this profile.\n * Grammar path is for local constrained backends (llama.cpp); HTTP providers ignore it.\n */\nexport function shouldUsePatchIrGrammar(profile?: {\n constrainedDecoding?: boolean;\n toolCalling?: string;\n editFormat?: string;\n} | null): boolean {\n if (!profile) return false;\n if (profile.constrainedDecoding) return true;\n if (profile.toolCalling === 'grammar') return true;\n if (profile.editFormat === 'patch_ir_json' && profile.constrainedDecoding !== false) {\n // Prefer grammar when the pack is already PatchIR-oriented and decoding flag is not off.\n return !!profile.constrainedDecoding;\n }\n return false;\n}\n","/**\n * Deterministic string/URL locate answers for VG Code.\n *\n * Local constrained models are forced onto PatchIR grammar for edits. That is\n * the wrong contract for \"where is https://…?\" — the model then dumps invalid\n * JSON into the panel. For pure locate asks we answer from the hybrid literal\n * sweep and never surface PatchIR or identifier-annotation noise.\n */\n\nimport { extractLiteralNeedles, isLocateOnlyInstruction } from '../engine/query.js';\nimport { searchSymbols, type TextHit } from '../engine/search.js';\nimport type { VgGraph } from '../schema.js';\n\nexport { isLocateOnlyInstruction };\n\nexport interface LocateAnswer {\n needle: string;\n hits: Array<{ file: string; line: number; preview: string }>;\n totalTextMatches: number;\n /** Human summary for the panel (finalText / assistant). */\n summary: string;\n}\n\n/** Prefer the longest extracted URL/quote; else the trimmed instruction. */\nexport function primaryLocateNeedle(instruction: string): string {\n const needles = extractLiteralNeedles(instruction);\n if (needles.length === 0) return instruction.trim();\n return [...needles].sort((a, b) => b.length - a.length)[0]!;\n}\n\nexport function formatLocateAnswer(\n needle: string,\n hits: Array<{ file: string; line: number; preview: string }>,\n total: number,\n): string {\n if (hits.length === 0) {\n return (\n `No occurrences of \\`${needle}\\` in this workspace.\\n` +\n `(Literal search complete — 0 matches.)`\n );\n }\n const lines = hits.slice(0, 20).map((h) => `- ${h.file}:${h.line} ${h.preview.trim().slice(0, 120)}`);\n const more =\n total > hits.length\n ? `\\n… and ${total - hits.length} more (showing ${hits.length} of ${total}).`\n : total > 1\n ? `\\n(${total} occurrence${total === 1 ? '' : 's'}.)`\n : '';\n return `Found \\`${needle}\\`:\\n${lines.join('\\n')}${more}`;\n}\n\n/**\n * Run the hybrid literal sweep and build a panel-ready locate answer.\n * Call only when {@link isLocateOnlyInstruction} is true.\n */\nexport async function answerLocateInstruction(\n graph: VgGraph,\n root: string,\n instruction: string,\n limit = 30,\n): Promise<LocateAnswer> {\n const needle = primaryLocateNeedle(instruction);\n const result = await searchSymbols(graph, root, needle, limit);\n const hits = result.matches\n .filter((m): m is TextHit => m.kind === 'text')\n .map((m) => ({ file: m.file, line: m.line, preview: m.preview }));\n const total = result.totalTextMatches ?? hits.length;\n return {\n needle,\n hits,\n totalTextMatches: total,\n summary: formatLocateAnswer(needle, hits, total),\n };\n}\n\n/**\n * Strip model dump noise that must never be the panel's \"answer\":\n * PatchIR JSON blobs and `/* vg: unknown identifiers … *\\/` annotations.\n */\nexport function sanitizeAgentDisplayText(text: string): string {\n if (!text) return text;\n let t = text.replace(/\\n*\\/\\*\\s*vg:\\s*unknown identifiers[\\s\\S]*?\\*\\//gi, '').trim();\n // No-op / garbage PatchIR is not a user answer.\n if (\n /\"schemaVersion\"\\s*:\\s*\"patch-ir\\/0\"/i.test(t) ||\n (/\"op\"\\s*:\\s*\"replace-text\"/i.test(t) && /\"operations\"\\s*:/i.test(t))\n ) {\n return (\n 'This looked like a locate/search question, but the model returned an edit payload instead of an answer. ' +\n 'Ask again as “where is <url or string>?” — VG Code will use the literal search path.'\n );\n }\n return t;\n}\n","/**\n * The VG Code agentic loop (VG-CLI-CODE §12).\n *\n * This is what makes `vg code` a coding *agent* rather than a one-shot proposer:\n * the model is given the tool set (search the graph, read, list, impact, edit,\n * create, delete, run a command) and iterates — call tools, read the results,\n * call more tools — until it calls `finish` (or a step cap is hit). Mutating\n * tools pass through the injected approval gate, so the same governance holds\n * whether you approve each step interactively or run autonomously with `--auto`.\n *\n * For real multi-step sessions it also: writes an append-only, secret-free\n * **audit record** at the end of every run (governance parity with the\n * single-shot path); **compacts the transcript** so a long session stays under\n * the context-rot threshold that is the whole reason the graph exists; and\n * **guards against no-progress loops** so a model that repeats a failing call\n * stops cleanly instead of burning to the step cap.\n *\n * The model is the only non-deterministic seam (behind the provider list, with\n * fallback). Everything else — the loop, tool execution, gating, compaction,\n * guard, audit — is deterministic and unit-tested with a scripted provider.\n */\n\nimport { buildCodeContext } from './context.js';\nimport {\n buildTaskCapsule,\n capsuleToCodeContext,\n summarizeCapsule,\n CAPSULE_RANKING_VERSION,\n type CapsuleSummary,\n type TaskCapsule,\n} from './capsule.js';\nimport { buildCapsuleDelta, isEmptyCapsuleDelta, type CapsuleDelta } from './capsule-delta.js';\nimport {\n createDiscoveryGateState,\n gateDiscoveryTool,\n recordDiscoveryGateOutcome,\n} from './advanced-mode.js';\nimport { materializeWorktreeGraph } from './worktree-overlay.js';\nimport { buildAgentMessages } from './prompt.js';\nimport {\n AGENT_TOOLS,\n executeTool,\n type AskUserRequest,\n type MutatingAction,\n type ShellResult,\n type ToolContext,\n type ToolResult,\n} from './tools.js';\nimport { localGraphBackend, type GraphBackend } from './graph-backend.js';\nimport type { ModelExecutionProfile } from '../runtime/model-execution-profile.js';\nimport { SessionOverlay } from './overlay.js';\nimport { materializeSessionGraph } from './session-graph.js';\nimport { compileVerificationLadder, runVerificationLadder } from './verify-ladder.js';\nimport { buildFailureCapsule, type FailureCapsule } from './failure-capsule.js';\nimport {\n createTrajectoryCollector,\n DISCOVERY_TOOLS,\n MUTATION_TOOLS,\n type TrajectoryRecord,\n} from './trajectory.js';\nimport {\n buildRunProvenance,\n CONTEXT_POLICY_VERSION,\n type RunProvenance,\n} from './run-provenance.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { repositoryIdFromRoot } from '../runtime/paths.js';\nimport type { SymbolSpan } from './apply.js';\nimport type { CodeFs } from './session.js';\nimport type { ChatMessage, CodeContext, FileChange, Provider, ProviderResult, ToolCall, ToolSpec } from './types.js';\nimport type { VgGraph } from '../schema.js';\nimport { redactSecrets } from './providers.js';\nimport { patchIrGbnf, shouldUsePatchIrGrammar } from './patch-ir-grammar.js';\nimport {\n answerLocateInstruction,\n isLocateOnlyInstruction,\n sanitizeAgentDisplayText,\n} from './locate-answer.js';\nimport { buildIdentifierTrieFromGraph } from '../runtime/identifier-trie.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport { graphDraftCandidates, KvBlockRegistry } from '../runtime/kv-cache.js';\n\nexport type { CapsuleSummary, RunProvenance };\nexport { CONTEXT_POLICY_VERSION };\n\nexport interface AgentMetrics {\n discoveryToolCalls: number;\n mutationToolCalls: number;\n shellCommands: number;\n znsAt1: boolean;\n usedCapsule: boolean;\n failureCapsuleBuilt: boolean;\n trajectory: TrajectoryRecord;\n}\n\nexport type AgentEvent =\n | { type: 'assistant'; text: string }\n | { type: 'token'; text: string }\n | { type: 'tool-call'; name: string; args: Record<string, unknown> }\n | { type: 'tool-result'; name: string; content: string; mutated: boolean }\n | { type: 'change'; change: FileChange }\n | { type: 'compact'; droppedRounds: number }\n | { type: 'usage'; promptTokens: number; completionTokens: number }\n | { type: 'verify'; command: string; passed: boolean }\n | { type: 'ladder'; ok: boolean; summary: string }\n | { type: 'session-graph'; reparsed: number; dirty: number }\n | { type: 'step'; n: number }\n | { type: 'capsule'; summary: CapsuleSummary }\n | { type: 'capsule-delta'; delta: CapsuleDelta }\n | { type: 'failure-capsule'; capsule: FailureCapsule }\n | { type: 'checkpoint'; ref: string; commit: string; seq: number; files: string[] }\n | { type: 'metrics'; metrics: AgentMetrics };\n\nexport interface AgentOptions {\n graph: VgGraph;\n root: string;\n instruction: string;\n providers: Provider[];\n fsImpl: CodeFs;\n /** Run a shell command (injected). Prefer {@link executionEnv} when set. */\n run: (command: string) => ShellResult;\n /**\n * Security ladder substrate for shell (ADR-002). When set, `run_command` and\n * verify steps use `executionEnv.run` instead of the bare `run` callback.\n */\n executionEnv?: { tier: string; label: string; reason: string; run: (command: string, opts: { cwd: string }) => ShellResult };\n /**\n * Graph query backend (vgd ActiveGraph when a daemon session is attached).\n * When omitted, tools use the in-process {@link graph}.\n */\n graphBackend?: GraphBackend;\n /** Resolved Model Execution Profile (capsule budget / repair knobs). */\n modelProfile?: ModelExecutionProfile;\n /**\n * Extra pinned facts for Task Capsules (e.g. high-confidence federation\n * bridges). Secret-free strings only.\n */\n extraPinnedFacts?: string[];\n /** Approval gate for mutating actions. */\n approve: (action: MutatingAction) => Promise<boolean>;\n /**\n * Clarifying question for the human (VS Code / stream-json). When omitted,\n * ask_user tells the model to proceed with assumptions.\n */\n askUser?: (req: AskUserRequest) => Promise<string>;\n maxSteps?: number;\n budget?: number;\n /** Approx token budget for the running transcript before it is compacted. */\n contextBudget?: number;\n /** Autonomous mode — enforce the command denylist (no human reviews each call). */\n auto?: boolean;\n /** Project-configured extra denylist rules for autonomous commands. */\n denyCommands?: string[];\n /** The project's test/verify command, surfaced to the model. */\n testCommand?: string;\n /** Auto-verify: after the model finishes, run this command and make it fix failures. */\n verify?: { command: string; maxRounds?: number };\n /** Stream assistant tokens as they arrive (emits `token` events). */\n stream?: boolean;\n /** A recap of earlier tasks (from `--continue`) to seed continuity. */\n priorSummary?: string;\n /**\n * Rendered project instructions (AGENTS.md / CLAUDE.md / .vibgrate/rules).\n * Advisory only — see {@link loadProjectRules}; they never widen permissions.\n */\n projectRules?: string;\n /**\n * Take a checkpoint just before an approved change is written, so it can be\n * undone later. Injected, so the loop stays free of git plumbing and testable\n * without a repository. Returning null (no repo, git failure) is normal and\n * never blocks the change.\n */\n checkpoint?: (files: string[]) => { ref: string; commit: string; seq: number } | null;\n /**\n * Cooperative cancellation (VG-CLI-CODE §18.2). Checked between steps, so a\n * host can stop a turn without killing a long-lived session process. Work\n * already approved and applied is kept — this stops the loop, it does not\n * roll back; use a checkpoint to undo.\n */\n signal?: { aborted: boolean };\n /**\n * External / built-in MCP tools the model may also call (approval-bound for\n * non-read-only remote tools). Always include local `vg serve` tools via\n * {@link createVgBuiltinMcpTools} so the agent has the installed CLI surface.\n */\n externalTools?: {\n specs: ToolSpec[];\n owns: (name: string) => boolean;\n execute: (call: ToolCall, live?: { graph: VgGraph }) => Promise<ToolResult>;\n };\n onEvent?: (e: AgentEvent) => void;\n /** Per-model savings attribution for graph-backed (`search_code`) calls. */\n attribution?: { client: string; provider?: string; model?: string };\n now?: () => number;\n /** Skip the audit record (tests / programmatic dry calls). */\n noAudit?: boolean;\n /**\n * When true (default), build an identifier trie from the graph and pass it to\n * local llama.cpp generations for unknown-identifier annotation.\n */\n identifierMask?: boolean;\n /**\n * Use a source-bearing Task Capsule for the first context (Fusion Runtime\n * Phase 0 A/B). When true, exact source ranges from the graph are included so\n * the model can solve without navigation tool calls (ZNS@1 path). Default\n * false keeps today's metadata-only context.\n */\n capsule?: boolean;\n /** Restrict context seeds to these files (from `--file`), if given. */\n files?: string[];\n /**\n * Buffer mutations in a session overlay (Phase 5). Reads see uncommitted\n * edits; the overlay is flushed before shell commands and when the run ends.\n * Default true under capsule mode, false otherwise. Set false to write the\n * base fs immediately (legacy).\n */\n overlay?: boolean;\n /**\n * Run the graph-derived verification ladder on finish (syntax + optional\n * testCommand). Default true when capsule context is used.\n */\n verifyLadder?: boolean;\n /**\n * Free use of low-level discovery tools. Default true. When false (typical\n * with capsule mode), early discovery is soft-nudged then hard-capped until\n * a mutation or inspect_change (Fusion Phase 4 ZNS@1 path).\n */\n advancedMode?: boolean;\n /**\n * Reparse git-dirty worktree files into the graph before the agent loop\n * (base ⊕ worktree). Default false (tests / CI stay offline-fast). Interactive\n * and stream-json enable this so the map matches uncommitted edits.\n */\n worktreeOverlay?: boolean;\n /**\n * When true (default), pure locate/URL-occurrence asks answer from the hybrid\n * literal sweep without calling the model — avoids PatchIR dumps in the panel.\n */\n deterministicLocate?: boolean;\n}\n\nexport type AgentStop = 'finished' | 'max-steps' | 'no-tools' | 'no-progress' | 'error' | 'cancelled';\n\nexport interface AgentResult {\n finalText: string;\n changes: FileChange[];\n steps: number;\n stopped: AgentStop;\n provider: { id: string; model: string; fellBack: boolean };\n /** Total tokens the model reported over the run (for the cost meter). */\n usage: { promptTokens: number; completionTokens: number };\n /** Trajectory / ZNS metrics for FCS reporting. */\n metrics?: AgentMetrics;\n /** Last Failure Capsule built during this run (if any). */\n failureCapsule?: FailureCapsule | null;\n /** Capsule summary when capsule mode was used. */\n capsuleSummary?: CapsuleSummary | null;\n /**\n * Run provenance (run-provenance/0): policy pin, ranking, model profile,\n * security tier, graph corpus, and content-hashed mutations.\n */\n provenance?: RunProvenance;\n}\n\nconst DEFAULT_MAX_STEPS = 24;\n/** Compact the transcript once it grows past this many estimated tokens. */\nconst DEFAULT_CONTEXT_BUDGET = 16_000;\n/** Rounds (assistant + its tool results) to keep verbatim when compacting. */\nconst KEEP_ROUNDS = 8;\n/** After this many identical, non-progressing repeats, nudge the model. */\nconst NUDGE_AT = 3;\n/** After this many, stop the run as no-progress. */\nconst STOP_AT = 5;\n\nexport async function runAgent(options: AgentOptions): Promise<AgentResult> {\n const { root, instruction, providers } = options;\n let graph = options.graph;\n const maxSteps = options.maxSteps ?? DEFAULT_MAX_STEPS;\n // MEP capsule budget can raise the first-context budget when not explicitly set.\n const budget =\n options.budget ??\n options.modelProfile?.capsuleBudgetTokens ??\n 3000;\n const contextBudget = options.contextBudget ?? DEFAULT_CONTEXT_BUDGET;\n const now = options.now ?? (() => 0);\n const onEvent = options.onEvent ?? (() => {});\n const verifyConfig =\n options.verify && options.modelProfile?.maxRepairRounds != null && options.verify.maxRounds == null\n ? { ...options.verify, maxRounds: options.modelProfile.maxRepairRounds }\n : options.verify;\n\n // Identifier trie for local constrained backends (Approach B); optional off switch.\n const identifierTrie: TrieNode | undefined =\n options.identifierMask === false ? undefined : buildIdentifierTrieFromGraph(graph);\n // Capsule/system prefix KV plan registry for host-level reuse (planning layer).\n const kvRegistry = new KvBlockRegistry();\n // Speculative drafts: verbatim signatures / qualified names the graph already knows.\n const draftCandidates = graphDraftCandidates(\n graph.nodes\n .flatMap((n) => [n.signature, n.qualifiedName, n.name].filter(Boolean) as string[])\n .filter((s) => s.includes('(') || s.includes('function') || s.includes('class') || s.length > 12),\n 12,\n );\n\n // Worktree overlay: reparse git-dirty files so the map matches the working tree.\n const useWorktree = options.worktreeOverlay === true;\n if (useWorktree) {\n try {\n const wt = await materializeWorktreeGraph(graph, root);\n if (wt.reparsed.length || wt.deleted.length) {\n graph = wt.graph;\n onEvent({\n type: 'session-graph',\n reparsed: wt.reparsed.length,\n dirty: wt.dirtyFiles.length,\n });\n }\n } catch {\n /* worktree overlay is best-effort */\n }\n }\n\n // Session overlay: tools read/write the overlay; shell + finish flush to base.\n const useOverlay = options.overlay ?? !!options.capsule;\n const overlay = useOverlay ? new SessionOverlay(options.fsImpl) : null;\n const fsImpl: CodeFs = overlay ?? options.fsImpl;\n const flushOverlay = (): void => {\n overlay?.flush();\n };\n\n // Capsule-first runs default to non-advanced discovery (ZNS@1 path).\n const advancedMode = options.advancedMode ?? !options.capsule;\n const discoveryGate = createDiscoveryGateState();\n\n const allTools = [...AGENT_TOOLS, ...(options.externalTools?.specs ?? [])];\n const built = buildAgentContext(graph, instruction, { ...options, fsImpl, budget });\n const context = built.context;\n let capsule = built.capsule;\n const useLadder = options.verifyLadder ?? !!capsule;\n const messages: ChatMessage[] = buildAgentMessages(context);\n // Project instructions sit after the repo context and before the recap: the\n // model should read house style before it reads what it already did.\n if (options.projectRules) {\n messages.push({ role: 'user', content: options.projectRules });\n }\n if (options.priorSummary) {\n messages.push({ role: 'user', content: options.priorSummary });\n }\n if (options.testCommand) {\n messages.push({ role: 'user', content: `When you want to verify a change, the project's test command is: \\`${options.testCommand}\\`` });\n }\n // Locate-only (URL / \"where is …?\"): never force PatchIR grammar — the model\n // would dump JSON edits into the panel. Prefer a deterministic literal answer.\n const locateOnly = isLocateOnlyInstruction(instruction);\n const spans = buildSpanIndex(graph);\n\n const changes: FileChange[] = [];\n const repeats = new Map<string, number>();\n let recordedSearch = false;\n let commandCount = 0;\n let verifyRounds = verifyConfig?.maxRounds ?? 2;\n let lastVerifyPassed = true;\n /** Last verification ladder / command outcomes for run provenance. */\n let lastVerification: Array<{\n kind: string;\n command?: string | null;\n passed: boolean;\n diagnostic?: string | null;\n }> = [];\n let lastFailureCapsule: FailureCapsule | null = null;\n const usage = { promptTokens: 0, completionTokens: 0 };\n let providerInfo = { id: providers[0]?.id ?? 'none', model: providers[0]?.model ?? '', fellBack: false };\n const trajectory = createTrajectoryCollector();\n let currentStep = 0;\n const capsuleSummary = capsule ? summarizeCapsule(capsule) : null;\n if (capsuleSummary) onEvent({ type: 'capsule', summary: capsuleSummary });\n\n // Deterministic locate short-circuit: correct file:line without model noise\n // (and without PatchIR / identifier-annotation dumps in the VG Code panel).\n if (locateOnly && options.deterministicLocate !== false) {\n try {\n const locate = await answerLocateInstruction(graph, root, instruction, 30);\n providerInfo = { id: 'deterministic-locate', model: 'literal-sweep', fellBack: false };\n onEvent({ type: 'assistant', text: locate.summary });\n const traj = trajectory.finalize({\n taskId: instruction.slice(0, 48),\n arm: capsule ? 'capsule' : 'metadata',\n solved: true,\n verified: true,\n steps: 0,\n stopped: 'finished',\n inferenceTurns: 0,\n filesChanged: 0,\n usedCapsule: !!capsule,\n provider: { id: 'deterministic-locate', model: 'literal-sweep' },\n });\n const earlyMetrics: AgentMetrics = {\n discoveryToolCalls: 0,\n mutationToolCalls: 0,\n shellCommands: 0,\n znsAt1: true,\n usedCapsule: !!capsule,\n failureCapsuleBuilt: false,\n trajectory: traj,\n };\n onEvent({ type: 'metrics', metrics: earlyMetrics });\n return {\n finalText: locate.summary,\n changes: [],\n steps: 0,\n stopped: 'finished',\n provider: providerInfo,\n usage,\n metrics: earlyMetrics,\n failureCapsule: null,\n capsuleSummary,\n provenance: buildRunProvenance({\n modelProfileId: options.modelProfile?.id ?? capsule?.provenance.modelProfileId ?? null,\n securityTier:\n options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? capsule?.provenance.securityTier ?? null,\n graphCorpusHash: capsule?.provenance.graphCorpusHash ?? graph.provenance?.corpusHash ?? null,\n rankingVersion: capsule?.provenance.rankingVersion ?? CAPSULE_RANKING_VERSION,\n policyVersion: capsule?.provenance.policyVersion ?? CONTEXT_POLICY_VERSION,\n changes: [],\n verification: [],\n }),\n };\n } catch {\n /* fall through to the model loop if the tree scan fails */\n }\n }\n\n const runShell = (command: string): ShellResult => {\n if (options.executionEnv) return options.executionEnv.run(command, { cwd: root });\n return options.run(command);\n };\n\n /** Files a mutating action will touch, for the checkpoint record. */\n const actionFiles = (action: MutatingAction): string[] => {\n if (action.kind === 'patch') return action.files.map((f) => f.file);\n return 'file' in action && action.file ? [action.file] : [];\n };\n\n /**\n * Approval gate, plus a checkpoint. The snapshot is taken *after* the user\n * consents and *before* the write lands, so restoring returns the tree to\n * the state it was in just before this change — which is what \"undo this\n * edit\" has to mean. Snapshots only happen for changes that touch files;\n * a command approval has nothing to restore.\n */\n const approveAndCheckpoint = async (action: MutatingAction): Promise<boolean> => {\n const approved = await options.approve(action);\n if (!approved || !options.checkpoint) return approved;\n const files = actionFiles(action);\n if (!files.length) return approved;\n try {\n const cp = options.checkpoint(files);\n if (cp) onEvent({ type: 'checkpoint', ...cp, files });\n } catch {\n /* a checkpoint is a convenience — never fail an approved change over it */\n }\n return approved;\n };\n\n const ctx: ToolContext = {\n root,\n graph,\n fsImpl,\n spans,\n run: runShell,\n approve: approveAndCheckpoint,\n askUser: options.askUser,\n auto: options.auto,\n denyCommands: options.denyCommands,\n capsule,\n getTaskCapsule: () => capsule,\n graphBackend: options.graphBackend,\n dirtyFiles: () => (overlay ? overlay.dirtyFiles() : []),\n changedFiles: () => changes.map((c) => c.file),\n // B3: enforce-before-apply against the live graph trie.\n identifierTrie: identifierTrie ?? null,\n enforceIdentifiers: options.identifierMask !== false,\n };\n\n /** Recompute the tool-visible graph from the session overlay after mutations. */\n const refreshSessionGraph = async (): Promise<void> => {\n if (!overlay || !overlay.isDirty()) return;\n try {\n const session = await materializeSessionGraph(graph, overlay);\n ctx.graph = session.graph;\n // Uncommitted overlay content is only on the local session graph — not in vgd.\n ctx.graphBackend = localGraphBackend(session.graph);\n // Keep enforce trie aligned with session-visible symbols (new symbols from approved edits become legal).\n if (options.identifierMask !== false) {\n ctx.identifierTrie = buildIdentifierTrieFromGraph(session.graph);\n }\n const next = buildSpanIndex(session.graph);\n ctx.spans.clear();\n for (const [k, v] of next) ctx.spans.set(k, v);\n onEvent({ type: 'session-graph', reparsed: session.reparsed.length, dirty: session.deleted.length + session.rewritten.length });\n // Capsule delta: recompile from session-visible files when capsule mode is on.\n if (options.capsule && capsule) {\n try {\n const nextCapsule = buildTaskCapsule(session.graph, instruction, {\n budget,\n files: options.files,\n readFile: (rel) => fsImpl.read(rel),\n repositoryId: repositoryIdFromRoot(root),\n provenance: {\n modelProfileId: options.modelProfile?.id ?? null,\n securityTier: options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? null,\n },\n });\n const delta = buildCapsuleDelta(capsule, nextCapsule);\n capsule = nextCapsule;\n ctx.capsule = nextCapsule;\n if (!isEmptyCapsuleDelta(delta)) {\n onEvent({ type: 'capsule-delta', delta });\n messages.push({ role: 'user', content: delta.rendered.slice(0, 6000) });\n }\n } catch {\n /* capsule refresh is best-effort */\n }\n }\n } catch {\n /* session graph is best-effort — keep baseline map */\n }\n };\n\n const emitFailure = (fc: FailureCapsule): void => {\n lastFailureCapsule = fc;\n trajectory.markFailureCapsule();\n onEvent({ type: 'failure-capsule', capsule: fc });\n };\n\n /** Single terminal path: flush overlay, write audit once, then return. */\n const finish = (stopped: AgentStop, finalText: string, steps: number): AgentResult => {\n flushOverlay();\n const solved = stopped === 'finished' && lastVerifyPassed;\n const traj = trajectory.finalize({\n taskId: options.attribution?.client ? `${options.attribution.client}:${instruction.slice(0, 40)}` : instruction.slice(0, 48),\n arm: capsule ? 'capsule' : 'metadata',\n solved,\n verified: lastVerifyPassed,\n steps,\n stopped,\n inferenceTurns: currentStep || steps,\n filesChanged: changes.length,\n usedCapsule: !!capsule,\n provider: { id: providerInfo.id, model: providerInfo.model },\n });\n const metrics: AgentMetrics = {\n discoveryToolCalls: traj.discoveryToolCalls,\n mutationToolCalls: traj.mutationToolCalls,\n shellCommands: traj.shellCommands,\n znsAt1: traj.znsAt1,\n usedCapsule: !!capsule,\n failureCapsuleBuilt: traj.failureCapsuleBuilt,\n trajectory: traj,\n };\n onEvent({ type: 'metrics', metrics });\n const result: AgentResult = {\n finalText,\n changes,\n steps,\n stopped,\n provider: providerInfo,\n usage,\n metrics,\n failureCapsule: lastFailureCapsule,\n capsuleSummary: capsule ? summarizeCapsule(capsule) : capsuleSummary,\n provenance: buildRunProvenance({\n modelProfileId: options.modelProfile?.id ?? capsule?.provenance.modelProfileId ?? null,\n securityTier:\n options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? capsule?.provenance.securityTier ?? null,\n graphCorpusHash: capsule?.provenance.graphCorpusHash ?? graph.provenance?.corpusHash ?? null,\n rankingVersion: capsule?.provenance.rankingVersion ?? CAPSULE_RANKING_VERSION,\n policyVersion: capsule?.provenance.policyVersion ?? CONTEXT_POLICY_VERSION,\n changes,\n verification: lastVerification,\n }),\n };\n if (!options.noAudit) {\n writeAgentAudit(\n options.fsImpl,\n {\n instruction,\n providerInfo,\n changes,\n commandCount,\n steps,\n stopped,\n provenance: result.provenance,\n },\n now(),\n );\n }\n return result;\n };\n\n /**\n * On finish: graph-derived ladder (syntax / hints / testCommand), then optional\n * explicit verify command. Failure feeds a Failure Capsule + retries while rounds remain.\n */\n const verifyOnFinish = (): 'retry' | 'done' => {\n if (changes.length === 0) return 'done';\n\n if (useLadder && capsule) {\n const steps = compileVerificationLadder(capsule.verificationPlan, {\n testCommand: verifyConfig?.command ?? options.testCommand,\n });\n // Shell steps need real files — flush before the ladder.\n flushOverlay();\n const ladder = runVerificationLadder(steps, {\n readFile: (f) => options.fsImpl.read(f),\n run: runShell,\n // Prefer the dedicated verify command path below when both are set, so we\n // don't double-run the same test command.\n runCommands: !verifyConfig?.command,\n });\n const summary = ladder.steps.map((s) => `${s.ok ? '✔' : '✗'} ${s.message}`).join('\\n');\n onEvent({ type: 'ladder', ok: ladder.ok, summary });\n lastVerification = ladder.steps.map((s) => ({\n kind: s.step?.kind ?? 'ladder',\n command: s.step && 'command' in s.step ? (s.step as { command?: string }).command ?? null : null,\n passed: !!s.ok,\n diagnostic: s.message ?? null,\n }));\n if (!ladder.ok) {\n lastVerifyPassed = false;\n const fc = buildFailureCapsule({\n ladderSteps: ladder.steps,\n capsule,\n changedFiles: changes.map((c) => c.file),\n modelId: providerInfo.model,\n policyVersion: CONTEXT_POLICY_VERSION,\n });\n emitFailure(fc);\n if (verifyRounds <= 0) return 'done';\n verifyRounds--;\n messages.push({\n role: 'user',\n content: `The task isn't finished — verification ladder failed.\\n\\n${fc.rendered.slice(0, 8000)}\\n\\nFix the issues, then call finish again.${verifyRounds === 0 ? ' (last verification attempt)' : ''}`,\n });\n return 'retry';\n }\n }\n\n const v = verifyConfig;\n if (!v || verifyRounds <= 0) {\n lastVerifyPassed = true;\n return 'done';\n }\n flushOverlay();\n const res = runShell(v.command);\n onEvent({ type: 'verify', command: v.command, passed: res.exitCode === 0 });\n lastVerification = [\n ...lastVerification,\n {\n kind: 'command',\n command: v.command,\n passed: res.exitCode === 0,\n diagnostic: res.stdout?.slice(0, 4000) ?? null,\n },\n ];\n if (res.exitCode === 0) {\n lastVerifyPassed = true;\n return 'done';\n }\n lastVerifyPassed = false;\n const fc = buildFailureCapsule({\n verify: { command: v.command, exitCode: res.exitCode, stdout: res.stdout },\n capsule,\n changedFiles: changes.map((c) => c.file),\n modelId: providerInfo.model,\n policyVersion: CONTEXT_POLICY_VERSION,\n });\n emitFailure(fc);\n verifyRounds--;\n messages.push({\n role: 'user',\n content: `The task isn't finished — \\`${v.command}\\` failed (exit ${res.exitCode}).\\n\\n${fc.rendered.slice(0, 8000)}\\n\\nFix the failing tests, then call finish again.${verifyRounds === 0 ? ' (last verification attempt)' : ''}`,\n });\n return 'retry';\n };\n\n for (let step = 1; step <= maxSteps; step++) {\n // Cooperative cancel: checked before any model call or tool, so a stopped\n // turn never starts new work. Applied mutations stay applied.\n if (options.signal?.aborted) {\n return finish('cancelled', 'stopped at your request', step - 1);\n }\n currentStep = step;\n onEvent({ type: 'step', n: step });\n\n // Keep the transcript under the budget: preserve the cache-stable prefix\n // (system + graph context + task) and the recent rounds, summarize the rest.\n const compacted = compact(messages, contextBudget, changes);\n if (compacted.droppedRounds > 0) {\n messages.length = 0;\n messages.push(...compacted.messages);\n onEvent({ type: 'compact', droppedRounds: compacted.droppedRounds });\n }\n\n let result: ProviderResult;\n try {\n // Mark stable prefix blocks warm after first turn for KV plan metrics (no native KV yet).\n if (kvRegistry.size() === 0 && messages.length >= 2) {\n kvRegistry.commit(\n messages.slice(0, Math.min(3, messages.length)).map((m, i) => ({\n kind: i === 0 ? 'system' : 'context',\n text: typeof m.content === 'string' ? m.content : '',\n })),\n );\n }\n const promptSegments = messages.map((m, i) => ({\n kind: m.role === 'system' ? 'system' : i < 3 ? 'context' : m.role === 'user' ? 'user' : 'assistant',\n text: typeof m.content === 'string' ? m.content : '',\n }));\n const c = await complete(\n providers,\n messages,\n allTools,\n onEvent,\n options.stream,\n options.modelProfile,\n identifierTrie,\n draftCandidates,\n promptSegments,\n /* skipPatchIrGrammar */ locateOnly,\n );\n result = c.result;\n providerInfo = { id: c.provider.id, model: c.provider.model, fellBack: c.fellBack };\n } catch (e) {\n const msg = redactSecrets((e as Error).message);\n onEvent({ type: 'assistant', text: `error: ${msg}` });\n return finish('error', msg, step);\n }\n\n // Accumulate token usage for the cost meter.\n if (result.usage) {\n usage.promptTokens += result.usage.promptTokens ?? 0;\n usage.completionTokens += result.usage.completionTokens ?? 0;\n trajectory.recordUsage(result.usage.promptTokens ?? 0, result.usage.completionTokens ?? 0);\n onEvent({ type: 'usage', promptTokens: result.usage.promptTokens ?? 0, completionTokens: result.usage.completionTokens ?? 0 });\n }\n\n const displayText = sanitizeAgentDisplayText(result.text ?? '');\n if (displayText) onEvent({ type: 'assistant', text: displayText });\n\n const toolCalls = result.toolCalls ?? [];\n if (toolCalls.length === 0) {\n messages.push({ role: 'assistant', content: result.text });\n // Clean prose/Markdown answer (Q&A, explanations) is a successful finish —\n // same as Claude Code free-text, not a failed no-tools dump.\n if (isUserFacingProse(displayText)) {\n return finish('finished', displayText, step);\n }\n return finish('no-tools', displayText || 'done', step);\n }\n\n messages.push({ role: 'assistant', content: result.text, toolCalls });\n\n for (const call of toolCalls) {\n onEvent({ type: 'tool-call', name: call.name, args: call.arguments });\n if (call.name === 'search_code' && options.attribution?.client && !recordedSearch) {\n recordedSearch = true;\n recordSearchSaving(root, context, options.attribution, now());\n }\n\n // Shell commands see the real tree — flush session overlay first.\n if (call.name === 'run_command') flushOverlay();\n\n // Capsule-first discovery policy (soft nudge / hard cap).\n if (!options.externalTools?.owns(call.name)) {\n const gate = gateDiscoveryTool(call.name, discoveryGate, { advancedMode });\n if (!gate.allow) {\n const blocked = { content: gate.reason, mutated: false };\n onEvent({ type: 'tool-result', name: call.name, content: blocked.content, mutated: false });\n messages.push({ role: 'tool', content: blocked.content, toolCallId: call.id, name: call.name });\n continue;\n }\n if (gate.note) {\n // Note applied after the tool result below.\n (call as { __gateNote?: string }).__gateNote = gate.note;\n }\n }\n\n const toolResult = options.externalTools?.owns(call.name)\n ? await options.externalTools.execute(call, { graph: ctx.graph })\n : await executeTool(call, ctx);\n if (!options.externalTools?.owns(call.name)) {\n recordDiscoveryGateOutcome(call.name, discoveryGate, { mutated: toolResult.mutated });\n }\n const gateNote = (call as { __gateNote?: string }).__gateNote;\n if (gateNote) toolResult.content = `${toolResult.content}\\n\\n${gateNote}`;\n if (call.name === 'run_command' && toolResult.mutated) commandCount++;\n if (toolResult.change) {\n changes.push(toolResult.change);\n onEvent({ type: 'change', change: toolResult.change });\n }\n // After an approved mutation, refresh the session graph so subsequent\n // search_code / graph_impact see uncommitted overlay content.\n if (toolResult.mutated && !toolResult.finished) {\n await refreshSessionGraph();\n }\n\n // No-progress guard: a mutating call is progress (reset); a repeated\n // non-mutating identical call accumulates → nudge, then stop.\n const sig = `${call.name}:${stableArgs(call.arguments)}`;\n let content = toolResult.content;\n let stopNoProgress = false;\n if (toolResult.mutated || toolResult.finished) {\n repeats.delete(sig);\n } else {\n const n = (repeats.get(sig) ?? 0) + 1;\n repeats.set(sig, n);\n if (n >= STOP_AT) stopNoProgress = true;\n else if (n >= NUDGE_AT) content += `\\n\\n(note: you have called this exact tool call ${n} times with no change — try a different approach, read more context, or call finish.)`;\n }\n\n trajectory.recordTool(call.name, step, toolResult.mutated);\n onEvent({ type: 'tool-result', name: call.name, content, mutated: toolResult.mutated });\n messages.push({ role: 'tool', content, toolCallId: call.id, name: call.name });\n\n if (toolResult.finished) {\n // Auto-verify: on failure, keep going so the model fixes it.\n if (verifyOnFinish() === 'retry') break;\n return finish('finished', toolResult.finalSummary ?? 'done', step);\n }\n if (stopNoProgress) return finish('no-progress', `stopped: the model repeated \\`${call.name}\\` without making progress`, step);\n }\n }\n return finish('max-steps', 'reached the step limit before finishing', maxSteps);\n}\n\n/** Try providers in order, falling back on transport failure. Throws the last actionable error. */\nasync function complete(\n providers: Provider[],\n messages: ChatMessage[],\n tools: ToolSpec[],\n onEvent: (e: AgentEvent) => void,\n stream?: boolean,\n modelProfile?: ModelExecutionProfile,\n identifierTrie?: TrieNode,\n draftCandidates?: string[],\n promptSegments?: Array<{ kind: string; text: string }>,\n skipPatchIrGrammar = false,\n): Promise<{ result: ProviderResult; provider: Provider; fellBack: boolean }> {\n if (providers.length === 0) throw new Error('no model provider available');\n const onToken = stream ? (t: string): void => onEvent({ type: 'token', text: t }) : undefined;\n // Locate/Q&A must not use PatchIR GBNF — that forces edit JSON into the panel.\n const grammar =\n !skipPatchIrGrammar && shouldUsePatchIrGrammar(modelProfile) ? patchIrGbnf() : undefined;\n // Fail-closed on embedded path when pack requires constrained decoding.\n const requireGrammar = !!(\n grammar &&\n modelProfile?.constrainedDecoding &&\n providers.some((p) => p.id === 'llama-cpp')\n );\n let lastErr: unknown;\n for (let i = 0; i < providers.length; i++) {\n try {\n const result = await providers[i].chat(messages, {\n temperature: 0,\n tools,\n stream,\n onToken,\n grammar,\n // Only require grammar on the llama-cpp provider; HTTP providers ignore it.\n requireGrammar: requireGrammar && providers[i].id === 'llama-cpp',\n identifierTrie,\n draftCandidates,\n promptSegments,\n });\n return { result, provider: providers[i], fellBack: i > 0 };\n } catch (e) {\n lastErr = e;\n }\n }\n throw new Error(lastErr instanceof Error ? redactSecrets(lastErr.message) : String(lastErr));\n}\n\n/**\n * Compact the transcript when it exceeds `budget` tokens: keep the first three\n * messages (system + graph context + task — the cache-stable prefix) and the\n * last {@link KEEP_ROUNDS} rounds verbatim, replacing the middle with a short\n * summary. A \"round\" is an assistant turn plus the tool results it triggered, so\n * an assistant/tool pair is never split (which an OpenAI-compatible API rejects).\n */\nexport function compact(messages: ChatMessage[], budget: number, changes: FileChange[]): { messages: ChatMessage[]; droppedRounds: number } {\n if (estimateTokens(messages) <= budget) return { messages, droppedRounds: 0 };\n const head = messages.slice(0, 3);\n const body = messages.slice(3);\n const rounds: ChatMessage[][] = [];\n for (const m of body) {\n if (m.role === 'assistant' || rounds.length === 0) rounds.push([m]);\n else rounds[rounds.length - 1].push(m);\n }\n if (rounds.length <= KEEP_ROUNDS) return { messages, droppedRounds: 0 };\n const dropped = rounds.slice(0, rounds.length - KEEP_ROUNDS);\n const kept = rounds.slice(-KEEP_ROUNDS).flat();\n const toolCalls = dropped.flat().reduce((n, m) => n + (m.role === 'assistant' ? (m.toolCalls?.length ?? 0) : 0), 0);\n const filesChanged = [...new Set(changes.map((c) => c.file))];\n const note: ChatMessage = {\n role: 'user',\n content: `[earlier steps summarized to save context: ${dropped.length} round(s), ${toolCalls} tool call(s) omitted.${filesChanged.length ? ` Files changed so far: ${filesChanged.join(', ')}.` : ''} Continue the task.]`,\n };\n return { messages: [...head, note, ...kept], droppedRounds: dropped.length };\n}\n\n/**\n * Assemble the first-turn context. Capsule mode injects exact source ranges\n * from graph spans (Fusion Runtime); legacy mode is metadata-only.\n * Returns the capsule when built so the verification ladder can use its plan.\n */\nfunction buildAgentContext(\n graph: VgGraph,\n instruction: string,\n options: AgentOptions,\n): { context: CodeContext; capsule: TaskCapsule | null } {\n const budget = options.budget ?? 3000;\n const files = options.files;\n if (!options.capsule) {\n return { context: buildCodeContext(graph, instruction, { budget, files }), capsule: null };\n }\n const capsule = buildTaskCapsule(graph, instruction, {\n budget,\n files,\n readFile: (rel) => options.fsImpl.read(rel),\n repositoryId: repositoryIdFromRoot(options.root),\n extraPinnedFacts: options.extraPinnedFacts,\n provenance: {\n modelProfileId: options.modelProfile?.id ?? null,\n securityTier: options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? null,\n policyVersion: CONTEXT_POLICY_VERSION,\n },\n });\n return { context: capsuleToCodeContext(capsule), capsule };\n}\n\nexport { summarizeCapsule } from './capsule.js';\n/** Re-export metric helpers used by tools (discovery set). */\nexport { DISCOVERY_TOOLS, MUTATION_TOOLS };\n\nfunction recordSearchSaving(root: string, context: CodeContext, attribution: NonNullable<AgentOptions['attribution']>, ts: number): void {\n const files = new Set(context.seeds.map((s) => s.node.file).filter(Boolean));\n recordCliCall(\n root,\n {\n tool: CLI_TOOL_ALIASES.ask,\n client: attribution.client,\n provider: attribution.provider,\n model: attribution.model,\n outcome: context.seeds.length ? 'complete' : 'miss',\n vgTokens: context.tokensEstimate,\n baselineFiles: files.size,\n },\n ts,\n );\n}\n\n/** An append-only, secret-free audit record for one agent run (no code, no output, no keys). */\nfunction writeAgentAudit(\n fsImpl: CodeFs,\n rec: {\n instruction: string;\n providerInfo: { id: string; model: string };\n changes: FileChange[];\n commandCount: number;\n steps: number;\n stopped: AgentStop;\n provenance?: RunProvenance;\n },\n ts: number,\n): void {\n try {\n fsImpl.appendAudit(\n JSON.stringify({\n ts,\n kind: 'agent',\n instruction: rec.instruction.slice(0, 500),\n provider: rec.providerInfo.id,\n model: rec.providerInfo.model,\n steps: rec.steps,\n stopped: rec.stopped,\n commands: rec.commandCount,\n files: rec.changes.map((c) => ({ file: c.file, statuses: c.outcomes.map((o) => o.status) })),\n // Content hashes only — never file bodies or secrets.\n provenance: rec.provenance\n ? {\n schemaVersion: rec.provenance.schemaVersion,\n policyVersion: rec.provenance.policyVersion,\n rankingVersion: rec.provenance.rankingVersion,\n modelProfileId: rec.provenance.modelProfileId,\n securityTier: rec.provenance.securityTier,\n graphCorpusHash: rec.provenance.graphCorpusHash,\n mutationsRootHash: rec.provenance.mutationsRootHash,\n verificationRootHash: rec.provenance.verificationRootHash ?? null,\n mutationCount: rec.provenance.mutations.length,\n verificationCount: rec.provenance.verification?.length ?? 0,\n }\n : undefined,\n }),\n );\n } catch {\n /* audit is best-effort — never fail a run on a logging problem */\n }\n}\n\n/** True when model text is a real answer, not empty/PatchIR/tool JSON. */\nfunction isUserFacingProse(text: string): boolean {\n const t = (text ?? '').trim();\n if (t.length < 12) return false;\n if (/\"schemaVersion\"\\s*:\\s*\"patch-ir\\/0\"/i.test(t)) return false;\n if (/^\\s*\\{[\\s\\S]*\"operations\"\\s*:/.test(t)) return false;\n if (!/[A-Za-z]{4,}/.test(t)) return false;\n return true;\n}\n\n/** Deterministic argument signature for the repeat guard (order-independent). */\nfunction stableArgs(args: Record<string, unknown>): string {\n const keys = Object.keys(args).sort();\n return JSON.stringify(keys.map((k) => [k, args[k]]));\n}\n\n/** ~4 chars/token estimate over the transcript, including serialized tool calls. */\nfunction estimateTokens(messages: ChatMessage[]): number {\n let chars = 0;\n for (const m of messages) {\n chars += m.content.length;\n if (m.role === 'assistant' && m.toolCalls) chars += JSON.stringify(m.toolCalls).length;\n }\n return Math.ceil(chars / 4);\n}\n\n/** Per-file symbol spans, so an agent edit lands in the right place when its SEARCH is ambiguous. */\nfunction buildSpanIndex(graph: VgGraph): Map<string, SymbolSpan[]> {\n const map = new Map<string, SymbolSpan[]>();\n for (const n of graph.nodes) {\n if (n.kind === 'file' || n.kind === 'external') continue;\n const file = n.file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n const list = map.get(file) ?? [];\n list.push({ qualifiedName: n.qualifiedName, file, start: n.span.start, end: n.span.end });\n map.set(file, list);\n }\n return map;\n}\n"]}
1
+ {"version":3,"sources":["../src/code/capsule-delta.ts","../src/code/advanced-mode.ts","../src/code/session-graph.ts","../src/code/worktree-overlay.ts","../src/code/patch-ir.ts","../src/code/apply-patch-ir.ts","../src/code/preview-sides.ts","../src/code/safety.ts","../src/code/network-policy.ts","../src/code/failure-capsule.ts","../src/code/verify-ladder.ts","../src/code/inspect-change.ts","../src/code/identifier-enforce.ts","../src/code/tools.ts","../src/code/overlay.ts","../src/code/trajectory.ts","../src/code/run-provenance.ts","../src/code/patch-ir-grammar.ts","../src/code/locate-answer.ts","../src/code/agent.ts"],"names":["normalize","readFile","lines","path","search","fc"],"mappings":"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","file":"chunk-Q7HUXIUF.js","sourcesContent":["/**\n * Task Capsule deltas (Fusion Phase 3 — subsequent-turn context).\n *\n * After mutations, recompile a capsule and emit only what changed so the model\n * does not re-pay for the full first-turn evidence. Pure over two capsules.\n */\n\nimport type { CapsuleSymbolRef, SourceSlice, TaskCapsule, VerificationPlan } from './capsule.js';\n\nexport const CAPSULE_DELTA_SCHEMA_VERSION = 'capsule-delta/0' as const;\n\nexport interface CapsuleDelta {\n schemaVersion: typeof CAPSULE_DELTA_SCHEMA_VERSION;\n /** Files whose source slices changed (content hash). */\n changedSourceFiles: string[];\n /** New primary symbols not in the previous capsule. */\n addedPrimary: Array<{ qualifiedName: string; file: string; kind: string }>;\n /** Primaries that disappeared. */\n removedPrimary: Array<{ qualifiedName: string; file: string }>;\n /** Supporting symbols newly present. */\n addedSupporting: Array<{ qualifiedName: string; file: string; kind: string }>;\n /** Verification plan notes / files that differ. */\n verificationDelta: {\n syntaxFilesAdded: string[];\n syntaxFilesRemoved: string[];\n notesAdded: string[];\n };\n /** Compact human/model-facing summary. */\n rendered: string;\n tokensEstimate: number;\n}\n\n/**\n * Diff two capsules. Deterministic given the same pair.\n */\nexport function buildCapsuleDelta(previous: TaskCapsule, next: TaskCapsule): CapsuleDelta {\n const prevPrimary = keySet(previous.primary);\n const nextPrimary = keySet(next.primary);\n const prevSupport = keySet(previous.supporting);\n const nextSupport = keySet(next.supporting);\n\n const addedPrimary = next.primary\n .filter((p) => !prevPrimary.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind }));\n const removedPrimary = previous.primary\n .filter((p) => !nextPrimary.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file }));\n const addedSupporting = next.supporting\n .filter((p) => !prevSupport.has(symKey(p)))\n .map((p) => ({ qualifiedName: p.qualifiedName, file: p.file, kind: p.kind }));\n\n const changedSourceFiles = diffSourceFiles(previous.sourceSlices, next.sourceSlices);\n const verificationDelta = diffVerification(previous.verificationPlan, next.verificationPlan);\n\n const delta: CapsuleDelta = {\n schemaVersion: CAPSULE_DELTA_SCHEMA_VERSION,\n changedSourceFiles,\n addedPrimary,\n removedPrimary,\n addedSupporting,\n verificationDelta,\n rendered: '',\n tokensEstimate: 0,\n };\n delta.rendered = renderCapsuleDelta(delta, next);\n delta.tokensEstimate = Math.max(1, Math.ceil(delta.rendered.length / 4));\n return delta;\n}\n\n/** True when the delta is empty (no model update needed). */\nexport function isEmptyCapsuleDelta(d: CapsuleDelta): boolean {\n return (\n d.changedSourceFiles.length === 0 &&\n d.addedPrimary.length === 0 &&\n d.removedPrimary.length === 0 &&\n d.addedSupporting.length === 0 &&\n d.verificationDelta.syntaxFilesAdded.length === 0 &&\n d.verificationDelta.syntaxFilesRemoved.length === 0 &&\n d.verificationDelta.notesAdded.length === 0\n );\n}\n\nfunction keySet(syms: CapsuleSymbolRef[]): Set<string> {\n return new Set(syms.map(symKey));\n}\n\nfunction symKey(p: { qualifiedName: string; file: string }): string {\n return `${p.qualifiedName}\\0${p.file}`;\n}\n\nfunction diffSourceFiles(prev: SourceSlice[], next: SourceSlice[]): string[] {\n const prevHash = new Map<string, string>();\n for (const s of prev) {\n const k = `${s.file}:${s.start}-${s.end}`;\n prevHash.set(k, s.contentHash);\n }\n const changed = new Set<string>();\n for (const s of next) {\n const k = `${s.file}:${s.start}-${s.end}`;\n const old = prevHash.get(k);\n if (old !== s.contentHash) changed.add(s.file);\n }\n // Files that vanished entirely.\n const nextFiles = new Set(next.map((s) => s.file));\n for (const s of prev) {\n if (!nextFiles.has(s.file)) changed.add(s.file);\n }\n return [...changed].sort();\n}\n\nfunction diffVerification(prev: VerificationPlan, next: VerificationPlan): CapsuleDelta['verificationDelta'] {\n const prevFiles = new Set(prev.syntaxFiles);\n const nextFiles = new Set(next.syntaxFiles);\n const prevNotes = new Set(prev.notes);\n return {\n syntaxFilesAdded: next.syntaxFiles.filter((f) => !prevFiles.has(f)).sort(),\n syntaxFilesRemoved: prev.syntaxFiles.filter((f) => !nextFiles.has(f)).sort(),\n notesAdded: next.notes.filter((n) => !prevNotes.has(n)),\n };\n}\n\nfunction renderCapsuleDelta(d: CapsuleDelta, next: TaskCapsule): string {\n const lines: string[] = [\n '## Capsule delta (since last context)',\n `Instruction: ${next.instruction}`,\n ];\n if (d.changedSourceFiles.length) {\n lines.push(`Source updated: ${d.changedSourceFiles.join(', ')}`);\n }\n if (d.addedPrimary.length) {\n lines.push('New primary:');\n for (const p of d.addedPrimary) lines.push(`- ${p.qualifiedName} (${p.kind}) ${p.file}`);\n }\n if (d.removedPrimary.length) {\n lines.push('Removed primary:');\n for (const p of d.removedPrimary) lines.push(`- ${p.qualifiedName} ${p.file}`);\n }\n if (d.addedSupporting.length) {\n lines.push('New supporting:');\n for (const p of d.addedSupporting.slice(0, 8)) lines.push(`- ${p.qualifiedName} ${p.file}`);\n }\n if (d.verificationDelta.syntaxFilesAdded.length || d.verificationDelta.notesAdded.length) {\n lines.push('Verification plan updates:');\n for (const f of d.verificationDelta.syntaxFilesAdded) lines.push(`- +syntax ${f}`);\n for (const n of d.verificationDelta.notesAdded.slice(0, 4)) lines.push(`- +note ${n}`);\n }\n if (isEmptyCapsuleDelta(d)) {\n lines.push('(no structural capsule changes)');\n }\n // Include re-rendered slices for changed files only (bounded).\n const changed = new Set(d.changedSourceFiles);\n const slices = next.sourceSlices.filter((s) => changed.has(s.file)).slice(0, 6);\n if (slices.length) {\n lines.push('', '### Updated source slices');\n for (const s of slices) {\n lines.push(`\\`\\`\\`${s.file}:${s.start}-${s.end}`, s.content, '```');\n }\n }\n return lines.join('\\n');\n}\n","/**\n * Discovery-tool gating for capsule-first runs (Fusion Phase 4).\n *\n * Under Task Capsule context the model should solve from source evidence first\n * (ZNS@1 path). Low-level discovery tools remain available as rescue, but we\n * soft-nudge on early overuse and optionally hard-cap discovery until a\n * mutation or inspect_change has run.\n *\n * Pure counters — unit-tested without a model.\n */\n\nexport const DISCOVERY_TOOL_NAMES = new Set([\n 'search_code',\n 'read_file',\n 'list_files',\n 'graph_impact',\n 'library_docs',\n]);\n\nexport interface DiscoveryGateOptions {\n /**\n * When true (default for non-capsule runs), every tool is free.\n * When false, apply soft/hard discovery limits.\n */\n advancedMode: boolean;\n /** Soft nudge after this many discovery calls (default 2). */\n softLimit?: number;\n /** Hard block discovery after this many calls until progress (default 6). 0 = never hard-block. */\n hardLimit?: number;\n}\n\nexport interface DiscoveryGateState {\n discoveryCount: number;\n mutations: number;\n inspectChangeUsed: boolean;\n}\n\nexport type DiscoveryGateDecision =\n | { allow: true; note?: string }\n | { allow: false; reason: string };\n\nexport function createDiscoveryGateState(): DiscoveryGateState {\n return { discoveryCount: 0, mutations: 0, inspectChangeUsed: false };\n}\n\n/**\n * Decide whether a tool call may proceed under the discovery policy.\n * Call {@link recordDiscoveryGateOutcome} after the tool runs.\n */\nexport function gateDiscoveryTool(\n name: string,\n state: DiscoveryGateState,\n options: DiscoveryGateOptions,\n): DiscoveryGateDecision {\n if (options.advancedMode) return { allow: true };\n if (!DISCOVERY_TOOL_NAMES.has(name)) return { allow: true };\n\n // After real progress, discovery is unrestricted (repair / follow-up).\n if (state.mutations > 0 || state.inspectChangeUsed) return { allow: true };\n\n const soft = options.softLimit ?? 2;\n const hard = options.hardLimit ?? 6;\n\n if (hard > 0 && state.discoveryCount >= hard) {\n return {\n allow: false,\n reason:\n `Discovery tools are limited for capsule-first runs (${hard} free calls used). ` +\n `Use inspect_task / inspect_change / apply_patch / edit_file with the capsule evidence, ` +\n `or re-run with advanced mode if you need free search.`,\n };\n }\n\n if (state.discoveryCount >= soft) {\n return {\n allow: true,\n note:\n `(capsule-first) Prefer the Task Capsule evidence over further navigation. ` +\n `Call inspect_change before multi-file edits. Discovery calls so far: ${state.discoveryCount + 1}.`,\n };\n }\n\n return { allow: true };\n}\n\n/** Update counters after a tool completes (or is blocked — do not call if blocked). */\nexport function recordDiscoveryGateOutcome(\n name: string,\n state: DiscoveryGateState,\n result: { mutated: boolean },\n): void {\n if (DISCOVERY_TOOL_NAMES.has(name)) state.discoveryCount++;\n if (result.mutated) state.mutations++;\n if (name === 'inspect_change') state.inspectChangeUsed = true;\n}\n","/**\n * Session graph (Fusion Runtime Phase 5).\n *\n * Materializes a code-map **view** that reflects the session overlay:\n * deleted overlay files drop their nodes/edges; written files are re-parsed\n * (when a parser is available) and merged so `search_code` / `graph_impact`\n * see the agent's uncommitted edits, not only the on-disk baseline.\n *\n * Deterministic given (base graph, overlay snapshot, reparses). Failures to\n * reparse a dirty file fall back to stripping that file's prior nodes (never\n * invent symbols).\n */\n\nimport { resolve } from '../engine/resolve.js';\nimport { parseSource } from '../engine/parse.js';\nimport { langForExtension } from '../engine/languages.js';\nimport type { FileParse } from '../engine/types.js';\nimport type { GraphEdge, GraphNode, VgGraph } from '../schema.js';\nimport type { OverlayEntry } from './overlay.js';\nimport type { SessionOverlay } from './overlay.js';\n\nexport interface SessionGraphResult {\n graph: VgGraph;\n /** Overlay paths that were deleted in this view. */\n deleted: string[];\n /** Overlay paths that were rewritten (with or without successful reparse). */\n rewritten: string[];\n /** Paths successfully re-parsed into the session graph. */\n reparsed: string[];\n}\n\nexport type SessionParseFn = (rel: string, source: string, langId: string) => Promise<FileParse>;\n\n/**\n * Build a session-scoped graph from the baseline map + overlay.\n * When `parseFile` is omitted, uses {@link parseSource} (tree-sitter).\n */\nexport async function materializeSessionGraph(\n base: VgGraph,\n overlay: SessionOverlay,\n options: { parseFile?: SessionParseFn } = {},\n): Promise<SessionGraphResult> {\n return applyOverlayToGraph(base, overlay.snapshot(), {\n parseFile: options.parseFile ?? defaultParse,\n readContent: (rel) => {\n const entry = overlay.snapshot().get(normalize(rel));\n if (!entry) return null;\n if (entry.kind === 'delete') return null;\n return entry.content;\n },\n });\n}\n\n/**\n * Pure-ish core (async only for parse). `dirty` is the overlay snapshot.\n */\nexport async function applyOverlayToGraph(\n base: VgGraph,\n dirty: Map<string, OverlayEntry>,\n options: {\n parseFile?: SessionParseFn;\n /** Content for rewritten files (required for reparse). */\n readContent?: (rel: string) => string | null;\n } = {},\n): Promise<SessionGraphResult> {\n if (dirty.size === 0) {\n return { graph: base, deleted: [], rewritten: [], reparsed: [] };\n }\n\n const deleted: string[] = [];\n const rewritten: string[] = [];\n for (const [file, entry] of [...dirty.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n if (entry.kind === 'delete') deleted.push(file);\n else rewritten.push(file);\n }\n\n const drop = new Set([...deleted, ...rewritten].map(normalize));\n\n // 1) Strip every node that lives in a dirty path; drop edges that touch them.\n const keptNodes = base.nodes.filter((n) => !drop.has(normalize(n.file)));\n const keptIds = new Set(keptNodes.map((n) => n.id));\n const keptEdges = base.edges.filter((e) => keptIds.has(e.src) && keptIds.has(e.dst));\n\n // 2) Reparse rewritten files and merge heuristic nodes/edges.\n const reparsed: string[] = [];\n const newNodes: GraphNode[] = [];\n const newEdges: GraphEdge[] = [];\n const parseFile = options.parseFile;\n const readContent = options.readContent;\n\n if (parseFile && readContent) {\n for (const file of rewritten) {\n const content = readContent(file);\n if (content === null) continue;\n const lang = langIdFor(file);\n if (!lang) continue;\n try {\n const fp = await parseFile(file, content, lang);\n const resolved = resolve([fp]);\n // Fill analysis defaults for session-only nodes (base graph already analysed).\n for (const n of resolved.nodes) {\n newNodes.push(withAnalysisDefaults(n));\n }\n for (const e of resolved.edges) {\n newEdges.push(e);\n }\n reparsed.push(file);\n } catch {\n // Reparse failed — file stays stripped (no stale symbols).\n }\n }\n }\n\n const nodes = [...keptNodes, ...newNodes].sort((a, b) => a.id.localeCompare(b.id));\n const edges = [...keptEdges, ...newEdges].sort((a, b) => a.id.localeCompare(b.id));\n const nodeIds = new Set(nodes.map((n) => n.id));\n const edgesFinal = edges.filter((e) => nodeIds.has(e.src) && nodeIds.has(e.dst));\n\n const graph: VgGraph = {\n ...base,\n nodes,\n edges: edgesFinal,\n meta: {\n ...base.meta,\n counts: {\n ...base.meta.counts,\n nodes: nodes.length,\n edges: edgesFinal.length,\n },\n },\n provenance: {\n ...base.provenance,\n // Session view fingerprint — not a corpus commit; consumers must not confuse with disk map.\n corpusHash: `${base.provenance.corpusHash}:session:${deleted.length}:${rewritten.length}:${reparsed.join(',')}`,\n },\n };\n\n return { graph, deleted, rewritten, reparsed };\n}\n\n/** Structural-only overlay (no parse) — deletes strip nodes; rewrites strip until reparse. */\nexport function applyOverlayStructural(base: VgGraph, dirty: Map<string, OverlayEntry>): SessionGraphResult {\n const deleted: string[] = [];\n const rewritten: string[] = [];\n for (const [file, entry] of dirty) {\n if (entry.kind === 'delete') deleted.push(normalize(file));\n else rewritten.push(normalize(file));\n }\n const drop = new Set([...deleted, ...rewritten]);\n const nodes = base.nodes.filter((n) => !drop.has(normalize(n.file)));\n const ids = new Set(nodes.map((n) => n.id));\n const edges = base.edges.filter((e) => ids.has(e.src) && ids.has(e.dst));\n return {\n graph: {\n ...base,\n nodes,\n edges,\n meta: {\n ...base.meta,\n counts: { ...base.meta.counts, nodes: nodes.length, edges: edges.length },\n },\n },\n deleted: deleted.sort(),\n rewritten: rewritten.sort(),\n reparsed: [],\n };\n}\n\nasync function defaultParse(rel: string, source: string, langId: string): Promise<FileParse> {\n return parseSource(rel, langId, source);\n}\n\nfunction langIdFor(rel: string): string | null {\n const ext = rel.includes('.') ? rel.slice(rel.lastIndexOf('.')) : '';\n const def = langForExtension(ext);\n return def?.id ?? null;\n}\n\nfunction withAnalysisDefaults(n: GraphNode): GraphNode {\n return {\n ...n,\n importance: n.importance ?? 0.5,\n centrality: n.centrality ?? { degree: 0, pagerank: 0, betweenness: 0, eigenvector: 0 },\n area: n.area ?? 0,\n isHub: n.isHub ?? false,\n tested: n.tested ?? false,\n };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Worktree overlay (Fusion Phase 5).\n *\n * The on-disk code map is keyed by git commit/branch tip. Uncommitted edits in\n * the working tree are not in that map until reparsed. This module lists dirty\n * worktree paths (via `git status --porcelain`) and builds an overlay of those\n * files so {@link applyOverlayToGraph} can produce a worktree-aware ActiveGraph\n * view: base ⊕ worktree (and later ⊕ session).\n *\n * Pure helpers are unit-tested with injectable git status / readFile.\n */\n\nimport { spawnSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { OverlayEntry } from './overlay.js';\nimport { applyOverlayToGraph, type SessionGraphResult, type SessionParseFn } from './session-graph.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface WorktreeDirtyOptions {\n /** Injectable `git status --porcelain` body (tests). */\n porcelain?: string;\n /** Max files to reparse (default 80). */\n maxFiles?: number;\n /** File extensions to include (default common source). */\n extensions?: string[];\n}\n\nconst DEFAULT_EXTS = new Set([\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.py',\n '.go',\n '.rs',\n '.java',\n '.cs',\n '.rb',\n '.kt',\n '.swift',\n]);\n\n/**\n * List relative paths changed in the worktree (modified/added/untracked).\n * Deterministic sort. Never throws — empty on non-git / errors.\n */\nexport function listWorktreeDirtyFiles(root: string, options: WorktreeDirtyOptions = {}): string[] {\n const max = options.maxFiles ?? 80;\n const exts = options.extensions ? new Set(options.extensions) : DEFAULT_EXTS;\n const body =\n options.porcelain ??\n (() => {\n try {\n const res = spawnSync('git', ['status', '--porcelain', '-uall'], {\n cwd: root,\n encoding: 'utf8',\n timeout: 15_000,\n });\n if (res.status !== 0) return '';\n return res.stdout ?? '';\n } catch {\n return '';\n }\n })();\n\n const files = new Set<string>();\n for (const line of body.split('\\n')) {\n if (!line.trim()) continue;\n // XY PATH or XY ORIG -> PATH for renames\n const ren = /^.. (.+) -> (.+)$/.exec(line);\n const raw = ren ? ren[2]! : line.slice(3).trim();\n const rel = raw.replace(/^\"|\"$/g, '').replace(/\\\\\"/g, '\"');\n if (!rel || rel.startsWith('.git/')) continue;\n const ext = path.extname(rel).toLowerCase();\n if (exts.size && !exts.has(ext)) continue;\n // Skip deleted-only paths (status D) — no content to reparse; strip via delete entry.\n files.add(rel.replace(/\\\\/g, '/'));\n }\n return [...files].sort().slice(0, max);\n}\n\n/**\n * Build overlay entries for dirty worktree files by reading disk content.\n * Deleted paths (missing on disk) become delete entries.\n */\nexport function buildWorktreeOverlayEntries(\n root: string,\n dirtyFiles: string[],\n options: { readFile?: (abs: string) => string | null } = {},\n): Map<string, OverlayEntry> {\n const read =\n options.readFile ??\n ((abs: string) => {\n try {\n return fs.readFileSync(abs, 'utf8');\n } catch {\n return null;\n }\n });\n const out = new Map<string, OverlayEntry>();\n for (const rel of dirtyFiles) {\n const abs = path.resolve(root, rel);\n const content = read(abs);\n if (content === null) out.set(normalize(rel), { kind: 'delete' });\n else out.set(normalize(rel), { kind: 'write', content });\n }\n return out;\n}\n\n/**\n * Materialize base ⊕ worktree graph. Returns base unchanged when no dirty files.\n */\nexport async function materializeWorktreeGraph(\n base: VgGraph,\n root: string,\n options: WorktreeDirtyOptions & {\n parseFile?: SessionParseFn;\n readFile?: (abs: string) => string | null;\n dirtyFiles?: string[];\n } = {},\n): Promise<SessionGraphResult & { dirtyFiles: string[] }> {\n const dirtyFiles = options.dirtyFiles ?? listWorktreeDirtyFiles(root, options);\n if (!dirtyFiles.length) {\n return { graph: base, deleted: [], rewritten: [], reparsed: [], dirtyFiles: [] };\n }\n const entries = buildWorktreeOverlayEntries(root, dirtyFiles, { readFile: options.readFile });\n const result = await applyOverlayToGraph(base, entries, {\n parseFile: options.parseFile,\n readContent: (rel) => {\n const e = entries.get(normalize(rel));\n if (!e || e.kind === 'delete') return null;\n return e.content;\n },\n });\n return { ...result, dirtyFiles };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * PatchIR — validated intermediate representation for model-proposed edits\n * (Fusion Runtime Phase 0 / 4).\n *\n * Every model-native format (search/replace blocks, whole-file create/delete,\n * future grammar-constrained JSON) normalizes here before the deterministic\n * apply engine runs. Assumptions let the engine reject stale or hallucinated\n * spans before any write.\n *\n * Schema: docs/fusion/patch-ir-v0.schema.json\n */\n\nimport type { CodeEdit } from './types.js';\n\nexport const PATCH_IR_SCHEMA_VERSION = 'patch-ir/0' as const;\n\nexport type PatchFormat =\n | 'search-replace'\n | 'whole-file'\n | 'structured-json'\n | 'grammar-constrained'\n | 'code-edit';\n\nexport type PatchOperation =\n | {\n op: 'replace-range';\n file: string;\n start: number;\n end: number;\n replacement: string;\n expectedHash?: string | null;\n anchorSymbol?: string | null;\n }\n | {\n op: 'replace-text';\n file: string;\n search: string;\n replace: string;\n anchorSymbol?: string | null;\n }\n | {\n op: 'create-file';\n file: string;\n content: string;\n }\n | {\n op: 'delete-file';\n file: string;\n }\n | {\n op: 'replace-symbol';\n symbolId: string;\n file?: string | null;\n replacement: string;\n expectedHash?: string | null;\n };\n\nexport interface PatchAssumption {\n kind: 'file-hash' | 'symbol-span' | 'symbol-exists' | 'text-present' | 'other';\n detail: string;\n file?: string | null;\n symbolId?: string | null;\n expectedHash?: string | null;\n}\n\nexport interface VerificationTarget {\n kind: 'syntax' | 'typecheck' | 'test' | 'build' | 'command';\n target: string;\n}\n\nexport interface PatchIR {\n schemaVersion: typeof PATCH_IR_SCHEMA_VERSION;\n operations: PatchOperation[];\n assumptions: PatchAssumption[];\n requestedVerification: VerificationTarget[];\n provenance: {\n modelId?: string | null;\n format: PatchFormat;\n raw?: string | null;\n };\n}\n\nexport interface PatchIRValidation {\n ok: boolean;\n errors: string[];\n}\n\n/** Lift existing {@link CodeEdit} values (from parseEdits) into PatchIR. */\nexport function codeEditsToPatchIR(\n edits: CodeEdit[],\n options: { modelId?: string | null; raw?: string | null; format?: PatchFormat } = {},\n): PatchIR {\n const operations: PatchOperation[] = edits.map((edit): PatchOperation => {\n if (edit.op === 'replace') {\n return {\n op: 'replace-text',\n file: normalizeFile(edit.file),\n search: edit.search,\n replace: edit.replace,\n anchorSymbol: edit.anchorSymbol ?? null,\n };\n }\n if (edit.op === 'create') {\n return { op: 'create-file', file: normalizeFile(edit.file), content: edit.content };\n }\n return { op: 'delete-file', file: normalizeFile(edit.file) };\n });\n\n return {\n schemaVersion: PATCH_IR_SCHEMA_VERSION,\n operations,\n assumptions: [],\n requestedVerification: [],\n provenance: {\n modelId: options.modelId ?? null,\n format: options.format ?? 'code-edit',\n raw: options.raw ?? null,\n },\n };\n}\n\n/** Lower PatchIR ops that the current apply engine understands back to CodeEdit. */\nexport function patchIRToCodeEdits(patch: PatchIR): CodeEdit[] {\n const out: CodeEdit[] = [];\n for (const op of patch.operations) {\n if (op.op === 'replace-text') {\n out.push({\n op: 'replace',\n file: op.file,\n search: op.search,\n replace: op.replace,\n anchorSymbol: op.anchorSymbol ?? undefined,\n });\n continue;\n }\n if (op.op === 'create-file') {\n out.push({ op: 'create', file: op.file, content: op.content });\n continue;\n }\n if (op.op === 'delete-file') {\n out.push({ op: 'delete', file: op.file });\n continue;\n }\n // replace-range / replace-symbol need the full PatchIR engine (Phase 4).\n }\n return out;\n}\n\n/**\n * Structural validation only — no filesystem I/O. Rejects empty patches and\n * ops missing required fields so callers fail closed before apply.\n */\nexport function validatePatchIR(patch: PatchIR): PatchIRValidation {\n const errors: string[] = [];\n if (patch.schemaVersion !== PATCH_IR_SCHEMA_VERSION) {\n errors.push(`unsupported schemaVersion: ${String(patch.schemaVersion)}`);\n }\n if (!Array.isArray(patch.operations) || patch.operations.length === 0) {\n errors.push('operations must be a non-empty array');\n } else {\n patch.operations.forEach((op, i) => {\n if (!op || typeof op !== 'object' || !('op' in op)) {\n errors.push(`operations[${i}]: missing op`);\n return;\n }\n switch (op.op) {\n case 'replace-text':\n if (!op.file?.trim()) errors.push(`operations[${i}]: replace-text requires file`);\n if (typeof op.search !== 'string') errors.push(`operations[${i}]: replace-text requires search`);\n if (typeof op.replace !== 'string') errors.push(`operations[${i}]: replace-text requires replace`);\n break;\n case 'replace-range':\n if (!op.file?.trim()) errors.push(`operations[${i}]: replace-range requires file`);\n if (!Number.isInteger(op.start) || op.start < 1) errors.push(`operations[${i}]: replace-range start must be >= 1`);\n if (!Number.isInteger(op.end) || op.end < op.start) errors.push(`operations[${i}]: replace-range end must be >= start`);\n if (typeof op.replacement !== 'string') errors.push(`operations[${i}]: replace-range requires replacement`);\n break;\n case 'create-file':\n if (!op.file?.trim()) errors.push(`operations[${i}]: create-file requires file`);\n if (typeof op.content !== 'string') errors.push(`operations[${i}]: create-file requires content`);\n break;\n case 'delete-file':\n if (!op.file?.trim()) errors.push(`operations[${i}]: delete-file requires file`);\n break;\n case 'replace-symbol':\n if (!op.symbolId?.trim()) errors.push(`operations[${i}]: replace-symbol requires symbolId`);\n if (typeof op.replacement !== 'string') errors.push(`operations[${i}]: replace-symbol requires replacement`);\n break;\n default:\n errors.push(`operations[${i}]: unknown op`);\n }\n });\n }\n return { ok: errors.length === 0, errors };\n}\n\nfunction normalizeFile(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Deterministic PatchIR apply engine (Fusion Runtime Phase 4).\n *\n * Validates structure + assumptions, then applies every operation against an\n * in-memory working copy. Either all ops that can apply are threaded in order\n * (best-effort, like applyEdits), or callers use `transactional: true` to\n * require every op to succeed before any file state is returned as \"commit\".\n *\n * No disk I/O — pure over injectables. Agent tools write only after approval.\n */\n\nimport { applyEdit, type SymbolSpan } from './apply.js';\nimport { hashString } from '../engine/hash.js';\nimport {\n patchIRToCodeEdits,\n validatePatchIR,\n type PatchAssumption,\n type PatchIR,\n type PatchOperation,\n} from './patch-ir.js';\nimport type { CodeEdit, EditOutcome } from './types.js';\n\nexport interface SymbolLocator {\n id: string;\n file: string;\n /** 1-based inclusive line range. */\n start: number;\n end: number;\n}\n\nexport interface ApplyPatchIROptions {\n readFile: (relativePath: string) => string | null;\n /** Graph symbol spans by file path (for replace-text anchors). */\n spansForFile?: (file: string) => SymbolSpan[];\n /** Resolve replace-symbol by graph node id. */\n locateSymbol?: (symbolId: string) => SymbolLocator | null;\n /**\n * When true, if any op fails (not applied / no-op that was required), return\n * ok:false and the pre-patch file snapshot (no partial commit view).\n * Default false: thread partial applies like applyEdits.\n */\n transactional?: boolean;\n}\n\nexport interface ApplyPatchIROpResult {\n index: number;\n op: PatchOperation['op'];\n file: string;\n status: EditOutcome['status'] | 'assumption-failed' | 'unsupported';\n reason?: string;\n}\n\nexport interface ApplyPatchIRResult {\n ok: boolean;\n /** Per-file before/after after applying (null after = deleted). */\n files: Map<string, { before: string | null; after: string | null }>;\n ops: ApplyPatchIROpResult[];\n errors: string[];\n}\n\n/**\n * Apply a validated PatchIR. Runs structural validation first; failed validation\n * returns ok:false with no file mutations in the result map.\n */\nexport function applyPatchIR(patch: PatchIR, options: ApplyPatchIROptions): ApplyPatchIRResult {\n const structural = validatePatchIR(patch);\n if (!structural.ok) {\n return { ok: false, files: new Map(), ops: [], errors: structural.errors };\n }\n\n const spansForFile = options.spansForFile ?? (() => []);\n const locateSymbol = options.locateSymbol ?? (() => null);\n const working = new Map<string, string | null>();\n const befores = new Map<string, string | null>();\n const ops: ApplyPatchIROpResult[] = [];\n const errors: string[] = [];\n\n const read = (file: string): string | null => {\n if (working.has(file)) return working.get(file)!;\n const before = options.readFile(file);\n befores.set(file, before);\n working.set(file, before);\n return before;\n };\n const write = (file: string, content: string | null): void => {\n if (!befores.has(file)) befores.set(file, options.readFile(file));\n working.set(file, content);\n };\n\n // Assumptions against the pre-patch snapshot (not intermediate working state).\n for (const assumption of patch.assumptions) {\n const check = checkAssumption(assumption, (f) => options.readFile(f), locateSymbol);\n if (!check.ok) {\n errors.push(check.reason ?? 'assumption failed');\n ops.push({\n index: -1,\n op: 'replace-text',\n file: assumption.file ?? '',\n status: 'assumption-failed',\n reason: check.reason,\n });\n if (options.transactional) {\n return { ok: false, files: new Map(), ops, errors };\n }\n }\n }\n if (options.transactional && errors.length) {\n return { ok: false, files: new Map(), ops, errors };\n }\n\n // Preview pass for transactional mode: apply on a copy, require all applied.\n if (options.transactional) {\n const preview = applyAll(patch.operations, read, write, spansForFile, locateSymbol, ops);\n const failed = preview.some((o) => o.status !== 'applied' && o.status !== 'no-op');\n if (failed) {\n const failErrors = preview.filter((o) => o.status !== 'applied' && o.status !== 'no-op').map((o) => o.reason ?? o.status);\n return { ok: false, files: new Map(), ops: preview, errors: failErrors };\n }\n } else {\n applyAll(patch.operations, read, write, spansForFile, locateSymbol, ops);\n }\n\n const files = new Map<string, { before: string | null; after: string | null }>();\n for (const [file, after] of working) {\n files.set(file, { before: befores.get(file) ?? null, after });\n }\n\n const hardFail = ops.some((o) => o.status === 'assumption-failed' || o.status === 'unsupported' || o.status === 'invalid' || o.status === 'not-found' || o.status === 'ambiguous' || o.status === 'conflict');\n return {\n ok: !hardFail && errors.length === 0,\n files,\n ops,\n errors,\n };\n}\n\nfunction applyAll(\n operations: PatchOperation[],\n read: (f: string) => string | null,\n write: (f: string, c: string | null) => void,\n spansForFile: (file: string) => SymbolSpan[],\n locateSymbol: (id: string) => SymbolLocator | null,\n ops: ApplyPatchIROpResult[],\n): ApplyPatchIROpResult[] {\n // Clear ops if reusing (transactional preview starts empty).\n const out = ops;\n out.length = 0;\n\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n const result = applyOne(op, i, read, write, spansForFile, locateSymbol);\n out.push(result);\n }\n return out;\n}\n\nfunction applyOne(\n op: PatchOperation,\n index: number,\n read: (f: string) => string | null,\n write: (f: string, c: string | null) => void,\n spansForFile: (file: string) => SymbolSpan[],\n locateSymbol: (id: string) => SymbolLocator | null,\n): ApplyPatchIROpResult {\n if (op.op === 'replace-text' || op.op === 'create-file' || op.op === 'delete-file') {\n const edits = patchIRToCodeEdits({\n schemaVersion: 'patch-ir/0',\n operations: [op],\n assumptions: [],\n requestedVerification: [],\n provenance: { format: 'code-edit' },\n });\n const edit = edits[0] as CodeEdit;\n const file = edit.file;\n const before = read(file);\n const { content, outcome } = applyEdit(before, edit, spansForFile(file));\n if (outcome.status === 'applied' || outcome.status === 'no-op') {\n write(file, content);\n }\n return { index, op: op.op, file, status: outcome.status, reason: outcome.reason };\n }\n\n if (op.op === 'replace-range') {\n const file = op.file;\n const before = read(file);\n if (before === null) {\n return { index, op: op.op, file, status: 'not-found', reason: `${file} does not exist` };\n }\n if (op.expectedHash) {\n const h = hashString(before);\n if (h !== op.expectedHash) {\n return { index, op: op.op, file, status: 'conflict', reason: `file hash mismatch for ${file} (stale capsule or concurrent edit)` };\n }\n }\n const lines = before.split('\\n');\n if (op.start < 1 || op.end > lines.length || op.end < op.start) {\n return { index, op: op.op, file, status: 'invalid', reason: `replace-range ${op.start}-${op.end} outside file (${lines.length} lines)` };\n }\n const next = [...lines.slice(0, op.start - 1), ...op.replacement.split('\\n'), ...lines.slice(op.end)].join('\\n');\n write(file, next);\n return { index, op: op.op, file, status: next === before ? 'no-op' : 'applied' };\n }\n\n if (op.op === 'replace-symbol') {\n const loc = locateSymbol(op.symbolId);\n if (!loc) {\n return { index, op: op.op, file: op.file ?? '', status: 'not-found', reason: `symbol ${op.symbolId} not in the map` };\n }\n const file = op.file?.trim() ? op.file : loc.file;\n if (normalize(file) !== normalize(loc.file)) {\n return { index, op: op.op, file, status: 'conflict', reason: `symbol ${op.symbolId} lives in ${loc.file}, not ${file}` };\n }\n const rangeOp: PatchOperation = {\n op: 'replace-range',\n file: loc.file,\n start: loc.start,\n end: loc.end,\n replacement: op.replacement,\n expectedHash: op.expectedHash,\n anchorSymbol: op.symbolId,\n };\n return applyOne(rangeOp, index, read, write, spansForFile, locateSymbol);\n }\n\n return { index, op: (op as PatchOperation).op, file: '', status: 'unsupported', reason: 'unknown operation' };\n}\n\nfunction checkAssumption(\n a: PatchAssumption,\n readFile: (f: string) => string | null,\n locateSymbol: (id: string) => SymbolLocator | null,\n): { ok: boolean; reason?: string } {\n switch (a.kind) {\n case 'file-hash': {\n if (!a.file || !a.expectedHash) return { ok: false, reason: 'file-hash assumption needs file and expectedHash' };\n const content = readFile(a.file);\n if (content === null) return { ok: false, reason: `assumption file-hash: ${a.file} missing` };\n if (hashString(content) !== a.expectedHash) return { ok: false, reason: `assumption file-hash failed for ${a.file}` };\n return { ok: true };\n }\n case 'text-present': {\n if (!a.file || !a.detail) return { ok: false, reason: 'text-present assumption needs file and detail' };\n const content = readFile(a.file);\n if (content === null || !content.includes(a.detail)) {\n return { ok: false, reason: `assumption text-present failed for ${a.file}` };\n }\n return { ok: true };\n }\n case 'symbol-exists': {\n if (!a.symbolId) return { ok: false, reason: 'symbol-exists assumption needs symbolId' };\n if (!locateSymbol(a.symbolId)) return { ok: false, reason: `assumption symbol-exists failed: ${a.symbolId}` };\n return { ok: true };\n }\n case 'symbol-span': {\n if (!a.symbolId) return { ok: false, reason: 'symbol-span assumption needs symbolId' };\n const loc = locateSymbol(a.symbolId);\n if (!loc) return { ok: false, reason: `assumption symbol-span: ${a.symbolId} missing` };\n if (a.file && normalize(a.file) !== normalize(loc.file)) {\n return { ok: false, reason: `assumption symbol-span file mismatch for ${a.symbolId}` };\n }\n return { ok: true };\n }\n case 'other':\n return { ok: true };\n default:\n return { ok: false, reason: `unknown assumption kind: ${String((a as PatchAssumption).kind)}` };\n }\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n\n/** Build a symbol locator map from graph nodes (id → span). */\nexport function locatorsFromGraph(nodes: Array<{ id: string; file: string; span: { start: number; end: number } }>): (symbolId: string) => SymbolLocator | null {\n const map = new Map<string, SymbolLocator>();\n for (const n of nodes) {\n map.set(n.id, { id: n.id, file: normalize(n.file), start: n.span.start, end: n.span.end });\n }\n return (id) => map.get(id) ?? null;\n}\n","/**\n * Before/after content carried on a mutating action so a host can review a\n * change in a real diff editor (VG-CLI-CODE §18.3).\n *\n * The unified diff on the action is enough to *summarize* a change, but not to\n * open it in an editor's diff view — that needs both whole sides. This is the\n * only reason the sides are carried, so they are bounded: a host that cannot be\n * given the sides falls back to the inline diff it already renders, rather than\n * a multi-megabyte frame stalling the panel.\n *\n * Content is not redacted, deliberately. These sides go to the human reviewing\n * their own files in their own editor — the same trust boundary as the diff\n * already on the action — and redacting would corrupt the very text they are\n * being asked to approve. Nothing here is sent to a model.\n */\n\n/** Per-side cap. Beyond this a host is expected to fall back to the diff. */\nexport const MAX_PREVIEW_CHARS = 256_000;\n\nexport interface PreviewSides {\n /** File content before the change; empty string for a create. */\n before: string;\n /** File content after the change; empty string for a delete. */\n after: string;\n}\n\n/**\n * Bound the sides for transport. Returns undefined when either side is too\n * large, so the caller omits the field entirely rather than sending a truncated\n * side — a half-file diff would misrepresent the change being approved.\n */\nexport function previewSides(\n before: string | null | undefined,\n after: string | null | undefined,\n): PreviewSides | undefined {\n const b = before ?? '';\n const a = after ?? '';\n if (b.length > MAX_PREVIEW_CHARS || a.length > MAX_PREVIEW_CHARS) return undefined;\n return { before: b, after: a };\n}\n","/**\n * Command safety for autonomous agent runs (VG-CLI-CODE §13).\n *\n * Interactively, `run_command` is gated by a human who sees the exact command\n * and says yes. Under `--auto` there is no human in the loop, so a small\n * denylist blocks the handful of commands that are catastrophic or exfiltrating\n * — a filesystem wipe, piping the internet into a shell, a force-push, a fork\n * bomb. This is defense-in-depth for autonomous mode, not a substitute for\n * review: it fails safe (an unrecognised command is still gated/approved), and a\n * project can extend the denylist in `.vibgrate/code.json`.\n *\n * Pure and unit-tested.\n */\n\nconst DANGEROUS: { pattern: RegExp; reason: string }[] = [\n { pattern: /\\brm\\s+(-[a-z]*f[a-z]*\\s+)?(-[a-z]*r[a-z]*\\s+)?(-[a-z]*\\s+)*(\\/|~|\\$HOME|\\.)(\\s|$)/i, reason: 'recursive/forced delete of a root or home path' },\n { pattern: /\\brm\\s+-[a-z]*r[a-z]*f|\\brm\\s+-[a-z]*f[a-z]*r/i, reason: 'recursive force delete' },\n { pattern: /\\bmkfs\\b|\\bmke2fs\\b/i, reason: 'formats a filesystem' },\n { pattern: /\\bdd\\b[^|]*\\bof=\\/dev\\//i, reason: 'writes raw to a device' },\n { pattern: />\\s*\\/dev\\/(sd|nvme|hd|disk)/i, reason: 'writes raw to a disk device' },\n { pattern: /:\\s*\\(\\s*\\)\\s*\\{[^}]*\\}\\s*;\\s*:/, reason: 'fork bomb' },\n { pattern: /\\b(curl|wget|fetch)\\b[^\\n|]*\\|\\s*(sudo\\s+)?(sh|bash|zsh|python|node|ruby|perl)\\b/i, reason: 'pipes a download straight into a shell/interpreter' },\n { pattern: /\\bgit\\s+push\\b[^\\n]*(--force\\b|-f\\b)/i, reason: 'force-push (rewrites remote history)' },\n { pattern: /\\bgit\\s+(reset\\s+--hard|clean\\s+-[a-z]*f)/i, reason: 'destroys uncommitted work' },\n { pattern: /\\b(shutdown|reboot|halt|poweroff)\\b/i, reason: 'powers off / reboots the machine' },\n { pattern: /\\bchmod\\s+-R\\s+0*777\\s+(\\/|~)/i, reason: 'world-writable on a root/home path' },\n { pattern: /\\bsudo\\b/i, reason: 'runs as root (never automatic)' },\n { pattern: /\\beval\\b\\s+[\"'`]?\\$\\(/i, reason: 'evaluates dynamically-constructed shell' },\n];\n\n/**\n * Return a reason string when `command` is too dangerous to run autonomously, or\n * null when it is allowed. `extraDeny` are project-configured substrings/regex\n * sources to also block. Matching is deliberately conservative — only clearly\n * destructive shapes trip it, so ordinary build/test commands run freely.\n */\nexport function dangerousCommand(command: string, extraDeny: string[] = []): string | null {\n const cmd = command.trim();\n for (const { pattern, reason } of DANGEROUS) {\n if (pattern.test(cmd)) return reason;\n }\n for (const raw of extraDeny) {\n if (!raw) continue;\n try {\n if (new RegExp(raw, 'i').test(cmd)) return `matches a project denylist rule (${raw})`;\n } catch {\n // Not a valid regex → treat as a literal substring.\n if (cmd.toLowerCase().includes(raw.toLowerCase())) return `matches a project denylist rule (${raw})`;\n }\n }\n return null;\n}\n","/**\n * Agent network policy (Fusion Runtime Phase 7).\n *\n * schemaVersion: network-policy/0\n *\n * Outbound network for **agent shell commands** is default-deny. Hosted model\n * calls and library-catalog fetches are separate channels (providers /\n * catalog) and are not gated here — only `run_command` strings the model\n * proposes. Allowlisted host suffixes document what engine-level HTTP may\n * touch when a future wire-up routes agent fetches through this policy.\n *\n * Pure and unit-tested — no I/O.\n */\n\nexport const NETWORK_POLICY_SCHEMA_VERSION = 'network-policy/0' as const;\n\n/**\n * Pinned network policy id for this release train. Bump with maintainer\n * sign-off when allowlists change materially.\n */\nexport const NETWORK_POLICY_VERSION = 'network-policy@2026.07.0' as const;\n\nexport interface NetworkPolicy {\n schemaVersion: typeof NETWORK_POLICY_SCHEMA_VERSION;\n policyVersion: string;\n /** Always true for v0 — agent shell is closed unless a detector says local. */\n denyOutboundByDefault: true;\n /**\n * Host suffixes the engine may contact for docs / model catalog / pulls\n * (not a free pass for arbitrary `curl` from `run_command`).\n */\n allowHostSuffixes: string[];\n}\n\n/** Default policy: deny agent shell egress; engine HTTP allowlist only. */\nexport const DEFAULT_NETWORK_POLICY: NetworkPolicy = {\n schemaVersion: NETWORK_POLICY_SCHEMA_VERSION,\n policyVersion: NETWORK_POLICY_VERSION,\n denyOutboundByDefault: true,\n allowHostSuffixes: [\n 'openrouter.ai',\n 'api.openrouter.ai',\n 'registry.npmjs.org',\n 'npmjs.org',\n 'ollama.com',\n 'huggingface.co',\n 'github.com',\n 'raw.githubusercontent.com',\n 'vibgrate.com',\n 'api.vibgrate.com',\n ],\n};\n\n/**\n * True when a shell command looks like it opens the network (download, reverse\n * shell, SSH tunnel, raw socket tools, …). Conservative: ordinary package\n * managers without explicit remote flags are **not** flagged (they may use\n * cache offline).\n */\nexport function commandSuggestsNetwork(command: string): boolean {\n const cmd = command.trim();\n if (!cmd) return false;\n // Explicit network clients / tunnels.\n if (\n /\\b(curl|wget|fetch|httpie|aria2c|nc|ncat|netcat|socat|telnet|ftp|sftp|scp|rsync|ssh|nmap|masscan)\\b/i.test(\n cmd,\n )\n ) {\n return true;\n }\n // Node/Python one-liners that open sockets.\n if (/\\b(node|nodejs)\\b[^\\n]*\\b(fetch|https?\\.get|http\\.request|net\\.connect)\\b/i.test(cmd)) return true;\n if (/\\bpython[23]?\\b[^\\n]*\\b(urllib|requests|http\\.client|socket)\\b/i.test(cmd)) return true;\n // URL in command line (http/https).\n if (/https?:\\/\\//i.test(cmd)) return true;\n // Package managers with explicit online install of remote packages.\n if (/\\b(npm|pnpm|yarn|bun)\\s+(install|add|update)\\b/i.test(cmd) && !/\\s--offline\\b/i.test(cmd)) {\n // Local path installs (npm install ./pkg) are not network.\n if (!/\\s(\\.\\/|\\/|\\.\\.\\/)/.test(cmd) && !/\\sfile:/i.test(cmd)) return true;\n }\n if (/\\bpip[23]?\\s+install\\b/i.test(cmd) && !/\\s--no-index\\b/i.test(cmd) && !/\\s\\.\\/|\\/|\\.\\.\\//.test(cmd)) {\n return true;\n }\n return false;\n}\n\n/** True when `host` matches an allowlisted suffix (exact or dotted suffix). */\nexport function hostAllowed(host: string, policy: NetworkPolicy = DEFAULT_NETWORK_POLICY): boolean {\n const h = host.trim().toLowerCase().replace(/\\.$/, '');\n if (!h) return false;\n for (const suffix of policy.allowHostSuffixes) {\n const s = suffix.toLowerCase();\n if (h === s || h.endsWith(`.${s}`)) return true;\n }\n return false;\n}\n\n/**\n * Decide whether `run_command` may proceed under the network policy.\n * Returns null when allowed, or an actionable refusal reason.\n *\n * When `enforce` is false (interactive L0 with a human reviewing each\n * command), network-looking commands are still allowed — the human is the gate.\n * When `enforce` is true (`--auto`, or L1+ intent without a real sandbox),\n * network-looking shell is refused.\n */\nexport function networkCommandRefusal(\n command: string,\n options: { enforce: boolean; policy?: NetworkPolicy } = { enforce: true },\n): string | null {\n if (!options.enforce) return null;\n if (!commandSuggestsNetwork(command)) return null;\n const ver = options.policy?.policyVersion ?? NETWORK_POLICY_VERSION;\n return (\n `network policy ${ver} denies outbound network from agent shell commands ` +\n `(default-deny). Run the command yourself outside the agent, or re-run ` +\n `interactively without --auto if a human should approve it.`\n );\n}\n","/**\n * Failure Capsule (Fusion Runtime Phase 5 / plan §3).\n *\n * After a verification step fails, the agent should receive a focused repair\n * context — not a raw multi-thousand-line log. This module builds a\n * deterministic Failure Capsule: failed step, first causal diagnostic, affected\n * symbols/files, optional source slices, and ranked correction hints.\n *\n * Schema: docs/fusion/failure-capsule-v0.schema.json\n */\n\nimport { hashString } from '../engine/hash.js';\nimport type { TaskCapsule } from './capsule.js';\nimport type { LadderStepResult } from './verify-ladder.js';\n\nexport const FAILURE_CAPSULE_SCHEMA_VERSION = 'failure-capsule/0' as const;\nexport const FAILURE_CAPSULE_COMPILER_ID = 'vg-failure-capsule/0' as const;\n\nexport interface FailureStep {\n type: 'command' | 'syntax' | 'verify' | 'ladder' | 'other';\n command?: string;\n exitCode?: number;\n detail?: string;\n}\n\nexport interface FailureSymbolRef {\n qualifiedName: string;\n file: string;\n reason?: string;\n}\n\nexport interface FailureSourceSlice {\n file: string;\n startLine: number;\n endLine: number;\n content: string;\n contentHash: string;\n}\n\nexport interface FailureCapsule {\n schemaVersion: typeof FAILURE_CAPSULE_SCHEMA_VERSION;\n failedStep: FailureStep;\n /** Truncated, secret-free diagnostic — prefer first causal line over full log. */\n diagnosticExcerpt: string;\n affectedSymbols: FailureSymbolRef[];\n sourceSlices: FailureSourceSlice[];\n previousOpsSummary: string[];\n graphDeltaNote?: string;\n likelyCorrections: string[];\n rendered: string;\n provenance: {\n compiler: string;\n modelId: string | null;\n policyVersion: string | null;\n };\n}\n\nexport interface BuildFailureCapsuleOptions {\n /** Ladder results that failed (first non-ok non-note preferred). */\n ladderSteps?: LadderStepResult[];\n /** Explicit verify command failure. */\n verify?: { command: string; exitCode: number; stdout: string };\n /** Original task capsule for symbol/source context. */\n capsule?: TaskCapsule | null;\n /** Files the agent already changed this run. */\n changedFiles?: string[];\n /** Optional short summaries of prior patch ops. */\n previousOpsSummary?: string[];\n graphDeltaNote?: string;\n modelId?: string | null;\n policyVersion?: string | null;\n /** Max diagnostic chars (default 2500). */\n maxDiagnostic?: number;\n /** Max source slices (default 6). */\n maxSlices?: number;\n}\n\n/**\n * Build a Failure Capsule from a ladder failure and/or verify command failure.\n * Pure and deterministic given the same inputs.\n */\nexport function buildFailureCapsule(options: BuildFailureCapsuleOptions): FailureCapsule {\n const maxDiag = options.maxDiagnostic ?? 2500;\n const maxSlices = options.maxSlices ?? 6;\n\n const failed = pickFailedStep(options);\n const diagnosticExcerpt = redactAndTrim(failed.rawDiagnostic, maxDiag);\n const affectedSymbols = collectAffected(options.capsule, options.changedFiles ?? [], diagnosticExcerpt);\n const sourceSlices = pickSourceSlices(options.capsule, affectedSymbols, maxSlices);\n const likelyCorrections = rankCorrections(failed, diagnosticExcerpt, options.changedFiles ?? []);\n const previousOpsSummary = options.previousOpsSummary ?? (options.changedFiles ?? []).map((f) => `touched ${f}`);\n\n const capsule: FailureCapsule = {\n schemaVersion: FAILURE_CAPSULE_SCHEMA_VERSION,\n failedStep: failed.step,\n diagnosticExcerpt,\n affectedSymbols,\n sourceSlices,\n previousOpsSummary,\n graphDeltaNote: options.graphDeltaNote,\n likelyCorrections,\n rendered: '',\n provenance: {\n compiler: FAILURE_CAPSULE_COMPILER_ID,\n modelId: options.modelId ?? null,\n policyVersion: options.policyVersion ?? null,\n },\n };\n capsule.rendered = renderFailureCapsule(capsule);\n return capsule;\n}\n\n/** Project a Failure Capsule into a user/model message. */\nexport function renderFailureCapsule(fc: FailureCapsule): string {\n const lines: string[] = [\n '## Failure Capsule',\n `Failed step: ${fc.failedStep.type}${fc.failedStep.command ? ` \\`${fc.failedStep.command}\\`` : ''}${fc.failedStep.exitCode != null ? ` (exit ${fc.failedStep.exitCode})` : ''}`,\n '',\n '### Diagnostic',\n fc.diagnosticExcerpt || '(no output)',\n ];\n if (fc.affectedSymbols.length) {\n lines.push('', '### Affected symbols / files');\n for (const s of fc.affectedSymbols.slice(0, 12)) {\n lines.push(`- ${s.qualifiedName} (${s.file})${s.reason ? ` — ${s.reason}` : ''}`);\n }\n }\n if (fc.sourceSlices.length) {\n lines.push('', '### Relevant source');\n for (const sl of fc.sourceSlices) {\n lines.push(`\\`\\`\\`${sl.file}:${sl.startLine}-${sl.endLine}`, sl.content, '```');\n }\n }\n if (fc.previousOpsSummary.length) {\n lines.push('', '### Prior ops', ...fc.previousOpsSummary.map((o) => `- ${o}`));\n }\n if (fc.likelyCorrections.length) {\n lines.push('', '### Likely corrections', ...fc.likelyCorrections.map((c) => `- ${c}`));\n }\n if (fc.graphDeltaNote) {\n lines.push('', `Graph: ${fc.graphDeltaNote}`);\n }\n return lines.join('\\n');\n}\n\n// ── internals ──────────────────────────────────────────────────────────────\n\nfunction pickFailedStep(options: BuildFailureCapsuleOptions): { step: FailureStep; rawDiagnostic: string } {\n if (options.verify && options.verify.exitCode !== 0) {\n return {\n step: {\n type: 'verify',\n command: options.verify.command,\n exitCode: options.verify.exitCode,\n },\n rawDiagnostic: options.verify.stdout || `exit ${options.verify.exitCode}`,\n };\n }\n const fail = (options.ladderSteps ?? []).find((s) => !s.ok && s.step.kind !== 'note');\n if (fail) {\n if (fail.step.kind === 'command') {\n return {\n step: { type: 'command', command: fail.step.command, detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n if (fail.step.kind === 'syntax') {\n return {\n step: { type: 'syntax', detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n return {\n step: { type: 'ladder', detail: fail.message },\n rawDiagnostic: fail.message,\n };\n }\n return {\n step: { type: 'other', detail: 'verification failed' },\n rawDiagnostic: 'verification failed (no diagnostic detail)',\n };\n}\n\nfunction collectAffected(\n capsule: TaskCapsule | null | undefined,\n changedFiles: string[],\n diagnostic: string,\n): FailureSymbolRef[] {\n const out: FailureSymbolRef[] = [];\n const seen = new Set<string>();\n const push = (qualifiedName: string, file: string, reason?: string): void => {\n const key = `${qualifiedName}|${file}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push({ qualifiedName, file, reason });\n };\n\n for (const f of changedFiles) {\n push(f, f, 'modified this session');\n }\n\n if (capsule) {\n for (const p of capsule.primary) {\n if (changedFiles.includes(p.file) || diagnosticIncludes(diagnostic, p.file) || diagnosticIncludes(diagnostic, p.qualifiedName)) {\n push(p.qualifiedName, p.file, 'primary seed');\n }\n }\n for (const p of capsule.supporting) {\n if (changedFiles.includes(p.file) || diagnosticIncludes(diagnostic, p.file)) {\n push(p.qualifiedName, p.file, 'supporting seed');\n }\n }\n // If nothing matched, still surface primaries as repair candidates.\n if (!out.length) {\n for (const p of capsule.primary.slice(0, 6)) push(p.qualifiedName, p.file, 'primary seed');\n }\n }\n return out;\n}\n\nfunction pickSourceSlices(\n capsule: TaskCapsule | null | undefined,\n affected: FailureSymbolRef[],\n maxSlices: number,\n): FailureSourceSlice[] {\n if (!capsule?.sourceSlices?.length) return [];\n const files = new Set(affected.map((a) => a.file));\n const preferred = capsule.sourceSlices.filter((s) => files.has(s.file));\n const rest = capsule.sourceSlices.filter((s) => !files.has(s.file));\n const picked = [...preferred, ...rest].slice(0, maxSlices);\n return picked.map((s) => ({\n file: s.file,\n startLine: s.start,\n endLine: s.end,\n content: s.content,\n contentHash: s.contentHash || hashString(s.content),\n }));\n}\n\nfunction rankCorrections(failed: { step: FailureStep; rawDiagnostic: string }, diagnostic: string, changedFiles: string[]): string[] {\n const hints: string[] = [];\n const d = diagnostic.toLowerCase();\n if (failed.step.type === 'syntax') {\n hints.push('Restore missing files or write non-empty content before re-verifying.');\n }\n if (/cannot find module|module not found|enoent/i.test(diagnostic)) {\n hints.push('Check import paths and that new files were created where imports expect them.');\n }\n if (/typeerror|typescript|ts\\d{4}/i.test(diagnostic)) {\n hints.push('Fix the reported type error in the touched files; re-run the typecheck command.');\n }\n if (/assert|expect|fail(ed)?/i.test(d) && /test/.test(d)) {\n hints.push('Align the implementation with the failing assertion; avoid changing the test unless the task requires it.');\n }\n if (/syntaxerror|unexpected token|parse error/i.test(diagnostic)) {\n hints.push('Repair syntax around the last edit; re-read the file span before patching again.');\n }\n if (changedFiles.length) {\n hints.push(`Re-read and patch: ${changedFiles.slice(0, 5).join(', ')}.`);\n }\n if (!hints.length) {\n hints.push('Inspect the diagnostic excerpt, re-read the affected files, apply a minimal fix, then verify again.');\n }\n return hints.slice(0, 6);\n}\n\nfunction diagnosticIncludes(diagnostic: string, needle: string): boolean {\n if (!needle) return false;\n return diagnostic.toLowerCase().includes(needle.toLowerCase());\n}\n\nfunction redactAndTrim(raw: string, max: number): string {\n // Lightweight secret redaction for common token shapes (defense-in-depth;\n // providers.ts also redacts model-facing transport errors).\n let s = raw\n .replace(/(api[_-]?key|token|secret|password)\\s*[:=]\\s*\\S+/gi, '$1=[REDACTED]')\n .replace(/\\b(sk|ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{8,}\\b/g, '[REDACTED]')\n .replace(/\\bBearer\\s+[A-Za-z0-9._\\-]+\\b/gi, 'Bearer [REDACTED]');\n // Prefer the first error-looking lines when the log is huge.\n if (s.length > max) {\n const lines = s.split('\\n');\n const errorish = lines.filter((l) => /error|fail|assert|exception|enoent|cannot/i.test(l));\n const head = (errorish.length ? errorish : lines).slice(0, 40).join('\\n');\n s = head.length > max ? head.slice(0, max) + '\\n… (truncated)' : head + (lines.length > 40 ? '\\n… (truncated)' : '');\n }\n return s.trim();\n}\n","/**\n * Graph-derived verification ladder (Fusion Runtime Phase 5).\n *\n * Compiles a deterministic ordered checklist from a Task Capsule verification\n * plan (and optional project test command), then runs the steps that can be\n * checked without a model. Shell steps use an injected runner — never spawn\n * implicitly.\n */\n\nimport type { VerificationPlan } from './capsule.js';\nimport type { VerificationTarget } from './patch-ir.js';\n\nexport type LadderStep =\n | { kind: 'syntax'; files: string[]; detail: string }\n | { kind: 'command'; command: string; detail: string }\n | { kind: 'note'; detail: string };\n\nexport interface LadderStepResult {\n step: LadderStep;\n ok: boolean;\n /** Actionable detail for the model / user (no secrets). */\n message: string;\n}\n\nexport interface LadderResult {\n ok: boolean;\n steps: LadderStepResult[];\n /** True if any command step was run. */\n ranCommands: boolean;\n}\n\nexport interface CompileLadderOptions {\n /** Project test / verify command (e.g. from code.json). */\n testCommand?: string;\n /** Extra targets from PatchIR.requestedVerification. */\n patchTargets?: VerificationTarget[];\n /** Cap how many syntax files to check (default 20). */\n maxSyntaxFiles?: number;\n}\n\n/**\n * Compile an ordered verification ladder. Deterministic given the same plan + options.\n *\n * Order: notes → syntax (touched files exist & non-empty) → patch commands →\n * project testCommand → suggested test symbols as notes (hints only).\n */\nexport function compileVerificationLadder(plan: VerificationPlan, options: CompileLadderOptions = {}): LadderStep[] {\n const steps: LadderStep[] = [];\n const maxSyntax = options.maxSyntaxFiles ?? 20;\n\n for (const note of plan.notes) {\n steps.push({ kind: 'note', detail: note });\n }\n\n const syntaxFiles = [...new Set(plan.syntaxFiles.map(normalize))].filter(Boolean).sort().slice(0, maxSyntax);\n if (syntaxFiles.length) {\n steps.push({\n kind: 'syntax',\n files: syntaxFiles,\n detail: `check ${syntaxFiles.length} target file(s) exist after edit`,\n });\n }\n\n const commands = new Set<string>();\n for (const t of options.patchTargets ?? []) {\n if (t.kind === 'command' || t.kind === 'test' || t.kind === 'build' || t.kind === 'typecheck') {\n if (t.target.trim()) commands.add(t.target.trim());\n }\n }\n if (options.testCommand?.trim()) commands.add(options.testCommand.trim());\n\n for (const command of [...commands].sort()) {\n steps.push({ kind: 'command', command, detail: `run \\`${command}\\`` });\n }\n\n if (plan.suggestedTests.length) {\n steps.push({\n kind: 'note',\n detail: `graph-linked tests to prefer: ${plan.suggestedTests.slice(0, 8).join(', ')}`,\n });\n }\n\n return steps;\n}\n\nexport interface RunLadderOptions {\n readFile: (relativePath: string) => string | null;\n run?: (command: string) => { stdout: string; exitCode: number };\n /** When false, command steps are skipped (reported as ok notes). Default true. */\n runCommands?: boolean;\n}\n\n/** Execute a compiled ladder. Stops early on the first failing non-note step when `failFast` is true (default). */\nexport function runVerificationLadder(\n steps: LadderStep[],\n options: RunLadderOptions,\n failFast = true,\n): LadderResult {\n const results: LadderStepResult[] = [];\n let ranCommands = false;\n let ok = true;\n\n for (const step of steps) {\n const result = runStep(step, options);\n if (result.step.kind === 'command' && options.runCommands !== false) ranCommands = true;\n results.push(result);\n if (!result.ok) {\n ok = false;\n if (failFast && step.kind !== 'note') break;\n }\n }\n\n return { ok, steps: results, ranCommands };\n}\n\nfunction runStep(step: LadderStep, options: RunLadderOptions): LadderStepResult {\n if (step.kind === 'note') {\n return { step, ok: true, message: step.detail };\n }\n\n if (step.kind === 'syntax') {\n const missing: string[] = [];\n const empty: string[] = [];\n for (const file of step.files) {\n const content = options.readFile(file);\n if (content === null) missing.push(file);\n else if (content.length === 0) empty.push(file);\n }\n if (missing.length || empty.length) {\n const parts: string[] = [];\n if (missing.length) parts.push(`missing: ${missing.join(', ')}`);\n if (empty.length) parts.push(`empty: ${empty.join(', ')}`);\n return { step, ok: false, message: `syntax check failed — ${parts.join('; ')}` };\n }\n return { step, ok: true, message: `syntax ok — ${step.files.length} file(s) present` };\n }\n\n // command\n if (options.runCommands === false || !options.run) {\n return { step, ok: true, message: `skipped command (not configured): ${step.command}` };\n }\n const res = options.run(step.command);\n if (res.exitCode === 0) {\n return { step, ok: true, message: `\\`${step.command}\\` exit 0` };\n }\n const tail = (res.stdout ?? '').slice(0, 2000);\n return {\n step,\n ok: false,\n message: `\\`${step.command}\\` exit ${res.exitCode}${tail ? `:\\n${tail}` : ''}`,\n };\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * inspect_change — blast radius of a proposed edit (Fusion Phase 4).\n *\n * Pure over a graph + optional dirty files / symbols. Does not write the\n * filesystem. Used by the agent tool and unit tests.\n */\n\nimport { impactOf } from '../engine/impact.js';\nimport { resolveOne } from '../engine/lookup.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface InspectChangeInput {\n /** Explicit symbol ids / qualified names. */\n symbols?: string[];\n /** Files touched by the proposed change (relative paths). */\n files?: string[];\n /** Max impact depth (default 3). */\n depth?: number;\n /** Cap how many root symbols to expand (default 12). */\n maxRoots?: number;\n /** Cap affected rows in the report (default 40). */\n maxAffected?: number;\n}\n\nexport interface InspectChangeRoot {\n id: string;\n qualifiedName: string;\n kind: string;\n file: string;\n line: number;\n}\n\nexport interface InspectChangeAffected {\n id: string;\n name: string;\n kind: string;\n file: string;\n line: number;\n depth: number;\n confidence: number;\n viaRoot: string;\n}\n\nexport interface InspectChangeReport {\n roots: InspectChangeRoot[];\n affected: InspectChangeAffected[];\n direct: number;\n transitive: number;\n filesTouched: string[];\n rendered: string;\n}\n\n/**\n * Compute impact of changing the given symbols and/or any symbols defined in\n * the given files. Deterministic for a fixed graph + input.\n */\nexport function inspectChange(graph: VgGraph, input: InspectChangeInput = {}): InspectChangeReport {\n const depth = input.depth ?? 3;\n const maxRoots = input.maxRoots ?? 12;\n const maxAffected = input.maxAffected ?? 40;\n const filesTouched = [...new Set((input.files ?? []).map(normalize).filter(Boolean))].sort();\n const symbolHints = [...new Set((input.symbols ?? []).map((s) => s.trim()).filter(Boolean))];\n\n const roots = collectRoots(graph, symbolHints, filesTouched).slice(0, maxRoots);\n const affectedMap = new Map<string, InspectChangeAffected>();\n let direct = 0;\n let transitive = 0;\n\n for (const root of roots) {\n const imp = impactOf(graph, root.id, { depth });\n direct += imp.direct;\n transitive += imp.transitive;\n for (const a of imp.affected) {\n const prev = affectedMap.get(a.id);\n if (!prev || a.depth < prev.depth || (a.depth === prev.depth && a.confidence > prev.confidence)) {\n affectedMap.set(a.id, {\n id: a.id,\n name: a.name,\n kind: a.kind,\n file: a.file,\n line: a.line,\n depth: a.depth,\n confidence: a.confidence,\n viaRoot: root.qualifiedName,\n });\n }\n }\n }\n\n const affected = [...affectedMap.values()]\n .sort((a, b) => a.depth - b.depth || b.confidence - a.confidence || a.name.localeCompare(b.name))\n .slice(0, maxAffected);\n\n const report: InspectChangeReport = {\n roots,\n affected,\n direct,\n transitive,\n filesTouched,\n rendered: '',\n };\n report.rendered = renderInspectChange(report);\n return report;\n}\n\nfunction collectRoots(graph: VgGraph, symbols: string[], files: string[]): InspectChangeRoot[] {\n const out: InspectChangeRoot[] = [];\n const seen = new Set<string>();\n const push = (id: string): void => {\n if (seen.has(id)) return;\n const node = graph.nodes.find((n) => n.id === id);\n if (!node || node.kind === 'file' || node.kind === 'external') return;\n seen.add(id);\n out.push({\n id: node.id,\n qualifiedName: node.qualifiedName,\n kind: node.kind,\n file: node.file,\n line: node.span?.start ?? 0,\n });\n };\n\n for (const s of symbols) {\n if (graph.nodes.some((n) => n.id === s)) {\n push(s);\n continue;\n }\n const hit = resolveOne(graph, s);\n if (hit.node) push(hit.node.id);\n else if (hit.candidates.length === 1 && hit.candidates[0]) push(hit.candidates[0].id);\n }\n\n for (const file of files) {\n for (const n of graph.nodes) {\n if (n.kind === 'file' || n.kind === 'external') continue;\n if (normalize(n.file) === file) push(n.id);\n }\n }\n\n return out.sort((a, b) => a.file.localeCompare(b.file) || a.qualifiedName.localeCompare(b.qualifiedName));\n}\n\nfunction renderInspectChange(r: InspectChangeReport): string {\n const lines: string[] = ['## Inspect change (blast radius)'];\n if (r.filesTouched.length) lines.push(`Files: ${r.filesTouched.join(', ')}`);\n if (!r.roots.length) {\n lines.push('No graph symbols resolved for this change — impact unknown.');\n return lines.join('\\n');\n }\n lines.push(`Roots (${r.roots.length}):`);\n for (const root of r.roots) {\n lines.push(`- ${root.qualifiedName} (${root.kind}) ${root.file}:${root.line}`);\n }\n lines.push(`Affected: ${r.affected.length} (direct≈${r.direct}, transitive≈${r.transitive})`);\n if (!r.affected.length) {\n lines.push('Nothing depends on these symbols (safe to change in isolation).');\n } else {\n for (const a of r.affected.slice(0, 30)) {\n lines.push(`- ${a.name} (${a.file}:${a.line}) d=${a.depth} via ${a.viaRoot}`);\n }\n if (r.affected.length > 30) lines.push(`… +${r.affected.length - 30} more`);\n }\n return lines.join('\\n');\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Identifier enforcement before apply (Approach B / B3).\n *\n * Annotation after generation is not enough: patches that invent symbols must\n * not write. This module scans PatchIR and free-text edits against the graph\n * trie and blocks apply when unknown identifiers appear in replacement bodies.\n *\n * Allowances (so ordinary local edits are not blocked):\n * - Identifiers already present in the target file (or the search string)\n * - Tokens that only appear inside comments / string literals (code-only scan)\n */\n\nimport { extractIdentifiers, scanIdentifiersAgainstTrie } from '../runtime/identifier-mask.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport type { PatchIR, PatchOperation } from './patch-ir.js';\n\nexport interface IdentifierEnforceResult {\n ok: boolean;\n /** Unknown identifiers that blocked the change. */\n unknown: string[];\n /** Human message for the model / tool result. */\n reason?: string;\n}\n\nexport interface EnforceIdentifiersOptions {\n /**\n * Identifiers already in the edited file / search string — reusing them is\n * not \"inventing\" a symbol (covers locals, params, existing helpers).\n */\n allow?: Iterable<string>;\n /**\n * When true (default), strip comments and string/template literals before\n * scanning so doc comments do not trip invent-checks.\n */\n codeOnly?: boolean;\n}\n\n/**\n * Approximate strip of comments and string-like spans so invent-checks focus\n * on executable code. Conservative: better to under-scan than block prose.\n */\nexport function stripNonCodeSpans(text: string): string {\n return text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n .replace(/\\/\\/[^\\n]*/g, ' ')\n .replace(/(^|[^:])#[^\\n]*/gm, '$1 ')\n .replace(/'(?:\\\\.|[^'\\\\])*'/g, ' ')\n .replace(/\"(?:\\\\.|[^\"\\\\])*\"/g, ' ')\n .replace(/`(?:\\\\.|[^`\\\\])*`/g, ' ');\n}\n\n/**\n * Scan free-text for identifiers not present in the trie.\n * Empty trie / no text → ok.\n */\nexport function enforceIdentifiersInText(\n text: string | null | undefined,\n trie: TrieNode | null | undefined,\n options: EnforceIdentifiersOptions = {},\n): IdentifierEnforceResult {\n if (!trie || text == null || text === '') return { ok: true, unknown: [] };\n const codeOnly = options.codeOnly !== false;\n const scanned = codeOnly ? stripNonCodeSpans(text) : text;\n const scan = scanIdentifiersAgainstTrie(scanned, trie);\n const allow = new Set(options.allow ?? []);\n const unknown = scan.unknown.filter((id) => !allow.has(id));\n if (unknown.length === 0) return { ok: true, unknown: [] };\n return {\n ok: false,\n unknown,\n reason:\n `blocked: ${unknown.length} identifier(s) not in the code graph: ${unknown.slice(0, 16).join(', ')}` +\n `${unknown.length > 16 ? '…' : ''}. Use only symbols from inspect_task / the graph, or add them before inventing names.`,\n };\n}\n\n/** Extract replacement/content bodies from a PatchIR. */\nexport function patchBodies(patch: PatchIR): string[] {\n const out: string[] = [];\n for (const op of patch.operations) {\n const body = bodyFromOp(op);\n if (body) out.push(body);\n }\n return out;\n}\n\nfunction bodyFromOp(op: PatchOperation): string | null {\n switch (op.op) {\n case 'replace-range':\n return op.replacement;\n case 'replace-text':\n return op.replace;\n case 'create-file':\n return op.content;\n case 'replace-symbol':\n return op.replacement;\n case 'delete-file':\n return null;\n default:\n return null;\n }\n}\n\nfunction fileFromOp(op: PatchOperation): string | null {\n if ('file' in op && typeof op.file === 'string') return op.file;\n return null;\n}\n\nexport interface EnforcePatchOptions extends EnforceIdentifiersOptions {\n /** Read current file text so existing identifiers are allowlisted. */\n readFile?: (path: string) => string | null;\n}\n\n/**\n * Enforce identifiers across all patch bodies. Fails if any body introduces\n * unknown identifiers (relative to the pre-change graph trie + existing file).\n */\nexport function enforceIdentifiersInPatch(\n patch: PatchIR,\n trie: TrieNode | null | undefined,\n options: EnforcePatchOptions = {},\n): IdentifierEnforceResult {\n if (!trie) return { ok: true, unknown: [] };\n const unknown = new Set<string>();\n for (const op of patch.operations) {\n const body = bodyFromOp(op);\n if (!body) continue;\n const allow = new Set<string>(options.allow ?? []);\n const file = fileFromOp(op);\n if (file && options.readFile) {\n const existing = options.readFile(file);\n if (existing) {\n for (const id of extractIdentifiers(existing)) allow.add(id);\n }\n }\n if (op.op === 'replace-text' && typeof op.search === 'string') {\n for (const id of extractIdentifiers(op.search)) allow.add(id);\n }\n const r = enforceIdentifiersInText(body, trie, { ...options, allow });\n for (const u of r.unknown) unknown.add(u);\n }\n if (unknown.size === 0) return { ok: true, unknown: [] };\n const list = [...unknown].sort();\n return {\n ok: false,\n unknown: list,\n reason:\n `blocked apply_patch: ${list.length} identifier(s) not in the code graph: ${list.slice(0, 16).join(', ')}` +\n `${list.length > 16 ? '…' : ''}. Do not invent symbols — use graph names only.`,\n };\n}\n\n/** For tests / diagnostics: count extracted identifiers. */\nexport function countIdentifiers(text: string): number {\n return extractIdentifiers(text).length;\n}\n","/**\n * The VG Code agent tool set (VG-CLI-CODE §12).\n *\n * These are the tools the model calls during a coding session — the same shape\n * as any coding agent (read a file, list files, search, edit, run a command),\n * but with two Vibgrate differences: **search is the code graph** (a deterministic\n * `query_graph`, not a grep), and **every mutating tool is governed** — edits and\n * shell commands go through an approval gate, never applied silently. Read-only\n * tools (read/list/search/impact) are side-effect-free and auto-approved.\n *\n * The executor is pure over an injected {@link ToolContext} (filesystem, graph,\n * shell runner, approval callback), so the whole tool layer is unit-tested with\n * no real disk, model, or shell.\n */\n\nimport { loadCatalog, resolveLib, readDoc, localPackageDocs, resolveVersion } from '../engine/lib.js';\nimport { searchSymbols } from '../engine/search.js';\nimport { applyEdit, type SymbolSpan } from './apply.js';\nimport { applyPatchIR, locatorsFromGraph } from './apply-patch-ir.js';\nimport { PATCH_IR_SCHEMA_VERSION, validatePatchIR, type PatchIR } from './patch-ir.js';\nimport { unifiedDiff } from './diff.js';\nimport { previewSides, type PreviewSides } from './preview-sides.js';\nimport { isSecretPath, secretRefusal, redactText, secretEgressRefusal } from './secrets.js';\nimport { dangerousCommand } from './safety.js';\nimport { networkCommandRefusal } from './network-policy.js';\nimport { buildFailureCapsule } from './failure-capsule.js';\nimport { compileVerificationLadder, runVerificationLadder } from './verify-ladder.js';\nimport { summarizeCapsule, type TaskCapsule } from './capsule.js';\nimport { localGraphBackend, type GraphBackend } from './graph-backend.js';\nimport { inspectChange } from './inspect-change.js';\nimport { enforceIdentifiersInPatch, enforceIdentifiersInText } from './identifier-enforce.js';\nimport { extractIdentifiers } from '../runtime/identifier-mask.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport type { CodeFs } from './session.js';\nimport type { ToolCall, ToolSpec, FileChange } from './types.js';\nimport type { VgGraph } from '../schema.js';\n\n/** One file entry inside a multi-file {@link MutatingAction} of kind `patch`. */\nexport type PatchFileAction = {\n file: string;\n op: 'edit' | 'create' | 'delete';\n /** Unified diff for edits (and creates/deletes when available). */\n diff?: string;\n /** Byte size for creates. */\n bytes?: number;\n /** Whole sides, when small enough, so a host can open a real diff editor. */\n sides?: PreviewSides;\n};\n\n/** A state-changing action the agent wants to take — shown to the gate for approval. */\nexport type MutatingAction =\n | { kind: 'edit'; file: string; diff: string; sides?: PreviewSides }\n | { kind: 'create'; file: string; bytes: number }\n | { kind: 'delete'; file: string }\n | { kind: 'run'; command: string }\n | { kind: 'tool'; name: string; args: Record<string, unknown> }\n /** Atomic multi-file PatchIR apply — one decision for the whole transaction. */\n | { kind: 'patch'; files: PatchFileAction[] };\n\nexport interface ShellResult {\n stdout: string;\n exitCode: number;\n}\n\n/** Clarifying question for the human (Claude Code / Codex-style follow-up). */\nexport interface AskUserRequest {\n question: string;\n /** Optional multiple-choice labels (free text always allowed in the host). */\n options?: string[];\n}\n\nexport interface ToolContext {\n root: string;\n graph: VgGraph;\n fsImpl: CodeFs;\n spans: Map<string, SymbolSpan[]>;\n /** Run a shell command (injected; tests pass a fake). */\n run: (command: string) => ShellResult;\n /** Approval gate for a mutating action. Resolve false to refuse. */\n approve: (action: MutatingAction) => Promise<boolean>;\n /**\n * Ask the human a clarifying question and wait for their answer.\n * Host UIs (VS Code) surface a prompt card; CLI may use stdin / auto default.\n */\n askUser?: (req: AskUserRequest) => Promise<string>;\n /** Autonomous mode — enforce the command denylist since no human reviews each call. */\n auto?: boolean;\n /** Project-configured extra denylist rules for autonomous commands. */\n denyCommands?: string[];\n /** Active Task Capsule when the run used source-bearing context. */\n capsule?: TaskCapsule | null;\n /** Live capsule accessor (session may refresh). */\n getTaskCapsule?: () => TaskCapsule | null;\n /**\n * Graph query backend (vgd when attached, else in-process). When omitted,\n * tools use {@link localGraphBackend} over {@link graph}.\n */\n graphBackend?: GraphBackend;\n /** Session overlay dirty paths (for inspect_change without explicit files). */\n dirtyFiles?: () => string[];\n /** Transcript file changes this run (inspect_change default surface). */\n changedFiles?: () => string[];\n /**\n * Enforce default-deny network policy on `run_command` (Phase 7).\n * Defaults to true under `--auto`; hosts may set true whenever there is no\n * human reviewing each shell line (or when the sandbox cannot deny net).\n */\n enforceNetworkPolicy?: boolean;\n /**\n * Graph identifier trie for Approach B enforce-before-apply (B3).\n * When set, inventing symbols in edit/create/apply_patch bodies is blocked.\n */\n identifierTrie?: TrieNode | null;\n /** When false, skip identifier enforcement (tests / explicit escape). Default true when trie set. */\n enforceIdentifiers?: boolean;\n}\n\nexport interface ToolResult {\n /** Text handed back to the model as the tool result. */\n content: string;\n /** True if the action changed workspace state (write/delete/command). */\n mutated: boolean;\n /** Set by `finish` — the loop stops. */\n finished?: boolean;\n finalSummary?: string;\n /** The file change produced by an approved edit/create/delete (for the transcript). */\n change?: FileChange;\n}\n\n/** Max characters of file/command output we feed back, to protect the context window. */\nconst MAX_OUTPUT = 12_000;\n\n/** The tools advertised to the model. Names are stable — they are the wire contract. */\nexport const AGENT_TOOLS: ToolSpec[] = [\n {\n name: 'search_code',\n description:\n 'Search the codebase by identifier, concept, or exact string/URL. Uses the deterministic code graph for symbols, plus a literal text sweep for phrases, quoted strings, and URLs (preferred over reading files blindly). For \"find every occurrence of …\", pass the exact needle (optionally quoted).',\n parameters: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'What to find, e.g. \"scanDir\", \"where auth failures are handled\", or a URL / \"exact phrase\"',\n },\n },\n required: ['query'],\n },\n },\n {\n name: 'read_file',\n description: 'Read a file (optionally a line range). Use after search_code to see the exact code.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, start_line: { type: 'number' }, end_line: { type: 'number' } }, required: ['path'] },\n },\n {\n name: 'list_files',\n description: 'List files known to the code map, optionally filtered by directory prefix and a simple substring/extension pattern.',\n parameters: { type: 'object', properties: { dir: { type: 'string' }, pattern: { type: 'string' } } },\n },\n {\n name: 'graph_impact',\n description: 'What depends on a symbol — the blast radius of changing it (callers/importers/subtypes). Use before editing shared code.',\n parameters: { type: 'object', properties: { symbol: { type: 'string' } }, required: ['symbol'] },\n },\n {\n name: 'library_docs',\n description: \"Get version-correct documentation for a dependency this project actually uses (from the installed package), so you use the right API for the installed version. Prefer this over guessing a library's API.\",\n parameters: { type: 'object', properties: { name: { type: 'string', description: 'package name, e.g. \"react\" or \"zod\"' } }, required: ['name'] },\n },\n {\n name: 'edit_file',\n description: 'Edit a file by replacing an exact snippet. The SEARCH text must match current file contents (whitespace-flexible). Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, search: { type: 'string' }, replace: { type: 'string' } }, required: ['path', 'search', 'replace'] },\n },\n {\n name: 'create_file',\n description: 'Create a new file with the given contents. Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' }, content: { type: 'string' } }, required: ['path', 'content'] },\n },\n {\n name: 'delete_file',\n description: 'Delete a file. Requires approval.',\n parameters: { type: 'object', properties: { path: { type: 'string' } }, required: ['path'] },\n },\n {\n name: 'apply_patch',\n description:\n 'Apply a validated PatchIR (patch-ir/0) multi-op edit transactionally. Prefer for multi-file changes with assumptions. JSON object with operations[], optional assumptions[]. Requires approval per file change.',\n parameters: {\n type: 'object',\n properties: {\n patch: {\n type: 'object',\n description: 'PatchIR document: { operations: [...], assumptions?: [...] } (schemaVersion optional, defaults to patch-ir/0)',\n },\n },\n required: ['patch'],\n },\n },\n {\n name: 'run_command',\n description: 'Run a shell command (e.g. the test or build command) and read its output. Requires approval.',\n parameters: { type: 'object', properties: { command: { type: 'string' } }, required: ['command'] },\n },\n {\n name: 'inspect_task',\n description:\n 'Return (or refresh) the current Task Capsule summary — primary symbols, source files, and verification plan. Prefer this over re-searching when capsule context is already available.',\n parameters: { type: 'object', properties: {} },\n },\n {\n name: 'inspect_change',\n description:\n 'Blast radius of a proposed change before (or after) editing — what depends on the symbols/files you will touch. Prefer before multi-file edits. Does not write files.',\n parameters: {\n type: 'object',\n properties: {\n symbols: {\n type: 'array',\n items: { type: 'string' },\n description: 'Symbol ids or qualified names under change',\n },\n files: {\n type: 'array',\n items: { type: 'string' },\n description: 'Relative file paths under change (defaults to session dirty/changed files)',\n },\n depth: { type: 'number', description: 'Impact depth (default 3)' },\n },\n },\n },\n {\n name: 'verify_change',\n description:\n 'Run the graph-derived verification ladder (syntax + optional test command). On failure returns a Failure Capsule for focused repair. Read-only regarding files; may run the project test command.',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: 'Optional verify command override (default: project test command from capsule plan)' },\n },\n },\n },\n {\n name: 'ask_user',\n description:\n 'Ask the human a clarifying question when intent, scope, or preferred approach is ambiguous. Prefer this over guessing. The host shows the question and returns their answer. Do not use for pure code facts you can look up with search_code/read_file.',\n parameters: {\n type: 'object',\n properties: {\n question: { type: 'string', description: 'Clear question for the user' },\n options: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional short multiple-choice options (user may still type free text)',\n },\n },\n required: ['question'],\n },\n },\n {\n name: 'finish',\n description:\n 'Finish the task. Pass a user-facing summary in Markdown: what changed (or what you found), key file:line refs, and any follow-ups. For Q&A / locate tasks, the summary IS the answer.',\n parameters: {\n type: 'object',\n properties: {\n summary: {\n type: 'string',\n description: 'Markdown summary or answer shown in the VG Code panel',\n },\n },\n required: ['summary'],\n },\n },\n {\n name: 'abort',\n description:\n 'Stop without further edits when the request is impossible. Prefer ask_user when intent is merely unclear.',\n parameters: {\n type: 'object',\n properties: { reason: { type: 'string', description: 'Why the task is aborted' } },\n required: ['reason'],\n },\n },\n];\n\n/** Execute one tool call against the workspace. Never throws — errors come back as tool content. */\nexport async function executeTool(call: ToolCall, ctx: ToolContext): Promise<ToolResult> {\n const a = call.arguments;\n try {\n switch (call.name) {\n case 'search_code':\n return await search(ctx, str(a.query));\n case 'read_file':\n return readFile(ctx, str(a.path), num(a.start_line), num(a.end_line));\n case 'list_files':\n return listFiles(ctx, str(a.dir), str(a.pattern));\n case 'graph_impact':\n return await graphImpact(ctx, str(a.symbol));\n case 'library_docs':\n return libraryDocs(ctx, str(a.name));\n case 'edit_file':\n return editFile(ctx, str(a.path), str(a.search), str(a.replace));\n case 'create_file':\n return createFile(ctx, str(a.path), str(a.content));\n case 'delete_file':\n return deleteFile(ctx, str(a.path));\n case 'apply_patch':\n return applyPatchTool(ctx, a.patch);\n case 'run_command':\n return runCommand(ctx, str(a.command));\n case 'inspect_task':\n return inspectTask(ctx);\n case 'inspect_change':\n return inspectChangeTool(ctx, a);\n case 'verify_change':\n return verifyChange(ctx, str(a.command) || undefined);\n case 'ask_user':\n return askUser(ctx, str(a.question), arrStr(a.options));\n case 'finish':\n return { content: 'done', mutated: false, finished: true, finalSummary: str(a.summary) || 'done' };\n case 'abort':\n return {\n content: `aborted: ${str(a.reason) || 'no reason given'}`,\n mutated: false,\n finished: true,\n finalSummary: `aborted: ${str(a.reason) || 'no reason given'}`,\n };\n default:\n return { content: `unknown tool \"${call.name}\". Available: ${AGENT_TOOLS.map((t) => t.name).join(', ')}`, mutated: false };\n }\n } catch (e) {\n return { content: `tool ${call.name} failed: ${(e as Error).message}`, mutated: false };\n }\n}\n\n/* ── read-only tools (auto-approved) ─────────────────────────────────────── */\n\nasync function askUser(ctx: ToolContext, question: string, options?: string[]): Promise<ToolResult> {\n if (!question.trim()) return { content: 'ask_user needs a question', mutated: false };\n if (!ctx.askUser) {\n return {\n content:\n 'No interactive host for ask_user (headless). Proceed with your best judgment, state assumptions, and call finish — or abort if you cannot continue safely.',\n mutated: false,\n };\n }\n if (ctx.auto) {\n return {\n content:\n 'Autonomous mode: no human available. Proceed with the safest default, state assumptions clearly in finish, and do not block on clarification.',\n mutated: false,\n };\n }\n try {\n const answer = await ctx.askUser({\n question: question.trim(),\n options: options?.map((o) => o.trim()).filter(Boolean).slice(0, 8),\n });\n const text = (answer ?? '').trim();\n if (!text) {\n return {\n content: 'User dismissed the question without answering. Ask once more only if essential; otherwise finish with open questions listed.',\n mutated: false,\n };\n }\n return { content: `User answered:\\n${text}`, mutated: false };\n } catch (e) {\n return { content: `ask_user failed: ${(e as Error).message}`, mutated: false };\n }\n}\n\nfunction arrStr(v: unknown): string[] | undefined {\n if (!Array.isArray(v)) return undefined;\n return v.map((x) => (typeof x === 'string' ? x : String(x ?? ''))).filter(Boolean);\n}\n\nasync function search(ctx: ToolContext, query: string): Promise<ToolResult> {\n if (!query) return { content: 'search_code needs a query', mutated: false };\n\n // Hybrid path (same engine as MCP `search_symbols`): graph name index +\n // literal phrase/URL sweep. Without this, a URL occurrence search only ran\n // lexical symbol ranking and returned confidently wrong hubs (field report).\n if (ctx.root) {\n try {\n const hybrid = await searchSymbols(ctx.graph, ctx.root, query, 20);\n if (hybrid.matches.length > 0) {\n const lines = hybrid.matches.map((m) => {\n if ('preview' in m) {\n return `- text ${m.file}:${m.line} ${m.preview}`;\n }\n return `- ${m.name} (${m.kind}) ${m.file}:${m.line} score ${m.score}`;\n });\n const parts = [`Matches for \"${query}\":`, ...lines];\n if (hybrid.totalTextMatches !== undefined) {\n parts.push(\n `(${hybrid.totalTextMatches} literal match(es) in tree${hybrid.moreAvailable ? '; list truncated — raise limit or narrow the needle' : ''})`,\n );\n }\n if (hybrid.hint) parts.push(hybrid.hint);\n return { content: parts.join('\\n'), mutated: false };\n }\n // Honest empty for a pure string locate (prefer this over graph false positives).\n if (hybrid.totalTextMatches === 0 || /\\s|https?:\\/\\//i.test(query) || /^[\"'`]/.test(query.trim())) {\n const hint = hybrid.hint ? `\\n${hybrid.hint}` : '';\n return {\n content: `no symbol or text match for \"${query}\".${hint}`,\n mutated: false,\n };\n }\n } catch {\n // Fall through to graph-only backend (e.g. root not a real tree in unit tests).\n }\n }\n\n const backend = ctx.graphBackend ?? localGraphBackend(ctx.graph);\n const res = await backend.search(query, { limit: 10 });\n if (res.matches.length === 0) return { content: `no symbols matched \"${query}\"`, mutated: false };\n const lines = res.matches.map(\n (m) =>\n `- ${m.qualifiedName} (${m.kind}) ${m.file}:${m.line}${m.signature ? ` ${m.signature}` : ''}`,\n );\n const via = res.source === 'vgd' ? ' via vgd' : '';\n return { content: `Matches for \"${query}\"${via}:\\n${lines.join('\\n')}`, mutated: false };\n}\n\nfunction readFile(ctx: ToolContext, path: string, start?: number, end?: number): ToolResult {\n // Never send a secrets file to the model (GUARDRAILS §1.1).\n if (isSecretPath(path)) return { content: secretRefusal(path), mutated: false };\n const content = ctx.fsImpl.read(path);\n if (content === null) return { content: `${path} not found`, mutated: false };\n const lines = content.split('\\n');\n const from = start && start > 0 ? start - 1 : 0;\n const to = end && end > 0 ? end : lines.length;\n const slice = lines.slice(from, to).join('\\n');\n // Redact any stray credential shapes before the content reaches the model.\n const shown = truncate(redactText(slice));\n const header = start || end ? `${path} (lines ${from + 1}-${Math.min(to, lines.length)} of ${lines.length})` : `${path} (${lines.length} lines)`;\n return { content: `${header}:\\n${shown}`, mutated: false };\n}\n\nfunction listFiles(ctx: ToolContext, dir?: string, pattern?: string): ToolResult {\n const prefix = dir ? dir.replace(/\\\\/g, '/').replace(/^\\.\\//, '').replace(/\\/$/, '') : '';\n const files = [...new Set(ctx.graph.nodes.filter((n) => n.kind === 'file').map((n) => n.file))]\n .filter((f) => !isSecretPath(f)) // don't surface secret files to the model\n .filter((f) => (prefix ? f === prefix || f.startsWith(prefix + '/') : true))\n .filter((f) => (pattern ? f.includes(pattern) || f.endsWith(pattern) : true))\n .sort();\n if (files.length === 0) return { content: `no files${dir ? ` under ${dir}` : ''}${pattern ? ` matching \"${pattern}\"` : ''}`, mutated: false };\n return { content: `${files.length} file(s):\\n${files.slice(0, 200).join('\\n')}`, mutated: false };\n}\n\n/** Version-correct docs for an installed dependency — the Vibgrate differentiator, as a tool. */\nfunction libraryDocs(ctx: ToolContext, name: string): ToolResult {\n if (!name) return { content: 'library_docs needs a package name', mutated: false };\n // Committed catalog first (curated/pinned docs), then the installed package on disk.\n const entry = resolveLib(loadCatalog(ctx.root), name);\n if (entry) {\n const doc = readDoc(ctx.root, entry);\n if (doc.trim()) return { content: `Docs for ${name}${entry.version && entry.version !== '*' ? ` @ ${entry.version}` : ''} (${entry.source.type}):\\n${truncate(redactText(doc))}`, mutated: false };\n }\n const local = localPackageDocs(ctx.root, name);\n if (local?.docs.trim()) {\n return { content: `Docs for ${name}${local.version ? ` @ ${local.version}` : ''} (${local.source}):\\n${truncate(redactText(local.docs))}`, mutated: false };\n }\n const v = resolveVersion(ctx.root, name);\n return {\n content: `no bundled docs for ${name}${v.served ? ` (installed ${v.served})` : ' (not found in this project)'}. Read its source under node_modules/${name}, or add curated docs with \\`vg lib add\\`.`,\n mutated: false,\n };\n}\n\nasync function graphImpact(ctx: ToolContext, symbol: string): Promise<ToolResult> {\n const backend = ctx.graphBackend ?? localGraphBackend(ctx.graph);\n const impact = await backend.impact(symbol, { depth: 3 });\n if (!impact) return { content: `no symbol named \"${symbol}\" in the map`, mutated: false };\n if (impact.affected.length === 0) {\n return {\n content: `nothing depends on ${impact.root.name} (safe to change in isolation)`,\n mutated: false,\n };\n }\n const lines = impact.affected.slice(0, 20).map((i) => `- ${i.name} (${i.file}:${i.line})`);\n const via = impact.source === 'vgd' ? ' via vgd' : '';\n return {\n content: `${impact.affected.length} symbol(s) depend on ${impact.root.name}${via}:\\n${lines.join('\\n')}`,\n mutated: false,\n };\n}\n\n/* ── mutating tools (gated) ──────────────────────────────────────────────── */\n\nasync function editFile(ctx: ToolContext, path: string, search: string, replace: string): Promise<ToolResult> {\n const before = ctx.fsImpl.read(path);\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n // Reusing locals / symbols already in the file (or the search span) is fine;\n // only inventing graph-unknown identifiers is blocked (B3).\n const allow = new Set([\n ...extractIdentifiers(before ?? ''),\n ...extractIdentifiers(search),\n ]);\n const idCheck = enforceIdentifiersInText(replace, ctx.identifierTrie, { allow });\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers in edit', mutated: false };\n }\n }\n const { content: after, outcome } = applyEdit(before, { op: 'replace', file: path, search, replace }, ctx.spans.get(normalize(path)) ?? []);\n if (outcome.status !== 'applied') {\n return { content: `edit not applied (${outcome.status}): ${outcome.reason ?? ''}`, mutated: false };\n }\n const diff = unifiedDiff(before, after, path);\n if (!(await ctx.approve({ kind: 'edit', file: path, diff, sides: previewSides(before, after) }))) {\n return { content: `edit to ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.write(path, after ?? '');\n return { content: `edited ${path}`, mutated: true, change: { file: path, before, after, outcomes: [outcome], diff } };\n}\n\nasync function createFile(ctx: ToolContext, path: string, content: string): Promise<ToolResult> {\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n const idCheck = enforceIdentifiersInText(content, ctx.identifierTrie);\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers in create', mutated: false };\n }\n }\n const existing = ctx.fsImpl.read(path);\n if (existing !== null) return { content: `${path} already exists — use edit_file`, mutated: false };\n if (!(await ctx.approve({ kind: 'create', file: path, bytes: Buffer.byteLength(content) }))) {\n return { content: `creating ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.write(path, content);\n return { content: `created ${path}`, mutated: true, change: { file: path, before: null, after: content, outcomes: [{ edit: { op: 'create', file: path, content }, status: 'applied' }], diff: unifiedDiff(null, content, path) } };\n}\n\nasync function deleteFile(ctx: ToolContext, path: string): Promise<ToolResult> {\n const before = ctx.fsImpl.read(path);\n if (before === null) return { content: `${path} does not exist`, mutated: false };\n if (!(await ctx.approve({ kind: 'delete', file: path }))) {\n return { content: `deleting ${path} was declined by the user`, mutated: false };\n }\n ctx.fsImpl.remove(path);\n return { content: `deleted ${path}`, mutated: true, change: { file: path, before, after: null, outcomes: [{ edit: { op: 'delete', file: path }, status: 'applied' }], diff: unifiedDiff(before, null, path) } };\n}\n\n/**\n * Apply a multi-op PatchIR transactionally. Each touched file is approved with\n * a unified diff before any write (all-or-nothing after dry-run validation).\n */\nasync function applyPatchTool(ctx: ToolContext, raw: unknown): Promise<ToolResult> {\n const patch = coercePatchIR(raw);\n if (!patch) {\n return { content: 'apply_patch needs a patch object with operations[] (patch-ir/0)', mutated: false };\n }\n const structural = validatePatchIR(patch);\n if (!structural.ok) {\n return { content: `invalid PatchIR: ${structural.errors.join('; ')}`, mutated: false };\n }\n\n // B3: block patches that invent identifiers not present in the graph\n // (existing file locals + search spans are allowlisted).\n if (ctx.enforceIdentifiers !== false && ctx.identifierTrie) {\n const idCheck = enforceIdentifiersInPatch(patch, ctx.identifierTrie, {\n readFile: (f) => ctx.fsImpl.read(f),\n });\n if (!idCheck.ok) {\n return { content: idCheck.reason ?? 'blocked: unknown identifiers', mutated: false };\n }\n }\n\n const locate = locatorsFromGraph(ctx.graph.nodes);\n const dry = applyPatchIR(patch, {\n readFile: (f) => ctx.fsImpl.read(f),\n spansForFile: (f) => ctx.spans.get(normalize(f)) ?? [],\n locateSymbol: locate,\n transactional: true,\n });\n if (!dry.ok) {\n const detail = dry.errors.length ? dry.errors.join('; ') : dry.ops.map((o) => `${o.op}@${o.file}:${o.status}`).join('; ');\n return { content: `patch not applied: ${detail}`, mutated: false };\n }\n\n // Build the full multi-file plan first, then one atomic approval. Hosts (VS Code\n // multi-file tray, stream-json) show every file + diff together — no per-file\n // round-trip that would leave a half-approved transaction.\n const planned: Array<{\n file: string;\n op: PatchFileAction['op'];\n before: string | null;\n after: string | null;\n diff: string;\n }> = [];\n for (const [file, entry] of [...dry.files.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (entry.before === entry.after) continue;\n if (isSecretPath(file)) return { content: secretRefusal(file), mutated: false };\n const op: PatchFileAction['op'] =\n entry.after === null ? 'delete' : entry.before === null ? 'create' : 'edit';\n planned.push({\n file,\n op,\n before: entry.before,\n after: entry.after,\n diff: unifiedDiff(entry.before, entry.after, file),\n });\n }\n\n if (planned.length === 0) {\n return { content: 'patch applied with no content changes (no-op)', mutated: false };\n }\n\n const files: PatchFileAction[] = planned.map((p) => {\n const sides = previewSides(p.before, p.after);\n if (p.op === 'delete') return { file: p.file, op: 'delete', diff: p.diff, sides };\n if (p.op === 'create') {\n return { file: p.file, op: 'create', bytes: Buffer.byteLength(p.after ?? ''), diff: p.diff, sides };\n }\n return { file: p.file, op: 'edit', diff: p.diff, sides };\n });\n\n if (!(await ctx.approve({ kind: 'patch', files }))) {\n return {\n content: `patch declined — ${planned.length} file change(s) refused (nothing written)`,\n mutated: false,\n };\n }\n\n const changes: FileChange[] = [];\n for (const p of planned) {\n const edit =\n p.after === null\n ? ({ op: 'delete' as const, file: p.file })\n : p.before === null\n ? ({ op: 'create' as const, file: p.file, content: p.after })\n : ({ op: 'replace' as const, file: p.file, search: '', replace: p.after });\n changes.push({\n file: p.file,\n before: p.before,\n after: p.after,\n outcomes: [{ edit, status: 'applied' }],\n diff: p.diff,\n });\n if (p.after === null) ctx.fsImpl.remove(p.file);\n else ctx.fsImpl.write(p.file, p.after);\n }\n\n const summary = changes.map((c) => c.file).join(', ');\n // Surface the first change for the agent transcript accumulator; multi-file\n // details are in the content string and the patch approval payload.\n return {\n content: `applied patch to ${changes.length} file(s): ${summary}`,\n mutated: true,\n change: changes[0],\n };\n}\n\nfunction coercePatchIR(raw: unknown): PatchIR | null {\n if (!raw || typeof raw !== 'object') return null;\n const o = raw as Record<string, unknown>;\n if (!Array.isArray(o.operations)) return null;\n return {\n schemaVersion: PATCH_IR_SCHEMA_VERSION,\n operations: o.operations as PatchIR['operations'],\n assumptions: Array.isArray(o.assumptions) ? (o.assumptions as PatchIR['assumptions']) : [],\n requestedVerification: Array.isArray(o.requestedVerification)\n ? (o.requestedVerification as PatchIR['requestedVerification'])\n : [],\n provenance: { format: 'structured-json', modelId: null, raw: null },\n };\n}\n\nasync function runCommand(ctx: ToolContext, command: string): Promise<ToolResult> {\n if (!command) return { content: 'run_command needs a command', mutated: false };\n // In autonomous mode there is no human reviewing each command, so the denylist\n // blocks the catastrophic/exfiltrating shapes outright. Interactively, the\n // human sees the exact command at the approval prompt, so we don't pre-block.\n if (ctx.auto) {\n const reason = dangerousCommand(command, ctx.denyCommands);\n if (reason) return { content: `refused to run \\`${command}\\` autonomously — ${reason}. Run it yourself if you intend to, or re-run without --auto to approve it interactively.`, mutated: false };\n }\n // Phase 7 network policy: default-deny outbound from agent shell when\n // enforceNetworkPolicy is set (defaults on under --auto).\n const enforceNet = ctx.enforceNetworkPolicy ?? !!ctx.auto;\n const netReason = networkCommandRefusal(command, { enforce: enforceNet });\n if (netReason) {\n return { content: `refused to run \\`${command}\\` — ${netReason}`, mutated: false };\n }\n // Scan the command line for credential shapes before any shell (and before\n // approval) so secrets never ride out on a curl/header line.\n const secretReason = secretEgressRefusal(command, 'shell command');\n if (secretReason) {\n return { content: `refused to run \\`${command}\\` — ${secretReason}`, mutated: false };\n }\n if (!(await ctx.approve({ kind: 'run', command }))) {\n return { content: `running \\`${command}\\` was declined by the user`, mutated: false };\n }\n const res = ctx.run(command);\n return { content: `$ ${command}\\nexit ${res.exitCode}\\n${truncate(res.stdout)}`, mutated: true };\n}\n\nfunction inspectTask(ctx: ToolContext): ToolResult {\n const capsule = ctx.getTaskCapsule?.() ?? ctx.capsule ?? null;\n if (!capsule) {\n return {\n content:\n 'No Task Capsule for this run (metadata-only context). Re-run with --capsule, or use search_code / read_file to gather evidence.',\n mutated: false,\n };\n }\n const summary = summarizeCapsule(capsule);\n const lines = [\n `Task Capsule ${summary.schemaVersion} · ranking ${summary.rankingVersion} · ~${summary.tokensEstimate} tokens`,\n `Instruction: ${summary.instruction}`,\n `Primary (${summary.primary.length}):`,\n ...summary.primary.map((p) => ` - ${p.qualifiedName} (${p.kind}) ${p.file}`),\n `Supporting (${summary.supporting.length}):`,\n ...summary.supporting.slice(0, 8).map((p) => ` - ${p.qualifiedName} ${p.file}`),\n `Source slices: ${summary.sourceSliceCount} across ${summary.sourceFiles.join(', ') || '(none)'}`,\n `Verification files: ${capsule.verificationPlan.syntaxFiles.slice(0, 8).join(', ') || '(none)'}`,\n ];\n if (capsule.provenance.modelProfileId) lines.push(`Model profile: ${capsule.provenance.modelProfileId}`);\n if (capsule.provenance.securityTier) lines.push(`Security tier: ${capsule.provenance.securityTier}`);\n return { content: lines.join('\\n'), mutated: false };\n}\n\nfunction inspectChangeTool(ctx: ToolContext, args: Record<string, unknown>): ToolResult {\n const symbols = Array.isArray(args.symbols)\n ? args.symbols.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [];\n let files = Array.isArray(args.files)\n ? args.files.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [];\n if (!files.length) {\n const dirty = ctx.dirtyFiles?.() ?? [];\n const changed = ctx.changedFiles?.() ?? [];\n files = [...new Set([...dirty, ...changed])];\n }\n if (!symbols.length && !files.length) {\n return {\n content:\n 'inspect_change needs symbols[] or files[] (or session dirty/changed files). Example: { \"files\": [\"src/auth.ts\"] }',\n mutated: false,\n };\n }\n const depth = typeof args.depth === 'number' && args.depth > 0 ? args.depth : 3;\n const report = inspectChange(ctx.graph, { symbols, files, depth });\n return { content: report.rendered, mutated: false };\n}\n\nfunction verifyChange(ctx: ToolContext, commandOverride?: string): ToolResult {\n const capsule = ctx.getTaskCapsule?.() ?? ctx.capsule ?? null;\n if (!capsule) {\n if (commandOverride) {\n const res = ctx.run(commandOverride);\n if (res.exitCode === 0) return { content: `verify ok — \\`${commandOverride}\\` exit 0`, mutated: false };\n const fc = buildFailureCapsule({\n verify: { command: commandOverride, exitCode: res.exitCode, stdout: res.stdout },\n changedFiles: [],\n });\n return { content: fc.rendered, mutated: false };\n }\n return { content: 'verify_change needs a Task Capsule or an explicit command', mutated: false };\n }\n const steps = compileVerificationLadder(capsule.verificationPlan, {\n testCommand: commandOverride,\n });\n const ladder = runVerificationLadder(steps, {\n readFile: (f) => ctx.fsImpl.read(f),\n run: ctx.run,\n runCommands: true,\n });\n if (ladder.ok) {\n return {\n content: `verification ladder passed:\\n${ladder.steps.map((s) => `✔ ${s.message}`).join('\\n')}`,\n mutated: false,\n };\n }\n const fc = buildFailureCapsule({\n ladderSteps: ladder.steps,\n capsule,\n changedFiles: [],\n });\n return { content: fc.rendered, mutated: false };\n}\n\nfunction truncate(s: string): string {\n if (s.length <= MAX_OUTPUT) return s;\n return s.slice(0, MAX_OUTPUT) + `\\n… (truncated ${s.length - MAX_OUTPUT} chars)`;\n}\n\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : v === undefined || v === null ? '' : String(v);\n}\nfunction num(v: unknown): number | undefined {\n const n = typeof v === 'number' ? v : typeof v === 'string' ? Number(v) : NaN;\n return Number.isFinite(n) ? n : undefined;\n}\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Session file overlay (Fusion Runtime Phase 5).\n *\n * Mutations land in an in-memory layer first so the agent can read its own\n * uncommitted edits, run a verification ladder against the session view, and\n * only then {@link SessionOverlay.flush} to the real filesystem. The base\n * {@link CodeFs} is never written until flush.\n *\n * Audit lines always go through to the base (governance must not be buffered).\n */\n\nimport type { CodeFs } from './session.js';\n\nexport type OverlayEntry =\n | { kind: 'write'; content: string }\n | { kind: 'delete' };\n\nexport class SessionOverlay implements CodeFs {\n private readonly dirty = new Map<string, OverlayEntry>();\n\n constructor(private readonly base: CodeFs) {}\n\n /** Paths with uncommitted writes or deletes (sorted). */\n dirtyFiles(): string[] {\n return [...this.dirty.keys()].sort();\n }\n\n /** True if the overlay has any uncommitted mutation. */\n isDirty(): boolean {\n return this.dirty.size > 0;\n }\n\n read(file: string): string | null {\n const key = normalize(file);\n const entry = this.dirty.get(key);\n if (entry) {\n if (entry.kind === 'delete') return null;\n return entry.content;\n }\n return this.base.read(file);\n }\n\n write(file: string, content: string): void {\n this.dirty.set(normalize(file), { kind: 'write', content });\n }\n\n remove(file: string): void {\n this.dirty.set(normalize(file), { kind: 'delete' });\n }\n\n appendAudit(line: string): void {\n this.base.appendAudit(line);\n }\n\n /**\n * Commit every dirty entry to the base filesystem, then clear the overlay.\n * Returns the paths flushed (sorted).\n */\n flush(): string[] {\n const files = this.dirtyFiles();\n for (const file of files) {\n const entry = this.dirty.get(file)!;\n if (entry.kind === 'delete') this.base.remove(file);\n else this.base.write(file, entry.content);\n }\n this.dirty.clear();\n return files;\n }\n\n /** Drop uncommitted mutations without writing the base. */\n discard(): void {\n this.dirty.clear();\n }\n\n /**\n * Snapshot of dirty entries for tests / diagnostics (path → entry).\n * Does not include base-only files.\n */\n snapshot(): Map<string, OverlayEntry> {\n return new Map(this.dirty);\n }\n}\n\nfunction normalize(file: string): string {\n return file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n}\n","/**\n * Agent trajectory metrics (Fusion Runtime Phase 0 / plan §0.2).\n *\n * Pure helpers that turn a finished agent run into a TrajectoryRecord so we can\n * compute ZNS@1 (zero-navigation solve) and FCS (first-capsule sufficiency)\n * offline without a live model. Discovery tools force another navigation hop;\n * a ZNS@1 solve uses only edit/verify/finish after the initial capsule.\n */\n\nexport const TRAJECTORY_SCHEMA_VERSION = 'trajectory/0' as const;\n\n/** Tools that count as model-driven navigation / discovery (not ZNS). */\nexport const DISCOVERY_TOOLS = new Set([\n 'search_code',\n 'read_file',\n 'list_files',\n 'graph_impact',\n 'library_docs',\n]);\n\n/** Tools that mutate workspace state. */\nexport const MUTATION_TOOLS = new Set([\n 'edit_file',\n 'create_file',\n 'delete_file',\n 'apply_patch',\n 'run_command',\n]);\n\nexport type TrajectoryArm = 'metadata' | 'capsule' | 'oracle' | 'other';\n\nexport interface ToolCallRecord {\n name: string;\n /** Wall-clock step index (1-based agent step). */\n step: number;\n mutated: boolean;\n}\n\nexport interface TrajectoryRecord {\n schemaVersion: typeof TRAJECTORY_SCHEMA_VERSION;\n /** Stable task id (fixture / SWE-bench instance id). */\n taskId: string;\n arm: TrajectoryArm;\n /** True when the run stopped finished and verification (if any) passed. */\n solved: boolean;\n /** True when verification was run and passed (or no verify configured). */\n verified: boolean;\n znsAt1: boolean;\n steps: number;\n stopped: string;\n inferenceTurns: number;\n toolCalls: ToolCallRecord[];\n discoveryToolCalls: number;\n mutationToolCalls: number;\n shellCommands: number;\n promptTokens: number;\n completionTokens: number;\n elapsedMs: number | null;\n filesChanged: number;\n usedCapsule: boolean;\n failureCapsuleBuilt: boolean;\n provider?: { id: string; model: string };\n}\n\nexport interface TrajectoryCollector {\n recordTool(name: string, step: number, mutated: boolean): void;\n recordUsage(promptTokens: number, completionTokens: number): void;\n markFailureCapsule(): void;\n finalize(input: {\n taskId: string;\n arm: TrajectoryArm;\n solved: boolean;\n verified: boolean;\n steps: number;\n stopped: string;\n inferenceTurns: number;\n filesChanged: number;\n usedCapsule: boolean;\n elapsedMs?: number | null;\n provider?: { id: string; model: string };\n }): TrajectoryRecord;\n}\n\n/** Create a mutable collector for one agent run. */\nexport function createTrajectoryCollector(): TrajectoryCollector {\n const toolCalls: ToolCallRecord[] = [];\n let promptTokens = 0;\n let completionTokens = 0;\n let failureCapsuleBuilt = false;\n\n return {\n recordTool(name, step, mutated) {\n toolCalls.push({ name, step, mutated });\n },\n recordUsage(p, c) {\n promptTokens += p;\n completionTokens += c;\n },\n markFailureCapsule() {\n failureCapsuleBuilt = true;\n },\n finalize(input) {\n const discoveryToolCalls = toolCalls.filter((t) => DISCOVERY_TOOLS.has(t.name)).length;\n const mutationToolCalls = toolCalls.filter((t) => MUTATION_TOOLS.has(t.name)).length;\n const shellCommands = toolCalls.filter((t) => t.name === 'run_command').length;\n const znsAt1 = computeZnsAt1({\n solved: input.solved && input.verified,\n usedCapsule: input.usedCapsule,\n toolCalls,\n });\n return {\n schemaVersion: TRAJECTORY_SCHEMA_VERSION,\n taskId: input.taskId,\n arm: input.arm,\n solved: input.solved,\n verified: input.verified,\n znsAt1,\n steps: input.steps,\n stopped: input.stopped,\n inferenceTurns: input.inferenceTurns,\n toolCalls,\n discoveryToolCalls,\n mutationToolCalls,\n shellCommands,\n promptTokens,\n completionTokens,\n elapsedMs: input.elapsedMs ?? null,\n filesChanged: input.filesChanged,\n usedCapsule: input.usedCapsule,\n failureCapsuleBuilt,\n provider: input.provider,\n };\n },\n };\n}\n\n/**\n * ZNS@1: task solved + verified from the initial capsule with zero discovery\n * tool calls (model never navigated). Requires capsule arm.\n */\nexport function computeZnsAt1(input: {\n solved: boolean;\n usedCapsule: boolean;\n toolCalls: Array<{ name: string }>;\n}): boolean {\n if (!input.solved || !input.usedCapsule) return false;\n return !input.toolCalls.some((t) => DISCOVERY_TOOLS.has(t.name));\n}\n\nexport interface FcsReport {\n schemaVersion: 'fcs-report/0';\n /** Solved under capsule arm ÷ solved under oracle arm (same task ids). */\n fcs: number | null;\n /** Tasks in both arms used for FCS. */\n pairedTasks: number;\n capsuleSolved: number;\n oracleSolved: number;\n /** Zero-navigation solve rate among capsule solves. */\n znsAt1Rate: number | null;\n capsuleRuns: number;\n oracleRuns: number;\n metadataRuns: number;\n byArm: Record<\n string,\n {\n runs: number;\n solved: number;\n passRate: number;\n znsAt1: number;\n medianDiscovery: number | null;\n medianSteps: number | null;\n medianPromptTokens: number | null;\n }\n >;\n records: TrajectoryRecord[];\n}\n\n/**\n * Aggregate trajectory records into FCS / ZNS@1 report.\n * FCS = |tasks solved under capsule| / |tasks solved under oracle| for the\n * intersection of task ids present in both arms. When no oracle arm exists,\n * fcs is null and pass rates are still reported per arm.\n */\nexport function computeFcsReport(records: TrajectoryRecord[]): FcsReport {\n const byArm: FcsReport['byArm'] = {};\n for (const arm of ['capsule', 'oracle', 'metadata', 'other'] as TrajectoryArm[]) {\n const armRecs = records.filter((r) => r.arm === arm);\n if (!armRecs.length && arm === 'other') continue;\n byArm[arm] = summarizeArm(armRecs);\n }\n\n const capsule = records.filter((r) => r.arm === 'capsule');\n const oracle = records.filter((r) => r.arm === 'oracle');\n const oracleSolvedIds = new Set(oracle.filter((r) => r.solved).map((r) => r.taskId));\n const capsuleByTask = new Map<string, TrajectoryRecord>();\n for (const r of capsule) {\n // Prefer solved record if duplicates.\n const prev = capsuleByTask.get(r.taskId);\n if (!prev || (r.solved && !prev.solved)) capsuleByTask.set(r.taskId, r);\n }\n const pairedIds = [...capsuleByTask.keys()].filter((id) => oracle.some((o) => o.taskId === id));\n const oracleSolvedPaired = pairedIds.filter((id) => oracleSolvedIds.has(id));\n const capsuleSolvedAmongOracle = oracleSolvedPaired.filter((id) => capsuleByTask.get(id)?.solved).length;\n\n const fcs =\n oracleSolvedPaired.length > 0 ? round(capsuleSolvedAmongOracle / oracleSolvedPaired.length) : null;\n\n const capsuleSolved = capsule.filter((r) => r.solved);\n const znsAt1Rate =\n capsuleSolved.length > 0 ? round(capsuleSolved.filter((r) => r.znsAt1).length / capsuleSolved.length) : null;\n\n return {\n schemaVersion: 'fcs-report/0',\n fcs,\n pairedTasks: pairedIds.length,\n capsuleSolved: capsuleSolvedAmongOracle,\n oracleSolved: oracleSolvedPaired.length,\n znsAt1Rate,\n capsuleRuns: capsule.length,\n oracleRuns: oracle.length,\n metadataRuns: records.filter((r) => r.arm === 'metadata').length,\n byArm,\n records,\n };\n}\n\n/** Markdown summary suitable for CI artifacts / docs. */\nexport function renderFcsReportMarkdown(report: FcsReport): string {\n const lines: string[] = [\n '# Fusion trajectory / FCS report',\n '',\n `| Metric | Value |`,\n `|---|---:|`,\n `| FCS (capsule ÷ oracle solves) | ${report.fcs == null ? 'n/a (no oracle arm)' : report.fcs.toFixed(3)} |`,\n `| ZNS@1 rate (capsule solves) | ${report.znsAt1Rate == null ? 'n/a' : (report.znsAt1Rate * 100).toFixed(1) + '%'} |`,\n `| Paired tasks | ${report.pairedTasks} |`,\n `| Capsule runs | ${report.capsuleRuns} |`,\n `| Oracle runs | ${report.oracleRuns} |`,\n `| Metadata runs | ${report.metadataRuns} |`,\n '',\n '## Per arm',\n '',\n '| Arm | Runs | Solved | Pass rate | ZNS@1 | Discovery p50 | Steps p50 | Prompt tokens p50 |',\n '|---|---:|---:|---:|---:|---:|---:|---:|',\n ];\n for (const [arm, s] of Object.entries(report.byArm)) {\n if (!s.runs) continue;\n lines.push(\n `| ${arm} | ${s.runs} | ${s.solved} | ${(s.passRate * 100).toFixed(1)}% | ${s.znsAt1} | ${fmt(s.medianDiscovery)} | ${fmt(s.medianSteps)} | ${fmt(s.medianPromptTokens)} |`,\n );\n }\n lines.push(\n '',\n '## Definitions',\n '',\n '- **ZNS@1**: solved + verified from a Task Capsule with zero discovery tool calls (`search_code`, `read_file`, `list_files`, `graph_impact`, `library_docs`).',\n '- **FCS**: among tasks the oracle arm solves, the fraction also solved under the capsule arm (same task ids).',\n );\n return lines.join('\\n') + '\\n';\n}\n\nfunction summarizeArm(recs: TrajectoryRecord[]): FcsReport['byArm'][string] {\n const solved = recs.filter((r) => r.solved).length;\n return {\n runs: recs.length,\n solved,\n passRate: recs.length ? round(solved / recs.length) : 0,\n znsAt1: recs.filter((r) => r.znsAt1).length,\n medianDiscovery: median(recs.map((r) => r.discoveryToolCalls)),\n medianSteps: median(recs.map((r) => r.steps)),\n medianPromptTokens: median(recs.map((r) => r.promptTokens)),\n };\n}\n\nfunction median(values: number[]): number | null {\n if (!values.length) return null;\n const sorted = [...values].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 ? sorted[mid]! : round((sorted[mid - 1]! + sorted[mid]!) / 2);\n}\n\nfunction round(n: number): number {\n return Math.round(n * 1000) / 1000;\n}\n\nfunction fmt(n: number | null): string {\n return n == null ? 'n/a' : String(n);\n}\n","/**\n * Run provenance (Fusion Runtime Phase 7).\n *\n * schemaVersion: run-provenance/0\n *\n * Every finished agent run records a content-hashed, policy-versioned summary:\n * which Model Execution Profile and security tier ran, which graph corpus and\n * ranking policy fed the capsule, and blake3 hashes of every mutation\n * (before/after/diff). Pure and deterministic — identical inputs always yield\n * the same provenance record. Learning / ranking changes only ship as a new\n * pinned `context-policy@YYYY.MM.*` string after benchmark significance.\n */\n\nimport { hashString, canonicalize } from '../engine/hash.js';\nimport { CAPSULE_RANKING_VERSION } from './capsule.js';\nimport type { FileChange } from './types.js';\n\nexport const RUN_PROVENANCE_SCHEMA_VERSION = 'run-provenance/0' as const;\n\n/**\n * Pinned context / ranking / governance policy id for this release train.\n * Bump only with maintainer sign-off after ContextBench significance — never\n * from a single task outcome.\n */\nexport const CONTEXT_POLICY_VERSION = 'context-policy@2026.07.0' as const;\n\nexport type MutationOp = 'edit' | 'create' | 'delete';\n\nexport interface MutationProvenance {\n file: string;\n op: MutationOp;\n /** blake3 of pre-image content; null for creates. */\n beforeHash: string | null;\n /** blake3 of post-image content; null for deletes. */\n afterHash: string | null;\n /** blake3 of the unified diff text (empty string → null). */\n diffHash: string | null;\n}\n\nexport interface VerificationStepProvenance {\n /** Ladder step kind or \"command\". */\n kind: string;\n /** Command string when present. */\n command?: string | null;\n passed: boolean;\n /** blake3 of truncated diagnostic/stdout when present. */\n diagnosticHash?: string | null;\n}\n\nexport interface RunProvenance {\n schemaVersion: typeof RUN_PROVENANCE_SCHEMA_VERSION;\n policyVersion: string;\n rankingVersion: string | null;\n modelProfileId: string | null;\n securityTier: string | null;\n graphCorpusHash: string | null;\n mutations: MutationProvenance[];\n /**\n * blake3 over the canonical mutations array — stable fingerprint of what\n * the run wrote (empty mutations → hash of `[]`).\n */\n mutationsRootHash: string;\n /** Optional verification ladder / command outcomes for this run. */\n verification?: VerificationStepProvenance[];\n /** blake3 over canonical verification array when present. */\n verificationRootHash?: string | null;\n}\n\nexport interface BuildRunProvenanceInput {\n modelProfileId?: string | null;\n securityTier?: string | null;\n graphCorpusHash?: string | null;\n rankingVersion?: string | null;\n policyVersion?: string | null;\n changes?: FileChange[];\n verification?: Array<{\n kind: string;\n command?: string | null;\n passed: boolean;\n diagnostic?: string | null;\n }>;\n}\n\n/** Infer create/edit/delete from before/after nullability. */\nexport function mutationOp(before: string | null, after: string | null): MutationOp {\n if (before === null && after !== null) return 'create';\n if (before !== null && after === null) return 'delete';\n return 'edit';\n}\n\n/** Content-hash one FileChange into a MutationProvenance entry. */\nexport function hashMutation(change: FileChange): MutationProvenance {\n const op = mutationOp(change.before, change.after);\n return {\n file: change.file,\n op,\n beforeHash: change.before === null ? null : hashString(change.before),\n afterHash: change.after === null ? null : hashString(change.after),\n diffHash: change.diff ? hashString(change.diff) : null,\n };\n}\n\n/**\n * Build a full run-provenance/0 record. Mutations are sorted by file path for\n * stability; root hash covers the sorted list only.\n */\nexport function buildRunProvenance(input: BuildRunProvenanceInput = {}): RunProvenance {\n const mutations = (input.changes ?? [])\n .map(hashMutation)\n .sort((a, b) => a.file.localeCompare(b.file) || a.op.localeCompare(b.op));\n const verification: VerificationStepProvenance[] | undefined = input.verification?.length\n ? input.verification\n .map((v) => ({\n kind: v.kind,\n command: v.command ?? null,\n passed: !!v.passed,\n diagnosticHash: v.diagnostic ? hashString(v.diagnostic.slice(0, 4000)) : null,\n }))\n .sort(\n (a, b) =>\n a.kind.localeCompare(b.kind) ||\n (a.command ?? '').localeCompare(b.command ?? '') ||\n Number(a.passed) - Number(b.passed),\n )\n : undefined;\n return {\n schemaVersion: RUN_PROVENANCE_SCHEMA_VERSION,\n policyVersion: input.policyVersion ?? CONTEXT_POLICY_VERSION,\n rankingVersion: input.rankingVersion ?? CAPSULE_RANKING_VERSION,\n modelProfileId: input.modelProfileId ?? null,\n securityTier: input.securityTier ?? null,\n graphCorpusHash: input.graphCorpusHash ?? null,\n mutations,\n mutationsRootHash: hashString(canonicalize(mutations)),\n ...(verification\n ? {\n verification,\n verificationRootHash: hashString(canonicalize(verification)),\n }\n : { verificationRootHash: null }),\n };\n}\n","/**\n * Constrained-decoding grammars for PatchIR (Fusion Approach B / ADR-005).\n *\n * Spark-tier local models should emit syntactically valid PatchIR JSON so apply\n * never parses free-text tool calls. Providers that support GBNF (llama.cpp via\n * llm-host) receive {@link patchIrGbnf}; others ignore the grammar field.\n *\n * The grammar is intentionally permissive on string contents (file paths, code)\n * while fixing the structural keys and op enum — highest leverage for zero\n * retry loops without needing a full JSON Schema compiler in-process.\n *\n * **llama.cpp GBNF constraint:** each production must be a single line. Indented\n * continuations are parsed as new (invalid) rules and fail with\n * `failed to parse grammar` — which aborts Spark's requireGrammar path.\n */\n\n/** GBNF that constrains the model to a PatchIR-shaped JSON object (schema patch-ir/0). */\nexport function patchIrGbnf(): string {\n // One production per line — required by llama.cpp / node-llama-cpp GBNF parser.\n return [\n 'root ::= ws patch',\n 'ws ::= [ \\\\t\\\\n]*',\n 'patch ::= \"{\" ws \"\\\\\"schemaVersion\\\\\"\" ws \":\" ws \"\\\\\"patch-ir/0\\\\\"\" ws \",\" ws \"\\\\\"operations\\\\\"\" ws \":\" ws operations ws \",\" ws \"\\\\\"assumptions\\\\\"\" ws \":\" ws array-any ws \",\" ws \"\\\\\"requestedVerification\\\\\"\" ws \":\" ws array-any ws \",\" ws \"\\\\\"provenance\\\\\"\" ws \":\" ws provenance ws \"}\"',\n 'operations ::= \"[\" ws operation (ws \",\" ws operation)* ws \"]\"',\n 'operation ::= replace-range | replace-text | create-file | delete-file | replace-symbol',\n 'replace-range ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-range\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"start\\\\\"\" ws \":\" ws number ws \",\" ws \"\\\\\"end\\\\\"\" ws \":\" ws number ws \",\" ws \"\\\\\"replacement\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"expectedHash\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"anchorSymbol\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'replace-text ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-text\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"search\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"replace\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"anchorSymbol\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'create-file ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"create-file\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"content\\\\\"\" ws \":\" ws string ws \"}\"',\n 'delete-file ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"delete-file\\\\\"\" ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws string ws \"}\"',\n 'replace-symbol ::= \"{\" ws \"\\\\\"op\\\\\"\" ws \":\" ws \"\\\\\"replace-symbol\\\\\"\" ws \",\" ws \"\\\\\"symbolId\\\\\"\" ws \":\" ws string ws \",\" ws \"\\\\\"replacement\\\\\"\" ws \":\" ws string (ws \",\" ws \"\\\\\"file\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"expectedHash\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'provenance ::= \"{\" ws \"\\\\\"format\\\\\"\" ws \":\" ws format (ws \",\" ws \"\\\\\"modelId\\\\\"\" ws \":\" ws (string | null) )? (ws \",\" ws \"\\\\\"raw\\\\\"\" ws \":\" ws (string | null) )? ws \"}\"',\n 'format ::= \"\\\\\"search-replace\\\\\"\" | \"\\\\\"whole-file\\\\\"\" | \"\\\\\"structured-json\\\\\"\" | \"\\\\\"grammar-constrained\\\\\"\" | \"\\\\\"code-edit\\\\\"\"',\n 'array-any ::= \"[\" ws (value (ws \",\" ws value)*)? ws \"]\"',\n 'value ::= object | array-any | string | number | \"true\" | \"false\" | null',\n 'object ::= \"{\" ws (string ws \":\" ws value (ws \",\" ws string ws \":\" ws value)*)? ws \"}\"',\n 'string ::= \"\\\\\"\" ( [^\"\\\\\\\\] | \"\\\\\\\\\" ([\"\\\\\\\\/bfnrt] | \"u\" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) )* \"\\\\\"\"',\n 'number ::= \"-\"? (\"0\" | [1-9] [0-9]*) (\".\" [0-9]+)? ([eE] [+-]? [0-9]+)?',\n 'null ::= \"null\"',\n '',\n ].join('\\n');\n}\n\n/**\n * Whether the agent should attach a PatchIR grammar for this profile.\n * Grammar path is for local constrained backends (llama.cpp); HTTP providers ignore it.\n */\nexport function shouldUsePatchIrGrammar(profile?: {\n constrainedDecoding?: boolean;\n toolCalling?: string;\n editFormat?: string;\n} | null): boolean {\n if (!profile) return false;\n if (profile.constrainedDecoding) return true;\n if (profile.toolCalling === 'grammar') return true;\n if (profile.editFormat === 'patch_ir_json' && profile.constrainedDecoding !== false) {\n // Prefer grammar when the pack is already PatchIR-oriented and decoding flag is not off.\n return !!profile.constrainedDecoding;\n }\n return false;\n}\n","/**\n * Deterministic string/URL locate answers for VG Code.\n *\n * Local constrained models are forced onto PatchIR grammar for edits. That is\n * the wrong contract for \"where is https://…?\" — the model then dumps invalid\n * JSON into the panel. For pure locate asks we answer from the hybrid literal\n * sweep and never surface PatchIR or identifier-annotation noise.\n */\n\nimport { extractLiteralNeedles, isLocateOnlyInstruction } from '../engine/query.js';\nimport { searchSymbols, type TextHit } from '../engine/search.js';\nimport type { VgGraph } from '../schema.js';\n\nexport { isLocateOnlyInstruction };\n\nexport interface LocateAnswer {\n needle: string;\n hits: Array<{ file: string; line: number; preview: string }>;\n totalTextMatches: number;\n /** Human summary for the panel (finalText / assistant). */\n summary: string;\n}\n\n/** Prefer the longest extracted URL/quote; else the trimmed instruction. */\nexport function primaryLocateNeedle(instruction: string): string {\n const needles = extractLiteralNeedles(instruction);\n if (needles.length === 0) return instruction.trim();\n return [...needles].sort((a, b) => b.length - a.length)[0]!;\n}\n\nexport function formatLocateAnswer(\n needle: string,\n hits: Array<{ file: string; line: number; preview: string }>,\n total: number,\n): string {\n if (hits.length === 0) {\n return (\n `No occurrences of \\`${needle}\\` in this workspace.\\n` +\n `(Literal search complete — 0 matches.)`\n );\n }\n const lines = hits.slice(0, 20).map((h) => `- ${h.file}:${h.line} ${h.preview.trim().slice(0, 120)}`);\n const more =\n total > hits.length\n ? `\\n… and ${total - hits.length} more (showing ${hits.length} of ${total}).`\n : total > 1\n ? `\\n(${total} occurrence${total === 1 ? '' : 's'}.)`\n : '';\n return `Found \\`${needle}\\`:\\n${lines.join('\\n')}${more}`;\n}\n\n/**\n * Run the hybrid literal sweep and build a panel-ready locate answer.\n * Call only when {@link isLocateOnlyInstruction} is true.\n */\nexport async function answerLocateInstruction(\n graph: VgGraph,\n root: string,\n instruction: string,\n limit = 30,\n): Promise<LocateAnswer> {\n const needle = primaryLocateNeedle(instruction);\n const result = await searchSymbols(graph, root, needle, limit);\n const hits = result.matches\n .filter((m): m is TextHit => m.kind === 'text')\n .map((m) => ({ file: m.file, line: m.line, preview: m.preview }));\n const total = result.totalTextMatches ?? hits.length;\n return {\n needle,\n hits,\n totalTextMatches: total,\n summary: formatLocateAnswer(needle, hits, total),\n };\n}\n\n/**\n * Strip model dump noise that must never be the panel's \"answer\":\n * PatchIR JSON blobs and `/* vg: unknown identifiers … *\\/` annotations.\n */\nexport function sanitizeAgentDisplayText(text: string): string {\n if (!text) return text;\n let t = text.replace(/\\n*\\/\\*\\s*vg:\\s*unknown identifiers[\\s\\S]*?\\*\\//gi, '').trim();\n // No-op / garbage PatchIR is not a user answer.\n if (\n /\"schemaVersion\"\\s*:\\s*\"patch-ir\\/0\"/i.test(t) ||\n (/\"op\"\\s*:\\s*\"replace-text\"/i.test(t) && /\"operations\"\\s*:/i.test(t))\n ) {\n return (\n 'This looked like a locate/search question, but the model returned an edit payload instead of an answer. ' +\n 'Ask again as “where is <url or string>?” — VG Code will use the literal search path.'\n );\n }\n return t;\n}\n","/**\n * The VG Code agentic loop (VG-CLI-CODE §12).\n *\n * This is what makes `vg code` a coding *agent* rather than a one-shot proposer:\n * the model is given the tool set (search the graph, read, list, impact, edit,\n * create, delete, run a command) and iterates — call tools, read the results,\n * call more tools — until it calls `finish` (or a step cap is hit). Mutating\n * tools pass through the injected approval gate, so the same governance holds\n * whether you approve each step interactively or run autonomously with `--auto`.\n *\n * For real multi-step sessions it also: writes an append-only, secret-free\n * **audit record** at the end of every run (governance parity with the\n * single-shot path); **compacts the transcript** so a long session stays under\n * the context-rot threshold that is the whole reason the graph exists; and\n * **guards against no-progress loops** so a model that repeats a failing call\n * stops cleanly instead of burning to the step cap.\n *\n * The model is the only non-deterministic seam (behind the provider list, with\n * fallback). Everything else — the loop, tool execution, gating, compaction,\n * guard, audit — is deterministic and unit-tested with a scripted provider.\n */\n\nimport { buildCodeContext } from './context.js';\nimport {\n buildTaskCapsule,\n capsuleToCodeContext,\n summarizeCapsule,\n CAPSULE_RANKING_VERSION,\n type CapsuleSummary,\n type TaskCapsule,\n} from './capsule.js';\nimport { buildCapsuleDelta, isEmptyCapsuleDelta, type CapsuleDelta } from './capsule-delta.js';\nimport {\n createDiscoveryGateState,\n gateDiscoveryTool,\n recordDiscoveryGateOutcome,\n} from './advanced-mode.js';\nimport { materializeWorktreeGraph } from './worktree-overlay.js';\nimport { buildAgentMessages } from './prompt.js';\nimport {\n AGENT_TOOLS,\n executeTool,\n type AskUserRequest,\n type MutatingAction,\n type ShellResult,\n type ToolContext,\n type ToolResult,\n} from './tools.js';\nimport { localGraphBackend, type GraphBackend } from './graph-backend.js';\nimport type { ModelExecutionProfile } from '../runtime/model-execution-profile.js';\nimport { SessionOverlay } from './overlay.js';\nimport { materializeSessionGraph } from './session-graph.js';\nimport { compileVerificationLadder, runVerificationLadder } from './verify-ladder.js';\nimport { buildFailureCapsule, type FailureCapsule } from './failure-capsule.js';\nimport {\n createTrajectoryCollector,\n DISCOVERY_TOOLS,\n MUTATION_TOOLS,\n type TrajectoryRecord,\n} from './trajectory.js';\nimport {\n buildRunProvenance,\n CONTEXT_POLICY_VERSION,\n type RunProvenance,\n} from './run-provenance.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { repositoryIdFromRoot } from '../runtime/paths.js';\nimport type { SymbolSpan } from './apply.js';\nimport type { CodeFs } from './session.js';\nimport type { ChatMessage, CodeContext, FileChange, Provider, ProviderResult, ToolCall, ToolSpec } from './types.js';\nimport type { VgGraph } from '../schema.js';\nimport { redactSecrets } from './providers.js';\nimport { patchIrGbnf, shouldUsePatchIrGrammar } from './patch-ir-grammar.js';\nimport {\n answerLocateInstruction,\n isLocateOnlyInstruction,\n sanitizeAgentDisplayText,\n} from './locate-answer.js';\nimport { buildIdentifierTrieFromGraph } from '../runtime/identifier-trie.js';\nimport type { TrieNode } from '../runtime/identifier-trie.js';\nimport { graphDraftCandidates, KvBlockRegistry } from '../runtime/kv-cache.js';\n\nexport type { CapsuleSummary, RunProvenance };\nexport { CONTEXT_POLICY_VERSION };\n\nexport interface AgentMetrics {\n discoveryToolCalls: number;\n mutationToolCalls: number;\n shellCommands: number;\n znsAt1: boolean;\n usedCapsule: boolean;\n failureCapsuleBuilt: boolean;\n trajectory: TrajectoryRecord;\n}\n\nexport type AgentEvent =\n | { type: 'assistant'; text: string }\n | { type: 'token'; text: string }\n | { type: 'tool-call'; name: string; args: Record<string, unknown> }\n | { type: 'tool-result'; name: string; content: string; mutated: boolean }\n | { type: 'change'; change: FileChange }\n | { type: 'compact'; droppedRounds: number }\n | { type: 'usage'; promptTokens: number; completionTokens: number }\n | { type: 'verify'; command: string; passed: boolean }\n | { type: 'ladder'; ok: boolean; summary: string }\n | { type: 'session-graph'; reparsed: number; dirty: number }\n | { type: 'step'; n: number }\n | { type: 'capsule'; summary: CapsuleSummary }\n | { type: 'capsule-delta'; delta: CapsuleDelta }\n | { type: 'failure-capsule'; capsule: FailureCapsule }\n | { type: 'checkpoint'; ref: string; commit: string; seq: number; files: string[] }\n | { type: 'metrics'; metrics: AgentMetrics };\n\nexport interface AgentOptions {\n graph: VgGraph;\n root: string;\n instruction: string;\n providers: Provider[];\n fsImpl: CodeFs;\n /** Run a shell command (injected). Prefer {@link executionEnv} when set. */\n run: (command: string) => ShellResult;\n /**\n * Security ladder substrate for shell (ADR-002). When set, `run_command` and\n * verify steps use `executionEnv.run` instead of the bare `run` callback.\n */\n executionEnv?: { tier: string; label: string; reason: string; run: (command: string, opts: { cwd: string }) => ShellResult };\n /**\n * Graph query backend (vgd ActiveGraph when a daemon session is attached).\n * When omitted, tools use the in-process {@link graph}.\n */\n graphBackend?: GraphBackend;\n /** Resolved Model Execution Profile (capsule budget / repair knobs). */\n modelProfile?: ModelExecutionProfile;\n /**\n * Extra pinned facts for Task Capsules (e.g. high-confidence federation\n * bridges). Secret-free strings only.\n */\n extraPinnedFacts?: string[];\n /** Approval gate for mutating actions. */\n approve: (action: MutatingAction) => Promise<boolean>;\n /**\n * Clarifying question for the human (VS Code / stream-json). When omitted,\n * ask_user tells the model to proceed with assumptions.\n */\n askUser?: (req: AskUserRequest) => Promise<string>;\n maxSteps?: number;\n budget?: number;\n /** Approx token budget for the running transcript before it is compacted. */\n contextBudget?: number;\n /** Autonomous mode — enforce the command denylist (no human reviews each call). */\n auto?: boolean;\n /** Project-configured extra denylist rules for autonomous commands. */\n denyCommands?: string[];\n /** The project's test/verify command, surfaced to the model. */\n testCommand?: string;\n /** Auto-verify: after the model finishes, run this command and make it fix failures. */\n verify?: { command: string; maxRounds?: number };\n /** Stream assistant tokens as they arrive (emits `token` events). */\n stream?: boolean;\n /** A recap of earlier tasks (from `--continue`) to seed continuity. */\n priorSummary?: string;\n /**\n * Rendered project instructions (AGENTS.md / CLAUDE.md / .vibgrate/rules).\n * Advisory only — see {@link loadProjectRules}; they never widen permissions.\n */\n projectRules?: string;\n /**\n * Take a checkpoint just before an approved change is written, so it can be\n * undone later. Injected, so the loop stays free of git plumbing and testable\n * without a repository. Returning null (no repo, git failure) is normal and\n * never blocks the change.\n */\n checkpoint?: (files: string[]) => { ref: string; commit: string; seq: number } | null;\n /**\n * Cooperative cancellation (VG-CLI-CODE §18.2). Checked between steps, so a\n * host can stop a turn without killing a long-lived session process. Work\n * already approved and applied is kept — this stops the loop, it does not\n * roll back; use a checkpoint to undo.\n */\n signal?: { aborted: boolean };\n /**\n * External / built-in MCP tools the model may also call (approval-bound for\n * non-read-only remote tools). Always include local `vg serve` tools via\n * {@link createVgBuiltinMcpTools} so the agent has the installed CLI surface.\n */\n externalTools?: {\n specs: ToolSpec[];\n owns: (name: string) => boolean;\n execute: (call: ToolCall, live?: { graph: VgGraph }) => Promise<ToolResult>;\n };\n onEvent?: (e: AgentEvent) => void;\n /** Per-model savings attribution for graph-backed (`search_code`) calls. */\n attribution?: { client: string; provider?: string; model?: string };\n now?: () => number;\n /** Skip the audit record (tests / programmatic dry calls). */\n noAudit?: boolean;\n /**\n * When true (default), build an identifier trie from the graph and pass it to\n * local llama.cpp generations for unknown-identifier annotation.\n */\n identifierMask?: boolean;\n /**\n * Use a source-bearing Task Capsule for the first context (Fusion Runtime\n * Phase 0 A/B). When true, exact source ranges from the graph are included so\n * the model can solve without navigation tool calls (ZNS@1 path). Default\n * false keeps today's metadata-only context.\n */\n capsule?: boolean;\n /** Restrict context seeds to these files (from `--file`), if given. */\n files?: string[];\n /**\n * Buffer mutations in a session overlay (Phase 5). Reads see uncommitted\n * edits; the overlay is flushed before shell commands and when the run ends.\n * Default true under capsule mode, false otherwise. Set false to write the\n * base fs immediately (legacy).\n */\n overlay?: boolean;\n /**\n * Run the graph-derived verification ladder on finish (syntax + optional\n * testCommand). Default true when capsule context is used.\n */\n verifyLadder?: boolean;\n /**\n * Free use of low-level discovery tools. Default true. When false (typical\n * with capsule mode), early discovery is soft-nudged then hard-capped until\n * a mutation or inspect_change (Fusion Phase 4 ZNS@1 path).\n */\n advancedMode?: boolean;\n /**\n * Reparse git-dirty worktree files into the graph before the agent loop\n * (base ⊕ worktree). Default false (tests / CI stay offline-fast). Interactive\n * and stream-json enable this so the map matches uncommitted edits.\n */\n worktreeOverlay?: boolean;\n /**\n * When true (default), pure locate/URL-occurrence asks answer from the hybrid\n * literal sweep without calling the model — avoids PatchIR dumps in the panel.\n */\n deterministicLocate?: boolean;\n}\n\nexport type AgentStop = 'finished' | 'max-steps' | 'no-tools' | 'no-progress' | 'error' | 'cancelled';\n\nexport interface AgentResult {\n finalText: string;\n changes: FileChange[];\n steps: number;\n stopped: AgentStop;\n provider: { id: string; model: string; fellBack: boolean };\n /** Total tokens the model reported over the run (for the cost meter). */\n usage: { promptTokens: number; completionTokens: number };\n /** Trajectory / ZNS metrics for FCS reporting. */\n metrics?: AgentMetrics;\n /** Last Failure Capsule built during this run (if any). */\n failureCapsule?: FailureCapsule | null;\n /** Capsule summary when capsule mode was used. */\n capsuleSummary?: CapsuleSummary | null;\n /**\n * Run provenance (run-provenance/0): policy pin, ranking, model profile,\n * security tier, graph corpus, and content-hashed mutations.\n */\n provenance?: RunProvenance;\n}\n\nconst DEFAULT_MAX_STEPS = 24;\n/** Compact the transcript once it grows past this many estimated tokens. */\nconst DEFAULT_CONTEXT_BUDGET = 16_000;\n/** Rounds (assistant + its tool results) to keep verbatim when compacting. */\nconst KEEP_ROUNDS = 8;\n/** After this many identical, non-progressing repeats, nudge the model. */\nconst NUDGE_AT = 3;\n/** After this many, stop the run as no-progress. */\nconst STOP_AT = 5;\n\nexport async function runAgent(options: AgentOptions): Promise<AgentResult> {\n const { root, instruction, providers } = options;\n let graph = options.graph;\n const maxSteps = options.maxSteps ?? DEFAULT_MAX_STEPS;\n // MEP capsule budget can raise the first-context budget when not explicitly set.\n const budget =\n options.budget ??\n options.modelProfile?.capsuleBudgetTokens ??\n 3000;\n const contextBudget = options.contextBudget ?? DEFAULT_CONTEXT_BUDGET;\n const now = options.now ?? (() => 0);\n const onEvent = options.onEvent ?? (() => {});\n const verifyConfig =\n options.verify && options.modelProfile?.maxRepairRounds != null && options.verify.maxRounds == null\n ? { ...options.verify, maxRounds: options.modelProfile.maxRepairRounds }\n : options.verify;\n\n // Identifier trie for local constrained backends (Approach B); optional off switch.\n const identifierTrie: TrieNode | undefined =\n options.identifierMask === false ? undefined : buildIdentifierTrieFromGraph(graph);\n // Capsule/system prefix KV plan registry for host-level reuse (planning layer).\n const kvRegistry = new KvBlockRegistry();\n // Speculative drafts: verbatim signatures / qualified names the graph already knows.\n const draftCandidates = graphDraftCandidates(\n graph.nodes\n .flatMap((n) => [n.signature, n.qualifiedName, n.name].filter(Boolean) as string[])\n .filter((s) => s.includes('(') || s.includes('function') || s.includes('class') || s.length > 12),\n 12,\n );\n\n // Worktree overlay: reparse git-dirty files so the map matches the working tree.\n const useWorktree = options.worktreeOverlay === true;\n if (useWorktree) {\n try {\n const wt = await materializeWorktreeGraph(graph, root);\n if (wt.reparsed.length || wt.deleted.length) {\n graph = wt.graph;\n onEvent({\n type: 'session-graph',\n reparsed: wt.reparsed.length,\n dirty: wt.dirtyFiles.length,\n });\n }\n } catch {\n /* worktree overlay is best-effort */\n }\n }\n\n // Session overlay: tools read/write the overlay; shell + finish flush to base.\n const useOverlay = options.overlay ?? !!options.capsule;\n const overlay = useOverlay ? new SessionOverlay(options.fsImpl) : null;\n const fsImpl: CodeFs = overlay ?? options.fsImpl;\n const flushOverlay = (): void => {\n overlay?.flush();\n };\n\n // Capsule-first runs default to non-advanced discovery (ZNS@1 path).\n const advancedMode = options.advancedMode ?? !options.capsule;\n const discoveryGate = createDiscoveryGateState();\n\n const allTools = [...AGENT_TOOLS, ...(options.externalTools?.specs ?? [])];\n const built = buildAgentContext(graph, instruction, { ...options, fsImpl, budget });\n const context = built.context;\n let capsule = built.capsule;\n const useLadder = options.verifyLadder ?? !!capsule;\n const messages: ChatMessage[] = buildAgentMessages(context);\n // Project instructions sit after the repo context and before the recap: the\n // model should read house style before it reads what it already did.\n if (options.projectRules) {\n messages.push({ role: 'user', content: options.projectRules });\n }\n if (options.priorSummary) {\n messages.push({ role: 'user', content: options.priorSummary });\n }\n if (options.testCommand) {\n messages.push({ role: 'user', content: `When you want to verify a change, the project's test command is: \\`${options.testCommand}\\`` });\n }\n // Locate-only (URL / \"where is …?\"): never force PatchIR grammar — the model\n // would dump JSON edits into the panel. Prefer a deterministic literal answer.\n const locateOnly = isLocateOnlyInstruction(instruction);\n const spans = buildSpanIndex(graph);\n\n const changes: FileChange[] = [];\n const repeats = new Map<string, number>();\n let recordedSearch = false;\n let commandCount = 0;\n let verifyRounds = verifyConfig?.maxRounds ?? 2;\n let lastVerifyPassed = true;\n /** Last verification ladder / command outcomes for run provenance. */\n let lastVerification: Array<{\n kind: string;\n command?: string | null;\n passed: boolean;\n diagnostic?: string | null;\n }> = [];\n let lastFailureCapsule: FailureCapsule | null = null;\n const usage = { promptTokens: 0, completionTokens: 0 };\n let providerInfo = { id: providers[0]?.id ?? 'none', model: providers[0]?.model ?? '', fellBack: false };\n const trajectory = createTrajectoryCollector();\n let currentStep = 0;\n const capsuleSummary = capsule ? summarizeCapsule(capsule) : null;\n if (capsuleSummary) onEvent({ type: 'capsule', summary: capsuleSummary });\n\n // Deterministic locate short-circuit: correct file:line without model noise\n // (and without PatchIR / identifier-annotation dumps in the VG Code panel).\n if (locateOnly && options.deterministicLocate !== false) {\n try {\n const locate = await answerLocateInstruction(graph, root, instruction, 30);\n providerInfo = { id: 'deterministic-locate', model: 'literal-sweep', fellBack: false };\n onEvent({ type: 'assistant', text: locate.summary });\n const traj = trajectory.finalize({\n taskId: instruction.slice(0, 48),\n arm: capsule ? 'capsule' : 'metadata',\n solved: true,\n verified: true,\n steps: 0,\n stopped: 'finished',\n inferenceTurns: 0,\n filesChanged: 0,\n usedCapsule: !!capsule,\n provider: { id: 'deterministic-locate', model: 'literal-sweep' },\n });\n const earlyMetrics: AgentMetrics = {\n discoveryToolCalls: 0,\n mutationToolCalls: 0,\n shellCommands: 0,\n znsAt1: true,\n usedCapsule: !!capsule,\n failureCapsuleBuilt: false,\n trajectory: traj,\n };\n onEvent({ type: 'metrics', metrics: earlyMetrics });\n return {\n finalText: locate.summary,\n changes: [],\n steps: 0,\n stopped: 'finished',\n provider: providerInfo,\n usage,\n metrics: earlyMetrics,\n failureCapsule: null,\n capsuleSummary,\n provenance: buildRunProvenance({\n modelProfileId: options.modelProfile?.id ?? capsule?.provenance.modelProfileId ?? null,\n securityTier:\n options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? capsule?.provenance.securityTier ?? null,\n graphCorpusHash: capsule?.provenance.graphCorpusHash ?? graph.provenance?.corpusHash ?? null,\n rankingVersion: capsule?.provenance.rankingVersion ?? CAPSULE_RANKING_VERSION,\n policyVersion: capsule?.provenance.policyVersion ?? CONTEXT_POLICY_VERSION,\n changes: [],\n verification: [],\n }),\n };\n } catch {\n /* fall through to the model loop if the tree scan fails */\n }\n }\n\n const runShell = (command: string): ShellResult => {\n if (options.executionEnv) return options.executionEnv.run(command, { cwd: root });\n return options.run(command);\n };\n\n /** Files a mutating action will touch, for the checkpoint record. */\n const actionFiles = (action: MutatingAction): string[] => {\n if (action.kind === 'patch') return action.files.map((f) => f.file);\n return 'file' in action && action.file ? [action.file] : [];\n };\n\n /**\n * Approval gate, plus a checkpoint. The snapshot is taken *after* the user\n * consents and *before* the write lands, so restoring returns the tree to\n * the state it was in just before this change — which is what \"undo this\n * edit\" has to mean. Snapshots only happen for changes that touch files;\n * a command approval has nothing to restore.\n */\n const approveAndCheckpoint = async (action: MutatingAction): Promise<boolean> => {\n const approved = await options.approve(action);\n if (!approved || !options.checkpoint) return approved;\n const files = actionFiles(action);\n if (!files.length) return approved;\n try {\n const cp = options.checkpoint(files);\n if (cp) onEvent({ type: 'checkpoint', ...cp, files });\n } catch {\n /* a checkpoint is a convenience — never fail an approved change over it */\n }\n return approved;\n };\n\n const ctx: ToolContext = {\n root,\n graph,\n fsImpl,\n spans,\n run: runShell,\n approve: approveAndCheckpoint,\n askUser: options.askUser,\n auto: options.auto,\n denyCommands: options.denyCommands,\n capsule,\n getTaskCapsule: () => capsule,\n graphBackend: options.graphBackend,\n dirtyFiles: () => (overlay ? overlay.dirtyFiles() : []),\n changedFiles: () => changes.map((c) => c.file),\n // B3: enforce-before-apply against the live graph trie.\n identifierTrie: identifierTrie ?? null,\n enforceIdentifiers: options.identifierMask !== false,\n };\n\n /** Recompute the tool-visible graph from the session overlay after mutations. */\n const refreshSessionGraph = async (): Promise<void> => {\n if (!overlay || !overlay.isDirty()) return;\n try {\n const session = await materializeSessionGraph(graph, overlay);\n ctx.graph = session.graph;\n // Uncommitted overlay content is only on the local session graph — not in vgd.\n ctx.graphBackend = localGraphBackend(session.graph);\n // Keep enforce trie aligned with session-visible symbols (new symbols from approved edits become legal).\n if (options.identifierMask !== false) {\n ctx.identifierTrie = buildIdentifierTrieFromGraph(session.graph);\n }\n const next = buildSpanIndex(session.graph);\n ctx.spans.clear();\n for (const [k, v] of next) ctx.spans.set(k, v);\n onEvent({ type: 'session-graph', reparsed: session.reparsed.length, dirty: session.deleted.length + session.rewritten.length });\n // Capsule delta: recompile from session-visible files when capsule mode is on.\n if (options.capsule && capsule) {\n try {\n const nextCapsule = buildTaskCapsule(session.graph, instruction, {\n budget,\n files: options.files,\n readFile: (rel) => fsImpl.read(rel),\n repositoryId: repositoryIdFromRoot(root),\n provenance: {\n modelProfileId: options.modelProfile?.id ?? null,\n securityTier: options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? null,\n },\n });\n const delta = buildCapsuleDelta(capsule, nextCapsule);\n capsule = nextCapsule;\n ctx.capsule = nextCapsule;\n if (!isEmptyCapsuleDelta(delta)) {\n onEvent({ type: 'capsule-delta', delta });\n messages.push({ role: 'user', content: delta.rendered.slice(0, 6000) });\n }\n } catch {\n /* capsule refresh is best-effort */\n }\n }\n } catch {\n /* session graph is best-effort — keep baseline map */\n }\n };\n\n const emitFailure = (fc: FailureCapsule): void => {\n lastFailureCapsule = fc;\n trajectory.markFailureCapsule();\n onEvent({ type: 'failure-capsule', capsule: fc });\n };\n\n /** Single terminal path: flush overlay, write audit once, then return. */\n const finish = (stopped: AgentStop, finalText: string, steps: number): AgentResult => {\n flushOverlay();\n const solved = stopped === 'finished' && lastVerifyPassed;\n const traj = trajectory.finalize({\n taskId: options.attribution?.client ? `${options.attribution.client}:${instruction.slice(0, 40)}` : instruction.slice(0, 48),\n arm: capsule ? 'capsule' : 'metadata',\n solved,\n verified: lastVerifyPassed,\n steps,\n stopped,\n inferenceTurns: currentStep || steps,\n filesChanged: changes.length,\n usedCapsule: !!capsule,\n provider: { id: providerInfo.id, model: providerInfo.model },\n });\n const metrics: AgentMetrics = {\n discoveryToolCalls: traj.discoveryToolCalls,\n mutationToolCalls: traj.mutationToolCalls,\n shellCommands: traj.shellCommands,\n znsAt1: traj.znsAt1,\n usedCapsule: !!capsule,\n failureCapsuleBuilt: traj.failureCapsuleBuilt,\n trajectory: traj,\n };\n onEvent({ type: 'metrics', metrics });\n const result: AgentResult = {\n finalText,\n changes,\n steps,\n stopped,\n provider: providerInfo,\n usage,\n metrics,\n failureCapsule: lastFailureCapsule,\n capsuleSummary: capsule ? summarizeCapsule(capsule) : capsuleSummary,\n provenance: buildRunProvenance({\n modelProfileId: options.modelProfile?.id ?? capsule?.provenance.modelProfileId ?? null,\n securityTier:\n options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? capsule?.provenance.securityTier ?? null,\n graphCorpusHash: capsule?.provenance.graphCorpusHash ?? graph.provenance?.corpusHash ?? null,\n rankingVersion: capsule?.provenance.rankingVersion ?? CAPSULE_RANKING_VERSION,\n policyVersion: capsule?.provenance.policyVersion ?? CONTEXT_POLICY_VERSION,\n changes,\n verification: lastVerification,\n }),\n };\n if (!options.noAudit) {\n writeAgentAudit(\n options.fsImpl,\n {\n instruction,\n providerInfo,\n changes,\n commandCount,\n steps,\n stopped,\n provenance: result.provenance,\n },\n now(),\n );\n }\n return result;\n };\n\n /**\n * On finish: graph-derived ladder (syntax / hints / testCommand), then optional\n * explicit verify command. Failure feeds a Failure Capsule + retries while rounds remain.\n */\n const verifyOnFinish = (): 'retry' | 'done' => {\n if (changes.length === 0) return 'done';\n\n if (useLadder && capsule) {\n const steps = compileVerificationLadder(capsule.verificationPlan, {\n testCommand: verifyConfig?.command ?? options.testCommand,\n });\n // Shell steps need real files — flush before the ladder.\n flushOverlay();\n const ladder = runVerificationLadder(steps, {\n readFile: (f) => options.fsImpl.read(f),\n run: runShell,\n // Prefer the dedicated verify command path below when both are set, so we\n // don't double-run the same test command.\n runCommands: !verifyConfig?.command,\n });\n const summary = ladder.steps.map((s) => `${s.ok ? '✔' : '✗'} ${s.message}`).join('\\n');\n onEvent({ type: 'ladder', ok: ladder.ok, summary });\n lastVerification = ladder.steps.map((s) => ({\n kind: s.step?.kind ?? 'ladder',\n command: s.step && 'command' in s.step ? (s.step as { command?: string }).command ?? null : null,\n passed: !!s.ok,\n diagnostic: s.message ?? null,\n }));\n if (!ladder.ok) {\n lastVerifyPassed = false;\n const fc = buildFailureCapsule({\n ladderSteps: ladder.steps,\n capsule,\n changedFiles: changes.map((c) => c.file),\n modelId: providerInfo.model,\n policyVersion: CONTEXT_POLICY_VERSION,\n });\n emitFailure(fc);\n if (verifyRounds <= 0) return 'done';\n verifyRounds--;\n messages.push({\n role: 'user',\n content: `The task isn't finished — verification ladder failed.\\n\\n${fc.rendered.slice(0, 8000)}\\n\\nFix the issues, then call finish again.${verifyRounds === 0 ? ' (last verification attempt)' : ''}`,\n });\n return 'retry';\n }\n }\n\n const v = verifyConfig;\n if (!v || verifyRounds <= 0) {\n lastVerifyPassed = true;\n return 'done';\n }\n flushOverlay();\n const res = runShell(v.command);\n onEvent({ type: 'verify', command: v.command, passed: res.exitCode === 0 });\n lastVerification = [\n ...lastVerification,\n {\n kind: 'command',\n command: v.command,\n passed: res.exitCode === 0,\n diagnostic: res.stdout?.slice(0, 4000) ?? null,\n },\n ];\n if (res.exitCode === 0) {\n lastVerifyPassed = true;\n return 'done';\n }\n lastVerifyPassed = false;\n const fc = buildFailureCapsule({\n verify: { command: v.command, exitCode: res.exitCode, stdout: res.stdout },\n capsule,\n changedFiles: changes.map((c) => c.file),\n modelId: providerInfo.model,\n policyVersion: CONTEXT_POLICY_VERSION,\n });\n emitFailure(fc);\n verifyRounds--;\n messages.push({\n role: 'user',\n content: `The task isn't finished — \\`${v.command}\\` failed (exit ${res.exitCode}).\\n\\n${fc.rendered.slice(0, 8000)}\\n\\nFix the failing tests, then call finish again.${verifyRounds === 0 ? ' (last verification attempt)' : ''}`,\n });\n return 'retry';\n };\n\n for (let step = 1; step <= maxSteps; step++) {\n // Cooperative cancel: checked before any model call or tool, so a stopped\n // turn never starts new work. Applied mutations stay applied.\n if (options.signal?.aborted) {\n return finish('cancelled', 'stopped at your request', step - 1);\n }\n currentStep = step;\n onEvent({ type: 'step', n: step });\n\n // Keep the transcript under the budget: preserve the cache-stable prefix\n // (system + graph context + task) and the recent rounds, summarize the rest.\n const compacted = compact(messages, contextBudget, changes);\n if (compacted.droppedRounds > 0) {\n messages.length = 0;\n messages.push(...compacted.messages);\n onEvent({ type: 'compact', droppedRounds: compacted.droppedRounds });\n }\n\n let result: ProviderResult;\n try {\n // Mark stable prefix blocks warm after first turn for KV plan metrics (no native KV yet).\n if (kvRegistry.size() === 0 && messages.length >= 2) {\n kvRegistry.commit(\n messages.slice(0, Math.min(3, messages.length)).map((m, i) => ({\n kind: i === 0 ? 'system' : 'context',\n text: typeof m.content === 'string' ? m.content : '',\n })),\n );\n }\n const promptSegments = messages.map((m, i) => ({\n kind: m.role === 'system' ? 'system' : i < 3 ? 'context' : m.role === 'user' ? 'user' : 'assistant',\n text: typeof m.content === 'string' ? m.content : '',\n }));\n const c = await complete(\n providers,\n messages,\n allTools,\n onEvent,\n options.stream,\n options.modelProfile,\n identifierTrie,\n draftCandidates,\n promptSegments,\n /* skipPatchIrGrammar */ locateOnly,\n );\n result = c.result;\n providerInfo = { id: c.provider.id, model: c.provider.model, fellBack: c.fellBack };\n } catch (e) {\n const msg = redactSecrets((e as Error).message);\n onEvent({ type: 'assistant', text: `error: ${msg}` });\n return finish('error', msg, step);\n }\n\n // Accumulate token usage for the cost meter.\n if (result.usage) {\n usage.promptTokens += result.usage.promptTokens ?? 0;\n usage.completionTokens += result.usage.completionTokens ?? 0;\n trajectory.recordUsage(result.usage.promptTokens ?? 0, result.usage.completionTokens ?? 0);\n onEvent({ type: 'usage', promptTokens: result.usage.promptTokens ?? 0, completionTokens: result.usage.completionTokens ?? 0 });\n }\n\n const displayText = sanitizeAgentDisplayText(result.text ?? '');\n if (displayText) onEvent({ type: 'assistant', text: displayText });\n\n const toolCalls = result.toolCalls ?? [];\n if (toolCalls.length === 0) {\n messages.push({ role: 'assistant', content: result.text });\n // Clean prose/Markdown answer (Q&A, explanations) is a successful finish —\n // same as Claude Code free-text, not a failed no-tools dump.\n if (isUserFacingProse(displayText)) {\n return finish('finished', displayText, step);\n }\n return finish('no-tools', displayText || 'done', step);\n }\n\n messages.push({ role: 'assistant', content: result.text, toolCalls });\n\n for (const call of toolCalls) {\n onEvent({ type: 'tool-call', name: call.name, args: call.arguments });\n if (call.name === 'search_code' && options.attribution?.client && !recordedSearch) {\n recordedSearch = true;\n recordSearchSaving(root, context, options.attribution, now());\n }\n\n // Shell commands see the real tree — flush session overlay first.\n if (call.name === 'run_command') flushOverlay();\n\n // Capsule-first discovery policy (soft nudge / hard cap).\n if (!options.externalTools?.owns(call.name)) {\n const gate = gateDiscoveryTool(call.name, discoveryGate, { advancedMode });\n if (!gate.allow) {\n const blocked = { content: gate.reason, mutated: false };\n onEvent({ type: 'tool-result', name: call.name, content: blocked.content, mutated: false });\n messages.push({ role: 'tool', content: blocked.content, toolCallId: call.id, name: call.name });\n continue;\n }\n if (gate.note) {\n // Note applied after the tool result below.\n (call as { __gateNote?: string }).__gateNote = gate.note;\n }\n }\n\n const toolResult = options.externalTools?.owns(call.name)\n ? await options.externalTools.execute(call, { graph: ctx.graph })\n : await executeTool(call, ctx);\n if (!options.externalTools?.owns(call.name)) {\n recordDiscoveryGateOutcome(call.name, discoveryGate, { mutated: toolResult.mutated });\n }\n const gateNote = (call as { __gateNote?: string }).__gateNote;\n if (gateNote) toolResult.content = `${toolResult.content}\\n\\n${gateNote}`;\n if (call.name === 'run_command' && toolResult.mutated) commandCount++;\n if (toolResult.change) {\n changes.push(toolResult.change);\n onEvent({ type: 'change', change: toolResult.change });\n }\n // After an approved mutation, refresh the session graph so subsequent\n // search_code / graph_impact see uncommitted overlay content.\n if (toolResult.mutated && !toolResult.finished) {\n await refreshSessionGraph();\n }\n\n // No-progress guard: a mutating call is progress (reset); a repeated\n // non-mutating identical call accumulates → nudge, then stop.\n const sig = `${call.name}:${stableArgs(call.arguments)}`;\n let content = toolResult.content;\n let stopNoProgress = false;\n if (toolResult.mutated || toolResult.finished) {\n repeats.delete(sig);\n } else {\n const n = (repeats.get(sig) ?? 0) + 1;\n repeats.set(sig, n);\n if (n >= STOP_AT) stopNoProgress = true;\n else if (n >= NUDGE_AT) content += `\\n\\n(note: you have called this exact tool call ${n} times with no change — try a different approach, read more context, or call finish.)`;\n }\n\n trajectory.recordTool(call.name, step, toolResult.mutated);\n onEvent({ type: 'tool-result', name: call.name, content, mutated: toolResult.mutated });\n messages.push({ role: 'tool', content, toolCallId: call.id, name: call.name });\n\n if (toolResult.finished) {\n // Auto-verify: on failure, keep going so the model fixes it.\n if (verifyOnFinish() === 'retry') break;\n return finish('finished', toolResult.finalSummary ?? 'done', step);\n }\n if (stopNoProgress) return finish('no-progress', `stopped: the model repeated \\`${call.name}\\` without making progress`, step);\n }\n }\n return finish('max-steps', 'reached the step limit before finishing', maxSteps);\n}\n\n/** Try providers in order, falling back on transport failure. Throws the last actionable error. */\nasync function complete(\n providers: Provider[],\n messages: ChatMessage[],\n tools: ToolSpec[],\n onEvent: (e: AgentEvent) => void,\n stream?: boolean,\n modelProfile?: ModelExecutionProfile,\n identifierTrie?: TrieNode,\n draftCandidates?: string[],\n promptSegments?: Array<{ kind: string; text: string }>,\n skipPatchIrGrammar = false,\n): Promise<{ result: ProviderResult; provider: Provider; fellBack: boolean }> {\n if (providers.length === 0) throw new Error('no model provider available');\n const onToken = stream ? (t: string): void => onEvent({ type: 'token', text: t }) : undefined;\n // Locate/Q&A must not use PatchIR GBNF — that forces edit JSON into the panel.\n const grammar =\n !skipPatchIrGrammar && shouldUsePatchIrGrammar(modelProfile) ? patchIrGbnf() : undefined;\n // Fail-closed on embedded path when pack requires constrained decoding.\n const requireGrammar = !!(\n grammar &&\n modelProfile?.constrainedDecoding &&\n providers.some((p) => p.id === 'llama-cpp')\n );\n let lastErr: unknown;\n for (let i = 0; i < providers.length; i++) {\n try {\n const result = await providers[i].chat(messages, {\n temperature: 0,\n tools,\n stream,\n onToken,\n grammar,\n // Only require grammar on the llama-cpp provider; HTTP providers ignore it.\n requireGrammar: requireGrammar && providers[i].id === 'llama-cpp',\n identifierTrie,\n draftCandidates,\n promptSegments,\n });\n return { result, provider: providers[i], fellBack: i > 0 };\n } catch (e) {\n lastErr = e;\n }\n }\n throw new Error(lastErr instanceof Error ? redactSecrets(lastErr.message) : String(lastErr));\n}\n\n/**\n * Compact the transcript when it exceeds `budget` tokens: keep the first three\n * messages (system + graph context + task — the cache-stable prefix) and the\n * last {@link KEEP_ROUNDS} rounds verbatim, replacing the middle with a short\n * summary. A \"round\" is an assistant turn plus the tool results it triggered, so\n * an assistant/tool pair is never split (which an OpenAI-compatible API rejects).\n */\nexport function compact(messages: ChatMessage[], budget: number, changes: FileChange[]): { messages: ChatMessage[]; droppedRounds: number } {\n if (estimateTokens(messages) <= budget) return { messages, droppedRounds: 0 };\n const head = messages.slice(0, 3);\n const body = messages.slice(3);\n const rounds: ChatMessage[][] = [];\n for (const m of body) {\n if (m.role === 'assistant' || rounds.length === 0) rounds.push([m]);\n else rounds[rounds.length - 1].push(m);\n }\n if (rounds.length <= KEEP_ROUNDS) return { messages, droppedRounds: 0 };\n const dropped = rounds.slice(0, rounds.length - KEEP_ROUNDS);\n const kept = rounds.slice(-KEEP_ROUNDS).flat();\n const toolCalls = dropped.flat().reduce((n, m) => n + (m.role === 'assistant' ? (m.toolCalls?.length ?? 0) : 0), 0);\n const filesChanged = [...new Set(changes.map((c) => c.file))];\n const note: ChatMessage = {\n role: 'user',\n content: `[earlier steps summarized to save context: ${dropped.length} round(s), ${toolCalls} tool call(s) omitted.${filesChanged.length ? ` Files changed so far: ${filesChanged.join(', ')}.` : ''} Continue the task.]`,\n };\n return { messages: [...head, note, ...kept], droppedRounds: dropped.length };\n}\n\n/**\n * Assemble the first-turn context. Capsule mode injects exact source ranges\n * from graph spans (Fusion Runtime); legacy mode is metadata-only.\n * Returns the capsule when built so the verification ladder can use its plan.\n */\nfunction buildAgentContext(\n graph: VgGraph,\n instruction: string,\n options: AgentOptions,\n): { context: CodeContext; capsule: TaskCapsule | null } {\n const budget = options.budget ?? 3000;\n const files = options.files;\n if (!options.capsule) {\n return { context: buildCodeContext(graph, instruction, { budget, files }), capsule: null };\n }\n const capsule = buildTaskCapsule(graph, instruction, {\n budget,\n files,\n readFile: (rel) => options.fsImpl.read(rel),\n repositoryId: repositoryIdFromRoot(options.root),\n extraPinnedFacts: options.extraPinnedFacts,\n provenance: {\n modelProfileId: options.modelProfile?.id ?? null,\n securityTier: options.executionEnv?.tier ?? options.modelProfile?.securityTier ?? null,\n policyVersion: CONTEXT_POLICY_VERSION,\n },\n });\n return { context: capsuleToCodeContext(capsule), capsule };\n}\n\nexport { summarizeCapsule } from './capsule.js';\n/** Re-export metric helpers used by tools (discovery set). */\nexport { DISCOVERY_TOOLS, MUTATION_TOOLS };\n\nfunction recordSearchSaving(root: string, context: CodeContext, attribution: NonNullable<AgentOptions['attribution']>, ts: number): void {\n const files = new Set(context.seeds.map((s) => s.node.file).filter(Boolean));\n recordCliCall(\n root,\n {\n tool: CLI_TOOL_ALIASES.ask,\n client: attribution.client,\n provider: attribution.provider,\n model: attribution.model,\n outcome: context.seeds.length ? 'complete' : 'miss',\n vgTokens: context.tokensEstimate,\n baselineFiles: files.size,\n },\n ts,\n );\n}\n\n/** An append-only, secret-free audit record for one agent run (no code, no output, no keys). */\nfunction writeAgentAudit(\n fsImpl: CodeFs,\n rec: {\n instruction: string;\n providerInfo: { id: string; model: string };\n changes: FileChange[];\n commandCount: number;\n steps: number;\n stopped: AgentStop;\n provenance?: RunProvenance;\n },\n ts: number,\n): void {\n try {\n fsImpl.appendAudit(\n JSON.stringify({\n ts,\n kind: 'agent',\n instruction: rec.instruction.slice(0, 500),\n provider: rec.providerInfo.id,\n model: rec.providerInfo.model,\n steps: rec.steps,\n stopped: rec.stopped,\n commands: rec.commandCount,\n files: rec.changes.map((c) => ({ file: c.file, statuses: c.outcomes.map((o) => o.status) })),\n // Content hashes only — never file bodies or secrets.\n provenance: rec.provenance\n ? {\n schemaVersion: rec.provenance.schemaVersion,\n policyVersion: rec.provenance.policyVersion,\n rankingVersion: rec.provenance.rankingVersion,\n modelProfileId: rec.provenance.modelProfileId,\n securityTier: rec.provenance.securityTier,\n graphCorpusHash: rec.provenance.graphCorpusHash,\n mutationsRootHash: rec.provenance.mutationsRootHash,\n verificationRootHash: rec.provenance.verificationRootHash ?? null,\n mutationCount: rec.provenance.mutations.length,\n verificationCount: rec.provenance.verification?.length ?? 0,\n }\n : undefined,\n }),\n );\n } catch {\n /* audit is best-effort — never fail a run on a logging problem */\n }\n}\n\n/** True when model text is a real answer, not empty/PatchIR/tool JSON. */\nfunction isUserFacingProse(text: string): boolean {\n const t = (text ?? '').trim();\n if (t.length < 12) return false;\n if (/\"schemaVersion\"\\s*:\\s*\"patch-ir\\/0\"/i.test(t)) return false;\n if (/^\\s*\\{[\\s\\S]*\"operations\"\\s*:/.test(t)) return false;\n if (!/[A-Za-z]{4,}/.test(t)) return false;\n return true;\n}\n\n/** Deterministic argument signature for the repeat guard (order-independent). */\nfunction stableArgs(args: Record<string, unknown>): string {\n const keys = Object.keys(args).sort();\n return JSON.stringify(keys.map((k) => [k, args[k]]));\n}\n\n/** ~4 chars/token estimate over the transcript, including serialized tool calls. */\nfunction estimateTokens(messages: ChatMessage[]): number {\n let chars = 0;\n for (const m of messages) {\n chars += m.content.length;\n if (m.role === 'assistant' && m.toolCalls) chars += JSON.stringify(m.toolCalls).length;\n }\n return Math.ceil(chars / 4);\n}\n\n/** Per-file symbol spans, so an agent edit lands in the right place when its SEARCH is ambiguous. */\nfunction buildSpanIndex(graph: VgGraph): Map<string, SymbolSpan[]> {\n const map = new Map<string, SymbolSpan[]>();\n for (const n of graph.nodes) {\n if (n.kind === 'file' || n.kind === 'external') continue;\n const file = n.file.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n const list = map.get(file) ?? [];\n list.push({ qualifiedName: n.qualifiedName, file, start: n.span.start, end: n.span.end });\n map.set(file, list);\n }\n return map;\n}\n"]}