vibecheck-ai 2.0.1 → 5.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 (456) hide show
  1. package/bin/.generated +25 -0
  2. package/bin/_deprecations.js +463 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/dev/run-v2-torture.js +30 -0
  6. package/bin/registry.js +656 -0
  7. package/bin/runners/CLI_REFACTOR_SUMMARY.md +229 -0
  8. package/bin/runners/ENHANCEMENT_GUIDE.md +121 -0
  9. package/bin/runners/REPORT_AUDIT.md +64 -0
  10. package/bin/runners/cli-utils.js +1070 -0
  11. package/bin/runners/context/ai-task-decomposer.js +337 -0
  12. package/bin/runners/context/analyzer.js +513 -0
  13. package/bin/runners/context/api-contracts.js +427 -0
  14. package/bin/runners/context/context-diff.js +342 -0
  15. package/bin/runners/context/context-pruner.js +291 -0
  16. package/bin/runners/context/dependency-graph.js +414 -0
  17. package/bin/runners/context/generators/claude.js +107 -0
  18. package/bin/runners/context/generators/codex.js +108 -0
  19. package/bin/runners/context/generators/copilot.js +119 -0
  20. package/bin/runners/context/generators/cursor-enhanced.js +2525 -0
  21. package/bin/runners/context/generators/cursor.js +514 -0
  22. package/bin/runners/context/generators/mcp.js +169 -0
  23. package/bin/runners/context/generators/windsurf.js +180 -0
  24. package/bin/runners/context/git-context.js +304 -0
  25. package/bin/runners/context/index.js +1110 -0
  26. package/bin/runners/context/insights.js +173 -0
  27. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  28. package/bin/runners/context/mcp-server/index.js +1176 -0
  29. package/bin/runners/context/mcp-server/package.json +24 -0
  30. package/bin/runners/context/memory.js +200 -0
  31. package/bin/runners/context/monorepo.js +215 -0
  32. package/bin/runners/context/multi-repo-federation.js +404 -0
  33. package/bin/runners/context/patterns.js +253 -0
  34. package/bin/runners/context/proof-context.js +1264 -0
  35. package/bin/runners/context/security-scanner.js +541 -0
  36. package/bin/runners/context/semantic-search.js +350 -0
  37. package/bin/runners/context/shared.js +264 -0
  38. package/bin/runners/context/team-conventions.js +336 -0
  39. package/bin/runners/lib/__tests__/entitlements-v2.test.js +295 -0
  40. package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
  41. package/bin/runners/lib/agent-firewall/change-packet/builder.js +488 -0
  42. package/bin/runners/lib/agent-firewall/change-packet/schema.json +228 -0
  43. package/bin/runners/lib/agent-firewall/change-packet/store.js +200 -0
  44. package/bin/runners/lib/agent-firewall/claims/claim-types.js +21 -0
  45. package/bin/runners/lib/agent-firewall/claims/extractor.js +303 -0
  46. package/bin/runners/lib/agent-firewall/claims/patterns.js +24 -0
  47. package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
  48. package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
  49. package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
  50. package/bin/runners/lib/agent-firewall/enforcement/gateway.js +1059 -0
  51. package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -0
  52. package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -0
  53. package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -0
  54. package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -0
  55. package/bin/runners/lib/agent-firewall/enforcement/schemas/change-event.schema.json +173 -0
  56. package/bin/runners/lib/agent-firewall/enforcement/schemas/intent.schema.json +181 -0
  57. package/bin/runners/lib/agent-firewall/enforcement/schemas/verdict.schema.json +222 -0
  58. package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -0
  59. package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +88 -0
  60. package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +75 -0
  61. package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +127 -0
  62. package/bin/runners/lib/agent-firewall/evidence/resolver.js +102 -0
  63. package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +213 -0
  64. package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +145 -0
  65. package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +19 -0
  66. package/bin/runners/lib/agent-firewall/fs-hook/installer.js +87 -0
  67. package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +184 -0
  68. package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +163 -0
  69. package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +107 -0
  70. package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +68 -0
  71. package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +66 -0
  72. package/bin/runners/lib/agent-firewall/index.js +200 -0
  73. package/bin/runners/lib/agent-firewall/integration/index.js +20 -0
  74. package/bin/runners/lib/agent-firewall/integration/ship-gate.js +437 -0
  75. package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +634 -0
  76. package/bin/runners/lib/agent-firewall/intent/auto-detect.js +426 -0
  77. package/bin/runners/lib/agent-firewall/intent/index.js +102 -0
  78. package/bin/runners/lib/agent-firewall/intent/schema.js +352 -0
  79. package/bin/runners/lib/agent-firewall/intent/store.js +283 -0
  80. package/bin/runners/lib/agent-firewall/interception/fs-interceptor.js +502 -0
  81. package/bin/runners/lib/agent-firewall/interception/index.js +23 -0
  82. package/bin/runners/lib/agent-firewall/interceptor/base.js +308 -0
  83. package/bin/runners/lib/agent-firewall/interceptor/cursor.js +35 -0
  84. package/bin/runners/lib/agent-firewall/interceptor/vscode.js +35 -0
  85. package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +34 -0
  86. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
  87. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
  88. package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
  89. package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
  90. package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
  91. package/bin/runners/lib/agent-firewall/logger.js +141 -0
  92. package/bin/runners/lib/agent-firewall/policy/default-policy.json +90 -0
  93. package/bin/runners/lib/agent-firewall/policy/engine.js +103 -0
  94. package/bin/runners/lib/agent-firewall/policy/loader.js +451 -0
  95. package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +50 -0
  96. package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +50 -0
  97. package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +79 -0
  98. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +227 -0
  99. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +191 -0
  100. package/bin/runners/lib/agent-firewall/policy/rules/scope.js +93 -0
  101. package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +57 -0
  102. package/bin/runners/lib/agent-firewall/policy/schema.json +183 -0
  103. package/bin/runners/lib/agent-firewall/policy/verdict.js +54 -0
  104. package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
  105. package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
  106. package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
  107. package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
  108. package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
  109. package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
  110. package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
  111. package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
  112. package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
  113. package/bin/runners/lib/agent-firewall/risk/thresholds.js +322 -0
  114. package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
  115. package/bin/runners/lib/agent-firewall/session/collector.js +451 -0
  116. package/bin/runners/lib/agent-firewall/session/index.js +26 -0
  117. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
  118. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
  119. package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
  120. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
  121. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
  122. package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
  123. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
  124. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
  125. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
  126. package/bin/runners/lib/agent-firewall/truthpack/index.js +67 -0
  127. package/bin/runners/lib/agent-firewall/truthpack/loader.js +137 -0
  128. package/bin/runners/lib/agent-firewall/unblock/planner.js +337 -0
  129. package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
  130. package/bin/runners/lib/ai-bridge.js +416 -0
  131. package/bin/runners/lib/analysis-core.js +309 -0
  132. package/bin/runners/lib/analyzers.js +2500 -0
  133. package/bin/runners/lib/api-client.js +269 -0
  134. package/bin/runners/lib/approve-output.js +235 -0
  135. package/bin/runners/lib/artifact-envelope.js +540 -0
  136. package/bin/runners/lib/assets/vibecheck-logo.png +0 -0
  137. package/bin/runners/lib/audit-bridge.js +391 -0
  138. package/bin/runners/lib/auth-shared.js +977 -0
  139. package/bin/runners/lib/auth-truth.js +193 -0
  140. package/bin/runners/lib/auth.js +215 -0
  141. package/bin/runners/lib/authority-badge.js +425 -0
  142. package/bin/runners/lib/backup.js +62 -0
  143. package/bin/runners/lib/billing.js +107 -0
  144. package/bin/runners/lib/checkpoint.js +941 -0
  145. package/bin/runners/lib/claims.js +118 -0
  146. package/bin/runners/lib/classify-output.js +204 -0
  147. package/bin/runners/lib/cleanup/engine.js +571 -0
  148. package/bin/runners/lib/cleanup/index.js +53 -0
  149. package/bin/runners/lib/cleanup/output.js +375 -0
  150. package/bin/runners/lib/cleanup/rules.js +1060 -0
  151. package/bin/runners/lib/cli-output.js +400 -0
  152. package/bin/runners/lib/cli-ui.js +540 -0
  153. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  154. package/bin/runners/lib/compliance-bridge.js +165 -0
  155. package/bin/runners/lib/contracts/auth-contract.js +202 -0
  156. package/bin/runners/lib/contracts/env-contract.js +181 -0
  157. package/bin/runners/lib/contracts/external-contract.js +206 -0
  158. package/bin/runners/lib/contracts/guard.js +168 -0
  159. package/bin/runners/lib/contracts/index.js +89 -0
  160. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  161. package/bin/runners/lib/contracts/route-contract.js +199 -0
  162. package/bin/runners/lib/contracts.js +804 -0
  163. package/bin/runners/lib/default-config.js +127 -0
  164. package/bin/runners/lib/detect.js +89 -0
  165. package/bin/runners/lib/detectors-v2.js +622 -0
  166. package/bin/runners/lib/doctor/autofix.js +254 -0
  167. package/bin/runners/lib/doctor/diagnosis-receipt.js +454 -0
  168. package/bin/runners/lib/doctor/failure-signatures.js +526 -0
  169. package/bin/runners/lib/doctor/fix-script.js +336 -0
  170. package/bin/runners/lib/doctor/index.js +37 -0
  171. package/bin/runners/lib/doctor/modules/build-tools.js +453 -0
  172. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  173. package/bin/runners/lib/doctor/modules/index.js +105 -0
  174. package/bin/runners/lib/doctor/modules/network.js +250 -0
  175. package/bin/runners/lib/doctor/modules/os-quirks.js +706 -0
  176. package/bin/runners/lib/doctor/modules/project.js +312 -0
  177. package/bin/runners/lib/doctor/modules/repo-integrity.js +485 -0
  178. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  179. package/bin/runners/lib/doctor/modules/security.js +350 -0
  180. package/bin/runners/lib/doctor/modules/system.js +213 -0
  181. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  182. package/bin/runners/lib/doctor/reporter.js +262 -0
  183. package/bin/runners/lib/doctor/safe-repair.js +384 -0
  184. package/bin/runners/lib/doctor/service.js +262 -0
  185. package/bin/runners/lib/doctor/types.js +113 -0
  186. package/bin/runners/lib/doctor/ui.js +263 -0
  187. package/bin/runners/lib/doctor-enhanced.js +233 -0
  188. package/bin/runners/lib/doctor-output.js +226 -0
  189. package/bin/runners/lib/doctor-v2.js +608 -0
  190. package/bin/runners/lib/drift.js +425 -0
  191. package/bin/runners/lib/enforcement.js +72 -0
  192. package/bin/runners/lib/engine/ast-cache.js +210 -0
  193. package/bin/runners/lib/engine/auth-extractor.js +211 -0
  194. package/bin/runners/lib/engine/billing-extractor.js +112 -0
  195. package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
  196. package/bin/runners/lib/engine/env-extractor.js +207 -0
  197. package/bin/runners/lib/engine/express-extractor.js +208 -0
  198. package/bin/runners/lib/engine/extractors.js +849 -0
  199. package/bin/runners/lib/engine/index.js +207 -0
  200. package/bin/runners/lib/engine/repo-index.js +514 -0
  201. package/bin/runners/lib/engine/types.js +124 -0
  202. package/bin/runners/lib/engines/accessibility-engine.js +190 -0
  203. package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
  204. package/bin/runners/lib/engines/ast-cache.js +99 -0
  205. package/bin/runners/lib/engines/attack-detector.js +1192 -0
  206. package/bin/runners/lib/engines/code-quality-engine.js +255 -0
  207. package/bin/runners/lib/engines/console-logs-engine.js +115 -0
  208. package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
  209. package/bin/runners/lib/engines/dead-code-engine.js +198 -0
  210. package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
  211. package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
  212. package/bin/runners/lib/engines/file-filter.js +131 -0
  213. package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
  214. package/bin/runners/lib/engines/mock-data-engine.js +272 -0
  215. package/bin/runners/lib/engines/parallel-processor.js +71 -0
  216. package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
  217. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
  218. package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
  219. package/bin/runners/lib/engines/type-aware-engine.js +152 -0
  220. package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
  221. package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
  222. package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
  223. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
  224. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
  225. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
  226. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
  227. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
  228. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
  229. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
  230. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +139 -0
  231. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
  232. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
  233. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
  234. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
  235. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
  236. package/bin/runners/lib/engines/vibecheck-engines/package.json +13 -0
  237. package/bin/runners/lib/enterprise-detect.js +603 -0
  238. package/bin/runners/lib/enterprise-init.js +942 -0
  239. package/bin/runners/lib/entitlements-v2.js +265 -0
  240. package/bin/runners/lib/entitlements.generated.js +0 -0
  241. package/bin/runners/lib/entitlements.js +340 -0
  242. package/bin/runners/lib/env-resolver.js +417 -0
  243. package/bin/runners/lib/env-template.js +66 -0
  244. package/bin/runners/lib/env.js +189 -0
  245. package/bin/runners/lib/error-handler.js +368 -0
  246. package/bin/runners/lib/error-messages.js +289 -0
  247. package/bin/runners/lib/evidence-pack.js +684 -0
  248. package/bin/runners/lib/exit-codes.js +275 -0
  249. package/bin/runners/lib/extractors/client-calls.js +990 -0
  250. package/bin/runners/lib/extractors/fastify-route-dump.js +573 -0
  251. package/bin/runners/lib/extractors/fastify-routes.js +426 -0
  252. package/bin/runners/lib/extractors/index.js +363 -0
  253. package/bin/runners/lib/extractors/next-routes.js +524 -0
  254. package/bin/runners/lib/extractors/proof-graph.js +431 -0
  255. package/bin/runners/lib/extractors/route-matcher.js +451 -0
  256. package/bin/runners/lib/extractors/truthpack-v2.js +377 -0
  257. package/bin/runners/lib/extractors/ui-bindings.js +547 -0
  258. package/bin/runners/lib/finding-id.js +69 -0
  259. package/bin/runners/lib/finding-sorter.js +89 -0
  260. package/bin/runners/lib/findings-schema.js +281 -0
  261. package/bin/runners/lib/fingerprint.js +377 -0
  262. package/bin/runners/lib/firewall-prompt.js +50 -0
  263. package/bin/runners/lib/fix-output.js +228 -0
  264. package/bin/runners/lib/global-flags.js +250 -0
  265. package/bin/runners/lib/graph/graph-builder.js +265 -0
  266. package/bin/runners/lib/graph/html-renderer.js +413 -0
  267. package/bin/runners/lib/graph/index.js +32 -0
  268. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  269. package/bin/runners/lib/graph/static-extractor.js +518 -0
  270. package/bin/runners/lib/help-formatter.js +413 -0
  271. package/bin/runners/lib/html-proof-report.js +913 -0
  272. package/bin/runners/lib/html-report.js +650 -0
  273. package/bin/runners/lib/init-wizard.js +601 -0
  274. package/bin/runners/lib/interactive-menu.js +1496 -0
  275. package/bin/runners/lib/json-output.js +76 -0
  276. package/bin/runners/lib/llm.js +75 -0
  277. package/bin/runners/lib/logger.js +38 -0
  278. package/bin/runners/lib/meter.js +61 -0
  279. package/bin/runners/lib/missions/briefing.js +427 -0
  280. package/bin/runners/lib/missions/checkpoint.js +753 -0
  281. package/bin/runners/lib/missions/evidence.js +126 -0
  282. package/bin/runners/lib/missions/hardening.js +851 -0
  283. package/bin/runners/lib/missions/plan.js +648 -0
  284. package/bin/runners/lib/missions/safety-gates.js +645 -0
  285. package/bin/runners/lib/missions/schema.js +478 -0
  286. package/bin/runners/lib/missions/templates.js +317 -0
  287. package/bin/runners/lib/next-action.js +560 -0
  288. package/bin/runners/lib/packs/bundle.js +675 -0
  289. package/bin/runners/lib/packs/evidence-pack.js +671 -0
  290. package/bin/runners/lib/packs/pack-factory.js +837 -0
  291. package/bin/runners/lib/packs/permissions-pack.js +686 -0
  292. package/bin/runners/lib/packs/proof-graph-pack.js +779 -0
  293. package/bin/runners/lib/patch.js +40 -0
  294. package/bin/runners/lib/permissions/auth-model.js +213 -0
  295. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  296. package/bin/runners/lib/permissions/index.js +45 -0
  297. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  298. package/bin/runners/lib/pkgjson.js +28 -0
  299. package/bin/runners/lib/policy.js +295 -0
  300. package/bin/runners/lib/polish/accessibility.js +62 -0
  301. package/bin/runners/lib/polish/analyzer.js +93 -0
  302. package/bin/runners/lib/polish/backend.js +87 -0
  303. package/bin/runners/lib/polish/configuration.js +83 -0
  304. package/bin/runners/lib/polish/documentation.js +83 -0
  305. package/bin/runners/lib/polish/frontend.js +817 -0
  306. package/bin/runners/lib/polish/index.js +27 -0
  307. package/bin/runners/lib/polish/infrastructure.js +80 -0
  308. package/bin/runners/lib/polish/internationalization.js +85 -0
  309. package/bin/runners/lib/polish/libraries.js +180 -0
  310. package/bin/runners/lib/polish/observability.js +75 -0
  311. package/bin/runners/lib/polish/performance.js +64 -0
  312. package/bin/runners/lib/polish/privacy.js +110 -0
  313. package/bin/runners/lib/polish/resilience.js +92 -0
  314. package/bin/runners/lib/polish/security.js +78 -0
  315. package/bin/runners/lib/polish/seo.js +71 -0
  316. package/bin/runners/lib/polish/styles.js +62 -0
  317. package/bin/runners/lib/polish/utils.js +104 -0
  318. package/bin/runners/lib/preflight.js +142 -0
  319. package/bin/runners/lib/prerequisites.js +149 -0
  320. package/bin/runners/lib/prove-output.js +220 -0
  321. package/bin/runners/lib/reality/correlation-detectors.js +359 -0
  322. package/bin/runners/lib/reality/index.js +318 -0
  323. package/bin/runners/lib/reality/request-hashing.js +416 -0
  324. package/bin/runners/lib/reality/request-mapper.js +453 -0
  325. package/bin/runners/lib/reality/safety-rails.js +463 -0
  326. package/bin/runners/lib/reality/semantic-snapshot.js +408 -0
  327. package/bin/runners/lib/reality/toast-detector.js +393 -0
  328. package/bin/runners/lib/reality-findings.js +84 -0
  329. package/bin/runners/lib/reality-output.js +231 -0
  330. package/bin/runners/lib/receipts.js +179 -0
  331. package/bin/runners/lib/redact.js +29 -0
  332. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  333. package/bin/runners/lib/replay/index.js +263 -0
  334. package/bin/runners/lib/replay/player.js +348 -0
  335. package/bin/runners/lib/replay/recorder.js +331 -0
  336. package/bin/runners/lib/report-engine.js +626 -0
  337. package/bin/runners/lib/report-html.js +1233 -0
  338. package/bin/runners/lib/report-output.js +366 -0
  339. package/bin/runners/lib/report-templates.js +967 -0
  340. package/bin/runners/lib/report.js +135 -0
  341. package/bin/runners/lib/route-detection.js +1209 -0
  342. package/bin/runners/lib/route-truth.js +1322 -0
  343. package/bin/runners/lib/safelist/index.js +96 -0
  344. package/bin/runners/lib/safelist/integration.js +334 -0
  345. package/bin/runners/lib/safelist/matcher.js +696 -0
  346. package/bin/runners/lib/safelist/schema.js +948 -0
  347. package/bin/runners/lib/safelist/store.js +438 -0
  348. package/bin/runners/lib/sandbox/index.js +59 -0
  349. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  350. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  351. package/bin/runners/lib/sandbox/worktree.js +174 -0
  352. package/bin/runners/lib/scan-cache.js +330 -0
  353. package/bin/runners/lib/scan-output-schema.js +344 -0
  354. package/bin/runners/lib/scan-output.js +631 -0
  355. package/bin/runners/lib/scan-runner.js +135 -0
  356. package/bin/runners/lib/schema-validator.js +350 -0
  357. package/bin/runners/lib/schemas/ajv-validator.js +464 -0
  358. package/bin/runners/lib/schemas/contracts.schema.json +160 -0
  359. package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
  360. package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
  361. package/bin/runners/lib/schemas/finding.schema.json +100 -0
  362. package/bin/runners/lib/schemas/mission-pack.schema.json +206 -0
  363. package/bin/runners/lib/schemas/proof-graph.schema.json +176 -0
  364. package/bin/runners/lib/schemas/reality-report.schema.json +162 -0
  365. package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
  366. package/bin/runners/lib/schemas/run-request.schema.json +108 -0
  367. package/bin/runners/lib/schemas/share-pack.schema.json +180 -0
  368. package/bin/runners/lib/schemas/ship-manifest.schema.json +251 -0
  369. package/bin/runners/lib/schemas/ship-report.schema.json +117 -0
  370. package/bin/runners/lib/schemas/truthpack-v2.schema.json +303 -0
  371. package/bin/runners/lib/schemas/validator.js +465 -0
  372. package/bin/runners/lib/schemas/verdict.schema.json +140 -0
  373. package/bin/runners/lib/score-history.js +282 -0
  374. package/bin/runners/lib/security-bridge.js +249 -0
  375. package/bin/runners/lib/server-usage.js +513 -0
  376. package/bin/runners/lib/share-pack.js +239 -0
  377. package/bin/runners/lib/ship-gate.js +832 -0
  378. package/bin/runners/lib/ship-manifest.js +1153 -0
  379. package/bin/runners/lib/ship-output-enterprise.js +239 -0
  380. package/bin/runners/lib/ship-output.js +1128 -0
  381. package/bin/runners/lib/snippets.js +67 -0
  382. package/bin/runners/lib/status-output.js +340 -0
  383. package/bin/runners/lib/terminal-ui.js +356 -0
  384. package/bin/runners/lib/truth.js +1691 -0
  385. package/bin/runners/lib/ui.js +562 -0
  386. package/bin/runners/lib/unified-cli-output.js +947 -0
  387. package/bin/runners/lib/unified-output.js +197 -0
  388. package/bin/runners/lib/upsell.js +410 -0
  389. package/bin/runners/lib/usage.js +153 -0
  390. package/bin/runners/lib/validate-patch.js +156 -0
  391. package/bin/runners/lib/verdict-engine.js +628 -0
  392. package/bin/runners/lib/verification.js +345 -0
  393. package/bin/runners/lib/why-tree.js +650 -0
  394. package/bin/runners/reality/engine.js +917 -0
  395. package/bin/runners/reality/flows.js +122 -0
  396. package/bin/runners/reality/report.js +378 -0
  397. package/bin/runners/reality/session.js +193 -0
  398. package/bin/runners/runAIAgent.js +229 -0
  399. package/bin/runners/runAgent.d.ts +5 -0
  400. package/bin/runners/runAgent.js +161 -0
  401. package/bin/runners/runAllowlist.js +418 -0
  402. package/bin/runners/runApprove.js +320 -0
  403. package/bin/runners/runAudit.js +692 -0
  404. package/bin/runners/runAuth.js +731 -0
  405. package/bin/runners/runCI.js +353 -0
  406. package/bin/runners/runCheckpoint.js +530 -0
  407. package/bin/runners/runClassify.js +928 -0
  408. package/bin/runners/runCleanup.js +343 -0
  409. package/bin/runners/runContext.d.ts +4 -0
  410. package/bin/runners/runContext.js +175 -0
  411. package/bin/runners/runDoctor.js +877 -0
  412. package/bin/runners/runEvidencePack.js +362 -0
  413. package/bin/runners/runFirewall.d.ts +5 -0
  414. package/bin/runners/runFirewall.js +134 -0
  415. package/bin/runners/runFirewallHook.d.ts +5 -0
  416. package/bin/runners/runFirewallHook.js +56 -0
  417. package/bin/runners/runFix.js +1355 -0
  418. package/bin/runners/runForge.js +451 -0
  419. package/bin/runners/runGuard.js +262 -0
  420. package/bin/runners/runInit.js +1927 -0
  421. package/bin/runners/runIntent.js +906 -0
  422. package/bin/runners/runKickoff.js +878 -0
  423. package/bin/runners/runLabs.js +424 -0
  424. package/bin/runners/runLaunch.js +2000 -0
  425. package/bin/runners/runLink.js +785 -0
  426. package/bin/runners/runMcp.js +1875 -0
  427. package/bin/runners/runPacks.js +2089 -0
  428. package/bin/runners/runPolish.d.ts +4 -0
  429. package/bin/runners/runPolish.js +390 -0
  430. package/bin/runners/runPromptFirewall.js +211 -0
  431. package/bin/runners/runProve.js +1411 -0
  432. package/bin/runners/runQuickstart.js +531 -0
  433. package/bin/runners/runReality.js +2260 -0
  434. package/bin/runners/runReport.js +726 -0
  435. package/bin/runners/runRuntime.js +110 -0
  436. package/bin/runners/runSafelist.js +1190 -0
  437. package/bin/runners/runScan.js +688 -0
  438. package/bin/runners/runShield.js +1282 -0
  439. package/bin/runners/runShip.js +1660 -0
  440. package/bin/runners/runTruth.d.ts +5 -0
  441. package/bin/runners/runTruth.js +101 -0
  442. package/bin/runners/runValidate.js +179 -0
  443. package/bin/runners/runWatch.js +478 -0
  444. package/bin/runners/utils.js +360 -0
  445. package/bin/scan.js +617 -0
  446. package/bin/vibecheck.js +1617 -0
  447. package/dist/guardrail/index.d.ts +2405 -0
  448. package/dist/guardrail/index.js +9747 -0
  449. package/dist/guardrail/index.js.map +1 -0
  450. package/dist/scanner/index.d.ts +282 -0
  451. package/dist/scanner/index.js +3395 -0
  452. package/dist/scanner/index.js.map +1 -0
  453. package/package.json +123 -104
  454. package/README.md +0 -491
  455. package/dist/index.js +0 -99711
  456. package/dist/index.js.map +0 -1
@@ -0,0 +1,184 @@
1
+ /**
2
+ * File System Hook - Intercepts ALL file writes at OS level
3
+ *
4
+ * Uses chokidar to watch for file changes and intercepts them
5
+ * before they're written to disk.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const chokidar = require("chokidar");
11
+ const fs = require("fs");
12
+ const path = require("path");
13
+ const { interceptFileWrite } = require("../interceptor/base");
14
+ const { loadPolicy } = require("../policy/loader");
15
+
16
+ class FileSystemHook {
17
+ constructor(projectRoot) {
18
+ this.projectRoot = projectRoot;
19
+ this.watcher = null;
20
+ this.pendingWrites = new Map(); // Track writes in progress
21
+ this.isEnabled = false;
22
+ }
23
+
24
+ /**
25
+ * Start watching for file writes
26
+ */
27
+ async start() {
28
+ if (this.watcher) {
29
+ return; // Already watching
30
+ }
31
+
32
+ const policy = loadPolicy(this.projectRoot);
33
+ if (policy.mode !== "enforce") {
34
+ console.log("⚠️ File system hook only active in enforce mode");
35
+ return;
36
+ }
37
+
38
+ this.isEnabled = true;
39
+
40
+ // Watch for file changes
41
+ this.watcher = chokidar.watch([
42
+ "**/*.ts",
43
+ "**/*.tsx",
44
+ "**/*.js",
45
+ "**/*.jsx",
46
+ "**/*.py",
47
+ "**/*.go",
48
+ "**/*.rs"
49
+ ], {
50
+ cwd: this.projectRoot,
51
+ ignored: [
52
+ "**/node_modules/**",
53
+ "**/dist/**",
54
+ "**/.next/**",
55
+ "**/.vibecheck/**",
56
+ "**/.git/**",
57
+ "**/build/**"
58
+ ],
59
+ persistent: true,
60
+ ignoreInitial: true,
61
+ awaitWriteFinish: {
62
+ stabilityThreshold: 100,
63
+ pollInterval: 50
64
+ }
65
+ });
66
+
67
+ // Intercept file writes
68
+ this.watcher.on("add", (filePath) => this.handleFileWrite(filePath, "create"));
69
+ this.watcher.on("change", (filePath) => this.handleFileWrite(filePath, "modify"));
70
+
71
+ console.log("🛡️ File System Hook ACTIVE - intercepting all file writes");
72
+ }
73
+
74
+ /**
75
+ * Handle file write event
76
+ */
77
+ async handleFileWrite(filePath, operation) {
78
+ // Skip if we're already processing this file
79
+ if (this.pendingWrites.has(filePath)) {
80
+ return;
81
+ }
82
+
83
+ this.pendingWrites.set(filePath, true);
84
+
85
+ try {
86
+ // Read the new content
87
+ const fileAbs = path.join(this.projectRoot, filePath);
88
+ if (!fs.existsSync(fileAbs)) {
89
+ this.pendingWrites.delete(filePath);
90
+ return;
91
+ }
92
+
93
+ const newContent = fs.readFileSync(fileAbs, "utf8");
94
+
95
+ // Try to get old content from git or backup
96
+ let oldContent = null;
97
+ try {
98
+ // Check if file existed before (for modifications)
99
+ if (operation === "modify") {
100
+ // Try to read from git index
101
+ const { execSync } = require("child_process");
102
+ try {
103
+ oldContent = execSync(
104
+ `git show :${filePath}`,
105
+ { cwd: this.projectRoot, encoding: "utf8", stdio: "pipe" }
106
+ );
107
+ } catch {
108
+ // File not in git, that's okay
109
+ }
110
+ }
111
+ } catch {
112
+ // Couldn't get old content, that's okay
113
+ }
114
+
115
+ // Intercept the write
116
+ const result = await interceptFileWrite({
117
+ projectRoot: this.projectRoot,
118
+ agentId: "filesystem-hook",
119
+ intent: `File ${operation} via filesystem`,
120
+ filePath: filePath,
121
+ content: newContent,
122
+ oldContent: oldContent
123
+ });
124
+
125
+ const policy = loadPolicy(this.projectRoot);
126
+
127
+ // If blocked and in enforce mode, revert the file
128
+ if (!result.allowed && policy.mode === "enforce") {
129
+ console.error(`\n❌ BLOCKED: ${filePath}`);
130
+ console.error(` ${result.message}`);
131
+
132
+ if (result.violations) {
133
+ result.violations.forEach(v => {
134
+ console.error(` - ${v.rule}: ${v.message}`);
135
+ });
136
+ }
137
+
138
+ // Revert the file
139
+ if (oldContent !== null) {
140
+ fs.writeFileSync(fileAbs, oldContent, "utf8");
141
+ console.error(` ✅ File reverted to previous version\n`);
142
+ } else {
143
+ // Delete the file if it was newly created
144
+ fs.unlinkSync(fileAbs);
145
+ console.error(` ✅ File deleted (was newly created)\n`);
146
+ }
147
+
148
+ // Show unblock plan
149
+ if (result.unblockPlan && result.unblockPlan.steps.length > 0) {
150
+ console.error(" To fix:");
151
+ result.unblockPlan.steps.forEach((step, i) => {
152
+ console.error(` ${i + 1}. ${step.action}: ${step.description}`);
153
+ });
154
+ console.error("");
155
+ }
156
+ } else if (result.allowed || policy.mode === "observe") {
157
+ // Log in observe mode
158
+ if (policy.mode === "observe" && result.violations && result.violations.length > 0) {
159
+ console.log(`📊 OBSERVE: ${filePath} - violations logged (not blocked)`);
160
+ }
161
+ }
162
+ } catch (error) {
163
+ console.error(`Error intercepting file write: ${error.message}`);
164
+ } finally {
165
+ this.pendingWrites.delete(filePath);
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Stop watching
171
+ */
172
+ stop() {
173
+ if (this.watcher) {
174
+ this.watcher.close();
175
+ this.watcher = null;
176
+ this.isEnabled = false;
177
+ console.log("🛡️ File System Hook stopped");
178
+ }
179
+ }
180
+ }
181
+
182
+ module.exports = {
183
+ FileSystemHook
184
+ };
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Git Pre-Commit Hook
3
+ *
4
+ * Validates all staged changes against firewall policy before allowing commit.
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const { execSync } = require("child_process");
10
+ const fs = require("fs");
11
+ const path = require("path");
12
+ const { interceptFileWrite } = require("../interceptor/base");
13
+ const { loadPolicy } = require("../policy/loader");
14
+
15
+ /**
16
+ * Run pre-commit validation
17
+ * @param {string} projectRoot - Project root directory
18
+ * @returns {object} Validation result
19
+ */
20
+ async function validatePreCommit(projectRoot) {
21
+ const policy = loadPolicy(projectRoot);
22
+
23
+ // Only enforce in enforce mode
24
+ if (policy.mode !== "enforce") {
25
+ return { allowed: true, message: "Firewall in observe mode - commit allowed" };
26
+ }
27
+
28
+ try {
29
+ // Get staged files
30
+ const stagedFiles = getStagedFiles(projectRoot);
31
+
32
+ if (stagedFiles.length === 0) {
33
+ return { allowed: true, message: "No files staged" };
34
+ }
35
+
36
+ console.log(`🛡️ Agent Firewall: Validating ${stagedFiles.length} staged file(s)...\n`);
37
+
38
+ const violations = [];
39
+ const blockedFiles = [];
40
+
41
+ // Validate each staged file
42
+ for (const filePath of stagedFiles) {
43
+ const fileAbs = path.join(projectRoot, filePath);
44
+
45
+ if (!fs.existsSync(fileAbs)) {
46
+ continue; // File was deleted, skip
47
+ }
48
+
49
+ // Get old content from git
50
+ let oldContent = null;
51
+ try {
52
+ oldContent = execSync(
53
+ `git show :${filePath}`,
54
+ { cwd: projectRoot, encoding: "utf8", stdio: "pipe" }
55
+ );
56
+ } catch {
57
+ // File not in git (new file), that's okay
58
+ }
59
+
60
+ // Get new content
61
+ const newContent = fs.readFileSync(fileAbs, "utf8");
62
+
63
+ // Intercept the change
64
+ const result = await interceptFileWrite({
65
+ projectRoot,
66
+ agentId: "git-pre-commit",
67
+ intent: `Git commit: ${filePath}`,
68
+ filePath: filePath,
69
+ content: newContent,
70
+ oldContent: oldContent
71
+ });
72
+
73
+ if (!result.allowed) {
74
+ violations.push(...(result.violations || []));
75
+ blockedFiles.push({
76
+ file: filePath,
77
+ violations: result.violations || [],
78
+ unblockPlan: result.unblockPlan
79
+ });
80
+ }
81
+ }
82
+
83
+ if (blockedFiles.length > 0) {
84
+ console.error("\n❌ COMMIT BLOCKED by Agent Firewall\n");
85
+ console.error("Violations detected:\n");
86
+
87
+ blockedFiles.forEach(({ file, violations: fileViolations }) => {
88
+ console.error(` ${file}:`);
89
+ fileViolations.forEach(v => {
90
+ console.error(` - ${v.rule}: ${v.message}`);
91
+ });
92
+ console.error("");
93
+ });
94
+
95
+ // Show unblock plans
96
+ const allPlans = blockedFiles
97
+ .filter(bf => bf.unblockPlan && bf.unblockPlan.steps.length > 0)
98
+ .flatMap(bf => bf.unblockPlan.steps);
99
+
100
+ if (allPlans.length > 0) {
101
+ console.error("To fix:");
102
+ const uniqueSteps = new Map();
103
+ allPlans.forEach(step => {
104
+ const key = `${step.action}:${step.file}`;
105
+ if (!uniqueSteps.has(key)) {
106
+ uniqueSteps.set(key, step);
107
+ }
108
+ });
109
+ Array.from(uniqueSteps.values()).forEach((step, i) => {
110
+ console.error(` ${i + 1}. ${step.action.toUpperCase()}: ${step.file}`);
111
+ console.error(` ${step.description}`);
112
+ });
113
+ console.error("");
114
+ }
115
+
116
+ return {
117
+ allowed: false,
118
+ message: `Commit blocked: ${blockedFiles.length} file(s) have violations`,
119
+ blockedFiles,
120
+ violations
121
+ };
122
+ }
123
+
124
+ console.log("✅ All staged files validated - commit allowed\n");
125
+ return { allowed: true, message: "All files validated" };
126
+
127
+ } catch (error) {
128
+ console.error(`Error validating commit: ${error.message}`);
129
+ // In case of error, allow commit (fail open)
130
+ return { allowed: true, message: `Validation error: ${error.message}` };
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Get list of staged files
136
+ * @param {string} projectRoot - Project root directory
137
+ * @returns {array} Array of staged file paths
138
+ */
139
+ function getStagedFiles(projectRoot) {
140
+ try {
141
+ const output = execSync(
142
+ "git diff --cached --name-only --diff-filter=ACMR",
143
+ { cwd: projectRoot, encoding: "utf8", stdio: "pipe" }
144
+ );
145
+ return output
146
+ .trim()
147
+ .split("\n")
148
+ .filter(Boolean)
149
+ .filter(file => {
150
+ // Only check code files
151
+ const ext = path.extname(file);
152
+ return [".ts", ".tsx", ".js", ".jsx", ".py", ".go", ".rs"].includes(ext);
153
+ });
154
+ } catch (error) {
155
+ // Not a git repo or no staged files
156
+ return [];
157
+ }
158
+ }
159
+
160
+ module.exports = {
161
+ validatePreCommit,
162
+ getStagedFiles
163
+ };
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Cursor IDE Extension Hook
3
+ *
4
+ * Intercepts file writes at the IDE level for Cursor.
5
+ * Uses Cursor's extension API to hook into file save events.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const { interceptFileWrite } = require("../interceptor/base");
11
+ const { loadPolicy } = require("../policy/loader");
12
+ const fs = require("fs");
13
+ const path = require("path");
14
+
15
+ /**
16
+ * Cursor extension hook
17
+ * This would be called by a Cursor extension
18
+ */
19
+ class CursorFirewallHook {
20
+ constructor(projectRoot) {
21
+ this.projectRoot = projectRoot;
22
+ this.isEnabled = false;
23
+ }
24
+
25
+ /**
26
+ * Enable the hook
27
+ */
28
+ enable() {
29
+ this.isEnabled = true;
30
+ this.createCursorConfig();
31
+ }
32
+
33
+ /**
34
+ * Create Cursor configuration file
35
+ */
36
+ createCursorConfig() {
37
+ const cursorDir = path.join(this.projectRoot, ".cursor");
38
+ if (!fs.existsSync(cursorDir)) {
39
+ fs.mkdirSync(cursorDir, { recursive: true });
40
+ }
41
+
42
+ const configFile = path.join(cursorDir, "firewall-hook.json");
43
+ const config = {
44
+ enabled: true,
45
+ mode: "enforce",
46
+ interceptOnSave: true,
47
+ interceptOnCreate: true,
48
+ interceptOnEdit: false // Only on save/create, not every keystroke
49
+ };
50
+
51
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
52
+ }
53
+
54
+ /**
55
+ * Intercept file save (called by Cursor extension)
56
+ */
57
+ async interceptSave(filePath, content, oldContent) {
58
+ if (!this.isEnabled) {
59
+ return { allowed: true };
60
+ }
61
+
62
+ const policy = loadPolicy(this.projectRoot);
63
+
64
+ // In observe mode, just log
65
+ if (policy.mode === "observe") {
66
+ const result = await interceptFileWrite({
67
+ projectRoot: this.projectRoot,
68
+ agentId: "cursor-ide",
69
+ intent: "File save in Cursor",
70
+ filePath: filePath,
71
+ content: content,
72
+ oldContent: oldContent
73
+ });
74
+
75
+ if (result.violations && result.violations.length > 0) {
76
+ console.log(`📊 OBSERVE: ${filePath} - violations logged`);
77
+ }
78
+
79
+ return { allowed: true };
80
+ }
81
+
82
+ // In enforce mode, block violations
83
+ const result = await interceptFileWrite({
84
+ projectRoot: this.projectRoot,
85
+ agentId: "cursor-ide",
86
+ intent: "File save in Cursor",
87
+ filePath: filePath,
88
+ content: content,
89
+ oldContent: oldContent
90
+ });
91
+
92
+ if (!result.allowed) {
93
+ return {
94
+ allowed: false,
95
+ message: result.message,
96
+ violations: result.violations,
97
+ unblockPlan: result.unblockPlan
98
+ };
99
+ }
100
+
101
+ return { allowed: true };
102
+ }
103
+ }
104
+
105
+ module.exports = {
106
+ CursorFirewallHook
107
+ };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * VS Code Extension Hook
3
+ *
4
+ * Intercepts file writes at the IDE level for VS Code.
5
+ * Uses VS Code's extension API.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const { interceptFileWrite } = require("../interceptor/base");
11
+ const { loadPolicy } = require("../policy/loader");
12
+
13
+ /**
14
+ * VS Code extension hook
15
+ * This would be called by a VS Code extension
16
+ */
17
+ class VSCodeFirewallHook {
18
+ constructor(projectRoot) {
19
+ this.projectRoot = projectRoot;
20
+ this.isEnabled = false;
21
+ }
22
+
23
+ /**
24
+ * Enable the hook
25
+ */
26
+ enable() {
27
+ this.isEnabled = true;
28
+ }
29
+
30
+ /**
31
+ * Intercept file save (called by VS Code extension)
32
+ */
33
+ async interceptSave(filePath, content, oldContent) {
34
+ if (!this.isEnabled) {
35
+ return { allowed: true };
36
+ }
37
+
38
+ const policy = loadPolicy(this.projectRoot);
39
+
40
+ const result = await interceptFileWrite({
41
+ projectRoot: this.projectRoot,
42
+ agentId: "vscode-ide",
43
+ intent: "File save in VS Code",
44
+ filePath: filePath,
45
+ content: content,
46
+ oldContent: oldContent
47
+ });
48
+
49
+ if (policy.mode === "observe") {
50
+ return { allowed: true }; // Always allow in observe mode
51
+ }
52
+
53
+ if (!result.allowed) {
54
+ return {
55
+ allowed: false,
56
+ message: result.message,
57
+ violations: result.violations,
58
+ unblockPlan: result.unblockPlan
59
+ };
60
+ }
61
+
62
+ return { allowed: true };
63
+ }
64
+ }
65
+
66
+ module.exports = {
67
+ VSCodeFirewallHook
68
+ };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Windsurf IDE Extension Hook
3
+ *
4
+ * Intercepts file writes at the IDE level for Windsurf.
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const { interceptFileWrite } = require("../interceptor/base");
10
+ const { loadPolicy } = require("../policy/loader");
11
+
12
+ /**
13
+ * Windsurf extension hook
14
+ */
15
+ class WindsurfFirewallHook {
16
+ constructor(projectRoot) {
17
+ this.projectRoot = projectRoot;
18
+ this.isEnabled = false;
19
+ }
20
+
21
+ /**
22
+ * Enable the hook
23
+ */
24
+ enable() {
25
+ this.isEnabled = true;
26
+ }
27
+
28
+ /**
29
+ * Intercept file save
30
+ */
31
+ async interceptSave(filePath, content, oldContent) {
32
+ if (!this.isEnabled) {
33
+ return { allowed: true };
34
+ }
35
+
36
+ const policy = loadPolicy(this.projectRoot);
37
+
38
+ const result = await interceptFileWrite({
39
+ projectRoot: this.projectRoot,
40
+ agentId: "windsurf-ide",
41
+ intent: "File save in Windsurf",
42
+ filePath: filePath,
43
+ content: content,
44
+ oldContent: oldContent
45
+ });
46
+
47
+ if (policy.mode === "observe") {
48
+ return { allowed: true };
49
+ }
50
+
51
+ if (!result.allowed) {
52
+ return {
53
+ allowed: false,
54
+ message: result.message,
55
+ violations: result.violations,
56
+ unblockPlan: result.unblockPlan
57
+ };
58
+ }
59
+
60
+ return { allowed: true };
61
+ }
62
+ }
63
+
64
+ module.exports = {
65
+ WindsurfFirewallHook
66
+ };