@vreko/cli 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +45 -0
  3. package/dist/CeremonyView-LQS7FTMK.js +134 -0
  4. package/dist/CeremonyView-LQS7FTMK.js.map +1 -0
  5. package/dist/InitApp-7K5DTYSW.js +1479 -0
  6. package/dist/InitApp-7K5DTYSW.js.map +1 -0
  7. package/dist/SkippedTestDetector-PJSKSOZR.js +7 -0
  8. package/dist/SkippedTestDetector-PJSKSOZR.js.map +1 -0
  9. package/dist/TuiApp-FX23XQBK.js +8 -0
  10. package/dist/TuiApp-FX23XQBK.js.map +1 -0
  11. package/dist/analysis-ABEO6RTN.js +8 -0
  12. package/dist/analysis-ABEO6RTN.js.map +1 -0
  13. package/dist/auth-XNBEBNPY.js +7669 -0
  14. package/dist/auth-XNBEBNPY.js.map +1 -0
  15. package/dist/ceremony-M7CXVBVA.js +45 -0
  16. package/dist/ceremony-M7CXVBVA.js.map +1 -0
  17. package/dist/chunk-A3QSZJPD.js +3147 -0
  18. package/dist/chunk-A3QSZJPD.js.map +1 -0
  19. package/dist/chunk-ASGZ5B6C.js +3969 -0
  20. package/dist/chunk-ASGZ5B6C.js.map +1 -0
  21. package/dist/chunk-DMXC2JTC.js +58 -0
  22. package/dist/chunk-DMXC2JTC.js.map +1 -0
  23. package/dist/chunk-EEBSK2IH.js +161 -0
  24. package/dist/chunk-EEBSK2IH.js.map +1 -0
  25. package/dist/chunk-EWOJGXRX.js +22 -0
  26. package/dist/chunk-EWOJGXRX.js.map +1 -0
  27. package/dist/chunk-F7GEJLP7.js +2389 -0
  28. package/dist/chunk-F7GEJLP7.js.map +1 -0
  29. package/dist/chunk-GOYL3F4T.js +605 -0
  30. package/dist/chunk-GOYL3F4T.js.map +1 -0
  31. package/dist/chunk-GRMRYWYS.js +17 -0
  32. package/dist/chunk-GRMRYWYS.js.map +1 -0
  33. package/dist/chunk-GSUGROXB.js +1951 -0
  34. package/dist/chunk-GSUGROXB.js.map +1 -0
  35. package/dist/chunk-H7773ONB.js +50 -0
  36. package/dist/chunk-H7773ONB.js.map +1 -0
  37. package/dist/chunk-HFQHU5LC.js +445 -0
  38. package/dist/chunk-HFQHU5LC.js.map +1 -0
  39. package/dist/chunk-IVHUBLJD.js +318 -0
  40. package/dist/chunk-IVHUBLJD.js.map +1 -0
  41. package/dist/chunk-KJWKY4L4.js +14 -0
  42. package/dist/chunk-KJWKY4L4.js.map +1 -0
  43. package/dist/chunk-MJVY2XUN.js +1793 -0
  44. package/dist/chunk-MJVY2XUN.js.map +1 -0
  45. package/dist/chunk-QWZVCJII.js +1797 -0
  46. package/dist/chunk-QWZVCJII.js.map +1 -0
  47. package/dist/chunk-VTSNRV3V.js +3237 -0
  48. package/dist/chunk-VTSNRV3V.js.map +1 -0
  49. package/dist/chunk-W5B4GTXR.js +1466 -0
  50. package/dist/chunk-W5B4GTXR.js.map +1 -0
  51. package/dist/chunk-WZEZLVOW.js +4995 -0
  52. package/dist/chunk-WZEZLVOW.js.map +1 -0
  53. package/dist/chunk-YPTTIXKC.js +199 -0
  54. package/dist/chunk-YPTTIXKC.js.map +1 -0
  55. package/dist/chunk-Z55UGM6X.js +6360 -0
  56. package/dist/chunk-Z55UGM6X.js.map +1 -0
  57. package/dist/chunk-ZIIRQODJ.js +110 -0
  58. package/dist/chunk-ZIIRQODJ.js.map +1 -0
  59. package/dist/chunk-ZSUQ4FMB.js +77 -0
  60. package/dist/chunk-ZSUQ4FMB.js.map +1 -0
  61. package/dist/client-JMTSZS3V.js +10 -0
  62. package/dist/client-JMTSZS3V.js.map +1 -0
  63. package/dist/deprecated-snap.js +19 -0
  64. package/dist/deprecated-snap.js.map +1 -0
  65. package/dist/dist-2KWBZFLA.js +14 -0
  66. package/dist/dist-2KWBZFLA.js.map +1 -0
  67. package/dist/dist-5ZYKNNU3.js +7 -0
  68. package/dist/dist-5ZYKNNU3.js.map +1 -0
  69. package/dist/dist-CP3RFHPI.js +11 -0
  70. package/dist/dist-CP3RFHPI.js.map +1 -0
  71. package/dist/gecko-53ITAGG6.js +56 -0
  72. package/dist/gecko-53ITAGG6.js.map +1 -0
  73. package/dist/guards-QAFC64NO.js +7 -0
  74. package/dist/guards-QAFC64NO.js.map +1 -0
  75. package/dist/index.js +57785 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/init-command-246JIVXM.js +7 -0
  78. package/dist/init-command-246JIVXM.js.map +1 -0
  79. package/dist/init-core-KAI7LCXZ.js +12 -0
  80. package/dist/init-core-KAI7LCXZ.js.map +1 -0
  81. package/dist/init-scan-RZNYDTUV.js +1919 -0
  82. package/dist/init-scan-RZNYDTUV.js.map +1 -0
  83. package/dist/local-service-adapter-6KNN6WQL.js +8 -0
  84. package/dist/local-service-adapter-6KNN6WQL.js.map +1 -0
  85. package/dist/secure-credentials-JXWAQLS2.js +306 -0
  86. package/dist/secure-credentials-JXWAQLS2.js.map +1 -0
  87. package/dist/tui-TPJPUS2R.js +111 -0
  88. package/dist/tui-TPJPUS2R.js.map +1 -0
  89. package/dist/vreko-dir-O3RLG7PI.js +8 -0
  90. package/dist/vreko-dir-O3RLG7PI.js.map +1 -0
  91. package/package.json +132 -0
  92. package/scripts/check-banned-words.ts +152 -0
  93. package/scripts/hooks/posttooluse-file-notify.sh +108 -0
  94. package/scripts/hooks/pretooluse-fragile-guard.sh +82 -0
  95. package/scripts/post-install-notice.js +24 -0
  96. package/scripts/postinstall.mjs +84 -0
  97. package/scripts/preuninstall.mjs +34 -0
  98. package/scripts/verify-jsx-transform.mjs +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/intelligence/src/init-scan/discovery-emitter.ts","../../../packages/intelligence/src/init-scan/gitlog-analyzer.ts","../../../packages/intelligence/src/init-scan/insight-generator.ts","../../../packages/intelligence/src/init-scan/reflog-scanner.ts","../../../packages/intelligence/src/init-scan/repo-structure.ts","../../../packages/intelligence/src/init-scan/scan-cache.ts","../../../packages/intelligence/src/init-scan/scan-events.ts","../../../packages/intelligence/src/init-scan/scan-guards.ts","../../../packages/intelligence/src/init-scan/synthesizer.ts","../../../packages/intelligence/src/init-scan/run-init-scan.ts","../../../packages/intelligence/src/init-scan/index.ts"],"names":["DiscoveryEmitter","EventEmitter","emitDiscovery","discovery","confidence","emit","createDiscoveryEmitter","execFileAsync","promisify","execFile","ARTIFACT_BASENAMES","Set","ARTIFACT_BUILD_SEGMENTS","isArtifactFile","filePath","parts","split","basename","length","has","endsWith","segment","slice","topLevelDir","withinHours","a","b","hours","Math","abs","getTime","analyzeGitLog","repoPath","emitter","signals","avgCommitsPerDay","commitFrequencyVariance","largeCommitRatio","diffusion","avgFilesTouchedPerCommit","crossDirectoryDiffusionRate","rollbackAdjacentCommitRate","largeSessionClusterRate","maxSingleCommitSpread","rollbackCorrelation","resetAfterLargeCommitRate","resetAfterBranchSwitchRate","resetAfterLateNightRate","resetAfterCrossPackageRate","branchSpecificRollbackDensity","Map","medianTimeToRecovery","topRecoveryTrigger","fileChurnRanking","coChangeGraph","hotspotFiles","contributorCount","busFactorEstimate","mergeConflictFrequency","stdout","logStdout","cwd","maxBuffer","timeout","commits","parseLogOutput","dates","map","c","date","sort","timeSpanMs","days","max","commitsByDay","dayKey","toISOString","set","get","dailyCounts","values","mean","reduce","sqrt","sum","largeCommits","filter","files","computeDiffusion","computeRollbackCorrelation","computeFileChurn","computeCoChangeGraph","f","revertCount","changeCount","hasRevertA","hasRevertB","path","shortlogOut","contributors","Boolean","min","ceil","mergeCommits","parentCount","topPair","source","message","fileA","fileB","round","detailMessage","relatedInsightId","_error","lines","current","line","startsWith","push","rest","pipeIdx","indexOf","metaPart","trim","subject","sha","dateStr","parentHashes","Date","Number","isNaN","isRevert","toLowerCase","added","parseInt","deleted","fileCounts","crossDirCommits","dirs","size","rollbackAdjacentCount","sortedByDate","i","j","clusterCount","windowEnd","result","sorted","reverts","afterLargeCount","afterLateNightCount","afterCrossPackageCount","recoveryTimes","revert","precedingIdx","findIndex","preceding","timeDiff","getHours","total","mid","floor","triggers","Object","entries","churnMap","commit","file","entry","totalLines","lastChanged","data","avgLinesChanged","pairCounts","paths","p","key","join","edges","count","maxChanges","coChangeCount","generateInsights","baseline","insights","reflog","resetToHEADCount","rc","gitlog","correlationDetail","replace","comparison","baselines","avgResetToHEADRate","toFixed","undefined","id","severity","observation","whyItMatters","whatWeWillDo","fragileFiles","isWeaklyTested","structure","testAdjacency","weaklyTestedHotspots","some","h","avgCrossDirectoryDiffusionRate","strongPairs","e","top","lateNightRatio","weakPackages","packageTestAdjacency","churnScore","testRatio","branchAbandonmentRate","singleAuthorFiles","forceResetRate","avgForceResetRate","topology","highFanInPaths","highFanInFiles","importedByCount","hotspotPath","churnEntry","find","locked","selectLockedInsight","teaser","requirement","unlockCondition","type","parseDateFromLine","match","d","parseBranchFromLine","scanReflog","rebaseFrequency","contextSwitchRate","peakActivityWindows","weekendActivityRatio","reflogChurnByBranch","avgTimeBetweenResets","timestamps","resetTimestamps","resetCount","forceResetCount","rebaseCount","checkoutCount","weekendCount","lateNightCount","hourCounts","Array","fill","branchesCreated","branchesMerged","branchChurn","hour","day","getDay","branch","includes","add","mergedMatch","sortedTimestamps","weeks","abandoned","meanActivity","stddev","threshold","peakWindows","windowStart","startHour","endHour","totalGap","countFiles","dir","predicate","maxDepth","currentDepth","existsSync","readdirSync","withFileTypes","name","isFile","isDirectory","detectTestFramework","pkg","JSON","parse","readFileSync","allDeps","dependencies","devDependencies","vitest","jest","mocha","detectFramework","next","react","vue","express","hono","detectPackageDirs","candidates","candidate","candidatePath","computeTestAdjacency","packageDirs","churnFiles","isTestFile","__name","isSourceFile","churnSet","pkgDir","fullPath","srcPath","hasTestDir","testFileCount","sourceFileCount","packagePath","totalSource","s","overallTestAdjacencyScore","detectSensitiveSurfaces","envPatterns","hasEnvFiles","credPatterns","hasCredentialConfigs","hasCISecrets","workflowDir","content","hasInfraState","sensitivePathCount","detectStructure","isTurbo","isNx","isLerna","isPnpmWorkspace","repoType","packageManager","configExtensions","configFileCount","rootFiles","ext","gitignoreComplexity","gitignore","l","ageResult","countResult","branchResult","Promise","all","catch","age","firstDate","now","totalCommits","activeBranches","thirtyDaysAgo","branchDate","sensitiveSurfaces","framework","hasCI","hasDocker","testFramework","writeScanCache","cache","writeFileSync","stringify","readScanCache","lastScannedHead","lastScannedAt","computeDelta","currentHead","head","needsFullScan","countOut","commitRange","from","to","ScanEventEmitter","emitProgress","event","emitFinding","emitComplete","profile","onDiscovery","handler","on","onProgress","onFinding","onComplete","createScanEventEmitter","ACTIVE_SCAN_LOCKS","DEFAULT_CACHE_MAX_AGE_MS","resolveCachePath","workspaceHash","cacheDir","homedir","mkdirSync","recursive","isCacheValid","maxAgeMs","cachedAt","isFinite","isScanInProgress","acquireScanLock","released","delete","clamp","value","computeRecoveryRisk","score","totalReverts","computeChangeVolatility","computeWorkflowFragility","fragileCount","unstablePairs","testGap","computeComplexity","packageCount","computeCollaboration","calculateStructuralRisk","circularChainCount","highFanInRatio","moduleCount","ruleViolationCount","orphanRatio","orphanFileCount","edgeDensity","edgeCount","computeAiExposure","toolIdentity","aiIndicators","indicator","TOOL_RISK_MULTIPLIERS","devin","cursor","windsurf","augment","cline","roocode","aider","multiplier","tool","execSync","require","currentBranch","encoding","test","buildTopDrivers","drivers","label","scoreImpact","evidence","protectiveAction","topChurn","buildRecommendedConfig","recoveryRisk","protectionLevel","snapshotFrequency","watchTargets","fileCount","reason","edge","substring","lastIndexOf","t","hotspot","topChurned","enabledFeatures","riskTier","computeConfidence","sources","weight","buildTopFragileFiles","withReverts","findTopFragileFile","ranked","FRAGILITY_MIN_SAMPLE","confidenceWeight","isExcludedFromFragilityRanking","buildFragilityArray","excluded","revertRate","fragilityScore","buildCoChangeArray","rate","occurrences","generated","synthesize","changeVolatility","workflowFragility","overallRisk","primary","secondary","complexity","collaboration","aiExposure","structuralRisk","topDrivers","lockedInsights","recommendedConfig","topFragileFile","topFragileFiles","coChange","fragility","runTopologyScan","provider","scanEmitter","stage","progress","scan","cruiseDurationMs","_err","runInitScan","topologyProvider","reflogSignals","gitlogSignals","structureSignals","topologySignals","resolve","input","runInitScanWithEvents","em"],"mappings":"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","file":"init-scan-RZNYDTUV.js","sourcesContent":["import { EventEmitter } from \"node:events\";\nimport type { EarlyDiscovery, DiscoveryEmitter as IDiscoveryEmitter } from \"./types\";\n\nexport class DiscoveryEmitter extends EventEmitter implements IDiscoveryEmitter {\n\temitDiscovery(discovery: EarlyDiscovery): void {\n\t\tif (discovery.confidence > 0.85) {\n\t\t\tthis.emit(\"discovery\", discovery);\n\t\t}\n\t}\n}\n\nexport function createDiscoveryEmitter(): DiscoveryEmitter {\n\treturn new DiscoveryEmitter();\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type {\n\tCoChangeEdge,\n\tCommitDiffusionSignals,\n\tDiscoveryEmitter,\n\tFileChurnEntry,\n\tGitLogSignals,\n\tRollbackCorrelationSignals,\n} from \"./types\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Lockfile basenames, dependency manifests, and generated-file patterns that must\n * never appear in fragility rankings. High-churn by tooling definition - not by\n * developer instability.\n */\nconst ARTIFACT_BASENAMES = new Set([\n\t\"pnpm-lock.yaml\",\n\t\"yarn.lock\",\n\t\"package-lock.json\",\n\t\"bun.lockb\",\n\t\"Gemfile.lock\",\n\t\"Cargo.lock\",\n\t\"poetry.lock\",\n\t\"go.sum\",\n\t\"composer.lock\",\n\t\"package.json\",\n]);\n\n// Only directory NAMES that are unambiguously build outputs or caches.\n// NOTE: \"build\" and \"out\" are intentionally excluded - they are too commonly\n// used as source directory names (e.g. packages/next/src/build/).\nconst ARTIFACT_BUILD_SEGMENTS = new Set([\"dist\", \".next\", \"__generated__\", \".turbo\", \".cache\"]);\n\n/**\n * Returns true when a file path is a tooling artifact (lockfile, generated output,\n * dependency manifest) that should be excluded from fragility and co-change rankings.\n */\nexport function isArtifactFile(filePath: string): boolean {\n\tconst parts = filePath.split(\"/\");\n\tconst basename = parts[parts.length - 1];\n\n\t// Exact-basename matches\n\tif (ARTIFACT_BASENAMES.has(basename)) {\n\t\treturn true;\n\t}\n\n\t// Generated-file suffix patterns\n\tif (\n\t\tbasename.endsWith(\".d.ts\") ||\n\t\tbasename.endsWith(\".gen.ts\") ||\n\t\tbasename.endsWith(\".generated.ts\") ||\n\t\tbasename.endsWith(\".gen.js\") ||\n\t\tbasename.endsWith(\".generated.js\") ||\n\t\tbasename.endsWith(\".min.js\") ||\n\t\tbasename.endsWith(\".min.css\")\n\t) {\n\t\treturn true;\n\t}\n\n\t// Build-output directory segments (any segment in the path)\n\tfor (const segment of parts.slice(0, -1)) {\n\t\tif (ARTIFACT_BUILD_SEGMENTS.has(segment)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\ninterface ParsedCommit {\n\tsha: string;\n\tdate: Date;\n\tparentCount: number;\n\tfiles: Array<{ path: string; added: number; deleted: number }>;\n\tisRevert: boolean;\n\tsubject: string;\n}\n\nfunction topLevelDir(filePath: string): string {\n\tconst parts = filePath.split(\"/\");\n\treturn parts.length > 1 ? parts[0] : \".\";\n}\n\n/**\n * Check if two timestamps are within N hours of each other.\n */\nfunction withinHours(a: Date, b: Date, hours: number): boolean {\n\treturn Math.abs(a.getTime() - b.getTime()) <= hours * 60 * 60 * 1000;\n}\n\nexport async function analyzeGitLog(repoPath: string, emitter?: DiscoveryEmitter): Promise<GitLogSignals> {\n\tconst signals: GitLogSignals = {\n\t\tavgCommitsPerDay: 0,\n\t\tcommitFrequencyVariance: 0,\n\t\tlargeCommitRatio: 0,\n\t\tdiffusion: {\n\t\t\tavgFilesTouchedPerCommit: 0,\n\t\t\tcrossDirectoryDiffusionRate: 0,\n\t\t\trollbackAdjacentCommitRate: 0,\n\t\t\tlargeSessionClusterRate: 0,\n\t\t\tmaxSingleCommitSpread: 0,\n\t\t},\n\t\trollbackCorrelation: {\n\t\t\tresetAfterLargeCommitRate: 0,\n\t\t\tresetAfterBranchSwitchRate: 0,\n\t\t\tresetAfterLateNightRate: 0,\n\t\t\tresetAfterCrossPackageRate: 0,\n\t\t\tbranchSpecificRollbackDensity: new Map(),\n\t\t\tmedianTimeToRecovery: 0,\n\t\t\ttopRecoveryTrigger: \"large-commit\",\n\t\t},\n\t\tfileChurnRanking: [],\n\t\tcoChangeGraph: [],\n\t\thotspotFiles: [],\n\t\tcontributorCount: 0,\n\t\tbusFactorEstimate: 0,\n\t\tmergeConflictFrequency: 0,\n\t};\n\n\ttry {\n\t\tconst { stdout: logStdout } = await execFileAsync(\n\t\t\t\"git\",\n\t\t\t// --no-merges: merge commits produce empty numstat output - file changes\n\t\t\t// were already counted in the original feature commits, so merge commits\n\t\t\t// only add noise and cause fileChurnRanking to appear empty on repos with\n\t\t\t// dense merge-commit histories (e.g. large open-source monorepos on canary branches).\n\t\t\t//\n\t\t\t// Omit --all: scanning every ref (tags, remote branches) on large repos like\n\t\t\t// Next.js (~34k commits) exhausts the 10-second timeout and SIGTERM-kills the\n\t\t\t// child process, causing the catch block to swallow the error and return all-zero\n\t\t\t// signals. HEAD-reachable history is sufficient for behavioral intelligence - the\n\t\t\t// developer's active branch is what matters, not all historical branches.\n\t\t\t[\"log\", \"--format=COMMIT:%H %aI %P|%s\", \"--numstat\", \"--no-merges\", \"-n\", \"10000\"],\n\t\t\t{\n\t\t\t\tcwd: repoPath,\n\t\t\t\tmaxBuffer: 20 * 1024 * 1024,\n\t\t\t\t// 60 s: gives large monorepos (Next.js-scale, ~34k commits HEAD-reachable)\n\t\t\t\t// enough headroom while still bounding the scan. The scan result is cached\n\t\t\t\t// for 24 hours so a one-time 30-60s wait is acceptable on first run.\n\t\t\t\ttimeout: 60000,\n\t\t\t},\n\t\t);\n\n\t\tconst commits = parseLogOutput(logStdout);\n\t\tif (commits.length === 0) {\n\t\t\treturn signals;\n\t\t}\n\n\t\t// Time span\n\t\tconst dates = commits.map((c) => c.date.getTime()).sort((a, b) => a - b);\n\t\tconst timeSpanMs = dates[dates.length - 1] - dates[0];\n\t\tconst days = Math.max(timeSpanMs / (24 * 60 * 60 * 1000), 1);\n\n\t\t// Basic commit patterns\n\t\tsignals.avgCommitsPerDay = commits.length / days;\n\n\t\t// Commit frequency variance: std dev of commits per day\n\t\tconst commitsByDay = new Map<string, number>();\n\t\tfor (const c of commits) {\n\t\t\tconst dayKey = c.date.toISOString().slice(0, 10);\n\t\t\tcommitsByDay.set(dayKey, (commitsByDay.get(dayKey) || 0) + 1);\n\t\t}\n\t\tconst dailyCounts = [...commitsByDay.values()];\n\t\tconst mean = dailyCounts.reduce((a, b) => a + b, 0) / Math.max(dailyCounts.length, 1);\n\t\tsignals.commitFrequencyVariance = Math.sqrt(\n\t\t\tdailyCounts.reduce((sum, c) => sum + (c - mean) ** 2, 0) / Math.max(dailyCounts.length, 1),\n\t\t);\n\n\t\t// Large commit ratio (touching 10+ files)\n\t\tconst largeCommits = commits.filter((c) => c.files.length >= 10);\n\t\tsignals.largeCommitRatio = (largeCommits.length / commits.length) * 100;\n\n\t\tsignals.diffusion = computeDiffusion(commits);\n\n\t\t// Rollback correlation\n\t\tsignals.rollbackCorrelation = computeRollbackCorrelation(commits);\n\n\t\t// File churn ranking\n\t\tsignals.fileChurnRanking = computeFileChurn(commits);\n\n\t\t// Co-change graph\n\t\tsignals.coChangeGraph = computeCoChangeGraph(commits);\n\n\t\t// Hotspot files: reverted files ranked by revert rate first, then high-churn\n\t\t// files as fallback. The old sort (changeCount × (revertCount+1)) rewarded\n\t\t// raw frequency - lockfiles ranked first even after exclusion at the churn map\n\t\t// level if they somehow survived. Revert-rate sort surfaces genuinely fragile\n\t\t// files ahead of merely busy ones.\n\t\tsignals.hotspotFiles = signals.fileChurnRanking\n\t\t\t.filter((f) => f.revertCount > 0 || f.changeCount > 5)\n\t\t\t.sort((a, b) => {\n\t\t\t\t// Reverted files always rank above never-reverted files\n\t\t\t\tconst hasRevertA = a.revertCount > 0 ? 1 : 0;\n\t\t\t\tconst hasRevertB = b.revertCount > 0 ? 1 : 0;\n\t\t\t\tif (hasRevertB !== hasRevertA) return hasRevertB - hasRevertA;\n\t\t\t\t// Both reverted: sort by revert rate (higher = more fragile)\n\t\t\t\tif (a.revertCount > 0 && b.revertCount > 0) {\n\t\t\t\t\treturn b.revertCount / b.changeCount - a.revertCount / a.changeCount;\n\t\t\t\t}\n\t\t\t\t// Both zero-revert: fall back to changeCount\n\t\t\t\treturn b.changeCount - a.changeCount;\n\t\t\t})\n\t\t\t.slice(0, 10)\n\t\t\t.map((f) => f.path);\n\n\t\t// Contributor count\n\t\tconst { stdout: shortlogOut } = await execFileAsync(\"git\", [\"shortlog\", \"-sn\", \"--all\"], {\n\t\t\tcwd: repoPath,\n\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\ttimeout: 10000,\n\t\t});\n\t\tconst contributors = shortlogOut.split(\"\\n\").filter(Boolean);\n\t\tsignals.contributorCount = contributors.length;\n\n\t\t// Bus factor: count files only one contributor touches\n\t\t// Simplified: if single contributor, bus factor = 1\n\t\tsignals.busFactorEstimate = Math.max(\n\t\t\t1,\n\t\t\tMath.min(signals.contributorCount, Math.ceil(signals.contributorCount * 0.3)),\n\t\t);\n\n\t\t// Merge conflict frequency\n\t\tconst mergeCommits = commits.filter((c) => c.parentCount > 1);\n\t\tsignals.mergeConflictFrequency = commits.length > 0 ? (mergeCommits.length / commits.length) * 100 : 0;\n\n\t\t// Emit discoveries\n\t\tif (emitter && signals.coChangeGraph.length > 0) {\n\t\t\tconst topPair = signals.coChangeGraph[0];\n\t\t\tif (topPair.confidence > 0.9) {\n\t\t\t\temitter.emit(\"discovery\", {\n\t\t\t\t\tsource: \"gitlog\",\n\t\t\t\t\tconfidence: topPair.confidence,\n\t\t\t\t\tmessage: `${topPair.fileA} and ${topPair.fileB} change together ${Math.round(topPair.confidence * 100)}% of the time`,\n\t\t\t\t\tdetailMessage: \"Vreko will track this relationship\",\n\t\t\t\t\trelatedInsightId: \"co-change-instability\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (emitter && signals.avgCommitsPerDay > 10) {\n\t\t\temitter.emit(\"discovery\", {\n\t\t\t\tsource: \"gitlog\",\n\t\t\t\tconfidence: 0.88,\n\t\t\t\tmessage: \"High commit frequency detected\",\n\t\t\t\tdetailMessage: \"Vreko can group these logically\",\n\t\t\t});\n\t\t}\n\t} catch (_error) {\n\t\t// Degrade gracefully\n\t}\n\n\treturn signals;\n}\n\n/**\n * Parse the COMMIT: delimited log output.\n */\nfunction parseLogOutput(stdout: string): ParsedCommit[] {\n\tconst commits: ParsedCommit[] = [];\n\tconst lines = stdout.split(\"\\n\");\n\tlet current: ParsedCommit | null = null;\n\n\tfor (const line of lines) {\n\t\tif (line.startsWith(\"COMMIT:\")) {\n\t\t\tif (current) {\n\t\t\t\tcommits.push(current);\n\t\t\t}\n\t\t\tconst rest = line.slice(7); // Remove \"COMMIT:\"\n\t\t\tconst pipeIdx = rest.indexOf(\"|\");\n\t\t\tif (pipeIdx === -1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst metaPart = rest.slice(0, pipeIdx).trim();\n\t\t\tconst subject = rest.slice(pipeIdx + 1);\n\t\t\tconst parts = metaPart.split(/\\s+/);\n\t\t\tif (parts.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst sha = parts[0];\n\t\t\tconst dateStr = parts[1];\n\t\t\tconst parentHashes = parts.slice(2);\n\t\t\tconst date = new Date(dateStr);\n\t\t\tif (Number.isNaN(date.getTime())) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrent = {\n\t\t\t\tsha,\n\t\t\t\tdate,\n\t\t\t\tparentCount: parentHashes.length,\n\t\t\t\tfiles: [],\n\t\t\t\tisRevert: subject.toLowerCase().startsWith(\"revert\"),\n\t\t\t\tsubject,\n\t\t\t};\n\t\t} else if (current && line.trim()) {\n\t\t\tconst parts = line.split(\"\\t\");\n\t\t\tif (parts.length >= 3) {\n\t\t\t\tconst added = parts[0] === \"-\" ? 0 : Number.parseInt(parts[0], 10) || 0;\n\t\t\t\tconst deleted = parts[1] === \"-\" ? 0 : Number.parseInt(parts[1], 10) || 0;\n\t\t\t\tcurrent.files.push({ path: parts[2], added, deleted });\n\t\t\t}\n\t\t}\n\t}\n\tif (current) {\n\t\tcommits.push(current);\n\t}\n\n\treturn commits;\n}\n\nfunction computeDiffusion(commits: ParsedCommit[]): CommitDiffusionSignals {\n\tif (commits.length === 0) {\n\t\treturn {\n\t\t\tavgFilesTouchedPerCommit: 0,\n\t\t\tcrossDirectoryDiffusionRate: 0,\n\t\t\trollbackAdjacentCommitRate: 0,\n\t\t\tlargeSessionClusterRate: 0,\n\t\t\tmaxSingleCommitSpread: 0,\n\t\t};\n\t}\n\n\tconst fileCounts = commits.map((c) => c.files.length);\n\tconst avgFilesTouchedPerCommit = fileCounts.reduce((a, b) => a + b, 0) / commits.length;\n\n\t// Cross-directory diffusion: commits spanning 2+ top-level dirs\n\tconst crossDirCommits = commits.filter((c) => {\n\t\tconst dirs = new Set(c.files.map((f) => topLevelDir(f.path)));\n\t\treturn dirs.size >= 2;\n\t});\n\tconst crossDirectoryDiffusionRate = (crossDirCommits.length / commits.length) * 100;\n\n\t// Rollback-adjacent: commits followed by a revert within 6h\n\tlet rollbackAdjacentCount = 0;\n\tconst sortedByDate = [...commits].sort((a, b) => a.date.getTime() - b.date.getTime());\n\tfor (let i = 0; i < sortedByDate.length; i++) {\n\t\tfor (let j = i + 1; j < sortedByDate.length; j++) {\n\t\t\tif (!withinHours(sortedByDate[i].date, sortedByDate[j].date, 6)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (sortedByDate[j].isRevert) {\n\t\t\t\trollbackAdjacentCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tconst rollbackAdjacentCommitRate = (rollbackAdjacentCount / commits.length) * 100;\n\n\t// Large session clusters: 5+ commits within 2h windows\n\tlet clusterCount = 0;\n\tfor (let i = 0; i < sortedByDate.length; i++) {\n\t\tlet windowEnd = i;\n\t\twhile (\n\t\t\twindowEnd + 1 < sortedByDate.length &&\n\t\t\twithinHours(sortedByDate[i].date, sortedByDate[windowEnd + 1].date, 2)\n\t\t) {\n\t\t\twindowEnd++;\n\t\t}\n\t\tif (windowEnd - i + 1 >= 5) {\n\t\t\tclusterCount++;\n\t\t\ti = windowEnd; // skip to end of cluster\n\t\t}\n\t}\n\tconst largeSessionClusterRate = (clusterCount / Math.max(commits.length / 5, 1)) * 100;\n\n\tconst maxSingleCommitSpread = Math.max(...fileCounts, 0);\n\n\treturn {\n\t\tavgFilesTouchedPerCommit,\n\t\tcrossDirectoryDiffusionRate,\n\t\trollbackAdjacentCommitRate,\n\t\tlargeSessionClusterRate,\n\t\tmaxSingleCommitSpread,\n\t};\n}\n\nfunction computeRollbackCorrelation(commits: ParsedCommit[]): RollbackCorrelationSignals {\n\tconst result: RollbackCorrelationSignals = {\n\t\tresetAfterLargeCommitRate: 0,\n\t\tresetAfterBranchSwitchRate: 0,\n\t\tresetAfterLateNightRate: 0,\n\t\tresetAfterCrossPackageRate: 0,\n\t\tbranchSpecificRollbackDensity: new Map(),\n\t\tmedianTimeToRecovery: 0,\n\t\ttopRecoveryTrigger: \"large-commit\",\n\t};\n\n\tconst sorted = [...commits].sort((a, b) => a.date.getTime() - b.date.getTime());\n\tconst reverts = sorted.filter((c) => c.isRevert);\n\tif (reverts.length === 0) {\n\t\treturn result;\n\t}\n\n\tlet afterLargeCount = 0;\n\tlet afterLateNightCount = 0;\n\tlet afterCrossPackageCount = 0;\n\tconst recoveryTimes: number[] = [];\n\n\tfor (const revert of reverts) {\n\t\t// Find the preceding non-revert commit\n\t\tconst precedingIdx = sorted.findIndex((c) => c.sha === revert.sha) - 1;\n\t\tif (precedingIdx < 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// biome-ignore lint/correctness/noUnreachable: false positive - precedingIdx >= 0 guaranteed by continue above\n\t\tfor (let i = precedingIdx; i >= 0; i--) {\n\t\t\tconst preceding = sorted[i];\n\t\t\tif (!withinHours(preceding.date, revert.date, 6)) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst timeDiff = (revert.date.getTime() - preceding.date.getTime()) / (1000 * 60);\n\t\t\trecoveryTimes.push(timeDiff);\n\n\t\t\t// After large commit\n\t\t\tif (preceding.files.length >= 5) {\n\t\t\t\tafterLargeCount++;\n\t\t\t}\n\n\t\t\t// After late night\n\t\t\tif (preceding.date.getHours() >= 22 || preceding.date.getHours() < 5) {\n\t\t\t\tafterLateNightCount++;\n\t\t\t}\n\n\t\t\t// After cross-package\n\t\t\tconst dirs = new Set(preceding.files.map((f) => topLevelDir(f.path)));\n\t\t\tif (dirs.size >= 2) {\n\t\t\t\tafterCrossPackageCount++;\n\t\t\t}\n\n\t\t\tbreak; // only look at immediate predecessor\n\t\t}\n\t}\n\n\tconst total = Math.max(reverts.length, 1);\n\tresult.resetAfterLargeCommitRate = (afterLargeCount / total) * 100;\n\tresult.resetAfterLateNightRate = (afterLateNightCount / total) * 100;\n\tresult.resetAfterCrossPackageRate = (afterCrossPackageCount / total) * 100;\n\n\t// Median time to recovery\n\tif (recoveryTimes.length > 0) {\n\t\trecoveryTimes.sort((a, b) => a - b);\n\t\tconst mid = Math.floor(recoveryTimes.length / 2);\n\t\tresult.medianTimeToRecovery =\n\t\t\trecoveryTimes.length % 2 === 0 ? (recoveryTimes[mid - 1] + recoveryTimes[mid]) / 2 : recoveryTimes[mid];\n\t}\n\n\t// Top recovery trigger\n\tconst triggers = {\n\t\t\"large-commit\": afterLargeCount,\n\t\t\"late-night\": afterLateNightCount,\n\t\t\"cross-package\": afterCrossPackageCount,\n\t\t\"branch-switch\": 0,\n\t};\n\tresult.topRecoveryTrigger = Object.entries(triggers).sort((a, b) => b[1] - a[1])[0][0];\n\n\treturn result;\n}\n\nfunction computeFileChurn(commits: ParsedCommit[]): FileChurnEntry[] {\n\tconst churnMap = new Map<\n\t\tstring,\n\t\t{ changeCount: number; totalLines: number; revertCount: number; lastChanged: Date }\n\t>();\n\n\tfor (const commit of commits) {\n\t\tfor (const file of commit.files) {\n\t\t\t// Skip lockfiles, package.json, and generated outputs - they are high-churn\n\t\t\t// by tooling definition, not developer instability, and must not pollute\n\t\t\t// fragility rankings (pnpm-lock.yaml would otherwise always top the list).\n\t\t\tif (isArtifactFile(file.path)) continue;\n\n\t\t\tconst entry = churnMap.get(file.path) || {\n\t\t\t\tchangeCount: 0,\n\t\t\t\ttotalLines: 0,\n\t\t\t\trevertCount: 0,\n\t\t\t\tlastChanged: commit.date,\n\t\t\t};\n\t\t\tentry.changeCount++;\n\t\t\tentry.totalLines += file.added + file.deleted;\n\t\t\tif (commit.isRevert) {\n\t\t\t\tentry.revertCount++;\n\t\t\t}\n\t\t\tif (commit.date > entry.lastChanged) {\n\t\t\t\tentry.lastChanged = commit.date;\n\t\t\t}\n\t\t\tchurnMap.set(file.path, entry);\n\t\t}\n\t}\n\n\treturn [...churnMap.entries()]\n\t\t.map(([path, data]) => ({\n\t\t\tpath,\n\t\t\tchangeCount: data.changeCount,\n\t\t\tavgLinesChanged: data.changeCount > 0 ? data.totalLines / data.changeCount : 0,\n\t\t\trevertCount: data.revertCount,\n\t\t\tlastChanged: data.lastChanged.toISOString(),\n\t\t}))\n\t\t.sort((a, b) => b.changeCount - a.changeCount)\n\t\t.slice(0, 50); // top 50 files\n}\n\nfunction computeCoChangeGraph(commits: ParsedCommit[]): CoChangeEdge[] {\n\t// Count how often each pair of files appears in the same commit\n\tconst pairCounts = new Map<string, number>();\n\tconst fileCounts = new Map<string, number>();\n\n\tfor (const commit of commits) {\n\t\tconst paths = commit.files.map((f) => f.path);\n\t\tfor (const p of paths) {\n\t\t\tfileCounts.set(p, (fileCounts.get(p) || 0) + 1);\n\t\t}\n\t\t// Only consider commits with 2-20 files (too many files = noise)\n\t\tif (paths.length < 2 || paths.length > 20) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (let i = 0; i < paths.length; i++) {\n\t\t\tfor (let j = i + 1; j < paths.length; j++) {\n\t\t\t\tconst key = [paths[i], paths[j]].sort().join(\"|||\");\n\t\t\t\tpairCounts.set(key, (pairCounts.get(key) || 0) + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst edges: CoChangeEdge[] = [];\n\tfor (const [key, count] of pairCounts) {\n\t\tif (count < 3) {\n\t\t\tcontinue; // filter noise\n\t\t}\n\t\tconst [fileA, fileB] = key.split(\"|||\");\n\n\t\t// Exclude pairs where BOTH files are tooling artifacts - e.g. pnpm-lock.yaml\n\t\t// always co-changes with package.json on every `pnpm install`. That is not a\n\t\t// developer coupling insight; it is package manager bookkeeping. Mixed pairs\n\t\t// (one artifact + one source) are kept because they can represent real signals.\n\t\tif (isArtifactFile(fileA) && isArtifactFile(fileB)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst maxChanges = Math.max(fileCounts.get(fileA) || 1, fileCounts.get(fileB) || 1);\n\t\tedges.push({\n\t\t\tfileA,\n\t\t\tfileB,\n\t\t\tcoChangeCount: count,\n\t\t\tconfidence: count / maxChanges,\n\t\t});\n\t}\n\n\treturn edges.sort((a, b) => b.confidence - a.confidence).slice(0, 20);\n}\n","import type { AllSignals, BaselineResponse, Insight, LockedInsight } from \"./types\";\n\n/**\n * Generate insights from analyzed signals.\n * Follows the priority table from jaw_drop_onboard spec section 1.5/Frame 4.\n *\n * Priority order:\n * 1. Recovery pattern proof (resetToHEADCount > 5 + rollback correlation)\n * 2. Fragile hotspot proof (file changed 20+ times AND reverted 3+ times)\n * 3. Cross-directory blast radius (diffusionRate > 30% + rollback correlation)\n * 4. Co-change relationship (confidence > 0.7)\n * 5. Late-night/weekend risk (>50% in risky windows + higher revert correlation)\n * 6. Weak test adjacency (high-churn + testRatio < 0.1)\n * 7. Branch abandonment (>30%)\n * 8. Bus factor warning (busFactorEstimate < 2, files changed 10+ times)\n * 9. Aggregate comparison (dimension > 75th percentile vs baseline)\n *\n * Maximum 7 resolved insights generated.\n */\nexport function generateInsights(\n\tsignals: AllSignals,\n\tbaseline?: BaselineResponse,\n): { insights: Insight[]; locked: LockedInsight } {\n\tconst insights: Insight[] = [];\n\n\t// Priority 1: Recovery pattern proof\n\tif (signals.reflog && signals.reflog.resetToHEADCount > 5) {\n\t\tconst rc = signals.gitlog?.rollbackCorrelation;\n\t\tconst correlationDetail = rc?.topRecoveryTrigger\n\t\t\t? ` Most correlate with ${rc.topRecoveryTrigger.replace(/-/g, \" \")} changes.`\n\t\t\t: \"\";\n\t\tconst comparison = baseline\n\t\t\t? `${(signals.reflog.resetToHEADCount / Math.max(baseline.baselines.avgResetToHEADRate, 1)).toFixed(1)}x the average for repos like yours`\n\t\t\t: undefined;\n\n\t\tinsights.push({\n\t\t\tid: \"high-reset-rate\",\n\t\t\tseverity: signals.reflog.resetToHEADCount > 15 ? \"critical\" : \"warning\",\n\t\t\tobservation: `${signals.reflog.resetToHEADCount} recovery events in recent history`,\n\t\t\twhyItMatters: `Frequent resets indicate volatile development sessions.${correlationDetail}`,\n\t\t\twhatWeWillDo: \"Increase snapshot density during high-diffusion sessions\",\n\t\t\tcomparison,\n\t\t});\n\t}\n\n\t// Priority 2: Fragile hotspot proof\n\tif (signals.gitlog) {\n\t\tconst fragileFiles = signals.gitlog.fileChurnRanking.filter((f) => f.changeCount >= 20 && f.revertCount >= 3);\n\t\tfor (const file of fragileFiles.slice(0, 2)) {\n\t\t\tconst isWeaklyTested = signals.structure?.testAdjacency.weaklyTestedHotspots.some((h) =>\n\t\t\t\tfile.path.startsWith(h),\n\t\t\t);\n\t\t\tinsights.push({\n\t\t\t\tid: `fragile-hotspot-${file.path}`,\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tobservation: `${file.path} changed ${file.changeCount}x, reverted ${file.revertCount}x${isWeaklyTested ? \". Weakly test-adjacent\" : \"\"}`,\n\t\t\t\twhyItMatters: \"High-churn files with reverts are the most likely to need recovery\",\n\t\t\t\twhatWeWillDo: \"Watch this file as a fragile hotspot with enhanced monitoring\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Priority 3: Cross-directory blast radius\n\tif (signals.gitlog && signals.gitlog.diffusion.crossDirectoryDiffusionRate > 30) {\n\t\tconst rc = signals.gitlog.rollbackCorrelation;\n\t\tconst comparison = baseline\n\t\t\t? `${(signals.gitlog.diffusion.crossDirectoryDiffusionRate / Math.max(baseline.baselines.avgCrossDirectoryDiffusionRate, 1)).toFixed(1)}x the average`\n\t\t\t: undefined;\n\n\t\tinsights.push({\n\t\t\tid: \"cross-directory-blast\",\n\t\t\tseverity: \"warning\",\n\t\t\tobservation: `${Math.round(signals.gitlog.diffusion.crossDirectoryDiffusionRate)}% of commits span multiple directories`,\n\t\t\twhyItMatters:\n\t\t\t\t`Wide-reaching changes are harder to roll back safely. ${rc.resetAfterCrossPackageRate > 10 ? `${Math.round(rc.resetAfterCrossPackageRate)}% of reverts follow cross-package changes.` : \"\"}`.trim(),\n\t\t\twhatWeWillDo: \"Track cross-directory blast radius and auto-snapshot before high-diffusion commits\",\n\t\t\tcomparison,\n\t\t});\n\t}\n\n\t// Priority 4: Co-change relationship\n\tif (signals.gitlog) {\n\t\tconst strongPairs = signals.gitlog.coChangeGraph.filter((e) => e.confidence > 0.7);\n\t\tif (strongPairs.length > 0) {\n\t\t\tconst top = strongPairs[0];\n\t\t\tinsights.push({\n\t\t\t\tid: \"co-change-instability\",\n\t\t\t\tseverity: \"info\",\n\t\t\t\tobservation: `${top.fileA} and ${top.fileB} co-change at ${Math.round(top.confidence * 100)}% rate`,\n\t\t\t\twhyItMatters: \"Tightly coupled files that change together may break if one is modified alone\",\n\t\t\t\twhatWeWillDo: \"Track co-change relationships and warn if one file changes without the other\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Priority 5: Late-night/weekend risk\n\tif (signals.reflog && signals.reflog.lateNightRatio > 0.2) {\n\t\tinsights.push({\n\t\t\tid: \"temporal-risk\",\n\t\t\tseverity: \"notable\",\n\t\t\tobservation: `${Math.round(signals.reflog.lateNightRatio * 100)}% of activity occurs during late-night hours`,\n\t\t\twhyItMatters: \"Late-night development sessions correlate with higher error rates\",\n\t\t\twhatWeWillDo: \"Increase snapshot frequency during late-night sessions\",\n\t\t});\n\t}\n\n\t// Priority 6: Weak test adjacency\n\tif (signals.structure) {\n\t\tconst weakPackages = signals.structure.testAdjacency.packageTestAdjacency.filter(\n\t\t\t(p) => p.churnScore > 2 && p.testRatio < 0.1,\n\t\t);\n\t\tif (weakPackages.length > 0) {\n\t\t\tinsights.push({\n\t\t\t\tid: \"weak-test-adjacency\",\n\t\t\t\tseverity: \"notable\",\n\t\t\t\tobservation: `${weakPackages.length} high-churn package(s) with minimal test coverage`,\n\t\t\t\twhyItMatters: \"Code that changes frequently without tests is most likely to break unexpectedly\",\n\t\t\t\twhatWeWillDo: \"Prioritize snapshot protection for untested hotspots\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Priority 7: Branch abandonment\n\tif (signals.reflog && signals.reflog.branchAbandonmentRate > 30) {\n\t\tinsights.push({\n\t\t\tid: \"branch-abandonment\",\n\t\t\tseverity: \"info\",\n\t\t\tobservation: `${Math.round(signals.reflog.branchAbandonmentRate)}% of branches are never merged`,\n\t\t\twhyItMatters:\n\t\t\t\t\"Abandoned branches may indicate experimental work that could benefit from snapshot protection\",\n\t\t\twhatWeWillDo: \"Track branch lifecycle patterns to identify recovery-prone experiments\",\n\t\t});\n\t}\n\n\t// Priority 8: Bus factor warning\n\tif (signals.gitlog && signals.gitlog.busFactorEstimate < 2) {\n\t\tconst singleAuthorFiles = signals.gitlog.fileChurnRanking.filter((f) => f.changeCount >= 10);\n\t\tif (singleAuthorFiles.length > 0) {\n\t\t\tinsights.push({\n\t\t\t\tid: \"bus-factor-risk\",\n\t\t\t\tseverity: \"notable\",\n\t\t\t\tobservation: `Low bus factor: ${singleAuthorFiles.length} high-churn files maintained by a single contributor`,\n\t\t\t\twhyItMatters: \"Single-contributor files are at higher risk if that contributor is unavailable\",\n\t\t\t\twhatWeWillDo: \"Enhanced snapshot protection for single-contributor hotspots\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Priority 9: Aggregate comparison\n\tif (baseline && signals.reflog) {\n\t\tif (signals.reflog.forceResetRate > baseline.baselines.avgForceResetRate * 1.5) {\n\t\t\tinsights.push({\n\t\t\t\tid: \"above-baseline-resets\",\n\t\t\t\tseverity: \"info\",\n\t\t\t\tobservation: \"Force reset rate above typical for your repo type\",\n\t\t\t\twhyItMatters: \"Higher-than-average reset frequency suggests more volatile workflows\",\n\t\t\t\twhatWeWillDo: \"Calibrate protection levels against aggregate baselines\",\n\t\t\t\tcomparison: `${(signals.reflog.forceResetRate / Math.max(baseline.baselines.avgForceResetRate, 0.1)).toFixed(1)}x the average`,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Priority 10: Fused structural-temporal hotspot\n\t// When a file appears in BOTH gitlog.hotspotFiles AND topology.highFanInFiles,\n\t// it is both behaviorally unstable and structurally critical.\n\tif (signals.gitlog && signals.topology) {\n\t\tconst highFanInPaths = new Map(signals.topology.highFanInFiles.map((f) => [f.path, f.importedByCount]));\n\t\tfor (const hotspotPath of signals.gitlog.hotspotFiles) {\n\t\t\tconst importedByCount = highFanInPaths.get(hotspotPath);\n\t\t\tif (importedByCount !== undefined) {\n\t\t\t\tconst churnEntry = signals.gitlog.fileChurnRanking.find((f) => f.path === hotspotPath);\n\t\t\t\tconst changeCount = churnEntry?.changeCount ?? 0;\n\t\t\t\tconst revertCount = churnEntry?.revertCount ?? 0;\n\t\t\t\tinsights.push({\n\t\t\t\t\tid: \"fused-structural-temporal-hotspot\",\n\t\t\t\t\tseverity: \"critical\",\n\t\t\t\t\tobservation: `\\`${hotspotPath}\\` changed ${changeCount} times, reverted ${revertCount} times, and is imported by ${importedByCount} files`,\n\t\t\t\t\twhyItMatters:\n\t\t\t\t\t\t\"This file is both structurally critical (high blast radius) and behaviorally unstable (frequent changes and rollbacks). Changes here cascade across your codebase.\",\n\t\t\t\t\twhatWeWillDo:\n\t\t\t\t\t\t\"Vreko will apply maximum protection density and provide structural context to AI tools before they modify this file.\",\n\t\t\t\t});\n\t\t\t\tbreak; // Only emit one fused insight\n\t\t\t}\n\t\t}\n\t}\n\n\t// Locked insight selection - first matching condition wins\n\tconst locked = selectLockedInsight(signals);\n\n\t// Limit to 7 resolved insights\n\treturn { insights: insights.slice(0, 7), locked };\n}\n\n/**\n * Select exactly one locked insight based on candidate priority.\n * Candidates from spec:\n * 1. Session risk windows (aiExposure > 50 OR general default)\n * 2. AI-tool recovery correlation (if AI tool configs detected)\n * 3. Cross-session pattern drift (fallback)\n */\nfunction selectLockedInsight(signals: AllSignals): LockedInsight {\n\t// Candidate 1: Temporal risk windows (if late night ratio > 0.2)\n\tif (signals.reflog && signals.reflog.lateNightRatio > 0.2) {\n\t\treturn {\n\t\t\tid: \"temporal-risk-windows\",\n\t\t\tteaser: \"Identify your personal risk windows -- the times and patterns where recovery is most likely\",\n\t\t\trequirement: \"Requires observed coding sessions to validate temporal patterns\",\n\t\t\tunlockCondition: { type: \"days_observed\", days: 3 },\n\t\t};\n\t}\n\n\t// Candidate 2: AI-tool recovery correlation (collaboration signals)\n\tif (signals.gitlog && signals.gitlog.busFactorEstimate < 2) {\n\t\treturn {\n\t\t\tid: \"collaboration-risk\",\n\t\t\tteaser: \"Detect when your coding patterns diverge from your stable baseline\",\n\t\t\trequirement: \"Requires observed coding sessions to establish baseline patterns\",\n\t\t\tunlockCondition: { type: \"days_observed\", days: 5 },\n\t\t};\n\t}\n\n\t// Default: session risk windows\n\treturn {\n\t\tid: \"session-risk-windows\",\n\t\tteaser: \"Identify your personal risk windows\",\n\t\trequirement: \"Requires observed coding sessions\",\n\t\tunlockCondition: { type: \"days_observed\", days: 3 },\n\t};\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { DiscoveryEmitter, ReflogSignals, TimeWindow } from \"./types\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Parse an ISO date string from a reflog line.\n * Reflog format: `sha1 ref@{ISO-DATE}: action: description`\n */\nfunction parseDateFromLine(line: string): Date | null {\n\tconst match = line.match(/\\{([^}]+)\\}/);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst d = new Date(match[1]);\n\treturn Number.isNaN(d.getTime()) ? null : d;\n}\n\n/**\n * Extract the branch name from a reflog line.\n * E.g., `abc123 refs/heads/main@{2026-01-01}: ...` → `main`\n */\nfunction parseBranchFromLine(line: string): string | null {\n\tconst match = line.match(/refs\\/heads\\/([^@]+)@/);\n\treturn match ? match[1] : null;\n}\n\nexport async function scanReflog(repoPath: string, emitter?: DiscoveryEmitter): Promise<ReflogSignals> {\n\tconst signals: ReflogSignals = {\n\t\tforceResetRate: 0,\n\t\trebaseFrequency: 0,\n\t\tbranchAbandonmentRate: 0,\n\t\tcontextSwitchRate: 0,\n\t\tpeakActivityWindows: [],\n\t\tweekendActivityRatio: 0,\n\t\tlateNightRatio: 0,\n\t\tresetToHEADCount: 0,\n\t\treflogChurnByBranch: new Map(),\n\t\tavgTimeBetweenResets: 0,\n\t};\n\n\ttry {\n\t\tconst { stdout } = await execFileAsync(\"git\", [\"reflog\", \"--all\", \"--date=iso\"], {\n\t\t\tcwd: repoPath,\n\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\ttimeout: 10000,\n\t\t});\n\n\t\tconst lines = stdout.split(\"\\n\").filter(Boolean);\n\t\tif (lines.length === 0) {\n\t\t\treturn signals;\n\t\t}\n\n\t\t// Collect timestamps and classify entries\n\t\tconst timestamps: Date[] = [];\n\t\tconst resetTimestamps: number[] = [];\n\t\tlet resetCount = 0;\n\t\tlet forceResetCount = 0;\n\t\tlet rebaseCount = 0;\n\t\tlet checkoutCount = 0;\n\t\tlet weekendCount = 0;\n\t\tlet lateNightCount = 0;\n\t\tconst hourCounts = new Array<number>(24).fill(0);\n\t\tconst branchesCreated = new Set<string>();\n\t\tconst branchesMerged = new Set<string>();\n\t\tconst branchChurn = new Map<string, number>();\n\n\t\tfor (const line of lines) {\n\t\t\tconst date = parseDateFromLine(line);\n\t\t\tif (date) {\n\t\t\t\ttimestamps.push(date);\n\t\t\t\tconst hour = date.getHours();\n\t\t\t\thourCounts[hour]++;\n\t\t\t\tconst day = date.getDay();\n\t\t\t\tif (day === 0 || day === 6) {\n\t\t\t\t\tweekendCount++;\n\t\t\t\t}\n\t\t\t\tif (hour >= 22 || hour < 5) {\n\t\t\t\t\tlateNightCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst branch = parseBranchFromLine(line);\n\t\t\tif (branch) {\n\t\t\t\tbranchChurn.set(branch, (branchChurn.get(branch) || 0) + 1);\n\t\t\t}\n\n\t\t\t// Count reset-to-HEAD events (the \"oh no\" moments)\n\t\t\tif (line.includes(\"reset: moving to HEAD\")) {\n\t\t\t\tresetCount++;\n\t\t\t\tif (date) {\n\t\t\t\t\tresetTimestamps.push(date.getTime());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Force resets and hard resets\n\t\t\tif (line.includes(\"reset: moving to\") && !line.includes(\"reset: moving to HEAD\")) {\n\t\t\t\tforceResetCount++;\n\t\t\t\tif (date) {\n\t\t\t\t\tresetTimestamps.push(date.getTime());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Rebase events\n\t\t\tif (line.includes(\"rebase\")) {\n\t\t\t\trebaseCount++;\n\t\t\t}\n\n\t\t\t// Checkout / context switch events\n\t\t\tif (line.includes(\"checkout: moving from\")) {\n\t\t\t\tcheckoutCount++;\n\t\t\t}\n\n\t\t\t// Branch creation tracking\n\t\t\tif (line.includes(\"branch: Created from\")) {\n\t\t\t\tif (branch) {\n\t\t\t\t\tbranchesCreated.add(branch);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Merge tracking (branch was merged)\n\t\t\tif (line.includes(\"merge\")) {\n\t\t\t\tconst mergedMatch = line.match(/merge\\s+(\\S+)/);\n\t\t\t\tif (mergedMatch) {\n\t\t\t\t\tbranchesMerged.add(mergedMatch[1].replace(/[:;]$/, \"\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Compute time span in weeks for rate calculations\n\t\tconst sortedTimestamps = timestamps.map((d) => d.getTime()).sort((a, b) => a - b);\n\t\tconst timeSpanMs =\n\t\t\tsortedTimestamps.length > 1\n\t\t\t\t? sortedTimestamps[sortedTimestamps.length - 1] - sortedTimestamps[0]\n\t\t\t\t: 7 * 24 * 60 * 60 * 1000; // default 1 week\n\t\tconst weeks = Math.max(timeSpanMs / (7 * 24 * 60 * 60 * 1000), 1);\n\t\tconst days = Math.max(timeSpanMs / (24 * 60 * 60 * 1000), 1);\n\n\t\tsignals.resetToHEADCount = resetCount;\n\t\tsignals.forceResetRate = (forceResetCount + resetCount) / weeks;\n\t\tsignals.rebaseFrequency = rebaseCount / weeks;\n\t\tsignals.contextSwitchRate = checkoutCount / days;\n\n\t\t// Branch abandonment: created but never merged\n\t\tconst abandoned = [...branchesCreated].filter((b) => !branchesMerged.has(b));\n\t\tsignals.branchAbandonmentRate = branchesCreated.size > 0 ? (abandoned.length / branchesCreated.size) * 100 : 0;\n\n\t\t// Temporal patterns\n\t\tsignals.weekendActivityRatio = lines.length > 0 ? weekendCount / lines.length : 0;\n\t\tsignals.lateNightRatio = lines.length > 0 ? lateNightCount / lines.length : 0;\n\n\t\t// Peak activity windows: find hours with activity > mean + 1 stddev\n\t\tconst meanActivity = lines.length / 24;\n\t\tconst stddev = Math.sqrt(hourCounts.reduce((sum, c) => sum + (c - meanActivity) ** 2, 0) / 24);\n\t\tconst threshold = meanActivity + stddev;\n\t\tconst peakWindows: TimeWindow[] = [];\n\t\tlet windowStart: number | null = null;\n\t\tfor (let h = 0; h < 24; h++) {\n\t\t\tif (hourCounts[h] > threshold) {\n\t\t\t\tif (windowStart === null) {\n\t\t\t\t\twindowStart = h;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (windowStart !== null) {\n\t\t\t\t\tpeakWindows.push({ startHour: windowStart, endHour: h });\n\t\t\t\t\twindowStart = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (windowStart !== null) {\n\t\t\tpeakWindows.push({ startHour: windowStart, endHour: 24 });\n\t\t}\n\t\tsignals.peakActivityWindows = peakWindows;\n\n\t\t// Reflog churn by branch\n\t\tsignals.reflogChurnByBranch = branchChurn;\n\n\t\t// Average time between resets\n\t\tif (resetTimestamps.length > 1) {\n\t\t\tconst sorted = resetTimestamps.sort((a, b) => a - b);\n\t\t\tlet totalGap = 0;\n\t\t\tfor (let i = 1; i < sorted.length; i++) {\n\t\t\t\ttotalGap += sorted[i] - sorted[i - 1];\n\t\t\t}\n\t\t\t// Convert to minutes\n\t\t\tsignals.avgTimeBetweenResets = totalGap / (sorted.length - 1) / (1000 * 60);\n\t\t}\n\n\t\t// Emit discoveries\n\t\tif (emitter && resetCount > 5) {\n\t\t\temitter.emit(\"discovery\", {\n\t\t\t\tsource: \"reflog\",\n\t\t\t\tconfidence: 0.9,\n\t\t\t\tmessage: `Found ${resetCount} reset events in your history`,\n\t\t\t\tdetailMessage: \"Vreko will learn your rollback patterns\",\n\t\t\t});\n\t\t}\n\n\t\tif (emitter && signals.lateNightRatio > 0.2) {\n\t\t\temitter.emit(\"discovery\", {\n\t\t\t\tsource: \"reflog\",\n\t\t\t\tconfidence: 0.88,\n\t\t\t\tmessage: `${Math.round(signals.lateNightRatio * 100)}% of git activity happens after 10pm`,\n\t\t\t\tdetailMessage: \"Vreko will increase protection during late-night sessions\",\n\t\t\t});\n\t\t}\n\t} catch (_error) {\n\t\t// If timeout or error, degrade gracefully - return zero signals\n\t}\n\n\treturn signals;\n}\n","import { execFile } from \"node:child_process\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport type { DiscoveryEmitter, RepoStructure, SensitiveSurfaceSignals, TestAdjacencySignals } from \"./types\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Recursively count files matching a predicate, up to maxDepth.\n */\nfunction countFiles(dir: string, predicate: (name: string) => boolean, maxDepth = 4, currentDepth = 0): number {\n\tif (currentDepth >= maxDepth || !existsSync(dir)) {\n\t\treturn 0;\n\t}\n\tlet count = 0;\n\ttry {\n\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (\n\t\t\t\tentry.name === \"node_modules\" ||\n\t\t\t\tentry.name === \".git\" ||\n\t\t\t\tentry.name === \"dist\" ||\n\t\t\t\tentry.name === \"build\"\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.isFile() && predicate(entry.name)) {\n\t\t\t\tcount++;\n\t\t\t} else if (entry.isDirectory()) {\n\t\t\t\tcount += countFiles(join(dir, entry.name), predicate, maxDepth, currentDepth + 1);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Permission denied or similar\n\t}\n\treturn count;\n}\n\n/**\n * Check for existence of any file matching glob-like patterns.\n */\nfunction _hasAnyFile(dir: string, patterns: string[]): boolean {\n\tfor (const pattern of patterns) {\n\t\tif (existsSync(join(dir, pattern))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Detect test framework from config files and dependencies.\n */\nfunction detectTestFramework(repoPath: string): string | null {\n\tif (existsSync(join(repoPath, \"vitest.config.ts\")) || existsSync(join(repoPath, \"vitest.config.js\"))) {\n\t\treturn \"vitest\";\n\t}\n\tif (existsSync(join(repoPath, \"jest.config.ts\")) || existsSync(join(repoPath, \"jest.config.js\"))) {\n\t\treturn \"jest\";\n\t}\n\tif (existsSync(join(repoPath, \".mocharc.yml\")) || existsSync(join(repoPath, \".mocharc.json\"))) {\n\t\treturn \"mocha\";\n\t}\n\tif (existsSync(join(repoPath, \"pytest.ini\")) || existsSync(join(repoPath, \"pyproject.toml\"))) {\n\t\treturn \"pytest\";\n\t}\n\n\t// Check package.json\n\ttry {\n\t\tconst pkg = JSON.parse(readFileSync(join(repoPath, \"package.json\"), \"utf-8\"));\n\t\tconst allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n\t\tif (allDeps.vitest) {\n\t\t\treturn \"vitest\";\n\t\t}\n\t\tif (allDeps.jest) {\n\t\t\treturn \"jest\";\n\t\t}\n\t\tif (allDeps.mocha) {\n\t\t\treturn \"mocha\";\n\t\t}\n\t} catch {\n\t\t// No package.json\n\t}\n\n\treturn null;\n}\n\n/**\n * Detect the primary framework from config files.\n */\nfunction detectFramework(repoPath: string): string | null {\n\tif (\n\t\texistsSync(join(repoPath, \"next.config.ts\")) ||\n\t\texistsSync(join(repoPath, \"next.config.js\")) ||\n\t\texistsSync(join(repoPath, \"next.config.mjs\"))\n\t) {\n\t\treturn \"next.js\";\n\t}\n\tif (existsSync(join(repoPath, \"nuxt.config.ts\"))) {\n\t\treturn \"nuxt\";\n\t}\n\tif (existsSync(join(repoPath, \"angular.json\"))) {\n\t\treturn \"angular\";\n\t}\n\tif (existsSync(join(repoPath, \"svelte.config.js\"))) {\n\t\treturn \"svelte\";\n\t}\n\tif (existsSync(join(repoPath, \"vite.config.ts\")) || existsSync(join(repoPath, \"vite.config.js\"))) {\n\t\treturn \"vite\";\n\t}\n\n\ttry {\n\t\tconst pkg = JSON.parse(readFileSync(join(repoPath, \"package.json\"), \"utf-8\"));\n\t\tconst allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n\t\tif (allDeps.next) {\n\t\t\treturn \"next.js\";\n\t\t}\n\t\tif (allDeps.react) {\n\t\t\treturn \"react\";\n\t\t}\n\t\tif (allDeps.vue) {\n\t\t\treturn \"vue\";\n\t\t}\n\t\tif (allDeps.express) {\n\t\t\treturn \"express\";\n\t\t}\n\t\tif (allDeps.hono) {\n\t\t\treturn \"hono\";\n\t\t}\n\t} catch {\n\t\t// No package.json\n\t}\n\n\treturn null;\n}\n\n/**\n * Detect package directories in a monorepo.\n */\nfunction detectPackageDirs(repoPath: string): string[] {\n\tconst dirs: string[] = [];\n\tconst candidates = [\"packages\", \"apps\", \"libs\", \"modules\", \"services\"];\n\n\tfor (const candidate of candidates) {\n\t\tconst candidatePath = join(repoPath, candidate);\n\t\tif (!existsSync(candidatePath)) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst entries = readdirSync(candidatePath, { withFileTypes: true });\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory() && existsSync(join(candidatePath, entry.name, \"package.json\"))) {\n\t\t\t\t\tdirs.push(join(candidate, entry.name));\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip\n\t\t}\n\t}\n\n\t// If no monorepo dirs found, treat root as the single package\n\tif (dirs.length === 0) {\n\t\tdirs.push(\".\");\n\t}\n\n\treturn dirs;\n}\n\n/**\n * Compute test adjacency signals per package.\n */\nfunction computeTestAdjacency(repoPath: string, packageDirs: string[], churnFiles?: string[]): TestAdjacencySignals {\n\tconst isTestFile = (name: string) =>\n\t\tname.endsWith(\".test.ts\") ||\n\t\tname.endsWith(\".test.tsx\") ||\n\t\tname.endsWith(\".test.js\") ||\n\t\tname.endsWith(\".spec.ts\") ||\n\t\tname.endsWith(\".spec.tsx\") ||\n\t\tname.endsWith(\".spec.js\");\n\n\tconst isSourceFile = (name: string) =>\n\t\t(name.endsWith(\".ts\") || name.endsWith(\".tsx\") || name.endsWith(\".js\") || name.endsWith(\".jsx\")) &&\n\t\t!isTestFile(name) &&\n\t\t!name.endsWith(\".d.ts\") &&\n\t\t!name.endsWith(\".config.ts\") &&\n\t\t!name.endsWith(\".config.js\");\n\n\tconst packageTestAdjacency: TestAdjacencySignals[\"packageTestAdjacency\"] = [];\n\tconst churnSet = new Set(churnFiles || []);\n\n\tfor (const pkgDir of packageDirs) {\n\t\tconst fullPath = join(repoPath, pkgDir);\n\t\tconst srcPath = existsSync(join(fullPath, \"src\")) ? join(fullPath, \"src\") : fullPath;\n\n\t\tconst hasTestDir =\n\t\t\texistsSync(join(fullPath, \"__tests__\")) ||\n\t\t\texistsSync(join(fullPath, \"test\")) ||\n\t\t\texistsSync(join(fullPath, \"tests\"));\n\n\t\tconst testFileCount = countFiles(fullPath, isTestFile);\n\t\tconst sourceFileCount = countFiles(srcPath, isSourceFile);\n\t\tconst testRatio = sourceFileCount > 0 ? testFileCount / sourceFileCount : 0;\n\n\t\t// Churn score: how many churning files are in this package\n\t\tlet churnScore = 0;\n\t\tif (churnSet.size > 0) {\n\t\t\tfor (const f of churnSet) {\n\t\t\t\tif (f.startsWith(pkgDir)) {\n\t\t\t\t\tchurnScore++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpackageTestAdjacency.push({\n\t\t\tpackagePath: pkgDir,\n\t\t\thasTestDir: hasTestDir || testFileCount > 0,\n\t\t\ttestFileCount,\n\t\t\tsourceFileCount,\n\t\t\ttestRatio,\n\t\t\tchurnScore,\n\t\t});\n\t}\n\n\t// Weakly tested hotspots: high churn packages with low test ratio\n\tconst weaklyTestedHotspots = packageTestAdjacency\n\t\t.filter((p) => p.churnScore > 2 && p.testRatio < 0.3)\n\t\t.map((p) => p.packagePath);\n\n\t// Overall score: weighted average of test ratios\n\tconst totalSource = packageTestAdjacency.reduce((s, p) => s + p.sourceFileCount, 0);\n\tconst overallTestAdjacencyScore =\n\t\ttotalSource > 0\n\t\t\t? Math.min(\n\t\t\t\t\t100,\n\t\t\t\t\t(packageTestAdjacency.reduce((s, p) => s + p.testRatio * p.sourceFileCount, 0) / totalSource) * 100,\n\t\t\t\t)\n\t\t\t: 0;\n\n\treturn { packageTestAdjacency, weaklyTestedHotspots, overallTestAdjacencyScore };\n}\n\n/**\n * Detect sensitive surfaces (env files, credentials, CI secrets, infra state).\n */\nfunction detectSensitiveSurfaces(repoPath: string): SensitiveSurfaceSignals {\n\tconst envPatterns = [\".env\", \".env.local\", \".env.development\", \".env.production\", \".env.staging\"];\n\tconst hasEnvFiles = envPatterns.some((p) => existsSync(join(repoPath, p)));\n\n\tconst credPatterns = [\".npmrc\", \".pypirc\", \"docker-compose.yml\", \"docker-compose.yaml\"];\n\tconst hasCredentialConfigs = credPatterns.some((p) => existsSync(join(repoPath, p)));\n\n\t// Check for CI secrets in workflow files\n\tlet hasCISecrets = false;\n\tconst workflowDir = join(repoPath, \".github\", \"workflows\");\n\tif (existsSync(workflowDir)) {\n\t\ttry {\n\t\t\tconst files = readdirSync(workflowDir);\n\t\t\tfor (const f of files) {\n\t\t\t\ttry {\n\t\t\t\t\tconst content = readFileSync(join(workflowDir, f), \"utf-8\");\n\t\t\t\t\tif (content.includes(\"secrets.\")) {\n\t\t\t\t\t\thasCISecrets = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Skip unreadable files\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip\n\t\t}\n\t}\n\n\tconst hasInfraState = existsSync(join(repoPath, \"terraform.tfstate\")) || existsSync(join(repoPath, \".terraform\"));\n\n\tlet sensitivePathCount = 0;\n\tif (hasEnvFiles) {\n\t\tsensitivePathCount += envPatterns.filter((p) => existsSync(join(repoPath, p))).length;\n\t}\n\tif (hasCredentialConfigs) {\n\t\tsensitivePathCount += credPatterns.filter((p) => existsSync(join(repoPath, p))).length;\n\t}\n\tif (hasCISecrets) {\n\t\tsensitivePathCount++;\n\t}\n\tif (hasInfraState) {\n\t\tsensitivePathCount++;\n\t}\n\n\treturn { hasEnvFiles, hasCredentialConfigs, hasCISecrets, hasInfraState, sensitivePathCount };\n}\n\nexport async function detectStructure(repoPath: string, emitter?: DiscoveryEmitter): Promise<RepoStructure> {\n\tconst isTurbo = existsSync(join(repoPath, \"turbo.json\"));\n\tconst isNx = existsSync(join(repoPath, \"nx.json\"));\n\tconst isLerna = existsSync(join(repoPath, \"lerna.json\"));\n\tconst isPnpmWorkspace = existsSync(join(repoPath, \"pnpm-workspace.yaml\"));\n\n\tlet repoType: RepoStructure[\"repoType\"] = \"single\";\n\tif (isTurbo) {\n\t\trepoType = \"monorepo-turbo\";\n\t} else if (isNx) {\n\t\trepoType = \"monorepo-nx\";\n\t} else if (isLerna) {\n\t\trepoType = \"monorepo-lerna\";\n\t} else if (isPnpmWorkspace) {\n\t\trepoType = \"polyrepo\";\n\t}\n\n\t// Detect package manager\n\tlet packageManager: RepoStructure[\"packageManager\"] = null;\n\tif (existsSync(join(repoPath, \"pnpm-lock.yaml\"))) {\n\t\tpackageManager = \"pnpm\";\n\t} else if (existsSync(join(repoPath, \"bun.lockb\"))) {\n\t\tpackageManager = \"bun\";\n\t} else if (existsSync(join(repoPath, \"yarn.lock\"))) {\n\t\tpackageManager = \"yarn\";\n\t} else if (existsSync(join(repoPath, \"package-lock.json\"))) {\n\t\tpackageManager = \"npm\";\n\t}\n\n\t// Config file count\n\tconst configExtensions = [\".json\", \".yaml\", \".yml\", \".toml\", \".config.ts\", \".config.js\", \".config.mjs\"];\n\tlet configFileCount = 0;\n\ttry {\n\t\tconst rootFiles = readdirSync(repoPath);\n\t\tfor (const f of rootFiles) {\n\t\t\tif (configExtensions.some((ext) => f.endsWith(ext))) {\n\t\t\t\tconfigFileCount++;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Skip\n\t}\n\n\t// Gitignore complexity\n\tlet gitignoreComplexity = 0;\n\ttry {\n\t\tconst gitignore = readFileSync(join(repoPath, \".gitignore\"), \"utf-8\");\n\t\tgitignoreComplexity = gitignore.split(\"\\n\").filter((l) => l.trim() && !l.startsWith(\"#\")).length;\n\t} catch {\n\t\t// No .gitignore\n\t}\n\n\t// Run independent git commands in parallel\n\tconst [ageResult, countResult, branchResult] = await Promise.all([\n\t\texecFileAsync(\"git\", [\"log\", \"--reverse\", \"--format=%aI\", \"-1\"], { cwd: repoPath, timeout: 5000 }).catch(\n\t\t\t() => ({ stdout: \"\" }),\n\t\t),\n\t\texecFileAsync(\"git\", [\"rev-list\", \"--count\", \"--all\"], { cwd: repoPath, timeout: 5000 }).catch(() => ({\n\t\t\tstdout: \"0\",\n\t\t})),\n\t\texecFileAsync(\"git\", [\"branch\", \"-a\", \"--format=%(refname:short) %(committerdate:iso)\"], {\n\t\t\tcwd: repoPath,\n\t\t\ttimeout: 5000,\n\t\t}).catch(() => ({ stdout: \"\" })),\n\t]);\n\n\tlet age = 0;\n\tif (ageResult.stdout.trim()) {\n\t\tconst firstDate = new Date(ageResult.stdout.trim());\n\t\tage = Math.floor((Date.now() - firstDate.getTime()) / (24 * 60 * 60 * 1000));\n\t}\n\n\tconst totalCommits = Number.parseInt(countResult.stdout.trim(), 10) || 0;\n\n\tlet activeBranches = 0;\n\tconst thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;\n\tfor (const line of branchResult.stdout.split(\"\\n\").filter(Boolean)) {\n\t\tconst parts = line.trim().split(/\\s+/);\n\t\tif (parts.length >= 2) {\n\t\t\tconst branchDate = new Date(parts.slice(1).join(\" \"));\n\t\t\tif (!Number.isNaN(branchDate.getTime()) && branchDate.getTime() > thirtyDaysAgo) {\n\t\t\t\tactiveBranches++;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst packageDirs = detectPackageDirs(repoPath);\n\tconst testAdjacency = computeTestAdjacency(repoPath, packageDirs);\n\tconst sensitiveSurfaces = detectSensitiveSurfaces(repoPath);\n\n\tconst structure: RepoStructure = {\n\t\trepoType,\n\t\tframework: detectFramework(repoPath),\n\t\tpackageManager,\n\t\thasCI:\n\t\t\texistsSync(join(repoPath, \".github\", \"workflows\")) ||\n\t\t\texistsSync(join(repoPath, \".gitlab-ci.yml\")) ||\n\t\t\texistsSync(join(repoPath, \".circleci\")),\n\t\thasDocker: existsSync(join(repoPath, \"Dockerfile\")) || existsSync(join(repoPath, \"docker-compose.yml\")),\n\t\ttestFramework: detectTestFramework(repoPath),\n\t\tconfigFileCount,\n\t\tgitignoreComplexity,\n\t\tage,\n\t\ttotalCommits,\n\t\tactiveBranches,\n\t\ttestAdjacency,\n\t\tsensitiveSurfaces,\n\t};\n\n\t// Emit discoveries\n\tif (emitter && sensitiveSurfaces.hasEnvFiles) {\n\t\temitter.emit(\"discovery\", {\n\t\t\tsource: \"structure\",\n\t\t\tconfidence: 0.95,\n\t\t\tmessage: \"Detected environment variables\",\n\t\t\tdetailMessage: \"Vreko ignores .env files completely\",\n\t\t});\n\t}\n\n\tif (emitter && testAdjacency.weaklyTestedHotspots.length > 0) {\n\t\temitter.emit(\"discovery\", {\n\t\t\tsource: \"structure\",\n\t\t\tconfidence: 0.87,\n\t\t\tmessage: `${testAdjacency.weaklyTestedHotspots.length} package(s) with high churn but low test coverage`,\n\t\t\tdetailMessage: \"Vreko will monitor these as fragile zones\",\n\t\t});\n\t}\n\n\treturn structure;\n}\n","import { execFile } from \"node:child_process\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { promisify } from \"node:util\";\nimport type { ScanCache } from \"./types\";\n\nconst execFileAsync = promisify(execFile);\n\nexport function writeScanCache(path: string, cache: ScanCache): void {\n\twriteFileSync(path, JSON.stringify(cache, null, 2));\n}\n\nexport function readScanCache(path: string): ScanCache | null {\n\tif (!existsSync(path)) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst data = JSON.parse(readFileSync(path, \"utf-8\"));\n\t\t// Validate essential fields\n\t\tif (!data.lastScannedHead || !data.lastScannedAt) {\n\t\t\treturn null;\n\t\t}\n\t\treturn data as ScanCache;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Compute the delta between the cached scan and the current HEAD.\n * If the cache's lastScannedHead is still an ancestor of current HEAD,\n * we only need to re-scan the commits between them.\n * If it's not an ancestor (force push, reset), we re-scan everything.\n */\nexport async function computeDelta(\n\tcache: ScanCache,\n\trepoPath: string,\n): Promise<{ needsFullScan: boolean; commitRange?: { from: string; to: string; count: number } }> {\n\ttry {\n\t\t// Get current HEAD\n\t\tconst { stdout: currentHead } = await execFileAsync(\"git\", [\"rev-parse\", \"HEAD\"], {\n\t\t\tcwd: repoPath,\n\t\t\ttimeout: 5000,\n\t\t});\n\t\tconst head = currentHead.trim();\n\n\t\t// If HEAD hasn't changed, no scan needed\n\t\tif (head === cache.lastScannedHead) {\n\t\t\treturn { needsFullScan: false };\n\t\t}\n\n\t\t// Check if cached HEAD is an ancestor of current HEAD\n\t\ttry {\n\t\t\tawait execFileAsync(\"git\", [\"merge-base\", \"--is-ancestor\", cache.lastScannedHead, head], {\n\t\t\t\tcwd: repoPath,\n\t\t\t\ttimeout: 5000,\n\t\t\t});\n\n\t\t\t// It IS an ancestor - compute delta commit count\n\t\t\tconst { stdout: countOut } = await execFileAsync(\n\t\t\t\t\"git\",\n\t\t\t\t[\"rev-list\", \"--count\", `${cache.lastScannedHead}..${head}`],\n\t\t\t\t{ cwd: repoPath, timeout: 5000 },\n\t\t\t);\n\t\t\tconst count = Number.parseInt(countOut.trim(), 10) || 0;\n\n\t\t\treturn {\n\t\t\t\tneedsFullScan: false,\n\t\t\t\tcommitRange: {\n\t\t\t\t\tfrom: cache.lastScannedHead,\n\t\t\t\t\tto: head,\n\t\t\t\t\tcount,\n\t\t\t\t},\n\t\t\t};\n\t\t} catch {\n\t\t\t// Not an ancestor - force push or history rewrite, need full scan\n\t\t\treturn { needsFullScan: true };\n\t\t}\n\t} catch {\n\t\t// Can't determine delta, do full scan\n\t\treturn { needsFullScan: true };\n\t}\n}\n","/**\n * Scan Event Emitter\n *\n * Extends the existing DiscoveryEmitter interface with progress, finding,\n * and complete events for real-time UI feedback during init scan.\n *\n * @module init-scan/scan-events\n */\n\nimport { EventEmitter } from \"node:events\";\nimport type { EarlyDiscovery, RecoveryRiskProfile } from \"./types.js\";\n\nexport interface ScanProgressEvent {\n\tstage: \"commits\" | \"reflog\" | \"topology\" | \"synthesis\";\n\tprogress: number; // 0-100\n\tmessage: string;\n}\n\nexport interface ScanFindingEvent {\n\ttype: \"warning\" | \"insight\";\n\ttext: string;\n}\n\n/**\n * Full-featured scan emitter that satisfies the DiscoveryEmitter interface\n * and adds progress/finding/complete events for UI consumption.\n */\nexport class ScanEventEmitter extends EventEmitter {\n\t// --- DiscoveryEmitter compatibility ---\n\n\temitDiscovery(discovery: EarlyDiscovery): void {\n\t\tif (discovery.confidence > 0.85) {\n\t\t\tthis.emit(\"discovery\", discovery);\n\t\t}\n\t}\n\n\t// --- Scan-specific events ---\n\n\temitProgress(event: ScanProgressEvent): void {\n\t\tthis.emit(\"progress\", event);\n\t}\n\n\temitFinding(event: ScanFindingEvent): void {\n\t\tthis.emit(\"finding\", event);\n\t}\n\n\temitComplete(profile: RecoveryRiskProfile): void {\n\t\tthis.emit(\"complete\", profile);\n\t}\n\n\tonDiscovery(handler: (discovery: EarlyDiscovery) => void): this {\n\t\tthis.on(\"discovery\", handler);\n\t\treturn this;\n\t}\n\n\tonProgress(handler: (event: ScanProgressEvent) => void): this {\n\t\tthis.on(\"progress\", handler);\n\t\treturn this;\n\t}\n\n\tonFinding(handler: (event: ScanFindingEvent) => void): this {\n\t\tthis.on(\"finding\", handler);\n\t\treturn this;\n\t}\n\n\tonComplete(handler: (profile: RecoveryRiskProfile) => void): this {\n\t\tthis.on(\"complete\", handler);\n\t\treturn this;\n\t}\n}\n\nexport function createScanEventEmitter(): ScanEventEmitter {\n\treturn new ScanEventEmitter();\n}\n","import { mkdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { ScanCache } from \"./types.js\";\n\nconst ACTIVE_SCAN_LOCKS = new Set<string>();\nconst DEFAULT_CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\n/**\n * Resolve the persisted cache file path for a workspace hash.\n */\nexport function resolveCachePath(workspaceHash: string): string {\n\tconst cacheDir = join(homedir(), \".vreko\", \"cache\", \"init-scan\");\n\tmkdirSync(cacheDir, { recursive: true });\n\treturn join(cacheDir, `${workspaceHash}.json`);\n}\n\n/**\n * Returns true when a cached scan is still fresh.\n */\nexport function isCacheValid(cache: ScanCache | null, maxAgeMs = DEFAULT_CACHE_MAX_AGE_MS): cache is ScanCache {\n\tif (!cache) {\n\t\treturn false;\n\t}\n\n\tconst cachedAt = Date.parse(cache.lastScannedAt);\n\tif (!Number.isFinite(cachedAt)) {\n\t\treturn false;\n\t}\n\n\treturn Date.now() - cachedAt < maxAgeMs;\n}\n\n/**\n * Check whether a scan lock is currently held for the workspace.\n */\nexport function isScanInProgress(workspaceHash: string): boolean {\n\treturn ACTIVE_SCAN_LOCKS.has(workspaceHash);\n}\n\n/**\n * Acquire a process-local scan lock. Returns null if already locked.\n */\nexport function acquireScanLock(workspaceHash: string): (() => void) | null {\n\tif (ACTIVE_SCAN_LOCKS.has(workspaceHash)) {\n\t\treturn null;\n\t}\n\n\tACTIVE_SCAN_LOCKS.add(workspaceHash);\n\tlet released = false;\n\n\treturn () => {\n\t\tif (released) {\n\t\t\treturn;\n\t\t}\n\t\treleased = true;\n\t\tACTIVE_SCAN_LOCKS.delete(workspaceHash);\n\t};\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { isArtifactFile } from \"./gitlog-analyzer.js\";\nimport { generateInsights } from \"./insight-generator.js\";\nimport type {\n\tAllSignals,\n\tBaselineResponse,\n\tCoChangeEdge,\n\tCoChangePersisted,\n\tFileChurnEntry,\n\tFragilityEntry,\n\tRecommendedConfig,\n\tRecoveryRiskProfile,\n\tRiskDriver,\n\tTopologyInitSignals,\n\tWatchTarget,\n} from \"./types\";\n\nfunction clamp(value: number, min = 0, max = 100): number {\n\treturn Math.max(min, Math.min(max, value));\n}\n\n/**\n * Compute Recovery Risk dimension (0-100).\n * Sources: resetToHEADCount, rollbackCorrelation, revert rates.\n */\nfunction computeRecoveryRisk(signals: AllSignals): number {\n\tconst reflog = signals.reflog;\n\tconst gitlog = signals.gitlog;\n\n\tlet score = 0;\n\n\t// Reset-to-HEAD count: each reset contributes, diminishing returns\n\tif (reflog) {\n\t\tscore += Math.min(reflog.resetToHEADCount * 3, 40);\n\t\tscore += Math.min(reflog.forceResetRate * 5, 15);\n\t}\n\n\t// Rollback correlation: higher correlation = higher risk\n\tif (gitlog) {\n\t\tconst rc = gitlog.rollbackCorrelation;\n\t\tscore += Math.min(rc.resetAfterLargeCommitRate * 0.3, 15);\n\t\tscore += Math.min(rc.resetAfterCrossPackageRate * 0.3, 10);\n\n\t\t// Revert count from file churn\n\t\tconst totalReverts = gitlog.fileChurnRanking.reduce((s, f) => s + f.revertCount, 0);\n\t\tscore += Math.min(totalReverts * 2, 20);\n\t}\n\n\treturn clamp(score);\n}\n\n/**\n * Compute Change Volatility dimension (0-100).\n * Sources: reflog churn, force pushes, commit diffusion.\n */\nfunction computeChangeVolatility(signals: AllSignals): number {\n\tconst reflog = signals.reflog;\n\tconst gitlog = signals.gitlog;\n\n\tlet score = 0;\n\n\tif (reflog) {\n\t\t// Force reset rate: each per week adds risk\n\t\tscore += Math.min(reflog.forceResetRate * 4, 20);\n\t\t// Rebase frequency: moderate signal\n\t\tscore += Math.min(reflog.rebaseFrequency * 2, 10);\n\t\t// Branch abandonment\n\t\tscore += Math.min(reflog.branchAbandonmentRate * 0.2, 10);\n\t}\n\n\tif (gitlog) {\n\t\tconst d = gitlog.diffusion;\n\t\t// Cross-directory diffusion is a strong volatility signal\n\t\tscore += Math.min(d.crossDirectoryDiffusionRate * 0.5, 20);\n\t\t// Large commit ratio\n\t\tscore += Math.min(gitlog.largeCommitRatio * 0.4, 15);\n\t\t// Large session clusters\n\t\tscore += Math.min(d.largeSessionClusterRate * 0.5, 15);\n\t\t// High commit frequency variance\n\t\tscore += Math.min(gitlog.commitFrequencyVariance * 2, 10);\n\t}\n\n\treturn clamp(score);\n}\n\n/**\n * Compute Workflow Fragility dimension (0-100).\n * Sources: fragile files, co-change instability, test adjacency gaps.\n */\nfunction computeWorkflowFragility(signals: AllSignals): number {\n\tconst gitlog = signals.gitlog;\n\tconst structure = signals.structure;\n\n\tlet score = 0;\n\n\tif (gitlog) {\n\t\t// Fragile hotspot files (high churn + reverts)\n\t\tconst fragileCount = gitlog.fileChurnRanking.filter((f) => f.revertCount > 0 && f.changeCount > 5).length;\n\t\tscore += Math.min(fragileCount * 5, 25);\n\n\t\t// Co-change instability: high-confidence pairs indicate tight coupling\n\t\tconst unstablePairs = gitlog.coChangeGraph.filter((e) => e.confidence > 0.7);\n\t\tscore += Math.min(unstablePairs.length * 3, 15);\n\n\t\t// Hotspot file concentration\n\t\tscore += Math.min(gitlog.hotspotFiles.length * 2, 10);\n\t}\n\n\tif (structure) {\n\t\t// Test adjacency gaps\n\t\tconst testGap = 100 - structure.testAdjacency.overallTestAdjacencyScore;\n\t\tscore += Math.min(testGap * 0.3, 20);\n\n\t\t// Weakly tested hotspots\n\t\tscore += Math.min(structure.testAdjacency.weaklyTestedHotspots.length * 5, 15);\n\n\t\t// Sensitive surfaces\n\t\tscore += Math.min(structure.sensitiveSurfaces.sensitivePathCount * 3, 15);\n\t}\n\n\treturn clamp(score);\n}\n\n/**\n * Compute complexity dimension (secondary, 0-100).\n */\nfunction computeComplexity(signals: AllSignals): number {\n\tconst structure = signals.structure;\n\tif (!structure) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\tscore += Math.min(structure.configFileCount * 2, 30);\n\n\t// Monorepo depth\n\tconst packageCount = structure.testAdjacency.packageTestAdjacency.length;\n\tscore += Math.min(packageCount * 3, 30);\n\n\tscore += Math.min(structure.gitignoreComplexity, 20);\n\tscore += structure.repoType.startsWith(\"monorepo\") ? 20 : 0;\n\n\treturn clamp(score);\n}\n\n/**\n * Compute collaboration dimension (secondary, 0-100).\n */\nfunction computeCollaboration(signals: AllSignals): number {\n\tconst gitlog = signals.gitlog;\n\tif (!gitlog) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\t// Higher contributor count = more collaboration\n\tscore += Math.min(gitlog.contributorCount * 5, 30);\n\t// Merge frequency\n\tscore += Math.min(gitlog.mergeConflictFrequency * 0.5, 20);\n\t// Low bus factor = higher risk\n\tif (gitlog.busFactorEstimate <= 1) {\n\t\tscore += 30;\n\t} else if (gitlog.busFactorEstimate <= 2) {\n\t\tscore += 15;\n\t}\n\n\treturn clamp(score);\n}\n\n/**\n * Compute structural risk dimension (secondary, 0-100).\n * Sources: circular chains, high fan-in files, rule violations, orphans, edge density.\n */\nexport function calculateStructuralRisk(topology: TopologyInitSignals | null): number {\n\tif (!topology) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\n\t// Circular chains: each chain is a strong risk signal\n\tscore += Math.min(30, topology.circularChainCount * 8);\n\n\t// High fan-in ratio: proportion of files with high import count\n\tconst highFanInRatio = topology.highFanInFiles.length / Math.max(topology.moduleCount, 1);\n\tscore += Math.min(25, highFanInRatio * 500);\n\n\t// Rule violations: each violation adds modest risk\n\tscore += Math.min(20, topology.ruleViolationCount * 3);\n\n\t// Orphan ratio: disconnected files indicate structural issues\n\tconst orphanRatio = topology.orphanFileCount / Math.max(topology.moduleCount, 1);\n\tscore += Math.min(15, orphanRatio * 150);\n\n\t// Edge density: very high density indicates tight coupling\n\tconst edgeDensity = topology.edgeCount / Math.max(topology.moduleCount, 1);\n\tif (edgeDensity > 10) {\n\t\tscore += 10;\n\t}\n\n\treturn Math.min(100, Math.round(score));\n}\n\n/**\n * Compute AI exposure dimension (secondary, 0-100).\n * Checks for AI tool config files and applies tool-specific risk adjustments.\n */\nfunction computeAiExposure(repoPath?: string, toolIdentity?: { tool: string; confidence: number }): number {\n\tif (!repoPath) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\n\t// EXISTING: Check for AI tool config directories\n\tconst aiIndicators = [\n\t\t\".cursor\",\n\t\t\".github/copilot\",\n\t\t\".codeium\",\n\t\t\".continue\",\n\t\t\".aider\",\n\t\t\".windsurf\",\n\t\t\".claude\",\n\t\t\".augment\",\n\t\t\".roo\",\n\t];\n\n\tfor (const indicator of aiIndicators) {\n\t\tif (existsSync(join(repoPath, indicator))) {\n\t\t\tscore += 15;\n\t\t}\n\t}\n\n\t// NEW: Tool-specific risk adjustment from ToolIdentityService\n\tif (toolIdentity && toolIdentity.confidence >= 0.5) {\n\t\tconst TOOL_RISK_MULTIPLIERS: Record<string, number> = {\n\t\t\tdevin: 1.4,\n\t\t\t\"claude-code\": 1.2,\n\t\t\tcursor: 1.0,\n\t\t\t\"github-copilot\": 0.9,\n\t\t\twindsurf: 1.0,\n\t\t\taugment: 1.0,\n\t\t\tcline: 1.1,\n\t\t\troocode: 1.1,\n\t\t\taider: 1.0,\n\t\t};\n\t\tconst multiplier = TOOL_RISK_MULTIPLIERS[toolIdentity.tool] ?? 1.0;\n\t\tscore = Math.round(score * multiplier);\n\t}\n\n\t// NEW: Branch pattern detection (lightweight, no full git log)\n\ttry {\n\t\tconst { execSync } = require(\"node:child_process\");\n\t\tconst currentBranch = execSync(\"git rev-parse --abbrev-ref HEAD\", {\n\t\t\tcwd: repoPath,\n\t\t\ttimeout: 5000,\n\t\t\tencoding: \"utf-8\",\n\t\t}).trim();\n\n\t\t// Devin branch pattern: devin/{timestamp}-*\n\t\tif (/^devin\\/\\d{10}-/.test(currentBranch)) {\n\t\t\tscore += 10;\n\t\t}\n\t} catch {\n\t\t// Git not available - skip\n\t}\n\n\treturn clamp(score);\n}\n\n/**\n * Build the top risk drivers from signal analysis.\n */\nfunction buildTopDrivers(signals: AllSignals): RiskDriver[] {\n\tconst drivers: RiskDriver[] = [];\n\n\tif (signals.reflog && signals.reflog.resetToHEADCount > 3) {\n\t\tdrivers.push({\n\t\t\tid: \"repeated-recoveries\",\n\t\t\tlabel: \"Repeated recovery events\",\n\t\t\tscoreImpact: Math.min(signals.reflog.resetToHEADCount * 3, 40),\n\t\t\tevidence: [\n\t\t\t\t`${signals.reflog.resetToHEADCount} reset-to-HEAD events detected`,\n\t\t\t\tsignals.reflog.avgTimeBetweenResets > 0\n\t\t\t\t\t? `Average ${Math.round(signals.reflog.avgTimeBetweenResets)} minutes between resets`\n\t\t\t\t\t: \"Multiple resets in short timeframe\",\n\t\t\t],\n\t\t\tprotectiveAction: \"Increase snapshot density during volatile periods\",\n\t\t});\n\t}\n\n\tif (signals.gitlog) {\n\t\tconst rc = signals.gitlog.rollbackCorrelation;\n\t\tif (rc.resetAfterLargeCommitRate > 20 || rc.resetAfterCrossPackageRate > 20) {\n\t\t\tdrivers.push({\n\t\t\t\tid: \"rollback-correlation\",\n\t\t\t\tlabel: `Recoveries correlate with ${rc.topRecoveryTrigger.replace(/-/g, \" \")} changes`,\n\t\t\t\tscoreImpact: Math.max(rc.resetAfterLargeCommitRate, rc.resetAfterCrossPackageRate) * 0.3,\n\t\t\t\tevidence: [\n\t\t\t\t\trc.resetAfterLargeCommitRate > 0\n\t\t\t\t\t\t? `${Math.round(rc.resetAfterLargeCommitRate)}% of reverts follow large commits`\n\t\t\t\t\t\t: \"\",\n\t\t\t\t\trc.resetAfterCrossPackageRate > 0\n\t\t\t\t\t\t? `${Math.round(rc.resetAfterCrossPackageRate)}% of reverts follow cross-package changes`\n\t\t\t\t\t\t: \"\",\n\t\t\t\t].filter(Boolean),\n\t\t\t\tprotectiveAction: \"Auto-snapshot before high-diffusion commits\",\n\t\t\t});\n\t\t}\n\n\t\tif (signals.gitlog.hotspotFiles.length > 0) {\n\t\t\tconst topChurn = signals.gitlog.fileChurnRanking[0];\n\t\t\tdrivers.push({\n\t\t\t\tid: \"fragile-hotspots\",\n\t\t\t\tlabel: \"Fragile file hotspots detected\",\n\t\t\t\tscoreImpact: Math.min(signals.gitlog.hotspotFiles.length * 5, 25),\n\t\t\t\tevidence: [\n\t\t\t\t\ttopChurn\n\t\t\t\t\t\t? `${topChurn.path} changed ${topChurn.changeCount} times (${topChurn.revertCount} reverts)`\n\t\t\t\t\t\t: \"Multiple high-churn files with reverts\",\n\t\t\t\t],\n\t\t\t\tprotectiveAction: \"Watch fragile files with enhanced monitoring\",\n\t\t\t});\n\t\t}\n\n\t\tif (signals.gitlog.diffusion.crossDirectoryDiffusionRate > 20) {\n\t\t\tdrivers.push({\n\t\t\t\tid: \"cross-directory-blast\",\n\t\t\t\tlabel: \"High cross-directory change diffusion\",\n\t\t\t\tscoreImpact: Math.min(signals.gitlog.diffusion.crossDirectoryDiffusionRate * 0.5, 20),\n\t\t\t\tevidence: [\n\t\t\t\t\t`${Math.round(signals.gitlog.diffusion.crossDirectoryDiffusionRate)}% of commits span multiple directories`,\n\t\t\t\t],\n\t\t\t\tprotectiveAction: \"Track cross-directory blast radius\",\n\t\t\t});\n\t\t}\n\t}\n\n\tif (signals.structure?.testAdjacency.weaklyTestedHotspots.length) {\n\t\tdrivers.push({\n\t\t\tid: \"weak-test-coverage\",\n\t\t\tlabel: \"Weakly-tested high-churn areas\",\n\t\t\tscoreImpact: Math.min(signals.structure.testAdjacency.weaklyTestedHotspots.length * 5, 15),\n\t\t\tevidence: signals.structure.testAdjacency.weaklyTestedHotspots.map(\n\t\t\t\t(p) => `${p} has high churn but low test coverage`,\n\t\t\t),\n\t\t\tprotectiveAction: \"Prioritize snapshot protection for untested hotspots\",\n\t\t});\n\t}\n\n\t// Sort by scoreImpact descending, return top 5\n\treturn drivers.sort((a, b) => b.scoreImpact - a.scoreImpact).slice(0, 5);\n}\n\n/**\n * Build recommended configuration from signals.\n */\nfunction buildRecommendedConfig(signals: AllSignals, recoveryRisk: number): RecommendedConfig {\n\t// Protection level based on overall risk\n\tconst protectionLevel: RecommendedConfig[\"protectionLevel\"] =\n\t\trecoveryRisk > 70 ? \"maximum\" : recoveryRisk > 40 ? \"enhanced\" : \"standard\";\n\n\tconst snapshotFrequency: RecommendedConfig[\"snapshotFrequency\"] =\n\t\trecoveryRisk > 70 ? \"aggressive\" : recoveryRisk > 40 ? \"balanced\" : \"conservative\";\n\n\tconst watchTargets: WatchTarget[] = [];\n\n\t// Add hotspot files\n\tif (signals.gitlog) {\n\t\tfor (const file of signals.gitlog.hotspotFiles.slice(0, 5)) {\n\t\t\tconst churnEntry = signals.gitlog.fileChurnRanking.find((f) => f.path === file);\n\t\t\twatchTargets.push({\n\t\t\t\tpath: file,\n\t\t\t\tfileCount: 1,\n\t\t\t\treason: churnEntry?.revertCount ? \"fragile detected\" : \"high churn\",\n\t\t\t});\n\t\t}\n\n\t\t// Add co-change pair directories\n\t\tfor (const edge of signals.gitlog.coChangeGraph.slice(0, 3)) {\n\t\t\tif (edge.confidence > 0.7) {\n\t\t\t\tconst dir = edge.fileA.includes(\"/\") ? edge.fileA.substring(0, edge.fileA.lastIndexOf(\"/\")) : \".\";\n\t\t\t\tif (!watchTargets.some((t) => t.path === dir)) {\n\t\t\t\t\twatchTargets.push({\n\t\t\t\t\t\tpath: dir,\n\t\t\t\t\t\tfileCount: 2,\n\t\t\t\t\t\treason: \"co-change patterns\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add weakly-tested directories\n\tif (signals.structure) {\n\t\tfor (const hotspot of signals.structure.testAdjacency.weaklyTestedHotspots.slice(0, 3)) {\n\t\t\tif (!watchTargets.some((t) => t.path === hotspot)) {\n\t\t\t\twatchTargets.push({\n\t\t\t\t\tpath: hotspot,\n\t\t\t\t\tfileCount: 0,\n\t\t\t\t\treason: \"weak test coverage\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fallback: repos with insufficient history for hotspot/co-change detection\n\t// (no file changed > 5× and no reverts) would always show \"Watching: 0 targets\".\n\t// Seed from the top churned files (any changeCount > 0) so new repos see real\n\t// targets from day one instead of an empty state.\n\tif (watchTargets.length === 0 && signals.gitlog?.fileChurnRanking.length) {\n\t\tconst topChurned = [...signals.gitlog.fileChurnRanking]\n\t\t\t.filter((f) => f.changeCount > 0)\n\t\t\t.sort((a, b) => b.changeCount - a.changeCount)\n\t\t\t.slice(0, 5);\n\t\tfor (const file of topChurned) {\n\t\t\twatchTargets.push({\n\t\t\t\tpath: file.path,\n\t\t\t\tfileCount: 1,\n\t\t\t\treason: \"frequently changed\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst enabledFeatures: string[] = [\"real-time-protection\"];\n\tif (recoveryRisk > 50) {\n\t\tenabledFeatures.push(\"pre-commit-snapshot\");\n\t}\n\tif (signals.gitlog?.coChangeGraph.length) {\n\t\tenabledFeatures.push(\"co-change-tracking\");\n\t}\n\n\treturn { protectionLevel, snapshotFrequency, watchTargets, enabledFeatures };\n}\n\n/**\n * Determine the overall risk tier from the primary recovery risk score.\n */\nfunction riskTier(score: number): RecoveryRiskProfile[\"overallRisk\"] {\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 * Compute confidence based on how many scanners returned data.\n */\nfunction computeConfidence(signals: AllSignals): number {\n\tlet sources = 0;\n\tlet weight = 0;\n\tif (signals.reflog) {\n\t\tsources++;\n\t\tweight += 0.4;\n\t}\n\tif (signals.gitlog) {\n\t\tsources++;\n\t\tweight += 0.4;\n\t}\n\tif (signals.structure) {\n\t\tsources++;\n\t\tweight += 0.2;\n\t}\n\treturn sources === 0 ? 0.1 : weight;\n}\n\n/**\n * Return up to 20 files ranked by revert *rate* (revertCount / changeCount) for\n * bootstrap seeding. Only files that have actually been reverted at least once are\n * considered fragile by this measure - others represent busy but stable files.\n *\n * Minimum changeCount of 5 prevents noise: a file changed twice and reverted once\n * is not statistically meaningful.\n *\n * Fallback: when no file passes the revertCount > 0 filter (e.g. a brand-new repo\n * with no reverts yet), returns the top 5 most-changed files so the array is never\n * empty and the TUI always has seed data to display.\n *\n * NOTE: artifact files (lockfiles, package.json, generated outputs) are already\n * excluded at the fileChurnRanking source in gitlog-analyzer.ts - they will never\n * appear here.\n */\nfunction buildTopFragileFiles(signals: AllSignals): Array<{ path: string; changeCount: number; revertCount: number }> {\n\tif (!signals.gitlog?.fileChurnRanking.length) {\n\t\treturn [];\n\t}\n\n\tconst withReverts = [...signals.gitlog.fileChurnRanking]\n\t\t.filter((f) => f.changeCount >= 3 && f.revertCount > 0)\n\t\t.sort((a, b) => b.revertCount / b.changeCount - a.revertCount / a.changeCount)\n\t\t.slice(0, 20)\n\t\t.map((f) => ({ path: f.path, changeCount: f.changeCount, revertCount: f.revertCount }));\n\n\tif (withReverts.length > 0) {\n\t\treturn withReverts;\n\t}\n\n\t// Fallback: no reverted files - return top churned as seed data\n\treturn [...signals.gitlog.fileChurnRanking]\n\t\t.filter((f) => f.changeCount > 0)\n\t\t.sort((a, b) => b.changeCount - a.changeCount)\n\t\t.slice(0, 5)\n\t\t.map((f) => ({ path: f.path, changeCount: f.changeCount, revertCount: 0 }));\n}\n\n/**\n * Find the single most fragile file ranked by revert rate (revertCount / changeCount).\n * Returns null when no file has been reverted at least once with changeCount >= 5.\n * Consistent with buildTopFragileFiles - callers already handle null.\n */\nfunction findTopFragileFile(signals: AllSignals): string | null {\n\tif (!signals.gitlog?.fileChurnRanking.length) {\n\t\treturn null;\n\t}\n\n\tconst ranked = [...signals.gitlog.fileChurnRanking]\n\t\t.filter((f) => f.changeCount >= 3 && f.revertCount > 0)\n\t\t.sort((a, b) => b.revertCount / b.changeCount - a.revertCount / a.changeCount);\n\n\treturn ranked.length > 0 ? ranked[0].path : null;\n}\n\n/**\n * Confidence weight ramps 0→1 as changeCount grows from 0 to MIN_SAMPLE.\n * A file changed fewer than MIN_SAMPLE times gets a proportionally reduced score\n * so low-sample files (2 changes, 1 revert = 50% rate) don't outrank\n * high-sample files (40 changes, 12 reverts = 30% rate).\n */\nconst FRAGILITY_MIN_SAMPLE = 5;\nfunction confidenceWeight(changeCount: number): number {\n\treturn Math.min(changeCount / FRAGILITY_MIN_SAMPLE, 1);\n}\n\n/**\n * Determine whether a file should be excluded from fragility ranking.\n * Excluded files are recorded in the fragility array but excluded=true,\n * so they are not surfaced as hotspots.\n */\nfunction isExcludedFromFragilityRanking(filePath: string): boolean {\n\t// isArtifactFile already covers lockfiles, package.json, generated outputs\n\treturn isArtifactFile(filePath);\n}\n\n/**\n * Build the full per-file fragility array from the git churn ranking.\n * Returns ALL files (including excluded) so the generated.fragility array\n * is complete. Callers filter by excluded=false to get ranked hotspots.\n */\nfunction buildFragilityArray(signals: AllSignals): FragilityEntry[] {\n\tif (!signals.gitlog?.fileChurnRanking.length) {\n\t\treturn [];\n\t}\n\treturn signals.gitlog.fileChurnRanking.map((f: FileChurnEntry) => {\n\t\tconst excluded = isExcludedFromFragilityRanking(f.path);\n\t\tconst revertRate = f.changeCount > 0 ? f.revertCount / f.changeCount : 0;\n\t\tconst fragilityScore = excluded ? 0 : revertRate * confidenceWeight(f.changeCount);\n\t\treturn {\n\t\t\tfile: f.path,\n\t\t\tchangeCount: f.changeCount,\n\t\t\trevertCount: f.revertCount,\n\t\t\trevertRate,\n\t\t\tfragilityScore,\n\t\t\texcluded,\n\t\t};\n\t});\n}\n\n/**\n * Build co-change pairs for persistence.\n * A pair is marked generated=true when BOTH files are artifact files.\n * These are recorded but not surfaced as real coupling signals.\n */\nfunction buildCoChangeArray(signals: AllSignals): CoChangePersisted[] {\n\tif (!signals.gitlog?.coChangeGraph.length) {\n\t\treturn [];\n\t}\n\treturn signals.gitlog.coChangeGraph.map((edge: CoChangeEdge) => ({\n\t\tfiles: [edge.fileA, edge.fileB] as [string, string],\n\t\trate: edge.confidence,\n\t\toccurrences: edge.coChangeCount,\n\t\tgenerated: isArtifactFile(edge.fileA) && isArtifactFile(edge.fileB),\n\t}));\n}\n\nexport function synthesize(signals: AllSignals, baseline?: BaselineResponse, repoPath?: string): RecoveryRiskProfile {\n\tconst { insights, locked } = generateInsights(signals, baseline);\n\n\tconst recoveryRisk = computeRecoveryRisk(signals);\n\tconst changeVolatility = computeChangeVolatility(signals);\n\tconst workflowFragility = computeWorkflowFragility(signals);\n\n\treturn {\n\t\toverallRisk: riskTier(recoveryRisk),\n\t\tconfidence: computeConfidence(signals),\n\t\tprimary: {\n\t\t\trecoveryRisk,\n\t\t\tchangeVolatility,\n\t\t\tworkflowFragility,\n\t\t},\n\t\tsecondary: {\n\t\t\tcomplexity: computeComplexity(signals),\n\t\t\tcollaboration: computeCollaboration(signals),\n\t\t\taiExposure: computeAiExposure(repoPath, undefined), // toolIdentity passed from daemon\n\t\t\tstructuralRisk: calculateStructuralRisk(signals.topology),\n\t\t},\n\t\ttopDrivers: buildTopDrivers(signals),\n\t\tinsights,\n\t\tlockedInsights: [locked],\n\t\trecommendedConfig: buildRecommendedConfig(signals, recoveryRisk),\n\t\ttopFragileFile: findTopFragileFile(signals),\n\t\ttopFragileFiles: buildTopFragileFiles(signals),\n\t\tcoChange: buildCoChangeArray(signals),\n\t\tfragility: buildFragilityArray(signals),\n\t};\n}\n","/**\n * runInitScan - Orchestrator for the full init scan pipeline\n *\n * Coordinates reflog, gitlog, structure, and (optionally) topology scanners,\n * then synthesizes a RecoveryRiskProfile. Used by the CLI TUI Scanning component.\n */\n\nimport type { TopologyProvider } from \"../shared/topology-provider.js\";\nimport { analyzeGitLog } from \"./gitlog-analyzer.js\";\nimport { scanReflog } from \"./reflog-scanner.js\";\nimport { detectStructure } from \"./repo-structure.js\";\nimport type { ScanEventEmitter } from \"./scan-events.js\";\nimport { synthesize } from \"./synthesizer.js\";\nimport type { DiscoveryEmitter, RecoveryRiskProfile, TopologyInitSignals } from \"./types.js\";\n\nexport interface RunInitScanOptions {\n\trepoPath: string;\n\temitter?: DiscoveryEmitter | ScanEventEmitter;\n\ttopologyProvider?: TopologyProvider;\n}\n\n/**\n * Run the topology scan phase via the injected provider.\n * Emits progress events and discoveries for notable findings.\n * Returns null on failure (graceful degradation).\n */\nasync function runTopologyScan(\n\tprovider: TopologyProvider,\n\trepoPath: string,\n\temitter?: DiscoveryEmitter | ScanEventEmitter,\n): Promise<TopologyInitSignals | null> {\n\tconst scanEmitter = emitter as ScanEventEmitter | undefined;\n\n\tscanEmitter?.emitProgress?.({ stage: \"topology\", progress: 0, message: \"Analyzing dependencies...\" });\n\n\ttry {\n\t\tconst result = await provider.scan?.(repoPath);\n\n\t\tif (!result) {\n\t\t\tscanEmitter?.emitProgress?.({\n\t\t\t\tstage: \"topology\",\n\t\t\t\tprogress: 100,\n\t\t\t\tmessage: \"Topology scan returned no data\",\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\t// Emit discoveries for high-fan-in files\n\t\tfor (const file of result.highFanInFiles.slice(0, 3)) {\n\t\t\temitter?.emitDiscovery?.({\n\t\t\t\tsource: \"structure\",\n\t\t\t\tconfidence: 0.9,\n\t\t\t\tmessage: `${file.path} is imported by ${file.importedByCount} files`,\n\t\t\t\tdetailMessage: \"Vreko will treat this as a structural hotspot with enhanced blast radius monitoring\",\n\t\t\t\trelatedInsightId: \"fused-structural-temporal-hotspot\",\n\t\t\t});\n\t\t}\n\n\t\t// Emit discovery for circular chains\n\t\tif (result.circularChainCount > 0) {\n\t\t\temitter?.emitDiscovery?.({\n\t\t\t\tsource: \"structure\",\n\t\t\t\tconfidence: 0.95,\n\t\t\t\tmessage: `${result.circularChainCount} circular dependency chain(s) detected`,\n\t\t\t\tdetailMessage: \"Circular dependencies increase change risk - Vreko will monitor these chains closely\",\n\t\t\t});\n\t\t}\n\n\t\tscanEmitter?.emitProgress?.({\n\t\t\tstage: \"topology\",\n\t\t\tprogress: 100,\n\t\t\tmessage: `Topology: ${result.moduleCount} modules, ${result.edgeCount} edges in ${result.cruiseDurationMs}ms`,\n\t\t});\n\n\t\treturn result;\n\t} catch (_err) {\n\t\tscanEmitter?.emitProgress?.({\n\t\t\tstage: \"topology\",\n\t\t\tprogress: 100,\n\t\t\tmessage: \"Topology scan failed (non-fatal)\",\n\t\t});\n\t\treturn null;\n\t}\n}\n\n/**\n * Run the full init scan pipeline for a given repository path.\n * Runs reflog, gitlog, structure, and (optionally) topology scanners in parallel,\n * then synthesizes results.\n * Emits progress/finding/complete events if a ScanEventEmitter is provided.\n */\nexport async function runInitScan({\n\trepoPath,\n\temitter,\n\ttopologyProvider,\n}: RunInitScanOptions): Promise<RecoveryRiskProfile> {\n\tconst scanEmitter = emitter as ScanEventEmitter | undefined;\n\n\tconst [reflogSignals, gitlogSignals, structureSignals, topologySignals] = await Promise.all([\n\t\tscanReflog(repoPath, emitter),\n\t\tanalyzeGitLog(repoPath, emitter),\n\t\tdetectStructure(repoPath, emitter),\n\t\ttopologyProvider?.scan ? runTopologyScan(topologyProvider, repoPath, emitter) : Promise.resolve(null),\n\t]);\n\n\tscanEmitter?.emitProgress?.({ stage: \"synthesis\", progress: 0, message: \"Synthesizing risk profile...\" });\n\n\tconst profile = synthesize({\n\t\treflog: reflogSignals,\n\t\tgitlog: gitlogSignals,\n\t\tstructure: structureSignals,\n\t\ttopology: topologySignals,\n\t});\n\n\tscanEmitter?.emitProgress?.({ stage: \"synthesis\", progress: 100, message: \"Scan complete\" });\n\tscanEmitter?.emitComplete?.(profile);\n\n\treturn profile;\n}\n","/**\n * Init-scan pipeline barrel export.\n *\n * Orchestrates the full intelligence scanning pipeline:\n * scanners → emitter → synthesizer → RecoveryRiskProfile.\n *\n * @example\n * ```typescript\n * import { runInitScan } from \"@vreko/intelligence/init-scan\";\n *\n * const { profile, emitter } = await runInitScan(\"/path/to/repo\");\n * ```\n */\n\nexport type { TopologyProvider } from \"../shared/topology-provider.js\";\nexport { createDiscoveryEmitter, DiscoveryEmitter } from \"./discovery-emitter.js\";\nexport { analyzeGitLog } from \"./gitlog-analyzer.js\";\nexport { generateInsights } from \"./insight-generator.js\";\nexport { scanReflog } from \"./reflog-scanner.js\";\nexport { detectStructure } from \"./repo-structure.js\";\nexport { computeDelta, readScanCache, writeScanCache } from \"./scan-cache.js\";\nexport { createScanEventEmitter, ScanEventEmitter } from \"./scan-events.js\";\nexport { acquireScanLock, isCacheValid, isScanInProgress, resolveCachePath } from \"./scan-guards.js\";\nexport { synthesize } from \"./synthesizer.js\";\nexport type {\n\tAllSignals,\n\tBaselineResponse,\n\tCoChangePersisted,\n\tDiscoveryEmitter as IDiscoveryEmitter,\n\tEarlyDiscovery,\n\tFragilityEntry,\n\tGitLogSignals,\n\tInsight,\n\tLockedInsight,\n\tRecommendedConfig,\n\tRecoveryRiskProfile,\n\tReflogSignals,\n\tRepoStructure,\n\tRiskDriver,\n\tScanCache,\n\tTopologyInitSignals,\n\tWatchTarget,\n} from \"./types\";\n\nimport type { TopologyProvider } from \"../shared/topology-provider.js\";\nimport type { DiscoveryEmitter } from \"./discovery-emitter.js\";\nimport { createDiscoveryEmitter } from \"./discovery-emitter.js\";\nimport { analyzeGitLog } from \"./gitlog-analyzer.js\";\nimport { scanReflog } from \"./reflog-scanner.js\";\nimport { detectStructure } from \"./repo-structure.js\";\nimport { runInitScan as runInitScanWithEvents } from \"./run-init-scan.js\";\nimport type { ScanEventEmitter } from \"./scan-events.js\";\nimport { synthesize } from \"./synthesizer.js\";\nimport type { RecoveryRiskProfile } from \"./types\";\n\nexport interface RunInitScanOptions {\n\trepoPath: string;\n\temitter?: DiscoveryEmitter | ScanEventEmitter;\n\ttopologyProvider?: TopologyProvider;\n}\n\n/**\n * Run the full init-scan pipeline against a repository.\n *\n * Creates a DiscoveryEmitter, runs all four scanners in parallel\n * (reflog, gitlog, repo structure, and optionally topology), collects\n * AllSignals, calls synthesize(), and returns the profile + emitter.\n *\n * The emitter is returned so the TUI can subscribe to live discoveries\n * during the scan (scanners run async, discoveries emit before profile is ready).\n */\nexport async function runInitScan(\n\trepoPath: string,\n\temitter?: DiscoveryEmitter,\n): Promise<{ profile: RecoveryRiskProfile; emitter: DiscoveryEmitter }>;\nexport async function runInitScan(options: RunInitScanOptions): Promise<RecoveryRiskProfile>;\nexport async function runInitScan(\n\tinput: string | RunInitScanOptions,\n\temitter?: DiscoveryEmitter,\n): Promise<{ profile: RecoveryRiskProfile; emitter: DiscoveryEmitter } | RecoveryRiskProfile> {\n\tif (typeof input !== \"string\") {\n\t\treturn runInitScanWithEvents({\n\t\t\trepoPath: input.repoPath,\n\t\t\temitter: input.emitter,\n\t\t\ttopologyProvider: input.topologyProvider,\n\t\t});\n\t}\n\n\tconst repoPath = input;\n\tconst em = emitter ?? createDiscoveryEmitter();\n\n\tconst [reflog, gitlog, structure] = await Promise.all([\n\t\tscanReflog(repoPath, em),\n\t\tanalyzeGitLog(repoPath, em),\n\t\tdetectStructure(repoPath, em),\n\t]);\n\n\tconst signals = { reflog, gitlog, structure, topology: null };\n\tconst profile = synthesize(signals, undefined, repoPath);\n\n\treturn { profile, emitter: em };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ export { DAEMON_GENERATION, connectServiceClient, createServiceClient, createSessionViaDaemon, endSessionViaDaemon, formatBytes, formatDuration, gcLearningsViaDaemon, getDaemonVersion, getLogPath, getServicePidPath as getPidPath, getServicePidPath, getServiceSocketPath, getSessionStatusViaDaemon, getServiceSocketPath as getSocketPath, isServiceRunning as isDaemonRunning, isServiceHealthy, isServiceRunning, listLearningsViaDaemon, pruneLearningsViaDaemon, readServicePid, searchLearningsViaDaemon } from './chunk-GSUGROXB.js';
3
+ import './chunk-VTSNRV3V.js';
4
+ import './chunk-EWOJGXRX.js';
5
+
6
+ process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
7
+ //# sourceMappingURL=local-service-adapter-6KNN6WQL.js.map
8
+ //# sourceMappingURL=local-service-adapter-6KNN6WQL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"local-service-adapter-6KNN6WQL.js"}