@vibgrate/cli 2026.819.2 → 2026.824.3
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/dist/{agent-ZJRWCMR6.js → agent-6SJVWFPV.js} +12 -12
- package/dist/{agent-ZJRWCMR6.js.map → agent-6SJVWFPV.js.map} +1 -1
- package/dist/{approvals-YTUXBZWQ.js → approvals-5UBLBNJF.js} +5 -5
- package/dist/{approvals-YTUXBZWQ.js.map → approvals-5UBLBNJF.js.map} +1 -1
- package/dist/{attach-WOA25VNH.js → attach-PSGCCJMA.js} +3 -3
- package/dist/{attach-WOA25VNH.js.map → attach-PSGCCJMA.js.map} +1 -1
- package/dist/baseline-HPXACNFU.js +9 -0
- package/dist/{baseline-TVRRUZGA.js.map → baseline-HPXACNFU.js.map} +1 -1
- package/dist/{chunk-24HKTTFV.js → chunk-2IY24TTR.js} +3 -3
- package/dist/{chunk-24HKTTFV.js.map → chunk-2IY24TTR.js.map} +1 -1
- package/dist/{chunk-7BSUPHX6.js → chunk-3PNAQUZM.js} +3 -3
- package/dist/{chunk-7BSUPHX6.js.map → chunk-3PNAQUZM.js.map} +1 -1
- package/dist/{chunk-W6ASIMG5.js → chunk-4PDWV4AE.js} +10 -12
- package/dist/chunk-4PDWV4AE.js.map +1 -0
- package/dist/{chunk-2ZBLZ2S3.js → chunk-5QO2GFAE.js} +27 -23
- package/dist/chunk-5QO2GFAE.js.map +1 -0
- package/dist/{chunk-GBXOAO5V.js → chunk-5UG4UHKU.js} +40 -10
- package/dist/chunk-5UG4UHKU.js.map +1 -0
- package/dist/chunk-AGOKTI77.js +6 -0
- package/dist/{chunk-ZUZHYAJK.js.map → chunk-AGOKTI77.js.map} +1 -1
- package/dist/{chunk-C2EZIAA3.js → chunk-B5GOCQFB.js} +9 -9
- package/dist/{chunk-C2EZIAA3.js.map → chunk-B5GOCQFB.js.map} +1 -1
- package/dist/{chunk-MMJFHEZ4.js → chunk-CJ2R3LVX.js} +4 -4
- package/dist/{chunk-MMJFHEZ4.js.map → chunk-CJ2R3LVX.js.map} +1 -1
- package/dist/{chunk-2C4QT5D7.js → chunk-III7S75O.js} +53 -463
- package/dist/chunk-III7S75O.js.map +1 -0
- package/dist/{chunk-IMI2VHHZ.js → chunk-IKB5U3AH.js} +3 -3
- package/dist/{chunk-IMI2VHHZ.js.map → chunk-IKB5U3AH.js.map} +1 -1
- package/dist/{chunk-AP3JN33O.js → chunk-JL66EPZ4.js} +221 -10
- package/dist/chunk-JL66EPZ4.js.map +1 -0
- package/dist/{chunk-QE6F62FR.js → chunk-KBLKNR3V.js} +3 -3
- package/dist/{chunk-QE6F62FR.js.map → chunk-KBLKNR3V.js.map} +1 -1
- package/dist/{chunk-JPOYXG7Z.js → chunk-KRE7SXSA.js} +12 -13
- package/dist/chunk-KRE7SXSA.js.map +1 -0
- package/dist/{chunk-XW2XQM3C.js → chunk-LA4CETXN.js} +3 -3
- package/dist/{chunk-XW2XQM3C.js.map → chunk-LA4CETXN.js.map} +1 -1
- package/dist/{chunk-OGFOJG4H.js → chunk-LMHKIQA5.js} +3 -3
- package/dist/{chunk-OGFOJG4H.js.map → chunk-LMHKIQA5.js.map} +1 -1
- package/dist/{chunk-FCMWHSQ6.js → chunk-M5QSBXA6.js} +17 -4
- package/dist/chunk-M5QSBXA6.js.map +1 -0
- package/dist/{chunk-R5TQBIR6.js → chunk-QLNJ3VWO.js} +3 -3
- package/dist/{chunk-R5TQBIR6.js.map → chunk-QLNJ3VWO.js.map} +1 -1
- package/dist/{chunk-XLQ4YHS3.js → chunk-QP3P4V4I.js} +10 -8
- package/dist/chunk-QP3P4V4I.js.map +1 -0
- package/dist/{chunk-BQ6NTRRK.js → chunk-RAEHWCN6.js} +6 -6
- package/dist/{chunk-BQ6NTRRK.js.map → chunk-RAEHWCN6.js.map} +1 -1
- package/dist/{chunk-USPMMVNH.js → chunk-SGIFJIII.js} +3 -3
- package/dist/{chunk-USPMMVNH.js.map → chunk-SGIFJIII.js.map} +1 -1
- package/dist/{chunk-CBL3VY7J.js → chunk-TWWVTKA7.js} +35 -14
- package/dist/chunk-TWWVTKA7.js.map +1 -0
- package/dist/chunk-USW5WHUG.js +605 -0
- package/dist/chunk-USW5WHUG.js.map +1 -0
- package/dist/{chunk-NKKOGJ63.js → chunk-UUNEUEPQ.js} +71 -9
- package/dist/chunk-UUNEUEPQ.js.map +1 -0
- package/dist/{chunk-WPLOEFZU.js → chunk-WATYIYWP.js} +3 -3
- package/dist/{chunk-WPLOEFZU.js.map → chunk-WATYIYWP.js.map} +1 -1
- package/dist/{chunk-PJRPSYFQ.js → chunk-XHIWQGRE.js} +5 -5
- package/dist/{chunk-PJRPSYFQ.js.map → chunk-XHIWQGRE.js.map} +1 -1
- package/dist/{chunk-AQZYDFEK.js → chunk-YJ23GGAJ.js} +3 -3
- package/dist/{chunk-AQZYDFEK.js.map → chunk-YJ23GGAJ.js.map} +1 -1
- package/dist/cli.js +379 -544
- package/dist/cli.js.map +1 -1
- package/dist/{daemon-YKOEP3XA.js → daemon-AEL5N4SJ.js} +9 -9
- package/dist/{daemon-YKOEP3XA.js.map → daemon-AEL5N4SJ.js.map} +1 -1
- package/dist/embed-worker-main.js +3 -3
- package/dist/{ensure-map-BLRJDO2Y.js → ensure-map-YL5NR6UH.js} +15 -15
- package/dist/{ensure-map-BLRJDO2Y.js.map → ensure-map-YL5NR6UH.js.map} +1 -1
- package/dist/{graph-backend-NTYONTWW.js → graph-backend-LEPXFPXQ.js} +7 -7
- package/dist/{graph-backend-NTYONTWW.js.map → graph-backend-LEPXFPXQ.js.map} +1 -1
- package/dist/index.d.ts +72 -130
- package/dist/index.js +15 -15
- package/dist/{interactive-B3WTC7LB.js → interactive-YJ37ZWTA.js} +27 -26
- package/dist/interactive-YJ37ZWTA.js.map +1 -0
- package/dist/load-LT6R73IZ.js +11 -0
- package/dist/{load-AJROS77R.js.map → load-LT6R73IZ.js.map} +1 -1
- package/dist/parse-worker.js +3 -2
- package/dist/parse-worker.js.map +1 -1
- package/dist/{run-outcome-SBBSTSH3.js → run-outcome-YQBPYNEY.js} +5 -5
- package/dist/{run-outcome-SBBSTSH3.js.map → run-outcome-YQBPYNEY.js.map} +1 -1
- package/dist/{runtime-session-JYYKQVDX.js → runtime-session-JSH5UL7Z.js} +9 -9
- package/dist/{runtime-session-JYYKQVDX.js.map → runtime-session-JSH5UL7Z.js.map} +1 -1
- package/dist/{session-2ZMHZ2O6.js → session-3FLVZRMM.js} +8 -8
- package/dist/{session-2ZMHZ2O6.js.map → session-3FLVZRMM.js.map} +1 -1
- package/dist/{stream-json-ZWGB4C47.js → stream-json-VJ2O52CR.js} +12 -12
- package/dist/{stream-json-ZWGB4C47.js.map → stream-json-VJ2O52CR.js.map} +1 -1
- package/dist/version-VUTM46C5.js +4 -0
- package/dist/{version-5QIEUXU6.js.map → version-VUTM46C5.js.map} +1 -1
- package/dist/{vg-mcp-bridge-4FETMJ6M.js → vg-mcp-bridge-UUMEOJSO.js} +9 -9
- package/dist/{vg-mcp-bridge-4FETMJ6M.js.map → vg-mcp-bridge-UUMEOJSO.js.map} +1 -1
- package/dist/{vgd-R524P5BJ.js → vgd-XFT574U6.js} +8 -8
- package/dist/vgd-XFT574U6.js.map +1 -0
- package/package.json +2 -1
- package/dist/baseline-TVRRUZGA.js +0 -9
- package/dist/chunk-2C4QT5D7.js.map +0 -1
- package/dist/chunk-2ZBLZ2S3.js.map +0 -1
- package/dist/chunk-AP3JN33O.js.map +0 -1
- package/dist/chunk-CA4YQBA7.js +0 -699
- package/dist/chunk-CA4YQBA7.js.map +0 -1
- package/dist/chunk-CBL3VY7J.js.map +0 -1
- package/dist/chunk-FCMWHSQ6.js.map +0 -1
- package/dist/chunk-GBXOAO5V.js.map +0 -1
- package/dist/chunk-JPOYXG7Z.js.map +0 -1
- package/dist/chunk-NKKOGJ63.js.map +0 -1
- package/dist/chunk-W6ASIMG5.js.map +0 -1
- package/dist/chunk-XLQ4YHS3.js.map +0 -1
- package/dist/chunk-ZUZHYAJK.js +0 -6
- package/dist/interactive-B3WTC7LB.js.map +0 -1
- package/dist/load-AJROS77R.js +0 -11
- package/dist/version-5QIEUXU6.js +0 -4
- package/dist/vgd-R524P5BJ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/relations.ts","../src/engine/user-ask.ts","../src/engine/query.ts","../src/engine/impact.ts"],"names":["push","text","round"],"mappings":"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","file":"chunk-USW5WHUG.js","sourcesContent":["import type { EdgeKind, GraphEdge, GraphNode, VgGraph } from '../schema.js';\n\n/** Indexes over a graph for O(1) neighbor lookups (built once per command). */\nexport class GraphIndex {\n readonly nodeById = new Map<string, GraphNode>();\n private outById = new Map<string, GraphEdge[]>();\n private inById = new Map<string, GraphEdge[]>();\n\n constructor(readonly graph: VgGraph) {\n for (const n of graph.nodes) this.nodeById.set(n.id, n);\n for (const e of graph.edges) {\n push(this.outById, e.src, e);\n push(this.inById, e.dst, e);\n }\n }\n\n out(id: string, kind?: EdgeKind): GraphEdge[] {\n const all = this.outById.get(id) ?? [];\n return kind ? all.filter((e) => e.kind === kind) : all;\n }\n\n in(id: string, kind?: EdgeKind): GraphEdge[] {\n const all = this.inById.get(id) ?? [];\n return kind ? all.filter((e) => e.kind === kind) : all;\n }\n\n node(id: string): GraphNode | undefined {\n return this.nodeById.get(id);\n }\n\n /**\n * Resolved nodes called by `id` — invocations (`call`) plus structural\n * dependency references (`references`, e.g. a constructor-injected field's\n * type), since both represent real usage a caller/impact question cares\n * about. `references` is otherwise only emitted by the precise SCIP/tsc\n * rungs and (for Java DI wiring) the heuristic rung — never a guess.\n */\n callees(id: string): { edge: GraphEdge; node: GraphNode }[] {\n return this.resolveTargets(this.out(id).filter(isUsageEdge), 'dst');\n }\n\n /** Resolved nodes that call or structurally reference `id`. */\n callers(id: string): { edge: GraphEdge; node: GraphNode }[] {\n return this.resolveTargets(this.in(id).filter(isUsageEdge), 'src');\n }\n\n private resolveTargets(edges: GraphEdge[], end: 'src' | 'dst') {\n const out: { edge: GraphEdge; node: GraphNode }[] = [];\n for (const e of edges) {\n const node = this.nodeById.get(e[end]);\n if (node) out.push({ edge: e, node });\n }\n return out;\n }\n}\n\nconst USAGE_KINDS: ReadonlySet<EdgeKind> = new Set(['call', 'references']);\nfunction isUsageEdge(e: GraphEdge): boolean {\n return USAGE_KINDS.has(e.kind);\n}\n\nfunction push(map: Map<string, GraphEdge[]>, key: string, value: GraphEdge): void {\n const list = map.get(key);\n if (list) list.push(value);\n else map.set(key, [value]);\n}\n\n/**\n * Memoized `GraphIndex`, keyed on the graph object's identity.\n *\n * The index (node-by-id + in/out adjacency) is a pure function of the graph's\n * content, and every read path rebuilds it from scratch — an O(nodes + edges)\n * pass that, on a large map, costs hundreds of milliseconds *per query*. Under\n * `vg serve` the same parsed graph object is reused across many tool calls\n * (`GraphSource` caches it by file mtime and only replaces the reference when\n * `graph.json` actually changes), so rebuilding the index on every call is pure\n * waste. Keying a `WeakMap` on that object identity builds the index once and\n * reuses it until the file is rebuilt — at which point `GraphSource` hands back a\n * *new* object, this map misses, and the stale index is collected with the old\n * graph. Correct and stale-safe by construction: a different graph is a\n * different object, so there is no cross-graph reuse and nothing to invalidate.\n *\n * `GraphIndex` is read-only (no method mutates its maps), so sharing one\n * instance across callers is safe.\n */\nconst INDEX_CACHE = new WeakMap<VgGraph, GraphIndex>();\n\nexport function indexFor(graph: VgGraph): GraphIndex {\n let idx = INDEX_CACHE.get(graph);\n if (!idx) {\n idx = new GraphIndex(graph);\n INDEX_CACHE.set(graph, idx);\n }\n return idx;\n}\n","/**\n * Split the user's ask from host-injected attachment metadata.\n *\n * The VS Code panel (`codeAttachments.ts`) and other hosts append a markdown\n * block after a `---` fence:\n *\n * ## User attachments (always include in your reasoning for this turn)\n * ### Attached image: `image.png`\n * … saved at: `.vibgrate/code-attachments/…`\n *\n * Those backticks are for the model. If the full instruction is fed into\n * {@link extractLiteralNeedles} / seed ranking, attachment basenames and paths\n * become **literal-locate hard constraints** (\"0 hits → finish, do not invent\n * an edit\") and the agent aborts a real coding task. Field report: version-badge\n * health UI with a screenshot — agent searched for `image.png` and stopped.\n *\n * Retrieval, needle pinning, locate-only detection, and relevance analysis must\n * use {@link userAskFromInstruction}. The full instruction (with attachments)\n * still belongs in the Task / user message so the model can see the appendix.\n */\n\n/** Heading written by hosts when packing panel attachments into the instruction. */\nexport const USER_ATTACHMENTS_HEADING_PREFIX = '## User attachments';\n\n/**\n * Return only the user-authored portion of an instruction, dropping a trailing\n * host \"User attachments\" appendix when present. Unchanged when no appendix.\n */\nexport function userAskFromInstruction(instruction: string): string {\n if (!instruction) return instruction;\n\n // Canonical host shape: blank line, --- fence, then the attachments heading.\n const fenced = /\\n---\\s*\\n## User attachments\\b[^\\n]*\\n?/;\n const m = fenced.exec(instruction);\n if (m && m.index != null) {\n return instruction.slice(0, m.index).trimEnd();\n }\n\n // Defensive: heading without the fence (older hosts / hand-edited prompts).\n const bare = instruction.search(/(?:^|\\n)## User attachments\\b/);\n if (bare > 0) {\n return instruction.slice(0, bare).trimEnd();\n }\n if (bare === 0) {\n // Instruction is only the appendix — no user ask left.\n return '';\n }\n\n return instruction;\n}\n","import { indexFor, type GraphIndex } from './relations.js';\nimport { cosine, type Embedder } from './embeddings.js';\nimport type { SanitizedRank } from './relevance-provider.js';\nimport type { GraphNode, VgGraph } from '../schema.js';\nimport { userAskFromInstruction } from './user-ask.js';\n\n/**\n * Retrieval front-end for `vg ask` / `vg code` capsule seeds (VG-CLI-SPEC\n * §3.2).\n *\n * Since the 2026-08 relevance relocation, the RANKING ENGINE lives in the\n * optional relevance module (`@vibgrate/relevance`, auto-provisioned): the\n * async callers run the ask through the module via\n * `relevance-provider.rankQuestion` and pass the SANITIZED result in as\n * `options.ranked`. This file keeps only what is mechanical:\n *\n * - literal string/URL needle handling (the locate path — exact-text\n * matching, not relevance);\n * - a deliberately dumb module-less fallback: exact identifier-name and\n * name-part matching, nothing that understands language (no lexicon, no\n * term roles, no IDF, no typo repair, no expansion) — enough that an ask\n * NAMING a symbol still pins its file when the module is unavailable;\n * - context-block rendering and the semantic Reciprocal Rank Fusion\n * plumbing (`--semantic`), which fuses ORDERINGS and carries no ranking\n * heuristics of its own.\n */\n\nexport interface QueryOptions {\n budget?: number; // approx token budget for the context block (default 2000)\n limit?: number; // max seed matches to expand (default 12)\n /** Sanitized module ranking (engine/relevance-provider.ts rankQuestion),\n * injected by async callers so this module stays pure and sync. When\n * absent — module not installed, predates the ranking API, or failed —\n * the mechanical fallback below answers. */\n ranked?: SanitizedRank | null;\n}\n\nexport interface QueryMatch {\n node: GraphNode;\n score: number;\n why: string;\n}\n\nexport interface QueryResult {\n question: string;\n matches: QueryMatch[];\n context: string;\n tokensEstimate: number;\n}\n\n/**\n * Function-word hygiene for the mechanical fallback tokenizer. This is NOT a\n * relevance stopword model (that moved into the module): nothing here scores,\n * ranks, weights, or reorders anything. It is a purely SUBTRACTIVE floor —\n * the words a caller uses to FRAME an ask rather than to name the code they\n * mean, which therefore cannot be identifier evidence.\n *\n * The floor exists because `mechanicalRank` treats every surviving token as\n * equal evidence, and English framing words collide with real identifier\n * parts constantly. Without it, `\"add a new feature\"` scores `AddBlogForm`\n * on the camel-part tier (`add`) and `FeatureFlagStore` (`feature`) and fills\n * the entire seed window — a grab-bag Task Capsule for an ask that named\n * nothing. That is the capsule-poisoning failure of the 2026-07 field report,\n * and an empty result is the correct answer.\n *\n * Note this is the floor ONLY. Deciding which of several genuine candidates\n * is most relevant remains the module's job, and no part of that logic —\n * term roles, weighting, expansion, morphology — belongs in this file.\n */\nconst FUNCTION_WORDS = new Set([\n // Closed-class English: could only ever match by coincidence.\n 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'to', 'of', 'in', 'on', 'for', 'and', 'or',\n 'where', 'what', 'which', 'how', 'do', 'does', 'did', 'i', 'we', 'it', 'this', 'that', 'with',\n 'when', 'who', 'why', 'can', 'should', 'my', 'our', 'you', 'your', 'from', 'by', 'at', 'as',\n // Process verbs. A caller says what they want DONE with these; they never\n // name the code it should be done to. Left in, bare `add` seeds every\n // Add*/*Add* symbol in the repo ahead of the terms that carry the subject.\n 'add', 'adds', 'added', 'adding',\n 'create', 'creates', 'created', 'creating',\n 'make', 'makes', 'making', 'made',\n 'remove', 'removes', 'removed', 'removing',\n 'delete', 'deletes', 'deleted', 'deleting',\n 'update', 'updates', 'updated', 'updating',\n 'change', 'changes', 'changed', 'changing',\n 'set', 'sets', 'setting', 'setup', 'get', 'gets', 'getting',\n 'use', 'uses', 'used', 'using', 'want', 'wants', 'wanted', 'doing', 'done',\n 'support', 'supports', 'supported', 'supporting',\n 'enable', 'enables', 'enabled', 'enabling',\n 'disable', 'disables', 'disabled', 'disabling',\n 'allow', 'allows', 'allowed', 'handle', 'handles', 'handling',\n 'implement', 'implements', 'implemented', 'implementing',\n 'build', 'builds', 'building', 'built', 'need', 'needs', 'needed',\n // Filler nouns and connectives: the generic scaffolding of a request.\n 'new', 'newly', 'via', 'through', 'into', 'onto',\n 'way', 'ways', 'thing', 'things', 'stuff',\n 'feature', 'features', 'functionality',\n 'method', 'methods', 'option', 'options', 'ability',\n 'form', 'forms', 'page', 'pages', 'screen', 'screens', 'button', 'buttons',\n 'help', 'start', 'begin', 'work', 'works', 'working',\n 'also', 'currently', 'properly', 'correctly', 'please',\n 'happens', 'happen', 'something', 'somewhere',\n 'step', 'steps', 'flow', 'process',\n // Discovery-question scaffolding: words that FRAME the search itself\n // (\"find the code responsible for X\", \"explain how X works\").\n 'find', 'code', 'responsible', 'modify', 'me',\n 'implementation', 'explain', 'codebase', 'contains', 'file',\n // Bug-report framing: says something is WRONG, never what is wrong.\n // `fix` alone lit up `export_fixed_width_records`, `out` lit up every\n // *Router*/*rollout* symbol (vg code prompt-relevance corpus).\n 'fix', 'fixes', 'fixing', 'bug', 'bugs', 'broken', 'busted', 'borked',\n 'wrong', 'incorrect', 'incorrectly', 'figure', 'out', 'sure',\n]);\n\n/**\n * Strip sentence punctuation from a URL match without breaking real query\n * strings (`?key=value`). A lone trailing `?` / `!` is English punctuation\n * (\"where is https://…/signup?\") — leaving it in the needle makes the literal\n * sweep miss the bare path in source.\n */\nfunction cleanUrlNeedle(raw: string): string {\n let s = raw.trim();\n // Trailing ) ] } > , ; : ! . from markdown links / sentence ends.\n s = s.replace(/[.,;:!)\\]}>]+$/g, '');\n // Lone trailing `?` → drop. Keep `?key=…` (content after `?`).\n if (s.endsWith('?')) {\n const qi = s.lastIndexOf('?');\n if (qi === s.length - 1) s = s.slice(0, -1);\n }\n return s;\n}\n\n/**\n * Extract string/URL needles a caller is asking to *locate as text*, not as\n * bag-of-words symbol terms. URLs and quoted phrases are exact-match material\n * for the literal sweep (`search_symbols` / `search_code`); feeding their path\n * segments into lexical symbol ranking produces confidently wrong seeds\n * (dash → dashboard package, exist → NonExisting, …).\n */\nexport function extractLiteralNeedles(question: string): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (raw: string, kind: 'url' | 'quote') => {\n let s = raw.trim();\n s = kind === 'url' ? cleanUrlNeedle(s) : s.replace(/[.,;:!)\\]}>?]+$/g, '');\n if (s.length < 2 || seen.has(s)) return;\n seen.add(s);\n out.push(s);\n };\n for (const m of question.matchAll(/https?:\\/\\/[^\\s\"'`<>]+/gi)) push(m[0]!, 'url');\n for (const m of question.matchAll(/([\"'`])((?:(?!\\1)[^\\\\]|\\\\.){2,})\\1/g)) {\n push(m[2]!.replace(/\\\\(.)/g, '$1'), 'quote');\n }\n return out;\n}\n\n/** Question text with URL/quoted needles removed so residual tokens can name symbols. */\nexport function stripLiteralNeedles(question: string): string {\n let s = question;\n // Strip raw URL spans first (may still carry a trailing `?` from the ask).\n for (const m of question.matchAll(/https?:\\/\\/[^\\s\"'`<>]+/gi)) {\n s = s.split(m[0]!).join(' ');\n }\n for (const lit of extractLiteralNeedles(question)) {\n s = s.split(lit).join(' ');\n }\n // Also strip bare quote pairs left behind.\n s = s.replace(/([\"'`])\\s*\\1/g, ' ');\n return s.replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Residual ask used for graph symbol ranking when the question embeds a\n * URL/quote. Empty when only framing words remain (\"where is …?\") so we do\n * not light up unrelated symbols like `applyPlan.where`.\n */\nexport function residualForSymbolSearch(question: string): string {\n const literals = extractLiteralNeedles(question);\n if (literals.length === 0) return question.trim();\n const stripped = stripLiteralNeedles(question);\n return tokenize(stripped).length === 0 ? '' : stripped;\n}\n\n/**\n * True when the instruction is a string/URL occurrence locate (not an edit).\n * Used to skip PatchIR grammar and answer from the literal sweep without\n * dumping constrained-decoding JSON into the VG Code panel.\n */\nexport function isLocateOnlyInstruction(instruction: string): boolean {\n // Drop host-injected \"User attachments\" appendix (backticked image paths)\n // before classify — same rule as buildCodeContext. Avoids treating a screenshot\n // filename as a locate-only occurrence search.\n const q = userAskFromInstruction(instruction).trim();\n if (!q) return false;\n const needles = extractLiteralNeedles(q);\n const hasLocateFrame =\n /\\b(where\\s+is|where\\s+are|find\\s+(all\\s+|every\\s+)?occurrence|find\\s+occurrences|does\\s+not\\s+exist|locate|search\\s+for)\\b/i.test(\n q,\n ) ||\n (needles.length > 0 && /^https?:\\/\\//i.test(q));\n // Strong edit verbs cancel locate-only (ignore \"does not exist\" as non-edit).\n const withoutExist = q.replace(/\\bdoes\\s+not\\s+exist\\b/gi, ' ');\n if (\n /\\b(fix|edit|change|replace|implement|refactor|rename|patch|create\\s+file|delete\\s+file|add\\s+a\\b|remove\\s+the\\b)\\b/i.test(\n withoutExist,\n )\n ) {\n return false;\n }\n if (needles.some((n) => /^https?:\\/\\//i.test(n))) return true;\n return hasLocateFrame && needles.length > 0;\n}\n\nexport function queryGraph(graph: VgGraph, question: string, options: QueryOptions = {}): QueryResult {\n const budget = options.budget ?? 2000;\n const limit = options.limit ?? 12;\n const literals = extractLiteralNeedles(question);\n const index = indexFor(graph);\n\n let seeds: QueryMatch[];\n if (options.ranked) {\n // Module ranking (already sanitized: every id names a real symbol).\n // An honest miss from the engine stays an honest miss here.\n const byId = new Map<string, GraphNode>();\n for (const node of graph.nodes) byId.set(node.id, node);\n seeds = options.ranked.hasContent\n ? options.ranked.seeds\n .map((s) => {\n const node = byId.get(s.id);\n return node ? { node, score: s.score, why: s.why } : null;\n })\n .filter((m): m is QueryMatch => m !== null)\n .slice(0, limit)\n : [];\n } else {\n seeds = mechanicalRank(graph, question, literals).slice(0, limit);\n }\n\n const { context, tokensEstimate } = buildContext(graph, index, question, seeds, budget, literals);\n return { question, matches: seeds, context, tokensEstimate };\n}\n\n/**\n * The module-less fallback: mechanical identifier matching, deliberately free\n * of language understanding. A token scores only when it IS a symbol's name,\n * one of its camel/snake parts, or (length ≥ 4) a substring of the qualified\n * name — so \"write tests for chargeCard\" or a pasted `src/…/File.ts` path\n * still pins the right file, while intent phrasings honestly miss until the\n * relevance module is available. No lexicon, no term roles, no IDF, no typo\n * repair, no expansions — that is the module's job now.\n */\nfunction mechanicalRank(graph: VgGraph, question: string, literals: string[]): QueryMatch[] {\n const forTokens = literals.length > 0 ? stripLiteralNeedles(question) : question;\n let tokens = tokenize(forTokens);\n // A literal ask's residual framing (\"does not exist\", \"find occurrences\")\n // must not light up DoesNot*/NonExisting*/commandExists lookalikes — the\n // honest-miss contract of the locate path holds module-less too.\n if (literals.length > 0) tokens = tokens.filter((t) => !LOCATE_SCAFFOLD.has(t));\n if (tokens.length === 0) return [];\n const scored: QueryMatch[] = [];\n for (const node of graph.nodes) {\n if (node.kind === 'file' || node.kind === 'external') continue;\n const name = node.name.toLowerCase();\n const qn = node.qualifiedName.toLowerCase();\n const parts = identifierParts(node.name);\n let score = 0;\n const hits: string[] = [];\n for (const t of tokens) {\n if (name === t) {\n score += 10;\n hits.push(t);\n } else if (parts.has(t)) {\n score += 6;\n hits.push(t);\n } else if (t.length >= 4 && qn.includes(t)) {\n score += 3;\n hits.push(t);\n }\n }\n if (score > 0) {\n scored.push({\n node,\n score: round(score * (1 + IMPORTANCE_WEIGHT * node.importance)),\n why: `matched: ${hits.join(', ')}`,\n });\n }\n }\n scored.sort((a, b) => b.score - a.score || a.node.qualifiedName.localeCompare(b.node.qualifiedName));\n return diversifyByFile(scored);\n}\n\nfunction tokenize(q: string): string[] {\n return [\n ...new Set(\n q\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter((t) => t.length >= 1 && !FUNCTION_WORDS.has(t)),\n ),\n ];\n}\n\n/**\n * Importance is a mild tiebreaker, not a doubling: at 0.4 a top hub adds at\n * most 40%, enough to break genuine ties without overriding term evidence.\n */\nconst IMPORTANCE_WEIGHT = 0.4;\n\n/** Residual framing of a string/URL locate ask — never symbol evidence. */\nconst LOCATE_SCAFFOLD = new Set([\n 'not', 'no', 'exist', 'exists', 'existing', 'occurrence', 'occurrences',\n 'occurence', 'occurences', 'find', 'every', 'place', 'places', 'string',\n 'literal', 'text', 'search', 'locate', 'look', 'looking', 'show', 'list', 'all',\n]);\n\n/**\n * Stable file-diversity pass over the ranked list: each file's best node\n * keeps its rank; further nodes from an already-represented file are demoted\n * behind the first representative of every other matching file (never\n * dropped). Mechanical presentation hygiene — the seed window is a coverage\n * budget either way.\n */\nfunction diversifyByFile(matches: QueryMatch[]): QueryMatch[] {\n const seen = new Set<string>();\n const firstPerFile: QueryMatch[] = [];\n const rest: QueryMatch[] = [];\n for (const m of matches) {\n if (seen.has(m.node.file)) {\n rest.push(m);\n } else {\n seen.add(m.node.file);\n firstPerFile.push(m);\n }\n }\n return firstPerFile.concat(rest);\n}\n\nexport interface SemanticQueryOptions extends QueryOptions {\n /** Local embedder. Optional only when {@link semanticRanked} supplies the pass. */\n embedder?: Embedder;\n /** Precomputed node vectors (from getNodeEmbeddings); falls back to lexical for nodes without one. */\n nodeVectors?: Map<string, number[]>;\n /**\n * A semantic pass someone else already ran — vgd ranking the question\n * against its resident slot index. Supplied instead of `embedder` +\n * `nodeVectors` so the caller pays neither a model load nor a vector scan,\n * and no vectors cross the socket.\n *\n * Only the ORDER of this list is consumed (RRF fuses rankings, not scores),\n * so a truncated top-K is not an approximation: a candidate ranked past a\n * few hundred cannot reach a 12-row answer.\n */\n semanticRanked?: Array<{ id: string; score: number }>;\n}\n\n/**\n * Reciprocal Rank Fusion constant (the standard k=60). Fusing RANKINGS\n * instead of blending raw scores removes the need to calibrate two\n * incomparable scales: a node's fused score is Σ 1/(k + rankᵢ) over the\n * lists it appears in, so agreement between signals dominates and a single\n * signal's outlier magnitude cannot.\n */\nconst RRF_K = 60;\n\n/** 1-based ranks for a scored id list (desc score, qualifiedName tiebreak). */\nfunction ranksOf(scores: Map<string, number>, nameOf: (id: string) => string): Map<string, number> {\n const ids = [...scores.entries()]\n .filter(([, s]) => s > 0)\n .sort((a, b) => b[1] - a[1] || nameOf(a[0]).localeCompare(nameOf(b[0])))\n .map(([id]) => id);\n return new Map(ids.map((id, i) => [id, i + 1]));\n}\n\n/**\n * Hybrid retrieval, combined with Reciprocal Rank Fusion: the module ranking\n * (or the mechanical fallback) is one arm, the local-embedding pass the\n * other, so a question like \"where do we handle auth failures?\" can surface\n * `verify_token` even with no shared word. Deterministic given the same\n * model + cached vectors; embeddings live in a binary sidecar next to the\n * map, never in `graph.json`.\n */\nexport async function queryGraphSemantic(\n graph: VgGraph,\n question: string,\n options: SemanticQueryOptions,\n): Promise<QueryResult> {\n const budget = options.budget ?? 2000;\n const limit = options.limit ?? 12;\n const literals = extractLiteralNeedles(question);\n const forTokens = literals.length > 0 ? stripLiteralNeedles(question) : question;\n const residualTokens = tokenize(forTokens);\n // Embed the residual ask (without URL/quote noise) so semantic neighbours\n // aren't dragged toward package names that share host path segments. Skipped\n // entirely when the ranking arrives pre-computed (vgd already embedded it).\n const queryVec = options.semanticRanked\n ? null\n : await options.embedder?.embedQuery(forTokens || question);\n const index = indexFor(graph);\n\n // Lexical arm: module ranking order when available, mechanical otherwise.\n // RRF consumes only the ORDER. An honest miss contributes an empty arm.\n const lexRaw = new Map<string, number>();\n const whyById = new Map<string, string>();\n const lexSeeds = options.ranked\n ? options.ranked.hasContent\n ? options.ranked.seeds.map((s) => ({ id: s.id, score: s.score, why: s.why }))\n : []\n : mechanicalRank(graph, question, literals).map((m) => ({ id: m.node.id, score: m.score, why: m.why }));\n for (const s of lexSeeds) {\n lexRaw.set(s.id, s.score);\n whyById.set(s.id, s.why);\n }\n\n const scored: QueryMatch[] = [];\n // Literal-only asks: skip the semantic loop entirely — embeddings over\n // \"does not exist find occurrences\" still surface unrelated hubs.\n if (residualTokens.length > 0 || literals.length === 0) {\n const semRaw = new Map<string, number>();\n const nodeById = new Map<string, GraphNode>();\n for (const node of graph.nodes) {\n if (node.kind === 'file' || node.kind === 'external') continue;\n nodeById.set(node.id, node);\n if (options.semanticRanked || !queryVec) continue;\n const vec = options.nodeVectors?.get(node.id);\n const sem = vec && residualTokens.length > 0 ? Math.max(0, cosine(queryVec, vec)) : 0;\n if (sem > 0) semRaw.set(node.id, sem);\n }\n if (options.semanticRanked && residualTokens.length > 0) {\n // Ignore ids the ranking knows about but this graph no longer has: the\n // daemon's index can be one publish behind a locally refreshed map.\n for (const { id, score } of options.semanticRanked) {\n if (score > 0 && nodeById.has(id)) semRaw.set(id, score);\n }\n }\n const nameOf = (id: string) => nodeById.get(id)?.qualifiedName ?? id;\n const lexRanks = ranksOf(lexRaw, nameOf);\n const semRanks = ranksOf(semRaw, nameOf);\n for (const [id, node] of nodeById) {\n const lr = lexRanks.get(id);\n const sr = semRanks.get(id);\n if (lr === undefined && sr === undefined) continue;\n const fused = (lr !== undefined ? 1 / (RRF_K + lr) : 0) + (sr !== undefined ? 1 / (RRF_K + sr) : 0);\n const sem = semRaw.get(id) ?? 0;\n const lexWhy = whyById.get(id);\n const why = lexWhy || (sem > 0.3 ? `semantic match (${sem.toFixed(2)})` : 'weak match');\n scored.push({ node, score: round(fused * (1 + IMPORTANCE_WEIGHT * node.importance)), why });\n }\n scored.sort((a, b) => b.score - a.score || a.node.qualifiedName.localeCompare(b.node.qualifiedName));\n }\n\n const seeds = diversifyByFile(scored).slice(0, limit);\n const { context, tokensEstimate } = buildContext(graph, index, question, seeds, budget, literals);\n return { question, matches: seeds, context, tokensEstimate };\n}\n\n/**\n * camelCase / snake_case / kebab / letter↔digit split of an identifier →\n * lowercased parts. The separator alternative is Unicode-letter-aware\n * (`\\p{L}\\p{N}`, not ASCII-only) so non-Latin identifiers split on\n * punctuation without losing every character to it; the camelCase boundary\n * lookaround stays ASCII-only since casing is itself an ASCII-script concept.\n * Letter↔digit boundaries split too, so `Session2` keeps `session` reachable.\n */\nexport function identifierParts(name: string): Set<string> {\n return new Set(\n name\n .split(/[^\\p{L}\\p{N}]+|(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[\\p{L}])(?=[0-9])|(?<=[0-9])(?=[\\p{L}])/u)\n .filter(Boolean)\n .map((s) => s.toLowerCase()),\n );\n}\n\nfunction buildContext(\n graph: VgGraph,\n index: GraphIndex,\n question: string,\n seeds: QueryMatch[],\n budget: number,\n literals: string[] = [],\n): { context: string; tokensEstimate: number } {\n const lines: string[] = [];\n lines.push(`# Context for: ${question}`);\n lines.push('');\n if (literals.length) {\n lines.push('## Literal string(s) to locate (exact text, not symbol names)');\n for (const lit of literals) lines.push(`- \\`${lit}\\``);\n lines.push(\n '_Use a quoted phrase / URL search (`search_symbols` or `search_code` with the exact needle) for occurrences. Graph symbols below (if any) are residual identifier hints only._',\n );\n lines.push('');\n }\n if (seeds.length === 0) {\n lines.push(\n literals.length\n ? '_No graph symbols matched residual terms — this is expected for a pure string/URL occurrence search. Run a literal sweep on the needle(s) above._'\n : '_No matching symbols found in the map. Try different terms, or `vg hubs` for the most important code._',\n );\n const text = lines.join('\\n');\n return { context: text, tokensEstimate: estimateTokens(text) };\n }\n\n for (const { node, why } of seeds) {\n const block: string[] = [];\n block.push(`## ${node.qualifiedName} (${node.kind}, ${node.file}:${node.span.start})`);\n if (node.signature) block.push('`' + node.signature + '`');\n const callees = index.callees(node.id).map((x) => x.node.qualifiedName);\n const callers = index.callers(node.id).map((x) => x.node.qualifiedName);\n if (callees.length) block.push(`calls: ${unique(callees).slice(0, 8).join(', ')}`);\n if (callers.length) block.push(`called by: ${unique(callers).slice(0, 8).join(', ')}`);\n block.push(`importance ${node.importance.toFixed(3)} · area #${node.area}${node.isHub ? ' · hub' : ''} · ${why}`);\n block.push('');\n\n const candidate = lines.concat(block).join('\\n');\n if (estimateTokens(candidate) > budget && lines.length > 2) break;\n lines.push(...block);\n }\n\n const text = lines.join('\\n');\n return { context: text, tokensEstimate: estimateTokens(text) };\n}\n\nfunction unique(xs: string[]): string[] {\n return [...new Set(xs)];\n}\n\nfunction estimateTokens(text: string): number {\n // ~4 chars per token, the standard rough estimate.\n return Math.ceil(text.length / 4);\n}\n\nfunction round(x: number): number {\n return Math.round(x * 1e6) / 1e6;\n}\n","import { indexFor } from './relations.js';\nimport type { EdgeKind, VgGraph } from '../schema.js';\n\n/**\n * Deterministic reverse-reachability impact analysis (VG-CLI-SPEC §3.5).\n *\n * \"What breaks if `<node>` changes\" = everything that (transitively) depends on\n * it: its callers, importers, and subtypes. We BFS *backwards* along dependency\n * edges, bounded by depth, with a confidence that decays with distance (direct =\n * high; transitive lower; ambiguous/dynamic edges already carry lower edge\n * confidence which we fold in). Test-impact selection (`--tests`) lands in\n * Phase 2; this is the structural blast radius.\n */\n\nconst DEPEND_EDGES = new Set<EdgeKind>(['call', 'import', 'extends', 'implements', 'references']);\n\nexport interface ImpactItem {\n id: string;\n name: string;\n kind: string;\n file: string;\n line: number;\n depth: number;\n confidence: number;\n}\n\nexport interface ImpactResult {\n root: { id: string; name: string };\n depth: number;\n affected: ImpactItem[];\n direct: number;\n transitive: number;\n /** Lowest edge confidence encountered (e.g. a dynamic-dispatch edge). */\n minEdgeConfidence: number;\n}\n\nexport function impactOf(graph: VgGraph, rootId: string, opts: { depth?: number } = {}): ImpactResult {\n const maxDepth = Math.max(1, opts.depth ?? 4);\n const index = indexFor(graph);\n const root = index.node(rootId);\n\n const affected = new Map<string, ImpactItem>();\n let minEdgeConfidence = 1;\n\n // BFS over incoming dependency edges (dependents of the frontier).\n let frontier: { id: string; conf: number }[] = [{ id: rootId, conf: 1 }];\n for (let depth = 1; depth <= maxDepth; depth++) {\n const nextFrontier: { id: string; conf: number }[] = [];\n for (const { id, conf } of frontier) {\n for (const e of index.in(id)) {\n if (!DEPEND_EDGES.has(e.kind)) continue;\n minEdgeConfidence = Math.min(minEdgeConfidence, e.confidence);\n const dependentId = e.src;\n if (dependentId === rootId || affected.has(dependentId)) continue;\n const node = index.node(dependentId);\n if (!node) continue;\n const conf2 = round(conf * e.confidence * 0.9); // decay with distance\n affected.set(dependentId, {\n id: node.id,\n name: node.qualifiedName,\n kind: node.kind,\n file: node.file,\n line: node.span.start,\n depth,\n confidence: conf2,\n });\n nextFrontier.push({ id: dependentId, conf: conf2 });\n }\n }\n frontier = nextFrontier;\n if (frontier.length === 0) break;\n }\n\n const items = [...affected.values()].sort(\n (a, b) => a.depth - b.depth || b.confidence - a.confidence || a.name.localeCompare(b.name),\n );\n\n return {\n root: { id: rootId, name: root?.qualifiedName ?? rootId },\n depth: maxDepth,\n affected: items,\n direct: items.filter((i) => i.depth === 1).length,\n transitive: items.filter((i) => i.depth > 1).length,\n minEdgeConfidence: round(minEdgeConfidence),\n };\n}\n\nfunction round(x: number): number {\n return Math.round(x * 1e6) / 1e6;\n}\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { readGlobal, applyGlobalOptions } from './chunk-YENM3HT7.js';
|
|
2
2
|
import { json, info, c } from './chunk-CT5BS56U.js';
|
|
3
|
-
import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-
|
|
3
|
+
import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-RAEHWCN6.js';
|
|
4
4
|
import { CliError, ExitCode } from './chunk-MS6V5XKB.js';
|
|
5
5
|
import { init_cli_invocation, reinvokeCli } from './chunk-EZ7UC5Y5.js';
|
|
6
|
-
import { loadGraph } from './chunk-
|
|
6
|
+
import { loadGraph } from './chunk-SGIFJIII.js';
|
|
7
7
|
import { vgdIsRunning, vgdRequest } from './chunk-VHRSG6CF.js';
|
|
8
8
|
import { vgdSocketPath, vgdPidPath } from './chunk-6H2QV5DR.js';
|
|
9
|
-
import { VERSION } from './chunk-
|
|
9
|
+
import { VERSION } from './chunk-AGOKTI77.js';
|
|
10
10
|
import * as fs from 'fs';
|
|
11
|
+
import * as net from 'net';
|
|
11
12
|
import * as path2 from 'path';
|
|
12
13
|
import { spawn } from 'child_process';
|
|
13
14
|
import * as semver from 'semver';
|
|
@@ -105,13 +106,33 @@ function registerDaemon(program) {
|
|
|
105
106
|
}
|
|
106
107
|
let requestShutdown = () => {
|
|
107
108
|
};
|
|
108
|
-
const
|
|
109
|
+
const serverOptions = {
|
|
109
110
|
socketPath,
|
|
110
111
|
onShutdownRequest: () => requestShutdown(),
|
|
111
112
|
// Show the daemon working: graph publishes, branch switches, new repos,
|
|
112
113
|
// and every semantic index build. Silent under --quiet/--json.
|
|
113
114
|
log: global.quiet || global.json ? void 0 : (message) => info(c.dim(`vgd \xB7 ${message}`))
|
|
114
|
-
}
|
|
115
|
+
};
|
|
116
|
+
let server;
|
|
117
|
+
try {
|
|
118
|
+
server = await startVgdServer(serverOptions);
|
|
119
|
+
} catch (e) {
|
|
120
|
+
if (e?.code !== "EADDRINUSE") throw e;
|
|
121
|
+
const takeover = await retireWedgedVgd(socketPath);
|
|
122
|
+
if (!takeover.ok) {
|
|
123
|
+
if (takeover.live) {
|
|
124
|
+
throw new CliError(`vgd is already running at ${socketPath}`, ExitCode.ERROR);
|
|
125
|
+
}
|
|
126
|
+
throw new CliError(
|
|
127
|
+
`${socketPath} is held by a process that does not answer vgd requests (${takeover.reason}). End the stale daemon (a node/vg process running "daemon start"), then re-run \`vg daemon start\`.`,
|
|
128
|
+
ExitCode.ERROR
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
if (!global.quiet && !global.json) {
|
|
132
|
+
info(c.dim(`vgd \xB7 retired a stale daemon (pid ${takeover.pid}) that was holding ${socketPath}`));
|
|
133
|
+
}
|
|
134
|
+
server = await startVgdServer(serverOptions);
|
|
135
|
+
}
|
|
115
136
|
if (!global.quiet) {
|
|
116
137
|
info(`vgd \xB7 listening on ${c.dim(server.socketPath)} (${VGD_PROTOCOL_VERSION})`);
|
|
117
138
|
info(c.dim(" register a workspace: vg daemon register"));
|
|
@@ -290,7 +311,7 @@ function registerDaemon(program) {
|
|
|
290
311
|
throw new CliError(loaded.error, ExitCode.NOT_FOUND);
|
|
291
312
|
}
|
|
292
313
|
if (!loaded.ok) {
|
|
293
|
-
const { loadGraph: loadGraph2 } = await import('./load-
|
|
314
|
+
const { loadGraph: loadGraph2 } = await import('./load-LT6R73IZ.js');
|
|
294
315
|
const { detectGitRef } = await import('./git-ref-LMT3EXYY.js');
|
|
295
316
|
const { repositoryIdFromRoot } = await import('./paths-RVK6FKRN.js');
|
|
296
317
|
const graph = loadGraph2(root, global.graph);
|
|
@@ -509,6 +530,47 @@ async function ensureVgd(socketPath = vgdSocketPath(), opts = {}) {
|
|
|
509
530
|
await stopVgd(socketPath, { force: true });
|
|
510
531
|
return { started: true, pid: await startDetachedVgd(socketPath), replaced: { version: skew.version } };
|
|
511
532
|
}
|
|
533
|
+
async function retireWedgedVgd(socketPath, deps = {}) {
|
|
534
|
+
const isRunning = deps.isRunning ?? ((s) => vgdIsRunning({ socketPath: s }));
|
|
535
|
+
const readPid = deps.readPid ?? readVgdPid;
|
|
536
|
+
const signal = deps.signal ?? signalPid;
|
|
537
|
+
const held = deps.held ?? vgdSocketHeld;
|
|
538
|
+
const waitBudgetMs = deps.waitBudgetMs ?? 3e3;
|
|
539
|
+
const selfPid = deps.selfPid ?? process.pid;
|
|
540
|
+
if (await isRunning(socketPath)) return { ok: false, live: true };
|
|
541
|
+
const pid = readPid();
|
|
542
|
+
if (pid == null) return { ok: false, reason: "no pid file identifies the holder" };
|
|
543
|
+
if (pid === selfPid) return { ok: false, reason: "the pid file points at this process" };
|
|
544
|
+
if (!signal(pid, "SIGTERM")) return { ok: false, reason: `pid ${pid} from the pid file is not signalable` };
|
|
545
|
+
if (await waitForSocketFree(socketPath, waitBudgetMs, held)) return { ok: true, pid };
|
|
546
|
+
signal(pid, "SIGKILL");
|
|
547
|
+
if (await waitForSocketFree(socketPath, waitBudgetMs, held)) return { ok: true, pid };
|
|
548
|
+
return { ok: false, reason: `pid ${pid} was signalled but ${socketPath} is still held` };
|
|
549
|
+
}
|
|
550
|
+
async function waitForSocketFree(socketPath, budgetMs, held) {
|
|
551
|
+
const deadline = Date.now() + budgetMs;
|
|
552
|
+
for (; ; ) {
|
|
553
|
+
if (!await held(socketPath)) return true;
|
|
554
|
+
if (Date.now() >= deadline) return false;
|
|
555
|
+
await sleep(100);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
function vgdSocketHeld(socketPath, timeoutMs = 1e3) {
|
|
559
|
+
return new Promise((resolve3) => {
|
|
560
|
+
const socket = net.createConnection(socketPath);
|
|
561
|
+
let settled = false;
|
|
562
|
+
const done = (heldNow) => {
|
|
563
|
+
if (settled) return;
|
|
564
|
+
settled = true;
|
|
565
|
+
clearTimeout(timer);
|
|
566
|
+
socket.destroy();
|
|
567
|
+
resolve3(heldNow);
|
|
568
|
+
};
|
|
569
|
+
const timer = setTimeout(() => done(true), timeoutMs);
|
|
570
|
+
socket.once("connect", () => done(true));
|
|
571
|
+
socket.once("error", () => done(false));
|
|
572
|
+
});
|
|
573
|
+
}
|
|
512
574
|
async function stopVgd(socketPath, opts = {}) {
|
|
513
575
|
if (!await vgdIsRunning({ socketPath })) return "not-running";
|
|
514
576
|
const livePid = opts.force ? await vgdReportedPid(socketPath) : null;
|
|
@@ -589,6 +651,6 @@ async function repositoryIdForCwd(socketPath, root) {
|
|
|
589
651
|
return repositoryIdFromRoot(root);
|
|
590
652
|
}
|
|
591
653
|
|
|
592
|
-
export { compareDaemonVersion, ensureVgd, ensureVgdSoft, registerDaemon, requireGraph, restartVgdIfRunning, rootOf, startDetachedVgd, stopVgd, vgdCliVersion, vgdVersionSkew };
|
|
593
|
-
//# sourceMappingURL=chunk-
|
|
594
|
-
//# sourceMappingURL=chunk-
|
|
654
|
+
export { compareDaemonVersion, ensureVgd, ensureVgdSoft, registerDaemon, requireGraph, restartVgdIfRunning, retireWedgedVgd, rootOf, startDetachedVgd, stopVgd, vgdCliVersion, vgdVersionSkew };
|
|
655
|
+
//# sourceMappingURL=chunk-UUNEUEPQ.js.map
|
|
656
|
+
//# sourceMappingURL=chunk-UUNEUEPQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/util.ts","../src/commands/daemon.ts"],"names":["path","loadGraph","c","resolve","pid"],"mappings":"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","file":"chunk-UUNEUEPQ.js","sourcesContent":["import * as path from 'node:path';\nimport { loadGraph } from '../engine/load.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport type { GlobalOpts } from '../cli-options.js';\nimport type { VgGraph } from '../schema.js';\n\nexport function rootOf(global: GlobalOpts): string {\n return path.resolve(global.cwd ?? '.');\n}\n\n/** Load the committed graph, or fail with an actionable NOT_FOUND error. */\nexport function requireGraph(global: GlobalOpts): { root: string; graph: VgGraph } {\n const root = rootOf(global);\n const graph = loadGraph(root, global.graph);\n if (!graph) {\n throw new CliError(\n `no map found — run \\`vg\\` to build one first` +\n (global.graph ? ` (looked at ${global.graph})` : ''),\n ExitCode.NOT_FOUND,\n );\n }\n return { root, graph };\n}\n","import * as fs from 'node:fs';\nimport * as net from 'node:net';\nimport * as path from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { Command } from 'commander';\nimport * as semver from 'semver';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { VERSION } from '../version.js';\nimport { startVgdServer, vgdIsRunning, vgdPidPath, vgdRequest, vgdSocketPath, VGD_PROTOCOL_VERSION } from '../runtime/vgd/index.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { reinvokeCli } from '../util/cli-invocation.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg daemon` — lightweight local Fusion Runtime daemon (`vgd`) prototype.\n *\n * Phase 2 slice: local socket + workspace registry. Interactive `vg code`\n * attaches via `startCodeRuntimeSession` (ensures this standalone daemon).\n * No overlays yet. Safe to start/stop; does not mutate repos.\n */\nexport function registerDaemon(program: Command): void {\n const cmd = program\n .command('daemon')\n .description('local Fusion Runtime daemon (vgd) — workspace registry prototype')\n .option('--socket <path>', 'override the daemon socket path');\n\n const status = cmd\n .command('status')\n .description('show whether vgd is running and how many workspaces it tracks')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const running = await vgdIsRunning({ socketPath });\n if (!running) {\n if (global.json) {\n json({ running: false, socketPath, version: VGD_PROTOCOL_VERSION });\n } else {\n info(c.dim(`vgd · not running (${socketPath})`));\n }\n process.exitCode = ExitCode.NOT_FOUND;\n return;\n }\n const res = await vgdRequest({ op: 'status' }, { socketPath });\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n // \"Warm\" used to mean the code map only, while every client still loaded\n // its own embedder — so the semantic state is reported next to the graph\n // slots rather than left to be inferred.\n const semantic = await vgdRequest({ op: 'embed-status' }, { socketPath }).catch(() => null);\n const semanticPayload = semantic && semantic.ok && 'semantic' in semantic ? semantic.semantic : undefined;\n const skew = await vgdVersionSkew(socketPath);\n if (global.json) json({ running: true, ...res, semantic: semanticPayload, skew });\n else if ('pid' in res) {\n const slots = typeof res.graphSlots === 'number' ? ` · ${res.graphSlots} graph slot(s)` : '';\n // Always print the build, even when the daemon is too old to report one\n // — a blank where the version should be is what made this skew\n // invisible in the first place.\n const cli = ` · cli ${describeVersion(res.cliVersion ?? null)}`;\n info(\n `vgd · running pid ${res.pid}${cli} · ${res.workspaces} workspace(s)${slots} · ${res.uptimeMs}ms up · ${c.dim(res.socketPath)}`,\n );\n if (skew.running && skew.state !== 'match') {\n const verb = skew.state === 'older' ? 'older than' : 'newer than';\n info(\n c.dim(\n ` ⚠ this daemon is ${verb} the CLI you just ran (${VERSION})` +\n (skew.state === 'older' ? ' — run \"vg daemon restart --force\" to bring it up to date' : ''),\n ),\n );\n }\n const fresh = 'freshness' in res && Array.isArray(res.freshness) ? res.freshness : [];\n if (fresh.length) {\n const watching = fresh.filter((f) => f.watching).length;\n const building = fresh.filter((f) => f.building);\n const pending = fresh.reduce((n, f) => n + f.pending, 0);\n const detail = [\n `${watching}/${fresh.length} watched`,\n building.length ? `${building.length} rebuilding` : '',\n pending ? `${pending} change(s) pending` : '',\n ]\n .filter(Boolean)\n .join(' · ');\n info(` freshness · ${detail}`);\n for (const f of fresh) {\n if (f.watching && !f.building && !f.pending) continue;\n const state = f.building ? 'rebuilding' : f.watching ? `${f.pending} pending` : 'not watched (no recursive fs.watch here)';\n info(c.dim(` ${f.repositoryId}@${f.gitRef} · ${state}`));\n }\n }\n if (semanticPayload) {\n const ready = semanticPayload.slots.filter((sl) => sl.state === 'ready');\n const vectors = ready.reduce((n, sl) => n + sl.vectors, 0);\n // \"worker stopped · 0/0 index(es)\" reads like a broken daemon when\n // it usually means nobody has published a map yet — the index is\n // slot-scoped, so no graph slot means there is nothing to index.\n const detail =\n semanticPayload.worker === 'unavailable'\n ? c.dim(semanticPayload.reason ?? 'semantic off — lexical only')\n : semanticPayload.slots.length === 0\n ? c.dim('no map published yet — run `vg build` in a repo (the index follows the graph slot)')\n : `${ready.length}/${semanticPayload.slots.length} index(es) ready · ${vectors} vector(s)` +\n (semanticPayload.model ? ` · ${semanticPayload.model}` : '');\n info(` semantic · worker ${semanticPayload.worker} · ${detail}`);\n for (const sl of semanticPayload.slots) {\n if (sl.state === 'ready') continue;\n const pending = typeof sl.pending === 'number' && sl.pending > 0 ? ` · ${sl.pending} pending` : '';\n info(\n c.dim(` ${sl.repositoryId}@${sl.gitRef} · ${sl.state}${pending}${sl.error ? ` — ${sl.error}` : ''}`),\n );\n }\n }\n }\n });\n applyGlobalOptions(status);\n\n const start = cmd\n .command('start')\n .description('run vgd in the foreground (Ctrl-C to stop)')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n if (await vgdIsRunning({ socketPath })) {\n throw new CliError(`vgd is already running at ${socketPath}`, ExitCode.ERROR);\n }\n // The shutdown closure needs the server; the server needs the hook.\n // Bridge with a mutable ref so `vg daemon stop` can reach us.\n let requestShutdown: () => void = () => {};\n const serverOptions = {\n socketPath,\n onShutdownRequest: () => requestShutdown(),\n // Show the daemon working: graph publishes, branch switches, new repos,\n // and every semantic index build. Silent under --quiet/--json.\n log: global.quiet || global.json ? undefined : (message: string) => info(c.dim(`vgd · ${message}`)),\n };\n let server;\n try {\n server = await startVgdServer(serverOptions);\n } catch (e) {\n if ((e as NodeJS.ErrnoException)?.code !== 'EADDRINUSE') throw e;\n // The address is held, yet nothing answered the liveness check above:\n // a wedged or stale daemon (typically one left behind by an editor\n // extension update) is squatting on the socket. Every `stopVgd` and\n // `ensureVgd` sees \"not running\" for such a holder, so without a\n // takeover here each `daemon ensure` becomes an infinite\n // start → EADDRINUSE → exit-1 loop. Retire the holder via its pid\n // file and bind again rather than surfacing the raw bind error.\n const takeover = await retireWedgedVgd(socketPath);\n if (!takeover.ok) {\n if (takeover.live) {\n // Lost a start race to a healthy daemon — that is the ordinary\n // already-running case, not a wedge.\n throw new CliError(`vgd is already running at ${socketPath}`, ExitCode.ERROR);\n }\n throw new CliError(\n `${socketPath} is held by a process that does not answer vgd requests (${takeover.reason}). ` +\n 'End the stale daemon (a node/vg process running \"daemon start\"), then re-run `vg daemon start`.',\n ExitCode.ERROR,\n );\n }\n if (!global.quiet && !global.json) {\n info(c.dim(`vgd · retired a stale daemon (pid ${takeover.pid}) that was holding ${socketPath}`));\n }\n server = await startVgdServer(serverOptions);\n }\n if (!global.quiet) {\n info(`vgd · listening on ${c.dim(server.socketPath)} (${VGD_PROTOCOL_VERSION})`);\n info(c.dim(' register a workspace: vg daemon register'));\n info(c.dim(' status: vg daemon status'));\n }\n\n const shutdown = async (): Promise<void> => {\n await server.close();\n if (!global.quiet) info(c.dim('vgd · stopped'));\n process.exit(0);\n };\n requestShutdown = () => void shutdown();\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n // Keep the event loop alive until signal.\n await new Promise(() => {});\n });\n applyGlobalOptions(start);\n\n /**\n * Idempotent start for host UIs (VS Code) and agents: if vgd is already\n * listening, exit 0; otherwise spawn a detached background `daemon start`.\n */\n const ensure = cmd\n .command('ensure')\n .description('ensure vgd is running on this build (start or replace in background if needed)')\n .option('--allow-version-mismatch', 'attach to an older running vgd instead of replacing it')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const opts = this.opts() as { allowVersionMismatch?: boolean };\n const ensured = await ensureVgd(socketPath, { allowVersionMismatch: opts.allowVersionMismatch });\n const res = await vgdRequest({ op: 'status' }, { socketPath });\n if (!res.ok) {\n throw new CliError(\n ensured.started\n ? `vgd started (pid ${ensured.pid ?? '?'}) but status failed: ${res.error} (${socketPath})`\n : `vgd is running but status failed: ${res.error} (${socketPath})`,\n ExitCode.ERROR,\n );\n }\n if (global.json) {\n json({ running: true, ensured: ensured.started, replaced: ensured.replaced ?? null, ...res });\n } else if (!global.quiet) {\n const pid = 'pid' in res ? res.pid : ensured.pid;\n if (ensured.replaced) {\n info(\n `vgd · replaced ${describeVersion(ensured.replaced.version)} daemon with ${VERSION} · pid ${pid} · ${c.dim(socketPath)}`,\n );\n } else {\n info(\n ensured.started\n ? `vgd · started in background pid ${pid} · ${c.dim(socketPath)}`\n : `vgd · already running pid ${pid} · ${c.dim(socketPath)}`,\n );\n }\n }\n });\n applyGlobalOptions(ensure);\n\n const stop = cmd\n .command('stop')\n .description('stop the running vgd (idempotent — succeeds if none is running)')\n .option('--force', 'escalate to SIGTERM/SIGKILL if it will not stop politely')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const force = Boolean((this.opts() as { force?: boolean }).force);\n const result = await stopVgd(socketPath, { force });\n if (global.json) {\n json({ stopped: result === 'stopped', result, socketPath });\n } else if (!global.quiet) {\n if (result === 'stopped') info(`vgd · stopped ${c.dim(socketPath)}`);\n else if (result === 'not-running') info(c.dim(`vgd · not running (${socketPath})`));\n }\n if (result === 'refused') {\n throw new CliError(\n 'this vgd cannot be stopped remotely — it is running inside another process; stop that process instead',\n ExitCode.ERROR,\n );\n }\n if (result === 'failed') {\n throw new CliError(\n `vgd did not stop within 5s (${socketPath}) — retry with \\`vg daemon stop --force\\` to escalate to a signal`,\n ExitCode.ERROR,\n );\n }\n });\n applyGlobalOptions(stop);\n\n const restart = cmd\n .command('restart')\n .description('restart vgd (stop if running, then start in the background)')\n .option('--force', 'escalate to SIGTERM/SIGKILL if it will not stop politely')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const force = Boolean((this.opts() as { force?: boolean }).force);\n const stopResult = await stopVgd(socketPath, { force });\n if (stopResult === 'refused') {\n throw new CliError(\n 'this vgd cannot be stopped remotely — it is running inside another process; stop that process instead',\n ExitCode.ERROR,\n );\n }\n if (stopResult === 'failed') {\n throw new CliError(\n `vgd did not stop within 5s (${socketPath}) — retry with \\`vg daemon restart --force\\` to escalate to a signal`,\n ExitCode.ERROR,\n );\n }\n await startDetachedVgd(socketPath);\n const res = await vgdRequest({ op: 'status' }, { socketPath });\n if (global.json) {\n json({ running: true, restarted: true, ...(res.ok ? res : { socketPath }) });\n } else if (!global.quiet) {\n const pid = res.ok && 'pid' in res ? res.pid : '?';\n info(`vgd · restarted pid ${pid} · ${c.dim(socketPath)}`);\n }\n });\n applyGlobalOptions(restart);\n\n const register = cmd\n .command('register')\n .description('register the current repository with a running vgd')\n .argument('[root]', 'repository root (default: cwd)')\n .action(async function (this: Command, rootArg?: string) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const root = path.resolve(rootArg ?? rootOf(global));\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running — start it with \\`vg daemon start\\` (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const res = await vgdRequest({ op: 'register', root }, { socketPath });\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('workspace' in res) {\n info(`vgd · registered ${res.workspace.root}`);\n info(c.dim(` id ${res.workspace.id}`));\n info(c.dim(` graph ${res.workspace.graphPath}`));\n }\n });\n applyGlobalOptions(register);\n\n const list = cmd\n .command('list')\n .description('list workspaces registered with the running vgd')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const res = await vgdRequest({ op: 'list' }, { socketPath });\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('workspaces' in res && Array.isArray(res.workspaces)) {\n if (res.workspaces.length === 0) info(c.dim('vgd · no workspaces registered'));\n for (const w of res.workspaces) {\n const tag = w.label ? ` (${w.label}${w.role ? `/${w.role}` : ''})` : '';\n info(`${w.root}${tag}`);\n info(c.dim(` id ${w.id} · graph ${w.graphPath}`));\n }\n }\n });\n applyGlobalOptions(list);\n\n const federation = cmd\n .command('federation')\n .description('register a multi-root federation from .vibgrate/federation.json (or primary cwd)')\n .argument('[root]', 'primary repository root (default: cwd)')\n .action(async function (this: Command, rootArg?: string) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const primary = path.resolve(rootArg ?? rootOf(global));\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running — start it with \\`vg daemon start\\` (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const { loadFederation } = await import('../runtime/federation.js');\n const fed = loadFederation(primary);\n if (!fed) throw new CliError(`could not load federation for ${primary}`, ExitCode.ERROR);\n const res = await vgdRequest(\n {\n op: 'register-federation',\n primaryRoot: fed.primaryRoot,\n members: fed.members.map((m) => ({ root: m.root, label: m.label, role: m.role })),\n },\n { socketPath },\n );\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('workspaces' in res && Array.isArray(res.workspaces)) {\n info(`vgd · federation registered (${res.workspaces.length} workspace(s))`);\n for (const w of res.workspaces) {\n info(c.dim(` ${w.label ?? w.root}${w.role ? ` [${w.role}]` : ''}`));\n }\n }\n });\n applyGlobalOptions(federation);\n\n /**\n * Load the on-disk code map for a workspace into vgd's ActiveGraph cache so\n * query/impact work without an agent put-graph first (VS Code / IDE path).\n */\n const publish = cmd\n .command('publish')\n .description('load the workspace code map into vgd ActiveGraph (from global/legacy store)')\n .argument('[root]', 'repository root (default: cwd)')\n .option('--git-ref <ref>', 'branch or SHA (default: detect HEAD)')\n .action(async function (this: Command, rootArg?: string) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const root = path.resolve(rootArg ?? rootOf(global));\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running — start it with \\`vg daemon ensure\\` (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const opts = this.opts() as { gitRef?: string };\n // Fast path: the daemon loads the map from disk itself (binary snapshot\n // first) — nothing heavy crosses the socket.\n const loaded = await vgdRequest(\n { op: 'load-graph', root, gitRef: opts.gitRef?.trim() || undefined, graphPath: global.graph },\n { socketPath },\n );\n let put = loaded;\n if (!loaded.ok && loaded.code === 'no_map') {\n throw new CliError(loaded.error, ExitCode.NOT_FOUND);\n }\n if (!loaded.ok) {\n // Older daemon without load-graph — legacy path: load locally and ship\n // the graph over the socket with put-graph.\n const { loadGraph } = await import('../engine/load.js');\n const { detectGitRef } = await import('../runtime/git-ref.js');\n const { repositoryIdFromRoot } = await import('../runtime/paths.js');\n const graph = loadGraph(root, global.graph);\n if (!graph) {\n throw new CliError(\n `no code map found for ${root} — run \\`vg build\\` (or bare \\`vg\\`) first`,\n ExitCode.NOT_FOUND,\n );\n }\n // Ensure workspace is registered so list shows the root.\n const reg = await vgdRequest({ op: 'register', root }, { socketPath });\n if (!reg.ok) throw new CliError(reg.error, ExitCode.ERROR);\n const git = opts.gitRef?.trim() || detectGitRef(root).ref || 'HEAD';\n const repositoryId =\n reg.ok && 'workspace' in reg ? reg.workspace.id : repositoryIdFromRoot(root);\n put = await vgdRequest(\n { op: 'put-graph', repositoryId, gitRef: git, graph },\n { socketPath },\n );\n if (!put.ok) throw new CliError(put.error, ExitCode.ERROR);\n }\n if (global.json) json(put);\n else if (put.ok && 'stored' in put) {\n info(`vgd · published graph · ${put.nodeCount} node(s) · ref ${put.gitRef}`);\n info(c.dim(` repositoryId ${put.repositoryId}`));\n }\n });\n applyGlobalOptions(publish);\n\n const query = cmd\n .command('query')\n .description('query the ActiveGraph held by vgd (lexical/structural)')\n .option('--repository-id <id>', 'repository id from `vg daemon list` (default: cwd workspace)')\n .argument('<query...>', 'what to find')\n .option('--limit <n>', 'max matches', '12')\n .option('--git-ref <ref>', 'branch or SHA (default: current slot)')\n .action(async function (this: Command, queryParts: string[]) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const opts = this.opts() as { repositoryId?: string; limit?: string; gitRef?: string };\n const q = (queryParts ?? []).join(' ').trim();\n if (!q) throw new CliError('say what to find', ExitCode.USAGE_ERROR);\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const repositoryId = opts.repositoryId?.trim() || (await repositoryIdForCwd(socketPath, rootOf(global)));\n const res = await vgdRequest(\n {\n op: 'query-graph',\n repositoryId,\n query: q,\n limit: opts.limit ? Number(opts.limit) : 12,\n gitRef: opts.gitRef,\n },\n { socketPath },\n );\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('matches' in res) {\n info(`vgd query · ${res.matches.length} match(es) · ref ${res.gitRef}`);\n for (const m of res.matches) {\n info(`${m.qualifiedName} (${m.kind}) ${m.file}:${m.line}`);\n info(c.dim(` score ${m.score} · ${m.why}`));\n }\n }\n });\n applyGlobalOptions(query);\n\n const impact = cmd\n .command('impact')\n .description('blast radius for a symbol in the vgd ActiveGraph')\n .option('--repository-id <id>', 'repository id (default: cwd workspace)')\n .argument('<symbol>', 'symbol id or qualified name')\n .option('--depth <n>', 'max dependency depth', '4')\n .option('--git-ref <ref>', 'branch or SHA')\n .action(async function (this: Command, symbol: string) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const opts = this.opts() as { repositoryId?: string; depth?: string; gitRef?: string };\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const repositoryId = opts.repositoryId?.trim() || (await repositoryIdForCwd(socketPath, rootOf(global)));\n const res = await vgdRequest(\n {\n op: 'impact-of',\n repositoryId,\n symbol: symbol.trim(),\n depth: opts.depth ? Number(opts.depth) : 4,\n gitRef: opts.gitRef,\n },\n { socketPath },\n );\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('affected' in res) {\n info(`vgd impact · ${res.root.name} · depth ${res.depth} · ${res.affected.length} affected`);\n for (const a of res.affected.slice(0, 30)) {\n info(`- ${a.name} (${a.file}:${a.line}) d=${a.depth}`);\n }\n }\n });\n applyGlobalOptions(impact);\n\n const graphs = cmd\n .command('graphs')\n .description('list multi-branch ActiveGraph slots resident in the running vgd (Fusion §4.1.1)')\n .option('--repository-id <id>', 'filter slots to one repository id')\n .action(async function (this: Command) {\n const global = readGlobal(this);\n const socketPath = socketOf(this);\n const opts = this.opts() as { repositoryId?: string };\n if (!(await vgdIsRunning({ socketPath }))) {\n throw new CliError(`vgd is not running (${socketPath})`, ExitCode.NOT_FOUND);\n }\n const res = await vgdRequest(\n { op: 'list-graph-slots', repositoryId: opts.repositoryId },\n { socketPath },\n );\n if (!res.ok) throw new CliError(res.error, ExitCode.ERROR);\n if (global.json) json(res);\n else if ('slots' in res) {\n if (!res.slots.length) info(c.dim('vgd · no graph slots resident'));\n for (const s of res.slots) {\n const cur = s.current ? c.green(' current') : '';\n const idle = s.evictable ? c.yellow(' idle') : '';\n info(`${s.repositoryId.slice(0, 8)}… ${s.gitRef}${cur}${idle}`);\n info(c.dim(` nodes ${s.nodeCount} · idle ${Math.round(s.idleMs / 1000)}s · loaded ${new Date(s.loadedAt).toISOString()}`));\n }\n }\n });\n applyGlobalOptions(graphs);\n\n applyGlobalOptions(cmd);\n}\n\nfunction socketOf(cmd: Command): string {\n // Walk parents for --socket on the daemon parent or the leaf.\n let c: Command | null = cmd;\n while (c) {\n const opts = c.opts() as { socket?: string };\n if (opts.socket) return path.resolve(opts.socket);\n c = c.parent;\n }\n return vgdSocketPath();\n}\n\n/**\n * Re-invoke this CLI as a detached background `daemon start`.\n * Handles `node dist/cli.js …`, a global `vg` symlink (npm bin), and a\n * packaged `vg` binary. The symlink case must realpath to cli.js — see\n * {@link reinvokeCli}.\n */\nfunction spawnDetachedDaemonStart(socketPath: string): ReturnType<typeof spawn> {\n // On Windows, `detached` (DETACHED_PROCESS) is the wrong tool for a daemon\n // with descendants: it leaves the process with NO console, so every\n // console-subsystem child it later spawns (embed worker, rebuild `vg build`,\n // git) allocates a brand-new VISIBLE console window on the desktop — and a\n // user closing that stray window kills the child with STATUS_CONTROL_C_EXIT.\n // windowsHide (CREATE_NO_WINDOW, ignored when combined with detached) gives\n // the daemon a windowless console its whole subtree inherits instead.\n // Lifetime is unaffected: Windows never kills children on parent exit, and\n // the separate console keeps the terminal's Ctrl-C/close away from it. On\n // POSIX, detached (its own process group) is still what lets the daemon\n // outlive the terminal.\n const opts = {\n detached: process.platform !== 'win32',\n stdio: 'ignore' as const,\n env: process.env,\n windowsHide: true,\n };\n const { command, argv } = reinvokeCli(['daemon', 'start', '--socket', socketPath]);\n return spawn(command, argv, opts);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\n/**\n * Start vgd in the background without making the caller wait for it.\n *\n * `ensureVgd` waits up to 30s and throws — right for `vg daemon ensure` and for\n * `vg code`, which cannot proceed without a runtime, and wrong for every\n * ordinary command. An auto-start must never put a cold-start on the front of\n * `vg ask`: we spawn, give the socket a short window in case it binds quickly,\n * and otherwise leave the child coming up on its own. The command runs its\n * in-process path this time and finds a warm daemon the next.\n *\n * Never throws — the caller has a working fallback by construction.\n */\nexport async function ensureVgdSoft(\n socketPath: string = vgdSocketPath(),\n readyBudgetMs = 1500,\n): Promise<{ running: boolean; started: boolean }> {\n try {\n if (await vgdIsRunning({ socketPath })) return { running: true, started: false };\n const child = spawnDetachedDaemonStart(socketPath);\n child.unref();\n const deadline = Date.now() + Math.max(0, readyBudgetMs);\n while (Date.now() < deadline) {\n await sleep(100);\n if (await vgdIsRunning({ socketPath })) return { running: true, started: true };\n if (child.exitCode != null && child.exitCode !== 0) break;\n }\n return { running: false, started: true };\n } catch {\n return { running: false, started: false };\n }\n}\n\n/** Injectable internals of {@link startDetachedVgd} (tests). */\nexport interface StartVgdDeps {\n startOnce: (socketPath: string) => Promise<number | undefined>;\n skew: (socketPath: string) => Promise<VgdSkew>;\n stop: (socketPath: string, opts?: StopVgdOptions) => ReturnType<typeof stopVgd>;\n}\n\n/**\n * How many times a start will retire an older daemon that re-binds the socket\n * before conceding. Each round both stops the interloper and gives our own\n * child another chance to win the bind; a client that keeps spawning an old\n * build faster than we can retire it is a fight to report, not to keep having.\n */\nconst START_BIND_ATTEMPTS = 3;\n\n/**\n * Start vgd in the background and hand back a daemon that is genuinely on this\n * build (or newer). Throws when it cannot.\n *\n * A socket that answers ping is NOT proof the start worked: while the socket\n * is free (mid-update, mid-restart) any other client's `daemon ensure` — a VS\n * Code extension bundling an older engine, a long-lived `vg serve` on an old\n * build — can bind ITS daemon first, and our child then exits \"already\n * running\". Reporting success against that daemon is exactly the \"updated,\n * but the daemon is still stale\" state `vg update` exists to end, so after\n * every ready signal the build on the socket is verified and an older\n * squatter is force-stopped and replaced, a bounded number of times. A newer\n * daemon is left alone (newest wins — see {@link compareDaemonVersion}).\n */\nexport async function startDetachedVgd(\n socketPath: string,\n deps: Partial<StartVgdDeps> = {},\n): Promise<number | undefined> {\n const startOnce = deps.startOnce ?? startDetachedVgdOnce;\n const skewOf = deps.skew ?? vgdVersionSkew;\n const stop = deps.stop ?? stopVgd;\n let pid: number | undefined;\n for (let attempt = 1; attempt <= START_BIND_ATTEMPTS; attempt++) {\n pid = await startOnce(socketPath);\n const skew = await skewOf(socketPath);\n if (skew.running && skew.state !== 'older') return pid;\n if (!skew.running) continue; // gone between ready and the check — spawn again\n await stop(socketPath, { force: true });\n }\n throw new CliError(\n `an older vgd keeps re-binding ${socketPath} — another running client is starting it ` +\n '(commonly a VS Code extension bundling an older engine, or a long-lived `vg serve`). ' +\n 'Update or restart that client, then run \"vg daemon restart --force\".',\n ExitCode.ERROR,\n );\n}\n\n/**\n * Spawn a detached background `daemon start` and wait for the socket to answer\n * ping. Returns the child pid; throws when the socket never becomes ready.\n * The listener is not necessarily our child — {@link startDetachedVgd} owns\n * that verification.\n *\n * Ready budget is long because the detached child pays a full Node + CLI cold\n * start of its own (often >8s under Windows AV). The previous 8s window made\n * `vg daemon ensure` report success only when ping raced ahead of the child\n * exiting, or fail right as the child was about to listen.\n */\nasync function startDetachedVgdOnce(socketPath: string): Promise<number | undefined> {\n const child = spawnDetachedDaemonStart(socketPath);\n child.unref();\n const readyMs = 30_000;\n const deadline = Date.now() + readyMs;\n while (Date.now() < deadline) {\n await sleep(150);\n if (await vgdIsRunning({ socketPath })) return child.pid;\n // If the child already exited without ever answering, fail fast rather\n // than waiting out the full budget for a dead process. Another client\n // (the VS Code extension's `daemon ensure`) may have bound in this\n // tick — treat that as ready rather than reporting a false failure.\n if (child.exitCode != null && child.exitCode !== 0) {\n if (await vgdIsRunning({ socketPath })) return child.pid;\n throw new CliError(\n `vgd child exited ${child.exitCode} before becoming ready at ${socketPath} — run \"vg daemon start\" in the foreground to see the error`,\n ExitCode.ERROR,\n );\n }\n }\n throw new CliError(\n `vgd failed to become ready within ${Math.round(readyMs / 1000)}s at ${socketPath}`,\n ExitCode.ERROR,\n );\n}\n\n/**\n * The build version of the daemon currently on the socket, or `null` when it\n * does not report one.\n *\n * `null` is not \"unknown, leave it alone\": `cliVersion` landed in the status\n * response in 2026.817.x, so its absence dates the process to a build older\n * than that just as surely as a version string would.\n */\nexport async function vgdCliVersion(socketPath: string = vgdSocketPath()): Promise<string | null> {\n try {\n const res = await vgdRequest({ op: 'status' }, { socketPath });\n if (!res.ok || !('cliVersion' in res)) return null;\n return typeof res.cliVersion === 'string' && res.cliVersion ? res.cliVersion : null;\n } catch {\n return null;\n }\n}\n\nexport type VgdSkew =\n | { running: false }\n | { running: true; version: string | null; state: 'match' | 'older' | 'newer' };\n\n/**\n * Compare the daemon holding the socket against this build.\n *\n * vgd owns one machine-wide socket, so whichever process binds it first serves\n * every client — the CLI, `vg serve`, and a VS Code extension running its own\n * bundled engine. Version skew is therefore the normal case, not an edge case,\n * and it is invisible: an old daemon answers every request happily, just with\n * old code.\n */\nexport async function vgdVersionSkew(socketPath: string = vgdSocketPath(), self: string = VERSION): Promise<VgdSkew> {\n if (!(await vgdIsRunning({ socketPath }))) return { running: false };\n const version = await vgdCliVersion(socketPath);\n return { running: true, version, state: compareDaemonVersion(version, self) };\n}\n\n/**\n * Resolution is deliberately monotonic — only a strictly newer daemon survives\n * a mismatch. Two clients on different builds both ensuring the socket would\n * otherwise restart each other forever; with \"newest wins\" they converge on the\n * highest version present and stay there.\n */\nexport function compareDaemonVersion(version: string | null, self: string): 'match' | 'older' | 'newer' {\n if (version === self) return 'match';\n // We cannot judge from an unparseable version of our own — never pick a fight\n // we have no way to win.\n if (!semver.valid(self)) return 'match';\n if (version === null || !semver.valid(version)) return 'older';\n return semver.gt(version, self) ? 'newer' : 'older';\n}\n\n/** Human label for a daemon build, including the pre-2026.817 \"no version\" case. */\nfunction describeVersion(version: string | null): string {\n return version ?? 'unknown (pre-2026.817)';\n}\n\nexport interface EnsureVgdResult {\n started: boolean;\n pid?: number;\n /** Set when an older daemon was retired to make room for this build. */\n replaced?: { version: string | null };\n}\n\nexport interface EnsureVgdOptions {\n /** Attach to whatever is on the socket, even on an older build. */\n allowVersionMismatch?: boolean;\n}\n\n/**\n * Idempotent start used by `vg daemon ensure` and `vg code`: if vgd is already\n * listening on this build, do nothing; otherwise spawn a detached standalone\n * `daemon start`.\n *\n * An older daemon is replaced rather than attached to. Attaching is the quiet\n * failure this exists to prevent: the client reports success, then serves stale\n * answers from a process nobody remembers starting.\n */\nexport async function ensureVgd(\n socketPath: string = vgdSocketPath(),\n opts: EnsureVgdOptions = {},\n): Promise<EnsureVgdResult> {\n const skew = await vgdVersionSkew(socketPath);\n if (!skew.running) return { started: true, pid: await startDetachedVgd(socketPath) };\n if (opts.allowVersionMismatch || skew.state !== 'older') return { started: false };\n await stopVgd(socketPath, { force: true });\n return { started: true, pid: await startDetachedVgd(socketPath), replaced: { version: skew.version } };\n}\n\n/** Injectable internals of {@link retireWedgedVgd} (tests). */\nexport interface RetireWedgedDeps {\n isRunning: (socketPath: string) => Promise<boolean>;\n readPid: () => number | null;\n signal: (pid: number, signal: NodeJS.Signals) => boolean;\n held: (socketPath: string) => Promise<boolean>;\n /** How long to wait for the address to free after each signal. */\n waitBudgetMs: number;\n selfPid: number;\n}\n\nexport type RetireWedgedResult =\n | { ok: true; pid: number }\n | { ok: false; live: true }\n | { ok: false; live?: false; reason: string };\n\n/**\n * Free a vgd socket held by a process that no longer answers vgd requests.\n *\n * The wedge this exists for: a daemon (often from an older extension install)\n * keeps the pipe/socket bound but its event loop is stuck, so `ping` times out\n * everywhere — `vg daemon status` says \"not running\", `stopVgd` returns\n * `not-running` without touching it, `ensureVgd` goes straight to a start that\n * dies on EADDRINUSE, and every client retries that forever. This retires the\n * holder identified by vgd's own pid file (only a successful `startVgdServer`\n * bind ever writes it, so it names the current holder), escalating SIGTERM →\n * SIGKILL, and confirms the address actually freed.\n *\n * Refuses to act when a live daemon answers ping (an ordinary lost start race,\n * not a wedge) or when the pid file is missing or points at this process.\n */\nexport async function retireWedgedVgd(\n socketPath: string,\n deps: Partial<RetireWedgedDeps> = {},\n): Promise<RetireWedgedResult> {\n const isRunning = deps.isRunning ?? ((s: string) => vgdIsRunning({ socketPath: s }));\n const readPid = deps.readPid ?? readVgdPid;\n const signal = deps.signal ?? signalPid;\n const held = deps.held ?? vgdSocketHeld;\n const waitBudgetMs = deps.waitBudgetMs ?? 3_000;\n const selfPid = deps.selfPid ?? process.pid;\n\n if (await isRunning(socketPath)) return { ok: false, live: true };\n const pid = readPid();\n if (pid == null) return { ok: false, reason: 'no pid file identifies the holder' };\n if (pid === selfPid) return { ok: false, reason: 'the pid file points at this process' };\n if (!signal(pid, 'SIGTERM')) return { ok: false, reason: `pid ${pid} from the pid file is not signalable` };\n if (await waitForSocketFree(socketPath, waitBudgetMs, held)) return { ok: true, pid };\n signal(pid, 'SIGKILL');\n if (await waitForSocketFree(socketPath, waitBudgetMs, held)) return { ok: true, pid };\n return { ok: false, reason: `pid ${pid} was signalled but ${socketPath} is still held` };\n}\n\nasync function waitForSocketFree(\n socketPath: string,\n budgetMs: number,\n held: (socketPath: string) => Promise<boolean>,\n): Promise<boolean> {\n const deadline = Date.now() + budgetMs;\n for (;;) {\n if (!(await held(socketPath))) return true;\n if (Date.now() >= deadline) return false;\n await sleep(100);\n }\n}\n\n/**\n * True when something still accepts connections on the address. Distinct from\n * {@link vgdIsRunning}: a wedged daemon accepts the connection but never\n * answers ping. A connect left hanging counts as held — limbo is never \"free\".\n */\nfunction vgdSocketHeld(socketPath: string, timeoutMs = 1_000): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = net.createConnection(socketPath);\n let settled = false;\n const done = (heldNow: boolean): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n socket.destroy();\n resolve(heldNow);\n };\n const timer = setTimeout(() => done(true), timeoutMs);\n socket.once('connect', () => done(true));\n socket.once('error', () => done(false));\n });\n}\n\nexport interface StopVgdOptions {\n /**\n * Escalate past a daemon that will not leave politely: SIGTERM, then SIGKILL.\n *\n * Used wherever a surviving daemon is worse than a killed one — `vg update`\n * above all, where every client on the socket would otherwise keep being\n * served by the build that was just replaced. Safe to escalate because\n * `daemon start` is the only thing that ever hosts a vgd listener, so the pid\n * belongs to a daemon process and not to somebody's editor.\n */\n force?: boolean;\n}\n\n/**\n * Stop a running vgd: polite `shutdown` op first, SIGTERM via the pid for\n * daemons that predate the op, then wait (≤5s) for the socket to go quiet.\n *\n * `refused` means the daemon declined remote shutdown (a listener started\n * without a shutdown hook). Without `force` that is where it ends — the pid\n * file belongs to the owning process and is not ours to kill.\n */\nexport async function stopVgd(\n socketPath: string,\n opts: StopVgdOptions = {},\n): Promise<'stopped' | 'not-running' | 'refused' | 'failed'> {\n if (!(await vgdIsRunning({ socketPath }))) return 'not-running';\n // Ask who is on the socket before shutting it down. The pid the daemon\n // reports is authoritative; the pid file can be left over from an earlier\n // process, and signalling that would kill a stranger.\n const livePid = opts.force ? await vgdReportedPid(socketPath) : null;\n let acknowledged = false;\n try {\n const res = await vgdRequest({ op: 'shutdown' }, { socketPath });\n if (res.ok) acknowledged = true;\n else if (res.code === 'shutdown_unsupported' && !opts.force) return 'refused';\n // Any other refusal (an older daemon answers `unknown op`) → pid fallback.\n } catch {\n /* connection dropped mid-shutdown or slow daemon — fall through to pid */\n }\n if (!acknowledged) {\n const pid = signalTarget(livePid);\n if (pid == null) return 'failed';\n if (!signalPid(pid, 'SIGTERM')) return 'failed';\n }\n if (await waitForVgdStop(socketPath, 5_000)) return 'stopped';\n if (!opts.force) return 'failed';\n\n // Wedged: it acknowledged, or took SIGTERM, and is still holding the socket.\n const pid = signalTarget(livePid);\n if (pid == null) return 'failed';\n if (!signalPid(pid, 'SIGKILL')) return 'failed';\n // A SIGKILLed daemon cannot unlink its own socket, but the next `daemon\n // start` clears a stale path before binding, so nothing is left to clean up.\n return (await waitForVgdStop(socketPath, 3_000)) ? 'stopped' : 'failed';\n}\n\n/**\n * The pid to signal, or null when there is nothing safe to signal.\n *\n * Never our own: a daemon hosted in *this* process (an in-process test server,\n * a future embedded listener) would otherwise be \"stopped\" by killing the\n * caller. Such a daemon has to be shut down through its own handle, so report\n * failure and let the caller say so.\n */\nfunction signalTarget(livePid: number | null): number | null {\n const pid = livePid ?? readVgdPid();\n if (pid == null || pid === process.pid) return null;\n return pid;\n}\n\nfunction signalPid(pid: number, signal: NodeJS.Signals): boolean {\n try {\n process.kill(pid, signal);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function waitForVgdStop(socketPath: string, budgetMs: number): Promise<boolean> {\n const deadline = Date.now() + budgetMs;\n while (Date.now() < deadline) {\n await sleep(100);\n if (!(await vgdIsRunning({ socketPath }))) return true;\n }\n return false;\n}\n\n/** The pid the live daemon reports for itself — trusted over the pid file. */\nasync function vgdReportedPid(socketPath: string): Promise<number | null> {\n try {\n const res = await vgdRequest({ op: 'status' }, { socketPath });\n if (!res.ok || !('pid' in res)) return null;\n return Number.isInteger(res.pid) && res.pid > 0 ? res.pid : null;\n } catch {\n return null;\n }\n}\n\nexport interface RestartVgdOptions extends StopVgdOptions {\n /**\n * Start a daemon even when none is running. `vg update` on Windows stops\n * vgd *before* the install so its files can be replaced; afterwards there is\n * nothing to \"re\"-start, but leaving the socket empty both makes the rewarm\n * a no-op and leaves a window for another client to bind an old build.\n */\n startIfNotRunning?: boolean;\n}\n\n/**\n * Restart the local vgd if one is running — used by `vg update` so a freshly\n * installed CLI does not keep serving from a daemon still running the old\n * build. `restarted`/`started` mean a daemon on this build (or newer) was\n * verified on the socket, not merely that something answered ping.\n * Best-effort: never throws.\n */\nexport async function restartVgdIfRunning(\n socketPath: string = vgdSocketPath(),\n opts: RestartVgdOptions = {},\n): Promise<'restarted' | 'started' | 'not-running' | 'refused' | 'failed'> {\n try {\n const stopResult = await stopVgd(socketPath, opts);\n if (stopResult === 'not-running' && !opts.startIfNotRunning) return 'not-running';\n if (stopResult === 'refused') return 'refused';\n if (stopResult === 'failed') return 'failed';\n await startDetachedVgd(socketPath);\n return stopResult === 'not-running' ? 'started' : 'restarted';\n } catch {\n return 'failed';\n }\n}\n\nfunction readVgdPid(): number | null {\n try {\n const raw = fs.readFileSync(vgdPidPath(), 'utf8').trim();\n const pid = Number.parseInt(raw, 10);\n return Number.isInteger(pid) && pid > 0 ? pid : null;\n } catch {\n return null;\n }\n}\n\n/** Resolve repository id for cwd: register if needed, return workspace id. */\nasync function repositoryIdForCwd(socketPath: string, root: string): Promise<string> {\n const { repositoryIdFromRoot } = await import('../runtime/paths.js');\n const reg = await vgdRequest({ op: 'register', root }, { socketPath });\n if (reg.ok && 'workspace' in reg) return reg.workspace.id;\n return repositoryIdFromRoot(root);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inventory, installedTreeVersion } from './chunk-6BEBJCK4.js';
|
|
2
2
|
import { findNodes } from './chunk-J7LKEB2R.js';
|
|
3
|
-
import { extractLiteralNeedles, residualForSymbolSearch } from './chunk-
|
|
3
|
+
import { extractLiteralNeedles, residualForSymbolSearch } from './chunk-USW5WHUG.js';
|
|
4
4
|
import { stableStringify } from './chunk-O3LABX6I.js';
|
|
5
5
|
import { hashString } from './chunk-JFGYT6BI.js';
|
|
6
6
|
import * as fs2 from 'fs';
|
|
@@ -1103,5 +1103,5 @@ function parseRgFileList(stdout, sep3 = path2.sep) {
|
|
|
1103
1103
|
}
|
|
1104
1104
|
|
|
1105
1105
|
export { addLibrary, catalogPath, driftFor, libDir, libId, loadCatalog, localApiSurface, localPackageDocs, readDoc, resolveLib, resolveVersion, saveCatalog, searchSymbols };
|
|
1106
|
-
//# sourceMappingURL=chunk-
|
|
1107
|
-
//# sourceMappingURL=chunk-
|
|
1106
|
+
//# sourceMappingURL=chunk-WATYIYWP.js.map
|
|
1107
|
+
//# sourceMappingURL=chunk-WATYIYWP.js.map
|