@vibgrate/cli 2026.803.5 → 2026.805.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCS.md +1 -1
- package/README.md +23 -15
- package/dist/{agent-PQEODATY.js → agent-WH2VVIHM.js} +10 -12
- package/dist/{agent-PQEODATY.js.map → agent-WH2VVIHM.js.map} +1 -1
- package/dist/{baseline-SU2PCQV2.js → baseline-LMGZURQF.js} +3 -3
- package/dist/{baseline-SU2PCQV2.js.map → baseline-LMGZURQF.js.map} +1 -1
- package/dist/{chunk-COZEHQTK.js → chunk-3ZNFU2GI.js} +7 -7
- package/dist/{chunk-COZEHQTK.js.map → chunk-3ZNFU2GI.js.map} +1 -1
- package/dist/{chunk-TVRM57CE.js → chunk-4CM33QT2.js} +4 -4
- package/dist/{chunk-TVRM57CE.js.map → chunk-4CM33QT2.js.map} +1 -1
- package/dist/{chunk-H4XQQ4N2.js → chunk-55Q56FD7.js} +6 -7
- package/dist/chunk-55Q56FD7.js.map +1 -0
- package/dist/{chunk-TKV3GAKX.js → chunk-5HDCARJE.js} +4 -4
- package/dist/{chunk-TKV3GAKX.js.map → chunk-5HDCARJE.js.map} +1 -1
- package/dist/{chunk-OCINHIPN.js → chunk-6IL3UJTE.js} +458 -6
- package/dist/chunk-6IL3UJTE.js.map +1 -0
- package/dist/{chunk-LOV44ROX.js → chunk-6LDYH3PR.js} +4 -4
- package/dist/{chunk-LOV44ROX.js.map → chunk-6LDYH3PR.js.map} +1 -1
- package/dist/{chunk-HE2TEFWY.js → chunk-AQLP3V5Y.js} +4 -4
- package/dist/{chunk-HE2TEFWY.js.map → chunk-AQLP3V5Y.js.map} +1 -1
- package/dist/{chunk-UJGWQ6YA.js → chunk-B6CWDTAG.js} +3 -4
- package/dist/chunk-B6CWDTAG.js.map +1 -0
- package/dist/{chunk-CPGTEDFD.js → chunk-DG33XQX2.js} +3 -3
- package/dist/{chunk-CPGTEDFD.js.map → chunk-DG33XQX2.js.map} +1 -1
- package/dist/{chunk-VJHNGNCT.js → chunk-E72RZJPC.js} +5 -6
- package/dist/chunk-E72RZJPC.js.map +1 -0
- package/dist/{chunk-KFK7KCAH.js → chunk-FTZGQPHB.js} +3 -3
- package/dist/{chunk-KFK7KCAH.js.map → chunk-FTZGQPHB.js.map} +1 -1
- package/dist/{chunk-72XI4MTL.js → chunk-IA3WXZLB.js} +7 -8
- package/dist/chunk-IA3WXZLB.js.map +1 -0
- package/dist/{chunk-5WMFX7TY.js → chunk-IFCK26ZD.js} +4 -4
- package/dist/{chunk-5WMFX7TY.js.map → chunk-IFCK26ZD.js.map} +1 -1
- package/dist/{chunk-JZGVUH57.js → chunk-LGYIYZVS.js} +4 -4
- package/dist/{chunk-JZGVUH57.js.map → chunk-LGYIYZVS.js.map} +1 -1
- package/dist/chunk-MEKXVHW7.js +6 -0
- package/dist/{chunk-USO67ZEE.js.map → chunk-MEKXVHW7.js.map} +1 -1
- package/dist/{chunk-UH2WHRKJ.js → chunk-Q6OQPCYC.js} +7 -8
- package/dist/chunk-Q6OQPCYC.js.map +1 -0
- package/dist/{chunk-UXWN5YQW.js → chunk-QCEGM4WC.js} +4 -4
- package/dist/{chunk-UXWN5YQW.js.map → chunk-QCEGM4WC.js.map} +1 -1
- package/dist/{chunk-2A7XCANX.js → chunk-QTKGOXSE.js} +218 -24
- package/dist/chunk-QTKGOXSE.js.map +1 -0
- package/dist/{chunk-SJC3VKQ2.js → chunk-TSEE4YUQ.js} +4 -4
- package/dist/{chunk-SJC3VKQ2.js.map → chunk-TSEE4YUQ.js.map} +1 -1
- package/dist/{chunk-MKDM2KLO.js → chunk-YW45X2XK.js} +8 -9
- package/dist/chunk-YW45X2XK.js.map +1 -0
- package/dist/cli.js +91 -45
- package/dist/cli.js.map +1 -1
- package/dist/embed-worker-main.js +5 -2
- package/dist/embed-worker-main.js.map +1 -1
- package/dist/{ensure-map-Z6UXBPI7.js → ensure-map-HWHMALI4.js} +12 -14
- package/dist/{ensure-map-Z6UXBPI7.js.map → ensure-map-HWHMALI4.js.map} +1 -1
- package/dist/graph-backend-H42SHYB5.js +13 -0
- package/dist/{graph-backend-3A2M22QN.js.map → graph-backend-H42SHYB5.js.map} +1 -1
- package/dist/index.d.ts +25 -6
- package/dist/index.js +11 -13
- package/dist/index.js.map +1 -1
- package/dist/{interactive-6TCXGIMA.js → interactive-AAKPP4BJ.js} +21 -23
- package/dist/interactive-AAKPP4BJ.js.map +1 -0
- package/dist/load-BB52WJTD.js +9 -0
- package/dist/{load-QHU4WMUN.js.map → load-BB52WJTD.js.map} +1 -1
- package/dist/{run-outcome-NHD3NXTL.js → run-outcome-TTLHJEDB.js} +5 -7
- package/dist/run-outcome-TTLHJEDB.js.map +1 -0
- package/dist/runtime-session-CKNRMKSK.js +20 -0
- package/dist/{runtime-session-W65P4OXR.js.map → runtime-session-CKNRMKSK.js.map} +1 -1
- package/dist/session-5TNNGP2K.js +15 -0
- package/dist/{session-NZKZXBX4.js.map → session-5TNNGP2K.js.map} +1 -1
- package/dist/{stream-json-MLWEIQNK.js → stream-json-T6DS3GIO.js} +10 -12
- package/dist/stream-json-T6DS3GIO.js.map +1 -0
- package/dist/{vg-mcp-bridge-2DEZF3JM.js → vg-mcp-bridge-AP3B7BN6.js} +8 -10
- package/dist/vg-mcp-bridge-AP3B7BN6.js.map +1 -0
- package/dist/{vgd-W7IHKGNU.js → vgd-FXIEZZT2.js} +8 -10
- package/dist/vgd-FXIEZZT2.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-2A7XCANX.js.map +0 -1
- package/dist/chunk-4LGDQBYK.js +0 -358
- package/dist/chunk-4LGDQBYK.js.map +0 -1
- package/dist/chunk-72XI4MTL.js.map +0 -1
- package/dist/chunk-H4XQQ4N2.js.map +0 -1
- package/dist/chunk-MKDM2KLO.js.map +0 -1
- package/dist/chunk-OCINHIPN.js.map +0 -1
- package/dist/chunk-RBMKBYGV.js +0 -102
- package/dist/chunk-RBMKBYGV.js.map +0 -1
- package/dist/chunk-UH2WHRKJ.js.map +0 -1
- package/dist/chunk-UJGWQ6YA.js.map +0 -1
- package/dist/chunk-USO67ZEE.js +0 -6
- package/dist/chunk-VJHNGNCT.js.map +0 -1
- package/dist/graph-backend-3A2M22QN.js +0 -13
- package/dist/interactive-6TCXGIMA.js.map +0 -1
- package/dist/load-QHU4WMUN.js +0 -11
- package/dist/run-outcome-NHD3NXTL.js.map +0 -1
- package/dist/runtime-session-W65P4OXR.js +0 -22
- package/dist/session-NZKZXBX4.js +0 -17
- package/dist/stream-json-MLWEIQNK.js.map +0 -1
- package/dist/vg-mcp-bridge-2DEZF3JM.js.map +0 -1
- package/dist/vgd-W7IHKGNU.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts","../src/engine/index-db.ts","../src/engine/load.ts"],"names":[],"mappings":"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","file":"chunk-UJGWQ6YA.js","sourcesContent":["/**\n * The `vg-graph/1.0` on-disk schema.\n *\n * This is vg's own open schema (VG-PACKAGE-AND-SCHEMA.md §4) — informed by good\n * ideas (content-hashed ids, epistemic typing of facts) but standalone and\n * self-contained. Every collection is deterministically serialized\n * (sorted keys, stable element order). These TypeScript shapes are normative.\n */\n\nexport const SCHEMA_VERSION = 'vg-graph/1.0' as const;\n\nexport type ResolverKind = 'scip' | 'stackgraph' | 'tsc' | 'heuristic';\n\n/** Coarse, honest resolution tier for an edge (see engine/epistemic.ts). */\nexport type EpistemicTier = 'observed' | 'name-matched' | 'declared';\n\n/**\n * The toolchain that produced this graph — the reproducibility fingerprint.\n * Everything here deterministically affects graph *content* (parse trees change\n * between grammar releases; resolvers change which edges resolve), so a CI run\n * and a laptop run that disagree can be caught by comparing `fingerprint`.\n * Deliberately excludes the Node/OS version so the graph stays byte-stable\n * across host runtimes; `fingerprint` pins the parse/resolve toolchain only.\n */\nexport interface Toolchain {\n schema: string; // SCHEMA_VERSION\n tool: string; // vg calendar version\n grammars: string; // tree-sitter grammar set version string\n resolvers: ResolverKind[]; // resolver kinds available, sorted\n fingerprint: string; // shortId over the fields above — the value `vg attest` signs\n}\n\nexport interface Provenance {\n tool: 'vg';\n version: string; // calendar version\n grammars: Record<string, string>; // lang → grammar version (determinism input)\n resolver: ResolverKind[];\n deep: boolean; // did the heavier open passes run\n semanticModel?: string; // embedding model id+version if --deep semantic links\n corpusHash: string; // blake3 over the included file set + hashes\n toolchain?: Toolchain; // reproducibility fingerprint (checked by `vg verify`)\n}\n\n/** Analysis cost tier — auto-selected by node count (or forced). Reported honestly. */\nexport type AnalysisTier = 'full' | 'large' | 'xl';\n\nexport interface GraphMeta {\n root: string; // relative; portable across machines\n languages: string[];\n counts: {\n nodes: number;\n edges: number;\n areas: number;\n tests: number;\n untested: number;\n };\n cluster: 'leiden' | 'louvain' | 'none';\n /** Auto-selected (or forced) analysis tier for large maps. */\n analysisTier?: AnalysisTier;\n edgeKinds: EdgeKind[];\n}\n\nexport type NodeKind =\n | 'file'\n | 'module'\n | 'package'\n | 'class'\n | 'interface'\n | 'function'\n | 'method'\n | 'property'\n | 'test'\n | 'route'\n | 'component'\n /** Documentation / config text ingested for semantic ask (markdown, txt, env examples). */\n | 'document'\n | 'external';\n\nexport interface Span {\n start: number; // 1-based start line\n end: number; // 1-based end line\n}\n\nexport interface Centrality {\n degree: number;\n pagerank: number;\n betweenness: number;\n eigenvector: number;\n}\n\nexport interface GraphNode {\n id: string; // blake3(canonical(kind, qualifiedName, file, signature))\n kind: NodeKind;\n name: string; // short name\n qualifiedName: string;\n file: string; // relative path\n span: Span; // line range (excluded from id hash)\n lang: string;\n visibility?: 'public' | 'private' | 'protected' | 'internal';\n signature?: string;\n doc?: string; // short leading doc-comment / docstring summary (deterministic; not a full body)\n importance: number; // 0..1 blended centrality\n centrality: Centrality;\n area: number; // area id (the node's community); -1 = unassigned (cluster \"none\")\n isHub: boolean; // centrality outlier — surfaced by `vg hubs`\n tested: boolean | null; // null = not analyzable (e.g. external)\n coverage?: number; // 0..1 line coverage if a coverage report was ingested\n changeCoupling?: string[]; // node ids that historically change together\n}\n\nexport type EdgeKind =\n | 'call'\n | 'import'\n | 'contains'\n | 'extends'\n | 'implements'\n | 'references'\n | 'test'\n | 'coverage';\n\nexport interface GraphEdge {\n id: string; // blake3(canonical(kind, src, dst))\n kind: EdgeKind;\n src: string; // node id\n dst: string; // node id\n resolution: ResolverKind; // how the edge was resolved\n confidence: number; // 0..1 (1.0 for scip/declared; lower for heuristic/dynamic)\n epistemic?: EpistemicTier; // coarse honesty tier derived from resolution+kind\n surprise?: number; // 0..1 improbability under the area model (`vg oddities`)\n count?: number; // call-site multiplicity\n}\n\nexport interface Area {\n id: number; // stable across runs (remapped to previous committed map)\n label: string; // most-central member's name (editable via `vg label`)\n size: number;\n members: string[]; // node ids, sorted\n cohesion: number; // 0..1\n externalEdges: number; // cross-area edge count\n}\n\nexport type FactKind = 'contract' | 'invariant' | 'characterization';\nexport type DerivedBy = 'declared' | 'static';\nexport type FactConfidence = 'Observed' | 'Derived';\n\nexport interface Fact {\n id: string; // blake3(canonical(kind, subjectIds, predicate))\n kind: FactKind;\n subjectIds: string[]; // node ids this fact constrains\n predicate: unknown; // the constraint\n derivedBy: DerivedBy;\n confidence: FactConfidence;\n evidence: { file: string; span: Span }[];\n}\n\n/**\n * A reference the graph could not resolve — surfaced by `vg unknowns`. Reporting\n * what it *cannot* connect (ranked by blast radius) is the honest inverse of a\n * scanner that hides its unknowns. Only unknowns the precise rungs (tsc/scip)\n * did not supersede are recorded, so a compiler-resolved file never shows here.\n */\nexport interface Unknown {\n from: string; // node id where the unresolved reference occurs\n name: string; // the callee/type name that could not be resolved\n kind: 'call' | 'extends' | 'implements';\n count: number; // occurrences at this site\n}\n\nexport type GroundingKind = 'should_follow' | 'smells_like' | 'relevant_to';\n\nexport interface GroundingEdge {\n src: string; // node id\n packEntryId: string;\n kind: GroundingKind;\n confidence: number; // 0..1\n rationale: 'recommended' | 'conjectured';\n citation: { title: string; url: string };\n}\n\n/** Precomputed hub blast-radius counts for fast agent answers (optional). */\nexport interface HubBlastSummary {\n id: string;\n name: string;\n kind: string;\n file: string;\n importance: number;\n direct: number;\n depth2: number;\n files: number;\n tested: boolean | null;\n}\n\nexport interface GraphSummaries {\n hubs: HubBlastSummary[];\n}\n\nexport interface VgGraph {\n schemaVersion: typeof SCHEMA_VERSION;\n generatedAt: string; // ISO; the ONLY nondeterministic field (pinned by --generated-at)\n provenance: Provenance;\n meta: GraphMeta;\n nodes: GraphNode[]; // sorted by id\n edges: GraphEdge[]; // sorted by (kind, src, dst)\n areas: Area[]; // sorted by id\n facts?: Fact[]; // open facts (contract/invariant/characterization); sorted by id\n grounding?: GroundingEdge[]; // free-pack grounding (default on; omit with --no-ground)\n unknowns?: Unknown[]; // heuristic references left unresolved; sorted by (from, kind, name)\n /** Build-time hub blast-radius summaries (always on; tiny). */\n summaries?: GraphSummaries;\n}\n","/**\n * SQLite serve index for large maps (scale past flat-JSON-only serve).\n *\n * The canonical artifact remains `graph.json` (determinism / git). The index\n * at `.vibgrate/cache/graph.db` is a derived, gitignored structure built after\n * every successful build:\n * - denormalized name/edge columns for O(log n) lookup\n * - full node/edge/area JSON for reconstructing a `VgGraph` without parsing\n * the pretty-printed graph.json (faster cold serve on XL maps)\n *\n * Uses Node's built-in `node:sqlite` (Node ≥22) — no native npm dependency.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { cacheDir } from './cache.js';\nimport { loadGraphFileWithSnapshot } from './snapshot.js';\nimport type {\n Area,\n EpistemicTier,\n GraphEdge,\n GraphNode,\n ResolverKind,\n VgGraph,\n} from '../schema.js';\nimport { SCHEMA_VERSION } from '../schema.js';\n\nexport interface IndexWriteResult {\n path: string;\n nodes: number;\n edges: number;\n /** False when node:sqlite is unavailable — callers should not fail the build. */\n ok: boolean;\n reason?: string;\n}\n\nexport function indexDbPath(root: string): string {\n return path.join(cacheDir(root), 'graph.db');\n}\n\n/** Write (replace) the SQLite index from a built graph. Never throws to callers. */\nexport function writeGraphIndex(root: string, graph: VgGraph): IndexWriteResult {\n const file = indexDbPath(root);\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { DatabaseSync } = require('node:sqlite') as typeof import('node:sqlite');\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const tmp = `${file}.${process.pid}.tmp`;\n try {\n if (fs.existsSync(tmp)) fs.unlinkSync(tmp);\n } catch {\n /* ignore */\n }\n\n const db = new DatabaseSync(tmp);\n db.exec(`\n PRAGMA journal_mode = OFF;\n PRAGMA synchronous = OFF;\n CREATE TABLE meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n CREATE TABLE nodes (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n qualified_name TEXT NOT NULL,\n kind TEXT NOT NULL,\n file TEXT NOT NULL,\n line INTEGER NOT NULL,\n importance REAL NOT NULL,\n area INTEGER NOT NULL,\n is_hub INTEGER NOT NULL,\n lang TEXT NOT NULL,\n json TEXT NOT NULL\n );\n CREATE TABLE edges (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n src TEXT NOT NULL,\n dst TEXT NOT NULL,\n resolution TEXT NOT NULL,\n confidence REAL NOT NULL,\n epistemic TEXT NOT NULL,\n json TEXT NOT NULL\n );\n CREATE TABLE areas (\n id INTEGER PRIMARY KEY,\n json TEXT NOT NULL\n );\n CREATE INDEX idx_nodes_name ON nodes(name);\n CREATE INDEX idx_nodes_qn ON nodes(qualified_name);\n CREATE INDEX idx_nodes_file ON nodes(file);\n CREATE INDEX idx_edges_src ON edges(src);\n CREATE INDEX idx_edges_dst ON edges(dst);\n CREATE INDEX idx_edges_kind ON edges(kind);\n `);\n\n const insMeta = db.prepare('INSERT INTO meta(key, value) VALUES (?, ?)');\n insMeta.run('corpusHash', graph.provenance.corpusHash);\n insMeta.run('schemaVersion', graph.schemaVersion);\n insMeta.run('generatedAt', graph.generatedAt);\n insMeta.run('nodeCount', String(graph.nodes.length));\n insMeta.run('edgeCount', String(graph.edges.length));\n insMeta.run('analysisTier', graph.meta.analysisTier ?? 'full');\n insMeta.run('indexVersion', 'vg-graph-index/2');\n // Full meta + provenance for reconstruct without graph.json parse.\n insMeta.run('graphMeta', JSON.stringify(graph.meta));\n insMeta.run('graphProvenance', JSON.stringify(graph.provenance));\n if (graph.facts) insMeta.run('factsJson', JSON.stringify(graph.facts));\n if (graph.grounding) insMeta.run('groundingJson', JSON.stringify(graph.grounding));\n if (graph.summaries) insMeta.run('summariesJson', JSON.stringify(graph.summaries));\n if (graph.unknowns) insMeta.run('unknownsJson', JSON.stringify(graph.unknowns));\n\n const insNode = db.prepare(\n `INSERT INTO nodes(id, name, qualified_name, kind, file, line, importance, area, is_hub, lang, json)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n );\n for (const n of graph.nodes) {\n insNode.run(\n n.id,\n n.name,\n n.qualifiedName,\n n.kind,\n n.file,\n n.span.start,\n n.importance,\n n.area,\n n.isHub ? 1 : 0,\n n.lang,\n JSON.stringify(n),\n );\n }\n\n const insEdge = db.prepare(\n `INSERT INTO edges(id, kind, src, dst, resolution, confidence, epistemic, json)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n );\n for (const e of graph.edges) {\n insEdge.run(\n e.id,\n e.kind,\n e.src,\n e.dst,\n e.resolution,\n e.confidence,\n e.epistemic ?? 'observed',\n JSON.stringify(e),\n );\n }\n\n const insArea = db.prepare('INSERT INTO areas(id, json) VALUES (?, ?)');\n for (const a of graph.areas) {\n insArea.run(a.id, JSON.stringify(a));\n }\n\n db.close();\n fs.renameSync(tmp, file);\n return { path: file, nodes: graph.nodes.length, edges: graph.edges.length, ok: true };\n } catch (err) {\n return {\n path: file,\n nodes: 0,\n edges: 0,\n ok: false,\n reason: (err as Error).message,\n };\n }\n}\n\nexport interface NameHit {\n id: string;\n name: string;\n qualifiedName: string;\n kind: string;\n file: string;\n line: number;\n importance: number;\n}\n\n/** Fast name / prefix lookup against the index. Empty if index missing. */\nexport function lookupNameIndex(root: string, query: string, limit = 20): NameHit[] {\n const file = indexDbPath(root);\n if (!fs.existsSync(file) || !query.trim()) return [];\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { DatabaseSync } = require('node:sqlite') as typeof import('node:sqlite');\n const db = new DatabaseSync(file, { readOnly: true });\n const q = query.trim();\n const rows = db\n .prepare(\n `SELECT id, name, qualified_name, kind, file, line, importance\n FROM nodes\n WHERE name = ? OR qualified_name = ? OR name LIKE ? OR qualified_name LIKE ?\n ORDER BY\n CASE WHEN name = ? OR qualified_name = ? THEN 0\n WHEN name LIKE ? THEN 1\n ELSE 2 END,\n importance DESC\n LIMIT ?`,\n )\n .all(q, q, `${q}%`, `%${q}%`, q, q, `${q}%`, limit) as Record<string, unknown>[];\n db.close();\n return rows.map((r) => ({\n id: String(r.id),\n name: String(r.name),\n qualifiedName: String(r.qualified_name),\n kind: String(r.kind),\n file: String(r.file),\n line: Number(r.line),\n importance: Number(r.importance),\n }));\n } catch {\n return [];\n }\n}\n\n/** Neighbor edges for a node id (src or dst). Empty if index missing. */\nexport function lookupNeighbors(\n root: string,\n nodeId: string,\n direction: 'out' | 'in' | 'both' = 'both',\n limit = 50,\n): GraphEdge[] {\n const file = indexDbPath(root);\n if (!fs.existsSync(file) || !nodeId) return [];\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { DatabaseSync } = require('node:sqlite') as typeof import('node:sqlite');\n const db = new DatabaseSync(file, { readOnly: true });\n let rows: Record<string, unknown>[] = [];\n if (direction === 'out' || direction === 'both') {\n rows = rows.concat(\n db\n .prepare(`SELECT json FROM edges WHERE src = ? LIMIT ?`)\n .all(nodeId, limit) as Record<string, unknown>[],\n );\n }\n if (direction === 'in' || direction === 'both') {\n rows = rows.concat(\n db\n .prepare(`SELECT json FROM edges WHERE dst = ? LIMIT ?`)\n .all(nodeId, limit) as Record<string, unknown>[],\n );\n }\n db.close();\n const byId = new Map<string, GraphEdge>();\n for (const r of rows) {\n try {\n const e = JSON.parse(String(r.json)) as GraphEdge;\n byId.set(e.id, e);\n } catch {\n /* skip bad row */\n }\n }\n return [...byId.values()];\n } catch {\n return [];\n }\n}\n\n/** Read index meta (corpusHash etc.) or null if missing. */\nexport function readIndexMeta(root: string): Record<string, string> | null {\n const file = indexDbPath(root);\n if (!fs.existsSync(file)) return null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { DatabaseSync } = require('node:sqlite') as typeof import('node:sqlite');\n const db = new DatabaseSync(file, { readOnly: true });\n const rows = db.prepare('SELECT key, value FROM meta').all() as { key: string; value: string }[];\n db.close();\n const out: Record<string, string> = {};\n for (const r of rows) out[r.key] = r.value;\n return out;\n } catch {\n return null;\n }\n}\n\n/**\n * Reconstruct a full `VgGraph` from the SQLite index (indexVersion ≥ 2).\n * Returns null if the index is missing, stale schema, or incomplete.\n * Prefer this over JSON.parse of pretty graph.json for cold serve on large maps.\n */\nexport function loadGraphFromIndex(root: string): VgGraph | null {\n const file = indexDbPath(root);\n if (!fs.existsSync(file)) return null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { DatabaseSync } = require('node:sqlite') as typeof import('node:sqlite');\n const db = new DatabaseSync(file, { readOnly: true });\n const metaRows = db.prepare('SELECT key, value FROM meta').all() as {\n key: string;\n value: string;\n }[];\n const meta: Record<string, string> = {};\n for (const r of metaRows) meta[r.key] = r.value;\n\n if (meta.indexVersion !== 'vg-graph-index/2' || !meta.graphMeta || !meta.graphProvenance) {\n db.close();\n return null;\n }\n\n const nodeRows = db.prepare('SELECT json FROM nodes ORDER BY id').all() as {\n json: string;\n }[];\n const edgeRows = db.prepare('SELECT json FROM edges ORDER BY id').all() as {\n json: string;\n }[];\n const areaRows = db.prepare('SELECT json FROM areas ORDER BY id').all() as {\n json: string;\n }[];\n db.close();\n\n const nodes = nodeRows.map((r) => JSON.parse(r.json) as GraphNode);\n const edges = edgeRows.map((r) => JSON.parse(r.json) as GraphEdge);\n const areas = areaRows.map((r) => JSON.parse(r.json) as Area);\n\n // Stable sorts match serialize contract (ids already ordered by SQL, re-sort for safety).\n nodes.sort((a, b) => a.id.localeCompare(b.id));\n edges.sort(\n (a, b) =>\n a.kind.localeCompare(b.kind) || a.src.localeCompare(b.src) || a.dst.localeCompare(b.dst),\n );\n areas.sort((a, b) => a.id - b.id);\n\n const graph: VgGraph = {\n schemaVersion: (meta.schemaVersion as typeof SCHEMA_VERSION) || SCHEMA_VERSION,\n generatedAt: meta.generatedAt ?? new Date(0).toISOString(),\n provenance: JSON.parse(meta.graphProvenance),\n meta: JSON.parse(meta.graphMeta),\n nodes,\n edges,\n areas,\n };\n if (meta.factsJson) graph.facts = JSON.parse(meta.factsJson);\n if (meta.groundingJson) graph.grounding = JSON.parse(meta.groundingJson);\n if (meta.summariesJson) graph.summaries = JSON.parse(meta.summariesJson);\n if (meta.unknownsJson) graph.unknowns = JSON.parse(meta.unknownsJson);\n\n // Lightweight integrity: edge resolution types stay valid.\n for (const e of edges) {\n if (!e.resolution) e.resolution = 'heuristic' as ResolverKind;\n if (!e.epistemic) e.epistemic = 'observed' as EpistemicTier;\n }\n return graph;\n } catch {\n return null;\n }\n}\n\n/**\n * Load the graph preferring the SQLite index when its corpusHash matches the\n * committed graph.json provenance (or when only the index exists). Falls back\n * to graph.json. Returns null if neither is usable.\n */\nexport function loadGraphPreferIndex(\n root: string,\n graphJsonPath: string,\n): { graph: VgGraph; source: 'index' | 'json' } | null {\n // Snapshot-first: skips the large-string JSON.parse when a fresh binary\n // snapshot exists (sidecar or store-mode standalone), and self-heals the\n // sidecar when not (see engine/snapshot.ts).\n const jsonGraph: VgGraph | null = loadGraphFileWithSnapshot(graphJsonPath);\n\n const fromIndex = loadGraphFromIndex(root);\n if (fromIndex) {\n if (!jsonGraph || fromIndex.provenance.corpusHash === jsonGraph.provenance.corpusHash) {\n return { graph: fromIndex, source: 'index' };\n }\n // Index stale vs graph.json — prefer canonical JSON and let next build refresh.\n }\n if (jsonGraph) return { graph: jsonGraph, source: 'json' };\n return null;\n}\n","import * as fs from 'node:fs';\nimport { resolveGraphPath } from './artifacts.js';\nimport { loadGraphFileWithSnapshot } from './snapshot.js';\nimport { loadGraphPreferIndex } from './index-db.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * Load the code map for a repository.\n *\n * When `graphPath` is omitted, prefers an existing global-store snapshot, then\n * the legacy `.vibgrate/graph.json`, matching {@link resolveGraphPath}.\n * Prefers the SQLite index when its corpusHash matches the committed map\n * (faster cold serve on large repos). Returns null if none exists.\n */\nexport function loadGraph(root: string, graphPath?: string): VgGraph | null {\n const file = resolveGraphPath(root, graphPath);\n // Index is always rooted at the project root; only use it when loading the\n // default map for that root (not an arbitrary --graph path).\n if (!graphPath) {\n const preferred = loadGraphPreferIndex(root, file);\n if (preferred) return preferred.graph;\n }\n return loadGraphFileWithSnapshot(file);\n}\n"]}
|
package/dist/chunk-USO67ZEE.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/refresh.ts"],"names":[],"mappings":";;;;;;;AAsDA,IAAM,qBAAA,GAAwB,KAAK,EAAA,GAAK,GAAA;AAExC,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,OAAY,IAAA,CAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,cAAc,CAAA;AACjD;AAMA,eAAsB,cAAA,CAAe,IAAA,EAAc,IAAA,GAAuB,EAAC,EAA4B;AACrG,EAAA,MAAM,KAAA,GAAQ,eAAe,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAE,QAAQ,aAAA,EAAc;AAC3C,EAAA,IAAI,CAAC,SAAS,KAAA,CAAM,KAAK,GAAG,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAErD,EAAA,MAAM,IAAA,GAAO,gBAAgB,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,YAAY,IAAA,EAAM,qBAAqB,GAAG,OAAO,EAAE,QAAQ,QAAA,EAAS;AAEzE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,MAAA,EAAO;AACpC,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW;AAAA,MAC9B,IAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAM,IAAA,CAAK;AAAA,KACZ,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,eAAe,KAAA,CAAM,UAAA;AAC3D,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,GAAA,GAAM,YAAY,IAAI,CAAA;AAC5B,MAAA,cAAA,CAAe,OAAO,KAAA,EAAO;AAAA,QAC3B,IAAA;AAAA,QACA,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,MAAA,EAAW,EAAA,CAAA,UAAA,CAAgB,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAAA,QACvD,IAAA,EAAS,EAAA,CAAA,UAAA,CAAgB,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,YAAY,CAAC;AAAA,OACjD,CAAA;AAAA,IACH;AACA,IAAA,aAAA,CAAc,MAAM,MAAA,CAAO,KAAA,CAAM,WAAW,UAAA,EAAY,MAAA,CAAO,WAAW,KAAK,CAAA;AAE/E,IAAA,MAAM,KAAK,MAAA,CAAA,CAAQ,OAAA,CAAQ,OAAO,MAAA,EAAO,GAAI,SAAS,QAAQ,CAAA;AAC9D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,WAAA;AAAA,MACR,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,EAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB;AAAA,KACF;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAU,IAAc,OAAA,EAAQ;AAAA,EAC5D,CAAA,SAAE;AACA,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB;AACF","file":"chunk-VJHNGNCT.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { buildGraph } from './build.js';\nimport { probeFreshness, writeSnapshot, hasDrift, type Drift } from './freshness.js';\nimport { writeArtifacts, vibgrateDir } from './artifacts.js';\nimport { acquireLock, releaseLock } from './lock.js';\nimport { cacheDir } from './cache.js';\nimport type { ClusterMode } from './analyze.js';\n\n/**\n * Auto-refresh: bring the code map back in sync with the working tree when the\n * freshness probe says it drifted. The rebuild is the ordinary incremental\n * `buildGraph` (warm parse cache → only changed files re-parse), replaying the\n * scope recorded at the last explicit build, guarded by a cross-process lock\n * so a serving MCP process and a foreground command never write at once.\n *\n * Two properties keep this safe to run implicitly:\n * - **No git churn**: if the rebuilt corpusHash equals the snapshot's (e.g. a\n * drift that reverted itself), `graph.json` is left untouched — the artifact\n * stays byte-identical.\n * - **No surprise artifacts**: `GRAPH_REPORT.md`/`graph.html` are rewritten\n * only if they already exist; a refresh never adds files a user's explicit\n * build chose not to produce.\n */\n\nexport interface RefreshOptions {\n /** Force single-threaded parsing (tests / constrained hosts). */\n inline?: boolean;\n /** Worker count for the parse pool. */\n jobs?: number;\n /**\n * The map path already resolved by the caller (e.g. `vg serve`'s startup\n * resolution). Passed straight through to `writeArtifacts` so a refresh\n * never re-resolves it: `defaultGraphPath` shells out to `git rev-parse`\n * (Fusion §4.1.1 branch keying), and re-running that on every drift-driven\n * refresh put a synchronous git spawn back on the hot tool-call path this\n * function exists to keep off of. Omit only when no caller-known path\n * exists (falls back to a fresh `defaultGraphPath` resolution).\n */\n graphPath?: string;\n}\n\nexport type RefreshOutcome =\n /** Map already matches the working tree. */\n | { status: 'fresh' }\n /** No freshness snapshot — no build ever ran here, so scope is unknown. */\n | { status: 'no-snapshot' }\n /** Another vg process is rebuilding right now; its write will land shortly. */\n | { status: 'locked' }\n /** Rebuilt. `wrote` is false when the corpus turned out unchanged. */\n | { status: 'refreshed'; drift: Drift; ms: number; reparsed: number; totalFiles: number; wrote: boolean }\n | { status: 'error'; message: string };\n\n/** A refresh stuck longer than this is presumed crashed and its lock reclaimed. */\nconst REFRESH_LOCK_STALE_MS = 10 * 60 * 1000;\n\nfunction refreshLockPath(root: string): string {\n return path.join(cacheDir(root), 'refresh.lock');\n}\n\n/**\n * Probe, and rebuild incrementally if the tree drifted from the map.\n * Silent (no output) — callers own the messaging for their surface.\n */\nexport async function refreshIfStale(root: string, opts: RefreshOptions = {}): Promise<RefreshOutcome> {\n const probe = probeFreshness(root);\n if (!probe) return { status: 'no-snapshot' };\n if (!hasDrift(probe.drift)) return { status: 'fresh' };\n\n const lock = refreshLockPath(root);\n if (!acquireLock(lock, REFRESH_LOCK_STALE_MS)) return { status: 'locked' };\n\n const start = process.hrtime.bigint();\n try {\n const { scope } = probe;\n const result = await buildGraph({\n root,\n only: scope.only,\n exclude: scope.exclude,\n paths: scope.paths,\n deep: scope.deep,\n noGround: scope.noGround,\n scip: scope.scip,\n noScip: scope.noScip,\n noTsc: scope.noTsc,\n cluster: scope.cluster as ClusterMode | undefined,\n grammarsDir: scope.grammarsDir,\n inline: opts.inline,\n jobs: opts.jobs,\n });\n\n const wrote = result.graph.provenance.corpusHash !== probe.corpusHash;\n if (wrote) {\n const dir = vibgrateDir(root);\n writeArtifacts(result.graph, {\n root,\n graphPath: opts.graphPath,\n report: fs.existsSync(path.join(dir, 'GRAPH_REPORT.md')),\n html: fs.existsSync(path.join(dir, 'graph.html')),\n });\n }\n writeSnapshot(root, result.graph.provenance.corpusHash, result.fileStats, scope);\n\n const ms = Number((process.hrtime.bigint() - start) / 1000000n);\n return {\n status: 'refreshed',\n drift: probe.drift,\n ms,\n reparsed: result.reparsed,\n totalFiles: result.totalFiles,\n wrote,\n };\n } catch (err) {\n return { status: 'error', message: (err as Error).message };\n } finally {\n releaseLock(lock);\n }\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export { localGraphBackend, resolveGraphBackend, vgdGraphBackend } from './chunk-KFK7KCAH.js';
|
|
2
|
-
import './chunk-RBIRXQR6.js';
|
|
3
|
-
import './chunk-J7LKEB2R.js';
|
|
4
|
-
import './chunk-TVRM57CE.js';
|
|
5
|
-
import './chunk-2A7XCANX.js';
|
|
6
|
-
import './chunk-4LGDQBYK.js';
|
|
7
|
-
import './chunk-RBMKBYGV.js';
|
|
8
|
-
import './chunk-BWPBB45M.js';
|
|
9
|
-
import './chunk-JFGYT6BI.js';
|
|
10
|
-
import './chunk-BPF3YX2U.js';
|
|
11
|
-
import './chunk-Z6ZWNWWR.js';
|
|
12
|
-
//# sourceMappingURL=graph-backend-3A2M22QN.js.map
|
|
13
|
-
//# sourceMappingURL=graph-backend-3A2M22QN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code/wizard.ts","../src/code/cost.ts","../src/runtime/bridge-facts.ts","../src/code/interactive.ts"],"names":["group","model","sp"],"mappings":"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","file":"interactive-6TCXGIMA.js","sourcesContent":["/**\n * The `vg code` guided provider/model wizard (VG-CLI-CODE §8).\n *\n * Walks the developer from \"I want to code\" to a concrete (provider, model)\n * choice: run locally, or pick one of the current top hosted providers\n * (Claude / GPT / Grok / Gemini / …) surfaced live from the model catalog — with\n * an \"enter a slug myself\" escape hatch at every step. Pure over an injected\n * {@link Prompter} + catalog + local fleet, so the whole decision tree is\n * unit-tested with a scripted prompter and no network or TTY.\n */\n\nimport type { Prompter } from './ui.js';\nimport type { Catalog } from './catalog.js';\nimport { topProviders } from './catalog.js';\nimport type { LocalModel } from '../engine/models.js';\n\nexport interface WizardResult {\n kind: 'hosted' | 'local';\n /** The router `--provider` value: `openrouter` for hosted picks, `ollama` for local. */\n provider: 'openrouter' | 'ollama';\n /** The concrete model slug/tag to run. */\n model: string;\n /** The display provider for per-model savings attribution (e.g. `anthropic`, `ollama`). */\n providerSlug: string;\n /** For a local model not yet present on the machine → pull it first. */\n needsPull?: boolean;\n}\n\nconst ENTER_SLUG = '__enter_slug__';\nconst LOCAL = '__local__';\nconst BROWSE = '__browse__';\n\nexport interface WizardDeps {\n catalog: Catalog;\n localModels: LocalModel[];\n topN?: number;\n}\n\n/** Run the guided selection and return the resolved provider + model. */\nexport async function runProviderWizard(prompter: Prompter, deps: WizardDeps): Promise<WizardResult> {\n const providers = topProviders(deps.catalog, deps.topN ?? 6);\n\n // Screen 1 — where should the model run?\n const choice = await prompter.select<string>('Where should the model run?', [\n { label: 'Local model (on your machine)', value: LOCAL, hint: deps.localModels.length ? `${deps.localModels.length} found` : 'nothing installed yet' },\n ...providers.map((p) => ({ label: p.label, value: p.id, hint: 'via OpenRouter' })),\n { label: 'Enter a provider or model slug myself', value: ENTER_SLUG },\n ]);\n\n if (choice === LOCAL) return pickLocal(prompter, deps);\n if (choice === ENTER_SLUG) {\n const slug = (await prompter.input('Model slug (e.g. anthropic/claude-3.5-sonnet, or a provider like openai)')).trim();\n // A full `provider/model` slug is a hosted pick; a bare provider name → show its models.\n if (slug.includes('/')) return { kind: 'hosted', provider: 'openrouter', model: slug, providerSlug: slug.split('/')[0] };\n const group = deps.catalog.providers.find((p) => p.id === slug);\n if (group && group.models.length) return pickHostedModel(prompter, group.id, group.models);\n // Unknown provider → let them type the full model slug.\n const model = (await prompter.input(`Model id for \"${slug}\"`)).trim();\n return { kind: 'hosted', provider: 'openrouter', model: model || slug, providerSlug: slug };\n }\n\n // A hosted provider was chosen → pick one of its models.\n const group = providers.find((p) => p.id === choice)!;\n return pickHostedModel(prompter, group.id, group.models);\n}\n\nasync function pickHostedModel(prompter: Prompter, providerSlug: string, models: Catalog['providers'][number]['models']) {\n if (models.length === 0) {\n const model = (await prompter.input(`Enter a ${providerSlug} model id`)).trim();\n return { kind: 'hosted' as const, provider: 'openrouter' as const, model, providerSlug };\n }\n const model = await prompter.select<string>('Choose a model', [\n ...models.slice(0, 12).map((m) => ({ label: m.name, value: m.id, hint: modelHint(m.contextLength, m.promptPricePerM) })),\n { label: 'Enter a model slug myself', value: ENTER_SLUG },\n ]);\n if (model === ENTER_SLUG) {\n const typed = (await prompter.input(`Enter a ${providerSlug} model id`)).trim();\n return { kind: 'hosted' as const, provider: 'openrouter' as const, model: typed, providerSlug };\n }\n return { kind: 'hosted' as const, provider: 'openrouter' as const, model, providerSlug };\n}\n\nasync function pickLocal(prompter: Prompter, deps: WizardDeps): Promise<WizardResult> {\n const installed = deps.localModels.filter((m) => m.runtime === 'ollama');\n const choices = [\n ...installed.map((m) => ({ label: m.name, value: m.name, hint: 'installed' })),\n { label: 'Browse coding models to pull (Ollama)', value: BROWSE },\n { label: 'Enter a model name to pull', value: ENTER_SLUG },\n ];\n const picked = await prompter.select<string>('Local model', choices);\n\n if (picked === ENTER_SLUG) {\n const name = (await prompter.input('Ollama model to pull (e.g. qwen2.5-coder:7b)')).trim();\n return { kind: 'local', provider: 'ollama', model: name, providerSlug: 'ollama', needsPull: true };\n }\n if (picked === BROWSE) {\n // Suggest coding models from the catalog, mapped to a likely Ollama tag.\n const coding = deps.catalog.providers\n .flatMap((p) => p.models)\n .filter((m) => /cod(e|er|ing)/i.test(m.id))\n .slice(0, 10);\n if (coding.length === 0) {\n const name = (await prompter.input('Ollama model to pull (e.g. qwen2.5-coder:7b)')).trim();\n return { kind: 'local', provider: 'ollama', model: name, providerSlug: 'ollama', needsPull: true };\n }\n const slug = await prompter.select<string>('Coding model to pull', [\n ...coding.map((m) => ({ label: m.name, value: toOllamaTag(m.id), hint: m.id })),\n { label: 'Enter a model name myself', value: ENTER_SLUG },\n ]);\n if (slug === ENTER_SLUG) {\n const name = (await prompter.input('Ollama model to pull (e.g. qwen2.5-coder:7b)')).trim();\n return { kind: 'local', provider: 'ollama', model: name, providerSlug: 'ollama', needsPull: true };\n }\n return { kind: 'local', provider: 'ollama', model: slug, providerSlug: 'ollama', needsPull: true };\n }\n // An already-installed model — no pull needed.\n return { kind: 'local', provider: 'ollama', model: picked, providerSlug: 'ollama', needsPull: false };\n}\n\n/** Best-effort map an OpenRouter slug to a likely Ollama tag (`qwen/qwen-2.5-coder-7b` → `qwen2.5-coder:7b`). */\nexport function toOllamaTag(slug: string): string {\n const tail = slug.split('/').pop() ?? slug;\n const size = tail.match(/(\\d+(?:\\.\\d+)?)b\\b/i);\n const base = tail\n .replace(/-instruct\\b/i, '')\n .replace(/(\\d+(?:\\.\\d+)?)b\\b/i, '')\n .replace(/[-.]+$/g, '')\n .replace(/\\s+/g, '-');\n return size ? `${base}:${size[1]}b` : base;\n}\n\nfunction modelHint(contextLength?: number, pricePerM?: number): string {\n const parts: string[] = [];\n if (contextLength) parts.push(`${Math.round(contextLength / 1000)}k ctx`);\n if (typeof pricePerM === 'number') parts.push(pricePerM === 0 ? 'free' : `$${pricePerM}/M in`);\n return parts.join(' · ');\n}\n","/**\n * Live cost / token metering for VG Code (VG-CLI-CODE §15).\n *\n * A session meter accumulates the prompt/completion tokens providers report and\n * turns them into a running dollar estimate from the model's published price\n * (per-million, from the catalog). Local models are free, so cost is 0 and only\n * tokens are shown. Pure and unit-tested; the estimate is labelled as such.\n */\n\nexport interface TokenUsage {\n promptTokens?: number;\n completionTokens?: number;\n}\n\n/** USD per 1M tokens for the active model (from the catalog); absent for local/free. */\nexport interface ModelPricing {\n promptPerM?: number;\n completionPerM?: number;\n}\n\n/** Dollar cost of one usage sample under a pricing table (0 when unpriced/free). */\nexport function costOf(usage: TokenUsage, pricing: ModelPricing): number {\n const inCost = ((usage.promptTokens ?? 0) / 1e6) * (pricing.promptPerM ?? 0);\n const outCost = ((usage.completionTokens ?? 0) / 1e6) * (pricing.completionPerM ?? 0);\n return round4(inCost + outCost);\n}\n\n/** Accumulates usage + cost across a coding session. */\nexport class SessionMeter {\n private prompt = 0;\n private completion = 0;\n private cost = 0;\n private turns = 0;\n\n constructor(private pricing: ModelPricing = {}) {}\n\n /** Update the pricing (e.g. after `/model` switches model mid-session). */\n setPricing(pricing: ModelPricing): void {\n this.pricing = pricing;\n }\n\n /** Record one model turn; returns the incremental cost of just this turn. */\n add(usage: TokenUsage): number {\n this.prompt += usage.promptTokens ?? 0;\n this.completion += usage.completionTokens ?? 0;\n this.turns += 1;\n const delta = costOf(usage, this.pricing);\n this.cost = round4(this.cost + delta);\n return delta;\n }\n\n get totals(): { promptTokens: number; completionTokens: number; totalTokens: number; cost: number; turns: number } {\n return { promptTokens: this.prompt, completionTokens: this.completion, totalTokens: this.prompt + this.completion, cost: this.cost, turns: this.turns };\n }\n\n /** A compact one-line summary, e.g. `3.1k tok · ~$0.0042` (cost only when priced). */\n summary(): string {\n const t = this.totals;\n const tok = `${fmtTokens(t.totalTokens)} tok`;\n const priced = this.pricing.promptPerM || this.pricing.completionPerM;\n return priced ? `${tok} · ~$${t.cost.toFixed(4)}` : tok;\n }\n}\n\nexport function fmtTokens(n: number): string {\n if (n >= 1e6) return `${(n / 1e6).toFixed(2)}M`;\n if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;\n return String(n);\n}\n\nfunction round4(x: number): number {\n return Math.round(x * 1e4) / 1e4;\n}\n","/**\n * Project federation bridge edges into capsule pinned facts (Fusion Phase 6).\n *\n * High-confidence bridges become short, secret-free facts the model can see\n * without opening every workspace root. Pure over {@link BridgeEdge}.\n */\n\nimport type { BridgeEdge } from './bridge-edges.js';\n\n/**\n * Turn bridge edges into pinned-fact lines for Task Capsules.\n * Default minConfidence 0.8 keeps only workspace/package-strong links\n * (interface bridges sit ~0.68–0.75 and stay out unless lowered).\n */\nexport function bridgePinnedFacts(\n bridges: BridgeEdge[] | undefined | null,\n options: { minConfidence?: number; maxFacts?: number } = {},\n): string[] {\n if (!bridges?.length) return [];\n const min = options.minConfidence ?? 0.8;\n const max = options.maxFacts ?? 12;\n return bridges\n .filter((b) => b.confidence >= min)\n .map((b) => {\n const from = shortLabel(b.fromRoot);\n const to = shortLabel(b.toRoot);\n const via = b.packageName ? ` package ${b.packageName}` : '';\n return `bridge ${b.kind}: ${from} → ${to}${via} (${b.confidence.toFixed(2)})`;\n })\n .sort((a, b) => a.localeCompare(b))\n .slice(0, max);\n}\n\nfunction shortLabel(root: string): string {\n const parts = root.replace(/\\\\/g, '/').split('/').filter(Boolean);\n return parts[parts.length - 1] || root;\n}\n","/**\n * The `vg code` guided, interactive mode (VG-CLI-CODE §8–§11).\n *\n * Running bare `vg code` at a terminal enters this flow: show the VG Code\n * banner, make sure the code map is built (behind a spinner, no map banner),\n * walk the developer through choosing a provider + model (local or a top hosted\n * provider), run a memory pre-flight before pulling any local model, then drop\n * into a coding REPL that proposes a diff per instruction and writes only what\n * the developer approves.\n *\n * The decision logic (catalog grouping, wizard tree, capability assessment) is\n * pure and unit-tested elsewhere; this module is the I/O shell that wires those\n * pieces to the terminal, the graph build, and the model runtime.\n */\n\nimport { loadGraph } from '../engine/load.js';\nimport { refreshIfStale } from '../engine/refresh.js';\nimport { resolveGraphPath } from '../engine/artifacts.js';\nimport { BranchGraphSession } from '../runtime/branch-graph-session.js';\nimport { discoverModels } from '../engine/models.js';\nimport { ensureCodeMap } from './ensure-map.js';\nimport { printCodeLogo } from '../util/logo.js';\nimport { c, info, out } from '../util/output.js';\nimport type { GlobalOpts } from '../cli-options.js';\nimport { fetchCatalog } from './catalog.js';\nimport { runProviderWizard, type WizardResult } from './wizard.js';\nimport { TtyPrompter, PromptCancelled, type Prompter } from './ui.js';\nimport { estimateModelBytes, assessCapability, fmt } from './capability.js';\nimport { gatherSystemMemory, hasOllama, stopModel, pullModelClean } from './local-runtime.js';\nimport { spawnSync } from 'node:child_process';\nimport { resolveProviders } from './router.js';\nimport { nodeCodeFs, undoChanges } from './session.js';\nimport { runAgent, type AgentEvent, type AgentOptions, type AgentResult } from './agent.js';\nimport { readModelSavings } from '../engine/savings.js';\nimport { SessionMeter } from './cost.js';\nimport { McpToolset, defaultMcpConnect, type McpConnect } from './mcp-tools.js';\nimport { condenseSession, loadLatestSession, saveSession, summarizeSession, newSession, recordTask, type StoredSession } from './session-store.js';\nimport type { McpServerConfig } from './config.js';\nimport type { MutatingAction, ShellResult } from './tools.js';\nimport type { FileChange, Provider } from './types.js';\nimport { startCodeRuntimeSession } from './runtime-session.js';\nimport { loadOrDiscoverFederation } from '../runtime/federation.js';\nimport { bridgePinnedFacts } from '../runtime/bridge-facts.js';\nimport { resolveExecutionEnv, type SecurityTier } from '../runtime/execution-env.js';\nimport {\n mergeModelExecutionProfile,\n resolveModelExecutionProfile,\n type ModelExecutionProfile,\n} from '../runtime/model-execution-profile.js';\nimport { vgdIsRunning, vgdRequest } from '../runtime/vgd/index.js';\nimport { resolveGraphBackend } from './graph-backend.js';\nimport { summarizeDiffs } from './diff.js';\n\nexport interface InteractiveOptions {\n provider?: string;\n model?: string;\n modelPath?: string;\n budget?: string;\n file?: string[];\n /** Auto-approve edits and commands (autonomous). */\n auto?: boolean;\n /** Cap on agent steps per instruction. */\n maxSteps?: number;\n /** Extra command-denylist rules for autonomous mode (from config). */\n denyCommands?: string[];\n /** Project test/verify command surfaced to the agent (from config). */\n testCommand?: string;\n /** Transcript compaction budget in tokens (from config / model window). */\n contextBudget?: number;\n /** Stream assistant tokens live. */\n stream?: boolean;\n /** Auto-verify: run the test command after the agent finishes and fix failures. */\n verify?: { command: string; maxRounds?: number };\n /** External MCP servers whose tools the agent may call. */\n mcpServers?: Record<string, McpServerConfig>;\n /** Which config files the MCP servers came from (for a transparent note). */\n mcpSources?: string[];\n /** Resume the most recent session (inject a recap, restore /undo). */\n continueSession?: boolean;\n /** Prefer source-bearing Task Capsule context (Fusion Runtime A/B). */\n capsule?: boolean;\n /**\n * Security ladder tier for shell (ADR-002). When omitted: L1 under `--auto`,\n * otherwise L0. Explicit value always wins.\n */\n securityTier?: SecurityTier;\n /** Optional Model Execution Profile overrides from code.json. */\n modelProfile?: Partial<ModelExecutionProfile>;\n /** Injectable MCP connect (tests). */\n mcpConnect?: McpConnect;\n}\n\n/** Entry point for guided `vg code` (no instruction, at a TTY). */\nexport async function runInteractive(root: string, global: GlobalOpts, opts: InteractiveOptions, prompter: Prompter = new TtyPrompter()): Promise<void> {\n printCodeLogo(root);\n try {\n await ensureMap(root, global, prompter);\n const selection = await chooseModel(root, global, opts, prompter);\n if (!selection) return; // aborted (e.g. can't run a local model)\n await codingRepl(root, global, opts, selection, prompter);\n } catch (e) {\n if (e instanceof PromptCancelled) {\n info(c.dim('\\n cancelled — no changes were made'));\n return;\n }\n throw e;\n }\n}\n\n/** Build the code map if missing, or refresh it if the tree drifted — behind a spinner, no map banner. */\nasync function ensureMap(root: string, global: GlobalOpts, prompter: Prompter): Promise<void> {\n const existing = loadGraph(root, global.graph);\n if (!existing) {\n const sp = prompter.spinner('Building the code map…');\n try {\n await ensureCodeMap(root, global);\n sp.stop('Code map built');\n } catch (e) {\n sp.fail(`couldn't build the code map: ${(e as Error).message}`);\n throw e;\n }\n return;\n }\n const sp = prompter.spinner('Checking the code map is up to date…');\n const graphPath = resolveGraphPath(root);\n const refreshed = await refreshIfStale(root, { graphPath }).catch(() => null);\n if (refreshed?.status === 'refreshed') sp.stop('Code map refreshed');\n else sp.stop('Code map ready');\n}\n\n/** Resolve the provider/model — from flags if given, else via the guided wizard. */\nasync function chooseModel(root: string, global: GlobalOpts, opts: InteractiveOptions, prompter: Prompter): Promise<WizardResult | null> {\n // Explicit flags skip the wizard entirely.\n if (opts.provider && (opts.model || opts.modelPath)) {\n const local = opts.provider === 'ollama' || opts.provider === 'lmstudio' || opts.provider === 'llama-cpp' || !!global.local;\n return { kind: local ? 'local' : 'hosted', provider: opts.provider === 'ollama' ? 'ollama' : 'openrouter', model: opts.model ?? opts.modelPath ?? '', providerSlug: opts.provider, needsPull: false };\n }\n\n const sp = prompter.spinner('Loading the model catalog…');\n const catalog = await fetchCatalog({ offline: global.local });\n sp.stop(catalog.source === 'network' ? 'Model catalog loaded' : catalog.source === 'cache' ? 'Model catalog (cached)' : 'Model catalog (offline list)');\n const localModels = discoverModels();\n\n const selection = await runProviderWizard(prompter, { catalog, localModels });\n\n if (selection.kind === 'local' && selection.needsPull) {\n const ok = await preflightAndPull(selection, prompter);\n if (!ok) return null;\n }\n if (selection.kind === 'hosted' && !process.env.OPENROUTER_API_KEY) {\n prompter.note(c.yellow('Set OPENROUTER_API_KEY in your environment to use this hosted model (keys are never passed as flags).'));\n }\n return selection;\n}\n\n/** Memory pre-flight, then a clean, wrapped `ollama pull`. Returns false if we shouldn't proceed. */\nasync function preflightAndPull(selection: WizardResult, prompter: Prompter): Promise<boolean> {\n if (!hasOllama()) {\n prompter.note(c.yellow('Ollama isn’t installed — get it from https://ollama.com, then re-run. (We never install a runtime for you.)'));\n return false;\n }\n const estimate = estimateModelBytes(selection.model);\n const report = assessCapability(estimate, gatherSystemMemory());\n\n prompter.note(`${c.bold(selection.model)} — estimated ${fmt(estimate.bytes)}${estimate.guessed ? c.dim(' (size guessed)') : ''}; ~${fmt(report.availableBytes)} free now`);\n for (const s of report.suggestions) prompter.note(c.dim(`· ${s}`));\n\n if (!report.canRun) {\n prompter.note(c.red('This machine doesn’t have enough memory for that model — not pulling it. Pick a smaller model or a lower quant.'));\n return false;\n }\n if (report.needsUnload) {\n const biggest = [...report.loaded].sort((a, b) => b.bytes - a.bytes)[0];\n if (biggest && (await prompter.confirm(`Unload ${biggest.name} to free ~${fmt(biggest.bytes)}?`, true))) {\n stopModel(biggest.name);\n }\n }\n if (!(await prompter.confirm(`Pull ${selection.model} (~${fmt(estimate.bytes)})?`, true))) return false;\n\n const sp = prompter.spinner(`Pulling ${selection.model}…`);\n const ok = await pullModelClean(selection.model, sp);\n if (ok) sp.stop(`Pulled ${selection.model}`);\n else sp.fail(`couldn’t pull ${selection.model}`);\n return ok;\n}\n\n/** The coding REPL: a graph-grounded agent per task, plus slash-commands (/help, /undo, …). */\nasync function codingRepl(root: string, global: GlobalOpts, opts: InteractiveOptions, selection: WizardResult, prompter: Prompter): Promise<void> {\n let sel = selection;\n let route = resolveProviders({\n provider: sel.provider,\n model: sel.model,\n local: sel.kind === 'local' || global.local,\n consent: true, // interactive selection is consent for manager runtime deps\n });\n try {\n const { ensureManagerRuntime } = await import('../runtime/model-manager.js');\n const ensure = await ensureManagerRuntime({\n providerId: route.providers[0]?.id ?? sel.provider,\n model: route.providers[0]?.model ?? sel.model,\n offline: !!global.local,\n consent: true,\n });\n if (!ensure.ok) prompter.note(c.yellow(ensure.error ?? 'model manager not ready'));\n else if (ensure.installed.length || ensure.pulled.length) {\n for (const s of ensure.installed) prompter.note(c.dim(`installed ${s}`));\n for (const s of ensure.pulled) prompter.note(c.dim(`pulled ${s}`));\n }\n prompter.note(c.dim(`manager ${route.managerLine}`));\n } catch {\n /* non-fatal — route still usable */\n }\n const fsImpl = nodeCodeFs(root);\n const meter = new SessionMeter();\n let lastChanges: FileChange[] = [];\n\n // Resume the most recent session (recap for the model + restore /undo).\n let store: StoredSession = newSession(sessionId(), sel.providerSlug, sel.model, Date.now());\n let priorSummary: string | undefined;\n if (opts.continueSession) {\n const prev = loadLatestSession(root);\n if (prev) {\n store = prev;\n lastChanges = prev.lastChanges ?? [];\n priorSummary = summarizeSession(prev);\n prompter.note(c.dim(`resumed session — ${prev.tasks.length} earlier task(s); /undo restores the last change`));\n } else prompter.note(c.dim('no previous session to continue'));\n }\n\n // Live graph holder: filled each turn; MCP builtins always read the current map.\n const graphHolder: { current: import('../schema.js').VgGraph | null } = { current: null };\n\n // Always expose local `vg serve` MCP tools; merge any project-configured servers.\n const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge.js');\n const vgBuiltin = createVgBuiltinMcpTools({\n getGraph: () => {\n if (!graphHolder.current) throw new Error('graph not loaded yet');\n return graphHolder.current;\n },\n root,\n local: global.local === true,\n });\n let mcp: McpToolset | undefined;\n if (opts.mcpServers && Object.keys(opts.mcpServers).length) {\n const sp = prompter.spinner('Connecting MCP tools…');\n const { toolset, warnings } = await McpToolset.connect(opts.mcpServers, opts.mcpConnect ?? defaultMcpConnect);\n mcp = toolset;\n const from = opts.mcpSources?.length ? ` (from ${opts.mcpSources.join(', ')})` : '';\n sp.stop(\n `MCP tools: ${toolset.specs().length} project + ${vgBuiltin.specs.length} local vg` +\n ` (${Object.keys(opts.mcpServers).length} server(s)${from})`,\n );\n for (const w of warnings) prompter.note(c.yellow(` ${w}`));\n } else {\n prompter.note(c.dim(`MCP · ${vgBuiltin.specs.length} local vg tools (mcp__vibgrate__*) always available`));\n }\n const externalToolsMerged = mergeExternalToolsets(\n vgBuiltin,\n mcp ? mcpExternalTools(mcp, agentApprove(opts, prompter)) : undefined,\n );\n\n // Fusion Runtime: attach to (or own) a local vgd session instead of spawning\n // `vg serve` as GraphProcess. Failure degrades to in-process graph only.\n const runtime = await startCodeRuntimeSession({ root });\n // Multi-branch ActiveGraph: warm maps per gitRef; ensureCurrent on each turn\n // so `git checkout` mid-session switches the tool-visible graph (plan §4.1.1).\n const branchGraphs = new BranchGraphSession({ root, graphPath: global.graph });\n // Federated workspaces: if `.vibgrate/federation.json` exists and a daemon is\n // reachable, register every member so multi-repo graphs share one vgd session.\n const federation = loadOrDiscoverFederation(root);\n const extraPinnedFacts = bridgePinnedFacts(federation.bridges);\n if (federation.members.length > 1 && (await vgdIsRunning({ socketPath: runtime.socketPath }))) {\n try {\n await vgdRequest(\n {\n op: 'register-federation',\n primaryRoot: federation.primaryRoot,\n members: federation.members.map((m) => ({ root: m.root, label: m.label, role: m.role })),\n },\n { socketPath: runtime.socketPath },\n );\n const bridgeN = federation.bridges?.length ?? 0;\n prompter.note(\n c.dim(\n `federation · ${federation.members.length} workspace(s) registered with vgd` +\n (bridgeN ? ` · ${bridgeN} bridge edge(s)` : ''),\n ),\n );\n } catch {\n /* federation registration is best-effort */\n }\n } else if ((federation.bridges?.length ?? 0) > 0) {\n prompter.note(\n c.dim(\n `federation · ${federation.members.length} member(s) · ${federation.bridges!.length} bridge edge(s) (discovery)`,\n ),\n );\n }\n\n // Model Execution Profile: provider/model heuristics + code.json overrides.\n let modelProfile = mergeModelExecutionProfile(\n resolveModelExecutionProfile({\n providerId: sel.providerSlug,\n model: sel.model,\n budget: opts.budget ? Number(opts.budget) : undefined,\n maxRepairRounds: opts.verify?.maxRounds,\n securityTier: opts.securityTier,\n }),\n opts.modelProfile,\n );\n\n // Security ladder (ADR-002): explicit flag > MEP > --auto → L1 > L0.\n // Writable roots include every federation member so multi-root sessions can\n // write into sibling workspace folders under L1/L2 isolation.\n const securityTier: SecurityTier =\n opts.securityTier ?? modelProfile.securityTier ?? (opts.auto ? 'L1' : 'L0');\n const writableRoots = federation?.members.map((m) => m.root) ?? [root];\n const executionEnv = resolveExecutionEnv(securityTier, { writableRoots });\n\n const cleanup = (): void => {\n void runtime.dispose();\n void mcp?.dispose();\n };\n process.once('SIGINT', cleanup);\n\n const autoNote = opts.auto ? c.yellow(' · auto-approve ON') : '';\n const runtimeNote = runtime.kind !== 'none' ? c.dim(` · ${runtime.label}`) : '';\n const securityNote = c.dim(` · ${executionEnv.tier}/${executionEnv.label}`);\n const mepNote = c.dim(` · mep ${modelProfile.mode}`);\n prompter.intro(`Ready — ${sel.providerSlug}/${sel.model}${runtimeNote}${securityNote}${mepNote}${autoNote}. Describe a task, or /help. Empty line to exit.`);\n\n try {\n for (;;) {\n const line = (await prompter.input('code ›')).trim();\n if (!line || /^(exit|quit)$/i.test(line) || line === '/exit' || line === '/quit') break;\n\n if (line.startsWith('/')) {\n const [cmd] = line.slice(1).split(/\\s+/);\n if (cmd === 'help') {\n prompter.note('commands: /undo /diff /model /cost /compact /clear /exit');\n } else if (cmd === 'undo') {\n if (lastChanges.length === 0) prompter.note(c.dim('nothing to undo'));\n else {\n const restored = undoChanges(lastChanges, fsImpl);\n prompter.note(c.green(`↩ reverted ${restored.length} file(s): ${restored.join(', ')}`));\n lastChanges = [];\n store = { ...store, lastChanges: [] };\n saveSession(root, store);\n }\n } else if (cmd === 'diff') {\n if (lastChanges.length === 0) prompter.note(c.dim('no recent change'));\n else for (const ch of lastChanges) if (ch.diff) out(ch.diff);\n } else if (cmd === 'model') {\n const swapped = await reselectModel(root, global, prompter);\n if (swapped) {\n sel = swapped;\n route = resolveProviders({\n provider: sel.provider,\n model: sel.model,\n local: sel.kind === 'local' || global.local,\n consent: true,\n });\n prompter.note(c.green(`now using ${sel.providerSlug}/${sel.model}`));\n }\n } else if (cmd === 'cost') {\n prompter.note(`this session: ${meter.summary()}`);\n printCost(root);\n } else if (cmd === 'compact') {\n if (store.tasks.length <= 1) prompter.note(c.dim('nothing to compact yet'));\n else {\n const before = store.tasks.length;\n store = condenseSession(store, Date.now());\n saveSession(root, store);\n priorSummary = summarizeSession(store) || undefined;\n prompter.note(c.green(`compacted ${before} task(s) into one checkpoint — future turns carry the short recap`));\n }\n } else if (cmd === 'clear') {\n prompter.note(c.dim('each task already starts fresh — nothing to clear'));\n } else {\n prompter.note(c.yellow(`unknown command /${cmd} — try /help`));\n }\n continue;\n }\n\n const branchLoad = branchGraphs.ensureCurrent();\n const graph = branchLoad.graph;\n graphHolder.current = graph;\n if (!graph) {\n prompter.note(c.red('the code map disappeared — run `vg` to rebuild'));\n break;\n }\n if (branchLoad.switched) {\n prompter.note(\n c.dim(\n `branch · ${branchLoad.gitRef}${branchLoad.fromCache ? ' (warm cache)' : ' (loaded map)'}`,\n ),\n );\n }\n // Share warm slot with a running vgd (local process or long-lived daemon).\n if (runtime.socketPath && graph && branchLoad.gitRef && branchLoad.gitRef !== 'unknown') {\n void vgdRequest(\n {\n op: 'put-graph',\n repositoryId: branchLoad.repositoryId,\n gitRef: branchLoad.gitRef,\n graph,\n },\n { socketPath: runtime.socketPath },\n ).catch(() => {\n /* best-effort IPC */\n });\n }\n // Prefer vgd ActiveGraph for search/impact when the daemon holds this slot.\n const graphBackend = resolveGraphBackend({\n graph,\n repositoryId: branchLoad.repositoryId,\n gitRef: branchLoad.gitRef !== 'unknown' ? branchLoad.gitRef : null,\n socketPath: runtime.socketPath,\n });\n // Refresh MEP if the user swapped models mid-session.\n modelProfile = mergeModelExecutionProfile(\n resolveModelExecutionProfile({\n providerId: sel.providerSlug,\n model: sel.model,\n budget: opts.budget ? Number(opts.budget) : undefined,\n maxRepairRounds: opts.verify?.maxRounds,\n securityTier,\n }),\n opts.modelProfile,\n );\n const result = await agentTask({\n root,\n graph,\n instruction: line,\n providers: route.providers,\n fsImpl,\n attribution: { client: 'vg-code', provider: sel.providerSlug, model: sel.model },\n auto: !!opts.auto,\n maxSteps: opts.maxSteps,\n budget: modelProfile.capsuleBudgetTokens,\n denyCommands: opts.denyCommands,\n testCommand: opts.testCommand,\n contextBudget: opts.contextBudget,\n stream: opts.stream,\n verify: opts.verify\n ? { ...opts.verify, maxRounds: opts.verify.maxRounds ?? modelProfile.maxRepairRounds }\n : undefined,\n priorSummary,\n // Conversation carry-over for capsule seed ranking: the previous\n // task's instruction keeps follow-up asks anchored to the topic.\n priorInstruction: store.tasks.at(-1)?.instruction,\n externalTools: externalToolsMerged,\n meter,\n prompter,\n capsule: opts.capsule,\n executionEnv,\n graphBackend,\n modelProfile,\n extraPinnedFacts,\n llmCompaction: true,\n });\n priorSummary = undefined; // recap only seeds the first task after --continue\n if (result.changes.length) {\n lastChanges = result.changes;\n prompter.note(c.dim(' /undo to revert · /diff to review'));\n }\n // Persist the session after each task so --continue and /undo survive a restart.\n store = recordTask(store, { instruction: line, summary: result.finalText, changes: result.changes, stopped: result.stopped }, Date.now());\n saveSession(root, store);\n }\n } finally {\n cleanup();\n process.removeListener('SIGINT', cleanup);\n }\n prompter.outro('Done.');\n}\n\n/** Approval gate closure for MCP tools (mirrors agentTask's gate). */\nfunction agentApprove(opts: InteractiveOptions, prompter: Prompter): (a: MutatingAction) => Promise<boolean> {\n return async (action) => {\n if (opts.auto) return true;\n if (action.kind === 'tool') return prompter.confirm(`Call ${action.name}?`, false);\n if (action.kind === 'patch') {\n const n = action.files.length;\n const names = action.files\n .slice(0, 6)\n .map((f) => f.file)\n .join(', ');\n const more = n > 6 ? ` (+${n - 6} more)` : '';\n return prompter.confirm(`Apply patch to ${n} file(s): ${names}${more}?`, false);\n }\n return true;\n };\n}\n\n/** Bind an McpToolset to the agent's externalTools shape. */\nfunction mcpExternalTools(mcp: McpToolset, approve: (a: MutatingAction) => Promise<boolean>): AgentOptions['externalTools'] {\n return { specs: mcp.specs(), owns: (name) => mcp.owns(name), execute: (call) => mcp.execute(call, approve) };\n}\n\n/** A time-free-ish session id (runtime randomness is fine — not a graph artifact). */\nfunction sessionId(): string {\n let s = '';\n const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';\n for (let i = 0; i < 10; i++) s += alphabet[Math.floor(Math.random() * alphabet.length)];\n return s;\n}\n\n/** Re-run the provider/model wizard mid-session (the `/model` command). */\nasync function reselectModel(root: string, global: GlobalOpts, prompter: Prompter): Promise<WizardResult | null> {\n try {\n const sp = prompter.spinner('Loading the model catalog…');\n const catalog = await fetchCatalog({ offline: global.local });\n sp.stop('Model catalog loaded');\n const selection = await runProviderWizard(prompter, { catalog, localModels: discoverModels() });\n if (selection.kind === 'local' && selection.needsPull) {\n const ok = await preflightAndPull(selection, prompter);\n if (!ok) return null;\n }\n return selection;\n } catch (e) {\n if (e instanceof PromptCancelled) return null;\n prompter.note(c.yellow(`couldn't switch model: ${(e as Error).message}`));\n return null;\n }\n}\n\n/** Print the local per-model savings for `/cost`. */\nfunction printCost(root: string): void {\n const now = Date.now();\n const models = readModelSavings(root, 30, now);\n if (models.length === 0) {\n info(c.dim(' no usage recorded yet this session'));\n return;\n }\n info(c.bold(' savings by model (last 30 days, local)'));\n for (const m of models) info(` ${m.key.padEnd(32)} ${m.queries} call(s) · ~${m.vgTokens} tokens · saved ≈ $${m.saved}`);\n}\n\n/**\n * Run one agentic task and render it to the terminal. Shared by the guided REPL\n * and the one-shot command. Read-only tools stream as dim status lines; each\n * mutating tool (edit / create / delete / run) is gated — auto-approved under\n * `--auto`, otherwise confirmed by the developer (with the diff or command shown).\n */\nexport async function agentTask(params: {\n root: string;\n graph: import('../schema.js').VgGraph;\n instruction: string;\n providers: Provider[];\n fsImpl: ReturnType<typeof nodeCodeFs>;\n attribution: { client: string; provider?: string; model?: string };\n auto: boolean;\n maxSteps?: number;\n budget?: number;\n contextBudget?: number;\n denyCommands?: string[];\n testCommand?: string;\n stream?: boolean;\n verify?: { command: string; maxRounds?: number };\n priorSummary?: string;\n priorInstruction?: string;\n externalTools?: AgentOptions['externalTools'];\n meter?: SessionMeter;\n prompter?: Prompter;\n /** Prefer source-bearing Task Capsule context (Fusion Runtime A/B). */\n capsule?: boolean;\n files?: string[];\n /** Security ladder substrate (ADR-002). */\n executionEnv?: AgentOptions['executionEnv'];\n graphBackend?: AgentOptions['graphBackend'];\n modelProfile?: AgentOptions['modelProfile'];\n advancedMode?: boolean;\n worktreeOverlay?: boolean;\n extraPinnedFacts?: string[];\n /** Model-written checkpoint summaries on compaction (real-model hosts). */\n llmCompaction?: boolean;\n}): Promise<AgentResult> {\n const { prompter } = params;\n const approve = async (action: MutatingAction): Promise<boolean> => {\n if (params.auto) return true;\n if (!prompter) return false; // non-interactive without --auto: refuse mutations\n switch (action.kind) {\n case 'edit':\n out(action.diff);\n return prompter.confirm(`Apply edit to ${action.file}?`, true);\n case 'create':\n return prompter.confirm(`Create ${action.file} (${action.bytes} bytes)?`, true);\n case 'delete':\n return prompter.confirm(`Delete ${action.file}?`, false);\n case 'run':\n return prompter.confirm(`Run \\`${action.command}\\`?`, false);\n case 'tool':\n return prompter.confirm(`Call ${action.name}(${briefArgs(action.args)})?`, false);\n case 'patch': {\n const n = action.files.length;\n for (const f of action.files) {\n if (f.diff) out(f.diff);\n else out(`${f.op} ${f.file}`);\n }\n const names = action.files\n .slice(0, 6)\n .map((f) => f.file)\n .join(', ');\n const more = n > 6 ? ` (+${n - 6} more)` : '';\n return prompter.confirm(`Apply patch to ${n} file(s): ${names}${more}?`, false);\n }\n }\n };\n\n // Event rendering, with live token streaming: raw tokens print inline; any\n // other event first closes the streamed line so the layout stays clean.\n let streaming = false;\n const closeStream = (): void => {\n if (streaming) {\n process.stderr.write('\\n');\n streaming = false;\n }\n };\n const onEvent = (e: AgentEvent): void => {\n if (e.type === 'token') {\n process.stderr.write(e.text);\n streaming = true;\n return;\n }\n closeStream();\n if (e.type === 'assistant') {\n if (e.text.trim()) info(e.text.trim());\n } else if (e.type === 'tool-call') {\n info(c.dim(` → ${e.name}(${briefArgs(e.args)})`));\n } else if (e.type === 'tool-result') {\n info(c.dim(` ${e.mutated ? c.green('✔ ') : ''}${e.content.split('\\n')[0].slice(0, 100)}`));\n } else if (e.type === 'compact') {\n info(c.dim(` · compacted context (${e.droppedRounds} earlier round(s) summarized)`));\n } else if (e.type === 'verify') {\n info(e.passed ? c.green(` ✔ ${e.command} passed`) : c.yellow(` ✗ ${e.command} failed — asking the model to fix it`));\n } else if (e.type === 'ladder') {\n info(e.ok ? c.green(' ✔ verification ladder passed') : c.yellow(' ✗ verification ladder failed — asking the model to fix it'));\n if (!e.ok && e.summary.trim()) {\n for (const line of e.summary.split('\\n').slice(0, 6)) info(c.dim(` ${line}`));\n }\n } else if (e.type === 'notice') {\n info(c.dim(` · ${e.text}`));\n } else if (e.type === 'session-graph') {\n info(c.dim(` · session graph updated (${e.reparsed} reparsed, ${e.dirty} dirty)`));\n } else if (e.type === 'capsule') {\n info(c.dim(` · Task Capsule · ${e.summary.primary.length} primary · ${e.summary.sourceSliceCount} source slice(s) · ~${e.summary.tokensEstimate} tokens`));\n } else if (e.type === 'failure-capsule') {\n info(c.yellow(` · Failure Capsule · ${e.capsule.failedStep.type}${e.capsule.failedStep.command ? ` · ${e.capsule.failedStep.command}` : ''}`));\n } else if (e.type === 'metrics') {\n const m = e.metrics;\n info(c.dim(` · metrics · discovery ${m.discoveryToolCalls} · mutations ${m.mutationToolCalls}${m.znsAt1 ? ' · ZNS@1' : ''}`));\n }\n };\n\n const result = await runAgent({\n graph: params.graph,\n root: params.root,\n instruction: params.instruction,\n providers: params.providers,\n fsImpl: params.fsImpl,\n run: shellRunner(params.root),\n executionEnv: params.executionEnv,\n graphBackend: params.graphBackend,\n modelProfile: params.modelProfile,\n advancedMode: params.advancedMode,\n // Interactive sessions always prefer a worktree-correct map unless disabled.\n worktreeOverlay: params.worktreeOverlay ?? true,\n extraPinnedFacts: params.extraPinnedFacts,\n approve,\n onEvent,\n attribution: params.attribution,\n maxSteps: params.maxSteps,\n budget: params.budget,\n contextBudget: params.contextBudget,\n auto: params.auto,\n denyCommands: params.denyCommands,\n testCommand: params.testCommand,\n stream: params.stream,\n verify: params.verify,\n priorSummary: params.priorSummary,\n priorInstruction: params.priorInstruction,\n externalTools: params.externalTools,\n capsule: params.capsule,\n files: params.files,\n llmCompaction: params.llmCompaction,\n now: () => Date.now(),\n });\n closeStream();\n\n const perTask = params.meter?.add(result.usage);\n const summary = summarizeDiffs(result.changes.map((ch) => ({ file: ch.file, diff: ch.diff })));\n info('');\n info(\n result.stopped === 'finished'\n ? c.green(`✔ ${result.finalText}`)\n : result.stopped === 'max-steps'\n ? c.yellow(`stopped at the step limit — ${result.changes.length} change(s) so far`)\n : c.dim(result.finalText),\n );\n const meterNote = perTask !== undefined ? ` · ${params.meter!.summary()}` : '';\n if (result.changes.length || perTask) info(c.dim(` ${summary} · via ${result.provider.id}/${result.provider.model}${result.provider.fellBack ? ' (fell back)' : ''}${meterNote}`));\n return result;\n}\n\nfunction briefArgs(args: Record<string, unknown>): string {\n const parts: string[] = [];\n for (const [k, v] of Object.entries(args)) {\n const s = typeof v === 'string' ? v : JSON.stringify(v);\n parts.push(`${k}: ${s.length > 40 ? s.slice(0, 40) + '…' : s}`);\n if (parts.length >= 2) break;\n }\n return parts.join(', ');\n}\n\n/** A shell runner for the agent's run_command tool, scoped to the repo root. */\nfunction shellRunner(root: string): (command: string) => ShellResult {\n return (command: string) => {\n const res = spawnSync(command, { cwd: root, shell: true, encoding: 'utf8', timeout: 120_000, maxBuffer: 10 * 1024 * 1024 });\n const stdout = (res.stdout ?? '') + (res.stderr ? `\\n${res.stderr}` : '');\n return { stdout, exitCode: res.status ?? 1 };\n };\n}\n"]}
|
package/dist/load-QHU4WMUN.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export { loadGraph } from './chunk-UJGWQ6YA.js';
|
|
2
|
-
import './chunk-OCINHIPN.js';
|
|
3
|
-
import './chunk-USO67ZEE.js';
|
|
4
|
-
import './chunk-4LGDQBYK.js';
|
|
5
|
-
import './chunk-RBMKBYGV.js';
|
|
6
|
-
import './chunk-BWPBB45M.js';
|
|
7
|
-
import './chunk-JFGYT6BI.js';
|
|
8
|
-
import './chunk-BPF3YX2U.js';
|
|
9
|
-
import './chunk-Z6ZWNWWR.js';
|
|
10
|
-
//# sourceMappingURL=load-QHU4WMUN.js.map
|
|
11
|
-
//# sourceMappingURL=load-QHU4WMUN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code/run-outcome.ts"],"names":[],"mappings":"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","file":"run-outcome-NHD3NXTL.js","sourcesContent":["/**\n * `vibgrate.run-outcome/1` — the local, append-only record of what a `vg code`\n * run did: what was proposed, what the human decided, and how the run ended.\n *\n * CORRECTION (2026-07-30, maintainer): this module was originally justified by\n * two future consumers — the verify loop and \"Relay routing telemetry\" (using\n * edit-acceptance data to auto-pick a model per request). The second is now\n * confirmed void: Relay never re-picks a model — the user (or their chosen\n * Code Mode) selects one model for the whole session, and that has never been\n * a requirement for any product in this space. The verify loop, meanwhile, is\n * shipped separately via the extension's LSP round-trip and never depended on\n * this schema. See `docs/VG-RUN-OUTCOME-EVENTS-SPEC.md` for the full record —\n * **this producer currently has no live or committed consumer.**\n *\n * This module only produces; nothing reads or transmits the file yet, and\n * nothing here changes `vg code`'s stdout NDJSON protocol — it is a silent\n * observer wired at the `--stream-json` call site in `commands/code.ts`, built\n * and unit-tested independent of any process, model, or socket, the same way\n * `stream-json.ts` is.\n *\n * Privacy (spec's hard rule): no event carries source code, diffs, file\n * contents, prompts, or file paths. Instructions become a salted hash only;\n * files become a language/kind classification only.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { installId } from '../engine/stats-share.js';\nimport { ensureVibgrateGitignore } from '../engine/artifacts.js';\nimport { repositoryIdFromRoot } from '../runtime/paths.js';\nimport type { MutatingAction, PatchFileAction } from './tools.js';\nimport type { AgentResult } from './agent.js';\nimport type { StreamJsonOut } from './stream-json.js';\n\nexport const RUN_OUTCOME_SCHEMA = 'vibgrate.run-outcome/1';\n\nexport type InstructionKind = 'upgrade' | 'fix-vuln' | 'refactor' | 'feature' | 'other';\nexport type EditKind = 'code' | 'manifest' | 'lockfile' | 'config' | 'docs' | 'test';\nexport type EditDecision = 'approved' | 'rejected' | 'auto-approved';\nexport type RunOutcome = 'done' | 'error' | 'cancelled';\n\ninterface Envelope {\n schema: typeof RUN_OUTCOME_SCHEMA;\n runId: string;\n ts: string;\n repoId: string;\n gitRef: string | null;\n route: { mode?: string; provider?: string; model?: string };\n securityTier: string;\n}\n\nexport type RunOutcomeEvent =\n | (Envelope & {\n event: 'run_started';\n instructionHash: string;\n instructionKind: InstructionKind;\n /** Absent (never 0/null-as-zero) — this producer does not trigger a rescan. */\n baseline: { driftScore: number | null; scoreMode: 'verified' | 'estimated' | null; advisories: number | null };\n })\n | (Envelope & {\n event: 'edit_proposed';\n editId: string;\n language: string | null;\n linesAdded: number;\n linesRemoved: number;\n kind: EditKind;\n })\n | (Envelope & { event: 'edit_decision'; editId: string; decision: EditDecision; latencyMs: number })\n | (Envelope & {\n event: 'run_completed';\n outcome: RunOutcome;\n edits: { proposed: number; approved: number; rejected: number; autoApproved: number };\n /** Same reasoning as `baseline` — this producer never triggers a rescan. */\n verify: null;\n /**\n * Last verify-step (the project's configured test/build command) result\n * observed this run. `null` = no verify step ran, never a false pass.\n */\n verifyOk: boolean | null;\n tokens: { input: number; output: number } | null;\n });\n\nexport interface RunOutcomeRoute {\n mode?: string;\n provider?: string;\n model?: string;\n}\n\nfunction hash(saltValue: string, value: string): string {\n return createHash('sha256').update(`${saltValue}|${value}`).digest('hex');\n}\n\n/**\n * Best-effort, best-guess classification of an instruction's purpose. A\n * heuristic, not a model call — good enough for routing-signal aggregation,\n * not claimed as precise. `fromFinding` is set when the instruction was\n * composed by \"Fix →\" (routeFix.ts), which already know their own\n * kind and skip guessing.\n */\nexport function classifyInstructionKind(\n instruction: string,\n fromFinding?: 'upgrade' | 'fix-vuln',\n): InstructionKind {\n if (fromFinding) return fromFinding;\n const s = instruction.toLowerCase();\n if (/\\bupgrade\\b/.test(s) || /\\bfrom\\s+\\S+\\s+to\\s+\\S+/.test(s)) return 'upgrade';\n if (/\\b(cve|vulnerab|advisor|security fix|exploit)\\b/.test(s)) return 'fix-vuln';\n if (/\\brefactor\\b/.test(s)) return 'refactor';\n if (/\\b(add|implement|build|create|feature)\\b/.test(s)) return 'feature';\n return 'other';\n}\n\nconst MANIFEST_BASENAMES = new Set([\n 'package.json', 'go.mod', 'cargo.toml', 'pyproject.toml', 'requirements.txt',\n 'gemfile', 'composer.json', 'pom.xml', 'build.gradle', 'build.gradle.kts',\n 'pubspec.yaml', 'mix.exs',\n]);\nconst LOCKFILE_BASENAMES = new Set([\n 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'cargo.lock', 'poetry.lock',\n 'gemfile.lock', 'composer.lock', 'go.sum', 'pubspec.lock', 'mix.lock',\n]);\nconst MANIFEST_EXTS = new Set(['.csproj', '.fsproj', '.vbproj']);\n\n/** Coarse per-file classification for `edit_proposed.kind` — filename-only, no content read. */\nexport function classifyEditKind(file: string): EditKind {\n const base = path.basename(file).toLowerCase();\n const ext = path.extname(base);\n if (MANIFEST_BASENAMES.has(base) || MANIFEST_EXTS.has(ext)) return 'manifest';\n if (LOCKFILE_BASENAMES.has(base)) return 'lockfile';\n if (ext === '.md' || ext === '.mdx' || file.split(/[\\\\/]/).includes('docs')) return 'docs';\n if (/\\.(test|spec)\\.[^.]+$/.test(base) || /(^|[\\\\/])(__tests__|tests|test|spec)([\\\\/]|$)/.test(file)) return 'test';\n if (base.startsWith('.') || /\\.config\\.[^.]+$/.test(base) || /\\.(ya?ml|toml|ini|env)$/.test(base)) return 'config';\n return 'code';\n}\n\n/** Language/extension label only — never a path. Empty extension → null. */\nfunction languageOf(file: string): string | null {\n const ext = path.extname(file).replace(/^\\./, '');\n return ext || null;\n}\n\n/** Count `+`/`-` content lines in a unified diff (excludes `+++`/`---` headers). */\nfunction diffLineCounts(diff: string): { added: number; removed: number } {\n let added = 0;\n let removed = 0;\n for (const line of diff.split('\\n')) {\n if (line.startsWith('+++') || line.startsWith('---')) continue;\n if (line.startsWith('+')) added++;\n else if (line.startsWith('-')) removed++;\n }\n return { added, removed };\n}\n\ninterface EditShape {\n language: string | null;\n linesAdded: number;\n linesRemoved: number;\n kind: EditKind;\n}\n\n/** Derive the `edit_proposed` shape from a `MutatingAction`, or null for non-edit actions (`run`/`tool`). */\nexport function shapeOfAction(action: MutatingAction): EditShape | null {\n switch (action.kind) {\n case 'edit': {\n const { added, removed } = diffLineCounts(action.diff);\n return { language: languageOf(action.file), linesAdded: added, linesRemoved: removed, kind: classifyEditKind(action.file) };\n }\n case 'create':\n return { language: languageOf(action.file), linesAdded: 0, linesRemoved: 0, kind: classifyEditKind(action.file) };\n case 'delete':\n return { language: languageOf(action.file), linesAdded: 0, linesRemoved: 0, kind: classifyEditKind(action.file) };\n case 'patch': {\n let added = 0;\n let removed = 0;\n const kinds = new Set<EditKind>();\n for (const f of action.files as PatchFileAction[]) {\n if (f.diff) {\n const c = diffLineCounts(f.diff);\n added += c.added;\n removed += c.removed;\n }\n kinds.add(classifyEditKind(f.file));\n }\n return { language: null, linesAdded: added, linesRemoved: removed, kind: kinds.size === 1 ? [...kinds][0]! : 'code' };\n }\n case 'run':\n case 'tool':\n return null; // not a file edit — out of scope for this schema\n }\n}\n\nfunction outcomeDir(root: string): string {\n return path.join(root, '.vibgrate');\n}\n\nfunction outcomePath(root: string): string {\n return path.join(outcomeDir(root), 'run-outcomes.jsonl');\n}\n\n/** Best-effort append — a read-only checkout just means no local record, never a thrown error. */\nfunction append(root: string, event: RunOutcomeEvent): void {\n try {\n fs.mkdirSync(outcomeDir(root), { recursive: true });\n // First writer into .vibgrate/ in this repo creates its .gitignore (create-once,\n // never overwritten) — protects this file even when `vg code` runs before any\n // `vg scan`/`vg build`/`vg install` has touched the repo.\n ensureVibgrateGitignore(root);\n fs.appendFileSync(outcomePath(root), `${JSON.stringify(event)}\\n`);\n } catch {\n /* best-effort only */\n }\n}\n\ninterface PendingEdit {\n runId: string;\n shape: EditShape;\n proposedAt: number;\n}\n\ninterface RunTally {\n proposed: number;\n approved: number;\n rejected: number;\n autoApproved: number;\n lastVerifyOk: boolean | null;\n}\n\n/**\n * Observes the same `StreamJsonOut` lines already flowing to the host over\n * stdout/stdin (via a transparent tee — see `wireRunOutcome`) and turns them\n * into the envelope above. One instance per `vg code` process; `beginRun` is\n * called once per turn (once for a one-shot run, once per turn in session\n * mode), so `runId` scoping is the caller's — this class never invents one.\n */\nexport class RunOutcomeRecorder {\n private currentRunId: string | null = null;\n private readonly tallies = new Map<string, RunTally>();\n private readonly pending = new Map<number, PendingEdit>();\n\n constructor(\n private readonly root: string,\n private readonly repoId: string,\n private readonly gitRef: string | null,\n private readonly route: RunOutcomeRoute,\n private readonly securityTier: string,\n private readonly auto: boolean,\n private readonly now: () => number = Date.now,\n /**\n * Salt for `instructionHash`. Defaults to the real per-install id\n * ({@link installId}) in production; tests should pass a fixed string so\n * they never touch the real machine's `~/.vibgrate/install-id`.\n */\n private readonly saltValue: string = installId(),\n ) {}\n\n private envelope(runId: string): Envelope {\n return {\n schema: RUN_OUTCOME_SCHEMA,\n runId,\n ts: new Date(this.now()).toISOString(),\n repoId: this.repoId,\n gitRef: this.gitRef,\n route: this.route,\n securityTier: this.securityTier,\n };\n }\n\n /** Start recording a new run/turn. Call before the instruction is handed to the agent. */\n beginRun(runId: string, instruction: string, fromFinding?: 'upgrade' | 'fix-vuln'): void {\n this.currentRunId = runId;\n this.tallies.set(runId, { proposed: 0, approved: 0, rejected: 0, autoApproved: 0, lastVerifyOk: null });\n append(this.root, {\n ...this.envelope(runId),\n event: 'run_started',\n instructionHash: hash(this.saltValue, instruction),\n instructionKind: classifyInstructionKind(instruction, fromFinding),\n baseline: { driftScore: null, scoreMode: null, advisories: null },\n });\n }\n\n /**\n * Feed one outgoing protocol line. Transparent — never mutates or drops\n * the line; the caller still writes it to the host exactly as before.\n */\n observe(line: StreamJsonOut): void {\n const runId = this.currentRunId;\n if (!runId) return;\n const tally = this.tallies.get(runId);\n if (!tally) return;\n\n if (line.event === 'approve-request') {\n const shape = shapeOfAction(line.action);\n if (!shape) return; // run/tool — not a file edit\n tally.proposed++;\n const editId = randomUUID();\n this.pending.set(line.id, { runId, shape, proposedAt: this.now() });\n append(this.root, { ...this.envelope(runId), event: 'edit_proposed', editId, ...shape });\n // Auto-approve resolves synchronously in StreamJsonSession before any\n // host round-trip — record that decision now; no host message arrives.\n if (this.auto) {\n tally.autoApproved++;\n append(this.root, { ...this.envelope(runId), event: 'edit_decision', editId, decision: 'auto-approved', latencyMs: 0 });\n this.pending.delete(line.id);\n } else {\n // Stash the editId against the wire id so `noteDecision` can find it.\n this.editIdByApproveId.set(line.id, editId);\n }\n return;\n }\n\n if (line.event === 'event' && line.type === 'verify') {\n tally.lastVerifyOk = line.passed;\n return;\n }\n\n if (line.event === 'done') {\n this.finish(runId, tally, 'done', line.result);\n return;\n }\n if (line.event === 'error') {\n this.finish(runId, tally, 'error', null);\n }\n }\n\n private readonly editIdByApproveId = new Map<number, string>();\n\n /**\n * A real (non-auto) approve/reject arrived from the host over stdin. `id`\n * is the same numeric id `StreamJsonSession` put on the `approve-request`\n * line — the natural join key, already unique for the process lifetime.\n */\n noteDecision(approveId: number, approved: boolean): void {\n const editId = this.editIdByApproveId.get(approveId);\n const pending = this.pending.get(approveId);\n if (!editId || !pending) return;\n this.editIdByApproveId.delete(approveId);\n this.pending.delete(approveId);\n const tally = this.tallies.get(pending.runId);\n if (tally) approved ? tally.approved++ : tally.rejected++;\n append(this.root, {\n ...this.envelope(pending.runId),\n event: 'edit_decision',\n editId,\n decision: approved ? 'approved' : 'rejected',\n latencyMs: Math.max(0, this.now() - pending.proposedAt),\n });\n }\n\n /** The host disconnected / turn was cancelled mid-approval — reject what's left, no hang. */\n cancelPending(): void {\n for (const id of [...this.pending.keys()]) this.noteDecision(id, false);\n }\n\n private finish(runId: string, tally: RunTally, outcome: RunOutcome, result: AgentResult | null): void {\n append(this.root, {\n ...this.envelope(runId),\n event: 'run_completed',\n outcome,\n edits: { proposed: tally.proposed, approved: tally.approved, rejected: tally.rejected, autoApproved: tally.autoApproved },\n verify: null,\n verifyOk: tally.lastVerifyOk,\n tokens: result ? { input: result.usage.promptTokens, output: result.usage.completionTokens } : null,\n });\n this.tallies.delete(runId);\n if (this.currentRunId === runId) this.currentRunId = null;\n }\n}\n\n/** Mint a runId for a one-shot `vg code` invocation (no session). */\nexport function newOneShotRunId(): string {\n return `r${randomUUID()}`;\n}\n\n/** Mint a runId for one turn of a `--session` run. */\nexport function turnRunId(sessionId: string, turnIndex: number): string {\n return `${sessionId}#${turnIndex}`;\n}\n\nexport { repositoryIdFromRoot as runOutcomeRepoId };\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export { startCodeRuntimeSession } from './chunk-CPGTEDFD.js';
|
|
2
|
-
import './chunk-LOV44ROX.js';
|
|
3
|
-
import './chunk-IS7VTH2Q.js';
|
|
4
|
-
import './chunk-IZDH67DX.js';
|
|
5
|
-
import './chunk-RBIRXQR6.js';
|
|
6
|
-
import './chunk-3LOWJSAF.js';
|
|
7
|
-
import './chunk-5HYCB55P.js';
|
|
8
|
-
import './chunk-5I4VSBWQ.js';
|
|
9
|
-
import './chunk-J7LKEB2R.js';
|
|
10
|
-
import './chunk-TVRM57CE.js';
|
|
11
|
-
import './chunk-2A7XCANX.js';
|
|
12
|
-
import './chunk-UJGWQ6YA.js';
|
|
13
|
-
import './chunk-OCINHIPN.js';
|
|
14
|
-
import './chunk-USO67ZEE.js';
|
|
15
|
-
import './chunk-4LGDQBYK.js';
|
|
16
|
-
import './chunk-RBMKBYGV.js';
|
|
17
|
-
import './chunk-BWPBB45M.js';
|
|
18
|
-
import './chunk-JFGYT6BI.js';
|
|
19
|
-
import './chunk-BPF3YX2U.js';
|
|
20
|
-
import './chunk-Z6ZWNWWR.js';
|
|
21
|
-
//# sourceMappingURL=runtime-session-W65P4OXR.js.map
|
|
22
|
-
//# sourceMappingURL=runtime-session-W65P4OXR.js.map
|
package/dist/session-NZKZXBX4.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export { commitChanges, nodeCodeFs, runCodeSession, undoChanges } from './chunk-TKV3GAKX.js';
|
|
2
|
-
import './chunk-2U4SXS5U.js';
|
|
3
|
-
import './chunk-REIGWTTH.js';
|
|
4
|
-
import './chunk-JZGVUH57.js';
|
|
5
|
-
import './chunk-3LSG7Z4I.js';
|
|
6
|
-
import './chunk-TVRM57CE.js';
|
|
7
|
-
import './chunk-2A7XCANX.js';
|
|
8
|
-
import './chunk-OCINHIPN.js';
|
|
9
|
-
import './chunk-USO67ZEE.js';
|
|
10
|
-
import './chunk-4LGDQBYK.js';
|
|
11
|
-
import './chunk-RBMKBYGV.js';
|
|
12
|
-
import './chunk-BWPBB45M.js';
|
|
13
|
-
import './chunk-JFGYT6BI.js';
|
|
14
|
-
import './chunk-BPF3YX2U.js';
|
|
15
|
-
import './chunk-Z6ZWNWWR.js';
|
|
16
|
-
//# sourceMappingURL=session-NZKZXBX4.js.map
|
|
17
|
-
//# sourceMappingURL=session-NZKZXBX4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code/stream-json.ts"],"names":[],"mappings":"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","file":"stream-json-MLWEIQNK.js","sourcesContent":["/**\n * Machine-readable event protocol for `vg code --stream-json` (VG-CLI-CODE §18).\n *\n * A host UI (the VS Code VG Code panel) can't drive the agent through the human\n * TTY renderer, so this exposes the agent as a line protocol: every\n * {@link AgentEvent} is emitted as one NDJSON object on stdout, and each\n * approval / user question is a round-trip — an event out, a decision/answer\n * line in. This keeps the governance gate intact across the process boundary\n * (the host's Approve/Reject and question UI fulfil the same contracts the CLI\n * would — no quick-apply back-door), while the host stays a pure relay.\n *\n * Pure over an injected `emit` + the decision channel, so the protocol is\n * unit-tested without a process, model, or socket.\n */\n\nimport { runAgent, type AgentEvent, type AgentOptions, type AgentResult } from './agent.js';\nimport type { AskUserRequest, MutatingAction } from './tools.js';\nimport type { ImageAttachment } from './types.js';\n\n/** Per-turn approval posture a host can send with `submit` (session mode). */\nexport type TurnAgentMode = 'agent' | 'plan' | 'auto';\n\n/** One queued task from the host: instruction plus optional mode/attachments. */\nexport interface TurnRequest {\n instruction: string;\n /** Overrides the spawn-time posture for this turn only (plan blocks writes engine-side). */\n agentMode?: TurnAgentMode;\n /** Images attached to this turn (multimodal providers encode them). */\n images?: ImageAttachment[];\n}\n\n/** A single line written to the host. Discriminated by `event`. */\nexport type StreamJsonOut =\n | ({ event: 'event' } & AgentEvent)\n | { event: 'approve-request'; id: number; action: MutatingAction }\n /** Clarifying question for the human — host shows a prompt and answers via stdin. */\n | { event: 'user-question'; id: number; question: string; options?: string[] }\n | { event: 'done'; result: AgentResult }\n | { event: 'error'; message: string }\n /** Session mode only: the process is up and owns this session id. */\n | { event: 'session-start'; sessionId: string; resumed: boolean }\n /** Session mode only: the turn ended; send another `submit` or `end`. */\n | { event: 'idle'; turns: number }\n /** Outcome of a checkpoint restore the host asked for. */\n | {\n event: 'checkpoint-restored';\n commit: string;\n restored: string[];\n removed: string[];\n failed: string[];\n };\n\n/**\n * A line read from the host. Approvals and answers fulfil an open round-trip;\n * `submit` starts the next turn in a session; `cancel` stops the running turn\n * without killing the process; `end` closes the session.\n */\nexport type HostMessage =\n | { kind: 'approve'; id: number; approve: boolean }\n | { kind: 'answer'; id: number; answer: string }\n | { kind: 'submit'; instruction: string; agentMode?: TurnAgentMode; images?: ImageAttachment[] }\n | { kind: 'restore'; commit: string; files: string[] }\n /** Manual compaction: condense the stored session so the recap shrinks. */\n | { kind: 'compact' }\n | { kind: 'cancel' }\n | { kind: 'end' };\n\n/**\n * Parse one host line. Returns null for malformed input or an unknown shape, so\n * a garbled line is ignored rather than taking the session down.\n */\nexport function parseHostMessage(raw: string): HostMessage | null {\n let msg: Record<string, unknown>;\n try {\n msg = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n return null;\n }\n if (!msg || typeof msg !== 'object') return null;\n if (typeof msg.approveId === 'number') {\n return { kind: 'approve', id: msg.approveId, approve: !!msg.approve };\n }\n if (typeof msg.answerId === 'number') {\n return { kind: 'answer', id: msg.answerId, answer: String(msg.answer ?? '') };\n }\n if (typeof msg.submit === 'string' && msg.submit.trim()) {\n const agentMode =\n msg.agentMode === 'plan' || msg.agentMode === 'auto' || msg.agentMode === 'agent'\n ? msg.agentMode\n : undefined;\n const images = Array.isArray(msg.images)\n ? (msg.images as unknown[])\n .filter(\n (a): a is ImageAttachment =>\n !!a &&\n typeof a === 'object' &&\n typeof (a as ImageAttachment).name === 'string' &&\n typeof (a as ImageAttachment).mediaType === 'string' &&\n typeof (a as ImageAttachment).dataBase64 === 'string',\n )\n .slice(0, 8)\n : undefined;\n return {\n kind: 'submit',\n instruction: msg.submit.trim(),\n ...(agentMode ? { agentMode } : {}),\n ...(images?.length ? { images } : {}),\n };\n }\n if (\n msg.restore &&\n typeof msg.restore === 'object' &&\n typeof (msg.restore as Record<string, unknown>).commit === 'string'\n ) {\n const r = msg.restore as { commit: string; files?: unknown };\n const files = Array.isArray(r.files) ? r.files.filter((f): f is string => typeof f === 'string') : [];\n if (files.length) return { kind: 'restore', commit: r.commit, files };\n return null;\n }\n if (msg.compactSession === true) return { kind: 'compact' };\n if (msg.cancel === true) return { kind: 'cancel' };\n if (msg.end === true) return { kind: 'end' };\n return null;\n}\n\n/**\n * Owns the NDJSON protocol for one run: serializes agent events, and turns each\n * approval / user question into a host round-trip via {@link submitDecision} /\n * {@link submitAnswer}. Under `auto`, approvals resolve true immediately (still\n * announced, for the log); user questions get a default \"proceed\" answer.\n */\nexport class StreamJsonSession {\n private nextId = 1;\n private readonly pendingApprove = new Map<number, (approve: boolean) => void>();\n private readonly pendingAnswer = new Map<number, (answer: string) => void>();\n /** Cancellation for the turn currently running (session mode). */\n private turnSignal: { aborted: boolean } = { aborted: false };\n\n constructor(\n private readonly emit: (line: StreamJsonOut) => void,\n private auto = false,\n ) {}\n\n /**\n * Per-turn approval posture (session mode): a host `submit` can flip auto on\n * or off for the coming turn without respawning the process.\n */\n setAuto(auto: boolean): void {\n this.auto = auto;\n }\n\n /** The agent's onEvent → one NDJSON line per event. */\n readonly onEvent = (e: AgentEvent): void => {\n this.emit({ event: 'event', ...e });\n };\n\n /** The agent's approval gate → an approve-request the host answers. */\n readonly approve = (action: MutatingAction): Promise<boolean> => {\n const id = this.nextId++;\n if (this.auto) {\n this.emit({ event: 'approve-request', id, action });\n return Promise.resolve(true);\n }\n return new Promise<boolean>((resolve) => {\n this.pendingApprove.set(id, resolve);\n this.emit({ event: 'approve-request', id, action });\n });\n };\n\n /** Clarifying question → user-question the host answers with free text. */\n readonly askUser = (req: AskUserRequest): Promise<string> => {\n const id = this.nextId++;\n const question = req.question.trim();\n const options = req.options?.filter(Boolean);\n if (this.auto) {\n this.emit({ event: 'user-question', id, question, options });\n return Promise.resolve(\n 'Autonomous mode: no human. Proceed with safest defaults and state assumptions.',\n );\n }\n return new Promise<string>((resolve) => {\n this.pendingAnswer.set(id, resolve);\n this.emit({ event: 'user-question', id, question, options });\n });\n };\n\n /** Host → agent: resolve a pending approval. Unknown ids are ignored. */\n submitDecision(id: number, approve: boolean): void {\n const resolve = this.pendingApprove.get(id);\n if (resolve) {\n this.pendingApprove.delete(id);\n resolve(approve);\n }\n }\n\n /** Host → agent: resolve a pending user-question. Unknown ids are ignored. */\n submitAnswer(id: number, answer: string): void {\n const resolve = this.pendingAnswer.get(id);\n if (resolve) {\n this.pendingAnswer.delete(id);\n resolve(answer ?? '');\n }\n }\n\n /** Start a turn: fresh cancellation signal, handed to the agent loop. */\n beginTurn(): { aborted: boolean } {\n this.turnSignal = { aborted: false };\n return this.turnSignal;\n }\n\n /**\n * Host → agent: stop the running turn. Sets the cooperative signal *and*\n * rejects anything the turn is blocked on, so a turn waiting at an approval\n * gate unblocks instead of hanging until the process dies.\n */\n cancelTurn(): void {\n this.turnSignal.aborted = true;\n this.cancelPending();\n }\n\n /** Reject any still-pending approvals/questions (e.g. the host disconnected). */\n cancelPending(): void {\n for (const resolve of this.pendingApprove.values()) resolve(false);\n this.pendingApprove.clear();\n for (const resolve of this.pendingAnswer.values()) resolve('');\n this.pendingAnswer.clear();\n }\n}\n\nexport interface StreamJsonOptions extends Omit<AgentOptions, 'approve' | 'onEvent' | 'askUser'> {\n emit: (line: StreamJsonOut) => void;\n /** Register the stdin decision reader; the returned session accepts decisions. */\n bindDecisions?: (session: StreamJsonSession) => void;\n}\n\n/** One turn of a session: what the host asked, and how it ended. */\nexport interface StreamJsonTurn {\n instruction: string;\n result: AgentResult | null;\n}\n\nexport interface StreamJsonSessionRunOptions {\n emit: (line: StreamJsonOut) => void;\n /** Bound once for the whole session, not per turn. */\n bindDecisions?: (session: StreamJsonSession) => void;\n auto?: boolean;\n sessionId: string;\n /** True when this session was reloaded from disk (`--continue`). */\n resumed: boolean;\n /** Instruction for the first turn. Omit to wait for the host's first `submit`. */\n instruction?: string;\n /** Spawn-time approval posture; per-turn `agentMode` on `submit` overrides it. */\n spawnAuto?: boolean;\n /** Await the host's next task; resolve null to end the session. */\n nextTurn: () => Promise<TurnRequest | null>;\n /**\n * Run one turn. Injected so the heavy agent wiring (graph, providers, MCP,\n * sandbox) is built once by the caller and reused across turns — the whole\n * point of session mode.\n */\n runTurn: (turn: {\n instruction: string;\n priorSummary?: string;\n signal: { aborted: boolean };\n session: StreamJsonSession;\n /** Per-turn posture from the host (plan blocks writes engine-side). */\n agentMode?: TurnAgentMode;\n /** Effective auto for this turn (spawn flag overridden by agentMode). */\n auto: boolean;\n images?: ImageAttachment[];\n }) => Promise<AgentResult>;\n /**\n * Record a finished turn. Returns the recap to seed the next turn, so\n * continuity is the caller's policy (session store, summarizer) not ours.\n */\n onTurnEnd?: (turn: StreamJsonTurn) => string | undefined;\n}\n\n/**\n * Session mode for `vg code --stream-json --session`: hold the process open and\n * run turn after turn against warm state, instead of paying a cold start (graph\n * load, overlay rebuild, MCP connect, model warm-up) on every message.\n *\n * Each turn still emits exactly the frames a single-shot run does, so a host\n * that already speaks the one-shot protocol only needs to learn `idle`. A turn\n * that throws is reported and the session stays up — one bad task should not\n * cost the user their conversation.\n */\nexport async function runCodeStreamJsonSession(\n options: StreamJsonSessionRunOptions,\n): Promise<StreamJsonTurn[]> {\n const { emit, bindDecisions, auto, sessionId, resumed, nextTurn, runTurn, onTurnEnd } = options;\n const spawnAuto = options.spawnAuto ?? !!auto;\n const session = new StreamJsonSession(emit, spawnAuto);\n bindDecisions?.(session);\n emit({ event: 'session-start', sessionId, resumed });\n\n const turns: StreamJsonTurn[] = [];\n let priorSummary: string | undefined;\n const first = options.instruction?.trim();\n let request: TurnRequest | null = first ? { instruction: first } : await nextTurn();\n\n while (request) {\n const signal = session.beginTurn();\n // Per-turn posture: an explicit agentMode overrides the spawn flag; plan\n // never auto-approves. First turn without a mode keeps the spawn posture.\n const turnAuto = request.agentMode ? request.agentMode === 'auto' : spawnAuto;\n session.setAuto(turnAuto && request.agentMode !== 'plan');\n const instruction = request.instruction;\n let turn: StreamJsonTurn;\n try {\n const result = await runTurn({\n instruction,\n priorSummary,\n signal,\n session,\n agentMode: request.agentMode,\n auto: turnAuto && request.agentMode !== 'plan',\n images: request.images,\n });\n emit({ event: 'done', result });\n turn = { instruction, result };\n } catch (e) {\n emit({ event: 'error', message: (e as Error).message });\n turn = { instruction, result: null };\n } finally {\n session.cancelPending();\n }\n turns.push(turn);\n priorSummary = onTurnEnd?.(turn) ?? priorSummary;\n emit({ event: 'idle', turns: turns.length });\n request = await nextTurn();\n }\n return turns;\n}\n\n/** Run the agent under the NDJSON protocol; always emits a terminal `done`/`error`. */\nexport async function runCodeStreamJson(options: StreamJsonOptions): Promise<AgentResult | null> {\n const { emit, bindDecisions, auto, ...agentOptions } = options;\n const session = new StreamJsonSession(emit, !!auto);\n bindDecisions?.(session);\n try {\n const result = await runAgent({\n ...agentOptions,\n auto,\n approve: session.approve,\n askUser: session.askUser,\n onEvent: session.onEvent,\n });\n emit({ event: 'done', result });\n return result;\n } catch (e) {\n emit({ event: 'error', message: (e as Error).message });\n return null;\n } finally {\n session.cancelPending();\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code/vg-mcp-bridge.ts"],"names":[],"mappings":"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","file":"vg-mcp-bridge-2DEZF3JM.js","sourcesContent":["/**\n * Always-on bridge from local `vg serve` (Vibgrate AI Context) tools into the\n * VG Code agent tool list.\n *\n * External project MCP servers (`.mcp.json`, etc.) remain optional. The tools\n * shipped by the installed `vg` CLI — `search_symbols`, `query_graph`,\n * `impact_of`, `library_docs`, … — are available on every run without spawning\n * a separate MCP process: same handlers as stdio `vg serve`, in-process over\n * the session graph.\n *\n * Namespaced as `mcp__vibgrate__<tool>` so they sit next to third-party\n * `mcp__<server>__*` tools without collisions.\n */\n\nimport { TOOLS, type VgTool } from '../mcp/tools.js';\nimport type { VgGraph } from '../schema.js';\nimport type { ToolCall, ToolSpec } from './types.js';\nimport type { ToolResult } from './tools.js';\n\nexport const VG_MCP_SERVER_ID = 'vibgrate' as const;\nconst NS = `mcp__${VG_MCP_SERVER_ID}__`;\n\nexport type ExternalToolset = {\n specs: ToolSpec[];\n owns: (name: string) => boolean;\n execute: (call: ToolCall, live?: { graph: VgGraph }) => Promise<ToolResult>;\n};\n\nexport interface VgBuiltinMcpOptions {\n /** Live graph accessor (session overlay may refresh symbols mid-run). */\n getGraph: () => VgGraph;\n root: string;\n /** Air-gap: no network in library/docs/embedder paths. */\n local?: boolean;\n}\n\n/** In-process toolset matching the local `vg serve` MCP surface. */\nexport function createVgBuiltinMcpTools(opts: VgBuiltinMcpOptions): ExternalToolset {\n const byName = new Map<string, VgTool>();\n for (const t of TOOLS) byName.set(`${NS}${t.name}`, t);\n\n const specs: ToolSpec[] = TOOLS.map((t) => ({\n name: `${NS}${t.name}`,\n description: `[${VG_MCP_SERVER_ID}] ${t.description}`,\n parameters: t.inputSchema && typeof t.inputSchema === 'object' ? t.inputSchema : { type: 'object', properties: {} },\n })).sort((a, b) => a.name.localeCompare(b.name));\n\n return {\n specs,\n owns: (name) => byName.has(name),\n async execute(call, live) {\n const tool = byName.get(call.name);\n if (!tool) return { content: `unknown MCP tool ${call.name}`, mutated: false };\n try {\n const graph = live?.graph ?? opts.getGraph();\n const raw = await tool.handler(graph, call.arguments ?? {}, {\n root: opts.root,\n local: opts.local,\n dedup: false,\n });\n const text = typeof raw === 'string' ? raw : JSON.stringify(raw, null, 2);\n return { content: text.slice(0, 12_000), mutated: false };\n } catch (e) {\n return { content: `MCP tool ${call.name} failed: ${(e as Error).message}`, mutated: false };\n }\n },\n };\n}\n\n/** Merge toolsets; later sets win on name clashes. */\nexport function mergeExternalToolsets(...sets: Array<ExternalToolset | undefined | null>): ExternalToolset | undefined {\n const active = sets.filter((s): s is ExternalToolset => !!s && s.specs.length > 0);\n if (active.length === 0) return undefined;\n if (active.length === 1) return active[0];\n\n const byName = new Map<string, { set: ExternalToolset; spec: ToolSpec }>();\n for (const set of active) {\n for (const spec of set.specs) byName.set(spec.name, { set, spec });\n }\n const specs = [...byName.values()].map((v) => v.spec).sort((a, b) => a.name.localeCompare(b.name));\n return {\n specs,\n owns: (name) => active.some((s) => s.owns(name)),\n async execute(call, live) {\n for (let i = active.length - 1; i >= 0; i--) {\n if (active[i]!.owns(call.name)) return active[i]!.execute(call, live);\n }\n return { content: `unknown external tool ${call.name}`, mutated: false };\n },\n };\n}\n\n/** Namespaced vibgrate tool names for tests / prompts. */\nexport function vgMcpToolNames(): string[] {\n return TOOLS.map((t) => `${NS}${t.name}`);\n}\n"]}
|
package/dist/vgd-W7IHKGNU.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"vgd-W7IHKGNU.js"}
|