vibecheck-ai 2.0.2 → 5.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 (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 +380 -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,265 @@
1
+ /**
2
+ * VibeCheck Entitlements
3
+ *
4
+ * Simple 2-tier model:
5
+ * - FREE ($0): Inspect & Observe
6
+ * - PRO ($49/mo): Fix, Prove & Enforce
7
+ */
8
+
9
+ "use strict";
10
+
11
+ const fs = require("fs");
12
+ const path = require("path");
13
+ const os = require("os");
14
+
15
+ // ============================================================================
16
+ // EXIT CODES
17
+ // ============================================================================
18
+ const EXIT_SUCCESS = 0;
19
+ const EXIT_FEATURE_NOT_ALLOWED = 3;
20
+
21
+ // ============================================================================
22
+ // TIERS
23
+ // ============================================================================
24
+ const TIERS = {
25
+ free: { name: "FREE", price: 0 },
26
+ pro: { name: "PRO", price: 69 },
27
+ };
28
+
29
+ // ============================================================================
30
+ // GATED FEATURES
31
+ // ============================================================================
32
+ const FREE_FEATURES = [
33
+ // Setup & environment
34
+ "init", "doctor", "install", "status", "watch", "preflight",
35
+ // Scan & analysis
36
+ "scan", "runtime",
37
+ // AI verification
38
+ "ctx", "contracts", "verify",
39
+ // Reports
40
+ "report", "export",
41
+ // Account
42
+ "login", "logout", "whoami",
43
+ // Preview modes
44
+ "reality.preview", "firewall.observe",
45
+ // Misc
46
+ "labs", "mdc",
47
+ ];
48
+
49
+ const PRO_FEATURES = [
50
+ // CI/CD & PR
51
+ "gate", "pr", "badge", "ship",
52
+ // Fixes
53
+ "fix", "fix.apply", "fix.analyze", "fix.diff", "fix.rules", "scan.autofix",
54
+ // Prove & verify
55
+ "prove", "replay", "permissions", "graph", "ai-test", "share",
56
+ // Advanced
57
+ "checkpoint", "polish", "guard", "context",
58
+ // Full modes
59
+ "firewall.enforce", "reality.full", "mcp.full",
60
+ // All FREE features
61
+ ...FREE_FEATURES,
62
+ ];
63
+
64
+ /**
65
+ * Check if developer mode bypass is allowed.
66
+ *
67
+ * SECURITY: VIBECHECK_DEV_PRO is ONLY allowed in non-production environments.
68
+ * This prevents environment variable injection from granting PRO access in production.
69
+ *
70
+ * @returns {boolean} True only if in development AND VIBECHECK_DEV_PRO=1
71
+ */
72
+ function isDevProBypassAllowed() {
73
+ // SECURITY: Never allow dev bypass in production
74
+ if (process.env.NODE_ENV === "production") {
75
+ return false;
76
+ }
77
+ // Also block in CI environments to prevent pipeline exploitation
78
+ if (process.env.CI === "true" || process.env.CI === "1") {
79
+ return false;
80
+ }
81
+ return process.env.VIBECHECK_DEV_PRO === "1";
82
+ }
83
+
84
+ function isPro(tier) {
85
+ // Developer mode bypass (blocked in production)
86
+ if (isDevProBypassAllowed()) return true;
87
+ return tier === "pro";
88
+ }
89
+
90
+ function tierHasFeature(tier, feature) {
91
+ // Developer mode bypass - grant all features (blocked in production)
92
+ if (isDevProBypassAllowed()) return true;
93
+ if (tier === "pro") return true; // PRO has everything
94
+ return FREE_FEATURES.includes(feature);
95
+ }
96
+
97
+ // ============================================================================
98
+ // API
99
+ // ============================================================================
100
+ const API_BASE_URL = process.env.VIBECHECK_API_URL || "https://api.vibecheckai.dev";
101
+
102
+ let _cachedTier = null;
103
+ let _cachedTierExpiry = 0;
104
+
105
+ async function getTier(options = {}) {
106
+ const { apiKey, forceRefresh = false } = options;
107
+
108
+ // Developer mode: VIBECHECK_DEV_PRO=1 grants pro tier for local development
109
+ // SECURITY: This bypass is blocked in production environments
110
+ if (isDevProBypassAllowed()) {
111
+ _cachedTier = "pro";
112
+ _cachedTierExpiry = Date.now() + 86400000; // 24 hours
113
+ return "pro";
114
+ }
115
+
116
+ if (!forceRefresh && _cachedTier && Date.now() < _cachedTierExpiry) {
117
+ return _cachedTier;
118
+ }
119
+
120
+ if (!apiKey) {
121
+ _cachedTier = "free";
122
+ _cachedTierExpiry = Date.now() + 300000;
123
+ return "free";
124
+ }
125
+
126
+ try {
127
+ const res = await fetch(`${API_BASE_URL}/v1/auth/whoami`, {
128
+ method: "GET",
129
+ headers: { "Authorization": `Bearer ${apiKey}` },
130
+ signal: AbortSignal.timeout(5000),
131
+ });
132
+
133
+ if (res.ok) {
134
+ const data = await res.json();
135
+ // Map any paid tier to 'pro'
136
+ const plan = data.plan || data.tier || "free";
137
+ _cachedTier = (plan === "free") ? "free" : "pro";
138
+ _cachedTierExpiry = Date.now() + 300000;
139
+ return _cachedTier;
140
+ }
141
+ } catch {
142
+ // Network error - default to free
143
+ }
144
+
145
+ return "free";
146
+ }
147
+
148
+ // ============================================================================
149
+ // ENFORCE
150
+ // ============================================================================
151
+ async function enforce(feature, options = {}) {
152
+ const { apiKey, silent = false } = options;
153
+ const tier = await getTier({ apiKey });
154
+
155
+ const hasAccess = tierHasFeature(tier, feature);
156
+
157
+ if (hasAccess) {
158
+ return { allowed: true, tier };
159
+ }
160
+
161
+ const message = formatUpgradeMessage(feature);
162
+ if (!silent) {
163
+ console.error(message);
164
+ }
165
+
166
+ return {
167
+ allowed: false,
168
+ tier,
169
+ exitCode: EXIT_FEATURE_NOT_ALLOWED,
170
+ message,
171
+ };
172
+ }
173
+
174
+ async function enforceOrExit(feature, options = {}) {
175
+ const result = await enforce(feature, options);
176
+ if (!result.allowed) {
177
+ process.exit(result.exitCode);
178
+ }
179
+ return result;
180
+ }
181
+
182
+ async function checkCommand(command, options = {}) {
183
+ return enforce(command, { ...options, silent: true });
184
+ }
185
+
186
+ // ============================================================================
187
+ // MESSAGING
188
+ // ============================================================================
189
+ const c = {
190
+ reset: "\x1b[0m",
191
+ bold: "\x1b[1m",
192
+ cyan: "\x1b[36m",
193
+ yellow: "\x1b[33m",
194
+ };
195
+
196
+ function formatUpgradeMessage(feature) {
197
+ return `
198
+ ${c.bold}This feature requires Pro.${c.reset}
199
+
200
+ ${c.yellow}${feature}${c.reset} is a Pro feature.
201
+
202
+ Upgrade to Pro ($49/mo) to unlock Fix, Prove & Enforce capabilities.
203
+
204
+ vibecheck upgrade
205
+ https://vibecheckai.dev/pricing
206
+ `;
207
+ }
208
+
209
+ // ============================================================================
210
+ // TIER LIMITS
211
+ // ============================================================================
212
+ const TIER_LIMITS = {
213
+ free: {
214
+ reportFormats: ["html", "md", "json"],
215
+ maxScansPerMonth: 100,
216
+ maxFilesPerScan: 1000,
217
+ },
218
+ pro: {
219
+ reportFormats: ["html", "md", "json", "sarif", "csv", "pdf"],
220
+ maxScansPerMonth: -1, // unlimited
221
+ maxFilesPerScan: -1, // unlimited
222
+ },
223
+ };
224
+
225
+ /**
226
+ * Get limits for a tier
227
+ */
228
+ function getLimits(tier) {
229
+ return TIER_LIMITS[tier] || TIER_LIMITS.free;
230
+ }
231
+
232
+ /**
233
+ * Check if current tier meets minimum required tier
234
+ */
235
+ function tierMeetsMinimum(current, required) {
236
+ const tierOrder = ['free', 'pro'];
237
+ const currentIndex = tierOrder.indexOf(current);
238
+ const requiredIndex = tierOrder.indexOf(required);
239
+ return currentIndex >= requiredIndex;
240
+ }
241
+
242
+ // ============================================================================
243
+ // EXPORTS
244
+ // ============================================================================
245
+ module.exports = {
246
+ // Core
247
+ getTier,
248
+ enforce,
249
+ enforceOrExit,
250
+ checkCommand,
251
+
252
+ // Helpers
253
+ isPro,
254
+ tierHasFeature,
255
+ getLimits,
256
+ tierMeetsMinimum,
257
+
258
+ // Constants
259
+ TIERS,
260
+ TIER_LIMITS,
261
+ FREE_FEATURES,
262
+ PRO_FEATURES,
263
+ EXIT_SUCCESS,
264
+ EXIT_FEATURE_NOT_ALLOWED,
265
+ };
File without changes
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Entitlements System - CLI Wrapper
3
+ *
4
+ * @deprecated Use entitlements-v2.js for new code. This module wraps @vibecheck/core
5
+ * and is kept for backward compatibility only.
6
+ *
7
+ * ⚠️ AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY
8
+ *
9
+ * This file wraps the canonical entitlements implementation from @vibecheck/core.
10
+ * The source of truth is packages/core/src/entitlements.ts
11
+ *
12
+ * To modify entitlements logic, edit packages/core/src/entitlements.ts
13
+ * then run `pnpm build` in packages/core.
14
+ *
15
+ * This wrapper exists to:
16
+ * 1. Provide CommonJS exports for CLI runners
17
+ * 2. Add CLI-specific functionality (server-usage integration)
18
+ * 3. Maintain backward compatibility with existing CLI code
19
+ */
20
+
21
+ "use strict";
22
+
23
+ // Import from compiled @vibecheck/core
24
+ let coreEntitlements;
25
+ let usingFallback = false;
26
+ try {
27
+ coreEntitlements = require("@vibecheck/core");
28
+ } catch (e) {
29
+ // Fallback for development: try direct path
30
+ try {
31
+ coreEntitlements = require("../../../packages/dist-core/index.js");
32
+ } catch (e2) {
33
+ // Silent fallback - only show warning in verbose mode or when DEBUG is set
34
+ if (process.env.DEBUG || process.env.VIBECHECK_DEBUG) {
35
+ console.error(
36
+ "[entitlements] Using fallback mode. Run `pnpm build` in packages/core for full features.",
37
+ );
38
+ }
39
+ usingFallback = true;
40
+ // Provide minimal fallback
41
+ coreEntitlements = {
42
+ TIER_CONFIG: {},
43
+ SEAT_PRICING: {},
44
+ entitlements: {
45
+ getCurrentTier: async () => "free",
46
+ checkFeature: async () => ({ allowed: true }),
47
+ checkLimit: async () => ({ allowed: true }),
48
+ enforceFeature: async () => {},
49
+ enforceLimit: async () => {},
50
+ trackUsage: async () => {},
51
+ getUsageSummary: async () => "Usage summary unavailable",
52
+ getTierConfig: () => ({}),
53
+ checkSeatLimit: () => ({ allowed: true, effectiveSeats: 1 }),
54
+ },
55
+ calculateEffectiveSeats: () => 1,
56
+ canAddMember: () => ({ allowed: true }),
57
+ formatSeatInfo: () => "1 seat",
58
+ validateSeatReduction: () => ({ safe: true }),
59
+ };
60
+ }
61
+ }
62
+
63
+ // Import server-usage for CLI-specific server-authoritative enforcement
64
+ const { serverUsage } = require("./server-usage");
65
+
66
+ // Re-export everything from core
67
+ const {
68
+ TIER_CONFIG,
69
+ SEAT_PRICING,
70
+ entitlements,
71
+ calculateEffectiveSeats,
72
+ canAddMember,
73
+ formatSeatInfo,
74
+ validateSeatReduction,
75
+ isValidTier,
76
+ getTierConfig,
77
+ getMinimumTierForFeature,
78
+ } = coreEntitlements;
79
+
80
+ // ============================================================================
81
+ // CLI-SPECIFIC WRAPPER
82
+ // ============================================================================
83
+
84
+ /**
85
+ * CLI Entitlements Manager
86
+ * Wraps core entitlements with CLI-specific server-authoritative checks
87
+ */
88
+ class CLIEntitlementsManager {
89
+ constructor(coreManager) {
90
+ this._core = coreManager;
91
+ }
92
+
93
+ async getCurrentTier() {
94
+ return this._core.getCurrentTier();
95
+ }
96
+
97
+ async checkFeature(feature) {
98
+ return this._core.checkFeature(feature);
99
+ }
100
+
101
+ /**
102
+ * Check usage limits - SERVER-AUTHORITATIVE for CLI
103
+ */
104
+ async checkLimit(limitType) {
105
+ // Map old limit types to new action types
106
+ const actionMap = {
107
+ scans: "scan",
108
+ realityRuns: "reality",
109
+ aiAgentRuns: "agent",
110
+ };
111
+ const actionType = actionMap[limitType] || limitType;
112
+
113
+ // Use server-authoritative check
114
+ try {
115
+ const result = await serverUsage.checkUsage(actionType);
116
+
117
+ if (result.allowed) {
118
+ return {
119
+ allowed: true,
120
+ usage: result.current,
121
+ limit: result.limit === -1 ? Infinity : result.limit,
122
+ source: result.source,
123
+ };
124
+ }
125
+
126
+ const tier = await this.getCurrentTier();
127
+ return {
128
+ allowed: false,
129
+ reason:
130
+ result.reason ||
131
+ `Monthly ${limitType} limit reached (${result.current}/${result.limit})`,
132
+ usage: result.current,
133
+ limit: result.limit,
134
+ upgradePrompt: this._core.formatLimitUpgradePrompt(
135
+ tier,
136
+ limitType,
137
+ result.current,
138
+ result.limit,
139
+ ),
140
+ source: result.source,
141
+ };
142
+ } catch (error) {
143
+ // Fallback to core check if server is unreachable
144
+ return this._core.checkLimit(limitType);
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Track usage - SERVER-AUTHORITATIVE for CLI
150
+ */
151
+ async trackUsage(type, count = 1) {
152
+ // Map old types to new action types
153
+ const actionMap = {
154
+ scans: "scan",
155
+ realityRuns: "reality",
156
+ aiAgentRuns: "agent",
157
+ gateRuns: "gate",
158
+ fixRuns: "fix",
159
+ };
160
+ const actionType = actionMap[type] || type;
161
+
162
+ // Record on server (authoritative)
163
+ try {
164
+ const result = await serverUsage.recordUsage(actionType, count);
165
+ // Also update local via core
166
+ await this._core.trackUsage(type, count);
167
+ return result;
168
+ } catch (error) {
169
+ // Still update local, mark as unsynced
170
+ await this._core.trackUsage(type, count);
171
+ return { success: false, error: error.message, queued: true };
172
+ }
173
+ }
174
+
175
+ async enforceFeature(feature) {
176
+ return this._core.enforceFeature(feature);
177
+ }
178
+
179
+ /**
180
+ * Enforce usage limits - SERVER-AUTHORITATIVE for CLI
181
+ */
182
+ async enforceLimit(limitType) {
183
+ // Check if sync is required first
184
+ const needsSync = await serverUsage.requiresSync();
185
+ if (needsSync) {
186
+ const syncResult = await serverUsage.syncOfflineUsage();
187
+ if (syncResult.error) {
188
+ // Allow offline mode by default - CLI should work without internet
189
+ console.warn(
190
+ "\x1b[33mWarning: Could not connect to vibecheck API, using offline mode\x1b[0m\n",
191
+ );
192
+ return { allowed: true, source: "offline" };
193
+ }
194
+ }
195
+
196
+ const check = await this.checkLimit(limitType);
197
+ if (!check.allowed) {
198
+ const error = new Error(check.reason);
199
+ error.code = "LIMIT_EXCEEDED";
200
+ error.upgradePrompt = check.upgradePrompt;
201
+ error.usage = check.usage;
202
+ error.limit = check.limit;
203
+ throw error;
204
+ }
205
+
206
+ return check;
207
+ }
208
+
209
+ async getUsageSummary() {
210
+ // Try to get server-authoritative summary
211
+ try {
212
+ const serverSummary = await serverUsage.getUsageSummary();
213
+
214
+ if (serverSummary.success !== false && serverSummary.usage) {
215
+ const tier = serverSummary.tier || (await this.getCurrentTier());
216
+ const config = TIER_CONFIG[tier];
217
+ const limits = serverSummary.limits || config.limits;
218
+
219
+ const formatLimit = (current, limit) => {
220
+ if (limit === -1) return `${current} (unlimited)`;
221
+ const pct = Math.round((current / limit) * 100);
222
+ const bar = this.progressBar(pct);
223
+ return `${current}/${limit} ${bar} ${pct}%`;
224
+ };
225
+
226
+ const lines = [
227
+ "",
228
+ `\x1b[1m📊 Usage Summary\x1b[0m (\x1b[36m${config.name}\x1b[0m tier - $${config.price}/mo)`,
229
+ "\x1b[90m" + "─".repeat(50) + "\x1b[0m",
230
+ `Scans: ${formatLimit(serverSummary.usage.scan || 0, limits.scans || limits.scansPerMonth)}`,
231
+ `Reality Runs: ${formatLimit(serverSummary.usage.reality || 0, limits.reality || limits.realityRunsPerMonth)}`,
232
+ `AI Agent: ${formatLimit(serverSummary.usage.agent || 0, limits.agent || limits.aiAgentRunsPerMonth)}`,
233
+ `Team Seats: ${formatSeatInfo(tier)}`,
234
+ "\x1b[90m" + "─".repeat(50) + "\x1b[0m",
235
+ ];
236
+
237
+ if (serverSummary.period) {
238
+ lines.push(
239
+ `Period: ${serverSummary.period.start.split("T")[0]} to ${serverSummary.period.end.split("T")[0]}`,
240
+ );
241
+ }
242
+
243
+ if (serverSummary.pendingOffline > 0) {
244
+ lines.push(
245
+ `\x1b[33m⚠ ${serverSummary.pendingOffline} action(s) pending sync\x1b[0m`,
246
+ );
247
+ }
248
+
249
+ lines.push(
250
+ `\x1b[90mSource: ${serverSummary.source || "server"}\x1b[0m`,
251
+ );
252
+ lines.push("");
253
+
254
+ return lines.join("\n");
255
+ }
256
+ } catch {
257
+ // Fall through to core summary
258
+ }
259
+
260
+ return this._core.getUsageSummary();
261
+ }
262
+
263
+ getTierConfig(tier) {
264
+ return this._core.getTierConfig(tier);
265
+ }
266
+
267
+ getAllTiers() {
268
+ return this._core.getAllTiers();
269
+ }
270
+
271
+ // Seat management
272
+ checkSeatLimit(tier, currentMemberCount, purchasedExtraSeats) {
273
+ return this._core.checkSeatLimit(
274
+ tier,
275
+ currentMemberCount,
276
+ purchasedExtraSeats,
277
+ );
278
+ }
279
+
280
+ getOrganizationSeats(tier, purchasedExtraSeats, currentMembers) {
281
+ return this._core.getOrganizationSeats(
282
+ tier,
283
+ purchasedExtraSeats,
284
+ currentMembers,
285
+ );
286
+ }
287
+
288
+ progressBar(percent) {
289
+ const filled = Math.min(10, Math.round(percent / 10));
290
+ const empty = 10 - filled;
291
+ return `[${"█".repeat(filled)}${"░".repeat(empty)}]`;
292
+ }
293
+ }
294
+
295
+ // Create CLI-specific wrapper
296
+ const cliEntitlements = new CLIEntitlementsManager(entitlements);
297
+
298
+ // ============================================================================
299
+ // EXPORTS
300
+ // ============================================================================
301
+
302
+ module.exports = {
303
+ // Main entitlements instance (CLI wrapper)
304
+ entitlements: cliEntitlements,
305
+
306
+ // Tier configuration
307
+ TIER_CONFIG,
308
+ SEAT_PRICING,
309
+
310
+ // Convenience functions
311
+ checkFeature: (feature) => cliEntitlements.checkFeature(feature),
312
+ checkLimit: (limitType) => cliEntitlements.checkLimit(limitType),
313
+ enforceFeature: (feature) => cliEntitlements.enforceFeature(feature),
314
+ enforceLimit: (limitType) => cliEntitlements.enforceLimit(limitType),
315
+ trackUsage: (type, count) => cliEntitlements.trackUsage(type, count),
316
+ getCurrentTier: () => cliEntitlements.getCurrentTier(),
317
+ getUsageSummary: () => cliEntitlements.getUsageSummary(),
318
+ getTierConfig: (tier) => cliEntitlements.getTierConfig(tier),
319
+
320
+ // Seat management
321
+ checkSeatLimit: (tier, currentMemberCount, purchasedExtraSeats) =>
322
+ cliEntitlements.checkSeatLimit(
323
+ tier,
324
+ currentMemberCount,
325
+ purchasedExtraSeats,
326
+ ),
327
+ calculateEffectiveSeats,
328
+ canAddMember,
329
+ formatSeatInfo,
330
+ validateSeatReduction,
331
+
332
+ // Tier helpers
333
+ isValidTier,
334
+ getMinimumTierForFeature,
335
+
336
+ // Server-authoritative usage enforcement
337
+ serverUsage,
338
+ syncOfflineUsage: () => serverUsage.syncOfflineUsage(),
339
+ requiresSync: () => serverUsage.requiresSync(),
340
+ };