@vreko/cli 3.3.3 → 3.3.4

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 (28) hide show
  1. package/dist/{InitApp-FBC63LF4.js → InitApp-AHMZBKRK.js} +3 -3
  2. package/dist/{InitApp-FBC63LF4.js.map → InitApp-AHMZBKRK.js.map} +1 -1
  3. package/dist/{chunk-RCPWQ36A.js → chunk-EYOXOS45.js} +4 -4
  4. package/dist/{chunk-RCPWQ36A.js.map → chunk-EYOXOS45.js.map} +1 -1
  5. package/dist/{chunk-QIEETYCC.js → chunk-F2GMAVD5.js} +3 -3
  6. package/dist/{chunk-QIEETYCC.js.map → chunk-F2GMAVD5.js.map} +1 -1
  7. package/dist/{chunk-DAHUEGED.js → chunk-HME7USNG.js} +4 -4
  8. package/dist/{chunk-DAHUEGED.js.map → chunk-HME7USNG.js.map} +1 -1
  9. package/dist/index.js +8 -8
  10. package/dist/index.js.map +1 -1
  11. package/dist/init-command-OGAPWXC3.js +7 -0
  12. package/dist/{init-command-3CV4NHKB.js.map → init-command-OGAPWXC3.js.map} +1 -1
  13. package/dist/{init-core-ZB2QKI5P.js → init-core-VFYBUSWP.js} +4 -4
  14. package/dist/{init-core-ZB2QKI5P.js.map → init-core-VFYBUSWP.js.map} +1 -1
  15. package/package.json +2 -2
  16. package/dist/init-command-3CV4NHKB.js +0 -7
  17. /package/dist/{._InitApp-FBC63LF4.js → ._InitApp-AHMZBKRK.js} +0 -0
  18. /package/dist/{._InitApp-FBC63LF4.js.map → ._InitApp-AHMZBKRK.js.map} +0 -0
  19. /package/dist/{._chunk-DAHUEGED.js → ._chunk-EYOXOS45.js} +0 -0
  20. /package/dist/{._chunk-DAHUEGED.js.map → ._chunk-EYOXOS45.js.map} +0 -0
  21. /package/dist/{._chunk-QIEETYCC.js → ._chunk-F2GMAVD5.js} +0 -0
  22. /package/dist/{._chunk-QIEETYCC.js.map → ._chunk-F2GMAVD5.js.map} +0 -0
  23. /package/dist/{._chunk-RCPWQ36A.js → ._chunk-HME7USNG.js} +0 -0
  24. /package/dist/{._chunk-RCPWQ36A.js.map → ._chunk-HME7USNG.js.map} +0 -0
  25. /package/dist/{._init-command-3CV4NHKB.js → ._init-command-OGAPWXC3.js} +0 -0
  26. /package/dist/{._init-command-3CV4NHKB.js.map → ._init-command-OGAPWXC3.js.map} +0 -0
  27. /package/dist/{._init-core-ZB2QKI5P.js → ._init-core-VFYBUSWP.js} +0 -0
  28. /package/dist/{._init-core-ZB2QKI5P.js.map → ._init-core-VFYBUSWP.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/claude-integration.ts","../src/commands/hooks.ts","../src/commands/init/init-core.ts"],"names":["generateClaudeIntegration","config","baseline","workspacePath","overwrite","result","filesWritten","filesSkipped","intelligenceAvailable","fragileFilesIncluded","coChangePatternsIncluded","globalSettingsUpdated","fragileFiles","filter","f","compositeScore","sort","a","b","slice","map","path","score","level","coChangePairs","coChangeClusters","c","files","length","coOccurrenceRate","fileA","fileB","frequency","relativePath","content","buildMcpJson","buildPreflightAgent","VREKO_SESSION_AGENT","SNAP_CHECK_COMMAND","file","fullPath","join","dir","existsSync","existing","readFileSync","existingHash","createHash","update","digest","newHash","suffix","push","mkdirSync","recursive","writeFileSync","writeVrekoToClaudeCodeGlobalSettings","command","args","cmdArgs","resolveMcpCommand","servers","vreko","type","instructions","includeChannel","channelArgs","JSON","stringify","mcpServers","resolveVrekoBinaryPath","settingsPath","homedir","settings","parse","fragileSection","lines","toFixed","coChangeSection","p","HOOK_SCRIPT_SRC","dirname","fileURLToPath","url","VREKO_HOOK_COMMAND","VREKO_HOOK_MARKER","HOOK_ENTRY","matcher","hooks","POST_HOOK_SCRIPT_SRC","POST_HOOK_COMMAND","POST_HOOK_MARKER","POST_HOOK_ENTRY","readSettings","err","console","error","writeSettings","readVrekoConfig","workspace","configPath","writeVrekoConfig","configDir","isVrekoHookPresent","preToolUseArray","some","entry","e","Array","isArray","h","hook","includes","isVrekoPostHookPresent","postToolUseArray","copyHookScripts","cwd","hooksDir","hookDest","postHookDest","Error","copyFileSync","chmodSync","mergeHookEntries","preToolUse","PreToolUse","postToolUse","PostToolUse","writeVrekoConfigHooks","cfgHooks","installed","mode","fragileThreshold","installedAt","Date","toISOString","postToolUseInstalled","installHook","tool","process","log","uninstallHook","exit","entryHooks","rmSync","claudeCodeCfg","hookStatus","configInstalled","scriptExists","settingsHasEntry","settingsHasPostEntry","postScriptExists","fullyInstalled","notInstalled","createHooksCommand","Command","description","addHelpText","requiredOption","option","action","opts","GROUND_TRUTH_SKILL_CONTENT","cliVersion","__CLI_VERSION__","createInitCommand","argument","options","runInit","json","success","pathArg","jsonMode","skipPrompts","yes","nonInteractive","cliState","quiet","verbose","version","alreadyInitialized","reinitialized","detection","stack","monorepoType","packageManager","gitRepo","gitRoot","fileCount","configuration","configCreated","gitignoreUpdated","ctxStubCreated","service","started","connected","workspaceRegistered","skipped","skipService","mcp","clients","configured","skipMcp","errors","spinner","ora","start","resolve","fail","statSync","isDirectory","vrekoDir","force","detected","detectStack","succeed","dryRun","stderr","write","consentResult","confirm","message","initialValue","isCancel","clack","cancel","proceedResult","basename","configSpinner","buildWorkspaceConfig","ensureGitignore","ctxPath","info","daemonSpinner","daemonResult","registerWithDaemon","daemonErrorMsg","errorMessage","warn","client","getDaemonClient","seedResult","call","seeded","mcpSpinner","mcpResult","configureMCP","apiKey","dev","npm","claudeSpinner","baselineData","record","undefined","claudeResult","_f","claudeDir","hasClaudeCode","skillDir","skillPath","installSkill","skillError","skillMessage","String","countSourceFiles","configuredTools","toolList","supervisorOk","supervisorInstalled","chalk","green","yellow","cyan","white","authStatus","checkAuthToken","hasToken","findGitRoot","lockfiles","pm","signals","seen","Set","label","has","add","pkgPath","pkg","allDeps","dependencies","devDependencies","depSignals","dep","name","protection","intelligence","enabled","createdAt","gitignorePath","split","l","trim","endsWith","appendFileSync","startAndConnectDaemon","connectToDaemon","health","check","supervisorMode","execFileSync","stdio","timeout","text","maxWait","interval","waited","sleep","_startError","registerWorkspaceWithDaemon","_regError","_workspacePath","getDaemonPid","_error","pidPath","getServicePidPath","devMode","npmMode","_skipPrompts","detectAIClients","stop","needsSetup","clientSpinner","displayName","hasVreko","mcpConfig","getVrekoMCPConfig","useNpx","useLocalDev","workspaceRoot","format","writeResult","writeClientConfig","exists","extensions","skip","count","walk","entries","readdir","withFileTypes","extname","ms","Promise","setTimeout","env","VREKO_SERVICE_TOKEN","source","VREKO_API_KEY","authPath","authContent","auth","token"],"mappings":"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","file":"chunk-DAHUEGED.js","sourcesContent":["/**\n * Claude Code Integration Generator\n *\n * Generates .mcp.json, .claude/agents/, and .claude/commands/ files that\n * enable Claude Code auto-discovery of Vreko tools and workspace intelligence.\n *\n * Data source: BaselineRecord (fetched via `baseline/get` IPC call) provides\n * fragileFiles (compositeScore 0-100) and coChangeClusters (coOccurrenceRate 0-1).\n *\n * @module services/claude-integration\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { resolveVrekoBinaryPath } from \"@vreko/mcp-config\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ClaudeIntegrationConfig {\n\t/** Workspace root path */\n\tworkspacePath: string;\n\t/** Whether to overwrite existing files (default: false) */\n\toverwrite?: boolean;\n\t/**\n\t * Whether to include channel server config in .mcp.json (default: false).\n\t *\n\t * NOTE: A .mcp.json entry alone does NOT enable push channel behavior.\n\t * Claude Code channels require `claude --channels server:vreko-channel`\n\t * at startup. During research preview: `--dangerously-load-development-channels`.\n\t * Only set to true when the user explicitly opts in via `vr claude-sync --channel`.\n\t */\n\tincludeChannel?: boolean;\n}\n\nexport interface GenerationResult {\n\t/** Files that were created or updated */\n\tfilesWritten: string[];\n\t/** Files that were skipped (already exist and overwrite=false) */\n\tfilesSkipped: string[];\n\t/** Whether intelligence data was available to enrich agents */\n\tintelligenceAvailable: boolean;\n\t/** Count of fragile files included in agent instructions */\n\tfragileFilesIncluded: number;\n\t/** Count of co-change patterns included */\n\tcoChangePatternsIncluded: number;\n\t/** Whether the global ~/.claude/settings.json was updated */\n\tglobalSettingsUpdated: boolean;\n}\n\n/** Fragile file entry from BaselineRecord - compositeScore is 0-100 */\nexport interface BaselineFragileFile {\n\tpath: string;\n\tcompositeScore: number;\n}\n\n/** Co-change cluster from BaselineRecord */\nexport interface BaselineCoChangeCluster {\n\tfiles: string[];\n\tcoOccurrenceRate: number;\n}\n\nexport interface BaselineData {\n\tfragileFiles?: BaselineFragileFile[];\n\tcoChangeClusters?: BaselineCoChangeCluster[];\n}\n\n// =============================================================================\n// Generator\n// =============================================================================\n\n/**\n * Generate Claude Code integration files for a workspace.\n *\n * Idempotent: skips files that already exist unless overwrite=true.\n * Gracefully degrades: generates static content if no baseline data is available.\n */\nexport function generateClaudeIntegration(config: ClaudeIntegrationConfig, baseline?: BaselineData): GenerationResult {\n\tconst { workspacePath, overwrite = false } = config;\n\tconst result: GenerationResult = {\n\t\tfilesWritten: [],\n\t\tfilesSkipped: [],\n\t\tintelligenceAvailable: false,\n\t\tfragileFilesIncluded: 0,\n\t\tcoChangePatternsIncluded: 0,\n\t\tglobalSettingsUpdated: false,\n\t};\n\n\t// Normalize fragile files: compositeScore 0-100 → score 0-1, derive level\n\tconst fragileFiles = (baseline?.fragileFiles ?? [])\n\t\t.filter((f) => f.compositeScore >= 30)\n\t\t.sort((a, b) => b.compositeScore - a.compositeScore)\n\t\t.slice(0, 15)\n\t\t.map((f) => ({\n\t\t\tpath: f.path,\n\t\t\tscore: f.compositeScore / 100,\n\t\t\tlevel: f.compositeScore >= 80 ? \"critical\" : f.compositeScore >= 60 ? \"fragile\" : \"moderate\",\n\t\t}));\n\n\t// Extract co-change pairs from clusters (take first two files in each cluster)\n\tconst coChangePairs = (baseline?.coChangeClusters ?? [])\n\t\t.filter((c) => c.files.length >= 2 && c.coOccurrenceRate >= 0.5)\n\t\t.sort((a, b) => b.coOccurrenceRate - a.coOccurrenceRate)\n\t\t.slice(0, 10)\n\t\t.map((c) => ({\n\t\t\tfileA: c.files[0] as string,\n\t\t\tfileB: c.files[1] as string,\n\t\t\tfrequency: c.coOccurrenceRate,\n\t\t}));\n\n\tresult.intelligenceAvailable = fragileFiles.length > 0 || coChangePairs.length > 0;\n\tresult.fragileFilesIncluded = fragileFiles.length;\n\tresult.coChangePatternsIncluded = coChangePairs.length;\n\n\tconst files: Array<{ relativePath: string; content: string }> = [\n\t\t{ relativePath: \".mcp.json\", content: buildMcpJson(config) },\n\t\t{\n\t\t\trelativePath: \".claude/agents/vreko-preflight.md\",\n\t\t\tcontent: buildPreflightAgent(fragileFiles, coChangePairs),\n\t\t},\n\t\t{ relativePath: \".claude/agents/vreko-session.md\", content: VREKO_SESSION_AGENT },\n\t\t{ relativePath: \".claude/commands/snap-check.md\", content: SNAP_CHECK_COMMAND },\n\t];\n\n\tfor (const file of files) {\n\t\tconst fullPath = join(workspacePath, file.relativePath);\n\t\tconst dir = join(fullPath, \"..\");\n\n\t\tif (existsSync(fullPath) && !overwrite) {\n\t\t\tconst existing = readFileSync(fullPath, \"utf-8\");\n\t\t\tconst existingHash = createHash(\"sha256\").update(existing).digest(\"hex\");\n\t\t\tconst newHash = createHash(\"sha256\").update(file.content).digest(\"hex\");\n\t\t\t// Content changed but overwrite=false: mark as modified to surface in output\n\t\t\tconst suffix = existingHash !== newHash ? \" (modified, use --force to update)\" : \"\";\n\t\t\tresult.filesSkipped.push(`${file.relativePath}${suffix}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tmkdirSync(dir, { recursive: true });\n\t\twriteFileSync(fullPath, file.content, \"utf-8\");\n\t\tresult.filesWritten.push(file.relativePath);\n\t}\n\n\tresult.globalSettingsUpdated = writeVrekoToClaudeCodeGlobalSettings();\n\n\treturn result;\n}\n\n// =============================================================================\n// Template builders\n// =============================================================================\n\nfunction buildMcpJson(config: ClaudeIntegrationConfig): string {\n\t// Resolve absolute command path for MCP server entry.\n\t// IDE-spawned processes don't inherit shell aliases, so we need a real path.\n\t// Fallback chain: (a) node + CLI dist index.js, (b) resolved vreko binary\n\tconst { command, args: cmdArgs } = resolveMcpCommand(config.workspacePath);\n\n\tconst servers: Record<string, unknown> = {\n\t\tvreko: {\n\t\t\ttype: \"stdio\",\n\t\t\tcommand,\n\t\t\targs: cmdArgs,\n\t\t\tinstructions:\n\t\t\t\t\"Vreko provides codebase intelligence. Use vreko_pulse to check risk before modifying files. Use vreko_learn to record patterns. Use vreko_end to close sessions.\",\n\t\t},\n\t};\n\n\tif (config.includeChannel === true) {\n\t\tconst channelArgs = [...cmdArgs];\n\t\t// For node-based command, append --channel flag\n\t\tchannelArgs.push(\"--channel\");\n\t\tservers[\"vreko-channel\"] = {\n\t\t\ttype: \"stdio\",\n\t\t\tcommand,\n\t\t\targs: channelArgs,\n\t\t\tinstructions:\n\t\t\t\t\"Vreko intelligence channel. Pushes real-time warnings about fragile files and risk spikes. Requires: claude --channels vreko-channel\",\n\t\t};\n\t}\n\n\treturn `${JSON.stringify({ mcpServers: servers }, null, 2)}\\n`;\n}\n\n/**\n * Resolve the MCP command using the vreko binary absolute path.\n *\n * Uses `which vreko` to get the absolute path, with fallbacks to well-known\n * install locations. An absolute path is required because IDE and daemon\n * processes spawn without a shell (no PATH augmentation, no aliases).\n */\nfunction resolveMcpCommand(workspacePath: string): { command: string; args: string[] } {\n\treturn {\n\t\tcommand: resolveVrekoBinaryPath(),\n\t\targs: [\"mcp\", \"--stdio\", \"--workspace\", workspacePath],\n\t};\n}\n\n/**\n * Merge a `vreko` entry into ~/.claude/settings.json so Claude Code picks up\n * the MCP server globally, not just via project-level .mcp.json.\n *\n * Idempotent - skips if the entry already exists with the same command.\n * Returns true if the file was modified.\n */\nfunction writeVrekoToClaudeCodeGlobalSettings(): boolean {\n\tconst settingsPath = join(homedir(), \".claude\", \"settings.json\");\n\tif (!existsSync(settingsPath)) {\n\t\treturn false;\n\t}\n\n\tlet settings: Record<string, unknown> = {};\n\ttry {\n\t\tsettings = JSON.parse(readFileSync(settingsPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch {\n\t\treturn false;\n\t}\n\n\tconst mcpServers = (settings.mcpServers ?? {}) as Record<string, unknown>;\n\tconst command = resolveVrekoBinaryPath();\n\n\t// Skip if already wired with the same command\n\tconst existing = mcpServers.vreko as { command?: string } | undefined;\n\tif (existing?.command === command) {\n\t\treturn false;\n\t}\n\n\tmcpServers.vreko = { command, args: [\"mcp\", \"--stdio\"] };\n\tsettings.mcpServers = mcpServers;\n\n\ttry {\n\t\twriteFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`, \"utf-8\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction buildPreflightAgent(\n\tfragileFiles: Array<{ path: string; score: number; level: string }>,\n\tcoChangePairs: Array<{ fileA: string; fileB: string; frequency: number }>,\n): string {\n\tlet fragileSection: string;\n\n\tif (fragileFiles.length > 0) {\n\t\tconst lines = fragileFiles\n\t\t\t.map((f) => `- \\`${f.path}\\` - fragility: ${f.level} (score: ${f.score.toFixed(2)})`)\n\t\t\t.join(\"\\n\");\n\n\t\tfragileSection = `## Known Fragile Files in This Codebase\n\nThe following files have high rollback rates or frequent issues:\n\n${lines}\n\nIf the task involves any of these files, always recommend creating\na snapshot before modification.`;\n\t} else {\n\t\tfragileSection = `## Codebase Intelligence\n\nVreko is still learning about this codebase. Use vreko_pulse\nto get real-time risk assessment for any files being modified.\nIntelligence will improve as more sessions are tracked.`;\n\t}\n\n\tlet coChangeSection = \"\";\n\n\tif (coChangePairs.length > 0) {\n\t\tconst lines = coChangePairs\n\t\t\t.map((p) => `- \\`${p.fileA}\\` ↔ \\`${p.fileB}\\` (${(p.frequency * 100).toFixed(0)}% co-change rate)`)\n\t\t\t.join(\"\\n\");\n\n\t\tcoChangeSection = `\n\n## Co-Change Patterns\n\nThese files historically change together. If modifying one,\ncheck whether the others also need updates:\n\n${lines}`;\n\t}\n\n\treturn `---\nname: vreko-preflight\ndescription: >\n Run before implementing changes that touch multiple files\n or modify config/infrastructure. Queries Vreko for risk\n context and known fragile patterns in this codebase.\ntools:\n - Read\n - Grep\n - Glob\n - mcp__vreko__vreko_pulse\n---\n\nYou are a preflight check agent for this codebase. Vreko has\naccumulated intelligence about which files are risky and which\nfiles always change together.\n\nBefore the parent agent modifies files, you:\n\n1. Call vreko_pulse with the workspace path and list of files about to change\n2. Check the risk assessment in the response\n3. Flag any files with HIGH or CRITICAL fragility\n4. Surface co-change patterns (files that must change together)\n5. Return a structured summary to the parent agent:\n - Files safe to modify in parallel\n - Files requiring sequential, careful changes\n - Known pitfalls from codebase history\n - Whether a snapshot is recommended before proceeding\n\nDo NOT modify any files. Read-only analysis only.\n\n${fragileSection}${coChangeSection}\n`;\n}\n\nconst VREKO_SESSION_AGENT = `---\nname: vreko-session\ndescription: >\n Manage Vreko session lifecycle. Use at the start and\n end of significant implementation work to capture context\n and trigger intelligence collection.\ntools:\n - mcp__vreko__vreko\n - mcp__vreko__vreko_learn\n - mcp__vreko__vreko_end\n---\n\nYou manage Vreko sessions for this codebase.\n\nWhen starting work:\n- Call vreko to begin a session with a descriptive task name\n- Note the session context for the parent agent\n\nWhen completing work:\n- Call vreko_learn with any patterns discovered during implementation:\n - Files that needed to change together (co-change pattern)\n - Config that was fragile or surprising (fragile pattern)\n - Dependencies that weren't obvious (dependency pattern)\n - Conventions the codebase follows (convention pattern)\n- Call vreko_end to close the session\n\nCapture learnings in this format:\n- Pattern type: co-change | fragile | dependency | convention\n- Affected files: list of file paths\n- Description: what the implementing agent discovered\n\nThe more patterns captured, the better Vreko's intelligence\nbecomes for future sessions.\n`;\n\nconst SNAP_CHECK_COMMAND = `---\ndescription: Check Vreko risk context for files you're about to change\nargument-hint: <file paths or description of planned changes>\n---\n\nQuery Vreko intelligence for the specified files or task.\n\n1. Call the vreko_pulse MCP tool with the provided context\n2. Display risk scores, fragile file warnings, and relevant history\n3. If any file has fragility level \"fragile\" or \"critical\", warn explicitly\n4. List co-change groups - files that should be modified together\n5. Recommend whether to create a manual snapshot before proceeding\n6. If fragile files are involved, suggest the vreko-preflight agent\n for more detailed analysis\n`;\n","/**\n * Hooks Command - Manage Vreko integration hooks for AI coding tools.\n *\n * Spec: claude-code-pretooluse-hook-v1 (AMBIENT-06)\n *\n * Usage:\n * vreko hooks install --tool claude-code\n * vreko hooks uninstall --tool claude-code\n * vreko hooks status\n */\n\nimport { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command } from \"commander\";\n\n// Path to the bundled hook script relative to this source file.\n// tsup bundles commands into chunks under dist/ (not dist/commands/), so the\n// compiled file's dirname is apps/cli/dist/ and scripts live at apps/cli/scripts/.\n// The path is therefore one level up from dist/ - not two.\nconst HOOK_SCRIPT_SRC = join(dirname(fileURLToPath(import.meta.url)), \"../scripts/hooks/pretooluse-fragile-guard.sh\");\n\nconst VREKO_HOOK_COMMAND = \".claude/hooks/vreko-fragile-guard.sh\";\nconst VREKO_HOOK_MARKER = \"vreko-fragile-guard.sh\";\n\n// ---------------------------------------------------------------------------\n// Hook entry that gets merged into .claude/settings.json\n// ---------------------------------------------------------------------------\n\nconst HOOK_ENTRY = {\n\tmatcher: \"Edit|Write|MultiEdit\",\n\thooks: [\n\t\t{\n\t\t\ttype: \"command\",\n\t\t\tcommand: VREKO_HOOK_COMMAND,\n\t\t},\n\t],\n};\n\n// Path to the bundled PostToolUse hook script relative to this source file.\n// Same dist/ layout reasoning as HOOK_SCRIPT_SRC above.\nconst POST_HOOK_SCRIPT_SRC = join(\n\tdirname(fileURLToPath(import.meta.url)),\n\t\"../scripts/hooks/posttooluse-file-notify.sh\",\n);\n\nconst POST_HOOK_COMMAND = \".claude/hooks/vreko-file-notify.sh\";\nconst POST_HOOK_MARKER = \"vreko-file-notify.sh\";\n\n// PostToolUse hook entry - notifies daemon of file changes for fileIndex population\nconst POST_HOOK_ENTRY = {\n\tmatcher: \"Edit|Write|MultiEdit\",\n\thooks: [\n\t\t{\n\t\t\ttype: \"command\",\n\t\t\tcommand: POST_HOOK_COMMAND,\n\t\t},\n\t],\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction readSettings(settingsPath: string): Record<string, unknown> {\n\tif (!existsSync(settingsPath)) {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(readFileSync(settingsPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch (err) {\n\t\tconsole.error(`[vreko hooks] Failed to parse ${settingsPath}:`, err);\n\t\treturn {};\n\t}\n}\n\nfunction writeSettings(settingsPath: string, settings: Record<string, unknown>): void {\n\twriteFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction readVrekoConfig(workspace: string): Record<string, unknown> {\n\tconst configPath = join(workspace, \".vreko\", \"config.json\");\n\tif (!existsSync(configPath)) {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch (err) {\n\t\tconsole.error(\"[vreko hooks] Failed to parse .vreko/config.json:\", err);\n\t\treturn {};\n\t}\n}\n\nfunction writeVrekoConfig(workspace: string, config: Record<string, unknown>): void {\n\tconst configDir = join(workspace, \".vreko\");\n\tif (!existsSync(configDir)) {\n\t\tmkdirSync(configDir, { recursive: true });\n\t}\n\twriteFileSync(join(configDir, \"config.json\"), `${JSON.stringify(config, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction isVrekoHookPresent(preToolUseArray: unknown[]): boolean {\n\treturn preToolUseArray.some((entry) => {\n\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\treturn false;\n\t\t}\n\t\tconst e = entry as Record<string, unknown>;\n\t\tconst hooks = e.hooks;\n\t\tif (!Array.isArray(hooks)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn hooks.some((h) => {\n\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(VREKO_HOOK_MARKER);\n\t\t});\n\t});\n}\n\nfunction isVrekoPostHookPresent(postToolUseArray: unknown[]): boolean {\n\treturn postToolUseArray.some((entry) => {\n\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\treturn false;\n\t\t}\n\t\tconst e = entry as Record<string, unknown>;\n\t\tconst hooks = e.hooks;\n\t\tif (!Array.isArray(hooks)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn hooks.some((h) => {\n\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(POST_HOOK_MARKER);\n\t\t});\n\t});\n}\n\n// ---------------------------------------------------------------------------\n// Core install / uninstall logic (exported for use in configure-tools.ts)\n// ---------------------------------------------------------------------------\n\nfunction copyHookScripts(cwd: string): { hookDest: string; postHookDest: string } {\n\tconst hooksDir = join(cwd, \".claude\", \"hooks\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\n\tif (!existsSync(HOOK_SCRIPT_SRC)) {\n\t\t// Throw instead of process.exit so callers (e.g. init-core's try-catch) can\n\t\t// handle gracefully without killing the whole init process.\n\t\tthrow new Error(`Hook script not found at ${HOOK_SCRIPT_SRC}`);\n\t}\n\tif (!existsSync(hooksDir)) {\n\t\tmkdirSync(hooksDir, { recursive: true });\n\t}\n\tcopyFileSync(HOOK_SCRIPT_SRC, hookDest);\n\tchmodSync(hookDest, 0o755);\n\n\tif (existsSync(POST_HOOK_SCRIPT_SRC)) {\n\t\tcopyFileSync(POST_HOOK_SCRIPT_SRC, postHookDest);\n\t\tchmodSync(postHookDest, 0o755);\n\t} else {\n\t\tconsole.error(`[vreko hooks] PostToolUse hook script not found at ${POST_HOOK_SCRIPT_SRC}`);\n\t}\n\treturn { hookDest, postHookDest };\n}\n\nfunction mergeHookEntries(settingsPath: string): void {\n\tconst settings = readSettings(settingsPath);\n\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\tconst preToolUse = Array.isArray(hooks.PreToolUse) ? (hooks.PreToolUse as unknown[]) : [];\n\tconst postToolUse = Array.isArray(hooks.PostToolUse) ? (hooks.PostToolUse as unknown[]) : [];\n\tif (!isVrekoHookPresent(preToolUse)) preToolUse.push(HOOK_ENTRY);\n\tif (!isVrekoPostHookPresent(postToolUse)) postToolUse.push(POST_HOOK_ENTRY);\n\thooks.PreToolUse = preToolUse;\n\thooks.PostToolUse = postToolUse;\n\tsettings.hooks = hooks;\n\twriteSettings(settingsPath, settings);\n}\n\nfunction writeVrekoConfigHooks(cwd: string): void {\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tcfgHooks[\"claude-code\"] = {\n\t\tinstalled: true,\n\t\tmode: \"advisory\",\n\t\tfragileThreshold: 2,\n\t\tinstalledAt: new Date().toISOString(),\n\t\tpostToolUseInstalled: true,\n\t};\n\tconfig.hooks = cfgHooks;\n\twriteVrekoConfig(cwd, config);\n}\n\nexport async function installHook(tool: string, workspace?: string): Promise<void> {\n\tif (tool !== \"claude-code\") {\n\t\tthrow new Error(`Hook install for '${tool}' is not yet supported. Only 'claude-code' is supported.`);\n\t}\n\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst { hookDest, postHookDest } = copyHookScripts(cwd);\n\tmergeHookEntries(settingsPath);\n\twriteVrekoConfigHooks(cwd);\n\n\tconsole.log(\"Vreko hooks installed for Claude Code\");\n\tconsole.log(` PreToolUse hook: ${hookDest}`);\n\tconsole.log(` Settings: ${settingsPath}`);\n}\n\nexport async function uninstallHook(tool: string, workspace?: string): Promise<void> {\n\tif (tool !== \"claude-code\") {\n\t\tconsole.error(`[vreko hooks] Hook uninstall for '${tool}' is not yet supported.`);\n\t\tprocess.exit(1);\n\t}\n\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\n\t// 1. Remove hook entries from settings.json\n\tif (existsSync(settingsPath)) {\n\t\ttry {\n\t\t\tconst settings = readSettings(settingsPath);\n\t\t\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\t\t\tif (Array.isArray(hooks.PreToolUse)) {\n\t\t\t\thooks.PreToolUse = (hooks.PreToolUse as unknown[]).filter((entry) => {\n\t\t\t\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tconst e = entry as Record<string, unknown>;\n\t\t\t\t\tconst entryHooks = e.hooks;\n\t\t\t\t\tif (!Array.isArray(entryHooks)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !entryHooks.some((h) => {\n\t\t\t\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\t\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(VREKO_HOOK_MARKER);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (Array.isArray(hooks.PostToolUse)) {\n\t\t\t\thooks.PostToolUse = (hooks.PostToolUse as unknown[]).filter((entry) => {\n\t\t\t\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tconst e = entry as Record<string, unknown>;\n\t\t\t\t\tconst entryHooks = e.hooks;\n\t\t\t\t\tif (!Array.isArray(entryHooks)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !entryHooks.some((h) => {\n\t\t\t\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\t\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(POST_HOOK_MARKER);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tsettings.hooks = hooks;\n\t\t\twriteSettings(settingsPath, settings);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to update settings.json:\", err);\n\t\t}\n\t}\n\n\t// 2. Delete hook scripts\n\tif (existsSync(hookDest)) {\n\t\ttry {\n\t\t\trmSync(hookDest);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to remove PreToolUse hook script:\", err);\n\t\t}\n\t}\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\tif (existsSync(postHookDest)) {\n\t\ttry {\n\t\t\trmSync(postHookDest);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to remove PostToolUse hook script:\", err);\n\t\t}\n\t}\n\n\t// 3. Update .vreko/config.json\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tconst claudeCodeCfg = (cfgHooks[\"claude-code\"] ?? {}) as Record<string, unknown>;\n\tclaudeCodeCfg.installed = false;\n\tcfgHooks[\"claude-code\"] = claudeCodeCfg;\n\tconfig.hooks = cfgHooks;\n\twriteVrekoConfig(cwd, config);\n\n\tconsole.log(\"Vreko hook removed\");\n}\n\nexport async function hookStatus(workspace?: string): Promise<void> {\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\n\t// Check config\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tconst claudeCodeCfg = (cfgHooks[\"claude-code\"] ?? {}) as Record<string, unknown>;\n\tconst configInstalled = claudeCodeCfg.installed === true;\n\n\t// Check hook script\n\tconst scriptExists = existsSync(hookDest);\n\n\t// Check settings.json entries (PreToolUse and PostToolUse)\n\tconst settings = readSettings(settingsPath);\n\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\tconst preToolUse = Array.isArray(hooks.PreToolUse) ? (hooks.PreToolUse as unknown[]) : [];\n\tconst postToolUse = Array.isArray(hooks.PostToolUse) ? (hooks.PostToolUse as unknown[]) : [];\n\tconst settingsHasEntry = isVrekoHookPresent(preToolUse);\n\tconst settingsHasPostEntry = isVrekoPostHookPresent(postToolUse);\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\tconst postScriptExists = existsSync(postHookDest);\n\n\tconsole.log(\"Vreko hooks status:\");\n\tconsole.log(` Config installed flag: ${configInstalled ? \"✅ true\" : \"❌ false\"}`);\n\tconsole.log(\n\t\t` PreToolUse: script ${scriptExists ? \"✅\" : \"❌\"}, settings ${settingsHasEntry ? \"✅\" : \"❌\"}`,\n\t);\n\tconsole.log(\n\t\t` PostToolUse: script ${postScriptExists ? \"✅\" : \"❌\"}, settings ${settingsHasPostEntry ? \"✅\" : \"❌\"}`,\n\t);\n\n\tconst fullyInstalled =\n\t\tconfigInstalled && scriptExists && settingsHasEntry && postScriptExists && settingsHasPostEntry;\n\tconst notInstalled =\n\t\t!configInstalled && !scriptExists && !settingsHasEntry && !postScriptExists && !settingsHasPostEntry;\n\n\tif (fullyInstalled) {\n\t\tconsole.log(\"\\n✅ All hooks fully installed and active\");\n\t\tif (claudeCodeCfg.mode) {\n\t\t\tconsole.log(` Mode: ${claudeCodeCfg.mode}`);\n\t\t}\n\t} else if (notInstalled) {\n\t\tconsole.log(\"\\n Not installed. Run: vreko hooks install --tool claude-code\");\n\t} else {\n\t\tconsole.log(\"\\n⚠️ Partial install detected. Run uninstall then reinstall to fix.\");\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Commander command factory\n// ---------------------------------------------------------------------------\n\nexport function createHooksCommand(): Command {\n\tconst hooks = new Command(\"hooks\")\n\t\t.description(\"Manage Vreko integration hooks for AI coding tools\")\n\t\t.addHelpText(\"after\", \"\\nExamples:\\n vreko hooks install --tool claude-code\\n vreko hooks status\\n\");\n\n\thooks\n\t\t.command(\"install\")\n\t\t.description(\"Install the Vreko PreToolUse hook for the specified AI tool\")\n\t\t.requiredOption(\"--tool <tool>\", \"AI tool to install hook for (e.g. claude-code)\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { tool: string; workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait installHook(opts.tool, opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Install failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\thooks\n\t\t.command(\"uninstall\")\n\t\t.description(\"Remove the Vreko PreToolUse hook for the specified AI tool\")\n\t\t.requiredOption(\"--tool <tool>\", \"AI tool to uninstall hook for (e.g. claude-code)\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { tool: string; workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait uninstallHook(opts.tool, opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Uninstall failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\thooks\n\t\t.command(\"status\")\n\t\t.description(\"Show current hook installation status\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait hookStatus(opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Status check failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\treturn hooks;\n}\n","/**\n * Init Command\n *\n * Ecosystem bootstrapper - one command to make a workspace fully operational.\n * Detects stack, creates config, registers with service, configures MCP.\n *\n * CANONICAL INSTALL CONTRACT (R-P0-3):\n * `vr init` is the self-sufficient installer. It is the ONLY single action that\n * wires a *complete* workspace, writing BOTH the MCP client config (registering\n * the `vreko` MCP server) AND the `PostToolUse` per-edit hook into\n * `.claude/settings.json` (via installHook). Together these produce a fully\n * wired intelligence pipeline.\n *\n * Plugin-only installation (`/plugin install vreko` without `vr init`) is a\n * KNOWN-INCOMPLETE state, not a supported happy path: the plugin registers the\n * MCP server but installs no PostToolUse hook, so per-edit activity never\n * reaches the daemon and intelligence never updates. `vr status` surfaces a\n * warning when the MCP server is registered but the PostToolUse hook is absent;\n * that warning means \"run vr init\". See R-SEAM-2 for the assertion and\n * apps/claude-code-plugin/INSTALL.md for the user-facing contract.\n *\n * Follows thin-client pattern: CLI owns all logic, extension delegates via --json.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from \"node:fs\";\nimport { readdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, extname, join, resolve } from \"node:path\";\nimport * as clack from \"@clack/prompts\";\n// Reuse detection and MCP config from mcp-config package\nimport { detectAIClients, getVrekoMCPConfig, writeClientConfig } from \"@vreko/mcp-config\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport ora, { type Ora } from \"ora\";\nimport { cliState } from \"../../cli-state.js\";\nimport { getServicePidPath } from \"../../service-adapter/local-service-adapter\";\nimport { generateClaudeIntegration } from \"../../services/claude-integration.js\";\n// Reuse service client\nimport { connectToDaemon, getDaemonClient } from \"../../services/service-client\";\n// Workspace utilities\nimport { findGitRoot } from \"../../utils/workspace\";\nimport { installHook } from \"../hooks.js\";\n\n// =============================================================================\n// GROUND TRUTH SKILL CONTENT\n// DO NOT summarize or paraphrase - skill frontmatter is required for Claude Code activation\n// =============================================================================\n\nconst GROUND_TRUTH_SKILL_CONTENT = `---\nname: ground-truth\ndescription: Disciplined methodology for AI-assisted coding that keeps Claude anchored to what the codebase actually says instead of what Claude assumes. Use this skill for any non-trivial coding task - refactors, multi-file changes, bug fixes, feature implementation, spec work, or anything touching more than a single function. Also use when the user mentions \"refactor,\" \"implement,\" \"add a feature,\" \"fix this bug,\" \"migrate,\" \"clean up,\" \"audit,\" or anything that implies structured work on a real codebase. Especially use when working inside a git repository or when the user references files, modules, or prior work. Do not skip for tasks that seem simple on the surface; small changes in real codebases frequently have non-obvious ripple effects, and Ground Truth is built to catch those before they ship. The skill also responds to the user phrases \"run ground truth,\" \"ground truth audit,\" \"brief me,\" \"verify this,\" \"close the session,\" and \"pulse check.\"\n---\n\n# Ground Truth\n\nA methodology for disciplined coding work in real codebases, powered by Vreko behavioral intelligence.\n\n## The core principle\n\nGround truth is what the codebase actually says - the imports that actually exist, the functions that are actually called, the types that are actually exported, the tests that actually pass. Everything else is assumption. LLMs produce code that looks right more easily than they produce code that is right in the specific context of the codebase in front of them. The gap between those two things is where regressions live.\n\nGround Truth closes that gap with four disciplines and five workflows. The disciplines are the mindset; the workflows are the verbs the user invokes.\n\n## Pre-flight (run once per session, first)\n\nBefore any workflow, check the capability surface:\n\n\\`\\`\\`bash\n# Is Vreko installed and running?\nvreko --version 2>/dev/null && vreko service status 2>/dev/null\n\\`\\`\\`\n\nIf the command fails with \"command not found\", explain to the user in one sentence what Vreko does and offer to install it:\n\n> Vreko is a local service that tracks changes to this codebase, attributes them to AI tools, and surfaces codebase-specific intelligence as you work. Want me to install it? (\\`npm install -g @vreko/cli && vreko init\\`)\n\nDo not install without approval. If the user approves, run the install, then \\`vreko init\\`, then continue with the requested workflow. If the user declines, Ground Truth degrades gracefully - the methodology still applies, the Vreko-specific MCP calls are skipped.\n\nIf the workspace has \\`.vreko/docs/\\` present, read \\`INTELLIGENCE.md\\` before any workflow. That file contains the capability declaration, current session context, and intelligence summary. Treat it as authoritative for this codebase.\n\n## Workflow 1: \\`ground-truth brief\\`\n\n**Trigger phrases:** \"brief me,\" \"what do I need to know,\" \"give me context,\" \"start a session\"\n\n**What it does:** Opens a Vreko session, reads the ambient docs, synthesizes a short briefing for the user.\n\n**Steps:**\n1. Call MCP tool \\`vreko\\` with a task description derived from the user's request.\n2. Read \\`.vreko/docs/INTELLIGENCE.md\\` and \\`.vreko/docs/current-session.md\\` if they exist.\n3. Synthesize a ≤200-word briefing covering: what this codebase is, what's fragile, what the agent has learned about it, what the user should be aware of before working.\n4. Present the briefing inline; do not create a file.\n\n**Output format:**\n\\`\\`\\`\nSession: <session-id>\nCodebase: <brief description>\nFragile files in scope: <list or \"none identified\">\nRecent patterns: <brief summary>\nWatch for: <1-2 specific risks>\n\\`\\`\\`\n\n**Anti-pattern:** Do not paraphrase the entire docs folder. Extract the two or three items relevant to what the user is about to do.\n\n## Workflow 2: \\`ground-truth audit\\`\n\n**Trigger phrases:** \"run ground truth audit,\" \"audit this,\" \"verify the current state,\" \"check the real state\"\n\n**What it does:** Runs a grep-based audit of the current codebase state to establish ground truth before proceeding. Pairs with \\`vreko_pulse\\` to fold in live intelligence.\n\n**Steps:**\n1. Identify the claim or scope to audit (ask if unclear).\n2. Generate 4-8 \\`rg\\` / \\`grep\\` commands that would verify the claim.\n3. Execute each command; capture output verbatim.\n4. Call \\`vreko_pulse\\` to pull live warnings and fragile-file data.\n5. Synthesize a report: what the audit found, what the pulse flagged, where they agree, where they disagree.\n6. If the user had assumptions going in, call out explicitly which were confirmed and which were contradicted.\n\n**Output format:**\n\\`\\`\\`\nClaim: <what was being verified>\n\nAudit results:\n [A1] <command> → <summary of output>\n [A2] <command> → <summary of output>\n ...\n\nPulse:\n Active warnings: <list>\n Fragile files in scope: <list>\n Missing co-change partners: <list>\n\nSynthesis:\n Confirmed: <list>\n Contradicted: <list>\n Unknown: <list>\n\\`\\`\\`\n\n**Anti-pattern:** Do not let the audit exceed 8 commands. If more depth is needed, split into two audits with distinct scopes.\n\n## Workflow 3: \\`ground-truth verify\\`\n\n**Trigger phrases:** \"verify this,\" \"run verification,\" \"check the work,\" \"gate this\"\n\n**What it does:** Runs the verification protocol for work that was just completed - tests, grep gates, lint. Records outcome as a learning.\n\n**Steps:**\n1. Identify the verification targets (which tests, which grep gates, which build commands).\n2. Run each in sequence. Capture exit codes and summary output.\n3. If all pass, call \\`vreko_learn\\` with a terse outcome record: \\`{ insight: \"<what was verified>: passed\", severity: \"info\" }\\`.\n4. If any fail, call \\`vreko_learn\\` with the failure: \\`{ insight: \"<what failed and why>\", severity: \"warn\" }\\`, then present the failure to the user; do not mark the work complete.\n5. Report pass/fail summary to the user.\n\n**Output format:**\n\\`\\`\\`\nVerification gates:\n [V1] <command> → PASS / FAIL\n [V2] <command> → PASS / FAIL\n ...\n\nOverall: PASS / FAIL\nLearning recorded: <learning-id>\n\\`\\`\\`\n\n**Anti-pattern:** Do not call work \"done\" without running verification. Do not skip verification because tests are slow; offer to run a subset if full suite is impractical.\n\n## Workflow 4: \\`ground-truth check\\`\n\n**Trigger phrases:** \"pulse check,\" \"quick check,\" \"how are we doing,\" \"anything I'm missing\"\n\n**What it does:** Lightweight mid-session check. Pulls \\`vreko_pulse\\` and annotates for the user what to be aware of for the next several turns.\n\n**Steps:**\n1. Call \\`vreko_pulse\\`.\n2. Read the \\`LLM_HINT\\` section of the response (see spec 03).\n3. Summarize in 2-3 sentences what the user should be aware of right now.\n4. If pulse returns warnings the user hasn't acknowledged, surface them.\n\n**Output format:** Brief prose, no tables. Example: \"Pulse check: you're in \\`auth/session.ts\\`, which was rolled back 4× in the last 90 days. Co-change partner \\`auth/middleware.ts\\` hasn't been touched yet - if you're refactoring session logic, middleware probably needs coordination. No other warnings.\"\n\n**Anti-pattern:** Do not repeat the same warning on consecutive checks. Track what was surfaced and only re-surface if state has changed.\n\n## Workflow 5: \\`ground-truth close\\`\n\n**Trigger phrases:** \"close the session,\" \"we're done here,\" \"wrap up,\" \"ceremony\"\n\n**What it does:** Closes the Vreko session, reads the closing ceremony, presents the summary.\n\n**Steps:**\n1. Call \\`vreko_end\\` with a one-sentence outcome summary of what was accomplished.\n2. Parse the ceremony response: learnings captured, pitfalls avoided, estimated token savings, session coherence score, carry-forward items.\n3. Present the summary to the user in a compact format.\n4. If there are carry-forward items, explicitly flag them for the next session.\n\n**Output format:**\n\\`\\`\\`\nSession closed: <session-id>\nOutcome: <one sentence>\n\nCeremony summary:\n Learnings captured: <n>\n Pitfalls avoided: <n>\n Token savings (est): ~<n>\n Coherence score: <n>%\n\nCarry forward to next session:\n • <item>\n • <item>\n\\`\\`\\`\n\n**Anti-pattern:** Do not skip the closing ceremony just because the session was short. Short sessions often have the most valuable learnings.\n\n## How workflows compose\n\nA typical disciplined coding session looks like:\n\n1. User states intent → Claude runs \\`ground-truth brief\\`.\n2. Before significant changes → Claude runs \\`ground-truth audit\\` on the scope.\n3. Mid-session, at file-change boundaries → Claude runs \\`ground-truth check\\`.\n4. After implementation → Claude runs \\`ground-truth verify\\`.\n5. At session end → Claude runs \\`ground-truth close\\`.\n\nThe user doesn't need to type these verbatim. The skill recognizes intent from natural phrasing.\n\n## What this skill does NOT do\n\n- Does not replace the user's judgment. If verification passes but something still feels wrong, stop and investigate.\n- Does not auto-install Vreko. Always asks.\n- Does not expose MCP tools directly to the user. The user asks for ground truth; the skill orchestrates the tools.\n- Does not write to \\`.vreko/docs/\\` directly. That's the service's job.\n\n## Integration with other Vreko skills\n\n- \\`vreko-ground-truth-audit\\` (published) - generates grep-based audit commands; Ground Truth's \\`audit\\` workflow uses its patterns.\n- \\`vreko-brand-voice\\` (published) - use when Ground Truth output will surface in external communication.\n- \\`vreko-spec-writer\\` (published) - use when Ground Truth discovers work that warrants a spec.\n\n## Installation\n\n\\`\\`\\`bash\n# Users install the skill file into their Claude Code skills directory:\nmkdir -p ~/.claude/skills/ground-truth\ncurl -o ~/.claude/skills/ground-truth/SKILL.md \\\\\n https://skills.vreko.dev/ground-truth/SKILL.md\n\\`\\`\\`\n\nOr, bundled: Ground Truth ships as the headline skill inside \\`@vreko/skills\\` npm package, which \\`vreko init\\` installs into the appropriate directory per detected AI tool.\n\n---\n\n**Version:** 1.0.0\n**Author:** Vreko / Marcelle Labs\n**License:** MIT (methodology); skill file free to distribute\n**Canonical URL:** https://vreko.dev/ground-truth\n`;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InitJsonResult {\n\tsuccess: boolean;\n\tversion: string;\n\tworkspace: {\n\t\tpath: string;\n\t\talreadyInitialized: boolean;\n\t\treinitialized: boolean;\n\t};\n\tdetection: {\n\t\tstack: string[];\n\t\tmonorepoType: string;\n\t\tpackageManager: string;\n\t\tgitRepo: boolean;\n\t\tgitRoot: string | null;\n\t\tfileCount: number;\n\t};\n\tconfiguration: {\n\t\tconfigCreated: boolean;\n\t\tgitignoreUpdated: boolean;\n\t\tctxStubCreated: boolean;\n\t};\n\tservice: {\n\t\tstarted: boolean;\n\t\tconnected: boolean;\n\t\tworkspaceRegistered: boolean;\n\t\tversion: string | null;\n\t\tskipped: boolean;\n\t\t/** undefined = not attempted; true = installed; false = install failed */\n\t\tsupervisorInstalled?: boolean;\n\t};\n\tmcp: {\n\t\tclients: Record<string, \"configured\" | \"already_configured\" | \"not_installed\" | \"failed\">;\n\t\tconfigured: string[];\n\t\tskipped: boolean;\n\t};\n\terrors: string[];\n\terror?: string;\n}\n\ninterface DetectedStack {\n\tstack: string[];\n\tmonorepoType: string;\n\tpackageManager: string;\n\tgitRepo: boolean;\n\tgitRoot: string | null;\n}\n\n// Version resolution (same pattern as other commands)\ndeclare const __CLI_VERSION__: string | undefined;\nconst cliVersion =\n\ttypeof __CLI_VERSION__ !== \"undefined\"\n\t\t? __CLI_VERSION__\n\t\t: (() => {\n\t\t\t\ttry {\n\t\t\t\t\treturn (require(\"../../package.json\") as { version: string }).version ?? \"0.0.0\";\n\t\t\t\t} catch {\n\t\t\t\t\treturn \"0.0.0-dev\";\n\t\t\t\t}\n\t\t\t})();\n\n// =============================================================================\n// COMMAND DEFINITION\n// =============================================================================\n\nexport function createInitCommand(): Command {\n\treturn new Command(\"init\")\n\t\t.description(\"Bootstrap Vreko for a repository\")\n\t\t.argument(\"[path]\", \"Workspace path (default: current directory)\")\n\t\t.option(\"-y, --yes\", \"Skip confirmation prompts\")\n\t\t.option(\"--non-interactive\", \"Run without prompts (extension/automation)\")\n\t\t.option(\"--json\", \"Output structured JSON result\")\n\t\t.option(\"--dry-run\", \"Show what would be configured\")\n\t\t.option(\"--force\", \"Re-initialize even if already set up\")\n\t\t.option(\"--skip-mcp\", \"Skip MCP configuration\")\n\t\t.option(\"--skip-service\", \"Skip service registration\")\n\t\t.option(\"--api-key <key>\", \"API key for Pro features\")\n\t\t.option(\"--dev\", \"Use local dev mode for MCP\")\n\t\t.option(\"--npm\", \"Use npm/npx mode for MCP\")\n\t\t.option(\"-q, --quiet\", \"Suppress informational output\")\n\t\t.option(\"-v, --verbose\", \"Show detailed detection reasoning\")\n\t\t.action(async (path: string | undefined, options) => {\n\t\t\tconst result = await runInit(path, options);\n\t\t\tif (options.json) {\n\t\t\t\tconsole.log(JSON.stringify(result, null, 2));\n\t\t\t}\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n}\n\n// =============================================================================\n// CORE INIT LOGIC\n// =============================================================================\n\nasync function runInit(\n\tpathArg: string | undefined,\n\toptions: {\n\t\tyes?: boolean;\n\t\tnonInteractive?: boolean;\n\t\tjson?: boolean;\n\t\tdryRun?: boolean;\n\t\tforce?: boolean;\n\t\tskipMcp?: boolean;\n\t\tskipService?: boolean;\n\t\tapiKey?: string;\n\t\tdev?: boolean;\n\t\tnpm?: boolean;\n\t\tquiet?: boolean;\n\t\tverbose?: boolean;\n\t},\n): Promise<InitJsonResult> {\n\tconst jsonMode = !!options.json;\n\tconst skipPrompts = !!options.yes || !!options.nonInteractive || cliState.yes;\n\tconst quiet = !!options.quiet;\n\tconst verbose = !!options.verbose;\n\n\tconst result: InitJsonResult = {\n\t\tsuccess: true,\n\t\tversion: cliVersion,\n\t\tworkspace: { path: \"\", alreadyInitialized: false, reinitialized: false },\n\t\tdetection: {\n\t\t\tstack: [],\n\t\t\tmonorepoType: \"none\",\n\t\t\tpackageManager: \"npm\",\n\t\t\tgitRepo: false,\n\t\t\tgitRoot: null,\n\t\t\tfileCount: 0,\n\t\t},\n\t\tconfiguration: { configCreated: false, gitignoreUpdated: false, ctxStubCreated: false },\n\t\tservice: {\n\t\t\tstarted: false,\n\t\t\tconnected: false,\n\t\t\tworkspaceRegistered: false,\n\t\t\tversion: null,\n\t\t\tskipped: !!options.skipService,\n\t\t},\n\t\tmcp: { clients: {}, configured: [], skipped: !!options.skipMcp },\n\t\terrors: [],\n\t};\n\n\ttry {\n\t\t// =========================================================================\n\t\t// PHASE 1: WORKSPACE DETECTION\n\t\t// =========================================================================\n\t\tconst spinner = jsonMode ? null : ora(\"Detecting workspace...\").start();\n\n\t\tconst workspacePath = resolve(pathArg || process.cwd());\n\t\tresult.workspace.path = workspacePath;\n\n\t\t// Validate path exists and is a directory\n\t\tif (!existsSync(workspacePath)) {\n\t\t\tfail(spinner, result, `Path does not exist: ${workspacePath}`);\n\t\t\treturn result;\n\t\t}\n\t\tif (!statSync(workspacePath).isDirectory()) {\n\t\t\tfail(spinner, result, `Path is not a directory: ${workspacePath}`);\n\t\t\treturn result;\n\t\t}\n\n\t\t// Check if already initialized\n\t\tconst vrekoDir = join(workspacePath, \".vreko\");\n\t\tconst configPath = join(vrekoDir, \"config.json\");\n\t\tconst alreadyInitialized = existsSync(configPath);\n\t\tresult.workspace.alreadyInitialized = alreadyInitialized;\n\n\t\tif (alreadyInitialized && options.force) {\n\t\t\tresult.workspace.reinitialized = true;\n\t\t}\n\n\t\t// Detect stack\n\t\tconst detected = detectStack(workspacePath, verbose && !jsonMode);\n\t\tresult.detection = { ...detected, fileCount: 0 };\n\n\t\tif (spinner) {\n\t\t\tspinner.succeed(\"Workspace detected\");\n\t\t}\n\n\t\tif (!jsonMode && !quiet) {\n\t\t\tif (detected.stack.length > 0) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t\tif (detected.monorepoType !== \"none\") {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// Data-collection consent (D-14 / G-01)\n\t\tif (!jsonMode && !options.dryRun) {\n\t\t\tif (options.nonInteractive) {\n\t\t\t\t// Non-interactive: print consent notice to stderr so it doesn't pollute JSON\n\t\t\t\tprocess.stderr.write(\n\t\t\t\t\t[\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Vreko data notice:\",\n\t\t\t\t\t\t\" • Session metadata (timing, file counts, risk scores) is collected locally.\",\n\t\t\t\t\t\t\" • No file contents or source code ever leave your device.\",\n\t\t\t\t\t\t\" • Cloud sync is opt-in and syncs metadata only.\",\n\t\t\t\t\t\t\" • Run `vreko purge` at any time to delete all local data.\",\n\t\t\t\t\t\t\" • Privacy policy: https://vreko.dev/privacy\",\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t} else if (!skipPrompts) {\n\t\t\t\t// Interactive: clack consent confirm before the proceed question\n\t\t\t\tconst consentResult = await clack.confirm({\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Vreko collects session metadata (timing, file counts, risk scores) locally. No file contents leave your device. Agree to continue?\",\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\t\t\t\tif (clack.isCancel(consentResult)) {\n\t\t\t\t\tclack.cancel(\"Cancelled.\");\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (!consentResult) {\n\t\t\t\t\tclack.cancel(\"Setup cancelled. No data was collected.\");\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Interactive confirmation\n\t\tif (!skipPrompts && !options.dryRun) {\n\t\t\tconst proceedResult = await clack.confirm({\n\t\t\t\tmessage: `Initialize Vreko for ${basename(workspacePath)}?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\t\t\tif (clack.isCancel(proceedResult)) {\n\t\t\t\tclack.cancel(\"Cancelled.\");\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (!proceedResult) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 2: CONFIGURATION\n\t\t// =========================================================================\n\t\tconst configSpinner = jsonMode ? null : ora(\"Configuring workspace...\").start();\n\n\t\tif (!options.dryRun) {\n\t\t\t// Create .vreko/ directory\n\t\t\tmkdirSync(vrekoDir, { recursive: true });\n\n\t\t\t// Write config.json; skip on subsequent runs unless --force is passed\n\t\t\tif (!alreadyInitialized || options.force) {\n\t\t\t\tconst config = buildWorkspaceConfig(workspacePath, detected);\n\t\t\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`);\n\t\t\t\tresult.configuration.configCreated = true;\n\t\t\t}\n\t\t\tif (configSpinner) {\n\t\t\t\tconfigSpinner.succeed(\"Created .vreko/config.json\");\n\t\t\t}\n\n\t\t\t// Update .gitignore\n\t\t\tif (detected.gitRepo) {\n\t\t\t\tconst gitignoreUpdated = ensureGitignore(workspacePath);\n\t\t\t\tresult.configuration.gitignoreUpdated = gitignoreUpdated;\n\t\t\t\tif (!jsonMode && gitignoreUpdated) {\n\t\t\t\t\tora().succeed(\"Updated .gitignore\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create .ctx stub\n\t\t\tconst ctxPath = join(vrekoDir, \".ctx\");\n\t\t\tif (!existsSync(ctxPath)) {\n\t\t\t\twriteFileSync(ctxPath, \"# Vreko compiled context - auto-generated\\n\");\n\t\t\t\tresult.configuration.ctxStubCreated = true;\n\t\t\t\tif (!jsonMode) {\n\t\t\t\t\tora().succeed(\"Created .vreko/.ctx\");\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (configSpinner) {\n\t\t\t\tconfigSpinner.info(\"Would create .vreko/config.json\");\n\t\t\t}\n\t\t\tif (detected.gitRepo && !jsonMode) {\n\t\t\t\tora().info(\"Would update .gitignore\");\n\t\t\t}\n\t\t\tif (!jsonMode) {\n\t\t\t\tora().info(\"Would create .vreko/.ctx\");\n\t\t\t}\n\t\t}\n\n\t\tif (!jsonMode) {\n\t\t\t// intentionally empty\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 3: DAEMON REGISTRATION\n\t\t// =========================================================================\n\t\tif (!options.skipService) {\n\t\t\tconst daemonSpinner = jsonMode ? null : ora(\"Connecting to service...\").start();\n\n\t\t\tif (!options.dryRun) {\n\t\t\t\tconst daemonResult = await registerWithDaemon(workspacePath, daemonSpinner, jsonMode);\n\t\t\t\tresult.service = { ...result.service, ...daemonResult };\n\n\t\t\t\tif (!daemonResult.connected) {\n\t\t\t\t\tconst daemonErrorMsg =\n\t\t\t\t\t\t\"⚠ Service could not be reached - Vreko is initialized but workspace sync is disabled. Run `vr service start` to enable syncing.\" +\n\t\t\t\t\t\t(daemonResult.errorMessage ? ` ${daemonResult.errorMessage}` : \"\");\n\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\tconsole.warn(daemonErrorMsg);\n\t\t\t\t\t}\n\t\t\t\t\tresult.errors.push(\"Service connection failed - init completed without service registration\");\n\t\t\t\t} else {\n\t\t\t\t\t// Seed knowledge.db chunks from global template into workspace DB.\n\t\t\t\t\t// Non-fatal - workspace is still usable if seeding fails.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\t\tif (client) {\n\t\t\t\t\t\t\tconst seedResult = await client.call<{ seeded: number; alreadyPresent: number }>(\n\t\t\t\t\t\t\t\t\"workspace/seed-knowledge\",\n\t\t\t\t\t\t\t\t{ workspace: workspacePath },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!jsonMode && seedResult.seeded > 0) {\n\t\t\t\t\t\t\t\tora().succeed(`Seeded ${seedResult.seeded} intelligence patterns into workspace`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Trigger immediate workspace.json write to ensure it exists after init.\n\t\t\t\t\t\t\t// Emits a synthetic workspace.initialized event to bypass the 5-minute debounce.\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/trigger-workspace-json-write\", {\n\t\t\t\t\t\t\t\t\tworkspace: workspacePath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.warn(\"init-core: workspace/trigger-workspace-json-write failed (non-fatal)\", {\n\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Trigger bootstrap write with service-side scan intelligence.\n\t\t\t\t\t\t\t// Default: additive merge (preserves live observations, overlays scan data).\n\t\t\t\t\t\t\t// With --force: full reset to BOOTSTRAP state.\n\t\t\t\t\t\t\t// Non-fatal: falls back to empty workspace.json written by trigger-workspace-json-write above.\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/write-from-scan-profile\", {\n\t\t\t\t\t\t\t\t\tworkspace: workspacePath,\n\t\t\t\t\t\t\t\t\t...(options.force && { force: true }),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.warn(\"init-core: workspace/write-from-scan-profile failed (non-fatal)\", {\n\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn(\"init-core: knowledge seeding failed (non-fatal)\", { error });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (daemonSpinner) {\n\t\t\t\t\tdaemonSpinner.info(\"Would register workspace with service\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4: MCP CONFIGURATION\n\t\t// =========================================================================\n\t\tif (!options.skipMcp) {\n\t\t\tconst mcpSpinner = jsonMode ? null : ora(\"Configuring AI tools...\").start();\n\n\t\t\tif (!options.dryRun) {\n\t\t\t\tconst mcpResult = await configureMCP(\n\t\t\t\t\tworkspacePath,\n\t\t\t\t\toptions.apiKey,\n\t\t\t\t\toptions.dev,\n\t\t\t\t\toptions.npm,\n\t\t\t\t\tskipPrompts,\n\t\t\t\t\tjsonMode,\n\t\t\t\t\tmcpSpinner,\n\t\t\t\t);\n\t\t\t\tresult.mcp = { ...result.mcp, ...mcpResult };\n\t\t\t} else {\n\t\t\t\tif (mcpSpinner) {\n\t\t\t\t\tmcpSpinner.info(\"Would configure detected AI tools\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.5: CLAUDE CODE INTEGRATION\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\tconst claudeSpinner = jsonMode ? null : ora(\"Generating Claude Code integration...\").start();\n\n\t\t\ttry {\n\t\t\t\t// Fetch baseline data for intelligence enrichment (non-blocking)\n\t\t\t\tlet baselineData:\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tfragileFiles?: Array<{ path: string; compositeScore: number }>;\n\t\t\t\t\t\t\tcoChangeClusters?: Array<{ files: string[]; coOccurrenceRate: number }>;\n\t\t\t\t\t }\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (result.service.connected) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\t\tconst record = await client.call<{\n\t\t\t\t\t\t\tfragileFiles?: Array<{ path: string; compositeScore: number }>;\n\t\t\t\t\t\t\tcoChangeClusters?: Array<{ files: string[]; coOccurrenceRate: number }>;\n\t\t\t\t\t\t}>(\"baseline/get\", { workspace: workspacePath });\n\n\t\t\t\t\t\tif (record?.fragileFiles !== undefined || record?.coChangeClusters !== undefined) {\n\t\t\t\t\t\t\tbaselineData = {\n\t\t\t\t\t\t\t\tfragileFiles: record.fragileFiles,\n\t\t\t\t\t\t\t\tcoChangeClusters: record.coChangeClusters,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Non-fatal - baseline may not exist yet for a fresh workspace\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst claudeResult = generateClaudeIntegration(\n\t\t\t\t\t{ workspacePath, overwrite: false, includeChannel: false },\n\t\t\t\t\tbaselineData,\n\t\t\t\t);\n\n\t\t\t\tif (claudeResult.filesWritten.length > 0) {\n\t\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\t\tclaudeSpinner.succeed(\n\t\t\t\t\t\t\t`Generated Claude Code integration (${claudeResult.filesWritten.length} files)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t\t\tfor (const _f of claudeResult.filesWritten) {\n\t\t\t\t\t\t\t// intentionally empty\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\t\tclaudeSpinner.info(\"Claude Code integration already present\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Non-fatal - init succeeds even if Claude integration generation fails\n\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\tclaudeSpinner.warn(\"Claude Code integration skipped (non-fatal)\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.75: GROUND TRUTH SKILL INSTALLATION (Claude Code users only)\n\t\t// =========================================================================\n\t\tif (!options.dryRun && !skipPrompts) {\n\t\t\tconst claudeDir = join(homedir(), \".claude\");\n\t\t\tconst hasClaudeCode = existsSync(claudeDir);\n\n\t\t\tif (hasClaudeCode) {\n\t\t\t\ttry {\n\t\t\t\t\tconst skillDir = join(homedir(), \".claude\", \"skills\", \"ground-truth\");\n\t\t\t\t\tconst skillPath = join(skillDir, \"SKILL.md\");\n\n\t\t\t\t\tif (existsSync(skillPath)) {\n\t\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\t\tora().info(\"Ground Truth skill already installed\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst installSkill = await clack.confirm({\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Install the Ground Truth skill for Claude Code? (Recommended - helps Claude work effectively in this codebase)\",\n\t\t\t\t\t\t\tinitialValue: true,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!clack.isCancel(installSkill) && installSkill === true) {\n\t\t\t\t\t\t\tmkdirSync(skillDir, { recursive: true });\n\t\t\t\t\t\t\twriteFileSync(skillPath, GROUND_TRUTH_SKILL_CONTENT, \"utf8\");\n\t\t\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\t\t\tora().succeed(`Ground Truth skill installed at ${skillPath}`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (skillError) {\n\t\t\t\t\t// Non-fatal - log warning and continue init\n\t\t\t\t\tconst skillMessage = skillError instanceof Error ? skillError.message : String(skillError);\n\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\tora().warn(`Ground Truth skill install failed (non-fatal): ${skillMessage}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.9: CLAUDE CODE HOOK INSTALLATION\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\ttry {\n\t\t\t\tawait installHook(\"claude-code\", workspacePath);\n\t\t\t} catch (err) {\n\t\t\t\t// Non-fatal - hook install failure must not block workspace init\n\t\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[vr init] Hook installation skipped: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 5: VERIFICATION & SUMMARY\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\tconst fileCount = await countSourceFiles(workspacePath);\n\t\t\tresult.detection.fileCount = fileCount;\n\n\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t// R6.1 / R6.2 - Final activation summary\n\t\t\t\tconst configuredTools = result.mcp.configured;\n\t\t\t\tconst toolList = configuredTools.length > 0 ? configuredTools.join(\", \") : null;\n\t\t\t\tconst supervisorOk = result.service.supervisorInstalled !== false;\n\n\t\t\t\tconsole.log();\n\t\t\t\tconsole.log(chalk.green(\" ✓ Workspace registered\"));\n\t\t\t\tif (supervisorOk) {\n\t\t\t\t\tconsole.log(chalk.green(\" ✓ Daemon running (supervised)\"));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\" ⚠ Supervisor not installed (you may need to run vreko service install)\"),\n\t\t\t\t\t);\n\t\t\t\t\tconsole.log(chalk.green(\" ✓ Daemon running (this session only - will not restart on crash)\"));\n\t\t\t\t}\n\t\t\t\tif (toolList) {\n\t\t\t\t\tconsole.log(chalk.green(` ✓ MCP config written to ${toolList}`));\n\t\t\t\t}\n\t\t\t\tconsole.log();\n\t\t\t\tconsole.log(chalk.cyan(\" → Restart Claude Desktop once to load vreko.\"));\n\t\t\t\tconsole.log(chalk.cyan(\" You won't need to do this again.\"));\n\t\t\t\tconsole.log();\n\t\t\t\tif (supervisorOk) {\n\t\t\t\t\tconsole.log(chalk.white(\" vreko is now ready. Try asking your AI agent about this codebase.\"));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\" vreko is running but unsupervised. Run `vr doctor` if you hit issues.\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconsole.log();\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 5.5: AUTH TOKEN CHECK\n\t\t// =========================================================================\n\t\tconst authStatus = checkAuthToken();\n\t\tif (!authStatus.hasToken && !jsonMode) {\n\t\t\tconsole.warn(\"\\n⚠️ Sync is configured but no API key was found.\");\n\t\t\tconsole.warn(\" Workspace metadata will not sync to the intelligence platform.\");\n\t\t\tconsole.warn(\" Run `vreko login` or set VREKO_API_KEY.\\n\");\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tresult.success = false;\n\t\tresult.error = message;\n\t\tif (!jsonMode) {\n\t\t\t// intentionally empty\n\t\t}\n\t\treturn result;\n\t}\n}\n\n// =============================================================================\n// STACK DETECTION\n// =============================================================================\n\nfunction detectStack(workspacePath: string, verbose: boolean): DetectedStack {\n\tconst stack: string[] = [];\n\tconst result: DetectedStack = {\n\t\tstack,\n\t\tmonorepoType: \"none\",\n\t\tpackageManager: \"npm\",\n\t\tgitRepo: false,\n\t\tgitRoot: null,\n\t};\n\n\t// Git detection using utility\n\tconst gitRoot = findGitRoot(workspacePath);\n\tif (gitRoot) {\n\t\tresult.gitRepo = true;\n\t\tresult.gitRoot = gitRoot;\n\t\tif (verbose) {\n\t\t\t// intentionally empty\n\t\t}\n\t}\n\n\t// Package manager detection (check lockfiles in priority order)\n\tconst lockfiles: [string, string][] = [\n\t\t[\"pnpm-lock.yaml\", \"pnpm\"],\n\t\t[\"bun.lockb\", \"bun\"],\n\t\t[\"yarn.lock\", \"yarn\"],\n\t\t[\"package-lock.json\", \"npm\"],\n\t];\n\tfor (const [file, pm] of lockfiles) {\n\t\tif (existsSync(join(workspacePath, file))) {\n\t\t\tresult.packageManager = pm;\n\t\t\tif (verbose) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Stack detection via file presence\n\tconst signals: [string, string, string?][] = [\n\t\t// [file/pattern, stack label, verbose detail]\n\t\t[\"next.config.js\", \"Next.js\"],\n\t\t[\"next.config.ts\", \"Next.js\"],\n\t\t[\"next.config.mjs\", \"Next.js\"],\n\t\t[\"nuxt.config.ts\", \"Nuxt\"],\n\t\t[\"svelte.config.js\", \"SvelteKit\"],\n\t\t[\"astro.config.mjs\", \"Astro\"],\n\t\t[\"remix.config.js\", \"Remix\"],\n\t\t[\"tsconfig.json\", \"TypeScript\"],\n\t\t[\"Cargo.toml\", \"Rust\"],\n\t\t[\"go.mod\", \"Go\"],\n\t\t[\"pyproject.toml\", \"Python\"],\n\t\t[\"requirements.txt\", \"Python\"],\n\t\t[\"Gemfile\", \"Ruby\"],\n\t\t[\"composer.json\", \"PHP\"],\n\t\t[\"Package.swift\", \"Swift\"],\n\t\t[\".env\", \"env-config\"],\n\t];\n\n\tconst seen = new Set<string>();\n\tfor (const [file, label] of signals) {\n\t\tif (!seen.has(label) && existsSync(join(workspacePath, file))) {\n\t\t\tstack.push(label);\n\t\t\tseen.add(label);\n\t\t}\n\t}\n\n\t// Database detection from package.json dependencies\n\tconst pkgPath = join(workspacePath, \"package.json\");\n\tif (existsSync(pkgPath)) {\n\t\ttry {\n\t\t\tconst pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n\t\t\tconst allDeps = {\n\t\t\t\t...(pkg.dependencies || {}),\n\t\t\t\t...(pkg.devDependencies || {}),\n\t\t\t};\n\n\t\t\tconst depSignals: [string, string][] = [\n\t\t\t\t[\"drizzle-orm\", \"Drizzle\"],\n\t\t\t\t[\"prisma\", \"Prisma\"],\n\t\t\t\t[\"pg\", \"PostgreSQL\"],\n\t\t\t\t[\"mysql2\", \"MySQL\"],\n\t\t\t\t[\"better-sqlite3\", \"SQLite\"],\n\t\t\t\t[\"mongoose\", \"MongoDB\"],\n\t\t\t\t[\"redis\", \"Redis\"],\n\t\t\t\t[\"tailwindcss\", \"Tailwind\"],\n\t\t\t\t[\"@trpc/server\", \"tRPC\"],\n\t\t\t\t[\"express\", \"Express\"],\n\t\t\t\t[\"fastify\", \"Fastify\"],\n\t\t\t\t[\"hono\", \"Hono\"],\n\t\t\t];\n\n\t\t\tfor (const [dep, label] of depSignals) {\n\t\t\t\tif (!seen.has(label) && allDeps[dep]) {\n\t\t\t\t\tstack.push(label);\n\t\t\t\t\tseen.add(label);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid package.json - skip dependency detection\n\t\t}\n\t}\n\n\t// Monorepo detection\n\tif (existsSync(join(workspacePath, \"turbo.json\"))) {\n\t\tresult.monorepoType = \"turborepo\";\n\t} else if (existsSync(join(workspacePath, \"nx.json\"))) {\n\t\tresult.monorepoType = \"nx\";\n\t} else if (existsSync(join(workspacePath, \"lerna.json\"))) {\n\t\tresult.monorepoType = \"lerna\";\n\t} else if (existsSync(join(workspacePath, \"pnpm-workspace.yaml\"))) {\n\t\tresult.monorepoType = \"pnpm\";\n\t}\n\n\treturn result;\n}\n// =============================================================================\n// WORKSPACE CONFIG\n// =============================================================================\n\ninterface WorkspaceConfig {\n\tversion: 1;\n\tworkspace: {\n\t\tpath: string;\n\t\tname: string;\n\t\tstack: string[];\n\t\tmonorepoType: string;\n\t\tpackageManager: string;\n\t};\n\tprotection: {\n\t\tmode: \"auto\";\n\t\tlevel: \"standard\";\n\t};\n\tintelligence: {\n\t\tenabled: true;\n\t};\n\tcreatedAt: string;\n\tcliVersion: string;\n}\n\nfunction buildWorkspaceConfig(workspacePath: string, detected: DetectedStack): WorkspaceConfig {\n\treturn {\n\t\tversion: 1,\n\t\tworkspace: {\n\t\t\tpath: workspacePath,\n\t\t\tname: basename(workspacePath),\n\t\t\tstack: detected.stack,\n\t\t\tmonorepoType: detected.monorepoType,\n\t\t\tpackageManager: detected.packageManager,\n\t\t},\n\t\tprotection: {\n\t\t\tmode: \"auto\",\n\t\t\tlevel: \"standard\",\n\t\t},\n\t\tintelligence: {\n\t\t\tenabled: true,\n\t\t},\n\t\tcreatedAt: new Date().toISOString(),\n\t\tcliVersion,\n\t};\n}\n\n// =============================================================================\n// GITIGNORE MANAGEMENT\n// =============================================================================\n\nfunction ensureGitignore(workspacePath: string): boolean {\n\tconst gitignorePath = join(workspacePath, \".gitignore\");\n\tconst entry = \".vreko/\";\n\n\tif (existsSync(gitignorePath)) {\n\t\tconst content = readFileSync(gitignorePath, \"utf-8\");\n\t\t// Check if .vreko/ is already ignored (exact line match)\n\t\tconst lines = content.split(\"\\n\").map((l) => l.trim());\n\t\tif (lines.includes(entry) || lines.includes(\".vreko\")) {\n\t\t\treturn false; // already present\n\t\t}\n\t\t// Append with section comment\n\t\tconst suffix = content.endsWith(\"\\n\") ? \"\" : \"\\n\";\n\t\tappendFileSync(gitignorePath, `${suffix}\\n# Vreko local data\\n${entry}\\n`);\n\t\treturn true;\n\t}\n\t// Create .gitignore with vreko entry\n\twriteFileSync(gitignorePath, `# Vreko local data\\n${entry}\\n`);\n\treturn true;\n}\n\n// =============================================================================\n// DAEMON REGISTRATION\n// =============================================================================\n\ninterface DaemonRegistrationResult {\n\tstarted: boolean;\n\tconnected: boolean;\n\tworkspaceRegistered: boolean;\n\tversion: string | null;\n\terrorMessage?: string;\n\t/** true if supervisor was installed during this init run; false if already present or install failed */\n\tsupervisorInstalled?: boolean;\n}\n\nasync function startAndConnectDaemon(\n\tresult: DaemonRegistrationResult,\n\tspinner: Ora | null,\n): Promise<{ connected: boolean }> {\n\ttry {\n\t\tconst client = await connectToDaemon();\n\t\tconst health = await client.health.check();\n\t\tresult.version = health?.version ?? null;\n\t\t// R2.3: If no OS supervisor detected, attempt to install one.\n\t\t// Handles --ignore-scripts, pnpm global, or manual plist deletion.\n\t\t// Non-fatal: init continues regardless of supervisor install result.\n\t\tif (health?.supervisorMode === \"extension\") {\n\t\t\ttry {\n\t\t\t\texecFileSync(\"vreko\", [\"service\", \"install\"], { stdio: \"pipe\", timeout: 15000 });\n\t\t\t\tresult.supervisorInstalled = true;\n\t\t\t} catch {\n\t\t\t\t// Supervisor install failed - non-fatal, continue init\n\t\t\t\tresult.supervisorInstalled = false;\n\t\t\t}\n\t\t}\n\t\treturn { connected: true };\n\t} catch {\n\t\t// Daemon not running - attempt to start it\n\t\tif (spinner) spinner.text = \"Starting service...\";\n\t\ttry {\n\t\t\texecFileSync(\"vreko\", [\"service\", \"start\", \"-d\"], { stdio: \"pipe\", timeout: 10000 });\n\t\t\tresult.started = true;\n\t\t\t// Poll until ready\n\t\t\tconst maxWait = 5000;\n\t\t\tconst interval = 200;\n\t\t\tlet waited = 0;\n\t\t\twhile (waited < maxWait) {\n\t\t\t\ttry {\n\t\t\t\t\tconst client = await connectToDaemon();\n\t\t\t\t\tconst health = await client.health.check();\n\t\t\t\t\tresult.version = health?.version ?? null;\n\t\t\t\t\treturn { connected: true };\n\t\t\t\t} catch {\n\t\t\t\t\tawait sleep(interval);\n\t\t\t\t\twaited += interval;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { connected: false };\n\t\t} catch (_startError) {\n\t\t\tresult.errorMessage = _startError instanceof Error ? _startError.message : String(_startError);\n\t\t\tif (spinner) spinner.warn(\"Could not start service (init will continue without it)\");\n\t\t\treturn { connected: false };\n\t\t}\n\t}\n}\n\nasync function registerWorkspaceWithDaemon(\n\tworkspacePath: string,\n\tspinner: Ora | null,\n\tjsonMode: boolean,\n\tresult: DaemonRegistrationResult,\n): Promise<void> {\n\ttry {\n\t\tconst client = getDaemonClient();\n\t\tif (client) {\n\t\t\tawait client.call<{ initialized: boolean }>(\"workspace/init\", { workspace: workspacePath });\n\t\t\tresult.workspaceRegistered = true;\n\t\t\tif (!jsonMode && spinner) ora().succeed(\"Workspace registered\");\n\t\t}\n\t} catch (_regError) {\n\t\tresult.workspaceRegistered = false;\n\t\tif (!jsonMode) ora().warn(\"Workspace registration failed (service may need restart)\");\n\t}\n}\n\nasync function registerWithDaemon(\n\t_workspacePath: string,\n\tspinner: Ora | null,\n\tjsonMode: boolean,\n): Promise<DaemonRegistrationResult> {\n\tconst result: DaemonRegistrationResult = {\n\t\tstarted: false,\n\t\tconnected: false,\n\t\tworkspaceRegistered: false,\n\t\tversion: null,\n\t};\n\n\ttry {\n\t\tconst { connected } = await startAndConnectDaemon(result, spinner);\n\n\t\tif (!connected) {\n\t\t\tif (!result.errorMessage) {\n\t\t\t\tresult.errorMessage = \"Service did not respond after start\";\n\t\t\t\tif (spinner) spinner.warn(\"Service did not respond (init will continue without it)\");\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tresult.connected = true;\n\t\tif (spinner) {\n\t\t\tspinner.succeed(`Service running (v${result.version ?? \"unknown\"}, pid ${await getDaemonPid()})`);\n\t\t}\n\n\t\tawait registerWorkspaceWithDaemon(_workspacePath, spinner, jsonMode, result);\n\t\treturn result;\n\t} catch (_error) {\n\t\tresult.errorMessage = _error instanceof Error ? _error.message : String(_error);\n\t\tif (spinner) spinner.warn(\"Service connection failed\");\n\t\treturn result;\n\t}\n}\n\nasync function getDaemonPid(): Promise<string> {\n\tconst pidPath = getServicePidPath();\n\ttry {\n\t\treturn readFileSync(pidPath, \"utf-8\").trim();\n\t} catch {\n\t\treturn \"?\";\n\t}\n}\n\n// =============================================================================\n// MCP CONFIGURATION (delegates to mcp-config package)\n// =============================================================================\n\ninterface MCPConfigResult {\n\tclients: Record<string, \"configured\" | \"already_configured\" | \"not_installed\" | \"failed\">;\n\tconfigured: string[];\n}\n\nasync function configureMCP(\n\tworkspacePath: string,\n\tapiKey: string | undefined,\n\tdevMode: boolean | undefined,\n\tnpmMode: boolean | undefined,\n\t_skipPrompts: boolean,\n\tjsonMode: boolean,\n\tspinner: Ora | null,\n): Promise<MCPConfigResult> {\n\tconst result: MCPConfigResult = { clients: {}, configured: [] };\n\n\ttry {\n\t\tconst detection = detectAIClients({ cwd: workspacePath });\n\n\t\tif (detection.detected.length === 0) {\n\t\t\tif (spinner) {\n\t\t\t\tspinner.info(\"No AI tools detected (MCP configuration skipped)\");\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (spinner) {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tfor (const client of detection.needsSetup) {\n\t\t\tconst clientSpinner = jsonMode ? null : ora(` ${client.displayName}...`).start();\n\n\t\t\tif (client.hasVreko) {\n\t\t\t\tresult.clients[client.name] = \"already_configured\";\n\t\t\t\tif (clientSpinner) {\n\t\t\t\t\tclientSpinner.succeed(`${client.displayName} already configured`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst mcpConfig = getVrekoMCPConfig({\n\t\t\t\t\tapiKey,\n\t\t\t\t\tuseNpx: !!npmMode,\n\t\t\t\t\tuseLocalDev: !!devMode,\n\t\t\t\t\tworkspaceRoot: workspacePath,\n\t\t\t\t\tclient: client.format,\n\t\t\t\t});\n\n\t\t\t\tconst writeResult = writeClientConfig(client, mcpConfig);\n\t\t\t\tif (writeResult.success) {\n\t\t\t\t\tresult.clients[client.name] = \"configured\";\n\t\t\t\t\tresult.configured.push(client.name);\n\t\t\t\t\tif (clientSpinner) {\n\t\t\t\t\t\tclientSpinner.succeed(`${client.displayName} configured`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult.clients[client.name] = \"failed\";\n\t\t\t\t\tif (clientSpinner) {\n\t\t\t\t\t\tclientSpinner.fail(`${client.displayName} failed: ${writeResult.error}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\tresult.clients[client.name] = \"failed\";\n\t\t\t\tif (clientSpinner) {\n\t\t\t\t\tclientSpinner.fail(`${client.displayName} failed`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Show not-installed clients in verbose\n\t\tfor (const client of detection.clients) {\n\t\t\tif (!client.exists && !jsonMode) {\n\t\t\t\tresult.clients[client.name] = \"not_installed\";\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} catch (_error) {\n\t\tif (spinner) {\n\t\t\tspinner.warn(\"MCP configuration failed (non-fatal)\");\n\t\t}\n\t\treturn result;\n\t}\n}\n\n// =============================================================================\n// UTILITIES\n// =============================================================================\n\nasync function countSourceFiles(workspacePath: string): Promise<number> {\n\tconst extensions = new Set([\n\t\t\".ts\",\n\t\t\".tsx\",\n\t\t\".js\",\n\t\t\".jsx\",\n\t\t\".py\",\n\t\t\".rs\",\n\t\t\".go\",\n\t\t\".rb\",\n\t\t\".php\",\n\t\t\".swift\",\n\t\t\".java\",\n\t\t\".kt\",\n\t\t\".vue\",\n\t\t\".svelte\",\n\t]);\n\tconst skip = new Set([\"node_modules\", \".git\", \"dist\", \"build\", \".vreko\", \"target\", \"__pycache__\"]);\n\tlet count = 0;\n\tasync function walk(dir: string): Promise<void> {\n\t\ttry {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\t\tfor (const e of entries) {\n\t\t\t\tif (skip.has(e.name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (e.isDirectory()) {\n\t\t\t\t\tawait walk(join(dir, e.name));\n\t\t\t\t} else if (extensions.has(extname(e.name))) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Unreadable directory - skip silently\n\t\t}\n\t}\n\tawait walk(workspacePath);\n\treturn count;\n}\n\nfunction _capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// =============================================================================\n// AUTH TOKEN CHECK\n// =============================================================================\n\ninterface AuthStatus {\n\thasToken: boolean;\n\tsource: \"env-service\" | \"env-api\" | \"auth-file\" | \"none\";\n}\n\n/**\n * Check for auth token in environment or auth.json file.\n * Resolution order: VREKO_SERVICE_TOKEN -> VREKO_API_KEY -> ~/.vreko/auth.json\n */\nfunction checkAuthToken(): AuthStatus {\n\t// Check environment variables first\n\tif (process.env.VREKO_SERVICE_TOKEN) {\n\t\treturn { hasToken: true, source: \"env-service\" };\n\t}\n\tif (process.env.VREKO_API_KEY) {\n\t\treturn { hasToken: true, source: \"env-api\" };\n\t}\n\n\t// Check auth.json file\n\ttry {\n\t\tconst authPath = join(homedir(), \".vreko\", \"auth.json\");\n\t\tif (existsSync(authPath)) {\n\t\t\tconst authContent = readFileSync(authPath, \"utf-8\");\n\t\t\tconst auth = JSON.parse(authContent) as { token?: string };\n\t\t\tif (auth.token) {\n\t\t\t\treturn { hasToken: true, source: \"auth-file\" };\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// File doesn't exist or is invalid - no token\n\t}\n\n\treturn { hasToken: false, source: \"none\" };\n}\n\nfunction fail(spinner: Ora | null, result: InitJsonResult, message: string): void {\n\tresult.success = false;\n\tresult.error = message;\n\tif (spinner) {\n\t\tspinner.fail(message);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/services/claude-integration.ts","../src/commands/hooks.ts","../src/commands/init/init-core.ts"],"names":["generateClaudeIntegration","config","baseline","workspacePath","overwrite","result","filesWritten","filesSkipped","intelligenceAvailable","fragileFilesIncluded","coChangePatternsIncluded","globalSettingsUpdated","fragileFiles","filter","f","compositeScore","sort","a","b","slice","map","path","score","level","coChangePairs","coChangeClusters","c","files","length","coOccurrenceRate","fileA","fileB","frequency","relativePath","content","buildMcpJson","buildPreflightAgent","VREKO_SESSION_AGENT","SNAP_CHECK_COMMAND","file","fullPath","join","dir","existsSync","existing","readFileSync","existingHash","createHash","update","digest","newHash","suffix","push","mkdirSync","recursive","writeFileSync","writeVrekoToClaudeCodeGlobalSettings","command","args","cmdArgs","resolveMcpCommand","servers","vreko","type","instructions","includeChannel","channelArgs","JSON","stringify","mcpServers","resolveVrekoBinaryPath","settingsPath","homedir","settings","parse","fragileSection","lines","toFixed","coChangeSection","p","HOOK_SCRIPT_SRC","dirname","fileURLToPath","url","VREKO_HOOK_COMMAND","VREKO_HOOK_MARKER","HOOK_ENTRY","matcher","hooks","POST_HOOK_SCRIPT_SRC","POST_HOOK_COMMAND","POST_HOOK_MARKER","POST_HOOK_ENTRY","readSettings","err","console","error","writeSettings","readVrekoConfig","workspace","configPath","writeVrekoConfig","configDir","isVrekoHookPresent","preToolUseArray","some","entry","e","Array","isArray","h","hook","includes","isVrekoPostHookPresent","postToolUseArray","copyHookScripts","cwd","hooksDir","hookDest","postHookDest","Error","copyFileSync","chmodSync","mergeHookEntries","preToolUse","PreToolUse","postToolUse","PostToolUse","writeVrekoConfigHooks","cfgHooks","installed","mode","fragileThreshold","installedAt","Date","toISOString","postToolUseInstalled","installHook","tool","process","log","uninstallHook","exit","entryHooks","rmSync","claudeCodeCfg","hookStatus","configInstalled","scriptExists","settingsHasEntry","settingsHasPostEntry","postScriptExists","fullyInstalled","notInstalled","createHooksCommand","Command","description","addHelpText","requiredOption","option","action","opts","GROUND_TRUTH_SKILL_CONTENT","cliVersion","__CLI_VERSION__","createInitCommand","argument","options","runInit","json","success","pathArg","jsonMode","skipPrompts","yes","nonInteractive","cliState","quiet","verbose","version","alreadyInitialized","reinitialized","detection","stack","monorepoType","packageManager","gitRepo","gitRoot","fileCount","configuration","configCreated","gitignoreUpdated","ctxStubCreated","service","started","connected","workspaceRegistered","skipped","skipService","mcp","clients","configured","skipMcp","errors","spinner","ora","start","resolve","fail","statSync","isDirectory","vrekoDir","force","detected","detectStack","succeed","dryRun","stderr","write","consentResult","confirm","message","initialValue","isCancel","clack","cancel","proceedResult","basename","configSpinner","buildWorkspaceConfig","ensureGitignore","ctxPath","info","daemonSpinner","daemonResult","registerWithDaemon","daemonErrorMsg","errorMessage","warn","client","getDaemonClient","seedResult","call","seeded","mcpSpinner","mcpResult","configureMCP","apiKey","dev","npm","claudeSpinner","baselineData","record","undefined","claudeResult","_f","claudeDir","hasClaudeCode","skillDir","skillPath","installSkill","skillError","skillMessage","String","countSourceFiles","configuredTools","toolList","supervisorOk","supervisorInstalled","chalk","green","yellow","cyan","white","authStatus","checkAuthToken","hasToken","findGitRoot","lockfiles","pm","signals","seen","Set","label","has","add","pkgPath","pkg","allDeps","dependencies","devDependencies","depSignals","dep","name","protection","intelligence","enabled","createdAt","gitignorePath","split","l","trim","endsWith","appendFileSync","startAndConnectDaemon","connectToDaemon","health","check","supervisorMode","execFileSync","stdio","timeout","text","maxWait","interval","waited","sleep","_startError","registerWorkspaceWithDaemon","_regError","_workspacePath","getDaemonPid","_error","pidPath","getServicePidPath","devMode","npmMode","_skipPrompts","detectAIClients","stop","needsSetup","clientSpinner","displayName","hasVreko","mcpConfig","getVrekoMCPConfig","useNpx","useLocalDev","workspaceRoot","format","writeResult","writeClientConfig","exists","extensions","skip","count","walk","entries","readdir","withFileTypes","extname","ms","Promise","setTimeout","env","VREKO_SERVICE_TOKEN","source","VREKO_API_KEY","authPath","authContent","auth","token"],"mappings":"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","file":"chunk-HME7USNG.js","sourcesContent":["/**\n * Claude Code Integration Generator\n *\n * Generates .mcp.json, .claude/agents/, and .claude/commands/ files that\n * enable Claude Code auto-discovery of Vreko tools and workspace intelligence.\n *\n * Data source: BaselineRecord (fetched via `baseline/get` IPC call) provides\n * fragileFiles (compositeScore 0-100) and coChangeClusters (coOccurrenceRate 0-1).\n *\n * @module services/claude-integration\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { resolveVrekoBinaryPath } from \"@vreko/mcp-config\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ClaudeIntegrationConfig {\n\t/** Workspace root path */\n\tworkspacePath: string;\n\t/** Whether to overwrite existing files (default: false) */\n\toverwrite?: boolean;\n\t/**\n\t * Whether to include channel server config in .mcp.json (default: false).\n\t *\n\t * NOTE: A .mcp.json entry alone does NOT enable push channel behavior.\n\t * Claude Code channels require `claude --channels server:vreko-channel`\n\t * at startup. During research preview: `--dangerously-load-development-channels`.\n\t * Only set to true when the user explicitly opts in via `vr claude-sync --channel`.\n\t */\n\tincludeChannel?: boolean;\n}\n\nexport interface GenerationResult {\n\t/** Files that were created or updated */\n\tfilesWritten: string[];\n\t/** Files that were skipped (already exist and overwrite=false) */\n\tfilesSkipped: string[];\n\t/** Whether intelligence data was available to enrich agents */\n\tintelligenceAvailable: boolean;\n\t/** Count of fragile files included in agent instructions */\n\tfragileFilesIncluded: number;\n\t/** Count of co-change patterns included */\n\tcoChangePatternsIncluded: number;\n\t/** Whether the global ~/.claude/settings.json was updated */\n\tglobalSettingsUpdated: boolean;\n}\n\n/** Fragile file entry from BaselineRecord - compositeScore is 0-100 */\nexport interface BaselineFragileFile {\n\tpath: string;\n\tcompositeScore: number;\n}\n\n/** Co-change cluster from BaselineRecord */\nexport interface BaselineCoChangeCluster {\n\tfiles: string[];\n\tcoOccurrenceRate: number;\n}\n\nexport interface BaselineData {\n\tfragileFiles?: BaselineFragileFile[];\n\tcoChangeClusters?: BaselineCoChangeCluster[];\n}\n\n// =============================================================================\n// Generator\n// =============================================================================\n\n/**\n * Generate Claude Code integration files for a workspace.\n *\n * Idempotent: skips files that already exist unless overwrite=true.\n * Gracefully degrades: generates static content if no baseline data is available.\n */\nexport function generateClaudeIntegration(config: ClaudeIntegrationConfig, baseline?: BaselineData): GenerationResult {\n\tconst { workspacePath, overwrite = false } = config;\n\tconst result: GenerationResult = {\n\t\tfilesWritten: [],\n\t\tfilesSkipped: [],\n\t\tintelligenceAvailable: false,\n\t\tfragileFilesIncluded: 0,\n\t\tcoChangePatternsIncluded: 0,\n\t\tglobalSettingsUpdated: false,\n\t};\n\n\t// Normalize fragile files: compositeScore 0-100 → score 0-1, derive level\n\tconst fragileFiles = (baseline?.fragileFiles ?? [])\n\t\t.filter((f) => f.compositeScore >= 30)\n\t\t.sort((a, b) => b.compositeScore - a.compositeScore)\n\t\t.slice(0, 15)\n\t\t.map((f) => ({\n\t\t\tpath: f.path,\n\t\t\tscore: f.compositeScore / 100,\n\t\t\tlevel: f.compositeScore >= 80 ? \"critical\" : f.compositeScore >= 60 ? \"fragile\" : \"moderate\",\n\t\t}));\n\n\t// Extract co-change pairs from clusters (take first two files in each cluster)\n\tconst coChangePairs = (baseline?.coChangeClusters ?? [])\n\t\t.filter((c) => c.files.length >= 2 && c.coOccurrenceRate >= 0.5)\n\t\t.sort((a, b) => b.coOccurrenceRate - a.coOccurrenceRate)\n\t\t.slice(0, 10)\n\t\t.map((c) => ({\n\t\t\tfileA: c.files[0] as string,\n\t\t\tfileB: c.files[1] as string,\n\t\t\tfrequency: c.coOccurrenceRate,\n\t\t}));\n\n\tresult.intelligenceAvailable = fragileFiles.length > 0 || coChangePairs.length > 0;\n\tresult.fragileFilesIncluded = fragileFiles.length;\n\tresult.coChangePatternsIncluded = coChangePairs.length;\n\n\tconst files: Array<{ relativePath: string; content: string }> = [\n\t\t{ relativePath: \".mcp.json\", content: buildMcpJson(config) },\n\t\t{\n\t\t\trelativePath: \".claude/agents/vreko-preflight.md\",\n\t\t\tcontent: buildPreflightAgent(fragileFiles, coChangePairs),\n\t\t},\n\t\t{ relativePath: \".claude/agents/vreko-session.md\", content: VREKO_SESSION_AGENT },\n\t\t{ relativePath: \".claude/commands/snap-check.md\", content: SNAP_CHECK_COMMAND },\n\t];\n\n\tfor (const file of files) {\n\t\tconst fullPath = join(workspacePath, file.relativePath);\n\t\tconst dir = join(fullPath, \"..\");\n\n\t\tif (existsSync(fullPath) && !overwrite) {\n\t\t\tconst existing = readFileSync(fullPath, \"utf-8\");\n\t\t\tconst existingHash = createHash(\"sha256\").update(existing).digest(\"hex\");\n\t\t\tconst newHash = createHash(\"sha256\").update(file.content).digest(\"hex\");\n\t\t\t// Content changed but overwrite=false: mark as modified to surface in output\n\t\t\tconst suffix = existingHash !== newHash ? \" (modified, use --force to update)\" : \"\";\n\t\t\tresult.filesSkipped.push(`${file.relativePath}${suffix}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tmkdirSync(dir, { recursive: true });\n\t\twriteFileSync(fullPath, file.content, \"utf-8\");\n\t\tresult.filesWritten.push(file.relativePath);\n\t}\n\n\tresult.globalSettingsUpdated = writeVrekoToClaudeCodeGlobalSettings();\n\n\treturn result;\n}\n\n// =============================================================================\n// Template builders\n// =============================================================================\n\nfunction buildMcpJson(config: ClaudeIntegrationConfig): string {\n\t// Resolve absolute command path for MCP server entry.\n\t// IDE-spawned processes don't inherit shell aliases, so we need a real path.\n\t// Fallback chain: (a) node + CLI dist index.js, (b) resolved vreko binary\n\tconst { command, args: cmdArgs } = resolveMcpCommand(config.workspacePath);\n\n\tconst servers: Record<string, unknown> = {\n\t\tvreko: {\n\t\t\ttype: \"stdio\",\n\t\t\tcommand,\n\t\t\targs: cmdArgs,\n\t\t\tinstructions:\n\t\t\t\t\"Vreko provides codebase intelligence. Use vreko_pulse to check risk before modifying files. Use vreko_learn to record patterns. Use vreko_end to close sessions.\",\n\t\t},\n\t};\n\n\tif (config.includeChannel === true) {\n\t\tconst channelArgs = [...cmdArgs];\n\t\t// For node-based command, append --channel flag\n\t\tchannelArgs.push(\"--channel\");\n\t\tservers[\"vreko-channel\"] = {\n\t\t\ttype: \"stdio\",\n\t\t\tcommand,\n\t\t\targs: channelArgs,\n\t\t\tinstructions:\n\t\t\t\t\"Vreko intelligence channel. Pushes real-time warnings about fragile files and risk spikes. Requires: claude --channels vreko-channel\",\n\t\t};\n\t}\n\n\treturn `${JSON.stringify({ mcpServers: servers }, null, 2)}\\n`;\n}\n\n/**\n * Resolve the MCP command using the vreko binary absolute path.\n *\n * Uses `which vreko` to get the absolute path, with fallbacks to well-known\n * install locations. An absolute path is required because IDE and daemon\n * processes spawn without a shell (no PATH augmentation, no aliases).\n */\nfunction resolveMcpCommand(workspacePath: string): { command: string; args: string[] } {\n\treturn {\n\t\tcommand: resolveVrekoBinaryPath(),\n\t\targs: [\"mcp\", \"--stdio\", \"--workspace\", workspacePath],\n\t};\n}\n\n/**\n * Merge a `vreko` entry into ~/.claude/settings.json so Claude Code picks up\n * the MCP server globally, not just via project-level .mcp.json.\n *\n * Idempotent - skips if the entry already exists with the same command.\n * Returns true if the file was modified.\n */\nfunction writeVrekoToClaudeCodeGlobalSettings(): boolean {\n\tconst settingsPath = join(homedir(), \".claude\", \"settings.json\");\n\tif (!existsSync(settingsPath)) {\n\t\treturn false;\n\t}\n\n\tlet settings: Record<string, unknown> = {};\n\ttry {\n\t\tsettings = JSON.parse(readFileSync(settingsPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch {\n\t\treturn false;\n\t}\n\n\tconst mcpServers = (settings.mcpServers ?? {}) as Record<string, unknown>;\n\tconst command = resolveVrekoBinaryPath();\n\n\t// Skip if already wired with the same command\n\tconst existing = mcpServers.vreko as { command?: string } | undefined;\n\tif (existing?.command === command) {\n\t\treturn false;\n\t}\n\n\tmcpServers.vreko = { command, args: [\"mcp\", \"--stdio\"] };\n\tsettings.mcpServers = mcpServers;\n\n\ttry {\n\t\twriteFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`, \"utf-8\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction buildPreflightAgent(\n\tfragileFiles: Array<{ path: string; score: number; level: string }>,\n\tcoChangePairs: Array<{ fileA: string; fileB: string; frequency: number }>,\n): string {\n\tlet fragileSection: string;\n\n\tif (fragileFiles.length > 0) {\n\t\tconst lines = fragileFiles\n\t\t\t.map((f) => `- \\`${f.path}\\` - fragility: ${f.level} (score: ${f.score.toFixed(2)})`)\n\t\t\t.join(\"\\n\");\n\n\t\tfragileSection = `## Known Fragile Files in This Codebase\n\nThe following files have high rollback rates or frequent issues:\n\n${lines}\n\nIf the task involves any of these files, always recommend creating\na snapshot before modification.`;\n\t} else {\n\t\tfragileSection = `## Codebase Intelligence\n\nVreko is still learning about this codebase. Use vreko_pulse\nto get real-time risk assessment for any files being modified.\nIntelligence will improve as more sessions are tracked.`;\n\t}\n\n\tlet coChangeSection = \"\";\n\n\tif (coChangePairs.length > 0) {\n\t\tconst lines = coChangePairs\n\t\t\t.map((p) => `- \\`${p.fileA}\\` ↔ \\`${p.fileB}\\` (${(p.frequency * 100).toFixed(0)}% co-change rate)`)\n\t\t\t.join(\"\\n\");\n\n\t\tcoChangeSection = `\n\n## Co-Change Patterns\n\nThese files historically change together. If modifying one,\ncheck whether the others also need updates:\n\n${lines}`;\n\t}\n\n\treturn `---\nname: vreko-preflight\ndescription: >\n Run before implementing changes that touch multiple files\n or modify config/infrastructure. Queries Vreko for risk\n context and known fragile patterns in this codebase.\ntools:\n - Read\n - Grep\n - Glob\n - mcp__vreko__vreko_pulse\n---\n\nYou are a preflight check agent for this codebase. Vreko has\naccumulated intelligence about which files are risky and which\nfiles always change together.\n\nBefore the parent agent modifies files, you:\n\n1. Call vreko_pulse with the workspace path and list of files about to change\n2. Check the risk assessment in the response\n3. Flag any files with HIGH or CRITICAL fragility\n4. Surface co-change patterns (files that must change together)\n5. Return a structured summary to the parent agent:\n - Files safe to modify in parallel\n - Files requiring sequential, careful changes\n - Known pitfalls from codebase history\n - Whether a snapshot is recommended before proceeding\n\nDo NOT modify any files. Read-only analysis only.\n\n${fragileSection}${coChangeSection}\n`;\n}\n\nconst VREKO_SESSION_AGENT = `---\nname: vreko-session\ndescription: >\n Manage Vreko session lifecycle. Use at the start and\n end of significant implementation work to capture context\n and trigger intelligence collection.\ntools:\n - mcp__vreko__vreko\n - mcp__vreko__vreko_learn\n - mcp__vreko__vreko_end\n---\n\nYou manage Vreko sessions for this codebase.\n\nWhen starting work:\n- Call vreko to begin a session with a descriptive task name\n- Note the session context for the parent agent\n\nWhen completing work:\n- Call vreko_learn with any patterns discovered during implementation:\n - Files that needed to change together (co-change pattern)\n - Config that was fragile or surprising (fragile pattern)\n - Dependencies that weren't obvious (dependency pattern)\n - Conventions the codebase follows (convention pattern)\n- Call vreko_end to close the session\n\nCapture learnings in this format:\n- Pattern type: co-change | fragile | dependency | convention\n- Affected files: list of file paths\n- Description: what the implementing agent discovered\n\nThe more patterns captured, the better Vreko's intelligence\nbecomes for future sessions.\n`;\n\nconst SNAP_CHECK_COMMAND = `---\ndescription: Check Vreko risk context for files you're about to change\nargument-hint: <file paths or description of planned changes>\n---\n\nQuery Vreko intelligence for the specified files or task.\n\n1. Call the vreko_pulse MCP tool with the provided context\n2. Display risk scores, fragile file warnings, and relevant history\n3. If any file has fragility level \"fragile\" or \"critical\", warn explicitly\n4. List co-change groups - files that should be modified together\n5. Recommend whether to create a manual snapshot before proceeding\n6. If fragile files are involved, suggest the vreko-preflight agent\n for more detailed analysis\n`;\n","/**\n * Hooks Command - Manage Vreko integration hooks for AI coding tools.\n *\n * Spec: claude-code-pretooluse-hook-v1 (AMBIENT-06)\n *\n * Usage:\n * vreko hooks install --tool claude-code\n * vreko hooks uninstall --tool claude-code\n * vreko hooks status\n */\n\nimport { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command } from \"commander\";\n\n// Path to the bundled hook script relative to this source file.\n// tsup bundles commands into chunks under dist/ (not dist/commands/), so the\n// compiled file's dirname is apps/cli/dist/ and scripts live at apps/cli/scripts/.\n// The path is therefore one level up from dist/ - not two.\nconst HOOK_SCRIPT_SRC = join(dirname(fileURLToPath(import.meta.url)), \"../scripts/hooks/pretooluse-fragile-guard.sh\");\n\nconst VREKO_HOOK_COMMAND = \".claude/hooks/vreko-fragile-guard.sh\";\nconst VREKO_HOOK_MARKER = \"vreko-fragile-guard.sh\";\n\n// ---------------------------------------------------------------------------\n// Hook entry that gets merged into .claude/settings.json\n// ---------------------------------------------------------------------------\n\nconst HOOK_ENTRY = {\n\tmatcher: \"Edit|Write|MultiEdit\",\n\thooks: [\n\t\t{\n\t\t\ttype: \"command\",\n\t\t\tcommand: VREKO_HOOK_COMMAND,\n\t\t},\n\t],\n};\n\n// Path to the bundled PostToolUse hook script relative to this source file.\n// Same dist/ layout reasoning as HOOK_SCRIPT_SRC above.\nconst POST_HOOK_SCRIPT_SRC = join(\n\tdirname(fileURLToPath(import.meta.url)),\n\t\"../scripts/hooks/posttooluse-file-notify.sh\",\n);\n\nconst POST_HOOK_COMMAND = \".claude/hooks/vreko-file-notify.sh\";\nconst POST_HOOK_MARKER = \"vreko-file-notify.sh\";\n\n// PostToolUse hook entry - notifies daemon of file changes for fileIndex population\nconst POST_HOOK_ENTRY = {\n\tmatcher: \"Edit|Write|MultiEdit\",\n\thooks: [\n\t\t{\n\t\t\ttype: \"command\",\n\t\t\tcommand: POST_HOOK_COMMAND,\n\t\t},\n\t],\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction readSettings(settingsPath: string): Record<string, unknown> {\n\tif (!existsSync(settingsPath)) {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(readFileSync(settingsPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch (err) {\n\t\tconsole.error(`[vreko hooks] Failed to parse ${settingsPath}:`, err);\n\t\treturn {};\n\t}\n}\n\nfunction writeSettings(settingsPath: string, settings: Record<string, unknown>): void {\n\twriteFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction readVrekoConfig(workspace: string): Record<string, unknown> {\n\tconst configPath = join(workspace, \".vreko\", \"config.json\");\n\tif (!existsSync(configPath)) {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\t} catch (err) {\n\t\tconsole.error(\"[vreko hooks] Failed to parse .vreko/config.json:\", err);\n\t\treturn {};\n\t}\n}\n\nfunction writeVrekoConfig(workspace: string, config: Record<string, unknown>): void {\n\tconst configDir = join(workspace, \".vreko\");\n\tif (!existsSync(configDir)) {\n\t\tmkdirSync(configDir, { recursive: true });\n\t}\n\twriteFileSync(join(configDir, \"config.json\"), `${JSON.stringify(config, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction isVrekoHookPresent(preToolUseArray: unknown[]): boolean {\n\treturn preToolUseArray.some((entry) => {\n\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\treturn false;\n\t\t}\n\t\tconst e = entry as Record<string, unknown>;\n\t\tconst hooks = e.hooks;\n\t\tif (!Array.isArray(hooks)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn hooks.some((h) => {\n\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(VREKO_HOOK_MARKER);\n\t\t});\n\t});\n}\n\nfunction isVrekoPostHookPresent(postToolUseArray: unknown[]): boolean {\n\treturn postToolUseArray.some((entry) => {\n\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\treturn false;\n\t\t}\n\t\tconst e = entry as Record<string, unknown>;\n\t\tconst hooks = e.hooks;\n\t\tif (!Array.isArray(hooks)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn hooks.some((h) => {\n\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(POST_HOOK_MARKER);\n\t\t});\n\t});\n}\n\n// ---------------------------------------------------------------------------\n// Core install / uninstall logic (exported for use in configure-tools.ts)\n// ---------------------------------------------------------------------------\n\nfunction copyHookScripts(cwd: string): { hookDest: string; postHookDest: string } {\n\tconst hooksDir = join(cwd, \".claude\", \"hooks\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\n\tif (!existsSync(HOOK_SCRIPT_SRC)) {\n\t\t// Throw instead of process.exit so callers (e.g. init-core's try-catch) can\n\t\t// handle gracefully without killing the whole init process.\n\t\tthrow new Error(`Hook script not found at ${HOOK_SCRIPT_SRC}`);\n\t}\n\tif (!existsSync(hooksDir)) {\n\t\tmkdirSync(hooksDir, { recursive: true });\n\t}\n\tcopyFileSync(HOOK_SCRIPT_SRC, hookDest);\n\tchmodSync(hookDest, 0o755);\n\n\tif (existsSync(POST_HOOK_SCRIPT_SRC)) {\n\t\tcopyFileSync(POST_HOOK_SCRIPT_SRC, postHookDest);\n\t\tchmodSync(postHookDest, 0o755);\n\t} else {\n\t\tconsole.error(`[vreko hooks] PostToolUse hook script not found at ${POST_HOOK_SCRIPT_SRC}`);\n\t}\n\treturn { hookDest, postHookDest };\n}\n\nfunction mergeHookEntries(settingsPath: string): void {\n\tconst settings = readSettings(settingsPath);\n\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\tconst preToolUse = Array.isArray(hooks.PreToolUse) ? (hooks.PreToolUse as unknown[]) : [];\n\tconst postToolUse = Array.isArray(hooks.PostToolUse) ? (hooks.PostToolUse as unknown[]) : [];\n\tif (!isVrekoHookPresent(preToolUse)) preToolUse.push(HOOK_ENTRY);\n\tif (!isVrekoPostHookPresent(postToolUse)) postToolUse.push(POST_HOOK_ENTRY);\n\thooks.PreToolUse = preToolUse;\n\thooks.PostToolUse = postToolUse;\n\tsettings.hooks = hooks;\n\twriteSettings(settingsPath, settings);\n}\n\nfunction writeVrekoConfigHooks(cwd: string): void {\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tcfgHooks[\"claude-code\"] = {\n\t\tinstalled: true,\n\t\tmode: \"advisory\",\n\t\tfragileThreshold: 2,\n\t\tinstalledAt: new Date().toISOString(),\n\t\tpostToolUseInstalled: true,\n\t};\n\tconfig.hooks = cfgHooks;\n\twriteVrekoConfig(cwd, config);\n}\n\nexport async function installHook(tool: string, workspace?: string): Promise<void> {\n\tif (tool !== \"claude-code\") {\n\t\tthrow new Error(`Hook install for '${tool}' is not yet supported. Only 'claude-code' is supported.`);\n\t}\n\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst { hookDest, postHookDest } = copyHookScripts(cwd);\n\tmergeHookEntries(settingsPath);\n\twriteVrekoConfigHooks(cwd);\n\n\tconsole.log(\"Vreko hooks installed for Claude Code\");\n\tconsole.log(` PreToolUse hook: ${hookDest}`);\n\tconsole.log(` Settings: ${settingsPath}`);\n}\n\nexport async function uninstallHook(tool: string, workspace?: string): Promise<void> {\n\tif (tool !== \"claude-code\") {\n\t\tconsole.error(`[vreko hooks] Hook uninstall for '${tool}' is not yet supported.`);\n\t\tprocess.exit(1);\n\t}\n\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\n\t// 1. Remove hook entries from settings.json\n\tif (existsSync(settingsPath)) {\n\t\ttry {\n\t\t\tconst settings = readSettings(settingsPath);\n\t\t\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\t\t\tif (Array.isArray(hooks.PreToolUse)) {\n\t\t\t\thooks.PreToolUse = (hooks.PreToolUse as unknown[]).filter((entry) => {\n\t\t\t\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tconst e = entry as Record<string, unknown>;\n\t\t\t\t\tconst entryHooks = e.hooks;\n\t\t\t\t\tif (!Array.isArray(entryHooks)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !entryHooks.some((h) => {\n\t\t\t\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\t\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(VREKO_HOOK_MARKER);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (Array.isArray(hooks.PostToolUse)) {\n\t\t\t\thooks.PostToolUse = (hooks.PostToolUse as unknown[]).filter((entry) => {\n\t\t\t\t\tif (typeof entry !== \"object\" || entry === null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tconst e = entry as Record<string, unknown>;\n\t\t\t\t\tconst entryHooks = e.hooks;\n\t\t\t\t\tif (!Array.isArray(entryHooks)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !entryHooks.some((h) => {\n\t\t\t\t\t\tif (typeof h !== \"object\" || h === null) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hook = h as Record<string, unknown>;\n\t\t\t\t\t\treturn typeof hook.command === \"string\" && hook.command.includes(POST_HOOK_MARKER);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tsettings.hooks = hooks;\n\t\t\twriteSettings(settingsPath, settings);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to update settings.json:\", err);\n\t\t}\n\t}\n\n\t// 2. Delete hook scripts\n\tif (existsSync(hookDest)) {\n\t\ttry {\n\t\t\trmSync(hookDest);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to remove PreToolUse hook script:\", err);\n\t\t}\n\t}\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\tif (existsSync(postHookDest)) {\n\t\ttry {\n\t\t\trmSync(postHookDest);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[vreko hooks] Failed to remove PostToolUse hook script:\", err);\n\t\t}\n\t}\n\n\t// 3. Update .vreko/config.json\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tconst claudeCodeCfg = (cfgHooks[\"claude-code\"] ?? {}) as Record<string, unknown>;\n\tclaudeCodeCfg.installed = false;\n\tcfgHooks[\"claude-code\"] = claudeCodeCfg;\n\tconfig.hooks = cfgHooks;\n\twriteVrekoConfig(cwd, config);\n\n\tconsole.log(\"Vreko hook removed\");\n}\n\nexport async function hookStatus(workspace?: string): Promise<void> {\n\tconst cwd = workspace ?? process.cwd();\n\tconst settingsPath = join(cwd, \".claude\", \"settings.json\");\n\tconst hookDest = join(cwd, VREKO_HOOK_COMMAND);\n\n\t// Check config\n\tconst config = readVrekoConfig(cwd);\n\tconst cfgHooks = (config.hooks ?? {}) as Record<string, unknown>;\n\tconst claudeCodeCfg = (cfgHooks[\"claude-code\"] ?? {}) as Record<string, unknown>;\n\tconst configInstalled = claudeCodeCfg.installed === true;\n\n\t// Check hook script\n\tconst scriptExists = existsSync(hookDest);\n\n\t// Check settings.json entries (PreToolUse and PostToolUse)\n\tconst settings = readSettings(settingsPath);\n\tconst hooks = (settings.hooks ?? {}) as Record<string, unknown>;\n\tconst preToolUse = Array.isArray(hooks.PreToolUse) ? (hooks.PreToolUse as unknown[]) : [];\n\tconst postToolUse = Array.isArray(hooks.PostToolUse) ? (hooks.PostToolUse as unknown[]) : [];\n\tconst settingsHasEntry = isVrekoHookPresent(preToolUse);\n\tconst settingsHasPostEntry = isVrekoPostHookPresent(postToolUse);\n\tconst postHookDest = join(cwd, POST_HOOK_COMMAND);\n\tconst postScriptExists = existsSync(postHookDest);\n\n\tconsole.log(\"Vreko hooks status:\");\n\tconsole.log(` Config installed flag: ${configInstalled ? \"✅ true\" : \"❌ false\"}`);\n\tconsole.log(\n\t\t` PreToolUse: script ${scriptExists ? \"✅\" : \"❌\"}, settings ${settingsHasEntry ? \"✅\" : \"❌\"}`,\n\t);\n\tconsole.log(\n\t\t` PostToolUse: script ${postScriptExists ? \"✅\" : \"❌\"}, settings ${settingsHasPostEntry ? \"✅\" : \"❌\"}`,\n\t);\n\n\tconst fullyInstalled =\n\t\tconfigInstalled && scriptExists && settingsHasEntry && postScriptExists && settingsHasPostEntry;\n\tconst notInstalled =\n\t\t!configInstalled && !scriptExists && !settingsHasEntry && !postScriptExists && !settingsHasPostEntry;\n\n\tif (fullyInstalled) {\n\t\tconsole.log(\"\\n✅ All hooks fully installed and active\");\n\t\tif (claudeCodeCfg.mode) {\n\t\t\tconsole.log(` Mode: ${claudeCodeCfg.mode}`);\n\t\t}\n\t} else if (notInstalled) {\n\t\tconsole.log(\"\\n Not installed. Run: vreko hooks install --tool claude-code\");\n\t} else {\n\t\tconsole.log(\"\\n⚠️ Partial install detected. Run uninstall then reinstall to fix.\");\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Commander command factory\n// ---------------------------------------------------------------------------\n\nexport function createHooksCommand(): Command {\n\tconst hooks = new Command(\"hooks\")\n\t\t.description(\"Manage Vreko integration hooks for AI coding tools\")\n\t\t.addHelpText(\"after\", \"\\nExamples:\\n vreko hooks install --tool claude-code\\n vreko hooks status\\n\");\n\n\thooks\n\t\t.command(\"install\")\n\t\t.description(\"Install the Vreko PreToolUse hook for the specified AI tool\")\n\t\t.requiredOption(\"--tool <tool>\", \"AI tool to install hook for (e.g. claude-code)\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { tool: string; workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait installHook(opts.tool, opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Install failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\thooks\n\t\t.command(\"uninstall\")\n\t\t.description(\"Remove the Vreko PreToolUse hook for the specified AI tool\")\n\t\t.requiredOption(\"--tool <tool>\", \"AI tool to uninstall hook for (e.g. claude-code)\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { tool: string; workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait uninstallHook(opts.tool, opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Uninstall failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\thooks\n\t\t.command(\"status\")\n\t\t.description(\"Show current hook installation status\")\n\t\t.option(\"--workspace <path>\", \"Workspace directory (default: cwd)\")\n\t\t.action(async (opts: { workspace?: string }) => {\n\t\t\ttry {\n\t\t\t\tawait hookStatus(opts.workspace);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[vreko hooks] Status check failed:\", err);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n\n\treturn hooks;\n}\n","/**\n * Init Command\n *\n * Ecosystem bootstrapper - one command to make a workspace fully operational.\n * Detects stack, creates config, registers with service, configures MCP.\n *\n * CANONICAL INSTALL CONTRACT (R-P0-3):\n * `vr init` is the self-sufficient installer. It is the ONLY single action that\n * wires a *complete* workspace, writing BOTH the MCP client config (registering\n * the `vreko` MCP server) AND the `PostToolUse` per-edit hook into\n * `.claude/settings.json` (via installHook). Together these produce a fully\n * wired intelligence pipeline.\n *\n * Plugin-only installation (`/plugin install vreko` without `vr init`) is a\n * KNOWN-INCOMPLETE state, not a supported happy path: the plugin registers the\n * MCP server but installs no PostToolUse hook, so per-edit activity never\n * reaches the daemon and intelligence never updates. `vr status` surfaces a\n * warning when the MCP server is registered but the PostToolUse hook is absent;\n * that warning means \"run vr init\". See R-SEAM-2 for the assertion and\n * apps/claude-code-plugin/INSTALL.md for the user-facing contract.\n *\n * Follows thin-client pattern: CLI owns all logic, extension delegates via --json.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from \"node:fs\";\nimport { readdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, extname, join, resolve } from \"node:path\";\nimport * as clack from \"@clack/prompts\";\n// Reuse detection and MCP config from mcp-config package\nimport { detectAIClients, getVrekoMCPConfig, writeClientConfig } from \"@vreko/mcp-config\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport ora, { type Ora } from \"ora\";\nimport { cliState } from \"../../cli-state.js\";\nimport { getServicePidPath } from \"../../service-adapter/local-service-adapter\";\nimport { generateClaudeIntegration } from \"../../services/claude-integration.js\";\n// Reuse service client\nimport { connectToDaemon, getDaemonClient } from \"../../services/service-client\";\n// Workspace utilities\nimport { findGitRoot } from \"../../utils/workspace\";\nimport { installHook } from \"../hooks.js\";\n\n// =============================================================================\n// GROUND TRUTH SKILL CONTENT\n// DO NOT summarize or paraphrase - skill frontmatter is required for Claude Code activation\n// =============================================================================\n\nconst GROUND_TRUTH_SKILL_CONTENT = `---\nname: ground-truth\ndescription: Disciplined methodology for AI-assisted coding that keeps Claude anchored to what the codebase actually says instead of what Claude assumes. Use this skill for any non-trivial coding task - refactors, multi-file changes, bug fixes, feature implementation, spec work, or anything touching more than a single function. Also use when the user mentions \"refactor,\" \"implement,\" \"add a feature,\" \"fix this bug,\" \"migrate,\" \"clean up,\" \"audit,\" or anything that implies structured work on a real codebase. Especially use when working inside a git repository or when the user references files, modules, or prior work. Do not skip for tasks that seem simple on the surface; small changes in real codebases frequently have non-obvious ripple effects, and Ground Truth is built to catch those before they ship. The skill also responds to the user phrases \"run ground truth,\" \"ground truth audit,\" \"brief me,\" \"verify this,\" \"close the session,\" and \"pulse check.\"\n---\n\n# Ground Truth\n\nA methodology for disciplined coding work in real codebases, powered by Vreko behavioral intelligence.\n\n## The core principle\n\nGround truth is what the codebase actually says - the imports that actually exist, the functions that are actually called, the types that are actually exported, the tests that actually pass. Everything else is assumption. LLMs produce code that looks right more easily than they produce code that is right in the specific context of the codebase in front of them. The gap between those two things is where regressions live.\n\nGround Truth closes that gap with four disciplines and five workflows. The disciplines are the mindset; the workflows are the verbs the user invokes.\n\n## Pre-flight (run once per session, first)\n\nBefore any workflow, check the capability surface:\n\n\\`\\`\\`bash\n# Is Vreko installed and running?\nvreko --version 2>/dev/null && vreko service status 2>/dev/null\n\\`\\`\\`\n\nIf the command fails with \"command not found\", explain to the user in one sentence what Vreko does and offer to install it:\n\n> Vreko is a local service that tracks changes to this codebase, attributes them to AI tools, and surfaces codebase-specific intelligence as you work. Want me to install it? (\\`npm install -g @vreko/cli && vreko init\\`)\n\nDo not install without approval. If the user approves, run the install, then \\`vreko init\\`, then continue with the requested workflow. If the user declines, Ground Truth degrades gracefully - the methodology still applies, the Vreko-specific MCP calls are skipped.\n\nIf the workspace has \\`.vreko/docs/\\` present, read \\`INTELLIGENCE.md\\` before any workflow. That file contains the capability declaration, current session context, and intelligence summary. Treat it as authoritative for this codebase.\n\n## Workflow 1: \\`ground-truth brief\\`\n\n**Trigger phrases:** \"brief me,\" \"what do I need to know,\" \"give me context,\" \"start a session\"\n\n**What it does:** Opens a Vreko session, reads the ambient docs, synthesizes a short briefing for the user.\n\n**Steps:**\n1. Call MCP tool \\`vreko\\` with a task description derived from the user's request.\n2. Read \\`.vreko/docs/INTELLIGENCE.md\\` and \\`.vreko/docs/current-session.md\\` if they exist.\n3. Synthesize a ≤200-word briefing covering: what this codebase is, what's fragile, what the agent has learned about it, what the user should be aware of before working.\n4. Present the briefing inline; do not create a file.\n\n**Output format:**\n\\`\\`\\`\nSession: <session-id>\nCodebase: <brief description>\nFragile files in scope: <list or \"none identified\">\nRecent patterns: <brief summary>\nWatch for: <1-2 specific risks>\n\\`\\`\\`\n\n**Anti-pattern:** Do not paraphrase the entire docs folder. Extract the two or three items relevant to what the user is about to do.\n\n## Workflow 2: \\`ground-truth audit\\`\n\n**Trigger phrases:** \"run ground truth audit,\" \"audit this,\" \"verify the current state,\" \"check the real state\"\n\n**What it does:** Runs a grep-based audit of the current codebase state to establish ground truth before proceeding. Pairs with \\`vreko_pulse\\` to fold in live intelligence.\n\n**Steps:**\n1. Identify the claim or scope to audit (ask if unclear).\n2. Generate 4-8 \\`rg\\` / \\`grep\\` commands that would verify the claim.\n3. Execute each command; capture output verbatim.\n4. Call \\`vreko_pulse\\` to pull live warnings and fragile-file data.\n5. Synthesize a report: what the audit found, what the pulse flagged, where they agree, where they disagree.\n6. If the user had assumptions going in, call out explicitly which were confirmed and which were contradicted.\n\n**Output format:**\n\\`\\`\\`\nClaim: <what was being verified>\n\nAudit results:\n [A1] <command> → <summary of output>\n [A2] <command> → <summary of output>\n ...\n\nPulse:\n Active warnings: <list>\n Fragile files in scope: <list>\n Missing co-change partners: <list>\n\nSynthesis:\n Confirmed: <list>\n Contradicted: <list>\n Unknown: <list>\n\\`\\`\\`\n\n**Anti-pattern:** Do not let the audit exceed 8 commands. If more depth is needed, split into two audits with distinct scopes.\n\n## Workflow 3: \\`ground-truth verify\\`\n\n**Trigger phrases:** \"verify this,\" \"run verification,\" \"check the work,\" \"gate this\"\n\n**What it does:** Runs the verification protocol for work that was just completed - tests, grep gates, lint. Records outcome as a learning.\n\n**Steps:**\n1. Identify the verification targets (which tests, which grep gates, which build commands).\n2. Run each in sequence. Capture exit codes and summary output.\n3. If all pass, call \\`vreko_learn\\` with a terse outcome record: \\`{ insight: \"<what was verified>: passed\", severity: \"info\" }\\`.\n4. If any fail, call \\`vreko_learn\\` with the failure: \\`{ insight: \"<what failed and why>\", severity: \"warn\" }\\`, then present the failure to the user; do not mark the work complete.\n5. Report pass/fail summary to the user.\n\n**Output format:**\n\\`\\`\\`\nVerification gates:\n [V1] <command> → PASS / FAIL\n [V2] <command> → PASS / FAIL\n ...\n\nOverall: PASS / FAIL\nLearning recorded: <learning-id>\n\\`\\`\\`\n\n**Anti-pattern:** Do not call work \"done\" without running verification. Do not skip verification because tests are slow; offer to run a subset if full suite is impractical.\n\n## Workflow 4: \\`ground-truth check\\`\n\n**Trigger phrases:** \"pulse check,\" \"quick check,\" \"how are we doing,\" \"anything I'm missing\"\n\n**What it does:** Lightweight mid-session check. Pulls \\`vreko_pulse\\` and annotates for the user what to be aware of for the next several turns.\n\n**Steps:**\n1. Call \\`vreko_pulse\\`.\n2. Read the \\`LLM_HINT\\` section of the response (see spec 03).\n3. Summarize in 2-3 sentences what the user should be aware of right now.\n4. If pulse returns warnings the user hasn't acknowledged, surface them.\n\n**Output format:** Brief prose, no tables. Example: \"Pulse check: you're in \\`auth/session.ts\\`, which was rolled back 4× in the last 90 days. Co-change partner \\`auth/middleware.ts\\` hasn't been touched yet - if you're refactoring session logic, middleware probably needs coordination. No other warnings.\"\n\n**Anti-pattern:** Do not repeat the same warning on consecutive checks. Track what was surfaced and only re-surface if state has changed.\n\n## Workflow 5: \\`ground-truth close\\`\n\n**Trigger phrases:** \"close the session,\" \"we're done here,\" \"wrap up,\" \"ceremony\"\n\n**What it does:** Closes the Vreko session, reads the closing ceremony, presents the summary.\n\n**Steps:**\n1. Call \\`vreko_end\\` with a one-sentence outcome summary of what was accomplished.\n2. Parse the ceremony response: learnings captured, pitfalls avoided, estimated token savings, session coherence score, carry-forward items.\n3. Present the summary to the user in a compact format.\n4. If there are carry-forward items, explicitly flag them for the next session.\n\n**Output format:**\n\\`\\`\\`\nSession closed: <session-id>\nOutcome: <one sentence>\n\nCeremony summary:\n Learnings captured: <n>\n Pitfalls avoided: <n>\n Token savings (est): ~<n>\n Coherence score: <n>%\n\nCarry forward to next session:\n • <item>\n • <item>\n\\`\\`\\`\n\n**Anti-pattern:** Do not skip the closing ceremony just because the session was short. Short sessions often have the most valuable learnings.\n\n## How workflows compose\n\nA typical disciplined coding session looks like:\n\n1. User states intent → Claude runs \\`ground-truth brief\\`.\n2. Before significant changes → Claude runs \\`ground-truth audit\\` on the scope.\n3. Mid-session, at file-change boundaries → Claude runs \\`ground-truth check\\`.\n4. After implementation → Claude runs \\`ground-truth verify\\`.\n5. At session end → Claude runs \\`ground-truth close\\`.\n\nThe user doesn't need to type these verbatim. The skill recognizes intent from natural phrasing.\n\n## What this skill does NOT do\n\n- Does not replace the user's judgment. If verification passes but something still feels wrong, stop and investigate.\n- Does not auto-install Vreko. Always asks.\n- Does not expose MCP tools directly to the user. The user asks for ground truth; the skill orchestrates the tools.\n- Does not write to \\`.vreko/docs/\\` directly. That's the service's job.\n\n## Integration with other Vreko skills\n\n- \\`vreko-ground-truth-audit\\` (published) - generates grep-based audit commands; Ground Truth's \\`audit\\` workflow uses its patterns.\n- \\`vreko-brand-voice\\` (published) - use when Ground Truth output will surface in external communication.\n- \\`vreko-spec-writer\\` (published) - use when Ground Truth discovers work that warrants a spec.\n\n## Installation\n\n\\`\\`\\`bash\n# Users install the skill file into their Claude Code skills directory:\nmkdir -p ~/.claude/skills/ground-truth\ncurl -o ~/.claude/skills/ground-truth/SKILL.md \\\\\n https://skills.vreko.dev/ground-truth/SKILL.md\n\\`\\`\\`\n\nOr, bundled: Ground Truth ships as the headline skill inside \\`@vreko/skills\\` npm package, which \\`vreko init\\` installs into the appropriate directory per detected AI tool.\n\n---\n\n**Version:** 1.0.0\n**Author:** Vreko / Marcelle Labs\n**License:** MIT (methodology); skill file free to distribute\n**Canonical URL:** https://vreko.dev/ground-truth\n`;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InitJsonResult {\n\tsuccess: boolean;\n\tversion: string;\n\tworkspace: {\n\t\tpath: string;\n\t\talreadyInitialized: boolean;\n\t\treinitialized: boolean;\n\t};\n\tdetection: {\n\t\tstack: string[];\n\t\tmonorepoType: string;\n\t\tpackageManager: string;\n\t\tgitRepo: boolean;\n\t\tgitRoot: string | null;\n\t\tfileCount: number;\n\t};\n\tconfiguration: {\n\t\tconfigCreated: boolean;\n\t\tgitignoreUpdated: boolean;\n\t\tctxStubCreated: boolean;\n\t};\n\tservice: {\n\t\tstarted: boolean;\n\t\tconnected: boolean;\n\t\tworkspaceRegistered: boolean;\n\t\tversion: string | null;\n\t\tskipped: boolean;\n\t\t/** undefined = not attempted; true = installed; false = install failed */\n\t\tsupervisorInstalled?: boolean;\n\t};\n\tmcp: {\n\t\tclients: Record<string, \"configured\" | \"already_configured\" | \"not_installed\" | \"failed\">;\n\t\tconfigured: string[];\n\t\tskipped: boolean;\n\t};\n\terrors: string[];\n\terror?: string;\n}\n\ninterface DetectedStack {\n\tstack: string[];\n\tmonorepoType: string;\n\tpackageManager: string;\n\tgitRepo: boolean;\n\tgitRoot: string | null;\n}\n\n// Version resolution (same pattern as other commands)\ndeclare const __CLI_VERSION__: string | undefined;\nconst cliVersion =\n\ttypeof __CLI_VERSION__ !== \"undefined\"\n\t\t? __CLI_VERSION__\n\t\t: (() => {\n\t\t\t\ttry {\n\t\t\t\t\treturn (require(\"../../package.json\") as { version: string }).version ?? \"0.0.0\";\n\t\t\t\t} catch {\n\t\t\t\t\treturn \"0.0.0-dev\";\n\t\t\t\t}\n\t\t\t})();\n\n// =============================================================================\n// COMMAND DEFINITION\n// =============================================================================\n\nexport function createInitCommand(): Command {\n\treturn new Command(\"init\")\n\t\t.description(\"Bootstrap Vreko for a repository\")\n\t\t.argument(\"[path]\", \"Workspace path (default: current directory)\")\n\t\t.option(\"-y, --yes\", \"Skip confirmation prompts\")\n\t\t.option(\"--non-interactive\", \"Run without prompts (extension/automation)\")\n\t\t.option(\"--json\", \"Output structured JSON result\")\n\t\t.option(\"--dry-run\", \"Show what would be configured\")\n\t\t.option(\"--force\", \"Re-initialize even if already set up\")\n\t\t.option(\"--skip-mcp\", \"Skip MCP configuration\")\n\t\t.option(\"--skip-service\", \"Skip service registration\")\n\t\t.option(\"--api-key <key>\", \"API key for Pro features\")\n\t\t.option(\"--dev\", \"Use local dev mode for MCP\")\n\t\t.option(\"--npm\", \"Use npm/npx mode for MCP\")\n\t\t.option(\"-q, --quiet\", \"Suppress informational output\")\n\t\t.option(\"-v, --verbose\", \"Show detailed detection reasoning\")\n\t\t.action(async (path: string | undefined, options) => {\n\t\t\tconst result = await runInit(path, options);\n\t\t\tif (options.json) {\n\t\t\t\tconsole.log(JSON.stringify(result, null, 2));\n\t\t\t}\n\t\t\tif (!result.success) {\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t});\n}\n\n// =============================================================================\n// CORE INIT LOGIC\n// =============================================================================\n\nasync function runInit(\n\tpathArg: string | undefined,\n\toptions: {\n\t\tyes?: boolean;\n\t\tnonInteractive?: boolean;\n\t\tjson?: boolean;\n\t\tdryRun?: boolean;\n\t\tforce?: boolean;\n\t\tskipMcp?: boolean;\n\t\tskipService?: boolean;\n\t\tapiKey?: string;\n\t\tdev?: boolean;\n\t\tnpm?: boolean;\n\t\tquiet?: boolean;\n\t\tverbose?: boolean;\n\t},\n): Promise<InitJsonResult> {\n\tconst jsonMode = !!options.json;\n\tconst skipPrompts = !!options.yes || !!options.nonInteractive || cliState.yes;\n\tconst quiet = !!options.quiet;\n\tconst verbose = !!options.verbose;\n\n\tconst result: InitJsonResult = {\n\t\tsuccess: true,\n\t\tversion: cliVersion,\n\t\tworkspace: { path: \"\", alreadyInitialized: false, reinitialized: false },\n\t\tdetection: {\n\t\t\tstack: [],\n\t\t\tmonorepoType: \"none\",\n\t\t\tpackageManager: \"npm\",\n\t\t\tgitRepo: false,\n\t\t\tgitRoot: null,\n\t\t\tfileCount: 0,\n\t\t},\n\t\tconfiguration: { configCreated: false, gitignoreUpdated: false, ctxStubCreated: false },\n\t\tservice: {\n\t\t\tstarted: false,\n\t\t\tconnected: false,\n\t\t\tworkspaceRegistered: false,\n\t\t\tversion: null,\n\t\t\tskipped: !!options.skipService,\n\t\t},\n\t\tmcp: { clients: {}, configured: [], skipped: !!options.skipMcp },\n\t\terrors: [],\n\t};\n\n\ttry {\n\t\t// =========================================================================\n\t\t// PHASE 1: WORKSPACE DETECTION\n\t\t// =========================================================================\n\t\tconst spinner = jsonMode ? null : ora(\"Detecting workspace...\").start();\n\n\t\tconst workspacePath = resolve(pathArg || process.cwd());\n\t\tresult.workspace.path = workspacePath;\n\n\t\t// Validate path exists and is a directory\n\t\tif (!existsSync(workspacePath)) {\n\t\t\tfail(spinner, result, `Path does not exist: ${workspacePath}`);\n\t\t\treturn result;\n\t\t}\n\t\tif (!statSync(workspacePath).isDirectory()) {\n\t\t\tfail(spinner, result, `Path is not a directory: ${workspacePath}`);\n\t\t\treturn result;\n\t\t}\n\n\t\t// Check if already initialized\n\t\tconst vrekoDir = join(workspacePath, \".vreko\");\n\t\tconst configPath = join(vrekoDir, \"config.json\");\n\t\tconst alreadyInitialized = existsSync(configPath);\n\t\tresult.workspace.alreadyInitialized = alreadyInitialized;\n\n\t\tif (alreadyInitialized && options.force) {\n\t\t\tresult.workspace.reinitialized = true;\n\t\t}\n\n\t\t// Detect stack\n\t\tconst detected = detectStack(workspacePath, verbose && !jsonMode);\n\t\tresult.detection = { ...detected, fileCount: 0 };\n\n\t\tif (spinner) {\n\t\t\tspinner.succeed(\"Workspace detected\");\n\t\t}\n\n\t\tif (!jsonMode && !quiet) {\n\t\t\tif (detected.stack.length > 0) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t\tif (detected.monorepoType !== \"none\") {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// Data-collection consent (D-14 / G-01)\n\t\tif (!jsonMode && !options.dryRun) {\n\t\t\tif (options.nonInteractive) {\n\t\t\t\t// Non-interactive: print consent notice to stderr so it doesn't pollute JSON\n\t\t\t\tprocess.stderr.write(\n\t\t\t\t\t[\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Vreko data notice:\",\n\t\t\t\t\t\t\" • Session metadata (timing, file counts, risk scores) is collected locally.\",\n\t\t\t\t\t\t\" • No file contents or source code ever leave your device.\",\n\t\t\t\t\t\t\" • Cloud sync is opt-in and syncs metadata only.\",\n\t\t\t\t\t\t\" • Run `vreko purge` at any time to delete all local data.\",\n\t\t\t\t\t\t\" • Privacy policy: https://vreko.dev/privacy\",\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t} else if (!skipPrompts) {\n\t\t\t\t// Interactive: clack consent confirm before the proceed question\n\t\t\t\tconst consentResult = await clack.confirm({\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Vreko collects session metadata (timing, file counts, risk scores) locally. No file contents leave your device. Agree to continue?\",\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\t\t\t\tif (clack.isCancel(consentResult)) {\n\t\t\t\t\tclack.cancel(\"Cancelled.\");\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (!consentResult) {\n\t\t\t\t\tclack.cancel(\"Setup cancelled. No data was collected.\");\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Interactive confirmation\n\t\tif (!skipPrompts && !options.dryRun) {\n\t\t\tconst proceedResult = await clack.confirm({\n\t\t\t\tmessage: `Initialize Vreko for ${basename(workspacePath)}?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\t\t\tif (clack.isCancel(proceedResult)) {\n\t\t\t\tclack.cancel(\"Cancelled.\");\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (!proceedResult) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 2: CONFIGURATION\n\t\t// =========================================================================\n\t\tconst configSpinner = jsonMode ? null : ora(\"Configuring workspace...\").start();\n\n\t\tif (!options.dryRun) {\n\t\t\t// Create .vreko/ directory\n\t\t\tmkdirSync(vrekoDir, { recursive: true });\n\n\t\t\t// Write config.json; skip on subsequent runs unless --force is passed\n\t\t\tif (!alreadyInitialized || options.force) {\n\t\t\t\tconst config = buildWorkspaceConfig(workspacePath, detected);\n\t\t\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`);\n\t\t\t\tresult.configuration.configCreated = true;\n\t\t\t}\n\t\t\tif (configSpinner) {\n\t\t\t\tconfigSpinner.succeed(\"Created .vreko/config.json\");\n\t\t\t}\n\n\t\t\t// Update .gitignore\n\t\t\tif (detected.gitRepo) {\n\t\t\t\tconst gitignoreUpdated = ensureGitignore(workspacePath);\n\t\t\t\tresult.configuration.gitignoreUpdated = gitignoreUpdated;\n\t\t\t\tif (!jsonMode && gitignoreUpdated) {\n\t\t\t\t\tora().succeed(\"Updated .gitignore\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create .ctx stub\n\t\t\tconst ctxPath = join(vrekoDir, \".ctx\");\n\t\t\tif (!existsSync(ctxPath)) {\n\t\t\t\twriteFileSync(ctxPath, \"# Vreko compiled context - auto-generated\\n\");\n\t\t\t\tresult.configuration.ctxStubCreated = true;\n\t\t\t\tif (!jsonMode) {\n\t\t\t\t\tora().succeed(\"Created .vreko/.ctx\");\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (configSpinner) {\n\t\t\t\tconfigSpinner.info(\"Would create .vreko/config.json\");\n\t\t\t}\n\t\t\tif (detected.gitRepo && !jsonMode) {\n\t\t\t\tora().info(\"Would update .gitignore\");\n\t\t\t}\n\t\t\tif (!jsonMode) {\n\t\t\t\tora().info(\"Would create .vreko/.ctx\");\n\t\t\t}\n\t\t}\n\n\t\tif (!jsonMode) {\n\t\t\t// intentionally empty\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 3: DAEMON REGISTRATION\n\t\t// =========================================================================\n\t\tif (!options.skipService) {\n\t\t\tconst daemonSpinner = jsonMode ? null : ora(\"Connecting to service...\").start();\n\n\t\t\tif (!options.dryRun) {\n\t\t\t\tconst daemonResult = await registerWithDaemon(workspacePath, daemonSpinner, jsonMode);\n\t\t\t\tresult.service = { ...result.service, ...daemonResult };\n\n\t\t\t\tif (!daemonResult.connected) {\n\t\t\t\t\tconst daemonErrorMsg =\n\t\t\t\t\t\t\"⚠ Service could not be reached - Vreko is initialized but workspace sync is disabled. Run `vr service start` to enable syncing.\" +\n\t\t\t\t\t\t(daemonResult.errorMessage ? ` ${daemonResult.errorMessage}` : \"\");\n\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\tconsole.warn(daemonErrorMsg);\n\t\t\t\t\t}\n\t\t\t\t\tresult.errors.push(\"Service connection failed - init completed without service registration\");\n\t\t\t\t} else {\n\t\t\t\t\t// Seed knowledge.db chunks from global template into workspace DB.\n\t\t\t\t\t// Non-fatal - workspace is still usable if seeding fails.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\t\tif (client) {\n\t\t\t\t\t\t\tconst seedResult = await client.call<{ seeded: number; alreadyPresent: number }>(\n\t\t\t\t\t\t\t\t\"workspace/seed-knowledge\",\n\t\t\t\t\t\t\t\t{ workspace: workspacePath },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!jsonMode && seedResult.seeded > 0) {\n\t\t\t\t\t\t\t\tora().succeed(`Seeded ${seedResult.seeded} intelligence patterns into workspace`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Trigger immediate workspace.json write to ensure it exists after init.\n\t\t\t\t\t\t\t// Emits a synthetic workspace.initialized event to bypass the 5-minute debounce.\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/trigger-workspace-json-write\", {\n\t\t\t\t\t\t\t\t\tworkspace: workspacePath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.warn(\"init-core: workspace/trigger-workspace-json-write failed (non-fatal)\", {\n\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Trigger bootstrap write with service-side scan intelligence.\n\t\t\t\t\t\t\t// Default: additive merge (preserves live observations, overlays scan data).\n\t\t\t\t\t\t\t// With --force: full reset to BOOTSTRAP state.\n\t\t\t\t\t\t\t// Non-fatal: falls back to empty workspace.json written by trigger-workspace-json-write above.\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/write-from-scan-profile\", {\n\t\t\t\t\t\t\t\t\tworkspace: workspacePath,\n\t\t\t\t\t\t\t\t\t...(options.force && { force: true }),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.warn(\"init-core: workspace/write-from-scan-profile failed (non-fatal)\", {\n\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn(\"init-core: knowledge seeding failed (non-fatal)\", { error });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (daemonSpinner) {\n\t\t\t\t\tdaemonSpinner.info(\"Would register workspace with service\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4: MCP CONFIGURATION\n\t\t// =========================================================================\n\t\tif (!options.skipMcp) {\n\t\t\tconst mcpSpinner = jsonMode ? null : ora(\"Configuring AI tools...\").start();\n\n\t\t\tif (!options.dryRun) {\n\t\t\t\tconst mcpResult = await configureMCP(\n\t\t\t\t\tworkspacePath,\n\t\t\t\t\toptions.apiKey,\n\t\t\t\t\toptions.dev,\n\t\t\t\t\toptions.npm,\n\t\t\t\t\tskipPrompts,\n\t\t\t\t\tjsonMode,\n\t\t\t\t\tmcpSpinner,\n\t\t\t\t);\n\t\t\t\tresult.mcp = { ...result.mcp, ...mcpResult };\n\t\t\t} else {\n\t\t\t\tif (mcpSpinner) {\n\t\t\t\t\tmcpSpinner.info(\"Would configure detected AI tools\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.5: CLAUDE CODE INTEGRATION\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\tconst claudeSpinner = jsonMode ? null : ora(\"Generating Claude Code integration...\").start();\n\n\t\t\ttry {\n\t\t\t\t// Fetch baseline data for intelligence enrichment (non-blocking)\n\t\t\t\tlet baselineData:\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tfragileFiles?: Array<{ path: string; compositeScore: number }>;\n\t\t\t\t\t\t\tcoChangeClusters?: Array<{ files: string[]; coOccurrenceRate: number }>;\n\t\t\t\t\t }\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (result.service.connected) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\t\tconst record = await client.call<{\n\t\t\t\t\t\t\tfragileFiles?: Array<{ path: string; compositeScore: number }>;\n\t\t\t\t\t\t\tcoChangeClusters?: Array<{ files: string[]; coOccurrenceRate: number }>;\n\t\t\t\t\t\t}>(\"baseline/get\", { workspace: workspacePath });\n\n\t\t\t\t\t\tif (record?.fragileFiles !== undefined || record?.coChangeClusters !== undefined) {\n\t\t\t\t\t\t\tbaselineData = {\n\t\t\t\t\t\t\t\tfragileFiles: record.fragileFiles,\n\t\t\t\t\t\t\t\tcoChangeClusters: record.coChangeClusters,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Non-fatal - baseline may not exist yet for a fresh workspace\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst claudeResult = generateClaudeIntegration(\n\t\t\t\t\t{ workspacePath, overwrite: false, includeChannel: false },\n\t\t\t\t\tbaselineData,\n\t\t\t\t);\n\n\t\t\t\tif (claudeResult.filesWritten.length > 0) {\n\t\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\t\tclaudeSpinner.succeed(\n\t\t\t\t\t\t\t`Generated Claude Code integration (${claudeResult.filesWritten.length} files)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t\t\tfor (const _f of claudeResult.filesWritten) {\n\t\t\t\t\t\t\t// intentionally empty\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\t\tclaudeSpinner.info(\"Claude Code integration already present\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Non-fatal - init succeeds even if Claude integration generation fails\n\t\t\t\tif (claudeSpinner) {\n\t\t\t\t\tclaudeSpinner.warn(\"Claude Code integration skipped (non-fatal)\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!jsonMode) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.75: GROUND TRUTH SKILL INSTALLATION (Claude Code users only)\n\t\t// =========================================================================\n\t\tif (!options.dryRun && !skipPrompts) {\n\t\t\tconst claudeDir = join(homedir(), \".claude\");\n\t\t\tconst hasClaudeCode = existsSync(claudeDir);\n\n\t\t\tif (hasClaudeCode) {\n\t\t\t\ttry {\n\t\t\t\t\tconst skillDir = join(homedir(), \".claude\", \"skills\", \"ground-truth\");\n\t\t\t\t\tconst skillPath = join(skillDir, \"SKILL.md\");\n\n\t\t\t\t\tif (existsSync(skillPath)) {\n\t\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\t\tora().info(\"Ground Truth skill already installed\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst installSkill = await clack.confirm({\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Install the Ground Truth skill for Claude Code? (Recommended - helps Claude work effectively in this codebase)\",\n\t\t\t\t\t\t\tinitialValue: true,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!clack.isCancel(installSkill) && installSkill === true) {\n\t\t\t\t\t\t\tmkdirSync(skillDir, { recursive: true });\n\t\t\t\t\t\t\twriteFileSync(skillPath, GROUND_TRUTH_SKILL_CONTENT, \"utf8\");\n\t\t\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\t\t\tora().succeed(`Ground Truth skill installed at ${skillPath}`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (skillError) {\n\t\t\t\t\t// Non-fatal - log warning and continue init\n\t\t\t\t\tconst skillMessage = skillError instanceof Error ? skillError.message : String(skillError);\n\t\t\t\t\tif (!jsonMode) {\n\t\t\t\t\t\tora().warn(`Ground Truth skill install failed (non-fatal): ${skillMessage}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 4.9: CLAUDE CODE HOOK INSTALLATION\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\ttry {\n\t\t\t\tawait installHook(\"claude-code\", workspacePath);\n\t\t\t} catch (err) {\n\t\t\t\t// Non-fatal - hook install failure must not block workspace init\n\t\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[vr init] Hook installation skipped: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 5: VERIFICATION & SUMMARY\n\t\t// =========================================================================\n\t\tif (!options.dryRun) {\n\t\t\tconst fileCount = await countSourceFiles(workspacePath);\n\t\t\tresult.detection.fileCount = fileCount;\n\n\t\t\tif (!jsonMode && !quiet) {\n\t\t\t\t// R6.1 / R6.2 - Final activation summary\n\t\t\t\tconst configuredTools = result.mcp.configured;\n\t\t\t\tconst toolList = configuredTools.length > 0 ? configuredTools.join(\", \") : null;\n\t\t\t\tconst supervisorOk = result.service.supervisorInstalled !== false;\n\n\t\t\t\tconsole.log();\n\t\t\t\tconsole.log(chalk.green(\" ✓ Workspace registered\"));\n\t\t\t\tif (supervisorOk) {\n\t\t\t\t\tconsole.log(chalk.green(\" ✓ Daemon running (supervised)\"));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\" ⚠ Supervisor not installed (you may need to run vreko service install)\"),\n\t\t\t\t\t);\n\t\t\t\t\tconsole.log(chalk.green(\" ✓ Daemon running (this session only - will not restart on crash)\"));\n\t\t\t\t}\n\t\t\t\tif (toolList) {\n\t\t\t\t\tconsole.log(chalk.green(` ✓ MCP config written to ${toolList}`));\n\t\t\t\t}\n\t\t\t\tconsole.log();\n\t\t\t\tconsole.log(chalk.cyan(\" → Restart Claude Desktop once to load vreko.\"));\n\t\t\t\tconsole.log(chalk.cyan(\" You won't need to do this again.\"));\n\t\t\t\tconsole.log();\n\t\t\t\tif (supervisorOk) {\n\t\t\t\t\tconsole.log(chalk.white(\" vreko is now ready. Try asking your AI agent about this codebase.\"));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\tchalk.yellow(\" vreko is running but unsupervised. Run `vr doctor` if you hit issues.\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconsole.log();\n\t\t\t}\n\t\t}\n\n\t\t// =========================================================================\n\t\t// PHASE 5.5: AUTH TOKEN CHECK\n\t\t// =========================================================================\n\t\tconst authStatus = checkAuthToken();\n\t\tif (!authStatus.hasToken && !jsonMode) {\n\t\t\tconsole.warn(\"\\n⚠️ Sync is configured but no API key was found.\");\n\t\t\tconsole.warn(\" Workspace metadata will not sync to the intelligence platform.\");\n\t\t\tconsole.warn(\" Run `vreko login` or set VREKO_API_KEY.\\n\");\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tresult.success = false;\n\t\tresult.error = message;\n\t\tif (!jsonMode) {\n\t\t\t// intentionally empty\n\t\t}\n\t\treturn result;\n\t}\n}\n\n// =============================================================================\n// STACK DETECTION\n// =============================================================================\n\nfunction detectStack(workspacePath: string, verbose: boolean): DetectedStack {\n\tconst stack: string[] = [];\n\tconst result: DetectedStack = {\n\t\tstack,\n\t\tmonorepoType: \"none\",\n\t\tpackageManager: \"npm\",\n\t\tgitRepo: false,\n\t\tgitRoot: null,\n\t};\n\n\t// Git detection using utility\n\tconst gitRoot = findGitRoot(workspacePath);\n\tif (gitRoot) {\n\t\tresult.gitRepo = true;\n\t\tresult.gitRoot = gitRoot;\n\t\tif (verbose) {\n\t\t\t// intentionally empty\n\t\t}\n\t}\n\n\t// Package manager detection (check lockfiles in priority order)\n\tconst lockfiles: [string, string][] = [\n\t\t[\"pnpm-lock.yaml\", \"pnpm\"],\n\t\t[\"bun.lockb\", \"bun\"],\n\t\t[\"yarn.lock\", \"yarn\"],\n\t\t[\"package-lock.json\", \"npm\"],\n\t];\n\tfor (const [file, pm] of lockfiles) {\n\t\tif (existsSync(join(workspacePath, file))) {\n\t\t\tresult.packageManager = pm;\n\t\t\tif (verbose) {\n\t\t\t\t// intentionally empty\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Stack detection via file presence\n\tconst signals: [string, string, string?][] = [\n\t\t// [file/pattern, stack label, verbose detail]\n\t\t[\"next.config.js\", \"Next.js\"],\n\t\t[\"next.config.ts\", \"Next.js\"],\n\t\t[\"next.config.mjs\", \"Next.js\"],\n\t\t[\"nuxt.config.ts\", \"Nuxt\"],\n\t\t[\"svelte.config.js\", \"SvelteKit\"],\n\t\t[\"astro.config.mjs\", \"Astro\"],\n\t\t[\"remix.config.js\", \"Remix\"],\n\t\t[\"tsconfig.json\", \"TypeScript\"],\n\t\t[\"Cargo.toml\", \"Rust\"],\n\t\t[\"go.mod\", \"Go\"],\n\t\t[\"pyproject.toml\", \"Python\"],\n\t\t[\"requirements.txt\", \"Python\"],\n\t\t[\"Gemfile\", \"Ruby\"],\n\t\t[\"composer.json\", \"PHP\"],\n\t\t[\"Package.swift\", \"Swift\"],\n\t\t[\".env\", \"env-config\"],\n\t];\n\n\tconst seen = new Set<string>();\n\tfor (const [file, label] of signals) {\n\t\tif (!seen.has(label) && existsSync(join(workspacePath, file))) {\n\t\t\tstack.push(label);\n\t\t\tseen.add(label);\n\t\t}\n\t}\n\n\t// Database detection from package.json dependencies\n\tconst pkgPath = join(workspacePath, \"package.json\");\n\tif (existsSync(pkgPath)) {\n\t\ttry {\n\t\t\tconst pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n\t\t\tconst allDeps = {\n\t\t\t\t...(pkg.dependencies || {}),\n\t\t\t\t...(pkg.devDependencies || {}),\n\t\t\t};\n\n\t\t\tconst depSignals: [string, string][] = [\n\t\t\t\t[\"drizzle-orm\", \"Drizzle\"],\n\t\t\t\t[\"prisma\", \"Prisma\"],\n\t\t\t\t[\"pg\", \"PostgreSQL\"],\n\t\t\t\t[\"mysql2\", \"MySQL\"],\n\t\t\t\t[\"better-sqlite3\", \"SQLite\"],\n\t\t\t\t[\"mongoose\", \"MongoDB\"],\n\t\t\t\t[\"redis\", \"Redis\"],\n\t\t\t\t[\"tailwindcss\", \"Tailwind\"],\n\t\t\t\t[\"@trpc/server\", \"tRPC\"],\n\t\t\t\t[\"express\", \"Express\"],\n\t\t\t\t[\"fastify\", \"Fastify\"],\n\t\t\t\t[\"hono\", \"Hono\"],\n\t\t\t];\n\n\t\t\tfor (const [dep, label] of depSignals) {\n\t\t\t\tif (!seen.has(label) && allDeps[dep]) {\n\t\t\t\t\tstack.push(label);\n\t\t\t\t\tseen.add(label);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid package.json - skip dependency detection\n\t\t}\n\t}\n\n\t// Monorepo detection\n\tif (existsSync(join(workspacePath, \"turbo.json\"))) {\n\t\tresult.monorepoType = \"turborepo\";\n\t} else if (existsSync(join(workspacePath, \"nx.json\"))) {\n\t\tresult.monorepoType = \"nx\";\n\t} else if (existsSync(join(workspacePath, \"lerna.json\"))) {\n\t\tresult.monorepoType = \"lerna\";\n\t} else if (existsSync(join(workspacePath, \"pnpm-workspace.yaml\"))) {\n\t\tresult.monorepoType = \"pnpm\";\n\t}\n\n\treturn result;\n}\n// =============================================================================\n// WORKSPACE CONFIG\n// =============================================================================\n\ninterface WorkspaceConfig {\n\tversion: 1;\n\tworkspace: {\n\t\tpath: string;\n\t\tname: string;\n\t\tstack: string[];\n\t\tmonorepoType: string;\n\t\tpackageManager: string;\n\t};\n\tprotection: {\n\t\tmode: \"auto\";\n\t\tlevel: \"standard\";\n\t};\n\tintelligence: {\n\t\tenabled: true;\n\t};\n\tcreatedAt: string;\n\tcliVersion: string;\n}\n\nfunction buildWorkspaceConfig(workspacePath: string, detected: DetectedStack): WorkspaceConfig {\n\treturn {\n\t\tversion: 1,\n\t\tworkspace: {\n\t\t\tpath: workspacePath,\n\t\t\tname: basename(workspacePath),\n\t\t\tstack: detected.stack,\n\t\t\tmonorepoType: detected.monorepoType,\n\t\t\tpackageManager: detected.packageManager,\n\t\t},\n\t\tprotection: {\n\t\t\tmode: \"auto\",\n\t\t\tlevel: \"standard\",\n\t\t},\n\t\tintelligence: {\n\t\t\tenabled: true,\n\t\t},\n\t\tcreatedAt: new Date().toISOString(),\n\t\tcliVersion,\n\t};\n}\n\n// =============================================================================\n// GITIGNORE MANAGEMENT\n// =============================================================================\n\nfunction ensureGitignore(workspacePath: string): boolean {\n\tconst gitignorePath = join(workspacePath, \".gitignore\");\n\tconst entry = \".vreko/\";\n\n\tif (existsSync(gitignorePath)) {\n\t\tconst content = readFileSync(gitignorePath, \"utf-8\");\n\t\t// Check if .vreko/ is already ignored (exact line match)\n\t\tconst lines = content.split(\"\\n\").map((l) => l.trim());\n\t\tif (lines.includes(entry) || lines.includes(\".vreko\")) {\n\t\t\treturn false; // already present\n\t\t}\n\t\t// Append with section comment\n\t\tconst suffix = content.endsWith(\"\\n\") ? \"\" : \"\\n\";\n\t\tappendFileSync(gitignorePath, `${suffix}\\n# Vreko local data\\n${entry}\\n`);\n\t\treturn true;\n\t}\n\t// Create .gitignore with vreko entry\n\twriteFileSync(gitignorePath, `# Vreko local data\\n${entry}\\n`);\n\treturn true;\n}\n\n// =============================================================================\n// DAEMON REGISTRATION\n// =============================================================================\n\ninterface DaemonRegistrationResult {\n\tstarted: boolean;\n\tconnected: boolean;\n\tworkspaceRegistered: boolean;\n\tversion: string | null;\n\terrorMessage?: string;\n\t/** true if supervisor was installed during this init run; false if already present or install failed */\n\tsupervisorInstalled?: boolean;\n}\n\nasync function startAndConnectDaemon(\n\tresult: DaemonRegistrationResult,\n\tspinner: Ora | null,\n): Promise<{ connected: boolean }> {\n\ttry {\n\t\tconst client = await connectToDaemon();\n\t\tconst health = await client.health.check();\n\t\tresult.version = health?.version ?? null;\n\t\t// R2.3: If no OS supervisor detected, attempt to install one.\n\t\t// Handles --ignore-scripts, pnpm global, or manual plist deletion.\n\t\t// Non-fatal: init continues regardless of supervisor install result.\n\t\tif (health?.supervisorMode === \"extension\") {\n\t\t\ttry {\n\t\t\t\texecFileSync(\"vreko\", [\"service\", \"install\"], { stdio: \"pipe\", timeout: 15000 });\n\t\t\t\tresult.supervisorInstalled = true;\n\t\t\t} catch {\n\t\t\t\t// Supervisor install failed - non-fatal, continue init\n\t\t\t\tresult.supervisorInstalled = false;\n\t\t\t}\n\t\t}\n\t\treturn { connected: true };\n\t} catch {\n\t\t// Daemon not running - attempt to start it\n\t\tif (spinner) spinner.text = \"Starting service...\";\n\t\ttry {\n\t\t\texecFileSync(\"vreko\", [\"service\", \"start\", \"-d\"], { stdio: \"pipe\", timeout: 10000 });\n\t\t\tresult.started = true;\n\t\t\t// Poll until ready\n\t\t\tconst maxWait = 5000;\n\t\t\tconst interval = 200;\n\t\t\tlet waited = 0;\n\t\t\twhile (waited < maxWait) {\n\t\t\t\ttry {\n\t\t\t\t\tconst client = await connectToDaemon();\n\t\t\t\t\tconst health = await client.health.check();\n\t\t\t\t\tresult.version = health?.version ?? null;\n\t\t\t\t\treturn { connected: true };\n\t\t\t\t} catch {\n\t\t\t\t\tawait sleep(interval);\n\t\t\t\t\twaited += interval;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { connected: false };\n\t\t} catch (_startError) {\n\t\t\tresult.errorMessage = _startError instanceof Error ? _startError.message : String(_startError);\n\t\t\tif (spinner) spinner.warn(\"Could not start service (init will continue without it)\");\n\t\t\treturn { connected: false };\n\t\t}\n\t}\n}\n\nasync function registerWorkspaceWithDaemon(\n\tworkspacePath: string,\n\tspinner: Ora | null,\n\tjsonMode: boolean,\n\tresult: DaemonRegistrationResult,\n): Promise<void> {\n\ttry {\n\t\tconst client = getDaemonClient();\n\t\tif (client) {\n\t\t\tawait client.call<{ initialized: boolean }>(\"workspace/init\", { workspace: workspacePath });\n\t\t\tresult.workspaceRegistered = true;\n\t\t\tif (!jsonMode && spinner) ora().succeed(\"Workspace registered\");\n\t\t}\n\t} catch (_regError) {\n\t\tresult.workspaceRegistered = false;\n\t\tif (!jsonMode) ora().warn(\"Workspace registration failed (service may need restart)\");\n\t}\n}\n\nasync function registerWithDaemon(\n\t_workspacePath: string,\n\tspinner: Ora | null,\n\tjsonMode: boolean,\n): Promise<DaemonRegistrationResult> {\n\tconst result: DaemonRegistrationResult = {\n\t\tstarted: false,\n\t\tconnected: false,\n\t\tworkspaceRegistered: false,\n\t\tversion: null,\n\t};\n\n\ttry {\n\t\tconst { connected } = await startAndConnectDaemon(result, spinner);\n\n\t\tif (!connected) {\n\t\t\tif (!result.errorMessage) {\n\t\t\t\tresult.errorMessage = \"Service did not respond after start\";\n\t\t\t\tif (spinner) spinner.warn(\"Service did not respond (init will continue without it)\");\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tresult.connected = true;\n\t\tif (spinner) {\n\t\t\tspinner.succeed(`Service running (v${result.version ?? \"unknown\"}, pid ${await getDaemonPid()})`);\n\t\t}\n\n\t\tawait registerWorkspaceWithDaemon(_workspacePath, spinner, jsonMode, result);\n\t\treturn result;\n\t} catch (_error) {\n\t\tresult.errorMessage = _error instanceof Error ? _error.message : String(_error);\n\t\tif (spinner) spinner.warn(\"Service connection failed\");\n\t\treturn result;\n\t}\n}\n\nasync function getDaemonPid(): Promise<string> {\n\tconst pidPath = getServicePidPath();\n\ttry {\n\t\treturn readFileSync(pidPath, \"utf-8\").trim();\n\t} catch {\n\t\treturn \"?\";\n\t}\n}\n\n// =============================================================================\n// MCP CONFIGURATION (delegates to mcp-config package)\n// =============================================================================\n\ninterface MCPConfigResult {\n\tclients: Record<string, \"configured\" | \"already_configured\" | \"not_installed\" | \"failed\">;\n\tconfigured: string[];\n}\n\nasync function configureMCP(\n\tworkspacePath: string,\n\tapiKey: string | undefined,\n\tdevMode: boolean | undefined,\n\tnpmMode: boolean | undefined,\n\t_skipPrompts: boolean,\n\tjsonMode: boolean,\n\tspinner: Ora | null,\n): Promise<MCPConfigResult> {\n\tconst result: MCPConfigResult = { clients: {}, configured: [] };\n\n\ttry {\n\t\tconst detection = detectAIClients({ cwd: workspacePath });\n\n\t\tif (detection.detected.length === 0) {\n\t\t\tif (spinner) {\n\t\t\t\tspinner.info(\"No AI tools detected (MCP configuration skipped)\");\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (spinner) {\n\t\t\tspinner.stop();\n\t\t}\n\n\t\tfor (const client of detection.needsSetup) {\n\t\t\tconst clientSpinner = jsonMode ? null : ora(` ${client.displayName}...`).start();\n\n\t\t\tif (client.hasVreko) {\n\t\t\t\tresult.clients[client.name] = \"already_configured\";\n\t\t\t\tif (clientSpinner) {\n\t\t\t\t\tclientSpinner.succeed(`${client.displayName} already configured`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst mcpConfig = getVrekoMCPConfig({\n\t\t\t\t\tapiKey,\n\t\t\t\t\tuseNpx: !!npmMode,\n\t\t\t\t\tuseLocalDev: !!devMode,\n\t\t\t\t\tworkspaceRoot: workspacePath,\n\t\t\t\t\tclient: client.format,\n\t\t\t\t});\n\n\t\t\t\tconst writeResult = writeClientConfig(client, mcpConfig);\n\t\t\t\tif (writeResult.success) {\n\t\t\t\t\tresult.clients[client.name] = \"configured\";\n\t\t\t\t\tresult.configured.push(client.name);\n\t\t\t\t\tif (clientSpinner) {\n\t\t\t\t\t\tclientSpinner.succeed(`${client.displayName} configured`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult.clients[client.name] = \"failed\";\n\t\t\t\t\tif (clientSpinner) {\n\t\t\t\t\t\tclientSpinner.fail(`${client.displayName} failed: ${writeResult.error}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\tresult.clients[client.name] = \"failed\";\n\t\t\t\tif (clientSpinner) {\n\t\t\t\t\tclientSpinner.fail(`${client.displayName} failed`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Show not-installed clients in verbose\n\t\tfor (const client of detection.clients) {\n\t\t\tif (!client.exists && !jsonMode) {\n\t\t\t\tresult.clients[client.name] = \"not_installed\";\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} catch (_error) {\n\t\tif (spinner) {\n\t\t\tspinner.warn(\"MCP configuration failed (non-fatal)\");\n\t\t}\n\t\treturn result;\n\t}\n}\n\n// =============================================================================\n// UTILITIES\n// =============================================================================\n\nasync function countSourceFiles(workspacePath: string): Promise<number> {\n\tconst extensions = new Set([\n\t\t\".ts\",\n\t\t\".tsx\",\n\t\t\".js\",\n\t\t\".jsx\",\n\t\t\".py\",\n\t\t\".rs\",\n\t\t\".go\",\n\t\t\".rb\",\n\t\t\".php\",\n\t\t\".swift\",\n\t\t\".java\",\n\t\t\".kt\",\n\t\t\".vue\",\n\t\t\".svelte\",\n\t]);\n\tconst skip = new Set([\"node_modules\", \".git\", \"dist\", \"build\", \".vreko\", \"target\", \"__pycache__\"]);\n\tlet count = 0;\n\tasync function walk(dir: string): Promise<void> {\n\t\ttry {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\t\tfor (const e of entries) {\n\t\t\t\tif (skip.has(e.name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (e.isDirectory()) {\n\t\t\t\t\tawait walk(join(dir, e.name));\n\t\t\t\t} else if (extensions.has(extname(e.name))) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Unreadable directory - skip silently\n\t\t}\n\t}\n\tawait walk(workspacePath);\n\treturn count;\n}\n\nfunction _capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// =============================================================================\n// AUTH TOKEN CHECK\n// =============================================================================\n\ninterface AuthStatus {\n\thasToken: boolean;\n\tsource: \"env-service\" | \"env-api\" | \"auth-file\" | \"none\";\n}\n\n/**\n * Check for auth token in environment or auth.json file.\n * Resolution order: VREKO_SERVICE_TOKEN -> VREKO_API_KEY -> ~/.vreko/auth.json\n */\nfunction checkAuthToken(): AuthStatus {\n\t// Check environment variables first\n\tif (process.env.VREKO_SERVICE_TOKEN) {\n\t\treturn { hasToken: true, source: \"env-service\" };\n\t}\n\tif (process.env.VREKO_API_KEY) {\n\t\treturn { hasToken: true, source: \"env-api\" };\n\t}\n\n\t// Check auth.json file\n\ttry {\n\t\tconst authPath = join(homedir(), \".vreko\", \"auth.json\");\n\t\tif (existsSync(authPath)) {\n\t\t\tconst authContent = readFileSync(authPath, \"utf-8\");\n\t\t\tconst auth = JSON.parse(authContent) as { token?: string };\n\t\t\tif (auth.token) {\n\t\t\t\treturn { hasToken: true, source: \"auth-file\" };\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// File doesn't exist or is invalid - no token\n\t}\n\n\treturn { hasToken: false, source: \"none\" };\n}\n\nfunction fail(spinner: Ora | null, result: InitJsonResult, message: string): void {\n\tresult.success = false;\n\tresult.error = message;\n\tif (spinner) {\n\t\tspinner.fail(message);\n\t}\n}\n"]}