@vreko/cli 3.3.4 → 3.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{InitApp-AHMZBKRK.js → InitApp-MZHXC2EV.js} +3 -3
- package/dist/{InitApp-AHMZBKRK.js.map → InitApp-MZHXC2EV.js.map} +1 -1
- package/dist/{chunk-HME7USNG.js → chunk-FNSNP635.js} +4 -4
- package/dist/{chunk-HME7USNG.js.map → chunk-FNSNP635.js.map} +1 -1
- package/dist/{chunk-F2GMAVD5.js → chunk-WJGVEDAC.js} +3 -3
- package/dist/{chunk-F2GMAVD5.js.map → chunk-WJGVEDAC.js.map} +1 -1
- package/dist/{chunk-EYOXOS45.js → chunk-XQFACGNA.js} +4 -4
- package/dist/{chunk-EYOXOS45.js.map → chunk-XQFACGNA.js.map} +1 -1
- package/dist/index.js +8 -10
- package/dist/index.js.map +1 -1
- package/dist/init-command-BQX3JMGV.js +7 -0
- package/dist/{init-command-OGAPWXC3.js.map → init-command-BQX3JMGV.js.map} +1 -1
- package/dist/{init-core-VFYBUSWP.js → init-core-K5TYDE5M.js} +4 -4
- package/dist/{init-core-VFYBUSWP.js.map → init-core-K5TYDE5M.js.map} +1 -1
- package/package.json +3 -3
- package/dist/init-command-OGAPWXC3.js +0 -7
- /package/dist/{._InitApp-AHMZBKRK.js → ._InitApp-MZHXC2EV.js} +0 -0
- /package/dist/{._InitApp-AHMZBKRK.js.map → ._InitApp-MZHXC2EV.js.map} +0 -0
- /package/dist/{._chunk-EYOXOS45.js → ._chunk-FNSNP635.js} +0 -0
- /package/dist/{._chunk-EYOXOS45.js.map → ._chunk-FNSNP635.js.map} +0 -0
- /package/dist/{._chunk-F2GMAVD5.js → ._chunk-WJGVEDAC.js} +0 -0
- /package/dist/{._chunk-F2GMAVD5.js.map → ._chunk-WJGVEDAC.js.map} +0 -0
- /package/dist/{._chunk-HME7USNG.js → ._chunk-XQFACGNA.js} +0 -0
- /package/dist/{._chunk-HME7USNG.js.map → ._chunk-XQFACGNA.js.map} +0 -0
- /package/dist/{._init-command-OGAPWXC3.js → ._init-command-BQX3JMGV.js} +0 -0
- /package/dist/{._init-command-OGAPWXC3.js.map → ._init-command-BQX3JMGV.js.map} +0 -0
- /package/dist/{._init-core-VFYBUSWP.js → ._init-core-K5TYDE5M.js} +0 -0
- /package/dist/{._init-core-VFYBUSWP.js.map → ._init-core-K5TYDE5M.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { saveBenchmarkOptIn } from './chunk-P4EZUU47.js';
|
|
3
|
-
import { isDaemonConnected, connectToDaemon, getDaemonClient, getDaemonStatus } from './chunk-
|
|
3
|
+
import { isDaemonConnected, connectToDaemon, getDaemonClient, getDaemonStatus } from './chunk-WJGVEDAC.js';
|
|
4
4
|
import './chunk-AV5Y3YR6.js';
|
|
5
5
|
import { BRAND_COLORS } from './chunk-DMXC2JTC.js';
|
|
6
6
|
import './chunk-KJWKY4L4.js';
|
|
@@ -1475,5 +1475,5 @@ function InitApp({ pathArg, options, initProfile }) {
|
|
|
1475
1475
|
__name(InitApp, "InitApp");
|
|
1476
1476
|
|
|
1477
1477
|
export { InitApp, MIN_SCAN_DISPLAY_MS, isFrameEnabled };
|
|
1478
|
-
//# sourceMappingURL=InitApp-
|
|
1479
|
-
//# sourceMappingURL=InitApp-
|
|
1478
|
+
//# sourceMappingURL=InitApp-MZHXC2EV.js.map
|
|
1479
|
+
//# sourceMappingURL=InitApp-MZHXC2EV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/init/activation-helpers.ts","../src/ui/init/Activation.tsx","../src/ui/init/Consent.tsx","../src/ui/init/Detection.tsx","../src/ui/init/hooks/useAnalysis.ts","../src/ui/init/hooks/useKeyboard.ts","../src/ui/init/Insights.tsx","../src/ui/init/Logo.tsx","../src/ui/init/hooks/useTerminalLayout.ts","../src/ui/init/Profile.tsx","../src/ui/init/InitApp.tsx"],"names":["snapshotPreWriteMtime","targetFile","statSync","mtimeMs","pollForWorkspaceJsonUpdate","preMtime","options","intervalMs","timeoutMs","cancelled","deadline","Date","now","mtime","Promise","resolve","setTimeout","writeVrekoInitConfig","repoPath","profile","vrekoDir","join","configPath","existsSync","mkdirSync","recursive","config","protectionLevel","recommendedConfig","snapshotFrequency","projections","docs","approvedFiles","writeFileSync","JSON","stringify","capitalize","s","charAt","toUpperCase","slice","totalWatchCount","targets","reduce","t","Math","max","fileCount","delay","ms","Activation","process","cwd","force","exit","useApp","stage","setStage","useState","checks","setChecks","label","status","updateCheck","index","detail","prev","map","c","i","useEffect","run","step1Connected","isDaemonConnected","connectToDaemon","execFileSync","stdio","timeout","client","getDaemonClient","call","workspace","written","e","msg","Error","message","String","console","warn","getDaemonStatus","connected","uptimeMin","uptime","floor","hasVreko","useInput","_input","key","answer","toLowerCase","optedIn","return","saveBenchmarkOptIn","then","isActive","watchCount","watchTargets","patternCount","insights","length","lockedInsights","fragileFile","topFragileFile","Box","flexDirection","borderStyle","padding","_jsx","Text","bold","color","_jsxs","marginTop","BRAND_COLORS","primary","overallRisk","dimColor","minHeight","filter","check","icon","Consent","onAccept","declined","setDeclined","input","escape","width","gap","detectRepoInfo","push","pkgCount","readdirSync","withFileTypes","d","isDirectory","name","acc","aiTools","aiDirCandidates","path","count","execSync","encoding","trim","Detection","onReady","detected","forEach","startsWith","undefined","_Fragment","NULL_PROFILE","confidence","recoveryRisk","changeVolatility","workflowFragility","secondary","complexity","collaboration","aiExposure","structuralRisk","topDrivers","enabledFeatures","topFragileFiles","coChange","fragility","useAnalysis","onComplete","minDisplayMs","done","setDone","errored","setErrored","setProfile","hasStarted","useRef","startTimeRef","current","runScan","runInitScan","result","resolved","elapsed","catch","useKeyboard","onEnter","onEscape","onArrowRight","onArrowLeft","onArrowUp","onArrowDown","enabled","rightArrow","leftArrow","upArrow","downArrow","announce","_message","priority","prioritizeInsights","sort","a","b","type","severityOrder","critical","warning","notable","info","severity","PAGE_SIZE","Insights","onContinue","onCustomize","currentPage","setCurrentPage","sorted","maxPage","p","locked","visibleInsights","shownEnd","insight","marginBottom","paddingRight","observation","whyItMatters","comparison","whatWeWillDo","id","teaser","requirement","unlockCondition","days","LOGO_FULL","Logo","stdout","useStdout","columns","useTerminalLayout","rows","isWide","canShowFullLogo","riskLabel","score","renderBar","filled","round","empty","repeat","ProfileMetrics","topDriver","Profile","flexShrink","flexGrow","MIN_SCAN_DISPLAY_MS","ScanningFrame","statusLabel","FRAME_ENABLED_MAP","VIRGIN","detection","scanning","consent","activation","NEW_WORKSPACE","COLD_RETURN","WARM_RETURN","HOT_RECONNECT","isFrameEnabled","frame","InitApp","pathArg","initProfile","handleNextStage","useCallback","allStages","enabledStages","currentIndex","indexOf","nextStage","handlePrevStage","prevStage","isGitRepo","handleScanComplete"],"mappings":"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","file":"InitApp-AHMZBKRK.js","sourcesContent":["/**\n * Testable helpers extracted from the Activation component.\n *\n * These functions contain the core imperative logic that historically lived\n * inside the useEffect `run()` closure - inaccessible to unit tests. By\n * isolating them here we can write deterministic tests against the exact\n * code paths that run during `vr init`, preventing the class of bugs where\n * the TUI reports success but the files on disk tell a different story.\n *\n * Covered failure modes:\n * - Poll exits on existsSync (file pre-exists) → mtime-based poll instead\n * - config.json never written in TUI path → writeVrekoInitConfig\n * - Poll timeout too short for large repos → configurable, default 45 s\n */\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface PollOptions {\n\t/** Milliseconds between stat() calls. Default 500. */\n\tintervalMs?: number;\n\t/** Total milliseconds before giving up. Default 45 000 (init-scan on large repos). */\n\ttimeoutMs?: number;\n\t/** Return true to abort the poll early (e.g. React cleanup). */\n\tcancelled?: () => boolean;\n}\n\n// ── Snapshot ───────────────────────────────────────────────────────────────\n\n/**\n * Read the current mtime of `targetFile` before triggering an async write.\n * Returns `null` if the file does not yet exist (first init).\n *\n * Call this BEFORE firing any IPC that will cause the file to be written so\n * the subsequent poll can distinguish \"file appeared\" from \"file was updated\".\n */\nexport function snapshotPreWriteMtime(targetFile: string): number | null {\n\ttry {\n\t\treturn statSync(targetFile).mtimeMs;\n\t} catch {\n\t\treturn null; // file doesn't exist yet - first init\n\t}\n}\n\n// ── Poll ───────────────────────────────────────────────────────────────────\n\n/**\n * Poll `targetFile` until its mtime advances past `preMtime`.\n *\n * Returns `true` when a new write is detected, `false` on timeout or\n * cancellation. Uses `statSync` - NOT `existsSync` - so a pre-existing file\n * from a prior init is correctly treated as \"not yet written\" until the daemon\n * updates it.\n *\n * This is the regression guard for the existsSync bug: if a caller replaces\n * this function with an existsSync check, the unit tests in\n * activation-helpers.test.ts will fail immediately.\n */\nexport async function pollForWorkspaceJsonUpdate(\n\ttargetFile: string,\n\tpreMtime: number | null,\n\toptions: PollOptions = {},\n): Promise<boolean> {\n\tconst { intervalMs = 500, timeoutMs = 45_000, cancelled = () => false } = options;\n\tconst deadline = Date.now() + timeoutMs;\n\n\twhile (Date.now() < deadline) {\n\t\tif (cancelled()) return false;\n\t\ttry {\n\t\t\tconst mtime = statSync(targetFile).mtimeMs;\n\t\t\t// preMtime null → file is new (first init), any read counts as written\n\t\t\t// preMtime set → file existed; only accept a strictly newer mtime\n\t\t\tif (preMtime === null || mtime > preMtime) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} catch {\n\t\t\t// File not yet written - keep polling\n\t\t}\n\t\tawait new Promise<void>((resolve) => setTimeout(resolve, intervalMs));\n\t}\n\treturn false;\n}\n\n// ── Config write ───────────────────────────────────────────────────────────\n\n/**\n * Write `.vreko/config.json` from the scan profile.\n *\n * The TUI path (interactive `vr init`) skips `init-core.ts` entirely, so\n * without this function the config file is never created. The function is\n * idempotent: if the file already exists it is left untouched so a re-init\n * does not overwrite user edits.\n *\n * This is the regression guard for the \"Config written to .vreko/config.json\"\n * TUI claim that was previously a hardcoded lie.\n */\nexport function writeVrekoInitConfig(repoPath: string, profile: RecoveryRiskProfile): void {\n\tconst vrekoDir = join(repoPath, \".vreko\");\n\tconst configPath = join(vrekoDir, \"config.json\");\n\n\t// Idempotent - respect any existing config (user may have customised it).\n\tif (existsSync(configPath)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tmkdirSync(vrekoDir, { recursive: true });\n\t\tconst config = {\n\t\t\tprotectionLevel: profile.recommendedConfig.protectionLevel,\n\t\t\tsnapshotFrequency: profile.recommendedConfig.snapshotFrequency,\n\t\t\tprojections: { docs: { approvedFiles: [] } },\n\t\t};\n\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n\t} catch {\n\t\t// Non-fatal - `vr doctor` can self-heal on the next run.\n\t}\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RecoveryRiskProfile, WatchTarget } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { useEffect, useState } from \"react\";\nimport { connectToDaemon, getDaemonClient, getDaemonStatus, isDaemonConnected } from \"../../services/service-client.js\";\nimport { saveBenchmarkOptIn } from \"../../services/vreko-dir.js\";\nimport { BRAND_COLORS } from \"../../ui/theme.js\";\nimport { pollForWorkspaceJsonUpdate, snapshotPreWriteMtime, writeVrekoInitConfig } from \"./activation-helpers.js\";\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction totalWatchCount(targets: WatchTarget[]): number {\n\treturn targets.reduce((s, t) => s + Math.max(t.fileCount, 1), 0);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\ninterface ActivationProps {\n\tforce?: boolean;\n\tprofile: RecoveryRiskProfile;\n\trepoPath?: string;\n}\n\ntype ServiceStage = \"service\" | \"done\";\ntype CheckStatus = \"pending\" | \"running\" | \"done\" | \"error\";\n\ninterface DaemonCheck {\n\tlabel: string;\n\tstatus: CheckStatus;\n\tdetail?: string;\n}\n\nexport function Activation({ profile, repoPath = process.cwd(), force }: ActivationProps) {\n\tconst { exit } = useApp();\n\tconst [stage, setStage] = useState<ServiceStage>(\"service\");\n\n\tconst [checks, setChecks] = useState<DaemonCheck[]>([\n\t\t{ label: \"Connecting to service\", status: \"pending\" },\n\t\t{ label: \"Verifying workspace\", status: \"pending\" },\n\t\t{ label: \"Checking file watcher\", status: \"pending\" },\n\t\t{ label: \"Loading intelligence\", status: \"pending\" },\n\t\t{ label: \"Writing workspace.json\", status: \"pending\" },\n\t]);\n\n\tconst updateCheck = (index: number, status: CheckStatus, detail?: string) => {\n\t\tsetChecks((prev) => prev.map((c, i) => (i === index ? { ...c, status, detail } : c)));\n\t};\n\n\t// Service startup sequence\n\tuseEffect(() => {\n\t\tif (stage !== \"service\") {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\n\t\tasync function run() {\n\t\t\t// Step 1: Connect to service\n\t\t\tupdateCheck(0, \"running\");\n\t\t\tlet step1Connected = false;\n\t\t\ttry {\n\t\t\t\tif (!isDaemonConnected()) {\n\t\t\t\t\tawait connectToDaemon();\n\t\t\t\t}\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstep1Connected = true;\n\t\t\t\tupdateCheck(0, \"done\");\n\t\t\t} catch {\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Daemon not running - attempt to start it\n\t\t\t\ttry {\n\t\t\t\t\tconst { execFileSync } = await import(\"node:child_process\");\n\t\t\t\t\texecFileSync(\"vreko\", [\"service\", \"start\", \"--service\"], {\n\t\t\t\t\t\tstdio: \"pipe\",\n\t\t\t\t\t\ttimeout: 10000,\n\t\t\t\t\t});\n\t\t\t\t\t// Give daemon time to bind\n\t\t\t\t\tawait delay(1500);\n\t\t\t\t\tawait connectToDaemon();\n\t\t\t\t\tif (cancelled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstep1Connected = true;\n\t\t\t\t\tupdateCheck(0, \"done\");\n\t\t\t\t} catch {\n\t\t\t\t\t// Start failed - continue with degraded mode, already shown below\n\t\t\t\t}\n\t\t\t\tif (!step1Connected) {\n\t\t\t\t\tif (cancelled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tupdateCheck(0, \"error\", \"Failed to connect - start service with: vr service start\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Write .vreko/config.json - the TUI path never calls init-core, so it\n\t\t\t// must be written here. See activation-helpers.ts: writeVrekoInitConfig.\n\t\t\twriteVrekoInitConfig(repoPath, profile);\n\n\t\t\t// Write agents.workspace.json - non-fatal, shown as step 5.\n\t\t\t// The daemon runs a full init-scan asynchronously (git log + analysis),\n\t\t\t// which can take 20-45 s on large repos. We snapshot the file's mtime\n\t\t\t// BEFORE triggering via snapshotPreWriteMtime, then poll via\n\t\t\t// pollForWorkspaceJsonUpdate until the mtime advances - detecting an\n\t\t\t// actual new write, not just the file's existence from a prior init.\n\t\t\t// See activation-helpers.ts for the tested implementation.\n\t\t\tif (step1Connected) {\n\t\t\t\tupdateCheck(4, \"running\");\n\t\t\t\ttry {\n\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\tif (client) {\n\t\t\t\t\t\tconst targetFile = join(repoPath, \".agents\", \"workspace.json\");\n\t\t\t\t\t\tconst preMtime = snapshotPreWriteMtime(targetFile);\n\n\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/trigger-workspace-json-write\", {\n\t\t\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/write-from-scan-profile\", {\n\t\t\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t\t\t\t...(force && { force: true }),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst written = await pollForWorkspaceJsonUpdate(targetFile, preMtime, {\n\t\t\t\t\t\t\tcancelled: () => cancelled,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (written) {\n\t\t\t\t\t\t\tupdateCheck(4, \"done\", \"Baseline written to .agents/workspace.json\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tupdateCheck(4, \"error\", \"Write in progress - will complete in background\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdateCheck(4, \"error\", \"No daemon client - will write on first session\");\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst msg = e instanceof Error ? e.message : String(e);\n\t\t\t\t\tconsole.warn(`[vreko init] workspace.json write failed (non-fatal): ${msg}`);\n\t\t\t\t\tupdateCheck(4, \"error\", \"Write deferred - will complete on first session\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Step 2: Get service status\n\t\t\tupdateCheck(1, \"running\");\n\t\t\ttry {\n\t\t\t\tconst status = await getDaemonStatus();\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (status.connected) {\n\t\t\t\t\tconst uptimeMin = status.uptime ? Math.floor(status.uptime / 60000) : 0;\n\t\t\t\t\tupdateCheck(1, \"done\", `Workspace registered${uptimeMin > 0 ? ` (service up ${uptimeMin}m)` : \"\"}`);\n\t\t\t\t} else {\n\t\t\t\t\tupdateCheck(1, \"error\", \"Service not responding\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateCheck(1, \"done\", \"Workspace registered\");\n\t\t\t}\n\n\t\t\tawait delay(200);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Step 3: Check file watcher\n\t\t\tupdateCheck(2, \"running\");\n\t\t\tawait delay(100);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst hasVreko = existsSync(`${repoPath}/.vreko`);\n\t\t\tupdateCheck(2, \"done\", hasVreko ? \"File watcher active\" : \"File watcher starting\");\n\n\t\t\tawait delay(200);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Step 4: Intelligence seeded\n\t\t\tupdateCheck(3, \"running\");\n\t\t\tawait delay(150);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateCheck(3, \"done\", \"Intelligence ready\");\n\n\t\t\tawait delay(400);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetStage(\"done\");\n\t\t}\n\n\t\trun();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [stage, repoPath]);\n\n\t// Benchmark opt-in handler (done stage)\n\tuseInput(\n\t\t(_input, key) => {\n\t\t\tif (stage !== \"done\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst answer = _input.toLowerCase();\n\t\t\tlet optedIn: boolean;\n\n\t\t\tif (answer === \"y\") {\n\t\t\t\toptedIn = true;\n\t\t\t} else if (answer === \"n\") {\n\t\t\t\toptedIn = false;\n\t\t\t} else if (key.return) {\n\t\t\t\toptedIn = false;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsaveBenchmarkOptIn(optedIn).then(() => {\n\t\t\t\texit();\n\t\t\t});\n\t\t},\n\t\t{ isActive: stage === \"done\" },\n\t);\n\n\tconst watchCount = totalWatchCount(profile.recommendedConfig.watchTargets);\n\tconst patternCount = profile.insights.length + profile.lockedInsights.length;\n\tconst fragileFile = profile.topFragileFile || \"your most-changed file\";\n\n\tif (stage === \"done\") {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t\t<Text bold color=\"green\">\n\t\t\t\t\tVreko is watching your codebase.\n\t\t\t\t</Text>\n\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{` Protection: ${capitalize(profile.recommendedConfig.protectionLevel)} · Watching ${watchCount} target${watchCount !== 1 ? \"s\" : \"\"}`}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{` Snapshot frequency: ${capitalize(profile.recommendedConfig.snapshotFrequency)} (risk-adaptive)`}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{\" Config written to .vreko/config.json\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1} borderStyle=\"single\" padding={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>Try it now:</Text>\n\t\t\t\t\t<Text />\n\t\t\t\t\t<Text color=\"cyan\">\n\t\t\t\t\t\t{'$ echo \"test\" >> '}\n\t\t\t\t\t\t{fragileFile}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text />\n\t\t\t\t\t<Text>Vreko will catch the change to your most fragile</Text>\n\t\t\t\t\t<Text>file in real time.</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\tRecovery Risk: {capitalize(profile.overallRisk)}\n\t\t\t\t\t\t{\" · \"}Protection: {capitalize(profile.recommendedConfig.protectionLevel)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{watchCount} target{watchCount !== 1 ? \"s\" : \"\"} watched\n\t\t\t\t\t\t{\" · \"}\n\t\t\t\t\t\t{patternCount} patterns seeded\n\t\t\t\t\t\t{\" · \"}\n\t\t\t\t\t\t{profile.lockedInsights.length} insight unlocking\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text bold>\n\t\t\t\t\t\t{\"Vreko is active. Run \"}\n\t\t\t\t\t\t<Text color=\"cyan\">vr status</Text>\n\t\t\t\t\t\t{\" anytime.\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text dimColor>Run `vr status` anytime. Your code stays local.</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text>Share anonymous benchmarks to improve comparisons? [y/N]</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\t// Service startup stage\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Text>Starting Vreko service...</Text>\n\t\t\t<Box marginTop={1} flexDirection=\"column\" minHeight={4}>\n\t\t\t\t{checks\n\t\t\t\t\t.filter((check) => check.status !== \"pending\")\n\t\t\t\t\t.map((check, i) => {\n\t\t\t\t\t\tconst icon = check.status === \"done\" ? \"✓\" : check.status === \"error\" ? \"⚠\" : \"…\";\n\t\t\t\t\t\tconst color =\n\t\t\t\t\t\t\tcheck.status === \"done\"\n\t\t\t\t\t\t\t\t? BRAND_COLORS.primary\n\t\t\t\t\t\t\t\t: check.status === \"error\"\n\t\t\t\t\t\t\t\t\t? \"yellow\"\n\t\t\t\t\t\t\t\t\t: \"cyan\";\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Text key={i} color={color}>\n\t\t\t\t\t\t\t\t{icon} {check.label}\n\t\t\t\t\t\t\t\t{check.detail ? ` - ${check.detail}` : \"\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","/**\n * Consent stage for the vreko init TUI (D-14 / G-01)\n *\n * Shows data-collection notice before activation. User must explicitly\n * accept or decline. Decline exits the TUI without initializing.\n */\n\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { useState } from \"react\";\nimport { BRAND_COLORS } from \"../../ui/theme.js\";\n\ninterface ConsentProps {\n\tonAccept: () => void;\n}\n\nexport function Consent({ onAccept }: ConsentProps) {\n\tconst { exit } = useApp();\n\tconst [declined, setDeclined] = useState(false);\n\n\tuseInput((input, key) => {\n\t\tif (key.return || input === \"y\" || input === \"Y\") {\n\t\t\tonAccept();\n\t\t} else if (input === \"n\" || input === \"N\" || key.escape) {\n\t\t\tsetDeclined(true);\n\t\t\tsetTimeout(() => exit(), 300);\n\t\t}\n\t});\n\n\tif (declined) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" padding={1}>\n\t\t\t\t<Text color=\"yellow\">Setup cancelled. No data was collected.</Text>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1} width={78}>\n\t\t\t<Text bold color={BRAND_COLORS.primary}>\n\t\t\t\tData Collection Notice\n\t\t\t</Text>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\" gap={0}>\n\t\t\t\t<Text>Vreko collects the following to power its intelligence features:</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>{\" ✓ \"}Session metadata (start/end times, file counts, risk scores)</Text>\n\t\t\t\t\t<Text>{\" ✓ \"}Git commit hashes and change attribution</Text>\n\t\t\t\t\t<Text>{\" ✓ \"}Rollback events and AI tool attribution</Text>\n\t\t\t\t</Box>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text color=\"green\">{\" ✗ File contents never leave your device\"}</Text>\n\t\t\t\t\t<Text color=\"green\">{\" ✗ Source code is never read or transmitted\"}</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text dimColor>Data stays local by default. Cloud sync (opt-in) transmits metadata only.</Text>\n\t\t\t\t<Text dimColor>{\"Run `vreko purge` at any time to delete all local data.\"}</Text>\n\t\t\t\t<Text dimColor>{\"Privacy policy: https://vreko.dev/privacy\"}</Text>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"Press \"}\n\t\t\t\t\t<Text bold color=\"green\">\n\t\t\t\t\t\tY / Enter\n\t\t\t\t\t</Text>\n\t\t\t\t\t{\" to accept · \"}\n\t\t\t\t\t<Text bold color=\"red\">\n\t\t\t\t\t\tN / ESC\n\t\t\t\t\t</Text>\n\t\t\t\t\t{\" to decline\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { execSync } from \"node:child_process\";\nimport { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useEffect, useState } from \"react\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\ninterface DetectionProps {\n\trepoPath?: string;\n\tonReady: () => void;\n}\n\nfunction detectRepoInfo(repoPath: string): string[] {\n\tconst checks: string[] = [];\n\n\t// Git detection\n\tif (existsSync(join(repoPath, \".git\"))) {\n\t\tchecks.push(\"✓ Git repository found\");\n\t} else {\n\t\tchecks.push(\"⚠ No git repository found - some features unavailable\");\n\t}\n\n\t// Package manager / monorepo detection\n\tif (existsSync(join(repoPath, \"pnpm-workspace.yaml\"))) {\n\t\tconst pkgCount = readdirSync(repoPath, { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory() && (d.name === \"packages\" || d.name === \"apps\"))\n\t\t\t.reduce((acc) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tacc +\n\t\t\t\t\t\treaddirSync(join(repoPath, \"packages\"), { withFileTypes: true }).filter((d) => d.isDirectory())\n\t\t\t\t\t\t\t.length +\n\t\t\t\t\t\treaddirSync(join(repoPath, \"apps\"), { withFileTypes: true }).filter((d) => d.isDirectory())\n\t\t\t\t\t\t\t.length\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t}, 0);\n\t\tchecks.push(`✓ pnpm workspace monorepo${pkgCount > 0 ? ` (${pkgCount} packages)` : \"\"}`);\n\t} else if (existsSync(join(repoPath, \"yarn.lock\"))) {\n\t\tchecks.push(\"✓ Yarn workspace detected\");\n\t} else if (existsSync(join(repoPath, \"package.json\"))) {\n\t\tchecks.push(\"✓ Node.js project detected\");\n\t}\n\n\t// Framework detection\n\tif (existsSync(join(repoPath, \"turbo.json\"))) {\n\t\tchecks.push(\"✓ Turborepo build system\");\n\t} else if (existsSync(join(repoPath, \"nx.json\"))) {\n\t\tchecks.push(\"✓ Nx workspace\");\n\t}\n\n\tif (existsSync(join(repoPath, \"next.config.js\")) || existsSync(join(repoPath, \"next.config.ts\"))) {\n\t\tchecks.push(\"✓ Next.js application\");\n\t}\n\n\t// AI tool detection - use statSync to confirm directory (not just existence)\n\tconst aiTools: string[] = [];\n\tconst aiDirCandidates: Array<{ path: string; name: string }> = [\n\t\t{ path: join(repoPath, \".cursor\"), name: \"Cursor\" },\n\t\t{ path: join(repoPath, \".github\", \"copilot\"), name: \"GitHub Copilot\" },\n\t\t{ path: join(repoPath, \".claude\"), name: \"Claude Code\" },\n\t\t{ path: join(repoPath, \".windsurf\"), name: \"Windsurf\" },\n\t];\n\tfor (const { path, name } of aiDirCandidates) {\n\t\ttry {\n\t\t\tif (existsSync(path) && statSync(path).isDirectory()) {\n\t\t\t\taiTools.push(name);\n\t\t\t}\n\t\t} catch {\n\t\t\t/* non-critical */\n\t\t}\n\t}\n\tif (aiTools.length > 0) {\n\t\tchecks.push(`✓ AI tools detected: ${aiTools.join(\", \")}`);\n\t}\n\n\t// Commit count (rough indicator of repo maturity)\n\ttry {\n\t\tconst count = execSync(\"git rev-list --count HEAD\", {\n\t\t\tcwd: repoPath,\n\t\t\tencoding: \"utf-8\",\n\t\t\ttimeout: 3000,\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t}).trim();\n\t\tif (count) {\n\t\t\tchecks.push(`✓ ${count} commits in history`);\n\t\t}\n\t} catch {\n\t\t/* non-critical */\n\t}\n\n\treturn checks.slice(0, 5); // Show at most 5 checks\n}\n\nexport function Detection({ repoPath = process.cwd(), onReady }: DetectionProps) {\n\tconst [checks, setChecks] = useState<string[]>([]);\n\n\t// Trigger scanning on ENTER\n\tuseInput((_input, key) => {\n\t\tif (key.return) {\n\t\t\tonReady();\n\t\t}\n\t});\n\n\tuseEffect(() => {\n\t\tconst detected = detectRepoInfo(repoPath);\n\t\tdetected.forEach((check, index) => {\n\t\t\tsetTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tsetChecks((prev) => [...prev, check]);\n\t\t\t\t},\n\t\t\t\t(index + 1) * 200,\n\t\t\t);\n\t\t});\n\t}, [repoPath]);\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text>Detecting repository...</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\" minHeight={4}>\n\t\t\t\t\t{checks.map((msg, i) => (\n\t\t\t\t\t\t<Text key={i} color={msg.startsWith(\"⚠\") ? \"yellow\" : undefined}>\n\t\t\t\t\t\t\t{msg.startsWith(\"⚠\") ? (\n\t\t\t\t\t\t\t\tmsg\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t\t\t\t{msg.slice(1)}\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text dimColor>Analyzing behavioral patterns - no code will be read.</Text>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>Press [ENTER] to scan your repository →</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { getDaemonClient, isDaemonConnected } from \"../../../services/service-client.js\";\n\nexport interface UseAnalysisResult {\n\tdone: boolean;\n\terrored: boolean;\n\tprofile: RecoveryRiskProfile | null;\n}\n\n/**\n * Minimal profile returned when daemon scan returns null (cache hit / concurrent scan).\n * Downstream stages handle this gracefully; the daemon has already emitted scan.complete\n * via the event bus. This avoids crashing the TUI when a second concurrent init runs.\n */\nconst NULL_PROFILE: RecoveryRiskProfile = {\n\toverallRisk: \"low\",\n\tconfidence: 0,\n\tprimary: { recoveryRisk: 0, changeVolatility: 0, workflowFragility: 0 },\n\tsecondary: { complexity: 0, collaboration: 0, aiExposure: 0, structuralRisk: 0 },\n\ttopDrivers: [],\n\tinsights: [],\n\tlockedInsights: [],\n\trecommendedConfig: {\n\t\tprotectionLevel: \"standard\",\n\t\tsnapshotFrequency: \"balanced\",\n\t\twatchTargets: [],\n\t\tenabledFeatures: [],\n\t},\n\ttopFragileFile: null,\n\ttopFragileFiles: [],\n\tcoChange: [],\n\tfragility: [],\n};\n\n/**\n * Hook that runs the init scan analysis for a given repo path.\n * Extracted from Scanning.tsx for reuse and testability.\n *\n * Scan path:\n * 1. If daemon is connected: call workspace/run-init-scan via IPC (ARCH-01 compliant).\n * 2. If daemon is NOT connected (VIRGIN/NEW_WORKSPACE - daemon not yet started during\n * the Scanning stage): fall back to direct runInitScan as a one-time exception.\n * This fallback is intentionally isolated to a dynamic import in this hook.\n *\n * ARCH-01-PENDING: Remove direct fallback once the Scanning stage runs post-Activation\n * (tracked as LIN-0000). The fallback path exists solely for the pre-Activation window.\n */\nexport function useAnalysis(\n\trepoPath: string,\n\tonComplete: (profile: RecoveryRiskProfile) => void,\n\tminDisplayMs = 0,\n): UseAnalysisResult {\n\tconst [done, setDone] = useState(false);\n\tconst [errored, setErrored] = useState(false);\n\tconst [profile, setProfile] = useState<RecoveryRiskProfile | null>(null);\n\tconst hasStarted = useRef(false);\n\tconst startTimeRef = useRef(Date.now());\n\n\tuseEffect(() => {\n\t\tif (hasStarted.current) {\n\t\t\treturn;\n\t\t}\n\t\thasStarted.current = true;\n\n\t\tconst runScan = async (): Promise<RecoveryRiskProfile | null> => {\n\t\t\t// Try IPC first - preferred path when daemon is already running (COLD_RETURN profile)\n\t\t\tif (isDaemonConnected()) {\n\t\t\t\tconst client = getDaemonClient();\n\t\t\t\treturn client.call<RecoveryRiskProfile | null>(\"workspace/run-init-scan\", {\n\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ARCH-01-PENDING: fallback for pre-Activation daemon start\n\t\t\t// Daemon is not yet running (VIRGIN/NEW_WORKSPACE). Use direct import as a\n\t\t\t// one-time exception. Dynamic import minimises violation surface area.\n\t\t\t// Remove this branch once Scanning stage is guaranteed to run post-Activation (LIN-0000).\n\t\t\tconst { runInitScan } = await import(\"@vreko/intelligence/init-scan\");\n\t\t\treturn runInitScan({ repoPath });\n\t\t};\n\n\t\trunScan()\n\t\t\t.then((result) => {\n\t\t\t\t// null = cache hit or concurrent scan in progress; treat as NULL_PROFILE to avoid crash\n\t\t\t\tconst resolved: RecoveryRiskProfile = result ?? NULL_PROFILE;\n\t\t\t\tsetDone(true);\n\t\t\t\tsetProfile(resolved);\n\t\t\t\tconst elapsed = Date.now() - startTimeRef.current;\n\t\t\t\tconst delay = Math.max(500, minDisplayMs - elapsed);\n\t\t\t\tsetTimeout(() => onComplete(resolved), delay);\n\t\t\t})\n\t\t\t.catch(() => setErrored(true));\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [repoPath]);\n\n\treturn { done, errored, profile };\n}\n","/**\n * Keyboard Navigation Hook for Init TUI\n *\n * Provides accessible keyboard controls:\n * - Enter: Confirm/proceed to next stage\n * - Escape: Cancel/go back\n * - Arrow keys: Navigation within forms\n *\n * @module ui/init/hooks/useKeyboard\n */\n\nimport { useInput } from \"ink\";\n\nexport interface UseKeyboardOptions {\n\t/** Called when Enter is pressed */\n\tonEnter?: () => void;\n\t/** Called when Escape is pressed */\n\tonEscape?: () => void;\n\t/** Called when Arrow Right is pressed */\n\tonArrowRight?: () => void;\n\t/** Called when Arrow Left is pressed */\n\tonArrowLeft?: () => void;\n\t/** Called when Arrow Up is pressed */\n\tonArrowUp?: () => void;\n\t/** Called when Arrow Down is pressed */\n\tonArrowDown?: () => void;\n\t/** Enable keyboard listeners (default: true) */\n\tenabled?: boolean;\n}\n\n/**\n * Hook for keyboard navigation in Ink TUI components.\n * Uses Ink's useInput so stdin ownership stays with Ink throughout the lifecycle.\n */\nexport function useKeyboard(options: UseKeyboardOptions): void {\n\tconst { onEnter, onEscape, onArrowRight, onArrowLeft, onArrowUp, onArrowDown, enabled = true } = options;\n\n\tuseInput(\n\t\t(_input, key) => {\n\t\t\tif (key.return) {\n\t\t\t\tonEnter?.();\n\t\t\t} else if (key.escape) {\n\t\t\t\tonEscape?.();\n\t\t\t} else if (key.rightArrow) {\n\t\t\t\tonArrowRight?.();\n\t\t\t} else if (key.leftArrow) {\n\t\t\t\tonArrowLeft?.();\n\t\t\t} else if (key.upArrow) {\n\t\t\t\tonArrowUp?.();\n\t\t\t} else if (key.downArrow) {\n\t\t\t\tonArrowDown?.();\n\t\t\t}\n\t\t},\n\t\t{ isActive: enabled },\n\t);\n}\n\n/**\n * Screen reader announcement helper\n *\n * Announces status changes to screen readers via ARIA live regions.\n * Falls back to console.log in environments without screen reader support.\n */\nexport function announce(_message: string, priority: \"polite\" | \"assertive\" = \"polite\"): void {\n\t// In a real Ink app, this would use a live region component\n\t// For now, we use the speakable log approach\n\tif (priority === \"assertive\") {\n\t\t// intentionally empty\n\t} else {\n\t\t// intentionally empty\n\t}\n}\n","import type { RecoveryRiskProfile, WatchTarget } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useState } from \"react\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction totalWatchCount(targets: WatchTarget[]): number {\n\treturn targets.reduce((s, t) => s + Math.max(t.fileCount, 1), 0);\n}\n\ntype InsightSeverity = \"critical\" | \"warning\" | \"notable\" | \"info\";\n\ninterface Insight {\n\tid: string;\n\tseverity: InsightSeverity;\n\tobservation: string;\n\twhyItMatters: string;\n\twhatWeWillDo: string;\n\tcomparison?: string;\n\ttype?: string;\n}\n\n/**\n * Sort insights by priority:\n * 1. co-change relationships first\n * 2. blast-radius next\n * 3. recovery patterns\n * 4. severity as tiebreaker (critical > warning > info)\n */\nfunction prioritizeInsights(insights: Insight[]): Insight[] {\n\treturn [...insights].sort((a, b) => {\n\t\t// Type-based ordering\n\t\tif (a.type === \"co-change\" && b.type !== \"co-change\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"co-change\" && a.type !== \"co-change\") {\n\t\t\treturn 1;\n\t\t}\n\t\tif (a.type === \"blast-radius\" && b.type !== \"blast-radius\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"blast-radius\" && a.type !== \"blast-radius\") {\n\t\t\treturn 1;\n\t\t}\n\t\tif (a.type === \"recovery\" && b.type !== \"recovery\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"recovery\" && a.type !== \"recovery\") {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Severity tiebreaker\n\t\tconst severityOrder: Record<InsightSeverity, number> = { critical: 0, warning: 1, notable: 2, info: 3 };\n\t\treturn severityOrder[a.severity] - severityOrder[b.severity];\n\t});\n}\n\nconst PAGE_SIZE = 3;\n\nexport function Insights({\n\tprofile,\n\tonContinue,\n\tonCustomize,\n}: {\n\tprofile: RecoveryRiskProfile;\n\tonContinue: () => void;\n\tonCustomize?: () => void;\n}) {\n\tconst [currentPage, setCurrentPage] = useState(0);\n\n\tconst { insights, lockedInsights, recommendedConfig } = profile;\n\tconst sorted = prioritizeInsights(insights as Insight[]);\n\tconst maxPage = Math.max(0, sorted.length - PAGE_SIZE);\n\n\tuseInput((input, key) => {\n\t\tif (key.upArrow && currentPage > 0) {\n\t\t\tsetCurrentPage((p) => p - 1);\n\t\t} else if (key.downArrow && currentPage < maxPage) {\n\t\t\tsetCurrentPage((p) => p + 1);\n\t\t} else if (key.return) {\n\t\t\tonContinue();\n\t\t} else if ((input === \"c\" || input === \"C\") && onCustomize) {\n\t\t\tonCustomize();\n\t\t}\n\t});\n\n\tconst locked = lockedInsights[0];\n\tconst watchCount = totalWatchCount(recommendedConfig.watchTargets);\n\tconst visibleInsights = sorted.slice(currentPage, currentPage + PAGE_SIZE);\n\tconst shownEnd = currentPage + visibleInsights.length;\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Box>\n\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t<Text bold>What We Found</Text>\n\t\t\t\t</Box>\n\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t<Text bold>What We'll Do</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t{visibleInsights.map((insight) => (\n\t\t\t\t\t<Box key={insight.id} marginBottom={1}>\n\t\t\t\t\t\t<Box width=\"50%\" paddingRight={2} flexDirection=\"column\">\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\tinsight.severity === \"critical\"\n\t\t\t\t\t\t\t\t\t\t? \"red\"\n\t\t\t\t\t\t\t\t\t\t: insight.severity === \"warning\" || insight.severity === \"notable\"\n\t\t\t\t\t\t\t\t\t\t\t? \"yellow\"\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{insight.severity === \"info\" ? \"ℹ\" : \"⚠\"} {insight.observation}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text dimColor> {insight.whyItMatters}</Text>\n\t\t\t\t\t\t\t{insight.comparison && (\n\t\t\t\t\t\t\t\t<Text dimColor color=\"cyan\">\n\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t{insight.comparison}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t\t\t<Text>{insight.whatWeWillDo}</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t))}\n\n\t\t\t\t{locked && currentPage === maxPage && (\n\t\t\t\t\t<Box marginBottom={1}>\n\t\t\t\t\t\t<Box width=\"50%\" paddingRight={2} flexDirection=\"column\">\n\t\t\t\t\t\t\t<Text dimColor>┄ {locked.teaser}</Text>\n\t\t\t\t\t\t\t<Text dimColor> {locked.requirement}</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t\tAvailable after {locked.unlockCondition.days} days of active development.\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} borderStyle=\"single\" padding={1} flexDirection=\"column\">\n\t\t\t\t<Text>\n\t\t\t\t\tProtection: {capitalize(recommendedConfig.protectionLevel)}\n\t\t\t\t\t{\" · \"}Watching: {watchCount} target{watchCount !== 1 ? \"s\" : \"\"}\n\t\t\t\t</Text>\n\t\t\t\t<Text>Snapshot Frequency: {capitalize(recommendedConfig.snapshotFrequency)} (risk-adaptive)</Text>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>\n\t\t\t\t\t{\"[ENTER] Accept · \"}\n\t\t\t\t\t{onCustomize ? \"[c] Customize · \" : \"\"}\n\t\t\t\t\t{sorted.length > PAGE_SIZE ? `[↑↓] More insights (${shownEnd}/${sorted.length})` : \"\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { Box, Text, useStdout } from \"ink\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\nconst LOGO_FULL = `██╗ ██╗██████╗ ███████╗██╗ ██╗ ██████╗ \n██║ ██║██╔══██╗██╔════╝██║ ██╔╝██╔═══██╗\n██║ ██║██████╔╝█████╗ █████╔╝ ██║ ██║\n╚██╗ ██╔╝██╔══██╗██╔══╝ ██╔═██╗ ██║ ██║\n ╚████╔╝ ██║ ██║███████╗██║ ██╗╚██████╔╝\n ╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ `;\n\n/**\n * Responsive Vreko logo.\n * - Wide (>=80 cols): full block-letter logo in brand green #4ADE80 // brand-color-allowed\n * - Narrow (<80 cols): compact text fallback\n */\nexport function Logo() {\n\tconst { stdout } = useStdout();\n\tconst columns = stdout.columns ?? 80;\n\n\tif (columns >= 80) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\">\n\t\t\t\t<Text color={BRAND_COLORS.primary}>{LOGO_FULL}</Text>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Text bold color={BRAND_COLORS.primary}>\n\t\t\t\t{\"━━ VREKO ━━\"}\n\t\t\t</Text>\n\t\t</Box>\n\t);\n}\n","import { useStdout } from \"ink\";\n\nexport interface TerminalLayout {\n\t/** True when the terminal is wide enough to use side-by-side layout (>=120 cols) */\n\tisWide: boolean;\n\t/** True when the terminal can show the full block-letter logo (>=80 cols) */\n\tcanShowFullLogo: boolean;\n\tcolumns: number;\n\trows: number;\n}\n\n/**\n * Returns responsive layout flags based on terminal dimensions.\n * - isWide: >=120 cols → side-by-side layout\n * - canShowFullLogo: >=80 cols → full ASCII logo\n */\nexport function useTerminalLayout(): TerminalLayout {\n\tconst { stdout } = useStdout();\n\tconst columns = stdout.columns ?? 80;\n\tconst rows = stdout.rows ?? 24;\n\n\treturn {\n\t\tisWide: columns >= 120,\n\t\tcanShowFullLogo: columns >= 80,\n\t\tcolumns,\n\t\trows,\n\t};\n}\n","import type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useInput } from \"ink\";\nimport { BRAND_COLORS } from \"../theme.js\";\nimport { useTerminalLayout } from \"./hooks/useTerminalLayout.js\";\nimport { Logo } from \"./Logo.js\";\n\nfunction riskLabel(score: number): string {\n\tif (score > 75) {\n\t\treturn \"high\";\n\t}\n\tif (score > 50) {\n\t\treturn \"elevated\";\n\t}\n\tif (score > 25) {\n\t\treturn \"moderate\";\n\t}\n\treturn \"low\";\n}\n\n/**\n * Render a 10-char progress bar where each block = 10%.\n * Uses brand green (BRAND_COLORS.primary) for filled portion.\n */\nfunction renderBar(score: number, width = 10): string {\n\tconst filled = Math.round((score / 100) * width);\n\tconst empty = width - filled;\n\treturn \"█\".repeat(filled) + \"░\".repeat(empty);\n}\n\ninterface ProfileMetricsProps {\n\tprofile: RecoveryRiskProfile;\n}\n\nfunction ProfileMetrics({ profile }: ProfileMetricsProps) {\n\tconst topDriver = profile.topDrivers[0];\n\n\treturn (\n\t\t<Box flexDirection=\"column\">\n\t\t\t<Text bold>Your Codebase Intelligence Profile</Text>\n\n\t\t\t<Box marginTop={1} padding={1} borderStyle=\"single\" flexDirection=\"column\">\n\t\t\t\t{/* Primary metrics - always shown, all rounded to integers */}\n\t\t\t\t<Text>\n\t\t\t\t\t{\"CODEBASE HEALTH \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.recoveryRisk)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.recoveryRisk)}% ${riskLabel(profile.primary.recoveryRisk)}`}\n\t\t\t\t</Text>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"CHANGE VOLATILITY \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.changeVolatility)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.changeVolatility)}% ${riskLabel(profile.primary.changeVolatility)}`}\n\t\t\t\t</Text>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"WORKFLOW FRAGILITY \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.workflowFragility)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.workflowFragility)}% ${riskLabel(profile.primary.workflowFragility)}`}\n\t\t\t\t</Text>\n\n\t\t\t\t<Text color=\"gray\">{\"─\".repeat(55)}</Text>\n\n\t\t\t\t{/* Secondary metrics - gated: only show when meaningful */}\n\t\t\t\t<Box flexDirection=\"column\">\n\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t{\"complexity \"}\n\t\t\t\t\t\t{Math.round(profile.secondary.complexity)}\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{/* Collaboration: hide if solo developer */}\n\t\t\t\t\t{profile.secondary.collaboration > 0 ? (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"collaboration \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.collaboration)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Text dimColor>collaboration Solo developer detected</Text>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* AI Exposure: show placeholder when zero */}\n\t\t\t\t\t{profile.secondary.aiExposure > 0 ? (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"AI exposure \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.aiExposure)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Text dimColor>AI exposure Tracking begins after first session</Text>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Structural risk: hide when zero */}\n\t\t\t\t\t{profile.secondary.structuralRisk > 0 && (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"structural \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.structuralRisk)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t{topDriver && <Text>Top driver: {topDriver.label}</Text>}\n\t\t\t\t<Text>\n\t\t\t\t\tConfidence: {profile.confidence >= 0.7 ? \"high\" : profile.confidence >= 0.4 ? \"moderate\" : \"low\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nexport function Profile({ profile, onContinue }: { profile: RecoveryRiskProfile; onContinue: () => void }) {\n\tuseInput((_input, key) => {\n\t\tif (key.return) {\n\t\t\tonContinue();\n\t\t}\n\t});\n\n\tconst { isWide } = useTerminalLayout();\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t{/* Wide terminal (>=120 cols): side-by-side logo + metrics */}\n\t\t\t{isWide ? (\n\t\t\t\t<Box>\n\t\t\t\t\t<Box width={45} flexShrink={0}>\n\t\t\t\t\t\t<Logo />\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box flexGrow={1}>\n\t\t\t\t\t\t<ProfileMetrics profile={profile} />\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t) : (\n\t\t\t\t<ProfileMetrics profile={profile} />\n\t\t\t)}\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>Press [ENTER] to see what we found {\"→\"}</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { BootProfileType } from \"@vreko/contracts/local-service\";\nimport type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text } from \"ink\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Activation } from \"./Activation.js\";\nimport { Consent } from \"./Consent.js\";\nimport { Detection } from \"./Detection.js\";\nimport { useAnalysis } from \"./hooks/useAnalysis.js\";\nimport { announce, useKeyboard } from \"./hooks/useKeyboard.js\";\nimport { Insights } from \"./Insights.js\";\nimport { Logo } from \"./Logo.js\";\nimport { Profile } from \"./Profile.js\";\n\n/** Minimum time to show the scanning frame so it doesn't flash. */\nexport const MIN_SCAN_DISPLAY_MS = 4000;\n\nexport type FrameStage = \"detection\" | \"scanning\" | \"profile\" | \"insights\" | \"consent\" | \"activation\";\n\ninterface ScanningFrameProps {\n\trepoPath: string;\n\tonComplete: (profile: RecoveryRiskProfile) => void;\n}\n\n/** Inner component that owns the scan side-effect via useAnalysis hook. */\nfunction ScanningFrame({ repoPath, onComplete }: ScanningFrameProps) {\n\tconst { done, errored } = useAnalysis(repoPath, onComplete, MIN_SCAN_DISPLAY_MS);\n\tconst statusLabel = done ? \"[██████████] done\" : errored ? \"[ error ]\" : \"[██████░░░░] ...\";\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Text>Scanning your development history...</Text>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text>Reflog Analysis {statusLabel}</Text>\n\t\t\t\t<Text>Commit Patterns {statusLabel}</Text>\n\t\t\t\t<Text>Repo Structure {statusLabel}</Text>\n\t\t\t\t<Text>Dependency Analysis {statusLabel}</Text>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text color=\"green\">{\"🔒\"} Metadata only - file contents are never read</Text>\n\t\t\t\t<Text dimColor>{\"☁\"} Baseline comparison: disabled (offline mode)</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nexport interface InitAppOptions {\n\tforce?: boolean;\n\t[key: string]: unknown;\n}\n\n// =============================================================================\n// PROFILE-AWARE FRAME SKIP TABLE (spec §D)\n// =============================================================================\n\nconst FRAME_ENABLED_MAP: Record<BootProfileType, Record<FrameStage, boolean>> = {\n\tVIRGIN: { detection: true, scanning: true, profile: true, insights: true, consent: true, activation: true },\n\tNEW_WORKSPACE: { detection: false, scanning: true, profile: true, insights: true, consent: true, activation: true },\n\tCOLD_RETURN: { detection: false, scanning: true, profile: true, insights: true, consent: false, activation: true },\n\tWARM_RETURN: {\n\t\tdetection: false,\n\t\tscanning: false,\n\t\tprofile: true,\n\t\tinsights: false,\n\t\tconsent: false,\n\t\tactivation: true,\n\t},\n\tHOT_RECONNECT: {\n\t\tdetection: false,\n\t\tscanning: false,\n\t\tprofile: false,\n\t\tinsights: false,\n\t\tconsent: false,\n\t\tactivation: true,\n\t},\n};\n\n/**\n * Returns true if the given frame stage is enabled for the given boot profile.\n * Defaults to COLD_RETURN when profile is undefined (safe default, §J).\n */\nexport function isFrameEnabled(frame: FrameStage, profile: BootProfileType = \"COLD_RETURN\"): boolean {\n\treturn FRAME_ENABLED_MAP[profile]?.[frame] ?? true;\n}\n\nexport function InitApp({\n\tpathArg,\n\toptions,\n\tinitProfile,\n}: {\n\tpathArg?: string;\n\toptions: InitAppOptions;\n\tinitProfile?: BootProfileType; // undefined → COLD_RETURN as safe default (spec §J)\n}) {\n\tconst [stage, setStage] = useState<FrameStage>(\"detection\");\n\tconst [profile, setProfile] = useState<RecoveryRiskProfile | null>(null);\n\n\tconst repoPath = (typeof pathArg === \"string\" && pathArg) || process.cwd();\n\n\t// Keyboard navigation handler\n\tconst handleNextStage = useCallback(() => {\n\t\tconst allStages: FrameStage[] = [\"detection\", \"scanning\", \"profile\", \"insights\", \"consent\", \"activation\"];\n\t\tconst profile = initProfile ?? \"COLD_RETURN\";\n\t\tconst enabledStages = allStages.filter((s) => isFrameEnabled(s, profile));\n\t\tconst currentIndex = enabledStages.indexOf(stage);\n\t\tif (currentIndex < enabledStages.length - 1) {\n\t\t\tconst nextStage = enabledStages[currentIndex + 1];\n\t\t\tsetStage(nextStage);\n\t\t\tannounce(`Proceeding to ${nextStage} stage`, \"polite\");\n\t\t}\n\t}, [stage, initProfile]);\n\n\tconst handlePrevStage = useCallback(() => {\n\t\tconst allStages: FrameStage[] = [\"detection\", \"scanning\", \"profile\", \"insights\", \"consent\", \"activation\"];\n\t\tconst profile = initProfile ?? \"COLD_RETURN\";\n\t\tconst enabledStages = allStages.filter((s) => isFrameEnabled(s, profile));\n\t\tconst currentIndex = enabledStages.indexOf(stage);\n\t\tif (currentIndex > 0) {\n\t\t\tconst prevStage = enabledStages[currentIndex - 1];\n\t\t\tsetStage(prevStage);\n\t\t\tannounce(`Returning to ${prevStage} stage`, \"polite\");\n\t\t}\n\t}, [stage, initProfile]);\n\n\t// Enable keyboard navigation on interactive stages\n\tuseKeyboard({\n\t\tonEnter: handleNextStage,\n\t\tonEscape: () => {\n\t\t\tannounce(\"Cancelling initialization\", \"assertive\");\n\t\t\tprocess.exit(0);\n\t\t},\n\t\tonArrowRight: handleNextStage,\n\t\tonArrowLeft: handlePrevStage,\n\t\tenabled: stage === \"profile\" || stage === \"insights\" || stage === \"activation\",\n\t\t// consent stage manages its own keyboard input via Consent component\n\t});\n\n\t// Announce stage changes for screen readers\n\tuseEffect(() => {\n\t\tannounce(`Vreko initialization: ${stage} stage`, \"polite\");\n\t}, [stage]);\n\n\t// Guard: not a git repository\n\tconst isGitRepo = existsSync(join(repoPath, \".git\"));\n\tif (!isGitRepo) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" padding={1}>\n\t\t\t\t<Text>Vreko requires a Git repository.</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{\"Initialize one with: \"}\n\t\t\t\t\t\t<Text color=\"cyan\">git init</Text>\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{\"Then run: \"}\n\t\t\t\t\t\t<Text color=\"cyan\">vr init</Text>\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\tconst handleScanComplete = useCallback((p: RecoveryRiskProfile) => {\n\t\tsetProfile(p);\n\t\tsetStage(\"profile\");\n\t\tannounce(\"Scan complete. Risk profile generated.\", \"polite\");\n\t}, []);\n\n\treturn (\n\t\t<Box flexDirection=\"column\" padding={1} width={80}>\n\t\t\t{/* Logo shown on detection and scanning stages */}\n\t\t\t{(stage === \"detection\" || stage === \"scanning\") && <Logo />}\n\n\t\t\t{stage === \"detection\" && isFrameEnabled(\"detection\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Detection repoPath={repoPath} onReady={() => setStage(\"scanning\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"scanning\" && isFrameEnabled(\"scanning\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<ScanningFrame repoPath={repoPath} onComplete={handleScanComplete} />\n\t\t\t)}\n\n\t\t\t{stage === \"profile\" && profile && isFrameEnabled(\"profile\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Profile profile={profile} onContinue={() => setStage(\"insights\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"insights\" && profile && isFrameEnabled(\"insights\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Insights profile={profile} onContinue={() => setStage(\"consent\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"consent\" && isFrameEnabled(\"consent\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Consent onAccept={() => setStage(\"activation\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"activation\" && profile && isFrameEnabled(\"activation\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Activation profile={profile} repoPath={repoPath} force={options.force} />\n\t\t\t)}\n\n\t\t\t{/* Keyboard hints for accessibility */}\n\t\t\t{(stage === \"profile\" || stage === \"insights\" || stage === \"activation\") && (\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text dimColor>Press Enter or → to continue | ← to go back | ESC to cancel</Text>\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</Box>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/init/activation-helpers.ts","../src/ui/init/Activation.tsx","../src/ui/init/Consent.tsx","../src/ui/init/Detection.tsx","../src/ui/init/hooks/useAnalysis.ts","../src/ui/init/hooks/useKeyboard.ts","../src/ui/init/Insights.tsx","../src/ui/init/Logo.tsx","../src/ui/init/hooks/useTerminalLayout.ts","../src/ui/init/Profile.tsx","../src/ui/init/InitApp.tsx"],"names":["snapshotPreWriteMtime","targetFile","statSync","mtimeMs","pollForWorkspaceJsonUpdate","preMtime","options","intervalMs","timeoutMs","cancelled","deadline","Date","now","mtime","Promise","resolve","setTimeout","writeVrekoInitConfig","repoPath","profile","vrekoDir","join","configPath","existsSync","mkdirSync","recursive","config","protectionLevel","recommendedConfig","snapshotFrequency","projections","docs","approvedFiles","writeFileSync","JSON","stringify","capitalize","s","charAt","toUpperCase","slice","totalWatchCount","targets","reduce","t","Math","max","fileCount","delay","ms","Activation","process","cwd","force","exit","useApp","stage","setStage","useState","checks","setChecks","label","status","updateCheck","index","detail","prev","map","c","i","useEffect","run","step1Connected","isDaemonConnected","connectToDaemon","execFileSync","stdio","timeout","client","getDaemonClient","call","workspace","written","e","msg","Error","message","String","console","warn","getDaemonStatus","connected","uptimeMin","uptime","floor","hasVreko","useInput","_input","key","answer","toLowerCase","optedIn","return","saveBenchmarkOptIn","then","isActive","watchCount","watchTargets","patternCount","insights","length","lockedInsights","fragileFile","topFragileFile","Box","flexDirection","borderStyle","padding","_jsx","Text","bold","color","_jsxs","marginTop","BRAND_COLORS","primary","overallRisk","dimColor","minHeight","filter","check","icon","Consent","onAccept","declined","setDeclined","input","escape","width","gap","detectRepoInfo","push","pkgCount","readdirSync","withFileTypes","d","isDirectory","name","acc","aiTools","aiDirCandidates","path","count","execSync","encoding","trim","Detection","onReady","detected","forEach","startsWith","undefined","_Fragment","NULL_PROFILE","confidence","recoveryRisk","changeVolatility","workflowFragility","secondary","complexity","collaboration","aiExposure","structuralRisk","topDrivers","enabledFeatures","topFragileFiles","coChange","fragility","useAnalysis","onComplete","minDisplayMs","done","setDone","errored","setErrored","setProfile","hasStarted","useRef","startTimeRef","current","runScan","runInitScan","result","resolved","elapsed","catch","useKeyboard","onEnter","onEscape","onArrowRight","onArrowLeft","onArrowUp","onArrowDown","enabled","rightArrow","leftArrow","upArrow","downArrow","announce","_message","priority","prioritizeInsights","sort","a","b","type","severityOrder","critical","warning","notable","info","severity","PAGE_SIZE","Insights","onContinue","onCustomize","currentPage","setCurrentPage","sorted","maxPage","p","locked","visibleInsights","shownEnd","insight","marginBottom","paddingRight","observation","whyItMatters","comparison","whatWeWillDo","id","teaser","requirement","unlockCondition","days","LOGO_FULL","Logo","stdout","useStdout","columns","useTerminalLayout","rows","isWide","canShowFullLogo","riskLabel","score","renderBar","filled","round","empty","repeat","ProfileMetrics","topDriver","Profile","flexShrink","flexGrow","MIN_SCAN_DISPLAY_MS","ScanningFrame","statusLabel","FRAME_ENABLED_MAP","VIRGIN","detection","scanning","consent","activation","NEW_WORKSPACE","COLD_RETURN","WARM_RETURN","HOT_RECONNECT","isFrameEnabled","frame","InitApp","pathArg","initProfile","handleNextStage","useCallback","allStages","enabledStages","currentIndex","indexOf","nextStage","handlePrevStage","prevStage","isGitRepo","handleScanComplete"],"mappings":"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","file":"InitApp-MZHXC2EV.js","sourcesContent":["/**\n * Testable helpers extracted from the Activation component.\n *\n * These functions contain the core imperative logic that historically lived\n * inside the useEffect `run()` closure - inaccessible to unit tests. By\n * isolating them here we can write deterministic tests against the exact\n * code paths that run during `vr init`, preventing the class of bugs where\n * the TUI reports success but the files on disk tell a different story.\n *\n * Covered failure modes:\n * - Poll exits on existsSync (file pre-exists) → mtime-based poll instead\n * - config.json never written in TUI path → writeVrekoInitConfig\n * - Poll timeout too short for large repos → configurable, default 45 s\n */\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface PollOptions {\n\t/** Milliseconds between stat() calls. Default 500. */\n\tintervalMs?: number;\n\t/** Total milliseconds before giving up. Default 45 000 (init-scan on large repos). */\n\ttimeoutMs?: number;\n\t/** Return true to abort the poll early (e.g. React cleanup). */\n\tcancelled?: () => boolean;\n}\n\n// ── Snapshot ───────────────────────────────────────────────────────────────\n\n/**\n * Read the current mtime of `targetFile` before triggering an async write.\n * Returns `null` if the file does not yet exist (first init).\n *\n * Call this BEFORE firing any IPC that will cause the file to be written so\n * the subsequent poll can distinguish \"file appeared\" from \"file was updated\".\n */\nexport function snapshotPreWriteMtime(targetFile: string): number | null {\n\ttry {\n\t\treturn statSync(targetFile).mtimeMs;\n\t} catch {\n\t\treturn null; // file doesn't exist yet - first init\n\t}\n}\n\n// ── Poll ───────────────────────────────────────────────────────────────────\n\n/**\n * Poll `targetFile` until its mtime advances past `preMtime`.\n *\n * Returns `true` when a new write is detected, `false` on timeout or\n * cancellation. Uses `statSync` - NOT `existsSync` - so a pre-existing file\n * from a prior init is correctly treated as \"not yet written\" until the daemon\n * updates it.\n *\n * This is the regression guard for the existsSync bug: if a caller replaces\n * this function with an existsSync check, the unit tests in\n * activation-helpers.test.ts will fail immediately.\n */\nexport async function pollForWorkspaceJsonUpdate(\n\ttargetFile: string,\n\tpreMtime: number | null,\n\toptions: PollOptions = {},\n): Promise<boolean> {\n\tconst { intervalMs = 500, timeoutMs = 45_000, cancelled = () => false } = options;\n\tconst deadline = Date.now() + timeoutMs;\n\n\twhile (Date.now() < deadline) {\n\t\tif (cancelled()) return false;\n\t\ttry {\n\t\t\tconst mtime = statSync(targetFile).mtimeMs;\n\t\t\t// preMtime null → file is new (first init), any read counts as written\n\t\t\t// preMtime set → file existed; only accept a strictly newer mtime\n\t\t\tif (preMtime === null || mtime > preMtime) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} catch {\n\t\t\t// File not yet written - keep polling\n\t\t}\n\t\tawait new Promise<void>((resolve) => setTimeout(resolve, intervalMs));\n\t}\n\treturn false;\n}\n\n// ── Config write ───────────────────────────────────────────────────────────\n\n/**\n * Write `.vreko/config.json` from the scan profile.\n *\n * The TUI path (interactive `vr init`) skips `init-core.ts` entirely, so\n * without this function the config file is never created. The function is\n * idempotent: if the file already exists it is left untouched so a re-init\n * does not overwrite user edits.\n *\n * This is the regression guard for the \"Config written to .vreko/config.json\"\n * TUI claim that was previously a hardcoded lie.\n */\nexport function writeVrekoInitConfig(repoPath: string, profile: RecoveryRiskProfile): void {\n\tconst vrekoDir = join(repoPath, \".vreko\");\n\tconst configPath = join(vrekoDir, \"config.json\");\n\n\t// Idempotent - respect any existing config (user may have customised it).\n\tif (existsSync(configPath)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tmkdirSync(vrekoDir, { recursive: true });\n\t\tconst config = {\n\t\t\tprotectionLevel: profile.recommendedConfig.protectionLevel,\n\t\t\tsnapshotFrequency: profile.recommendedConfig.snapshotFrequency,\n\t\t\tprojections: { docs: { approvedFiles: [] } },\n\t\t};\n\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n\t} catch {\n\t\t// Non-fatal - `vr doctor` can self-heal on the next run.\n\t}\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { RecoveryRiskProfile, WatchTarget } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { useEffect, useState } from \"react\";\nimport { connectToDaemon, getDaemonClient, getDaemonStatus, isDaemonConnected } from \"../../services/service-client.js\";\nimport { saveBenchmarkOptIn } from \"../../services/vreko-dir.js\";\nimport { BRAND_COLORS } from \"../../ui/theme.js\";\nimport { pollForWorkspaceJsonUpdate, snapshotPreWriteMtime, writeVrekoInitConfig } from \"./activation-helpers.js\";\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction totalWatchCount(targets: WatchTarget[]): number {\n\treturn targets.reduce((s, t) => s + Math.max(t.fileCount, 1), 0);\n}\n\nfunction delay(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\ninterface ActivationProps {\n\tforce?: boolean;\n\tprofile: RecoveryRiskProfile;\n\trepoPath?: string;\n}\n\ntype ServiceStage = \"service\" | \"done\";\ntype CheckStatus = \"pending\" | \"running\" | \"done\" | \"error\";\n\ninterface DaemonCheck {\n\tlabel: string;\n\tstatus: CheckStatus;\n\tdetail?: string;\n}\n\nexport function Activation({ profile, repoPath = process.cwd(), force }: ActivationProps) {\n\tconst { exit } = useApp();\n\tconst [stage, setStage] = useState<ServiceStage>(\"service\");\n\n\tconst [checks, setChecks] = useState<DaemonCheck[]>([\n\t\t{ label: \"Connecting to service\", status: \"pending\" },\n\t\t{ label: \"Verifying workspace\", status: \"pending\" },\n\t\t{ label: \"Checking file watcher\", status: \"pending\" },\n\t\t{ label: \"Loading intelligence\", status: \"pending\" },\n\t\t{ label: \"Writing workspace.json\", status: \"pending\" },\n\t]);\n\n\tconst updateCheck = (index: number, status: CheckStatus, detail?: string) => {\n\t\tsetChecks((prev) => prev.map((c, i) => (i === index ? { ...c, status, detail } : c)));\n\t};\n\n\t// Service startup sequence\n\tuseEffect(() => {\n\t\tif (stage !== \"service\") {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\n\t\tasync function run() {\n\t\t\t// Step 1: Connect to service\n\t\t\tupdateCheck(0, \"running\");\n\t\t\tlet step1Connected = false;\n\t\t\ttry {\n\t\t\t\tif (!isDaemonConnected()) {\n\t\t\t\t\tawait connectToDaemon();\n\t\t\t\t}\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstep1Connected = true;\n\t\t\t\tupdateCheck(0, \"done\");\n\t\t\t} catch {\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Daemon not running - attempt to start it\n\t\t\t\ttry {\n\t\t\t\t\tconst { execFileSync } = await import(\"node:child_process\");\n\t\t\t\t\texecFileSync(\"vreko\", [\"service\", \"start\", \"--service\"], {\n\t\t\t\t\t\tstdio: \"pipe\",\n\t\t\t\t\t\ttimeout: 10000,\n\t\t\t\t\t});\n\t\t\t\t\t// Give daemon time to bind\n\t\t\t\t\tawait delay(1500);\n\t\t\t\t\tawait connectToDaemon();\n\t\t\t\t\tif (cancelled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstep1Connected = true;\n\t\t\t\t\tupdateCheck(0, \"done\");\n\t\t\t\t} catch {\n\t\t\t\t\t// Start failed - continue with degraded mode, already shown below\n\t\t\t\t}\n\t\t\t\tif (!step1Connected) {\n\t\t\t\t\tif (cancelled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tupdateCheck(0, \"error\", \"Failed to connect - start service with: vr service start\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Write .vreko/config.json - the TUI path never calls init-core, so it\n\t\t\t// must be written here. See activation-helpers.ts: writeVrekoInitConfig.\n\t\t\twriteVrekoInitConfig(repoPath, profile);\n\n\t\t\t// Write agents.workspace.json - non-fatal, shown as step 5.\n\t\t\t// The daemon runs a full init-scan asynchronously (git log + analysis),\n\t\t\t// which can take 20-45 s on large repos. We snapshot the file's mtime\n\t\t\t// BEFORE triggering via snapshotPreWriteMtime, then poll via\n\t\t\t// pollForWorkspaceJsonUpdate until the mtime advances - detecting an\n\t\t\t// actual new write, not just the file's existence from a prior init.\n\t\t\t// See activation-helpers.ts for the tested implementation.\n\t\t\tif (step1Connected) {\n\t\t\t\tupdateCheck(4, \"running\");\n\t\t\t\ttry {\n\t\t\t\t\tconst client = getDaemonClient();\n\t\t\t\t\tif (client) {\n\t\t\t\t\t\tconst targetFile = join(repoPath, \".agents\", \"workspace.json\");\n\t\t\t\t\t\tconst preMtime = snapshotPreWriteMtime(targetFile);\n\n\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/trigger-workspace-json-write\", {\n\t\t\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait client.call<{ triggered: boolean }>(\"workspace/write-from-scan-profile\", {\n\t\t\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t\t\t\t...(force && { force: true }),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst written = await pollForWorkspaceJsonUpdate(targetFile, preMtime, {\n\t\t\t\t\t\t\tcancelled: () => cancelled,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (written) {\n\t\t\t\t\t\t\tupdateCheck(4, \"done\", \"Baseline written to .agents/workspace.json\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tupdateCheck(4, \"error\", \"Write in progress - will complete in background\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdateCheck(4, \"error\", \"No daemon client - will write on first session\");\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst msg = e instanceof Error ? e.message : String(e);\n\t\t\t\t\tconsole.warn(`[vreko init] workspace.json write failed (non-fatal): ${msg}`);\n\t\t\t\t\tupdateCheck(4, \"error\", \"Write deferred - will complete on first session\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Step 2: Get service status\n\t\t\tupdateCheck(1, \"running\");\n\t\t\ttry {\n\t\t\t\tconst status = await getDaemonStatus();\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (status.connected) {\n\t\t\t\t\tconst uptimeMin = status.uptime ? Math.floor(status.uptime / 60000) : 0;\n\t\t\t\t\tupdateCheck(1, \"done\", `Workspace registered${uptimeMin > 0 ? ` (service up ${uptimeMin}m)` : \"\"}`);\n\t\t\t\t} else {\n\t\t\t\t\tupdateCheck(1, \"error\", \"Service not responding\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (cancelled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateCheck(1, \"done\", \"Workspace registered\");\n\t\t\t}\n\n\t\t\tawait delay(200);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Step 3: Check file watcher\n\t\t\tupdateCheck(2, \"running\");\n\t\t\tawait delay(100);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst hasVreko = existsSync(`${repoPath}/.vreko`);\n\t\t\tupdateCheck(2, \"done\", hasVreko ? \"File watcher active\" : \"File watcher starting\");\n\n\t\t\tawait delay(200);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Step 4: Intelligence seeded\n\t\t\tupdateCheck(3, \"running\");\n\t\t\tawait delay(150);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateCheck(3, \"done\", \"Intelligence ready\");\n\n\t\t\tawait delay(400);\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetStage(\"done\");\n\t\t}\n\n\t\trun();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [stage, repoPath]);\n\n\t// Benchmark opt-in handler (done stage)\n\tuseInput(\n\t\t(_input, key) => {\n\t\t\tif (stage !== \"done\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst answer = _input.toLowerCase();\n\t\t\tlet optedIn: boolean;\n\n\t\t\tif (answer === \"y\") {\n\t\t\t\toptedIn = true;\n\t\t\t} else if (answer === \"n\") {\n\t\t\t\toptedIn = false;\n\t\t\t} else if (key.return) {\n\t\t\t\toptedIn = false;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsaveBenchmarkOptIn(optedIn).then(() => {\n\t\t\t\texit();\n\t\t\t});\n\t\t},\n\t\t{ isActive: stage === \"done\" },\n\t);\n\n\tconst watchCount = totalWatchCount(profile.recommendedConfig.watchTargets);\n\tconst patternCount = profile.insights.length + profile.lockedInsights.length;\n\tconst fragileFile = profile.topFragileFile || \"your most-changed file\";\n\n\tif (stage === \"done\") {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t\t<Text bold color=\"green\">\n\t\t\t\t\tVreko is watching your codebase.\n\t\t\t\t</Text>\n\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{` Protection: ${capitalize(profile.recommendedConfig.protectionLevel)} · Watching ${watchCount} target${watchCount !== 1 ? \"s\" : \"\"}`}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{` Snapshot frequency: ${capitalize(profile.recommendedConfig.snapshotFrequency)} (risk-adaptive)`}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t{\" Config written to .vreko/config.json\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1} borderStyle=\"single\" padding={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>Try it now:</Text>\n\t\t\t\t\t<Text />\n\t\t\t\t\t<Text color=\"cyan\">\n\t\t\t\t\t\t{'$ echo \"test\" >> '}\n\t\t\t\t\t\t{fragileFile}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text />\n\t\t\t\t\t<Text>Vreko will catch the change to your most fragile</Text>\n\t\t\t\t\t<Text>file in real time.</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\tRecovery Risk: {capitalize(profile.overallRisk)}\n\t\t\t\t\t\t{\" · \"}Protection: {capitalize(profile.recommendedConfig.protectionLevel)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{watchCount} target{watchCount !== 1 ? \"s\" : \"\"} watched\n\t\t\t\t\t\t{\" · \"}\n\t\t\t\t\t\t{patternCount} patterns seeded\n\t\t\t\t\t\t{\" · \"}\n\t\t\t\t\t\t{profile.lockedInsights.length} insight unlocking\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text bold>\n\t\t\t\t\t\t{\"Vreko is active. Run \"}\n\t\t\t\t\t\t<Text color=\"cyan\">vr status</Text>\n\t\t\t\t\t\t{\" anytime.\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text dimColor>Run `vr status` anytime. Your code stays local.</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Box marginTop={1}>\n\t\t\t\t\t<Text>Share anonymous benchmarks to improve comparisons? [y/N]</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\t// Service startup stage\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Text>Starting Vreko service...</Text>\n\t\t\t<Box marginTop={1} flexDirection=\"column\" minHeight={4}>\n\t\t\t\t{checks\n\t\t\t\t\t.filter((check) => check.status !== \"pending\")\n\t\t\t\t\t.map((check, i) => {\n\t\t\t\t\t\tconst icon = check.status === \"done\" ? \"✓\" : check.status === \"error\" ? \"⚠\" : \"…\";\n\t\t\t\t\t\tconst color =\n\t\t\t\t\t\t\tcheck.status === \"done\"\n\t\t\t\t\t\t\t\t? BRAND_COLORS.primary\n\t\t\t\t\t\t\t\t: check.status === \"error\"\n\t\t\t\t\t\t\t\t\t? \"yellow\"\n\t\t\t\t\t\t\t\t\t: \"cyan\";\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Text key={i} color={color}>\n\t\t\t\t\t\t\t\t{icon} {check.label}\n\t\t\t\t\t\t\t\t{check.detail ? ` - ${check.detail}` : \"\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","/**\n * Consent stage for the vreko init TUI (D-14 / G-01)\n *\n * Shows data-collection notice before activation. User must explicitly\n * accept or decline. Decline exits the TUI without initializing.\n */\n\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { useState } from \"react\";\nimport { BRAND_COLORS } from \"../../ui/theme.js\";\n\ninterface ConsentProps {\n\tonAccept: () => void;\n}\n\nexport function Consent({ onAccept }: ConsentProps) {\n\tconst { exit } = useApp();\n\tconst [declined, setDeclined] = useState(false);\n\n\tuseInput((input, key) => {\n\t\tif (key.return || input === \"y\" || input === \"Y\") {\n\t\t\tonAccept();\n\t\t} else if (input === \"n\" || input === \"N\" || key.escape) {\n\t\t\tsetDeclined(true);\n\t\t\tsetTimeout(() => exit(), 300);\n\t\t}\n\t});\n\n\tif (declined) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" padding={1}>\n\t\t\t\t<Text color=\"yellow\">Setup cancelled. No data was collected.</Text>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1} width={78}>\n\t\t\t<Text bold color={BRAND_COLORS.primary}>\n\t\t\t\tData Collection Notice\n\t\t\t</Text>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\" gap={0}>\n\t\t\t\t<Text>Vreko collects the following to power its intelligence features:</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>{\" ✓ \"}Session metadata (start/end times, file counts, risk scores)</Text>\n\t\t\t\t\t<Text>{\" ✓ \"}Git commit hashes and change attribution</Text>\n\t\t\t\t\t<Text>{\" ✓ \"}Rollback events and AI tool attribution</Text>\n\t\t\t\t</Box>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text color=\"green\">{\" ✗ File contents never leave your device\"}</Text>\n\t\t\t\t\t<Text color=\"green\">{\" ✗ Source code is never read or transmitted\"}</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text dimColor>Data stays local by default. Cloud sync (opt-in) transmits metadata only.</Text>\n\t\t\t\t<Text dimColor>{\"Run `vreko purge` at any time to delete all local data.\"}</Text>\n\t\t\t\t<Text dimColor>{\"Privacy policy: https://vreko.dev/privacy\"}</Text>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"Press \"}\n\t\t\t\t\t<Text bold color=\"green\">\n\t\t\t\t\t\tY / Enter\n\t\t\t\t\t</Text>\n\t\t\t\t\t{\" to accept · \"}\n\t\t\t\t\t<Text bold color=\"red\">\n\t\t\t\t\t\tN / ESC\n\t\t\t\t\t</Text>\n\t\t\t\t\t{\" to decline\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { execSync } from \"node:child_process\";\nimport { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useEffect, useState } from \"react\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\ninterface DetectionProps {\n\trepoPath?: string;\n\tonReady: () => void;\n}\n\nfunction detectRepoInfo(repoPath: string): string[] {\n\tconst checks: string[] = [];\n\n\t// Git detection\n\tif (existsSync(join(repoPath, \".git\"))) {\n\t\tchecks.push(\"✓ Git repository found\");\n\t} else {\n\t\tchecks.push(\"⚠ No git repository found - some features unavailable\");\n\t}\n\n\t// Package manager / monorepo detection\n\tif (existsSync(join(repoPath, \"pnpm-workspace.yaml\"))) {\n\t\tconst pkgCount = readdirSync(repoPath, { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory() && (d.name === \"packages\" || d.name === \"apps\"))\n\t\t\t.reduce((acc) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tacc +\n\t\t\t\t\t\treaddirSync(join(repoPath, \"packages\"), { withFileTypes: true }).filter((d) => d.isDirectory())\n\t\t\t\t\t\t\t.length +\n\t\t\t\t\t\treaddirSync(join(repoPath, \"apps\"), { withFileTypes: true }).filter((d) => d.isDirectory())\n\t\t\t\t\t\t\t.length\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\t\t\t}, 0);\n\t\tchecks.push(`✓ pnpm workspace monorepo${pkgCount > 0 ? ` (${pkgCount} packages)` : \"\"}`);\n\t} else if (existsSync(join(repoPath, \"yarn.lock\"))) {\n\t\tchecks.push(\"✓ Yarn workspace detected\");\n\t} else if (existsSync(join(repoPath, \"package.json\"))) {\n\t\tchecks.push(\"✓ Node.js project detected\");\n\t}\n\n\t// Framework detection\n\tif (existsSync(join(repoPath, \"turbo.json\"))) {\n\t\tchecks.push(\"✓ Turborepo build system\");\n\t} else if (existsSync(join(repoPath, \"nx.json\"))) {\n\t\tchecks.push(\"✓ Nx workspace\");\n\t}\n\n\tif (existsSync(join(repoPath, \"next.config.js\")) || existsSync(join(repoPath, \"next.config.ts\"))) {\n\t\tchecks.push(\"✓ Next.js application\");\n\t}\n\n\t// AI tool detection - use statSync to confirm directory (not just existence)\n\tconst aiTools: string[] = [];\n\tconst aiDirCandidates: Array<{ path: string; name: string }> = [\n\t\t{ path: join(repoPath, \".cursor\"), name: \"Cursor\" },\n\t\t{ path: join(repoPath, \".github\", \"copilot\"), name: \"GitHub Copilot\" },\n\t\t{ path: join(repoPath, \".claude\"), name: \"Claude Code\" },\n\t\t{ path: join(repoPath, \".windsurf\"), name: \"Windsurf\" },\n\t];\n\tfor (const { path, name } of aiDirCandidates) {\n\t\ttry {\n\t\t\tif (existsSync(path) && statSync(path).isDirectory()) {\n\t\t\t\taiTools.push(name);\n\t\t\t}\n\t\t} catch {\n\t\t\t/* non-critical */\n\t\t}\n\t}\n\tif (aiTools.length > 0) {\n\t\tchecks.push(`✓ AI tools detected: ${aiTools.join(\", \")}`);\n\t}\n\n\t// Commit count (rough indicator of repo maturity)\n\ttry {\n\t\tconst count = execSync(\"git rev-list --count HEAD\", {\n\t\t\tcwd: repoPath,\n\t\t\tencoding: \"utf-8\",\n\t\t\ttimeout: 3000,\n\t\t\tstdio: [\"pipe\", \"pipe\", \"ignore\"],\n\t\t}).trim();\n\t\tif (count) {\n\t\t\tchecks.push(`✓ ${count} commits in history`);\n\t\t}\n\t} catch {\n\t\t/* non-critical */\n\t}\n\n\treturn checks.slice(0, 5); // Show at most 5 checks\n}\n\nexport function Detection({ repoPath = process.cwd(), onReady }: DetectionProps) {\n\tconst [checks, setChecks] = useState<string[]>([]);\n\n\t// Trigger scanning on ENTER\n\tuseInput((_input, key) => {\n\t\tif (key.return) {\n\t\t\tonReady();\n\t\t}\n\t});\n\n\tuseEffect(() => {\n\t\tconst detected = detectRepoInfo(repoPath);\n\t\tdetected.forEach((check, index) => {\n\t\t\tsetTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tsetChecks((prev) => [...prev, check]);\n\t\t\t\t},\n\t\t\t\t(index + 1) * 200,\n\t\t\t);\n\t\t});\n\t}, [repoPath]);\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text>Detecting repository...</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\" minHeight={4}>\n\t\t\t\t\t{checks.map((msg, i) => (\n\t\t\t\t\t\t<Text key={i} color={msg.startsWith(\"⚠\") ? \"yellow\" : undefined}>\n\t\t\t\t\t\t\t{msg.startsWith(\"⚠\") ? (\n\t\t\t\t\t\t\t\tmsg\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Text color={BRAND_COLORS.primary}>✓</Text>\n\t\t\t\t\t\t\t\t\t{msg.slice(1)}\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text dimColor>Analyzing behavioral patterns - no code will be read.</Text>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>Press [ENTER] to scan your repository →</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { getDaemonClient, isDaemonConnected } from \"../../../services/service-client.js\";\n\nexport interface UseAnalysisResult {\n\tdone: boolean;\n\terrored: boolean;\n\tprofile: RecoveryRiskProfile | null;\n}\n\n/**\n * Minimal profile returned when daemon scan returns null (cache hit / concurrent scan).\n * Downstream stages handle this gracefully; the daemon has already emitted scan.complete\n * via the event bus. This avoids crashing the TUI when a second concurrent init runs.\n */\nconst NULL_PROFILE: RecoveryRiskProfile = {\n\toverallRisk: \"low\",\n\tconfidence: 0,\n\tprimary: { recoveryRisk: 0, changeVolatility: 0, workflowFragility: 0 },\n\tsecondary: { complexity: 0, collaboration: 0, aiExposure: 0, structuralRisk: 0 },\n\ttopDrivers: [],\n\tinsights: [],\n\tlockedInsights: [],\n\trecommendedConfig: {\n\t\tprotectionLevel: \"standard\",\n\t\tsnapshotFrequency: \"balanced\",\n\t\twatchTargets: [],\n\t\tenabledFeatures: [],\n\t},\n\ttopFragileFile: null,\n\ttopFragileFiles: [],\n\tcoChange: [],\n\tfragility: [],\n};\n\n/**\n * Hook that runs the init scan analysis for a given repo path.\n * Extracted from Scanning.tsx for reuse and testability.\n *\n * Scan path:\n * 1. If daemon is connected: call workspace/run-init-scan via IPC (ARCH-01 compliant).\n * 2. If daemon is NOT connected (VIRGIN/NEW_WORKSPACE - daemon not yet started during\n * the Scanning stage): fall back to direct runInitScan as a one-time exception.\n * This fallback is intentionally isolated to a dynamic import in this hook.\n *\n * ARCH-01-PENDING: Remove direct fallback once the Scanning stage runs post-Activation\n * (tracked as LIN-0000). The fallback path exists solely for the pre-Activation window.\n */\nexport function useAnalysis(\n\trepoPath: string,\n\tonComplete: (profile: RecoveryRiskProfile) => void,\n\tminDisplayMs = 0,\n): UseAnalysisResult {\n\tconst [done, setDone] = useState(false);\n\tconst [errored, setErrored] = useState(false);\n\tconst [profile, setProfile] = useState<RecoveryRiskProfile | null>(null);\n\tconst hasStarted = useRef(false);\n\tconst startTimeRef = useRef(Date.now());\n\n\tuseEffect(() => {\n\t\tif (hasStarted.current) {\n\t\t\treturn;\n\t\t}\n\t\thasStarted.current = true;\n\n\t\tconst runScan = async (): Promise<RecoveryRiskProfile | null> => {\n\t\t\t// Try IPC first - preferred path when daemon is already running (COLD_RETURN profile)\n\t\t\tif (isDaemonConnected()) {\n\t\t\t\tconst client = getDaemonClient();\n\t\t\t\treturn client.call<RecoveryRiskProfile | null>(\"workspace/run-init-scan\", {\n\t\t\t\t\tworkspace: repoPath,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ARCH-01-PENDING: fallback for pre-Activation daemon start\n\t\t\t// Daemon is not yet running (VIRGIN/NEW_WORKSPACE). Use direct import as a\n\t\t\t// one-time exception. Dynamic import minimises violation surface area.\n\t\t\t// Remove this branch once Scanning stage is guaranteed to run post-Activation (LIN-0000).\n\t\t\tconst { runInitScan } = await import(\"@vreko/intelligence/init-scan\");\n\t\t\treturn runInitScan({ repoPath });\n\t\t};\n\n\t\trunScan()\n\t\t\t.then((result) => {\n\t\t\t\t// null = cache hit or concurrent scan in progress; treat as NULL_PROFILE to avoid crash\n\t\t\t\tconst resolved: RecoveryRiskProfile = result ?? NULL_PROFILE;\n\t\t\t\tsetDone(true);\n\t\t\t\tsetProfile(resolved);\n\t\t\t\tconst elapsed = Date.now() - startTimeRef.current;\n\t\t\t\tconst delay = Math.max(500, minDisplayMs - elapsed);\n\t\t\t\tsetTimeout(() => onComplete(resolved), delay);\n\t\t\t})\n\t\t\t.catch(() => setErrored(true));\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [repoPath]);\n\n\treturn { done, errored, profile };\n}\n","/**\n * Keyboard Navigation Hook for Init TUI\n *\n * Provides accessible keyboard controls:\n * - Enter: Confirm/proceed to next stage\n * - Escape: Cancel/go back\n * - Arrow keys: Navigation within forms\n *\n * @module ui/init/hooks/useKeyboard\n */\n\nimport { useInput } from \"ink\";\n\nexport interface UseKeyboardOptions {\n\t/** Called when Enter is pressed */\n\tonEnter?: () => void;\n\t/** Called when Escape is pressed */\n\tonEscape?: () => void;\n\t/** Called when Arrow Right is pressed */\n\tonArrowRight?: () => void;\n\t/** Called when Arrow Left is pressed */\n\tonArrowLeft?: () => void;\n\t/** Called when Arrow Up is pressed */\n\tonArrowUp?: () => void;\n\t/** Called when Arrow Down is pressed */\n\tonArrowDown?: () => void;\n\t/** Enable keyboard listeners (default: true) */\n\tenabled?: boolean;\n}\n\n/**\n * Hook for keyboard navigation in Ink TUI components.\n * Uses Ink's useInput so stdin ownership stays with Ink throughout the lifecycle.\n */\nexport function useKeyboard(options: UseKeyboardOptions): void {\n\tconst { onEnter, onEscape, onArrowRight, onArrowLeft, onArrowUp, onArrowDown, enabled = true } = options;\n\n\tuseInput(\n\t\t(_input, key) => {\n\t\t\tif (key.return) {\n\t\t\t\tonEnter?.();\n\t\t\t} else if (key.escape) {\n\t\t\t\tonEscape?.();\n\t\t\t} else if (key.rightArrow) {\n\t\t\t\tonArrowRight?.();\n\t\t\t} else if (key.leftArrow) {\n\t\t\t\tonArrowLeft?.();\n\t\t\t} else if (key.upArrow) {\n\t\t\t\tonArrowUp?.();\n\t\t\t} else if (key.downArrow) {\n\t\t\t\tonArrowDown?.();\n\t\t\t}\n\t\t},\n\t\t{ isActive: enabled },\n\t);\n}\n\n/**\n * Screen reader announcement helper\n *\n * Announces status changes to screen readers via ARIA live regions.\n * Falls back to console.log in environments without screen reader support.\n */\nexport function announce(_message: string, priority: \"polite\" | \"assertive\" = \"polite\"): void {\n\t// In a real Ink app, this would use a live region component\n\t// For now, we use the speakable log approach\n\tif (priority === \"assertive\") {\n\t\t// intentionally empty\n\t} else {\n\t\t// intentionally empty\n\t}\n}\n","import type { RecoveryRiskProfile, WatchTarget } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useState } from \"react\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction totalWatchCount(targets: WatchTarget[]): number {\n\treturn targets.reduce((s, t) => s + Math.max(t.fileCount, 1), 0);\n}\n\ntype InsightSeverity = \"critical\" | \"warning\" | \"notable\" | \"info\";\n\ninterface Insight {\n\tid: string;\n\tseverity: InsightSeverity;\n\tobservation: string;\n\twhyItMatters: string;\n\twhatWeWillDo: string;\n\tcomparison?: string;\n\ttype?: string;\n}\n\n/**\n * Sort insights by priority:\n * 1. co-change relationships first\n * 2. blast-radius next\n * 3. recovery patterns\n * 4. severity as tiebreaker (critical > warning > info)\n */\nfunction prioritizeInsights(insights: Insight[]): Insight[] {\n\treturn [...insights].sort((a, b) => {\n\t\t// Type-based ordering\n\t\tif (a.type === \"co-change\" && b.type !== \"co-change\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"co-change\" && a.type !== \"co-change\") {\n\t\t\treturn 1;\n\t\t}\n\t\tif (a.type === \"blast-radius\" && b.type !== \"blast-radius\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"blast-radius\" && a.type !== \"blast-radius\") {\n\t\t\treturn 1;\n\t\t}\n\t\tif (a.type === \"recovery\" && b.type !== \"recovery\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (b.type === \"recovery\" && a.type !== \"recovery\") {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Severity tiebreaker\n\t\tconst severityOrder: Record<InsightSeverity, number> = { critical: 0, warning: 1, notable: 2, info: 3 };\n\t\treturn severityOrder[a.severity] - severityOrder[b.severity];\n\t});\n}\n\nconst PAGE_SIZE = 3;\n\nexport function Insights({\n\tprofile,\n\tonContinue,\n\tonCustomize,\n}: {\n\tprofile: RecoveryRiskProfile;\n\tonContinue: () => void;\n\tonCustomize?: () => void;\n}) {\n\tconst [currentPage, setCurrentPage] = useState(0);\n\n\tconst { insights, lockedInsights, recommendedConfig } = profile;\n\tconst sorted = prioritizeInsights(insights as Insight[]);\n\tconst maxPage = Math.max(0, sorted.length - PAGE_SIZE);\n\n\tuseInput((input, key) => {\n\t\tif (key.upArrow && currentPage > 0) {\n\t\t\tsetCurrentPage((p) => p - 1);\n\t\t} else if (key.downArrow && currentPage < maxPage) {\n\t\t\tsetCurrentPage((p) => p + 1);\n\t\t} else if (key.return) {\n\t\t\tonContinue();\n\t\t} else if ((input === \"c\" || input === \"C\") && onCustomize) {\n\t\t\tonCustomize();\n\t\t}\n\t});\n\n\tconst locked = lockedInsights[0];\n\tconst watchCount = totalWatchCount(recommendedConfig.watchTargets);\n\tconst visibleInsights = sorted.slice(currentPage, currentPage + PAGE_SIZE);\n\tconst shownEnd = currentPage + visibleInsights.length;\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Box>\n\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t<Text bold>What We Found</Text>\n\t\t\t\t</Box>\n\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t<Text bold>What We'll Do</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t{visibleInsights.map((insight) => (\n\t\t\t\t\t<Box key={insight.id} marginBottom={1}>\n\t\t\t\t\t\t<Box width=\"50%\" paddingRight={2} flexDirection=\"column\">\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\tinsight.severity === \"critical\"\n\t\t\t\t\t\t\t\t\t\t? \"red\"\n\t\t\t\t\t\t\t\t\t\t: insight.severity === \"warning\" || insight.severity === \"notable\"\n\t\t\t\t\t\t\t\t\t\t\t? \"yellow\"\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{insight.severity === \"info\" ? \"ℹ\" : \"⚠\"} {insight.observation}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text dimColor> {insight.whyItMatters}</Text>\n\t\t\t\t\t\t\t{insight.comparison && (\n\t\t\t\t\t\t\t\t<Text dimColor color=\"cyan\">\n\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t{insight.comparison}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t\t\t<Text>{insight.whatWeWillDo}</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t))}\n\n\t\t\t\t{locked && currentPage === maxPage && (\n\t\t\t\t\t<Box marginBottom={1}>\n\t\t\t\t\t\t<Box width=\"50%\" paddingRight={2} flexDirection=\"column\">\n\t\t\t\t\t\t\t<Text dimColor>┄ {locked.teaser}</Text>\n\t\t\t\t\t\t\t<Text dimColor> {locked.requirement}</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Box width=\"50%\">\n\t\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t\tAvailable after {locked.unlockCondition.days} days of active development.\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t)}\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} borderStyle=\"single\" padding={1} flexDirection=\"column\">\n\t\t\t\t<Text>\n\t\t\t\t\tProtection: {capitalize(recommendedConfig.protectionLevel)}\n\t\t\t\t\t{\" · \"}Watching: {watchCount} target{watchCount !== 1 ? \"s\" : \"\"}\n\t\t\t\t</Text>\n\t\t\t\t<Text>Snapshot Frequency: {capitalize(recommendedConfig.snapshotFrequency)} (risk-adaptive)</Text>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>\n\t\t\t\t\t{\"[ENTER] Accept · \"}\n\t\t\t\t\t{onCustomize ? \"[c] Customize · \" : \"\"}\n\t\t\t\t\t{sorted.length > PAGE_SIZE ? `[↑↓] More insights (${shownEnd}/${sorted.length})` : \"\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { Box, Text, useStdout } from \"ink\";\nimport { BRAND_COLORS } from \"../theme.js\";\n\nconst LOGO_FULL = `██╗ ██╗██████╗ ███████╗██╗ ██╗ ██████╗ \n██║ ██║██╔══██╗██╔════╝██║ ██╔╝██╔═══██╗\n██║ ██║██████╔╝█████╗ █████╔╝ ██║ ██║\n╚██╗ ██╔╝██╔══██╗██╔══╝ ██╔═██╗ ██║ ██║\n ╚████╔╝ ██║ ██║███████╗██║ ██╗╚██████╔╝\n ╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ `;\n\n/**\n * Responsive Vreko logo.\n * - Wide (>=80 cols): full block-letter logo in brand green #4ADE80 // brand-color-allowed\n * - Narrow (<80 cols): compact text fallback\n */\nexport function Logo() {\n\tconst { stdout } = useStdout();\n\tconst columns = stdout.columns ?? 80;\n\n\tif (columns >= 80) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\">\n\t\t\t\t<Text color={BRAND_COLORS.primary}>{LOGO_FULL}</Text>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Text bold color={BRAND_COLORS.primary}>\n\t\t\t\t{\"━━ VREKO ━━\"}\n\t\t\t</Text>\n\t\t</Box>\n\t);\n}\n","import { useStdout } from \"ink\";\n\nexport interface TerminalLayout {\n\t/** True when the terminal is wide enough to use side-by-side layout (>=120 cols) */\n\tisWide: boolean;\n\t/** True when the terminal can show the full block-letter logo (>=80 cols) */\n\tcanShowFullLogo: boolean;\n\tcolumns: number;\n\trows: number;\n}\n\n/**\n * Returns responsive layout flags based on terminal dimensions.\n * - isWide: >=120 cols → side-by-side layout\n * - canShowFullLogo: >=80 cols → full ASCII logo\n */\nexport function useTerminalLayout(): TerminalLayout {\n\tconst { stdout } = useStdout();\n\tconst columns = stdout.columns ?? 80;\n\tconst rows = stdout.rows ?? 24;\n\n\treturn {\n\t\tisWide: columns >= 120,\n\t\tcanShowFullLogo: columns >= 80,\n\t\tcolumns,\n\t\trows,\n\t};\n}\n","import type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text, useInput } from \"ink\";\nimport { BRAND_COLORS } from \"../theme.js\";\nimport { useTerminalLayout } from \"./hooks/useTerminalLayout.js\";\nimport { Logo } from \"./Logo.js\";\n\nfunction riskLabel(score: number): string {\n\tif (score > 75) {\n\t\treturn \"high\";\n\t}\n\tif (score > 50) {\n\t\treturn \"elevated\";\n\t}\n\tif (score > 25) {\n\t\treturn \"moderate\";\n\t}\n\treturn \"low\";\n}\n\n/**\n * Render a 10-char progress bar where each block = 10%.\n * Uses brand green (BRAND_COLORS.primary) for filled portion.\n */\nfunction renderBar(score: number, width = 10): string {\n\tconst filled = Math.round((score / 100) * width);\n\tconst empty = width - filled;\n\treturn \"█\".repeat(filled) + \"░\".repeat(empty);\n}\n\ninterface ProfileMetricsProps {\n\tprofile: RecoveryRiskProfile;\n}\n\nfunction ProfileMetrics({ profile }: ProfileMetricsProps) {\n\tconst topDriver = profile.topDrivers[0];\n\n\treturn (\n\t\t<Box flexDirection=\"column\">\n\t\t\t<Text bold>Your Codebase Intelligence Profile</Text>\n\n\t\t\t<Box marginTop={1} padding={1} borderStyle=\"single\" flexDirection=\"column\">\n\t\t\t\t{/* Primary metrics - always shown, all rounded to integers */}\n\t\t\t\t<Text>\n\t\t\t\t\t{\"CODEBASE HEALTH \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.recoveryRisk)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.recoveryRisk)}% ${riskLabel(profile.primary.recoveryRisk)}`}\n\t\t\t\t</Text>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"CHANGE VOLATILITY \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.changeVolatility)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.changeVolatility)}% ${riskLabel(profile.primary.changeVolatility)}`}\n\t\t\t\t</Text>\n\t\t\t\t<Text>\n\t\t\t\t\t{\"WORKFLOW FRAGILITY \"}\n\t\t\t\t\t<Text color={BRAND_COLORS.primary}>{renderBar(profile.primary.workflowFragility)}</Text>\n\t\t\t\t\t{` ${Math.round(profile.primary.workflowFragility)}% ${riskLabel(profile.primary.workflowFragility)}`}\n\t\t\t\t</Text>\n\n\t\t\t\t<Text color=\"gray\">{\"─\".repeat(55)}</Text>\n\n\t\t\t\t{/* Secondary metrics - gated: only show when meaningful */}\n\t\t\t\t<Box flexDirection=\"column\">\n\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t{\"complexity \"}\n\t\t\t\t\t\t{Math.round(profile.secondary.complexity)}\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{/* Collaboration: hide if solo developer */}\n\t\t\t\t\t{profile.secondary.collaboration > 0 ? (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"collaboration \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.collaboration)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Text dimColor>collaboration Solo developer detected</Text>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* AI Exposure: show placeholder when zero */}\n\t\t\t\t\t{profile.secondary.aiExposure > 0 ? (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"AI exposure \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.aiExposure)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Text dimColor>AI exposure Tracking begins after first session</Text>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Structural risk: hide when zero */}\n\t\t\t\t\t{profile.secondary.structuralRisk > 0 && (\n\t\t\t\t\t\t<Text dimColor>\n\t\t\t\t\t\t\t{\"structural \"}\n\t\t\t\t\t\t\t{Math.round(profile.secondary.structuralRisk)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t{topDriver && <Text>Top driver: {topDriver.label}</Text>}\n\t\t\t\t<Text>\n\t\t\t\t\tConfidence: {profile.confidence >= 0.7 ? \"high\" : profile.confidence >= 0.4 ? \"moderate\" : \"low\"}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nexport function Profile({ profile, onContinue }: { profile: RecoveryRiskProfile; onContinue: () => void }) {\n\tuseInput((_input, key) => {\n\t\tif (key.return) {\n\t\t\tonContinue();\n\t\t}\n\t});\n\n\tconst { isWide } = useTerminalLayout();\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t{/* Wide terminal (>=120 cols): side-by-side logo + metrics */}\n\t\t\t{isWide ? (\n\t\t\t\t<Box>\n\t\t\t\t\t<Box width={45} flexShrink={0}>\n\t\t\t\t\t\t<Logo />\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Box flexGrow={1}>\n\t\t\t\t\t\t<ProfileMetrics profile={profile} />\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t) : (\n\t\t\t\t<ProfileMetrics profile={profile} />\n\t\t\t)}\n\n\t\t\t<Box marginTop={1}>\n\t\t\t\t<Text color={BRAND_COLORS.primary}>Press [ENTER] to see what we found {\"→\"}</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { BootProfileType } from \"@vreko/contracts/local-service\";\nimport type { RecoveryRiskProfile } from \"@vreko/intelligence/init-scan\";\nimport { Box, Text } from \"ink\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Activation } from \"./Activation.js\";\nimport { Consent } from \"./Consent.js\";\nimport { Detection } from \"./Detection.js\";\nimport { useAnalysis } from \"./hooks/useAnalysis.js\";\nimport { announce, useKeyboard } from \"./hooks/useKeyboard.js\";\nimport { Insights } from \"./Insights.js\";\nimport { Logo } from \"./Logo.js\";\nimport { Profile } from \"./Profile.js\";\n\n/** Minimum time to show the scanning frame so it doesn't flash. */\nexport const MIN_SCAN_DISPLAY_MS = 4000;\n\nexport type FrameStage = \"detection\" | \"scanning\" | \"profile\" | \"insights\" | \"consent\" | \"activation\";\n\ninterface ScanningFrameProps {\n\trepoPath: string;\n\tonComplete: (profile: RecoveryRiskProfile) => void;\n}\n\n/** Inner component that owns the scan side-effect via useAnalysis hook. */\nfunction ScanningFrame({ repoPath, onComplete }: ScanningFrameProps) {\n\tconst { done, errored } = useAnalysis(repoPath, onComplete, MIN_SCAN_DISPLAY_MS);\n\tconst statusLabel = done ? \"[██████████] done\" : errored ? \"[ error ]\" : \"[██████░░░░] ...\";\n\n\treturn (\n\t\t<Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n\t\t\t<Text>Scanning your development history...</Text>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text>Reflog Analysis {statusLabel}</Text>\n\t\t\t\t<Text>Commit Patterns {statusLabel}</Text>\n\t\t\t\t<Text>Repo Structure {statusLabel}</Text>\n\t\t\t\t<Text>Dependency Analysis {statusLabel}</Text>\n\t\t\t</Box>\n\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t<Text color=\"green\">{\"🔒\"} Metadata only - file contents are never read</Text>\n\t\t\t\t<Text dimColor>{\"☁\"} Baseline comparison: disabled (offline mode)</Text>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n}\n\nexport interface InitAppOptions {\n\tforce?: boolean;\n\t[key: string]: unknown;\n}\n\n// =============================================================================\n// PROFILE-AWARE FRAME SKIP TABLE (spec §D)\n// =============================================================================\n\nconst FRAME_ENABLED_MAP: Record<BootProfileType, Record<FrameStage, boolean>> = {\n\tVIRGIN: { detection: true, scanning: true, profile: true, insights: true, consent: true, activation: true },\n\tNEW_WORKSPACE: { detection: false, scanning: true, profile: true, insights: true, consent: true, activation: true },\n\tCOLD_RETURN: { detection: false, scanning: true, profile: true, insights: true, consent: false, activation: true },\n\tWARM_RETURN: {\n\t\tdetection: false,\n\t\tscanning: false,\n\t\tprofile: true,\n\t\tinsights: false,\n\t\tconsent: false,\n\t\tactivation: true,\n\t},\n\tHOT_RECONNECT: {\n\t\tdetection: false,\n\t\tscanning: false,\n\t\tprofile: false,\n\t\tinsights: false,\n\t\tconsent: false,\n\t\tactivation: true,\n\t},\n};\n\n/**\n * Returns true if the given frame stage is enabled for the given boot profile.\n * Defaults to COLD_RETURN when profile is undefined (safe default, §J).\n */\nexport function isFrameEnabled(frame: FrameStage, profile: BootProfileType = \"COLD_RETURN\"): boolean {\n\treturn FRAME_ENABLED_MAP[profile]?.[frame] ?? true;\n}\n\nexport function InitApp({\n\tpathArg,\n\toptions,\n\tinitProfile,\n}: {\n\tpathArg?: string;\n\toptions: InitAppOptions;\n\tinitProfile?: BootProfileType; // undefined → COLD_RETURN as safe default (spec §J)\n}) {\n\tconst [stage, setStage] = useState<FrameStage>(\"detection\");\n\tconst [profile, setProfile] = useState<RecoveryRiskProfile | null>(null);\n\n\tconst repoPath = (typeof pathArg === \"string\" && pathArg) || process.cwd();\n\n\t// Keyboard navigation handler\n\tconst handleNextStage = useCallback(() => {\n\t\tconst allStages: FrameStage[] = [\"detection\", \"scanning\", \"profile\", \"insights\", \"consent\", \"activation\"];\n\t\tconst profile = initProfile ?? \"COLD_RETURN\";\n\t\tconst enabledStages = allStages.filter((s) => isFrameEnabled(s, profile));\n\t\tconst currentIndex = enabledStages.indexOf(stage);\n\t\tif (currentIndex < enabledStages.length - 1) {\n\t\t\tconst nextStage = enabledStages[currentIndex + 1];\n\t\t\tsetStage(nextStage);\n\t\t\tannounce(`Proceeding to ${nextStage} stage`, \"polite\");\n\t\t}\n\t}, [stage, initProfile]);\n\n\tconst handlePrevStage = useCallback(() => {\n\t\tconst allStages: FrameStage[] = [\"detection\", \"scanning\", \"profile\", \"insights\", \"consent\", \"activation\"];\n\t\tconst profile = initProfile ?? \"COLD_RETURN\";\n\t\tconst enabledStages = allStages.filter((s) => isFrameEnabled(s, profile));\n\t\tconst currentIndex = enabledStages.indexOf(stage);\n\t\tif (currentIndex > 0) {\n\t\t\tconst prevStage = enabledStages[currentIndex - 1];\n\t\t\tsetStage(prevStage);\n\t\t\tannounce(`Returning to ${prevStage} stage`, \"polite\");\n\t\t}\n\t}, [stage, initProfile]);\n\n\t// Enable keyboard navigation on interactive stages\n\tuseKeyboard({\n\t\tonEnter: handleNextStage,\n\t\tonEscape: () => {\n\t\t\tannounce(\"Cancelling initialization\", \"assertive\");\n\t\t\tprocess.exit(0);\n\t\t},\n\t\tonArrowRight: handleNextStage,\n\t\tonArrowLeft: handlePrevStage,\n\t\tenabled: stage === \"profile\" || stage === \"insights\" || stage === \"activation\",\n\t\t// consent stage manages its own keyboard input via Consent component\n\t});\n\n\t// Announce stage changes for screen readers\n\tuseEffect(() => {\n\t\tannounce(`Vreko initialization: ${stage} stage`, \"polite\");\n\t}, [stage]);\n\n\t// Guard: not a git repository\n\tconst isGitRepo = existsSync(join(repoPath, \".git\"));\n\tif (!isGitRepo) {\n\t\treturn (\n\t\t\t<Box flexDirection=\"column\" padding={1}>\n\t\t\t\t<Text>Vreko requires a Git repository.</Text>\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{\"Initialize one with: \"}\n\t\t\t\t\t\t<Text color=\"cyan\">git init</Text>\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text>\n\t\t\t\t\t\t{\"Then run: \"}\n\t\t\t\t\t\t<Text color=\"cyan\">vr init</Text>\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\tconst handleScanComplete = useCallback((p: RecoveryRiskProfile) => {\n\t\tsetProfile(p);\n\t\tsetStage(\"profile\");\n\t\tannounce(\"Scan complete. Risk profile generated.\", \"polite\");\n\t}, []);\n\n\treturn (\n\t\t<Box flexDirection=\"column\" padding={1} width={80}>\n\t\t\t{/* Logo shown on detection and scanning stages */}\n\t\t\t{(stage === \"detection\" || stage === \"scanning\") && <Logo />}\n\n\t\t\t{stage === \"detection\" && isFrameEnabled(\"detection\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Detection repoPath={repoPath} onReady={() => setStage(\"scanning\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"scanning\" && isFrameEnabled(\"scanning\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<ScanningFrame repoPath={repoPath} onComplete={handleScanComplete} />\n\t\t\t)}\n\n\t\t\t{stage === \"profile\" && profile && isFrameEnabled(\"profile\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Profile profile={profile} onContinue={() => setStage(\"insights\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"insights\" && profile && isFrameEnabled(\"insights\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Insights profile={profile} onContinue={() => setStage(\"consent\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"consent\" && isFrameEnabled(\"consent\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Consent onAccept={() => setStage(\"activation\")} />\n\t\t\t)}\n\n\t\t\t{stage === \"activation\" && profile && isFrameEnabled(\"activation\", initProfile ?? \"COLD_RETURN\") && (\n\t\t\t\t<Activation profile={profile} repoPath={repoPath} force={options.force} />\n\t\t\t)}\n\n\t\t\t{/* Keyboard hints for accessibility */}\n\t\t\t{(stage === \"profile\" || stage === \"insights\" || stage === \"activation\") && (\n\t\t\t\t<Box marginTop={1} flexDirection=\"column\">\n\t\t\t\t\t<Text dimColor>Press Enter or → to continue | ← to go back | ESC to cancel</Text>\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</Box>\n\t);\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cliState } from './chunk-GRMRYWYS.js';
|
|
3
3
|
import { findGitRoot } from './chunk-MWTSOZTM.js';
|
|
4
|
-
import { getDaemonClient, connectToDaemon } from './chunk-
|
|
4
|
+
import { getDaemonClient, connectToDaemon } from './chunk-WJGVEDAC.js';
|
|
5
5
|
import { getServicePidPath } from './chunk-AV5Y3YR6.js';
|
|
6
6
|
import { resolveVrekoBinaryPath, detectAIClients, getVrekoMCPConfig, writeClientConfig } from './chunk-BZ7DRTR7.js';
|
|
7
7
|
import { __name } from './chunk-EWOJGXRX.js';
|
|
@@ -794,7 +794,7 @@ Or, bundled: Ground Truth ships as the headline skill inside \`@vreko/skills\` n
|
|
|
794
794
|
**License:** MIT (methodology); skill file free to distribute
|
|
795
795
|
**Canonical URL:** https://vreko.dev/ground-truth
|
|
796
796
|
`;
|
|
797
|
-
var cliVersion = "3.3.
|
|
797
|
+
var cliVersion = "3.3.5" ;
|
|
798
798
|
function createInitCommand() {
|
|
799
799
|
return new Command("init").description("Bootstrap Vreko for a repository").argument("[path]", "Workspace path (default: current directory)").option("-y, --yes", "Skip confirmation prompts").option("--non-interactive", "Run without prompts (extension/automation)").option("--json", "Output structured JSON result").option("--dry-run", "Show what would be configured").option("--force", "Re-initialize even if already set up").option("--skip-mcp", "Skip MCP configuration").option("--skip-service", "Skip service registration").option("--api-key <key>", "API key for Pro features").option("--dev", "Use local dev mode for MCP").option("--npm", "Use npm/npx mode for MCP").option("-q, --quiet", "Suppress informational output").option("-v, --verbose", "Show detailed detection reasoning").action(async (path, options) => {
|
|
800
800
|
const result = await runInit(path, options);
|
|
@@ -1689,5 +1689,5 @@ function fail(spinner, result, message) {
|
|
|
1689
1689
|
__name(fail, "fail");
|
|
1690
1690
|
|
|
1691
1691
|
export { createHooksCommand, createInitCommand, generateClaudeIntegration };
|
|
1692
|
-
//# sourceMappingURL=chunk-
|
|
1693
|
-
//# sourceMappingURL=chunk-
|
|
1692
|
+
//# sourceMappingURL=chunk-FNSNP635.js.map
|
|
1693
|
+
//# sourceMappingURL=chunk-FNSNP635.js.map
|