@vibecheckai/cli 2.8.2 → 3.0.0

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 (454) hide show
  1. package/README.md +8 -8
  2. package/bin/_deprecations.js +35 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/guardrail.js +834 -0
  6. package/bin/runners/cli-utils.js +1070 -0
  7. package/bin/runners/context/ai-task-decomposer.js +337 -0
  8. package/bin/runners/context/analyzer.js +462 -0
  9. package/bin/runners/context/api-contracts.js +427 -0
  10. package/bin/runners/context/context-diff.js +342 -0
  11. package/bin/runners/context/context-pruner.js +291 -0
  12. package/bin/runners/context/dependency-graph.js +414 -0
  13. package/bin/runners/context/generators/claude.js +107 -0
  14. package/bin/runners/context/generators/codex.js +108 -0
  15. package/bin/runners/context/generators/copilot.js +119 -0
  16. package/bin/runners/context/generators/cursor.js +514 -0
  17. package/bin/runners/context/generators/mcp.js +151 -0
  18. package/bin/runners/context/generators/windsurf.js +180 -0
  19. package/bin/runners/context/git-context.js +302 -0
  20. package/bin/runners/context/index.js +1042 -0
  21. package/bin/runners/context/insights.js +173 -0
  22. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  23. package/bin/runners/context/mcp-server/index.js +1176 -0
  24. package/bin/runners/context/mcp-server/package.json +24 -0
  25. package/bin/runners/context/memory.js +200 -0
  26. package/bin/runners/context/monorepo.js +215 -0
  27. package/bin/runners/context/multi-repo-federation.js +404 -0
  28. package/bin/runners/context/patterns.js +253 -0
  29. package/bin/runners/context/proof-context.js +972 -0
  30. package/bin/runners/context/security-scanner.js +303 -0
  31. package/bin/runners/context/semantic-search.js +350 -0
  32. package/bin/runners/context/shared.js +264 -0
  33. package/bin/runners/context/team-conventions.js +310 -0
  34. package/bin/runners/lib/ai-bridge.js +416 -0
  35. package/bin/runners/lib/analysis-core.js +271 -0
  36. package/bin/runners/lib/analyzers.js +541 -0
  37. package/bin/runners/lib/audit-bridge.js +391 -0
  38. package/bin/runners/lib/auth-truth.js +193 -0
  39. package/bin/runners/lib/auth.js +215 -0
  40. package/bin/runners/lib/backup.js +62 -0
  41. package/bin/runners/lib/billing.js +107 -0
  42. package/bin/runners/lib/claims.js +118 -0
  43. package/bin/runners/lib/cli-ui.js +540 -0
  44. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  45. package/bin/runners/lib/compliance-bridge.js +165 -0
  46. package/bin/runners/lib/contracts/auth-contract.js +194 -0
  47. package/bin/runners/lib/contracts/env-contract.js +178 -0
  48. package/bin/runners/lib/contracts/external-contract.js +198 -0
  49. package/bin/runners/lib/contracts/guard.js +168 -0
  50. package/bin/runners/lib/contracts/index.js +89 -0
  51. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  52. package/bin/runners/lib/contracts/route-contract.js +192 -0
  53. package/bin/runners/lib/detect.js +89 -0
  54. package/bin/runners/lib/doctor/autofix.js +254 -0
  55. package/bin/runners/lib/doctor/index.js +37 -0
  56. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  57. package/bin/runners/lib/doctor/modules/index.js +46 -0
  58. package/bin/runners/lib/doctor/modules/network.js +250 -0
  59. package/bin/runners/lib/doctor/modules/project.js +312 -0
  60. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  61. package/bin/runners/lib/doctor/modules/security.js +348 -0
  62. package/bin/runners/lib/doctor/modules/system.js +213 -0
  63. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  64. package/bin/runners/lib/doctor/reporter.js +262 -0
  65. package/bin/runners/lib/doctor/service.js +262 -0
  66. package/bin/runners/lib/doctor/types.js +113 -0
  67. package/bin/runners/lib/doctor/ui.js +263 -0
  68. package/bin/runners/lib/doctor-enhanced.js +233 -0
  69. package/bin/runners/lib/doctor-v2.js +608 -0
  70. package/bin/runners/lib/enforcement.js +72 -0
  71. package/bin/runners/lib/enterprise-detect.js +603 -0
  72. package/bin/runners/lib/enterprise-init.js +942 -0
  73. package/bin/runners/lib/entitlements-v2.js +381 -0
  74. package/bin/runners/lib/entitlements.generated.js +0 -0
  75. package/bin/runners/lib/entitlements.js +332 -0
  76. package/bin/runners/lib/env-template.js +66 -0
  77. package/bin/runners/lib/env.js +189 -0
  78. package/bin/runners/lib/error-handler.js +320 -0
  79. package/bin/runners/lib/firewall-prompt.js +50 -0
  80. package/bin/runners/lib/graph/graph-builder.js +265 -0
  81. package/bin/runners/lib/graph/html-renderer.js +413 -0
  82. package/bin/runners/lib/graph/index.js +32 -0
  83. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  84. package/bin/runners/lib/graph/static-extractor.js +518 -0
  85. package/bin/runners/lib/init-wizard.js +308 -0
  86. package/bin/runners/lib/json-output.js +76 -0
  87. package/bin/runners/lib/llm.js +75 -0
  88. package/bin/runners/lib/meter.js +61 -0
  89. package/bin/runners/lib/missions/evidence.js +126 -0
  90. package/bin/runners/lib/missions/plan.js +69 -0
  91. package/bin/runners/lib/missions/templates.js +147 -0
  92. package/bin/runners/lib/patch.js +40 -0
  93. package/bin/runners/lib/permissions/auth-model.js +213 -0
  94. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  95. package/bin/runners/lib/permissions/index.js +45 -0
  96. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  97. package/bin/runners/lib/pkgjson.js +28 -0
  98. package/bin/runners/lib/preflight.js +142 -0
  99. package/bin/runners/lib/reality-findings.js +84 -0
  100. package/bin/runners/lib/redact.js +29 -0
  101. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  102. package/bin/runners/lib/replay/index.js +263 -0
  103. package/bin/runners/lib/replay/player.js +348 -0
  104. package/bin/runners/lib/replay/recorder.js +331 -0
  105. package/bin/runners/lib/report-engine.js +447 -0
  106. package/bin/runners/lib/report-html.js +1117 -0
  107. package/bin/runners/lib/report-templates.js +964 -0
  108. package/bin/runners/lib/route-detection.js +1140 -0
  109. package/bin/runners/lib/route-truth.js +477 -0
  110. package/bin/runners/lib/sandbox/index.js +59 -0
  111. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  112. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  113. package/bin/runners/lib/sandbox/worktree.js +174 -0
  114. package/bin/runners/lib/scan-cache.js +330 -0
  115. package/bin/runners/lib/scan-output-schema.js +344 -0
  116. package/bin/runners/lib/score-history.js +282 -0
  117. package/bin/runners/lib/security-bridge.js +249 -0
  118. package/bin/runners/lib/server-usage.js +513 -0
  119. package/bin/runners/lib/share-pack.js +239 -0
  120. package/bin/runners/lib/snippets.js +67 -0
  121. package/bin/runners/lib/truth.js +667 -0
  122. package/bin/runners/lib/unified-output.js +189 -0
  123. package/bin/runners/lib/validate-patch.js +156 -0
  124. package/bin/runners/lib/verification.js +345 -0
  125. package/bin/runners/reality/engine.js +917 -0
  126. package/bin/runners/reality/flows.js +122 -0
  127. package/bin/runners/reality/report.js +378 -0
  128. package/bin/runners/reality/session.js +193 -0
  129. package/bin/runners/runAIAgent.js +2 -0
  130. package/bin/runners/runAudit.js +2 -0
  131. package/bin/runners/runAuth.js +106 -0
  132. package/bin/runners/runAutopilot.js +2 -0
  133. package/bin/runners/runBadge.js +2 -0
  134. package/bin/runners/runCertify.js +2 -0
  135. package/bin/runners/runClaimVerifier.js +483 -0
  136. package/bin/runners/runContext.js +56 -0
  137. package/bin/runners/runContextCompiler.js +385 -0
  138. package/bin/runners/runCtx.js +187 -0
  139. package/bin/runners/runCtxGuard.js +176 -0
  140. package/bin/runners/runCtxSync.js +116 -0
  141. package/bin/runners/runDashboard.js +10 -0
  142. package/bin/runners/runDoctor.js +245 -0
  143. package/bin/runners/runEnhancedShip.js +2 -0
  144. package/bin/runners/runFix.js +735 -0
  145. package/bin/runners/runFixPacks.js +2 -0
  146. package/bin/runners/runGate.js +17 -0
  147. package/bin/runners/runGraph.js +283 -0
  148. package/bin/runners/runInit.js +260 -0
  149. package/bin/runners/runInitGha.js +101 -0
  150. package/bin/runners/runInstall.js +76 -0
  151. package/bin/runners/runInteractive.js +388 -0
  152. package/bin/runners/runLaunch.js +2 -0
  153. package/bin/runners/runMcp.js +19 -0
  154. package/bin/runners/runMdc.js +2 -0
  155. package/bin/runners/runMissionGenerator.js +282 -0
  156. package/bin/runners/runNaturalLanguage.js +3 -0
  157. package/bin/runners/runPR.js +96 -0
  158. package/bin/runners/runPermissions.js +290 -0
  159. package/bin/runners/runPromptFirewall.js +211 -0
  160. package/bin/runners/runProof.js +2 -0
  161. package/bin/runners/runProve.js +392 -0
  162. package/bin/runners/runReality.js +489 -0
  163. package/bin/runners/runRealitySniff.js +2 -0
  164. package/bin/runners/runReplay.js +469 -0
  165. package/bin/runners/runReport.js +478 -0
  166. package/bin/runners/runScan.js +835 -0
  167. package/bin/runners/runShare.js +34 -0
  168. package/bin/runners/runShip.js +1062 -0
  169. package/bin/runners/runStatus.js +136 -0
  170. package/bin/runners/runTruthpack.js +634 -0
  171. package/bin/runners/runUpgrade.js +2 -0
  172. package/bin/runners/runValidate.js +2 -0
  173. package/bin/runners/runVerifyAgentOutput.js +2 -0
  174. package/bin/runners/runWatch.js +230 -0
  175. package/bin/runners/utils.js +360 -0
  176. package/bin/scan.js +612 -0
  177. package/bin/vibecheck.js +834 -0
  178. package/package.json +11 -11
  179. package/dist/autopatch/verified-autopatch.d.ts +0 -111
  180. package/dist/autopatch/verified-autopatch.d.ts.map +0 -1
  181. package/dist/autopatch/verified-autopatch.js +0 -503
  182. package/dist/autopatch/verified-autopatch.js.map +0 -1
  183. package/dist/bundles/index.js +0 -8
  184. package/dist/bundles/vibecheck-core.js +0 -25799
  185. package/dist/bundles/vibecheck-security.js +0 -208693
  186. package/dist/bundles/vibecheck-ship.js +0 -2318
  187. package/dist/commands/baseline.d.ts +0 -7
  188. package/dist/commands/baseline.d.ts.map +0 -1
  189. package/dist/commands/baseline.js +0 -79
  190. package/dist/commands/baseline.js.map +0 -1
  191. package/dist/commands/cache.d.ts +0 -13
  192. package/dist/commands/cache.d.ts.map +0 -1
  193. package/dist/commands/cache.js +0 -165
  194. package/dist/commands/cache.js.map +0 -1
  195. package/dist/commands/checkpoint.d.ts +0 -8
  196. package/dist/commands/checkpoint.d.ts.map +0 -1
  197. package/dist/commands/checkpoint.js +0 -35
  198. package/dist/commands/checkpoint.js.map +0 -1
  199. package/dist/commands/doctor.d.ts +0 -17
  200. package/dist/commands/doctor.d.ts.map +0 -1
  201. package/dist/commands/doctor.js +0 -226
  202. package/dist/commands/doctor.js.map +0 -1
  203. package/dist/commands/evidence.d.ts +0 -45
  204. package/dist/commands/evidence.d.ts.map +0 -1
  205. package/dist/commands/evidence.js +0 -197
  206. package/dist/commands/evidence.js.map +0 -1
  207. package/dist/commands/explain.d.ts +0 -8
  208. package/dist/commands/explain.d.ts.map +0 -1
  209. package/dist/commands/explain.js +0 -52
  210. package/dist/commands/explain.js.map +0 -1
  211. package/dist/commands/fix-consolidated.d.ts +0 -19
  212. package/dist/commands/fix-consolidated.d.ts.map +0 -1
  213. package/dist/commands/fix-consolidated.js +0 -165
  214. package/dist/commands/fix-consolidated.js.map +0 -1
  215. package/dist/commands/index.d.ts +0 -8
  216. package/dist/commands/index.d.ts.map +0 -1
  217. package/dist/commands/index.js +0 -15
  218. package/dist/commands/index.js.map +0 -1
  219. package/dist/commands/init.d.ts +0 -8
  220. package/dist/commands/init.d.ts.map +0 -1
  221. package/dist/commands/init.js +0 -125
  222. package/dist/commands/init.js.map +0 -1
  223. package/dist/commands/launcher.d.ts +0 -10
  224. package/dist/commands/launcher.d.ts.map +0 -1
  225. package/dist/commands/launcher.js +0 -174
  226. package/dist/commands/launcher.js.map +0 -1
  227. package/dist/commands/on.d.ts +0 -8
  228. package/dist/commands/on.d.ts.map +0 -1
  229. package/dist/commands/on.js +0 -123
  230. package/dist/commands/on.js.map +0 -1
  231. package/dist/commands/replay.d.ts +0 -8
  232. package/dist/commands/replay.d.ts.map +0 -1
  233. package/dist/commands/replay.js +0 -52
  234. package/dist/commands/replay.js.map +0 -1
  235. package/dist/commands/scan-consolidated.d.ts +0 -61
  236. package/dist/commands/scan-consolidated.d.ts.map +0 -1
  237. package/dist/commands/scan-consolidated.js +0 -243
  238. package/dist/commands/scan-consolidated.js.map +0 -1
  239. package/dist/commands/scan-secrets.d.ts +0 -47
  240. package/dist/commands/scan-secrets.d.ts.map +0 -1
  241. package/dist/commands/scan-secrets.js +0 -225
  242. package/dist/commands/scan-secrets.js.map +0 -1
  243. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +0 -41
  244. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +0 -1
  245. package/dist/commands/scan-vulnerabilities-enhanced.js +0 -368
  246. package/dist/commands/scan-vulnerabilities-enhanced.js.map +0 -1
  247. package/dist/commands/scan-vulnerabilities-osv.d.ts +0 -58
  248. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +0 -1
  249. package/dist/commands/scan-vulnerabilities-osv.js +0 -722
  250. package/dist/commands/scan-vulnerabilities-osv.js.map +0 -1
  251. package/dist/commands/scan-vulnerabilities.d.ts +0 -32
  252. package/dist/commands/scan-vulnerabilities.d.ts.map +0 -1
  253. package/dist/commands/scan-vulnerabilities.js +0 -283
  254. package/dist/commands/scan-vulnerabilities.js.map +0 -1
  255. package/dist/commands/secrets-allowlist.d.ts +0 -7
  256. package/dist/commands/secrets-allowlist.d.ts.map +0 -1
  257. package/dist/commands/secrets-allowlist.js +0 -85
  258. package/dist/commands/secrets-allowlist.js.map +0 -1
  259. package/dist/commands/ship-consolidated.d.ts +0 -58
  260. package/dist/commands/ship-consolidated.d.ts.map +0 -1
  261. package/dist/commands/ship-consolidated.js +0 -515
  262. package/dist/commands/ship-consolidated.js.map +0 -1
  263. package/dist/commands/stats.d.ts +0 -8
  264. package/dist/commands/stats.d.ts.map +0 -1
  265. package/dist/commands/stats.js +0 -134
  266. package/dist/commands/stats.js.map +0 -1
  267. package/dist/commands/upgrade.d.ts +0 -8
  268. package/dist/commands/upgrade.d.ts.map +0 -1
  269. package/dist/commands/upgrade.js +0 -30
  270. package/dist/commands/upgrade.js.map +0 -1
  271. package/dist/fix/applicator.d.ts +0 -44
  272. package/dist/fix/applicator.d.ts.map +0 -1
  273. package/dist/fix/applicator.js +0 -144
  274. package/dist/fix/applicator.js.map +0 -1
  275. package/dist/fix/backup.d.ts +0 -38
  276. package/dist/fix/backup.d.ts.map +0 -1
  277. package/dist/fix/backup.js +0 -154
  278. package/dist/fix/backup.js.map +0 -1
  279. package/dist/fix/engine.d.ts +0 -55
  280. package/dist/fix/engine.d.ts.map +0 -1
  281. package/dist/fix/engine.js +0 -285
  282. package/dist/fix/engine.js.map +0 -1
  283. package/dist/fix/index.d.ts +0 -5
  284. package/dist/fix/index.d.ts.map +0 -1
  285. package/dist/fix/index.js +0 -12
  286. package/dist/fix/index.js.map +0 -1
  287. package/dist/fix/interactive.d.ts +0 -22
  288. package/dist/fix/interactive.d.ts.map +0 -1
  289. package/dist/fix/interactive.js +0 -172
  290. package/dist/fix/interactive.js.map +0 -1
  291. package/dist/formatters/index.d.ts +0 -6
  292. package/dist/formatters/index.d.ts.map +0 -1
  293. package/dist/formatters/index.js +0 -11
  294. package/dist/formatters/index.js.map +0 -1
  295. package/dist/formatters/sarif-enhanced.d.ts +0 -78
  296. package/dist/formatters/sarif-enhanced.d.ts.map +0 -1
  297. package/dist/formatters/sarif-enhanced.js +0 -144
  298. package/dist/formatters/sarif-enhanced.js.map +0 -1
  299. package/dist/formatters/sarif-v2.d.ts +0 -121
  300. package/dist/formatters/sarif-v2.d.ts.map +0 -1
  301. package/dist/formatters/sarif-v2.js +0 -356
  302. package/dist/formatters/sarif-v2.js.map +0 -1
  303. package/dist/formatters/sarif.d.ts +0 -72
  304. package/dist/formatters/sarif.d.ts.map +0 -1
  305. package/dist/formatters/sarif.js +0 -146
  306. package/dist/formatters/sarif.js.map +0 -1
  307. package/dist/index.d.ts +0 -61
  308. package/dist/index.d.ts.map +0 -1
  309. package/dist/index.js +0 -4388
  310. package/dist/index.js.map +0 -1
  311. package/dist/init/ci-generator.d.ts +0 -18
  312. package/dist/init/ci-generator.d.ts.map +0 -1
  313. package/dist/init/ci-generator.js +0 -317
  314. package/dist/init/ci-generator.js.map +0 -1
  315. package/dist/init/detect-framework.d.ts +0 -15
  316. package/dist/init/detect-framework.d.ts.map +0 -1
  317. package/dist/init/detect-framework.js +0 -301
  318. package/dist/init/detect-framework.js.map +0 -1
  319. package/dist/init/hooks-installer.d.ts +0 -22
  320. package/dist/init/hooks-installer.d.ts.map +0 -1
  321. package/dist/init/hooks-installer.js +0 -310
  322. package/dist/init/hooks-installer.js.map +0 -1
  323. package/dist/init/index.d.ts +0 -8
  324. package/dist/init/index.d.ts.map +0 -1
  325. package/dist/init/index.js +0 -22
  326. package/dist/init/index.js.map +0 -1
  327. package/dist/init/templates.d.ts +0 -402
  328. package/dist/init/templates.d.ts.map +0 -1
  329. package/dist/init/templates.js +0 -240
  330. package/dist/init/templates.js.map +0 -1
  331. package/dist/mcp/server.d.ts +0 -12
  332. package/dist/mcp/server.d.ts.map +0 -1
  333. package/dist/mcp/server.js +0 -42
  334. package/dist/mcp/server.js.map +0 -1
  335. package/dist/mcp/telemetry.d.ts +0 -40
  336. package/dist/mcp/telemetry.d.ts.map +0 -1
  337. package/dist/mcp/telemetry.js +0 -98
  338. package/dist/mcp/telemetry.js.map +0 -1
  339. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +0 -32
  340. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +0 -1
  341. package/dist/reality/no-dead-buttons/button-sweep-generator.js +0 -236
  342. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +0 -1
  343. package/dist/reality/no-dead-buttons/index.d.ts +0 -11
  344. package/dist/reality/no-dead-buttons/index.d.ts.map +0 -1
  345. package/dist/reality/no-dead-buttons/index.js +0 -18
  346. package/dist/reality/no-dead-buttons/index.js.map +0 -1
  347. package/dist/reality/no-dead-buttons/static-scanner.d.ts +0 -34
  348. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +0 -1
  349. package/dist/reality/no-dead-buttons/static-scanner.js +0 -230
  350. package/dist/reality/no-dead-buttons/static-scanner.js.map +0 -1
  351. package/dist/reality/reality-graph.d.ts +0 -192
  352. package/dist/reality/reality-graph.d.ts.map +0 -1
  353. package/dist/reality/reality-graph.js +0 -600
  354. package/dist/reality/reality-graph.js.map +0 -1
  355. package/dist/reality/reality-runner.d.ts +0 -89
  356. package/dist/reality/reality-runner.d.ts.map +0 -1
  357. package/dist/reality/reality-runner.js +0 -540
  358. package/dist/reality/reality-runner.js.map +0 -1
  359. package/dist/reality/receipt-generator.d.ts +0 -152
  360. package/dist/reality/receipt-generator.d.ts.map +0 -1
  361. package/dist/reality/receipt-generator.js +0 -495
  362. package/dist/reality/receipt-generator.js.map +0 -1
  363. package/dist/reality/runtime-tracer.d.ts +0 -75
  364. package/dist/reality/runtime-tracer.d.ts.map +0 -1
  365. package/dist/reality/runtime-tracer.js +0 -109
  366. package/dist/reality/runtime-tracer.js.map +0 -1
  367. package/dist/runtime/auth-utils.d.ts +0 -43
  368. package/dist/runtime/auth-utils.d.ts.map +0 -1
  369. package/dist/runtime/auth-utils.js +0 -130
  370. package/dist/runtime/auth-utils.js.map +0 -1
  371. package/dist/runtime/client.d.ts +0 -74
  372. package/dist/runtime/client.d.ts.map +0 -1
  373. package/dist/runtime/client.js +0 -222
  374. package/dist/runtime/client.js.map +0 -1
  375. package/dist/runtime/creds.d.ts +0 -48
  376. package/dist/runtime/creds.d.ts.map +0 -1
  377. package/dist/runtime/creds.js +0 -245
  378. package/dist/runtime/creds.js.map +0 -1
  379. package/dist/runtime/exit-codes.d.ts +0 -49
  380. package/dist/runtime/exit-codes.d.ts.map +0 -1
  381. package/dist/runtime/exit-codes.js +0 -93
  382. package/dist/runtime/exit-codes.js.map +0 -1
  383. package/dist/runtime/index.d.ts +0 -9
  384. package/dist/runtime/index.d.ts.map +0 -1
  385. package/dist/runtime/index.js +0 -25
  386. package/dist/runtime/index.js.map +0 -1
  387. package/dist/runtime/json-output.d.ts +0 -42
  388. package/dist/runtime/json-output.d.ts.map +0 -1
  389. package/dist/runtime/json-output.js +0 -59
  390. package/dist/runtime/json-output.js.map +0 -1
  391. package/dist/runtime/semver.d.ts +0 -37
  392. package/dist/runtime/semver.d.ts.map +0 -1
  393. package/dist/runtime/semver.js +0 -110
  394. package/dist/runtime/semver.js.map +0 -1
  395. package/dist/scan/dead-ui-detector.d.ts +0 -48
  396. package/dist/scan/dead-ui-detector.d.ts.map +0 -1
  397. package/dist/scan/dead-ui-detector.js +0 -170
  398. package/dist/scan/dead-ui-detector.js.map +0 -1
  399. package/dist/scan/playwright-sweep.d.ts +0 -40
  400. package/dist/scan/playwright-sweep.d.ts.map +0 -1
  401. package/dist/scan/playwright-sweep.js +0 -216
  402. package/dist/scan/playwright-sweep.js.map +0 -1
  403. package/dist/scan/proof-bundle.d.ts +0 -25
  404. package/dist/scan/proof-bundle.d.ts.map +0 -1
  405. package/dist/scan/proof-bundle.js +0 -203
  406. package/dist/scan/proof-bundle.js.map +0 -1
  407. package/dist/scan/proof-graph.d.ts +0 -59
  408. package/dist/scan/proof-graph.d.ts.map +0 -1
  409. package/dist/scan/proof-graph.js +0 -64
  410. package/dist/scan/proof-graph.js.map +0 -1
  411. package/dist/scan/reality-sniff.d.ts +0 -56
  412. package/dist/scan/reality-sniff.d.ts.map +0 -1
  413. package/dist/scan/reality-sniff.js +0 -200
  414. package/dist/scan/reality-sniff.js.map +0 -1
  415. package/dist/scan/structural-verifier.d.ts +0 -20
  416. package/dist/scan/structural-verifier.d.ts.map +0 -1
  417. package/dist/scan/structural-verifier.js +0 -112
  418. package/dist/scan/structural-verifier.js.map +0 -1
  419. package/dist/scan/verification-engine.d.ts +0 -47
  420. package/dist/scan/verification-engine.d.ts.map +0 -1
  421. package/dist/scan/verification-engine.js +0 -141
  422. package/dist/scan/verification-engine.js.map +0 -1
  423. package/dist/scanner/baseline.d.ts +0 -52
  424. package/dist/scanner/baseline.d.ts.map +0 -1
  425. package/dist/scanner/baseline.js +0 -85
  426. package/dist/scanner/baseline.js.map +0 -1
  427. package/dist/scanner/incremental.d.ts +0 -30
  428. package/dist/scanner/incremental.d.ts.map +0 -1
  429. package/dist/scanner/incremental.js +0 -82
  430. package/dist/scanner/incremental.js.map +0 -1
  431. package/dist/scanner/parallel.d.ts +0 -43
  432. package/dist/scanner/parallel.d.ts.map +0 -1
  433. package/dist/scanner/parallel.js +0 -99
  434. package/dist/scanner/parallel.js.map +0 -1
  435. package/dist/standalone.d.ts +0 -1
  436. package/dist/standalone.d.ts.map +0 -1
  437. package/dist/standalone.js +0 -1
  438. package/dist/standalone.js.map +0 -1
  439. package/dist/truth-pack/index.d.ts +0 -102
  440. package/dist/truth-pack/index.d.ts.map +0 -1
  441. package/dist/truth-pack/index.js +0 -694
  442. package/dist/truth-pack/index.js.map +0 -1
  443. package/dist/ui/frame.d.ts +0 -68
  444. package/dist/ui/frame.d.ts.map +0 -1
  445. package/dist/ui/frame.js +0 -165
  446. package/dist/ui/frame.js.map +0 -1
  447. package/dist/ui/index.d.ts +0 -5
  448. package/dist/ui/index.d.ts.map +0 -1
  449. package/dist/ui/index.js +0 -16
  450. package/dist/ui/index.js.map +0 -1
  451. package/dist/ui.d.ts +0 -36
  452. package/dist/ui.d.ts.map +0 -1
  453. package/dist/ui.js +0 -45
  454. package/dist/ui.js.map +0 -1
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Context Diff Module
3
+ * Tracks changes in context between generations
4
+ */
5
+
6
+ const fs = require("fs");
7
+ const path = require("path");
8
+ const crypto = require("crypto");
9
+
10
+ /**
11
+ * Generate hash for context snapshot
12
+ */
13
+ function generateContextHash(context) {
14
+ const content = JSON.stringify(context, null, 2);
15
+ return crypto.createHash("sha256").update(content).digest("hex");
16
+ }
17
+
18
+ /**
19
+ * Save context snapshot
20
+ */
21
+ function saveSnapshot(projectPath, context) {
22
+ const vibecheckDir = path.join(projectPath, ".vibecheck");
23
+ if (!fs.existsSync(vibecheckDir)) {
24
+ fs.mkdirSync(vibecheckDir, { recursive: true });
25
+ }
26
+
27
+ const snapshot = {
28
+ timestamp: new Date().toISOString(),
29
+ hash: generateContextHash(context),
30
+ context: {
31
+ version: context.version,
32
+ project: context.project,
33
+ techStack: context.techStack,
34
+ structure: {
35
+ directories: context.structure?.directories || [],
36
+ componentsCount: context.structure?.components?.length || 0,
37
+ apiRoutesCount: context.structure?.apiRoutes?.length || 0,
38
+ },
39
+ patterns: {
40
+ hooks: context.patterns?.hooks || [],
41
+ stateManagement: context.patterns?.stateManagement,
42
+ validation: context.patterns?.validation,
43
+ },
44
+ monorepo: context.monorepo,
45
+ },
46
+ };
47
+
48
+ const snapshotFile = path.join(vibecheckDir, "context-snapshot.json");
49
+ fs.writeFileSync(snapshotFile, JSON.stringify(snapshot, null, 2));
50
+
51
+ return snapshot;
52
+ }
53
+
54
+ /**
55
+ * Load previous snapshot
56
+ */
57
+ function loadSnapshot(projectPath) {
58
+ const snapshotFile = path.join(projectPath, ".vibecheck", "context-snapshot.json");
59
+
60
+ if (!fs.existsSync(snapshotFile)) {
61
+ return null;
62
+ }
63
+
64
+ try {
65
+ return JSON.parse(fs.readFileSync(snapshotFile, "utf-8"));
66
+ } catch {
67
+ return null;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Generate diff between contexts
73
+ */
74
+ function generateContextDiff(previous, current) {
75
+ if (!previous) {
76
+ return {
77
+ isFirstRun: true,
78
+ changes: {
79
+ added: [],
80
+ removed: [],
81
+ modified: [],
82
+ },
83
+ };
84
+ }
85
+
86
+ const diff = {
87
+ timestamp: new Date().toISOString(),
88
+ previousTimestamp: previous.timestamp,
89
+ changes: {
90
+ added: [],
91
+ removed: [],
92
+ modified: [],
93
+ },
94
+ summary: {
95
+ totalChanges: 0,
96
+ breakingChanges: 0,
97
+ additions: 0,
98
+ removals: 0,
99
+ },
100
+ };
101
+
102
+ // Compare tech stack
103
+ if (previous.context.techStack && current.techStack) {
104
+ for (const [key, value] of Object.entries(current.techStack)) {
105
+ if (previous.context.techStack[key] !== value) {
106
+ diff.changes.modified.push({
107
+ type: "techStack",
108
+ field: key,
109
+ from: previous.context.techStack[key],
110
+ to: value,
111
+ });
112
+ diff.summary.totalChanges++;
113
+ }
114
+ }
115
+ }
116
+
117
+ // Compare directories
118
+ const prevDirs = new Set(previous.context.structure?.directories || []);
119
+ const currDirs = new Set(current.structure?.directories || []);
120
+
121
+ for (const dir of currDirs) {
122
+ if (!prevDirs.has(dir)) {
123
+ diff.changes.added.push({
124
+ type: "directory",
125
+ name: dir,
126
+ });
127
+ diff.summary.additions++;
128
+ diff.summary.totalChanges++;
129
+ }
130
+ }
131
+
132
+ for (const dir of prevDirs) {
133
+ if (!currDirs.has(dir)) {
134
+ diff.changes.removed.push({
135
+ type: "directory",
136
+ name: dir,
137
+ });
138
+ diff.summary.removals++;
139
+ diff.summary.totalChanges++;
140
+ }
141
+ }
142
+
143
+ // Compare components
144
+ const prevComponents = new Set(previous.context.structure?.components || []);
145
+ const currComponents = new Set(current.structure?.components || []);
146
+
147
+ for (const comp of currComponents) {
148
+ if (!prevComponents.has(comp)) {
149
+ diff.changes.added.push({
150
+ type: "component",
151
+ name: comp,
152
+ });
153
+ diff.summary.additions++;
154
+ diff.summary.totalChanges++;
155
+ }
156
+ }
157
+
158
+ for (const comp of prevComponents) {
159
+ if (!currComponents.has(comp)) {
160
+ diff.changes.removed.push({
161
+ type: "component",
162
+ name: comp,
163
+ });
164
+ diff.summary.removals++;
165
+ diff.summary.totalChanges++;
166
+ }
167
+ }
168
+
169
+ // Compare API routes
170
+ const prevRoutes = new Set(previous.context.structure?.apiRoutes || []);
171
+ const currRoutes = new Set(current.structure?.apiRoutes || []);
172
+
173
+ for (const route of currRoutes) {
174
+ if (!prevRoutes.has(route)) {
175
+ diff.changes.added.push({
176
+ type: "apiRoute",
177
+ name: route,
178
+ });
179
+ diff.summary.additions++;
180
+ diff.summary.totalChanges++;
181
+ }
182
+ }
183
+
184
+ for (const route of prevRoutes) {
185
+ if (!currRoutes.has(route)) {
186
+ diff.changes.removed.push({
187
+ type: "apiRoute",
188
+ name: route,
189
+ });
190
+ diff.summary.removals++;
191
+ diff.summary.totalChanges++;
192
+ }
193
+ }
194
+
195
+ // Compare patterns
196
+ const prevHooks = new Set(previous.context.patterns?.hooks || []);
197
+ const currHooks = new Set(current.patterns?.hooks || []);
198
+
199
+ for (const hook of currHooks) {
200
+ if (!prevHooks.has(hook)) {
201
+ diff.changes.added.push({
202
+ type: "hook",
203
+ name: hook,
204
+ });
205
+ diff.summary.additions++;
206
+ diff.summary.totalChanges++;
207
+ }
208
+ }
209
+
210
+ // Check for breaking changes
211
+ if (previous.context.patterns?.stateManagement !== current.patterns?.stateManagement) {
212
+ diff.changes.modified.push({
213
+ type: "breaking",
214
+ field: "stateManagement",
215
+ from: previous.context.patterns?.stateManagement,
216
+ to: current.patterns?.stateManagement,
217
+ });
218
+ diff.summary.breakingChanges++;
219
+ diff.summary.totalChanges++;
220
+ }
221
+
222
+ if (previous.context.patterns?.validation !== current.patterns?.validation) {
223
+ diff.changes.modified.push({
224
+ type: "breaking",
225
+ field: "validation",
226
+ from: previous.context.patterns?.validation,
227
+ to: current.patterns?.validation,
228
+ });
229
+ diff.summary.breakingChanges++;
230
+ diff.summary.totalChanges++;
231
+ }
232
+
233
+ return diff;
234
+ }
235
+
236
+ /**
237
+ * Generate diff report
238
+ */
239
+ function generateDiffReport(diff) {
240
+ if (diff.isFirstRun) {
241
+ return `
242
+ # First Context Generation
243
+
244
+ This is the first time context has been generated for this project.
245
+ `;
246
+ }
247
+
248
+ let report = `# Context Changes Report
249
+ Generated: ${new Date(diff.timestamp).toLocaleString()}
250
+ Since: ${new Date(diff.previousTimestamp).toLocaleString()}
251
+
252
+ ## Summary
253
+ - Total Changes: ${diff.summary.totalChanges}
254
+ - Additions: ${diff.summary.additions}
255
+ - Removals: ${diff.summary.removals}
256
+ - Breaking Changes: ${diff.summary.breakingChanges}
257
+
258
+ `;
259
+
260
+ if (diff.changes.added.length > 0) {
261
+ report += "## Added\n\n";
262
+ for (const change of diff.changes.added) {
263
+ const icon = {
264
+ directory: "📁",
265
+ component: "🧩",
266
+ apiRoute: "🔌",
267
+ hook: "🪝",
268
+ }[change.type] || "➕";
269
+
270
+ report += `- ${icon} **${change.type}**: ${change.name}\n`;
271
+ }
272
+ report += "\n";
273
+ }
274
+
275
+ if (diff.changes.removed.length > 0) {
276
+ report += "## Removed\n\n";
277
+ for (const change of diff.changes.removed) {
278
+ const icon = {
279
+ directory: "📁",
280
+ component: "🧩",
281
+ apiRoute: "🔌",
282
+ hook: "🪝",
283
+ }[change.type] || "➖";
284
+
285
+ report += `- ${icon} **${change.type}**: ${change.name}\n`;
286
+ }
287
+ report += "\n";
288
+ }
289
+
290
+ if (diff.changes.modified.length > 0) {
291
+ report += "## Modified\n\n";
292
+ for (const change of diff.changes.modified) {
293
+ const icon = change.type === "breaking" ? "⚠️" : "🔄";
294
+ report += `- ${icon} **${change.field}**: \`${change.from}\` → \`${change.to}\`\n`;
295
+ }
296
+ report += "\n";
297
+ }
298
+
299
+ if (diff.summary.breakingChanges > 0) {
300
+ report += "## ⚠️ Breaking Changes\n\n";
301
+ report += "Breaking changes detected. Review AI rules files to ensure compatibility.\n\n";
302
+ }
303
+
304
+ return report;
305
+ }
306
+
307
+ /**
308
+ * Save diff report
309
+ */
310
+ function saveDiffReport(projectPath, diff) {
311
+ const vibecheckDir = path.join(projectPath, ".vibecheck");
312
+ if (!fs.existsSync(vibecheckDir)) {
313
+ fs.mkdirSync(vibecheckDir, { recursive: true });
314
+ }
315
+
316
+ const report = generateDiffReport(diff);
317
+ const reportFile = path.join(vibecheckDir, "context-diff.md");
318
+
319
+ fs.writeFileSync(reportFile, report);
320
+
321
+ return reportFile;
322
+ }
323
+
324
+ /**
325
+ * Check if context needs regeneration
326
+ */
327
+ function needsRegeneration(projectPath, currentContext) {
328
+ const previous = loadSnapshot(projectPath);
329
+ if (!previous) return true;
330
+
331
+ const currentHash = generateContextHash(currentContext);
332
+ return previous.hash !== currentHash;
333
+ }
334
+
335
+ module.exports = {
336
+ saveSnapshot,
337
+ loadSnapshot,
338
+ generateContextDiff,
339
+ generateDiffReport,
340
+ saveDiffReport,
341
+ needsRegeneration,
342
+ };
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Smart Context Pruning Module
3
+ * Reduces context to most relevant subset based on current file/task
4
+ */
5
+
6
+ const fs = require("fs");
7
+ const path = require("path");
8
+
9
+ /**
10
+ * Find files recursively (local helper)
11
+ */
12
+ function findFiles(dir, extensions, maxDepth = 5, currentDepth = 0) {
13
+ if (currentDepth >= maxDepth || !fs.existsSync(dir)) return [];
14
+
15
+ const files = [];
16
+ try {
17
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
18
+ for (const entry of entries) {
19
+ const fullPath = path.join(dir, entry.name);
20
+ if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
21
+ files.push(...findFiles(fullPath, extensions, maxDepth, currentDepth + 1));
22
+ } else if (entry.isFile() && extensions.some(ext => entry.name.endsWith(ext))) {
23
+ files.push(fullPath);
24
+ }
25
+ }
26
+ } catch {}
27
+ return files;
28
+ }
29
+
30
+ /**
31
+ * Calculate relevance score for a file based on context
32
+ */
33
+ function calculateRelevanceScore(filePath, context, analysis) {
34
+ let score = 0;
35
+ const relativePath = path.relative(process.cwd(), filePath).replace(/\\/g, "/");
36
+
37
+ // Base score for all files
38
+ score += 1;
39
+
40
+ // Boost for same directory
41
+ if (context.currentFile) {
42
+ const currentDir = path.dirname(context.currentFile);
43
+ const fileDir = path.dirname(relativePath);
44
+ if (currentDir === fileDir) score += 5;
45
+ }
46
+
47
+ // Boost for shared directory levels
48
+ if (context.currentFile) {
49
+ const currentParts = context.currentFile.split("/");
50
+ const fileParts = relativePath.split("/");
51
+ const sharedLevels = Math.min(
52
+ currentParts.length - 1,
53
+ fileParts.length - 1
54
+ );
55
+ for (let i = 0; i < sharedLevels; i++) {
56
+ if (currentParts[i] === fileParts[i]) {
57
+ score += 2;
58
+ } else {
59
+ break;
60
+ }
61
+ }
62
+ }
63
+
64
+ // Boost for commonly imported files
65
+ if (analysis.imports?.internalAliases) {
66
+ for (const alias of analysis.imports.internalAliases) {
67
+ if (relativePath.startsWith(alias.replace("@", "src/"))) {
68
+ score += 3;
69
+ }
70
+ }
71
+ }
72
+
73
+ // Boost based on file type
74
+ const ext = path.extname(relativePath);
75
+ const baseName = path.basename(relativePath, ext);
76
+
77
+ // Components are highly relevant
78
+ if (relativePath.includes("/components/") && /^[A-Z]/.test(baseName)) {
79
+ score += 4;
80
+ }
81
+
82
+ // Hooks are moderately relevant
83
+ if (relativePath.includes("/hooks/") || baseName.startsWith("use")) {
84
+ score += 3;
85
+ }
86
+
87
+ // API routes for API-related tasks
88
+ if (context.task === "api" && relativePath.includes("/api/")) {
89
+ score += 5;
90
+ }
91
+
92
+ // Utils for utility tasks
93
+ if (context.task === "utility" && (relativePath.includes("/utils/") || relativePath.includes("/lib/"))) {
94
+ score += 4;
95
+ }
96
+
97
+ // Boost for files with many imports (likely core files)
98
+ const fileStats = analysis.stats?.byExtension || {};
99
+ if (fileStats[ext]) {
100
+ score += Math.min(2, fileStats[ext] / 10);
101
+ }
102
+
103
+ // Boost for recently modified files (if git info available)
104
+ if (context.recentFiles && context.recentFiles.includes(relativePath)) {
105
+ score += 3;
106
+ }
107
+
108
+ // Boost for files mentioned in custom hooks
109
+ if (analysis.patterns?.hooks?.includes(baseName)) {
110
+ score += 2;
111
+ }
112
+
113
+ return score;
114
+ }
115
+
116
+ /**
117
+ * Prune context to most relevant files
118
+ */
119
+ function pruneContext(analysis, context = {}) {
120
+ const {
121
+ maxTokens = 8000,
122
+ currentFile = "",
123
+ task = "general",
124
+ includeTypes = ["components", "hooks", "utils", "api"],
125
+ excludePatterns = ["*.test.*", "*.spec.*", "node_modules"],
126
+ } = context;
127
+
128
+ // Get all relevant files
129
+ const allFiles = findFiles(process.cwd(), [".ts", ".tsx", ".js", ".jsx"], 5);
130
+
131
+ // Filter by type and exclude patterns
132
+ const filteredFiles = allFiles.filter(file => {
133
+ const relativePath = path.relative(process.cwd(), file).replace(/\\/g, "/");
134
+
135
+ // Check exclude patterns
136
+ for (const pattern of excludePatterns) {
137
+ if (relativePath.includes(pattern.replace("*", ""))) {
138
+ return false;
139
+ }
140
+ }
141
+
142
+ // Check include types
143
+ const isInComponents = relativePath.includes("/components/");
144
+ const isInHooks = relativePath.includes("/hooks/") || path.basename(file).startsWith("use");
145
+ const isInUtils = relativePath.includes("/utils/") || relativePath.includes("/lib/");
146
+ const isInApi = relativePath.includes("/api/") || relativePath.includes("/routes/");
147
+
148
+ return (
149
+ (includeTypes.includes("components") && isInComponents) ||
150
+ (includeTypes.includes("hooks") && isInHooks) ||
151
+ (includeTypes.includes("utils") && isInUtils) ||
152
+ (includeTypes.includes("api") && isInApi) ||
153
+ !includeTypes.length
154
+ );
155
+ });
156
+
157
+ // Score and rank files
158
+ const scoredFiles = filteredFiles.map(file => ({
159
+ path: file,
160
+ relativePath: path.relative(process.cwd(), file).replace(/\\/g, "/"),
161
+ score: calculateRelevanceScore(file, context, analysis),
162
+ }));
163
+
164
+ // Sort by score (descending)
165
+ scoredFiles.sort((a, b) => b.score - a.score);
166
+
167
+ // Estimate token usage (rough estimate: ~4 tokens per character)
168
+ let totalTokens = 0;
169
+ const selectedFiles = [];
170
+
171
+ for (const file of scoredFiles) {
172
+ try {
173
+ const content = fs.readFileSync(file.path, "utf-8");
174
+ const fileTokens = content.length / 4;
175
+
176
+ if (totalTokens + fileTokens <= maxTokens) {
177
+ selectedFiles.push({
178
+ ...file,
179
+ content,
180
+ tokens: Math.round(fileTokens),
181
+ });
182
+ totalTokens += fileTokens;
183
+ } else {
184
+ // Try to include partial content for important files
185
+ if (file.score > 5) {
186
+ const remainingTokens = maxTokens - totalTokens;
187
+ const charsToFit = remainingTokens * 4;
188
+ const partialContent = content.slice(0, charsToFit) + "\n... [truncated]";
189
+
190
+ selectedFiles.push({
191
+ ...file,
192
+ content: partialContent,
193
+ tokens: Math.round(partialContent.length / 4),
194
+ truncated: true,
195
+ });
196
+ totalTokens += partialContent.length / 4;
197
+ }
198
+ break;
199
+ }
200
+ } catch {}
201
+ }
202
+
203
+ return {
204
+ files: selectedFiles,
205
+ totalTokens: Math.round(totalTokens),
206
+ maxTokens,
207
+ includedCount: selectedFiles.length,
208
+ totalCount: filteredFiles.length,
209
+ pruned: filteredFiles.length - selectedFiles.length,
210
+ };
211
+ }
212
+
213
+ /**
214
+ * Generate pruned context JSON for MCP
215
+ */
216
+ function generatePrunedContext(analysis, context = {}) {
217
+ const pruned = pruneContext(analysis, context);
218
+
219
+ return {
220
+ version: "3.0.0-pruned",
221
+ generatedAt: new Date().toISOString(),
222
+ context: {
223
+ currentFile: context.currentFile || "",
224
+ task: context.task || "general",
225
+ maxTokens: context.maxTokens || 8000,
226
+ },
227
+ summary: {
228
+ totalFiles: pruned.totalCount,
229
+ includedFiles: pruned.includedCount,
230
+ prunedFiles: pruned.pruned,
231
+ estimatedTokens: pruned.totalTokens,
232
+ },
233
+ files: pruned.files.map(f => ({
234
+ path: f.relativePath,
235
+ score: f.score,
236
+ tokens: f.tokens,
237
+ truncated: f.truncated || false,
238
+ content: f.content,
239
+ })),
240
+ };
241
+ }
242
+
243
+ /**
244
+ * Get context for specific file
245
+ */
246
+ function getContextForFile(filePath, analysis) {
247
+ const relativePath = path.relative(process.cwd(), filePath).replace(/\\/g, "/");
248
+
249
+ // Extract imports from current file
250
+ let imports = [];
251
+ try {
252
+ const content = fs.readFileSync(filePath, "utf-8");
253
+ const importMatches = content.match(/import\s+.*?\s+from\s+['"]([^'"]+)['"]/g) || [];
254
+
255
+ for (const match of importMatches) {
256
+ const source = match.match(/from\s+['"]([^'"]+)['"]/)?.[1];
257
+ if (source && source.startsWith(".")) {
258
+ // Resolve relative import
259
+ const fromDir = path.dirname(relativePath);
260
+ const resolvedPath = path.resolve(process.cwd(), fromDir, source);
261
+ imports.push(path.relative(process.cwd(), resolvedPath).replace(/\\/g, "/"));
262
+ }
263
+ }
264
+ } catch {}
265
+
266
+ // Prune with focus on imported files
267
+ const context = generatePrunedContext(analysis, {
268
+ currentFile: relativePath,
269
+ maxTokens: 6000,
270
+ task: "file-specific",
271
+ });
272
+
273
+ // Boost imported files in the results
274
+ for (const file of context.files) {
275
+ if (imports.includes(file.path)) {
276
+ file.score += 10;
277
+ }
278
+ }
279
+
280
+ // Re-sort
281
+ context.files.sort((a, b) => b.score - a.score);
282
+
283
+ return context;
284
+ }
285
+
286
+ module.exports = {
287
+ pruneContext,
288
+ generatePrunedContext,
289
+ getContextForFile,
290
+ calculateRelevanceScore,
291
+ };