@vibgrate/cli 2026.728.5 → 2026.729.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/baseline-MROWBNK7.js +9 -0
  2. package/dist/{baseline-Y5FBYWNJ.js.map → baseline-MROWBNK7.js.map} +1 -1
  3. package/dist/{chunk-EVWW3BPM.js → chunk-2JV3J5NF.js} +3 -3
  4. package/dist/{chunk-EVWW3BPM.js.map → chunk-2JV3J5NF.js.map} +1 -1
  5. package/dist/{chunk-DBOT2ELH.js → chunk-3IJB5UJI.js} +3 -3
  6. package/dist/{chunk-DBOT2ELH.js.map → chunk-3IJB5UJI.js.map} +1 -1
  7. package/dist/{chunk-SGI5ZP2Y.js → chunk-CF2MLSOV.js} +3 -3
  8. package/dist/{chunk-SGI5ZP2Y.js.map → chunk-CF2MLSOV.js.map} +1 -1
  9. package/dist/{chunk-643KXZ54.js → chunk-EEVZVXT2.js} +6 -5
  10. package/dist/chunk-EEVZVXT2.js.map +1 -0
  11. package/dist/chunk-NQ4FSRXL.js +6 -0
  12. package/dist/chunk-NQ4FSRXL.js.map +1 -0
  13. package/dist/{chunk-4JD63RUR.js → chunk-OIWHR57Q.js} +3 -5
  14. package/dist/chunk-OIWHR57Q.js.map +1 -0
  15. package/dist/{chunk-VBVY733D.js → chunk-QS5BTBRX.js} +3 -3
  16. package/dist/{chunk-VBVY733D.js.map → chunk-QS5BTBRX.js.map} +1 -1
  17. package/dist/{chunk-NH5NJ3UO.js → chunk-TQFY6OSV.js} +7 -7
  18. package/dist/chunk-TQFY6OSV.js.map +1 -0
  19. package/dist/{chunk-RYNAK4LK.js → chunk-YKVNMNEM.js} +178 -39
  20. package/dist/chunk-YKVNMNEM.js.map +1 -0
  21. package/dist/{chunk-RCP2KQGG.js → chunk-YMHQZ24Q.js} +5 -5
  22. package/dist/{chunk-RCP2KQGG.js.map → chunk-YMHQZ24Q.js.map} +1 -1
  23. package/dist/cli.js +141 -134
  24. package/dist/cli.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +6 -5
  27. package/dist/index.js.map +1 -1
  28. package/dist/{interactive-KVDKRKNK.js → interactive-R5VQGDWP.js} +11 -10
  29. package/dist/interactive-R5VQGDWP.js.map +1 -0
  30. package/dist/load-WKIZF2AK.js +9 -0
  31. package/dist/{load-SEFJA3M5.js.map → load-WKIZF2AK.js.map} +1 -1
  32. package/dist/{runtime-session-4IACVDSY.js → runtime-session-5NRB6BTR.js} +6 -5
  33. package/dist/{runtime-session-4IACVDSY.js.map → runtime-session-5NRB6BTR.js.map} +1 -1
  34. package/dist/{vg-mcp-bridge-B35WCSAS.js → vg-mcp-bridge-YXQS6HTO.js} +5 -4
  35. package/dist/vg-mcp-bridge-YXQS6HTO.js.map +1 -0
  36. package/dist/{vgd-KDQFS33M.js → vgd-KC5RCOP6.js} +5 -4
  37. package/dist/{vgd-KDQFS33M.js.map → vgd-KC5RCOP6.js.map} +1 -1
  38. package/package.json +2 -1
  39. package/dist/baseline-Y5FBYWNJ.js +0 -8
  40. package/dist/chunk-4JD63RUR.js.map +0 -1
  41. package/dist/chunk-643KXZ54.js.map +0 -1
  42. package/dist/chunk-NH5NJ3UO.js.map +0 -1
  43. package/dist/chunk-RYNAK4LK.js.map +0 -1
  44. package/dist/interactive-KVDKRKNK.js.map +0 -1
  45. package/dist/load-SEFJA3M5.js +0 -8
  46. package/dist/vg-mcp-bridge-B35WCSAS.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ export { baselineCommand, runBaseline } from './chunk-CF2MLSOV.js';
2
+ import './chunk-OIWHR57Q.js';
3
+ import './chunk-CRAMOEBE.js';
4
+ import './chunk-RXP66R2E.js';
5
+ import './chunk-NQ4FSRXL.js';
6
+ import './chunk-GI6W53LM.js';
7
+ import './chunk-Z6ZWNWWR.js';
8
+ //# sourceMappingURL=baseline-MROWBNK7.js.map
9
+ //# sourceMappingURL=baseline-MROWBNK7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"baseline-Y5FBYWNJ.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"baseline-MROWBNK7.js"}
@@ -2,7 +2,7 @@ import { vgdSocketPath, vgdPidPath } from './chunk-PMYWZRRS.js';
2
2
  import { listHostSessions, hostSessionPoolSize, acquireHostSession, evictIdleSessions, clearHostSessionPool, dropHostSession, generateOnSession } from './chunk-6HX47EBL.js';
3
3
  import { resolveOne } from './chunk-J7LKEB2R.js';
4
4
  import { impactOf, queryGraph } from './chunk-EETK7S43.js';
5
- import { loadGraph } from './chunk-RYNAK4LK.js';
5
+ import { loadGraph } from './chunk-YKVNMNEM.js';
6
6
  import { parseGraph } from './chunk-ZKNB4YH4.js';
7
7
  import { repositoryIdFromRoot, globalGraphPathForRef, globalGraphPath } from './chunk-BWPBB45M.js';
8
8
  import { activeGraphSlotKey, detectGitRef } from './chunk-BPF3YX2U.js';
@@ -839,5 +839,5 @@ var BranchGraphSession = class {
839
839
  };
840
840
 
841
841
  export { ActiveGraphCache, BranchGraphSession, DEFAULT_ACTIVE_GRAPH_IDLE_MS, VGD_PROTOCOL_VERSION, WorkspaceRegistry, parseRequest, startVgdServer };
842
- //# sourceMappingURL=chunk-EVWW3BPM.js.map
843
- //# sourceMappingURL=chunk-EVWW3BPM.js.map
842
+ //# sourceMappingURL=chunk-2JV3J5NF.js.map
843
+ //# sourceMappingURL=chunk-2JV3J5NF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/vgd/protocol.ts","../src/runtime/active-graph-cache.ts","../src/runtime/vgd/registry.ts","../src/runtime/vgd/host-broker.ts","../src/runtime/vgd/server.ts","../src/runtime/branch-graph-session.ts"],"names":["path","dropped","path2","resolve","graph"],"mappings":"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","file":"chunk-EVWW3BPM.js","sourcesContent":["/**\n * Wire protocol for the lightweight Vibgrate daemon (`vgd`) — Fusion Runtime Phase 2 prototype.\n *\n * Line-delimited JSON over a local Unix domain socket (named pipe on Windows).\n * No credentials leave this process; the socket is local-only.\n */\n\nexport const VGD_PROTOCOL_VERSION = 'vgd/0' as const;\n\nexport interface WorkspaceRecord {\n /** Stable repository id (same as global store key). */\n id: string;\n /** Absolute repository root. */\n root: string;\n /** Absolute path to the current graph snapshot (may not exist yet). */\n graphPath: string;\n /** ISO timestamp when this workspace was last registered / refreshed. */\n registeredAt: string;\n /** Optional federation label. */\n label?: string;\n /** Optional federation role. */\n role?: 'primary' | 'member';\n /** Git branch or detached SHA at registration (multi-branch ActiveGraph). */\n gitRef?: string;\n}\n\n/** Lightweight ActiveGraph slot summary (no full graph payload). */\nexport interface GraphSlotSummary {\n repositoryId: string;\n gitRef: string;\n loadedAt: number;\n lastAccessAt: number;\n nodeCount: number;\n current: boolean;\n idleMs: number;\n evictable: boolean;\n}\n\nexport type VgdRequest =\n | { op: 'ping' }\n | { op: 'status' }\n | { op: 'list' }\n | { op: 'register'; root: string; label?: string; role?: 'primary' | 'member' }\n | { op: 'unregister'; root: string }\n | {\n op: 'register-federation';\n primaryRoot: string;\n members: Array<{ root: string; label?: string; role?: 'primary' | 'member' }>;\n }\n | { op: 'list-graph-slots'; repositoryId?: string }\n | { op: 'select-git-ref'; repositoryId: string; gitRef: string }\n | { op: 'put-graph'; repositoryId: string; gitRef: string; graph: unknown }\n /** Lexical/structural query against the ActiveGraph for a repository. */\n | { op: 'query-graph'; repositoryId: string; query: string; limit?: number; gitRef?: string }\n /** Blast-radius impact for a symbol id or qualified name. */\n | { op: 'impact-of'; repositoryId: string; symbol: string; depth?: number; gitRef?: string }\n /** Compact graph meta for the current (or named) slot — not the full graph. */\n | { op: 'graph-summary'; repositoryId: string; gitRef?: string }\n /** Approach B host broker: warm model status inside vgd. */\n | { op: 'host-status' }\n | { op: 'host-load'; modelPath: string }\n | { op: 'host-unload'; modelPath?: string }\n | {\n op: 'host-generate';\n modelPath: string;\n messages: Array<{ role: string; content: string }>;\n grammar?: string;\n requireGrammar?: boolean;\n maxTokens?: number;\n temperature?: number;\n };\n\n/** Compact match row for query-graph (no full node payloads). */\nexport interface VgdQueryMatch {\n id: string;\n qualifiedName: string;\n kind: string;\n file: string;\n line: number;\n score: number;\n why: string;\n}\n\nexport interface VgdImpactItem {\n id: string;\n name: string;\n kind: string;\n file: string;\n line: number;\n depth: number;\n confidence: number;\n}\n\nexport type VgdResponse =\n | { ok: true; pong: true; version: typeof VGD_PROTOCOL_VERSION }\n | {\n ok: true;\n pid: number;\n uptimeMs: number;\n workspaces: number;\n /** Resident multi-branch ActiveGraph slots (Fusion §4.1.1). */\n graphSlots?: number;\n version: typeof VGD_PROTOCOL_VERSION;\n socketPath: string;\n }\n | { ok: true; workspaces: WorkspaceRecord[] }\n | { ok: true; workspace: WorkspaceRecord }\n | { ok: true; workspaces: WorkspaceRecord[]; federation: true }\n | { ok: true; removed: boolean }\n | { ok: true; slots: GraphSlotSummary[] }\n | { ok: true; selected: true; repositoryId: string; gitRef: string }\n | { ok: true; stored: true; repositoryId: string; gitRef: string; nodeCount: number }\n | {\n ok: true;\n query: string;\n repositoryId: string;\n gitRef: string;\n matches: VgdQueryMatch[];\n tokensEstimate: number;\n }\n | {\n ok: true;\n repositoryId: string;\n gitRef: string;\n symbol: string;\n root: { id: string; name: string };\n depth: number;\n affected: VgdImpactItem[];\n direct: number;\n transitive: number;\n }\n | {\n ok: true;\n repositoryId: string;\n gitRef: string;\n summary: {\n nodeCount: number;\n edgeCount: number;\n languages: string[];\n corpusHash: string | null;\n root: string | null;\n };\n }\n | {\n ok: true;\n host: {\n poolSize: number;\n loadedModels: string[];\n bindingReady: boolean;\n };\n }\n | { ok: true; hostLoaded: true; modelPath: string }\n | { ok: true; hostUnloaded: true; cleared: number }\n | {\n ok: true;\n hostGenerated: true;\n text: string;\n model: string;\n constrained: boolean;\n grammarApplied?: boolean;\n draftAcceptedChars?: number;\n latencyMs?: number;\n unknownIdentifiers?: string[];\n }\n | { ok: false; error: string; code?: string };\n\nexport function parseRequest(line: string): VgdRequest | { error: string } {\n let raw: unknown;\n try {\n raw = JSON.parse(line);\n } catch {\n return { error: 'invalid JSON' };\n }\n if (!raw || typeof raw !== 'object') return { error: 'request must be an object' };\n const op = (raw as { op?: unknown }).op;\n if (op === 'ping' || op === 'status' || op === 'list') return { op };\n if (op === 'list-graph-slots') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n return {\n op: 'list-graph-slots',\n repositoryId: typeof repositoryId === 'string' && repositoryId.trim() ? repositoryId.trim() : undefined,\n };\n }\n if (op === 'select-git-ref') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'select-git-ref requires repositoryId' };\n if (typeof gitRef !== 'string' || !gitRef.trim()) return { error: 'select-git-ref requires gitRef' };\n return { op: 'select-git-ref', repositoryId: repositoryId.trim(), gitRef: gitRef.trim() };\n }\n if (op === 'put-graph') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n const graph = (raw as { graph?: unknown }).graph;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'put-graph requires repositoryId' };\n if (typeof gitRef !== 'string' || !gitRef.trim()) return { error: 'put-graph requires gitRef' };\n if (!graph || typeof graph !== 'object') return { error: 'put-graph requires graph object' };\n return { op: 'put-graph', repositoryId: repositoryId.trim(), gitRef: gitRef.trim(), graph };\n }\n if (op === 'query-graph') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const query = (raw as { query?: unknown }).query;\n const limit = (raw as { limit?: unknown }).limit;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'query-graph requires repositoryId' };\n if (typeof query !== 'string' || !query.trim()) return { error: 'query-graph requires query' };\n return {\n op: 'query-graph',\n repositoryId: repositoryId.trim(),\n query: query.trim(),\n limit: typeof limit === 'number' && limit > 0 ? Math.min(Math.floor(limit), 50) : undefined,\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'impact-of') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const symbol = (raw as { symbol?: unknown }).symbol;\n const depth = (raw as { depth?: unknown }).depth;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'impact-of requires repositoryId' };\n if (typeof symbol !== 'string' || !symbol.trim()) return { error: 'impact-of requires symbol' };\n return {\n op: 'impact-of',\n repositoryId: repositoryId.trim(),\n symbol: symbol.trim(),\n depth: typeof depth === 'number' && depth > 0 ? Math.min(Math.floor(depth), 12) : undefined,\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'graph-summary') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'graph-summary requires repositoryId' };\n return {\n op: 'graph-summary',\n repositoryId: repositoryId.trim(),\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'register' || op === 'unregister') {\n const root = (raw as { root?: unknown }).root;\n if (typeof root !== 'string' || !root.trim()) return { error: `${op} requires a non-empty root` };\n const label = (raw as { label?: unknown }).label;\n const role = (raw as { role?: unknown }).role;\n if (op === 'register') {\n return {\n op: 'register',\n root: root.trim(),\n label: typeof label === 'string' ? label : undefined,\n role: role === 'primary' || role === 'member' ? role : undefined,\n };\n }\n return { op: 'unregister', root: root.trim() };\n }\n if (op === 'register-federation') {\n const primaryRoot = (raw as { primaryRoot?: unknown }).primaryRoot;\n const members = (raw as { members?: unknown }).members;\n if (typeof primaryRoot !== 'string' || !primaryRoot.trim()) return { error: 'register-federation requires primaryRoot' };\n if (!Array.isArray(members) || members.length === 0) return { error: 'register-federation requires members[]' };\n const parsed: Array<{ root: string; label?: string; role?: 'primary' | 'member' }> = [];\n for (const m of members) {\n if (!m || typeof m !== 'object') continue;\n const root = (m as { root?: unknown }).root;\n if (typeof root !== 'string' || !root.trim()) continue;\n const label = (m as { label?: unknown }).label;\n const role = (m as { role?: unknown }).role;\n parsed.push({\n root: root.trim(),\n label: typeof label === 'string' ? label : undefined,\n role: role === 'primary' || role === 'member' ? role : undefined,\n });\n }\n if (!parsed.length) return { error: 'register-federation members must include at least one root' };\n return { op: 'register-federation', primaryRoot: primaryRoot.trim(), members: parsed };\n }\n if (op === 'host-status') return { op: 'host-status' };\n if (op === 'host-load') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n if (typeof modelPath !== 'string' || !modelPath.trim()) return { error: 'host-load requires modelPath' };\n return { op: 'host-load', modelPath: modelPath.trim() };\n }\n if (op === 'host-unload') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n return {\n op: 'host-unload',\n modelPath: typeof modelPath === 'string' && modelPath.trim() ? modelPath.trim() : undefined,\n };\n }\n if (op === 'host-generate') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n const messages = (raw as { messages?: unknown }).messages;\n if (typeof modelPath !== 'string' || !modelPath.trim()) return { error: 'host-generate requires modelPath' };\n if (!Array.isArray(messages) || messages.length === 0) return { error: 'host-generate requires messages[]' };\n const parsed: Array<{ role: string; content: string }> = [];\n for (const m of messages) {\n if (!m || typeof m !== 'object') continue;\n const role = (m as { role?: unknown }).role;\n const content = (m as { content?: unknown }).content;\n if (typeof role !== 'string' || typeof content !== 'string') continue;\n parsed.push({ role, content });\n }\n if (!parsed.length) return { error: 'host-generate messages must include role+content' };\n const grammar = (raw as { grammar?: unknown }).grammar;\n const requireGrammar = (raw as { requireGrammar?: unknown }).requireGrammar;\n const maxTokens = (raw as { maxTokens?: unknown }).maxTokens;\n const temperature = (raw as { temperature?: unknown }).temperature;\n return {\n op: 'host-generate',\n modelPath: modelPath.trim(),\n messages: parsed,\n grammar: typeof grammar === 'string' ? grammar : undefined,\n requireGrammar: requireGrammar === true,\n maxTokens: typeof maxTokens === 'number' ? maxTokens : undefined,\n temperature: typeof temperature === 'number' ? temperature : undefined,\n };\n }\n return { error: `unknown op: ${String(op)}` };\n}\n","/**\n * Multi-branch ActiveGraph cache (Fusion plan §4.1.1).\n *\n * Holds several in-memory graphs for the same repository — one per gitRef\n * (branch or detached SHA). Memory management: after an idle timeout, slots\n * become evictable; among idle slots, LILO (last-in, last-out ≡ FIFO by\n * load order) reclaims the oldest-loaded idle graph first. The currently\n * selected slot for a repository is never evicted.\n */\n\nimport type { VgGraph } from '../schema.js';\nimport { activeGraphSlotKey } from './git-ref.js';\n\n/** Default idle timeout: 20 minutes (within the 15–30 min plan band). */\nexport const DEFAULT_ACTIVE_GRAPH_IDLE_MS = 20 * 60 * 1000;\n\nexport interface ActiveGraphSlot {\n repositoryId: string;\n gitRef: string;\n graph: VgGraph;\n /** When this slot was first loaded into the cache. */\n loadedAt: number;\n /** Last access / select time. */\n lastAccessAt: number;\n /** Approximate size hint for diagnostics (node count). */\n nodeCount: number;\n}\n\nexport interface ActiveGraphCacheOptions {\n /** Idle duration before a non-selected slot is evictable (default 20 min). */\n idleTimeoutMs?: number;\n /** Max resident graphs per repositoryId (default 8). */\n maxPerRepo?: number;\n /** Max resident graphs process-wide (default 32). */\n maxTotal?: number;\n now?: () => number;\n}\n\nexport interface ActiveGraphSlotSummary {\n repositoryId: string;\n gitRef: string;\n loadedAt: number;\n lastAccessAt: number;\n nodeCount: number;\n current: boolean;\n idleMs: number;\n evictable: boolean;\n}\n\n/**\n * In-memory multi-branch graph cache. Pure structure — does not load/save disk.\n */\nexport class ActiveGraphCache {\n private readonly slots = new Map<string, ActiveGraphSlot>();\n /** repositoryId → currently selected gitRef */\n private readonly currentRef = new Map<string, string>();\n private readonly idleTimeoutMs: number;\n private readonly maxPerRepo: number;\n private readonly maxTotal: number;\n private readonly now: () => number;\n\n constructor(options: ActiveGraphCacheOptions = {}) {\n this.idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_ACTIVE_GRAPH_IDLE_MS;\n this.maxPerRepo = options.maxPerRepo ?? 8;\n this.maxTotal = options.maxTotal ?? 32;\n this.now = options.now ?? (() => Date.now());\n }\n\n size(): number {\n return this.slots.size;\n }\n\n get(repositoryId: string, gitRef: string): ActiveGraphSlot | undefined {\n const slot = this.slots.get(activeGraphSlotKey(repositoryId, gitRef));\n if (slot) {\n slot.lastAccessAt = this.now();\n }\n return slot;\n }\n\n /**\n * Insert or replace a graph for (repositoryId, gitRef). Touches access time.\n * Runs eviction if over cap.\n */\n put(repositoryId: string, gitRef: string, graph: VgGraph): ActiveGraphSlot {\n const key = activeGraphSlotKey(repositoryId, gitRef);\n const t = this.now();\n const existing = this.slots.get(key);\n const slot: ActiveGraphSlot = {\n repositoryId,\n gitRef,\n graph,\n loadedAt: existing?.loadedAt ?? t,\n lastAccessAt: t,\n nodeCount: graph.nodes?.length ?? 0,\n };\n this.slots.set(key, slot);\n if (!this.currentRef.has(repositoryId)) {\n this.currentRef.set(repositoryId, gitRef);\n }\n this.evictIfNeeded();\n return slot;\n }\n\n /**\n * Mark gitRef as the current branch for this repository and touch it.\n * Returns the slot if present.\n */\n select(repositoryId: string, gitRef: string): ActiveGraphSlot | undefined {\n this.currentRef.set(repositoryId, gitRef);\n return this.get(repositoryId, gitRef);\n }\n\n /** Currently selected gitRef for a repository, if any. */\n selectedRef(repositoryId: string): string | undefined {\n return this.currentRef.get(repositoryId);\n }\n\n current(repositoryId: string): ActiveGraphSlot | undefined {\n const ref = this.currentRef.get(repositoryId);\n if (!ref) return undefined;\n return this.get(repositoryId, ref);\n }\n\n /**\n * Drop idle slots past the timeout (LILO among idle).\n * Returns keys of removed slots.\n */\n evictIdle(now: number = this.now()): string[] {\n return this.evict(now, false);\n }\n\n /** Force eviction of idle slots when over caps (timeout may be ignored for overflow). */\n evictIfNeeded(): string[] {\n return this.evict(this.now(), true);\n }\n\n list(repositoryId?: string): ActiveGraphSlotSummary[] {\n const t = this.now();\n const out: ActiveGraphSlotSummary[] = [];\n for (const slot of this.slots.values()) {\n if (repositoryId && slot.repositoryId !== repositoryId) continue;\n const current = this.currentRef.get(slot.repositoryId) === slot.gitRef;\n const idleMs = t - slot.lastAccessAt;\n out.push({\n repositoryId: slot.repositoryId,\n gitRef: slot.gitRef,\n loadedAt: slot.loadedAt,\n lastAccessAt: slot.lastAccessAt,\n nodeCount: slot.nodeCount,\n current,\n idleMs,\n evictable: !current && idleMs >= this.idleTimeoutMs,\n });\n }\n return out.sort(\n (a, b) => a.repositoryId.localeCompare(b.repositoryId) || a.gitRef.localeCompare(b.gitRef),\n );\n }\n\n clear(): void {\n this.slots.clear();\n this.currentRef.clear();\n }\n\n private evict(now: number, forceOverflow: boolean): string[] {\n const removed: string[] = [];\n\n const removeKey = (key: string): void => {\n const slot = this.slots.get(key);\n if (!slot) return;\n this.slots.delete(key);\n removed.push(key);\n };\n\n // 1) Idle timeout: LILO among idle (earliest loadedAt first).\n const idle = this.idleCandidates(now, this.idleTimeoutMs);\n idle.sort((a, b) => a.loadedAt - b.loadedAt);\n for (const slot of idle) {\n removeKey(activeGraphSlotKey(slot.repositoryId, slot.gitRef));\n }\n\n // 2) Overflow: if still over maxPerRepo or maxTotal, LILO among any non-current idle-or-all-non-current.\n if (forceOverflow) {\n while (this.slots.size > this.maxTotal) {\n const victim = this.pickLiloVictim(now, /* requireIdleTimeout */ false);\n if (!victim) break;\n removeKey(activeGraphSlotKey(victim.repositoryId, victim.gitRef));\n }\n // Per-repo caps\n const byRepo = new Map<string, ActiveGraphSlot[]>();\n for (const s of this.slots.values()) {\n const list = byRepo.get(s.repositoryId) ?? [];\n list.push(s);\n byRepo.set(s.repositoryId, list);\n }\n for (const [repoId, list] of byRepo) {\n if (list.length <= this.maxPerRepo) continue;\n const nonCurrent = list\n .filter((s) => this.currentRef.get(repoId) !== s.gitRef)\n .sort((a, b) => a.loadedAt - b.loadedAt);\n let excess = list.length - this.maxPerRepo;\n for (const s of nonCurrent) {\n if (excess <= 0) break;\n removeKey(activeGraphSlotKey(s.repositoryId, s.gitRef));\n excess--;\n }\n }\n }\n\n return removed;\n }\n\n private idleCandidates(now: number, timeoutMs: number): ActiveGraphSlot[] {\n const out: ActiveGraphSlot[] = [];\n for (const slot of this.slots.values()) {\n if (this.currentRef.get(slot.repositoryId) === slot.gitRef) continue;\n if (now - slot.lastAccessAt >= timeoutMs) out.push(slot);\n }\n return out;\n }\n\n private pickLiloVictim(now: number, requireIdleTimeout: boolean): ActiveGraphSlot | null {\n let best: ActiveGraphSlot | null = null;\n for (const slot of this.slots.values()) {\n if (this.currentRef.get(slot.repositoryId) === slot.gitRef) continue;\n if (requireIdleTimeout && now - slot.lastAccessAt < this.idleTimeoutMs) continue;\n if (!best || slot.loadedAt < best.loadedAt) best = slot;\n }\n return best;\n }\n}\n","import * as path from 'node:path';\nimport { repositoryIdFromRoot, globalGraphPathForRef, globalGraphPath } from '../paths.js';\nimport { detectGitRef } from '../git-ref.js';\nimport { ActiveGraphCache } from '../active-graph-cache.js';\nimport type { WorkspaceRecord } from './protocol.js';\nimport type { VgGraph } from '../../schema.js';\n\n/**\n * In-memory workspace registry for the vgd prototype.\n *\n * Tracks which repository roots the daemon knows about and where their\n * graphs live. Holds a multi-branch {@link ActiveGraphCache} so several\n * git refs of the same repo can stay warm (Fusion §4.1.1).\n */\nexport class WorkspaceRegistry {\n private readonly byId = new Map<string, WorkspaceRecord>();\n /** Multi-branch in-memory graphs (shared across registered workspaces). */\n readonly graphs = new ActiveGraphCache();\n\n register(\n root: string,\n now: () => Date = () => new Date(),\n meta: { label?: string; role?: 'primary' | 'member'; gitRef?: string } = {},\n ): WorkspaceRecord {\n const resolved = path.resolve(root);\n const id = repositoryIdFromRoot(resolved);\n const git = meta.gitRef ? { ref: meta.gitRef, kind: 'branch' as const } : detectGitRef(resolved);\n const graphPath =\n git.kind !== 'none' && git.ref ? globalGraphPathForRef(resolved, git.ref) : globalGraphPath(resolved);\n const record: WorkspaceRecord = {\n id,\n root: resolved,\n graphPath,\n registeredAt: now().toISOString(),\n label: meta.label,\n role: meta.role,\n gitRef: git.ref || undefined,\n };\n this.byId.set(id, record);\n if (git.ref) this.graphs.select(id, git.ref);\n return record;\n }\n\n /**\n * Activate or insert an in-memory graph for a workspace branch.\n * Call after load/build; runs LILO idle eviction as needed.\n */\n putGraph(repositoryId: string, gitRef: string, graph: VgGraph): void {\n this.graphs.put(repositoryId, gitRef, graph);\n this.graphs.select(repositoryId, gitRef);\n }\n\n /** Switch the current branch slot for a repository (no load). */\n selectGitRef(repositoryId: string, gitRef: string): void {\n this.graphs.select(repositoryId, gitRef);\n }\n\n /** Register every member of a federation (primary + members). */\n registerFederation(\n members: Array<{ root: string; label?: string; role?: 'primary' | 'member' }>,\n now: () => Date = () => new Date(),\n ): WorkspaceRecord[] {\n return members.map((m) => this.register(m.root, now, { label: m.label, role: m.role }));\n }\n\n unregister(root: string): boolean {\n const id = repositoryIdFromRoot(path.resolve(root));\n return this.byId.delete(id);\n }\n\n list(): WorkspaceRecord[] {\n return [...this.byId.values()].sort((a, b) => a.root.localeCompare(b.root));\n }\n\n get(root: string): WorkspaceRecord | undefined {\n return this.byId.get(repositoryIdFromRoot(path.resolve(root)));\n }\n\n /** Lookup by stable repository id. */\n getById(repositoryId: string): WorkspaceRecord | undefined {\n return this.byId.get(repositoryId);\n }\n\n size(): number {\n return this.byId.size;\n }\n\n /**\n * Resolve an ActiveGraph for query/impact: prefer the named gitRef, else the\n * selected current slot, else any warm slot for the repository.\n */\n resolveGraph(repositoryId: string, gitRef?: string): { graph: VgGraph; gitRef: string } | null {\n if (gitRef) {\n const slot = this.graphs.get(repositoryId, gitRef);\n if (slot) return { graph: slot.graph, gitRef: slot.gitRef };\n }\n const current = this.graphs.current(repositoryId);\n if (current) return { graph: current.graph, gitRef: current.gitRef };\n // Fall back to any warm slot for this repo (deterministic: earliest loaded).\n const any = this.graphs\n .list(repositoryId)\n .slice()\n .sort((a, b) => a.loadedAt - b.loadedAt)[0];\n if (any) {\n const slot = this.graphs.get(repositoryId, any.gitRef);\n if (slot) return { graph: slot.graph, gitRef: slot.gitRef };\n }\n return null;\n }\n}\n","/**\n * Model host broker inside vgd (Approach B / B4 + P4 multi-client).\n *\n * Long-lived daemon process can keep warm llama.cpp sessions so CLI and IDE\n * clients share one loaded model. Management (which pack/mode) stays in the\n * client/orchestrator; vgd only loads paths the client requests and generates.\n *\n * P4: clients acquire/release leases per model path so unload is refcounted\n * (one IDE + CLI can share a warm model without the first exit killing it).\n *\n * Binding is injected (never static node-llama-cpp import).\n */\n\nimport {\n acquireHostSession,\n clearHostSessionPool,\n dropHostSession,\n evictIdleSessions,\n generateOnSession,\n hostSessionPoolSize,\n listHostSessions,\n type HostGenerateReport,\n type HostSessionInfo,\n} from '../llm-host/session.js';\nimport type { LlmChatMessage, LlmGenerateOptions } from '../llm-host/types.js';\n\nexport interface HostBrokerStatus {\n poolSize: number;\n loadedModels: string[];\n bindingReady: boolean;\n /** Per-path client lease counts (P4). */\n leases: Record<string, number>;\n sessions: HostSessionInfo[];\n}\n\nexport interface HostClientLease {\n clientId: string;\n modelPath: string;\n}\n\nexport class VgdHostBroker {\n private binding: unknown | null = null;\n private readonly loaded = new Set<string>();\n /** modelPath → set of client ids holding a lease. */\n private readonly leases = new Map<string, Set<string>>();\n\n setBinding(lib: unknown | null): void {\n this.binding = lib;\n }\n\n hasBinding(): boolean {\n return this.binding != null;\n }\n\n status(): HostBrokerStatus {\n const leases: Record<string, number> = {};\n for (const [path, clients] of this.leases) {\n leases[path] = clients.size;\n }\n return {\n poolSize: hostSessionPoolSize(),\n loadedModels: [...this.loaded],\n bindingReady: this.binding != null,\n leases,\n sessions: listHostSessions(),\n };\n }\n\n /**\n * Load weights and optionally register a client lease (P4 multi-client).\n * When clientId is omitted, behaves like a one-shot load (no lease bookkeeping).\n */\n async load(\n modelPath: string,\n clientId?: string,\n ): Promise<{ ok: true; modelPath: string; leases: number } | { ok: false; error: string }> {\n if (!this.binding) {\n return { ok: false, error: 'host binding not configured — start vgd with llama runtime or attach binding' };\n }\n try {\n await acquireHostSession(this.binding, modelPath);\n this.loaded.add(modelPath);\n if (clientId) {\n let set = this.leases.get(modelPath);\n if (!set) {\n set = new Set();\n this.leases.set(modelPath, set);\n }\n set.add(clientId);\n }\n evictIdleSessions(4);\n return { ok: true, modelPath, leases: this.leases.get(modelPath)?.size ?? 0 };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n }\n\n /**\n * Release a client lease. When the last lease is released, drop the warm\n * session for that path. Without clientId, clears all leases for the path\n * (or entire pool if modelPath omitted).\n */\n async unload(\n modelPath?: string,\n clientId?: string,\n ): Promise<{ ok: true; cleared: number; remainingLeases: number }> {\n if (!modelPath) {\n const n = hostSessionPoolSize();\n clearHostSessionPool();\n this.loaded.clear();\n this.leases.clear();\n return { ok: true, cleared: n, remainingLeases: 0 };\n }\n\n if (clientId) {\n const set = this.leases.get(modelPath);\n if (set) {\n set.delete(clientId);\n if (set.size === 0) this.leases.delete(modelPath);\n }\n const remaining = this.leases.get(modelPath)?.size ?? 0;\n if (remaining === 0) {\n const dropped = dropHostSession(modelPath) ? 1 : 0;\n this.loaded.delete(modelPath);\n return { ok: true, cleared: dropped, remainingLeases: 0 };\n }\n return { ok: true, cleared: 0, remainingLeases: remaining };\n }\n\n // No clientId: force drop path (all leases).\n this.leases.delete(modelPath);\n const dropped = dropHostSession(modelPath) ? 1 : 0;\n this.loaded.delete(modelPath);\n return { ok: true, cleared: dropped, remainingLeases: 0 };\n }\n\n /** How many clients hold a lease on modelPath. */\n leaseCount(modelPath: string): number {\n return this.leases.get(modelPath)?.size ?? 0;\n }\n\n async generate(\n modelPath: string,\n messages: LlmChatMessage[],\n opts?: LlmGenerateOptions,\n ): Promise<{ ok: true; result: HostGenerateReport } | { ok: false; error: string }> {\n if (!this.binding) {\n return { ok: false, error: 'host binding not configured' };\n }\n try {\n const session = await acquireHostSession(this.binding, modelPath);\n this.loaded.add(modelPath);\n const result = await generateOnSession(session, messages, {\n grammar: opts?.grammar,\n requireGrammar: opts?.requireGrammar,\n identifierTrie: opts?.identifierTrie,\n annotateUnknownIdentifiers: opts?.annotateUnknownIdentifiers,\n draftCandidates: opts?.draftCandidates,\n maxTokens: opts?.maxTokens,\n temperature: opts?.temperature,\n promptSegments: opts?.promptSegments,\n });\n return { ok: true, result };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n }\n}\n\n/** Process-wide broker for the running vgd (tests may replace). */\nlet defaultBroker: VgdHostBroker | null = null;\n\nexport function getVgdHostBroker(): VgdHostBroker {\n if (!defaultBroker) defaultBroker = new VgdHostBroker();\n return defaultBroker;\n}\n\nexport function resetVgdHostBroker(): void {\n defaultBroker = null;\n clearHostSessionPool();\n}\n","import * as fs from 'node:fs';\nimport * as net from 'node:net';\nimport * as path from 'node:path';\nimport { VGD_PROTOCOL_VERSION, parseRequest, type VgdResponse } from './protocol.js';\nimport { WorkspaceRegistry } from './registry.js';\nimport { vgdPidPath, vgdSocketPath } from './paths.js';\nimport { parseGraph } from '../../engine/serialize.js';\nimport { queryGraph } from '../../engine/query.js';\nimport { impactOf } from '../../engine/impact.js';\nimport { resolveOne } from '../../engine/lookup.js';\nimport { getVgdHostBroker, type VgdHostBroker } from './host-broker.js';\nimport type { VgGraph } from '../../schema.js';\n\nexport interface VgdServerOptions {\n /** Override socket path (tests). */\n socketPath?: string;\n /** Override PID path (tests). */\n pidPath?: string;\n registry?: WorkspaceRegistry;\n now?: () => Date;\n /** Process id recorded in status / pid file (tests). */\n pid?: number;\n /** Inject host broker (tests); default process-wide broker. */\n hostBroker?: VgdHostBroker;\n}\n\nexport interface VgdServer {\n readonly socketPath: string;\n readonly registry: WorkspaceRegistry;\n /** Wall time when the server started listening. */\n readonly startedAt: number;\n close(): Promise<void>;\n}\n\n/**\n * Start a line-delimited JSON daemon on the local vgd socket.\n * Creates the daemon directory; removes a stale Unix socket file if present.\n */\nexport async function startVgdServer(options: VgdServerOptions = {}): Promise<VgdServer> {\n const socketPath = options.socketPath ?? vgdSocketPath();\n const pidPath = options.pidPath ?? vgdPidPath();\n const registry = options.registry ?? new WorkspaceRegistry();\n const hostBroker = options.hostBroker ?? getVgdHostBroker();\n const now = options.now ?? (() => new Date());\n const pid = options.pid ?? process.pid;\n const startedAt = Date.now();\n\n // Unix sockets need a free path; named pipes on Windows are cleaned by the OS.\n if (!socketPath.startsWith('\\\\\\\\.\\\\pipe')) {\n fs.mkdirSync(path.dirname(socketPath), { recursive: true });\n try {\n fs.unlinkSync(socketPath);\n } catch {\n /* nothing to remove */\n }\n } else {\n fs.mkdirSync(path.dirname(pidPath), { recursive: true });\n }\n\n const server = net.createServer((socket) => {\n let buffer = '';\n socket.setEncoding('utf8');\n socket.on('data', (chunk: string) => {\n buffer += chunk;\n let nl: number;\n while ((nl = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, nl).trim();\n buffer = buffer.slice(nl + 1);\n if (!line) continue;\n void Promise.resolve(handleLine(line, { registry, hostBroker, now, pid, startedAt, socketPath })).then(\n (response) => {\n socket.write(JSON.stringify(response) + '\\n');\n },\n );\n }\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen(socketPath, () => {\n server.off('error', reject);\n resolve();\n });\n });\n\n try {\n fs.mkdirSync(path.dirname(pidPath), { recursive: true });\n fs.writeFileSync(pidPath, `${pid}\\n`, 'utf8');\n } catch {\n /* pid file is best-effort */\n }\n\n return {\n socketPath,\n registry,\n startedAt,\n async close() {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n try {\n fs.unlinkSync(pidPath);\n } catch {\n /* gone */\n }\n if (!socketPath.startsWith('\\\\\\\\.\\\\pipe')) {\n try {\n fs.unlinkSync(socketPath);\n } catch {\n /* gone */\n }\n }\n },\n };\n}\n\nasync function handleLine(\n line: string,\n ctx: {\n registry: WorkspaceRegistry;\n hostBroker: VgdHostBroker;\n now: () => Date;\n pid: number;\n startedAt: number;\n socketPath: string;\n },\n): Promise<VgdResponse> {\n const req = parseRequest(line);\n if ('error' in req) return { ok: false, error: req.error, code: 'bad_request' };\n\n switch (req.op) {\n case 'ping':\n return { ok: true, pong: true, version: VGD_PROTOCOL_VERSION };\n case 'status':\n return {\n ok: true,\n pid: ctx.pid,\n uptimeMs: Date.now() - ctx.startedAt,\n workspaces: ctx.registry.size(),\n graphSlots: ctx.registry.graphs.size(),\n version: VGD_PROTOCOL_VERSION,\n socketPath: ctx.socketPath,\n };\n case 'host-status':\n return { ok: true, host: ctx.hostBroker.status() };\n case 'host-load': {\n const r = await ctx.hostBroker.load(req.modelPath);\n if (!r.ok) return { ok: false, error: r.error, code: 'host_error' };\n return { ok: true, hostLoaded: true, modelPath: r.modelPath };\n }\n case 'host-unload': {\n const r = await ctx.hostBroker.unload(req.modelPath);\n return { ok: true, hostUnloaded: true, cleared: r.cleared };\n }\n case 'host-generate': {\n const r = await ctx.hostBroker.generate(\n req.modelPath,\n req.messages.map((m) => ({\n role: (m.role === 'system' || m.role === 'assistant' ? m.role : 'user') as 'system' | 'user' | 'assistant',\n content: m.content,\n })),\n {\n grammar: req.grammar,\n requireGrammar: req.requireGrammar,\n maxTokens: req.maxTokens,\n temperature: req.temperature,\n },\n );\n if (!r.ok) return { ok: false, error: r.error, code: 'host_error' };\n return {\n ok: true,\n hostGenerated: true,\n text: r.result.text,\n model: r.result.model,\n constrained: r.result.constrained,\n grammarApplied: r.result.grammarApplied,\n draftAcceptedChars: r.result.draftAcceptedChars,\n latencyMs: r.result.latencyMs,\n unknownIdentifiers: r.result.unknownIdentifiers,\n };\n }\n case 'list':\n return { ok: true, workspaces: ctx.registry.list() };\n case 'register':\n return {\n ok: true,\n workspace: ctx.registry.register(req.root, ctx.now, { label: req.label, role: req.role }),\n };\n case 'unregister':\n return { ok: true, removed: ctx.registry.unregister(req.root) };\n case 'register-federation': {\n const workspaces = ctx.registry.registerFederation(req.members, ctx.now);\n return { ok: true, workspaces, federation: true };\n }\n case 'list-graph-slots': {\n ctx.registry.graphs.evictIdle();\n return { ok: true, slots: ctx.registry.graphs.list(req.repositoryId) };\n }\n case 'select-git-ref': {\n ctx.registry.selectGitRef(req.repositoryId, req.gitRef);\n return { ok: true, selected: true, repositoryId: req.repositoryId, gitRef: req.gitRef };\n }\n case 'put-graph': {\n try {\n const graph = parseGraph(JSON.stringify(req.graph));\n ctx.registry.putGraph(req.repositoryId, req.gitRef, graph);\n return {\n ok: true,\n stored: true,\n repositoryId: req.repositoryId,\n gitRef: req.gitRef,\n nodeCount: graph.nodes?.length ?? 0,\n };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : 'invalid graph', code: 'bad_graph' };\n }\n }\n case 'query-graph': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const result = queryGraph(resolved.graph, req.query, { limit: req.limit ?? 12, budget: 2000 });\n return {\n ok: true,\n query: req.query,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n matches: result.matches.slice(0, req.limit ?? 12).map((m) => ({\n id: m.node.id,\n qualifiedName: m.node.qualifiedName,\n kind: m.node.kind,\n file: m.node.file,\n line: m.node.span?.start ?? 0,\n score: m.score,\n why: m.why,\n })),\n tokensEstimate: result.tokensEstimate,\n };\n }\n case 'impact-of': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const node = resolveSymbol(resolved.graph, req.symbol);\n if (!node) {\n return { ok: false, error: `symbol not found: ${req.symbol}`, code: 'not_found' };\n }\n const impact = impactOf(resolved.graph, node.id, { depth: req.depth ?? 4 });\n return {\n ok: true,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n symbol: req.symbol,\n root: impact.root,\n depth: impact.depth,\n affected: impact.affected.slice(0, 40).map((a) => ({\n id: a.id,\n name: a.name,\n kind: a.kind,\n file: a.file,\n line: a.line,\n depth: a.depth,\n confidence: a.confidence,\n })),\n direct: impact.direct,\n transitive: impact.transitive,\n };\n }\n case 'graph-summary': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const g = resolved.graph;\n return {\n ok: true,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n summary: {\n nodeCount: g.nodes?.length ?? 0,\n edgeCount: g.edges?.length ?? 0,\n languages: g.meta?.languages ?? [],\n corpusHash: g.provenance?.corpusHash ?? null,\n root: g.meta?.root ?? null,\n },\n };\n }\n }\n}\n\nfunction resolveSymbol(graph: VgGraph, symbol: string): { id: string } | null {\n // Prefer exact id, then qualified-name / short-name lookup.\n if (graph.nodes.some((n) => n.id === symbol)) return { id: symbol };\n const hit = resolveOne(graph, symbol);\n if (hit.node?.id) return { id: hit.node.id };\n if (hit.candidates.length === 1 && hit.candidates[0]?.id) return { id: hit.candidates[0].id };\n const q = symbol.toLowerCase();\n const byQn = graph.nodes.find((n) => n.qualifiedName?.toLowerCase() === q || n.name?.toLowerCase() === q);\n return byQn ? { id: byQn.id } : null;\n}\n","/**\n * Branch-aware graph loading for a single repository worktree (Fusion §4.1.1).\n *\n * Combines {@link detectGitRef}, disk load via {@link loadGraph}, and an\n * {@link ActiveGraphCache} so checkout A → B → A reuses a warm in-memory map\n * when the branch is still resident (LILO idle eviction applies).\n */\n\nimport { loadGraph } from '../engine/load.js';\nimport { repositoryIdFromRoot } from './paths.js';\nimport { detectGitRef, type GitRunner } from './git-ref.js';\nimport { ActiveGraphCache } from './active-graph-cache.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface BranchGraphLoadResult {\n graph: VgGraph | null;\n gitRef: string;\n kind: 'branch' | 'detached' | 'none';\n /** True when the selected ActiveGraph slot changed since the previous ensure. */\n switched: boolean;\n /** True when the graph was served from the in-memory cache. */\n fromCache: boolean;\n repositoryId: string;\n}\n\nexport interface BranchGraphSessionOptions {\n root: string;\n cache?: ActiveGraphCache;\n /** Optional explicit graph path (CLI `--graph`); bypasses branch keying for disk. */\n graphPath?: string;\n detectGit?: typeof detectGitRef;\n load?: typeof loadGraph;\n gitRun?: GitRunner;\n}\n\n/**\n * Stateful helper: call {@link ensureCurrent} at session start and before each\n * agent turn so a mid-session `git checkout` picks up the correct map.\n */\nexport class BranchGraphSession {\n readonly root: string;\n readonly repositoryId: string;\n readonly cache: ActiveGraphCache;\n private readonly graphPath?: string;\n private readonly detectGit: typeof detectGitRef;\n private readonly load: typeof loadGraph;\n private readonly gitRun?: GitRunner;\n private lastRef = '';\n\n constructor(options: BranchGraphSessionOptions) {\n this.root = options.root;\n this.repositoryId = repositoryIdFromRoot(options.root);\n this.cache = options.cache ?? new ActiveGraphCache();\n this.graphPath = options.graphPath;\n this.detectGit = options.detectGit ?? detectGitRef;\n this.load = options.load ?? loadGraph;\n this.gitRun = options.gitRun;\n }\n\n /**\n * Resolve HEAD, activate the matching cache slot (or load from disk), and\n * run idle eviction. Returns null graph when no map exists for this ref.\n */\n ensureCurrent(): BranchGraphLoadResult {\n this.cache.evictIdle();\n const info = this.gitRun ? this.detectGit(this.root, this.gitRun) : this.detectGit(this.root);\n const gitRef = info.ref || 'unknown';\n const switched = this.lastRef !== '' && this.lastRef !== gitRef;\n this.lastRef = gitRef;\n\n // Explicit --graph path: still track ref for cache identity but load that file.\n if (this.graphPath) {\n const graph = this.load(this.root, this.graphPath);\n if (graph) {\n this.cache.put(this.repositoryId, gitRef, graph);\n this.cache.select(this.repositoryId, gitRef);\n }\n return {\n graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: false,\n repositoryId: this.repositoryId,\n };\n }\n\n const warm = this.cache.get(this.repositoryId, gitRef);\n if (warm) {\n this.cache.select(this.repositoryId, gitRef);\n return {\n graph: warm.graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: true,\n repositoryId: this.repositoryId,\n };\n }\n\n const graph = this.load(this.root);\n if (graph) {\n this.cache.put(this.repositoryId, gitRef, graph);\n this.cache.select(this.repositoryId, gitRef);\n }\n return {\n graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: false,\n repositoryId: this.repositoryId,\n };\n }\n\n /** Diagnostics for daemon status / tests. */\n listSlots() {\n return this.cache.list(this.repositoryId);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/runtime/vgd/protocol.ts","../src/runtime/active-graph-cache.ts","../src/runtime/vgd/registry.ts","../src/runtime/vgd/host-broker.ts","../src/runtime/vgd/server.ts","../src/runtime/branch-graph-session.ts"],"names":["path","dropped","path2","resolve","graph"],"mappings":"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","file":"chunk-2JV3J5NF.js","sourcesContent":["/**\n * Wire protocol for the lightweight Vibgrate daemon (`vgd`) — Fusion Runtime Phase 2 prototype.\n *\n * Line-delimited JSON over a local Unix domain socket (named pipe on Windows).\n * No credentials leave this process; the socket is local-only.\n */\n\nexport const VGD_PROTOCOL_VERSION = 'vgd/0' as const;\n\nexport interface WorkspaceRecord {\n /** Stable repository id (same as global store key). */\n id: string;\n /** Absolute repository root. */\n root: string;\n /** Absolute path to the current graph snapshot (may not exist yet). */\n graphPath: string;\n /** ISO timestamp when this workspace was last registered / refreshed. */\n registeredAt: string;\n /** Optional federation label. */\n label?: string;\n /** Optional federation role. */\n role?: 'primary' | 'member';\n /** Git branch or detached SHA at registration (multi-branch ActiveGraph). */\n gitRef?: string;\n}\n\n/** Lightweight ActiveGraph slot summary (no full graph payload). */\nexport interface GraphSlotSummary {\n repositoryId: string;\n gitRef: string;\n loadedAt: number;\n lastAccessAt: number;\n nodeCount: number;\n current: boolean;\n idleMs: number;\n evictable: boolean;\n}\n\nexport type VgdRequest =\n | { op: 'ping' }\n | { op: 'status' }\n | { op: 'list' }\n | { op: 'register'; root: string; label?: string; role?: 'primary' | 'member' }\n | { op: 'unregister'; root: string }\n | {\n op: 'register-federation';\n primaryRoot: string;\n members: Array<{ root: string; label?: string; role?: 'primary' | 'member' }>;\n }\n | { op: 'list-graph-slots'; repositoryId?: string }\n | { op: 'select-git-ref'; repositoryId: string; gitRef: string }\n | { op: 'put-graph'; repositoryId: string; gitRef: string; graph: unknown }\n /** Lexical/structural query against the ActiveGraph for a repository. */\n | { op: 'query-graph'; repositoryId: string; query: string; limit?: number; gitRef?: string }\n /** Blast-radius impact for a symbol id or qualified name. */\n | { op: 'impact-of'; repositoryId: string; symbol: string; depth?: number; gitRef?: string }\n /** Compact graph meta for the current (or named) slot — not the full graph. */\n | { op: 'graph-summary'; repositoryId: string; gitRef?: string }\n /** Approach B host broker: warm model status inside vgd. */\n | { op: 'host-status' }\n | { op: 'host-load'; modelPath: string }\n | { op: 'host-unload'; modelPath?: string }\n | {\n op: 'host-generate';\n modelPath: string;\n messages: Array<{ role: string; content: string }>;\n grammar?: string;\n requireGrammar?: boolean;\n maxTokens?: number;\n temperature?: number;\n };\n\n/** Compact match row for query-graph (no full node payloads). */\nexport interface VgdQueryMatch {\n id: string;\n qualifiedName: string;\n kind: string;\n file: string;\n line: number;\n score: number;\n why: string;\n}\n\nexport interface VgdImpactItem {\n id: string;\n name: string;\n kind: string;\n file: string;\n line: number;\n depth: number;\n confidence: number;\n}\n\nexport type VgdResponse =\n | { ok: true; pong: true; version: typeof VGD_PROTOCOL_VERSION }\n | {\n ok: true;\n pid: number;\n uptimeMs: number;\n workspaces: number;\n /** Resident multi-branch ActiveGraph slots (Fusion §4.1.1). */\n graphSlots?: number;\n version: typeof VGD_PROTOCOL_VERSION;\n socketPath: string;\n }\n | { ok: true; workspaces: WorkspaceRecord[] }\n | { ok: true; workspace: WorkspaceRecord }\n | { ok: true; workspaces: WorkspaceRecord[]; federation: true }\n | { ok: true; removed: boolean }\n | { ok: true; slots: GraphSlotSummary[] }\n | { ok: true; selected: true; repositoryId: string; gitRef: string }\n | { ok: true; stored: true; repositoryId: string; gitRef: string; nodeCount: number }\n | {\n ok: true;\n query: string;\n repositoryId: string;\n gitRef: string;\n matches: VgdQueryMatch[];\n tokensEstimate: number;\n }\n | {\n ok: true;\n repositoryId: string;\n gitRef: string;\n symbol: string;\n root: { id: string; name: string };\n depth: number;\n affected: VgdImpactItem[];\n direct: number;\n transitive: number;\n }\n | {\n ok: true;\n repositoryId: string;\n gitRef: string;\n summary: {\n nodeCount: number;\n edgeCount: number;\n languages: string[];\n corpusHash: string | null;\n root: string | null;\n };\n }\n | {\n ok: true;\n host: {\n poolSize: number;\n loadedModels: string[];\n bindingReady: boolean;\n };\n }\n | { ok: true; hostLoaded: true; modelPath: string }\n | { ok: true; hostUnloaded: true; cleared: number }\n | {\n ok: true;\n hostGenerated: true;\n text: string;\n model: string;\n constrained: boolean;\n grammarApplied?: boolean;\n draftAcceptedChars?: number;\n latencyMs?: number;\n unknownIdentifiers?: string[];\n }\n | { ok: false; error: string; code?: string };\n\nexport function parseRequest(line: string): VgdRequest | { error: string } {\n let raw: unknown;\n try {\n raw = JSON.parse(line);\n } catch {\n return { error: 'invalid JSON' };\n }\n if (!raw || typeof raw !== 'object') return { error: 'request must be an object' };\n const op = (raw as { op?: unknown }).op;\n if (op === 'ping' || op === 'status' || op === 'list') return { op };\n if (op === 'list-graph-slots') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n return {\n op: 'list-graph-slots',\n repositoryId: typeof repositoryId === 'string' && repositoryId.trim() ? repositoryId.trim() : undefined,\n };\n }\n if (op === 'select-git-ref') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'select-git-ref requires repositoryId' };\n if (typeof gitRef !== 'string' || !gitRef.trim()) return { error: 'select-git-ref requires gitRef' };\n return { op: 'select-git-ref', repositoryId: repositoryId.trim(), gitRef: gitRef.trim() };\n }\n if (op === 'put-graph') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n const graph = (raw as { graph?: unknown }).graph;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'put-graph requires repositoryId' };\n if (typeof gitRef !== 'string' || !gitRef.trim()) return { error: 'put-graph requires gitRef' };\n if (!graph || typeof graph !== 'object') return { error: 'put-graph requires graph object' };\n return { op: 'put-graph', repositoryId: repositoryId.trim(), gitRef: gitRef.trim(), graph };\n }\n if (op === 'query-graph') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const query = (raw as { query?: unknown }).query;\n const limit = (raw as { limit?: unknown }).limit;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'query-graph requires repositoryId' };\n if (typeof query !== 'string' || !query.trim()) return { error: 'query-graph requires query' };\n return {\n op: 'query-graph',\n repositoryId: repositoryId.trim(),\n query: query.trim(),\n limit: typeof limit === 'number' && limit > 0 ? Math.min(Math.floor(limit), 50) : undefined,\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'impact-of') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const symbol = (raw as { symbol?: unknown }).symbol;\n const depth = (raw as { depth?: unknown }).depth;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'impact-of requires repositoryId' };\n if (typeof symbol !== 'string' || !symbol.trim()) return { error: 'impact-of requires symbol' };\n return {\n op: 'impact-of',\n repositoryId: repositoryId.trim(),\n symbol: symbol.trim(),\n depth: typeof depth === 'number' && depth > 0 ? Math.min(Math.floor(depth), 12) : undefined,\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'graph-summary') {\n const repositoryId = (raw as { repositoryId?: unknown }).repositoryId;\n const gitRef = (raw as { gitRef?: unknown }).gitRef;\n if (typeof repositoryId !== 'string' || !repositoryId.trim()) return { error: 'graph-summary requires repositoryId' };\n return {\n op: 'graph-summary',\n repositoryId: repositoryId.trim(),\n gitRef: typeof gitRef === 'string' && gitRef.trim() ? gitRef.trim() : undefined,\n };\n }\n if (op === 'register' || op === 'unregister') {\n const root = (raw as { root?: unknown }).root;\n if (typeof root !== 'string' || !root.trim()) return { error: `${op} requires a non-empty root` };\n const label = (raw as { label?: unknown }).label;\n const role = (raw as { role?: unknown }).role;\n if (op === 'register') {\n return {\n op: 'register',\n root: root.trim(),\n label: typeof label === 'string' ? label : undefined,\n role: role === 'primary' || role === 'member' ? role : undefined,\n };\n }\n return { op: 'unregister', root: root.trim() };\n }\n if (op === 'register-federation') {\n const primaryRoot = (raw as { primaryRoot?: unknown }).primaryRoot;\n const members = (raw as { members?: unknown }).members;\n if (typeof primaryRoot !== 'string' || !primaryRoot.trim()) return { error: 'register-federation requires primaryRoot' };\n if (!Array.isArray(members) || members.length === 0) return { error: 'register-federation requires members[]' };\n const parsed: Array<{ root: string; label?: string; role?: 'primary' | 'member' }> = [];\n for (const m of members) {\n if (!m || typeof m !== 'object') continue;\n const root = (m as { root?: unknown }).root;\n if (typeof root !== 'string' || !root.trim()) continue;\n const label = (m as { label?: unknown }).label;\n const role = (m as { role?: unknown }).role;\n parsed.push({\n root: root.trim(),\n label: typeof label === 'string' ? label : undefined,\n role: role === 'primary' || role === 'member' ? role : undefined,\n });\n }\n if (!parsed.length) return { error: 'register-federation members must include at least one root' };\n return { op: 'register-federation', primaryRoot: primaryRoot.trim(), members: parsed };\n }\n if (op === 'host-status') return { op: 'host-status' };\n if (op === 'host-load') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n if (typeof modelPath !== 'string' || !modelPath.trim()) return { error: 'host-load requires modelPath' };\n return { op: 'host-load', modelPath: modelPath.trim() };\n }\n if (op === 'host-unload') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n return {\n op: 'host-unload',\n modelPath: typeof modelPath === 'string' && modelPath.trim() ? modelPath.trim() : undefined,\n };\n }\n if (op === 'host-generate') {\n const modelPath = (raw as { modelPath?: unknown }).modelPath;\n const messages = (raw as { messages?: unknown }).messages;\n if (typeof modelPath !== 'string' || !modelPath.trim()) return { error: 'host-generate requires modelPath' };\n if (!Array.isArray(messages) || messages.length === 0) return { error: 'host-generate requires messages[]' };\n const parsed: Array<{ role: string; content: string }> = [];\n for (const m of messages) {\n if (!m || typeof m !== 'object') continue;\n const role = (m as { role?: unknown }).role;\n const content = (m as { content?: unknown }).content;\n if (typeof role !== 'string' || typeof content !== 'string') continue;\n parsed.push({ role, content });\n }\n if (!parsed.length) return { error: 'host-generate messages must include role+content' };\n const grammar = (raw as { grammar?: unknown }).grammar;\n const requireGrammar = (raw as { requireGrammar?: unknown }).requireGrammar;\n const maxTokens = (raw as { maxTokens?: unknown }).maxTokens;\n const temperature = (raw as { temperature?: unknown }).temperature;\n return {\n op: 'host-generate',\n modelPath: modelPath.trim(),\n messages: parsed,\n grammar: typeof grammar === 'string' ? grammar : undefined,\n requireGrammar: requireGrammar === true,\n maxTokens: typeof maxTokens === 'number' ? maxTokens : undefined,\n temperature: typeof temperature === 'number' ? temperature : undefined,\n };\n }\n return { error: `unknown op: ${String(op)}` };\n}\n","/**\n * Multi-branch ActiveGraph cache (Fusion plan §4.1.1).\n *\n * Holds several in-memory graphs for the same repository — one per gitRef\n * (branch or detached SHA). Memory management: after an idle timeout, slots\n * become evictable; among idle slots, LILO (last-in, last-out ≡ FIFO by\n * load order) reclaims the oldest-loaded idle graph first. The currently\n * selected slot for a repository is never evicted.\n */\n\nimport type { VgGraph } from '../schema.js';\nimport { activeGraphSlotKey } from './git-ref.js';\n\n/** Default idle timeout: 20 minutes (within the 15–30 min plan band). */\nexport const DEFAULT_ACTIVE_GRAPH_IDLE_MS = 20 * 60 * 1000;\n\nexport interface ActiveGraphSlot {\n repositoryId: string;\n gitRef: string;\n graph: VgGraph;\n /** When this slot was first loaded into the cache. */\n loadedAt: number;\n /** Last access / select time. */\n lastAccessAt: number;\n /** Approximate size hint for diagnostics (node count). */\n nodeCount: number;\n}\n\nexport interface ActiveGraphCacheOptions {\n /** Idle duration before a non-selected slot is evictable (default 20 min). */\n idleTimeoutMs?: number;\n /** Max resident graphs per repositoryId (default 8). */\n maxPerRepo?: number;\n /** Max resident graphs process-wide (default 32). */\n maxTotal?: number;\n now?: () => number;\n}\n\nexport interface ActiveGraphSlotSummary {\n repositoryId: string;\n gitRef: string;\n loadedAt: number;\n lastAccessAt: number;\n nodeCount: number;\n current: boolean;\n idleMs: number;\n evictable: boolean;\n}\n\n/**\n * In-memory multi-branch graph cache. Pure structure — does not load/save disk.\n */\nexport class ActiveGraphCache {\n private readonly slots = new Map<string, ActiveGraphSlot>();\n /** repositoryId → currently selected gitRef */\n private readonly currentRef = new Map<string, string>();\n private readonly idleTimeoutMs: number;\n private readonly maxPerRepo: number;\n private readonly maxTotal: number;\n private readonly now: () => number;\n\n constructor(options: ActiveGraphCacheOptions = {}) {\n this.idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_ACTIVE_GRAPH_IDLE_MS;\n this.maxPerRepo = options.maxPerRepo ?? 8;\n this.maxTotal = options.maxTotal ?? 32;\n this.now = options.now ?? (() => Date.now());\n }\n\n size(): number {\n return this.slots.size;\n }\n\n get(repositoryId: string, gitRef: string): ActiveGraphSlot | undefined {\n const slot = this.slots.get(activeGraphSlotKey(repositoryId, gitRef));\n if (slot) {\n slot.lastAccessAt = this.now();\n }\n return slot;\n }\n\n /**\n * Insert or replace a graph for (repositoryId, gitRef). Touches access time.\n * Runs eviction if over cap.\n */\n put(repositoryId: string, gitRef: string, graph: VgGraph): ActiveGraphSlot {\n const key = activeGraphSlotKey(repositoryId, gitRef);\n const t = this.now();\n const existing = this.slots.get(key);\n const slot: ActiveGraphSlot = {\n repositoryId,\n gitRef,\n graph,\n loadedAt: existing?.loadedAt ?? t,\n lastAccessAt: t,\n nodeCount: graph.nodes?.length ?? 0,\n };\n this.slots.set(key, slot);\n if (!this.currentRef.has(repositoryId)) {\n this.currentRef.set(repositoryId, gitRef);\n }\n this.evictIfNeeded();\n return slot;\n }\n\n /**\n * Mark gitRef as the current branch for this repository and touch it.\n * Returns the slot if present.\n */\n select(repositoryId: string, gitRef: string): ActiveGraphSlot | undefined {\n this.currentRef.set(repositoryId, gitRef);\n return this.get(repositoryId, gitRef);\n }\n\n /** Currently selected gitRef for a repository, if any. */\n selectedRef(repositoryId: string): string | undefined {\n return this.currentRef.get(repositoryId);\n }\n\n current(repositoryId: string): ActiveGraphSlot | undefined {\n const ref = this.currentRef.get(repositoryId);\n if (!ref) return undefined;\n return this.get(repositoryId, ref);\n }\n\n /**\n * Drop idle slots past the timeout (LILO among idle).\n * Returns keys of removed slots.\n */\n evictIdle(now: number = this.now()): string[] {\n return this.evict(now, false);\n }\n\n /** Force eviction of idle slots when over caps (timeout may be ignored for overflow). */\n evictIfNeeded(): string[] {\n return this.evict(this.now(), true);\n }\n\n list(repositoryId?: string): ActiveGraphSlotSummary[] {\n const t = this.now();\n const out: ActiveGraphSlotSummary[] = [];\n for (const slot of this.slots.values()) {\n if (repositoryId && slot.repositoryId !== repositoryId) continue;\n const current = this.currentRef.get(slot.repositoryId) === slot.gitRef;\n const idleMs = t - slot.lastAccessAt;\n out.push({\n repositoryId: slot.repositoryId,\n gitRef: slot.gitRef,\n loadedAt: slot.loadedAt,\n lastAccessAt: slot.lastAccessAt,\n nodeCount: slot.nodeCount,\n current,\n idleMs,\n evictable: !current && idleMs >= this.idleTimeoutMs,\n });\n }\n return out.sort(\n (a, b) => a.repositoryId.localeCompare(b.repositoryId) || a.gitRef.localeCompare(b.gitRef),\n );\n }\n\n clear(): void {\n this.slots.clear();\n this.currentRef.clear();\n }\n\n private evict(now: number, forceOverflow: boolean): string[] {\n const removed: string[] = [];\n\n const removeKey = (key: string): void => {\n const slot = this.slots.get(key);\n if (!slot) return;\n this.slots.delete(key);\n removed.push(key);\n };\n\n // 1) Idle timeout: LILO among idle (earliest loadedAt first).\n const idle = this.idleCandidates(now, this.idleTimeoutMs);\n idle.sort((a, b) => a.loadedAt - b.loadedAt);\n for (const slot of idle) {\n removeKey(activeGraphSlotKey(slot.repositoryId, slot.gitRef));\n }\n\n // 2) Overflow: if still over maxPerRepo or maxTotal, LILO among any non-current idle-or-all-non-current.\n if (forceOverflow) {\n while (this.slots.size > this.maxTotal) {\n const victim = this.pickLiloVictim(now, /* requireIdleTimeout */ false);\n if (!victim) break;\n removeKey(activeGraphSlotKey(victim.repositoryId, victim.gitRef));\n }\n // Per-repo caps\n const byRepo = new Map<string, ActiveGraphSlot[]>();\n for (const s of this.slots.values()) {\n const list = byRepo.get(s.repositoryId) ?? [];\n list.push(s);\n byRepo.set(s.repositoryId, list);\n }\n for (const [repoId, list] of byRepo) {\n if (list.length <= this.maxPerRepo) continue;\n const nonCurrent = list\n .filter((s) => this.currentRef.get(repoId) !== s.gitRef)\n .sort((a, b) => a.loadedAt - b.loadedAt);\n let excess = list.length - this.maxPerRepo;\n for (const s of nonCurrent) {\n if (excess <= 0) break;\n removeKey(activeGraphSlotKey(s.repositoryId, s.gitRef));\n excess--;\n }\n }\n }\n\n return removed;\n }\n\n private idleCandidates(now: number, timeoutMs: number): ActiveGraphSlot[] {\n const out: ActiveGraphSlot[] = [];\n for (const slot of this.slots.values()) {\n if (this.currentRef.get(slot.repositoryId) === slot.gitRef) continue;\n if (now - slot.lastAccessAt >= timeoutMs) out.push(slot);\n }\n return out;\n }\n\n private pickLiloVictim(now: number, requireIdleTimeout: boolean): ActiveGraphSlot | null {\n let best: ActiveGraphSlot | null = null;\n for (const slot of this.slots.values()) {\n if (this.currentRef.get(slot.repositoryId) === slot.gitRef) continue;\n if (requireIdleTimeout && now - slot.lastAccessAt < this.idleTimeoutMs) continue;\n if (!best || slot.loadedAt < best.loadedAt) best = slot;\n }\n return best;\n }\n}\n","import * as path from 'node:path';\nimport { repositoryIdFromRoot, globalGraphPathForRef, globalGraphPath } from '../paths.js';\nimport { detectGitRef } from '../git-ref.js';\nimport { ActiveGraphCache } from '../active-graph-cache.js';\nimport type { WorkspaceRecord } from './protocol.js';\nimport type { VgGraph } from '../../schema.js';\n\n/**\n * In-memory workspace registry for the vgd prototype.\n *\n * Tracks which repository roots the daemon knows about and where their\n * graphs live. Holds a multi-branch {@link ActiveGraphCache} so several\n * git refs of the same repo can stay warm (Fusion §4.1.1).\n */\nexport class WorkspaceRegistry {\n private readonly byId = new Map<string, WorkspaceRecord>();\n /** Multi-branch in-memory graphs (shared across registered workspaces). */\n readonly graphs = new ActiveGraphCache();\n\n register(\n root: string,\n now: () => Date = () => new Date(),\n meta: { label?: string; role?: 'primary' | 'member'; gitRef?: string } = {},\n ): WorkspaceRecord {\n const resolved = path.resolve(root);\n const id = repositoryIdFromRoot(resolved);\n const git = meta.gitRef ? { ref: meta.gitRef, kind: 'branch' as const } : detectGitRef(resolved);\n const graphPath =\n git.kind !== 'none' && git.ref ? globalGraphPathForRef(resolved, git.ref) : globalGraphPath(resolved);\n const record: WorkspaceRecord = {\n id,\n root: resolved,\n graphPath,\n registeredAt: now().toISOString(),\n label: meta.label,\n role: meta.role,\n gitRef: git.ref || undefined,\n };\n this.byId.set(id, record);\n if (git.ref) this.graphs.select(id, git.ref);\n return record;\n }\n\n /**\n * Activate or insert an in-memory graph for a workspace branch.\n * Call after load/build; runs LILO idle eviction as needed.\n */\n putGraph(repositoryId: string, gitRef: string, graph: VgGraph): void {\n this.graphs.put(repositoryId, gitRef, graph);\n this.graphs.select(repositoryId, gitRef);\n }\n\n /** Switch the current branch slot for a repository (no load). */\n selectGitRef(repositoryId: string, gitRef: string): void {\n this.graphs.select(repositoryId, gitRef);\n }\n\n /** Register every member of a federation (primary + members). */\n registerFederation(\n members: Array<{ root: string; label?: string; role?: 'primary' | 'member' }>,\n now: () => Date = () => new Date(),\n ): WorkspaceRecord[] {\n return members.map((m) => this.register(m.root, now, { label: m.label, role: m.role }));\n }\n\n unregister(root: string): boolean {\n const id = repositoryIdFromRoot(path.resolve(root));\n return this.byId.delete(id);\n }\n\n list(): WorkspaceRecord[] {\n return [...this.byId.values()].sort((a, b) => a.root.localeCompare(b.root));\n }\n\n get(root: string): WorkspaceRecord | undefined {\n return this.byId.get(repositoryIdFromRoot(path.resolve(root)));\n }\n\n /** Lookup by stable repository id. */\n getById(repositoryId: string): WorkspaceRecord | undefined {\n return this.byId.get(repositoryId);\n }\n\n size(): number {\n return this.byId.size;\n }\n\n /**\n * Resolve an ActiveGraph for query/impact: prefer the named gitRef, else the\n * selected current slot, else any warm slot for the repository.\n */\n resolveGraph(repositoryId: string, gitRef?: string): { graph: VgGraph; gitRef: string } | null {\n if (gitRef) {\n const slot = this.graphs.get(repositoryId, gitRef);\n if (slot) return { graph: slot.graph, gitRef: slot.gitRef };\n }\n const current = this.graphs.current(repositoryId);\n if (current) return { graph: current.graph, gitRef: current.gitRef };\n // Fall back to any warm slot for this repo (deterministic: earliest loaded).\n const any = this.graphs\n .list(repositoryId)\n .slice()\n .sort((a, b) => a.loadedAt - b.loadedAt)[0];\n if (any) {\n const slot = this.graphs.get(repositoryId, any.gitRef);\n if (slot) return { graph: slot.graph, gitRef: slot.gitRef };\n }\n return null;\n }\n}\n","/**\n * Model host broker inside vgd (Approach B / B4 + P4 multi-client).\n *\n * Long-lived daemon process can keep warm llama.cpp sessions so CLI and IDE\n * clients share one loaded model. Management (which pack/mode) stays in the\n * client/orchestrator; vgd only loads paths the client requests and generates.\n *\n * P4: clients acquire/release leases per model path so unload is refcounted\n * (one IDE + CLI can share a warm model without the first exit killing it).\n *\n * Binding is injected (never static node-llama-cpp import).\n */\n\nimport {\n acquireHostSession,\n clearHostSessionPool,\n dropHostSession,\n evictIdleSessions,\n generateOnSession,\n hostSessionPoolSize,\n listHostSessions,\n type HostGenerateReport,\n type HostSessionInfo,\n} from '../llm-host/session.js';\nimport type { LlmChatMessage, LlmGenerateOptions } from '../llm-host/types.js';\n\nexport interface HostBrokerStatus {\n poolSize: number;\n loadedModels: string[];\n bindingReady: boolean;\n /** Per-path client lease counts (P4). */\n leases: Record<string, number>;\n sessions: HostSessionInfo[];\n}\n\nexport interface HostClientLease {\n clientId: string;\n modelPath: string;\n}\n\nexport class VgdHostBroker {\n private binding: unknown | null = null;\n private readonly loaded = new Set<string>();\n /** modelPath → set of client ids holding a lease. */\n private readonly leases = new Map<string, Set<string>>();\n\n setBinding(lib: unknown | null): void {\n this.binding = lib;\n }\n\n hasBinding(): boolean {\n return this.binding != null;\n }\n\n status(): HostBrokerStatus {\n const leases: Record<string, number> = {};\n for (const [path, clients] of this.leases) {\n leases[path] = clients.size;\n }\n return {\n poolSize: hostSessionPoolSize(),\n loadedModels: [...this.loaded],\n bindingReady: this.binding != null,\n leases,\n sessions: listHostSessions(),\n };\n }\n\n /**\n * Load weights and optionally register a client lease (P4 multi-client).\n * When clientId is omitted, behaves like a one-shot load (no lease bookkeeping).\n */\n async load(\n modelPath: string,\n clientId?: string,\n ): Promise<{ ok: true; modelPath: string; leases: number } | { ok: false; error: string }> {\n if (!this.binding) {\n return { ok: false, error: 'host binding not configured — start vgd with llama runtime or attach binding' };\n }\n try {\n await acquireHostSession(this.binding, modelPath);\n this.loaded.add(modelPath);\n if (clientId) {\n let set = this.leases.get(modelPath);\n if (!set) {\n set = new Set();\n this.leases.set(modelPath, set);\n }\n set.add(clientId);\n }\n evictIdleSessions(4);\n return { ok: true, modelPath, leases: this.leases.get(modelPath)?.size ?? 0 };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n }\n\n /**\n * Release a client lease. When the last lease is released, drop the warm\n * session for that path. Without clientId, clears all leases for the path\n * (or entire pool if modelPath omitted).\n */\n async unload(\n modelPath?: string,\n clientId?: string,\n ): Promise<{ ok: true; cleared: number; remainingLeases: number }> {\n if (!modelPath) {\n const n = hostSessionPoolSize();\n clearHostSessionPool();\n this.loaded.clear();\n this.leases.clear();\n return { ok: true, cleared: n, remainingLeases: 0 };\n }\n\n if (clientId) {\n const set = this.leases.get(modelPath);\n if (set) {\n set.delete(clientId);\n if (set.size === 0) this.leases.delete(modelPath);\n }\n const remaining = this.leases.get(modelPath)?.size ?? 0;\n if (remaining === 0) {\n const dropped = dropHostSession(modelPath) ? 1 : 0;\n this.loaded.delete(modelPath);\n return { ok: true, cleared: dropped, remainingLeases: 0 };\n }\n return { ok: true, cleared: 0, remainingLeases: remaining };\n }\n\n // No clientId: force drop path (all leases).\n this.leases.delete(modelPath);\n const dropped = dropHostSession(modelPath) ? 1 : 0;\n this.loaded.delete(modelPath);\n return { ok: true, cleared: dropped, remainingLeases: 0 };\n }\n\n /** How many clients hold a lease on modelPath. */\n leaseCount(modelPath: string): number {\n return this.leases.get(modelPath)?.size ?? 0;\n }\n\n async generate(\n modelPath: string,\n messages: LlmChatMessage[],\n opts?: LlmGenerateOptions,\n ): Promise<{ ok: true; result: HostGenerateReport } | { ok: false; error: string }> {\n if (!this.binding) {\n return { ok: false, error: 'host binding not configured' };\n }\n try {\n const session = await acquireHostSession(this.binding, modelPath);\n this.loaded.add(modelPath);\n const result = await generateOnSession(session, messages, {\n grammar: opts?.grammar,\n requireGrammar: opts?.requireGrammar,\n identifierTrie: opts?.identifierTrie,\n annotateUnknownIdentifiers: opts?.annotateUnknownIdentifiers,\n draftCandidates: opts?.draftCandidates,\n maxTokens: opts?.maxTokens,\n temperature: opts?.temperature,\n promptSegments: opts?.promptSegments,\n });\n return { ok: true, result };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n }\n}\n\n/** Process-wide broker for the running vgd (tests may replace). */\nlet defaultBroker: VgdHostBroker | null = null;\n\nexport function getVgdHostBroker(): VgdHostBroker {\n if (!defaultBroker) defaultBroker = new VgdHostBroker();\n return defaultBroker;\n}\n\nexport function resetVgdHostBroker(): void {\n defaultBroker = null;\n clearHostSessionPool();\n}\n","import * as fs from 'node:fs';\nimport * as net from 'node:net';\nimport * as path from 'node:path';\nimport { VGD_PROTOCOL_VERSION, parseRequest, type VgdResponse } from './protocol.js';\nimport { WorkspaceRegistry } from './registry.js';\nimport { vgdPidPath, vgdSocketPath } from './paths.js';\nimport { parseGraph } from '../../engine/serialize.js';\nimport { queryGraph } from '../../engine/query.js';\nimport { impactOf } from '../../engine/impact.js';\nimport { resolveOne } from '../../engine/lookup.js';\nimport { getVgdHostBroker, type VgdHostBroker } from './host-broker.js';\nimport type { VgGraph } from '../../schema.js';\n\nexport interface VgdServerOptions {\n /** Override socket path (tests). */\n socketPath?: string;\n /** Override PID path (tests). */\n pidPath?: string;\n registry?: WorkspaceRegistry;\n now?: () => Date;\n /** Process id recorded in status / pid file (tests). */\n pid?: number;\n /** Inject host broker (tests); default process-wide broker. */\n hostBroker?: VgdHostBroker;\n}\n\nexport interface VgdServer {\n readonly socketPath: string;\n readonly registry: WorkspaceRegistry;\n /** Wall time when the server started listening. */\n readonly startedAt: number;\n close(): Promise<void>;\n}\n\n/**\n * Start a line-delimited JSON daemon on the local vgd socket.\n * Creates the daemon directory; removes a stale Unix socket file if present.\n */\nexport async function startVgdServer(options: VgdServerOptions = {}): Promise<VgdServer> {\n const socketPath = options.socketPath ?? vgdSocketPath();\n const pidPath = options.pidPath ?? vgdPidPath();\n const registry = options.registry ?? new WorkspaceRegistry();\n const hostBroker = options.hostBroker ?? getVgdHostBroker();\n const now = options.now ?? (() => new Date());\n const pid = options.pid ?? process.pid;\n const startedAt = Date.now();\n\n // Unix sockets need a free path; named pipes on Windows are cleaned by the OS.\n if (!socketPath.startsWith('\\\\\\\\.\\\\pipe')) {\n fs.mkdirSync(path.dirname(socketPath), { recursive: true });\n try {\n fs.unlinkSync(socketPath);\n } catch {\n /* nothing to remove */\n }\n } else {\n fs.mkdirSync(path.dirname(pidPath), { recursive: true });\n }\n\n const server = net.createServer((socket) => {\n let buffer = '';\n socket.setEncoding('utf8');\n socket.on('data', (chunk: string) => {\n buffer += chunk;\n let nl: number;\n while ((nl = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, nl).trim();\n buffer = buffer.slice(nl + 1);\n if (!line) continue;\n void Promise.resolve(handleLine(line, { registry, hostBroker, now, pid, startedAt, socketPath })).then(\n (response) => {\n socket.write(JSON.stringify(response) + '\\n');\n },\n );\n }\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen(socketPath, () => {\n server.off('error', reject);\n resolve();\n });\n });\n\n try {\n fs.mkdirSync(path.dirname(pidPath), { recursive: true });\n fs.writeFileSync(pidPath, `${pid}\\n`, 'utf8');\n } catch {\n /* pid file is best-effort */\n }\n\n return {\n socketPath,\n registry,\n startedAt,\n async close() {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n try {\n fs.unlinkSync(pidPath);\n } catch {\n /* gone */\n }\n if (!socketPath.startsWith('\\\\\\\\.\\\\pipe')) {\n try {\n fs.unlinkSync(socketPath);\n } catch {\n /* gone */\n }\n }\n },\n };\n}\n\nasync function handleLine(\n line: string,\n ctx: {\n registry: WorkspaceRegistry;\n hostBroker: VgdHostBroker;\n now: () => Date;\n pid: number;\n startedAt: number;\n socketPath: string;\n },\n): Promise<VgdResponse> {\n const req = parseRequest(line);\n if ('error' in req) return { ok: false, error: req.error, code: 'bad_request' };\n\n switch (req.op) {\n case 'ping':\n return { ok: true, pong: true, version: VGD_PROTOCOL_VERSION };\n case 'status':\n return {\n ok: true,\n pid: ctx.pid,\n uptimeMs: Date.now() - ctx.startedAt,\n workspaces: ctx.registry.size(),\n graphSlots: ctx.registry.graphs.size(),\n version: VGD_PROTOCOL_VERSION,\n socketPath: ctx.socketPath,\n };\n case 'host-status':\n return { ok: true, host: ctx.hostBroker.status() };\n case 'host-load': {\n const r = await ctx.hostBroker.load(req.modelPath);\n if (!r.ok) return { ok: false, error: r.error, code: 'host_error' };\n return { ok: true, hostLoaded: true, modelPath: r.modelPath };\n }\n case 'host-unload': {\n const r = await ctx.hostBroker.unload(req.modelPath);\n return { ok: true, hostUnloaded: true, cleared: r.cleared };\n }\n case 'host-generate': {\n const r = await ctx.hostBroker.generate(\n req.modelPath,\n req.messages.map((m) => ({\n role: (m.role === 'system' || m.role === 'assistant' ? m.role : 'user') as 'system' | 'user' | 'assistant',\n content: m.content,\n })),\n {\n grammar: req.grammar,\n requireGrammar: req.requireGrammar,\n maxTokens: req.maxTokens,\n temperature: req.temperature,\n },\n );\n if (!r.ok) return { ok: false, error: r.error, code: 'host_error' };\n return {\n ok: true,\n hostGenerated: true,\n text: r.result.text,\n model: r.result.model,\n constrained: r.result.constrained,\n grammarApplied: r.result.grammarApplied,\n draftAcceptedChars: r.result.draftAcceptedChars,\n latencyMs: r.result.latencyMs,\n unknownIdentifiers: r.result.unknownIdentifiers,\n };\n }\n case 'list':\n return { ok: true, workspaces: ctx.registry.list() };\n case 'register':\n return {\n ok: true,\n workspace: ctx.registry.register(req.root, ctx.now, { label: req.label, role: req.role }),\n };\n case 'unregister':\n return { ok: true, removed: ctx.registry.unregister(req.root) };\n case 'register-federation': {\n const workspaces = ctx.registry.registerFederation(req.members, ctx.now);\n return { ok: true, workspaces, federation: true };\n }\n case 'list-graph-slots': {\n ctx.registry.graphs.evictIdle();\n return { ok: true, slots: ctx.registry.graphs.list(req.repositoryId) };\n }\n case 'select-git-ref': {\n ctx.registry.selectGitRef(req.repositoryId, req.gitRef);\n return { ok: true, selected: true, repositoryId: req.repositoryId, gitRef: req.gitRef };\n }\n case 'put-graph': {\n try {\n const graph = parseGraph(JSON.stringify(req.graph));\n ctx.registry.putGraph(req.repositoryId, req.gitRef, graph);\n return {\n ok: true,\n stored: true,\n repositoryId: req.repositoryId,\n gitRef: req.gitRef,\n nodeCount: graph.nodes?.length ?? 0,\n };\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e.message : 'invalid graph', code: 'bad_graph' };\n }\n }\n case 'query-graph': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const result = queryGraph(resolved.graph, req.query, { limit: req.limit ?? 12, budget: 2000 });\n return {\n ok: true,\n query: req.query,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n matches: result.matches.slice(0, req.limit ?? 12).map((m) => ({\n id: m.node.id,\n qualifiedName: m.node.qualifiedName,\n kind: m.node.kind,\n file: m.node.file,\n line: m.node.span?.start ?? 0,\n score: m.score,\n why: m.why,\n })),\n tokensEstimate: result.tokensEstimate,\n };\n }\n case 'impact-of': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const node = resolveSymbol(resolved.graph, req.symbol);\n if (!node) {\n return { ok: false, error: `symbol not found: ${req.symbol}`, code: 'not_found' };\n }\n const impact = impactOf(resolved.graph, node.id, { depth: req.depth ?? 4 });\n return {\n ok: true,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n symbol: req.symbol,\n root: impact.root,\n depth: impact.depth,\n affected: impact.affected.slice(0, 40).map((a) => ({\n id: a.id,\n name: a.name,\n kind: a.kind,\n file: a.file,\n line: a.line,\n depth: a.depth,\n confidence: a.confidence,\n })),\n direct: impact.direct,\n transitive: impact.transitive,\n };\n }\n case 'graph-summary': {\n const resolved = ctx.registry.resolveGraph(req.repositoryId, req.gitRef);\n if (!resolved) {\n return { ok: false, error: 'no ActiveGraph loaded for repository — put-graph first', code: 'no_graph' };\n }\n const g = resolved.graph;\n return {\n ok: true,\n repositoryId: req.repositoryId,\n gitRef: resolved.gitRef,\n summary: {\n nodeCount: g.nodes?.length ?? 0,\n edgeCount: g.edges?.length ?? 0,\n languages: g.meta?.languages ?? [],\n corpusHash: g.provenance?.corpusHash ?? null,\n root: g.meta?.root ?? null,\n },\n };\n }\n }\n}\n\nfunction resolveSymbol(graph: VgGraph, symbol: string): { id: string } | null {\n // Prefer exact id, then qualified-name / short-name lookup.\n if (graph.nodes.some((n) => n.id === symbol)) return { id: symbol };\n const hit = resolveOne(graph, symbol);\n if (hit.node?.id) return { id: hit.node.id };\n if (hit.candidates.length === 1 && hit.candidates[0]?.id) return { id: hit.candidates[0].id };\n const q = symbol.toLowerCase();\n const byQn = graph.nodes.find((n) => n.qualifiedName?.toLowerCase() === q || n.name?.toLowerCase() === q);\n return byQn ? { id: byQn.id } : null;\n}\n","/**\n * Branch-aware graph loading for a single repository worktree (Fusion §4.1.1).\n *\n * Combines {@link detectGitRef}, disk load via {@link loadGraph}, and an\n * {@link ActiveGraphCache} so checkout A → B → A reuses a warm in-memory map\n * when the branch is still resident (LILO idle eviction applies).\n */\n\nimport { loadGraph } from '../engine/load.js';\nimport { repositoryIdFromRoot } from './paths.js';\nimport { detectGitRef, type GitRunner } from './git-ref.js';\nimport { ActiveGraphCache } from './active-graph-cache.js';\nimport type { VgGraph } from '../schema.js';\n\nexport interface BranchGraphLoadResult {\n graph: VgGraph | null;\n gitRef: string;\n kind: 'branch' | 'detached' | 'none';\n /** True when the selected ActiveGraph slot changed since the previous ensure. */\n switched: boolean;\n /** True when the graph was served from the in-memory cache. */\n fromCache: boolean;\n repositoryId: string;\n}\n\nexport interface BranchGraphSessionOptions {\n root: string;\n cache?: ActiveGraphCache;\n /** Optional explicit graph path (CLI `--graph`); bypasses branch keying for disk. */\n graphPath?: string;\n detectGit?: typeof detectGitRef;\n load?: typeof loadGraph;\n gitRun?: GitRunner;\n}\n\n/**\n * Stateful helper: call {@link ensureCurrent} at session start and before each\n * agent turn so a mid-session `git checkout` picks up the correct map.\n */\nexport class BranchGraphSession {\n readonly root: string;\n readonly repositoryId: string;\n readonly cache: ActiveGraphCache;\n private readonly graphPath?: string;\n private readonly detectGit: typeof detectGitRef;\n private readonly load: typeof loadGraph;\n private readonly gitRun?: GitRunner;\n private lastRef = '';\n\n constructor(options: BranchGraphSessionOptions) {\n this.root = options.root;\n this.repositoryId = repositoryIdFromRoot(options.root);\n this.cache = options.cache ?? new ActiveGraphCache();\n this.graphPath = options.graphPath;\n this.detectGit = options.detectGit ?? detectGitRef;\n this.load = options.load ?? loadGraph;\n this.gitRun = options.gitRun;\n }\n\n /**\n * Resolve HEAD, activate the matching cache slot (or load from disk), and\n * run idle eviction. Returns null graph when no map exists for this ref.\n */\n ensureCurrent(): BranchGraphLoadResult {\n this.cache.evictIdle();\n const info = this.gitRun ? this.detectGit(this.root, this.gitRun) : this.detectGit(this.root);\n const gitRef = info.ref || 'unknown';\n const switched = this.lastRef !== '' && this.lastRef !== gitRef;\n this.lastRef = gitRef;\n\n // Explicit --graph path: still track ref for cache identity but load that file.\n if (this.graphPath) {\n const graph = this.load(this.root, this.graphPath);\n if (graph) {\n this.cache.put(this.repositoryId, gitRef, graph);\n this.cache.select(this.repositoryId, gitRef);\n }\n return {\n graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: false,\n repositoryId: this.repositoryId,\n };\n }\n\n const warm = this.cache.get(this.repositoryId, gitRef);\n if (warm) {\n this.cache.select(this.repositoryId, gitRef);\n return {\n graph: warm.graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: true,\n repositoryId: this.repositoryId,\n };\n }\n\n const graph = this.load(this.root);\n if (graph) {\n this.cache.put(this.repositoryId, gitRef, graph);\n this.cache.select(this.repositoryId, gitRef);\n }\n return {\n graph,\n gitRef,\n kind: info.kind,\n switched,\n fromCache: false,\n repositoryId: this.repositoryId,\n };\n }\n\n /** Diagnostics for daemon status / tests. */\n listSlots() {\n return this.cache.list(this.repositoryId);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { startVgdServer } from './chunk-EVWW3BPM.js';
1
+ import { startVgdServer } from './chunk-2JV3J5NF.js';
2
2
  import { vgdIsRunning, vgdRequest } from './chunk-PMYWZRRS.js';
3
3
 
4
4
  // src/code/runtime-session.ts
@@ -78,5 +78,5 @@ function noneSession() {
78
78
  }
79
79
 
80
80
  export { startCodeRuntimeSession };
81
- //# sourceMappingURL=chunk-DBOT2ELH.js.map
82
- //# sourceMappingURL=chunk-DBOT2ELH.js.map
81
+ //# sourceMappingURL=chunk-3IJB5UJI.js.map
82
+ //# sourceMappingURL=chunk-3IJB5UJI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/code/runtime-session.ts"],"names":[],"mappings":"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","file":"chunk-DBOT2ELH.js","sourcesContent":["/**\n * Session boundary between VG Code and the Fusion Runtime daemon (`vgd`).\n *\n * Replaces the old {@link GraphProcess} (`vg serve` child) for the interactive\n * coding REPL. Behaviour:\n *\n * 1. If a local vgd is already running — register this workspace and leave the\n * daemon running when the session ends (unregister only).\n * 2. Otherwise — start an **in-process** vgd for the life of the session and\n * tear it down on dispose. No second OS process, no `vg serve` spawn.\n *\n * Never throws: a failure to attach degrades to “no runtime session” and the\n * agent continues with the in-process graph only (same safety as GraphProcess).\n */\n\nimport { startVgdServer, vgdIsRunning, vgdRequest, type VgdServer } from '../runtime/vgd/index.js';\nimport type { WorkspaceRecord } from '../runtime/vgd/protocol.js';\n\nexport type RuntimeSessionKind = 'attached' | 'owned' | 'none';\n\nexport interface RuntimeSessionOptions {\n root: string;\n /** Override socket path (tests). */\n socketPath?: string;\n /** Injectable connect/start hooks (tests). */\n isRunning?: (socketPath?: string) => Promise<boolean>;\n request?: typeof vgdRequest;\n startServer?: (opts: { socketPath?: string }) => Promise<VgdServer>;\n}\n\nexport interface CodeRuntimeSession {\n readonly kind: RuntimeSessionKind;\n /** Daemon pid when known (attached status or owned process). */\n readonly pid: number | undefined;\n readonly workspace: WorkspaceRecord | undefined;\n readonly socketPath: string | undefined;\n /** Human label for the REPL intro line. */\n readonly label: string;\n dispose(): Promise<void>;\n}\n\n/**\n * Attach VG Code to vgd for one coding session. Always resolves (never throws).\n */\nexport async function startCodeRuntimeSession(options: RuntimeSessionOptions): Promise<CodeRuntimeSession> {\n const socketPath = options.socketPath;\n const isRunning = options.isRunning ?? ((sp?: string) => vgdIsRunning({ socketPath: sp }));\n const request = options.request ?? vgdRequest;\n const startServer = options.startServer ?? ((opts: { socketPath?: string }) => startVgdServer(opts));\n\n try {\n if (await isRunning(socketPath)) {\n return await attachExisting(options.root, socketPath, request);\n }\n return await startOwned(options.root, socketPath, startServer, request);\n } catch {\n return noneSession();\n }\n}\n\nasync function attachExisting(\n root: string,\n socketPath: string | undefined,\n request: typeof vgdRequest,\n): Promise<CodeRuntimeSession> {\n const clientOpts = { socketPath };\n const reg = await request({ op: 'register', root }, clientOpts);\n if (!reg.ok || !('workspace' in reg)) return noneSession();\n const status = await request({ op: 'status' }, clientOpts).catch(() => null);\n const pid = status && status.ok && 'pid' in status ? status.pid : undefined;\n let disposed = false;\n return {\n kind: 'attached',\n pid,\n workspace: reg.workspace,\n socketPath: status && status.ok && 'socketPath' in status ? status.socketPath : socketPath,\n label: pid != null ? `vgd ${pid}` : 'vgd',\n async dispose() {\n if (disposed) return;\n disposed = true;\n try {\n await request({ op: 'unregister', root }, clientOpts);\n } catch {\n /* best-effort */\n }\n },\n };\n}\n\nasync function startOwned(\n root: string,\n socketPath: string | undefined,\n startServer: (opts: { socketPath?: string }) => Promise<VgdServer>,\n request: typeof vgdRequest,\n): Promise<CodeRuntimeSession> {\n const server = await startServer({ socketPath });\n const clientOpts = { socketPath: server.socketPath };\n let workspace: WorkspaceRecord | undefined;\n try {\n const reg = await request({ op: 'register', root }, clientOpts);\n if (reg.ok && 'workspace' in reg) workspace = reg.workspace;\n } catch {\n /* registry optional for an empty session */\n }\n let disposed = false;\n return {\n kind: 'owned',\n pid: process.pid,\n workspace,\n socketPath: server.socketPath,\n label: `vgd (session)`,\n async dispose() {\n if (disposed) return;\n disposed = true;\n try {\n await server.close();\n } catch {\n /* best-effort */\n }\n },\n };\n}\n\nfunction noneSession(): CodeRuntimeSession {\n return {\n kind: 'none',\n pid: undefined,\n workspace: undefined,\n socketPath: undefined,\n label: '',\n async dispose() {\n /* no-op */\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/code/runtime-session.ts"],"names":[],"mappings":";;;;AA4CA,eAAsB,wBAAwB,OAAA,EAA6D;AACzG,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,KAAc,CAAC,OAAgB,YAAA,CAAa,EAAE,UAAA,EAAY,EAAA,EAAI,CAAA,CAAA;AACxF,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,UAAA;AACnC,EAAA,MAAM,cAAc,OAAA,CAAQ,WAAA,KAAgB,CAAC,IAAA,KAAkC,eAAe,IAAI,CAAA,CAAA;AAElG,EAAA,IAAI;AACF,IAAA,IAAI,MAAM,SAAA,CAAU,UAAU,CAAA,EAAG;AAC/B,MAAA,OAAO,MAAM,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,YAAY,OAAO,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,MAAM,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,UAAA,EAAY,aAAa,OAAO,CAAA;AAAA,EACxE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,eAAe,cAAA,CACb,IAAA,EACA,UAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,UAAA,GAAa,EAAE,UAAA,EAAW;AAChC,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,EAAE,IAAI,UAAA,EAAY,IAAA,IAAQ,UAAU,CAAA;AAC9D,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,IAAM,EAAE,WAAA,IAAe,GAAA,CAAA,SAAa,WAAA,EAAY;AACzD,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,EAAE,EAAA,EAAI,QAAA,EAAS,EAAG,UAAU,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC3E,EAAA,MAAM,MAAM,MAAA,IAAU,MAAA,CAAO,MAAM,KAAA,IAAS,MAAA,GAAS,OAAO,GAAA,GAAM,MAAA;AAClE,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,GAAA;AAAA,IACA,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,YAAY,MAAA,IAAU,MAAA,CAAO,MAAM,YAAA,IAAgB,MAAA,GAAS,OAAO,UAAA,GAAa,UAAA;AAAA,IAChF,KAAA,EAAO,GAAA,IAAO,IAAA,GAAO,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,KAAA;AAAA,IACpC,MAAM,OAAA,GAAU;AACd,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAI;AACF,QAAA,MAAM,QAAQ,EAAE,EAAA,EAAI,YAAA,EAAc,IAAA,IAAQ,UAAU,CAAA;AAAA,MACtD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,GACF;AACF;AAEA,eAAe,UAAA,CACb,IAAA,EACA,UAAA,EACA,WAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAE,YAAY,CAAA;AAC/C,EAAA,MAAM,UAAA,GAAa,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAW;AACnD,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,EAAE,IAAI,UAAA,EAAY,IAAA,IAAQ,UAAU,CAAA;AAC9D,IAAA,IAAI,GAAA,CAAI,EAAA,IAAM,WAAA,IAAe,GAAA,cAAiB,GAAA,CAAI,SAAA;AAAA,EACpD,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA;AAAA,IACA,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,KAAA,EAAO,CAAA,aAAA,CAAA;AAAA,IACP,MAAM,OAAA,GAAU;AACd,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,KAAA,EAAM;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,WAAA,GAAkC;AACzC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,SAAA,EAAW,MAAA;AAAA,IACX,UAAA,EAAY,MAAA;AAAA,IACZ,KAAA,EAAO,EAAA;AAAA,IACP,MAAM,OAAA,GAAU;AAAA,IAEhB;AAAA,GACF;AACF","file":"chunk-3IJB5UJI.js","sourcesContent":["/**\n * Session boundary between VG Code and the Fusion Runtime daemon (`vgd`).\n *\n * Replaces the old {@link GraphProcess} (`vg serve` child) for the interactive\n * coding REPL. Behaviour:\n *\n * 1. If a local vgd is already running — register this workspace and leave the\n * daemon running when the session ends (unregister only).\n * 2. Otherwise — start an **in-process** vgd for the life of the session and\n * tear it down on dispose. No second OS process, no `vg serve` spawn.\n *\n * Never throws: a failure to attach degrades to “no runtime session” and the\n * agent continues with the in-process graph only (same safety as GraphProcess).\n */\n\nimport { startVgdServer, vgdIsRunning, vgdRequest, type VgdServer } from '../runtime/vgd/index.js';\nimport type { WorkspaceRecord } from '../runtime/vgd/protocol.js';\n\nexport type RuntimeSessionKind = 'attached' | 'owned' | 'none';\n\nexport interface RuntimeSessionOptions {\n root: string;\n /** Override socket path (tests). */\n socketPath?: string;\n /** Injectable connect/start hooks (tests). */\n isRunning?: (socketPath?: string) => Promise<boolean>;\n request?: typeof vgdRequest;\n startServer?: (opts: { socketPath?: string }) => Promise<VgdServer>;\n}\n\nexport interface CodeRuntimeSession {\n readonly kind: RuntimeSessionKind;\n /** Daemon pid when known (attached status or owned process). */\n readonly pid: number | undefined;\n readonly workspace: WorkspaceRecord | undefined;\n readonly socketPath: string | undefined;\n /** Human label for the REPL intro line. */\n readonly label: string;\n dispose(): Promise<void>;\n}\n\n/**\n * Attach VG Code to vgd for one coding session. Always resolves (never throws).\n */\nexport async function startCodeRuntimeSession(options: RuntimeSessionOptions): Promise<CodeRuntimeSession> {\n const socketPath = options.socketPath;\n const isRunning = options.isRunning ?? ((sp?: string) => vgdIsRunning({ socketPath: sp }));\n const request = options.request ?? vgdRequest;\n const startServer = options.startServer ?? ((opts: { socketPath?: string }) => startVgdServer(opts));\n\n try {\n if (await isRunning(socketPath)) {\n return await attachExisting(options.root, socketPath, request);\n }\n return await startOwned(options.root, socketPath, startServer, request);\n } catch {\n return noneSession();\n }\n}\n\nasync function attachExisting(\n root: string,\n socketPath: string | undefined,\n request: typeof vgdRequest,\n): Promise<CodeRuntimeSession> {\n const clientOpts = { socketPath };\n const reg = await request({ op: 'register', root }, clientOpts);\n if (!reg.ok || !('workspace' in reg)) return noneSession();\n const status = await request({ op: 'status' }, clientOpts).catch(() => null);\n const pid = status && status.ok && 'pid' in status ? status.pid : undefined;\n let disposed = false;\n return {\n kind: 'attached',\n pid,\n workspace: reg.workspace,\n socketPath: status && status.ok && 'socketPath' in status ? status.socketPath : socketPath,\n label: pid != null ? `vgd ${pid}` : 'vgd',\n async dispose() {\n if (disposed) return;\n disposed = true;\n try {\n await request({ op: 'unregister', root }, clientOpts);\n } catch {\n /* best-effort */\n }\n },\n };\n}\n\nasync function startOwned(\n root: string,\n socketPath: string | undefined,\n startServer: (opts: { socketPath?: string }) => Promise<VgdServer>,\n request: typeof vgdRequest,\n): Promise<CodeRuntimeSession> {\n const server = await startServer({ socketPath });\n const clientOpts = { socketPath: server.socketPath };\n let workspace: WorkspaceRecord | undefined;\n try {\n const reg = await request({ op: 'register', root }, clientOpts);\n if (reg.ok && 'workspace' in reg) workspace = reg.workspace;\n } catch {\n /* registry optional for an empty session */\n }\n let disposed = false;\n return {\n kind: 'owned',\n pid: process.pid,\n workspace,\n socketPath: server.socketPath,\n label: `vgd (session)`,\n async dispose() {\n if (disposed) return;\n disposed = true;\n try {\n await server.close();\n } catch {\n /* best-effort */\n }\n },\n };\n}\n\nfunction noneSession(): CodeRuntimeSession {\n return {\n kind: 'none',\n pid: undefined,\n workspace: undefined,\n socketPath: undefined,\n label: '',\n async dispose() {\n /* no-op */\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { runCoreScan, compactUiPurpose } from './chunk-4JD63RUR.js';
1
+ import { runCoreScan, compactUiPurpose } from './chunk-OIWHR57Q.js';
2
2
  import { writeJsonFile } from './chunk-CRAMOEBE.js';
3
3
  import { findPackageJsonFiles, readJsonFile, findFiles, readTextFile, pathExists } from './chunk-GI6W53LM.js';
4
4
  import * as path3 from 'path';
@@ -4356,5 +4356,5 @@ var baselineCommand = new Command("baseline").description("Create a drift baseli
4356
4356
  });
4357
4357
 
4358
4358
  export { baselineCommand, loadAdvancedScanHook, runBaseline };
4359
- //# sourceMappingURL=chunk-SGI5ZP2Y.js.map
4360
- //# sourceMappingURL=chunk-SGI5ZP2Y.js.map
4359
+ //# sourceMappingURL=chunk-CF2MLSOV.js.map
4360
+ //# sourceMappingURL=chunk-CF2MLSOV.js.map