@vibecheckai/cli 3.3.0 → 3.5.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 (170) hide show
  1. package/bin/registry.js +389 -269
  2. package/bin/runners/cli-utils.js +2 -33
  3. package/bin/runners/context/generators/cursor.js +49 -2
  4. package/bin/runners/lib/agent-firewall/learning/learning-engine.js +849 -0
  5. package/bin/runners/lib/analyzers.js +599 -142
  6. package/bin/runners/lib/audit-logger.js +532 -0
  7. package/bin/runners/lib/authority/authorities/architecture.js +364 -0
  8. package/bin/runners/lib/authority/authorities/compliance.js +341 -0
  9. package/bin/runners/lib/authority/authorities/human.js +343 -0
  10. package/bin/runners/lib/authority/authorities/quality.js +420 -0
  11. package/bin/runners/lib/authority/authorities/security.js +228 -0
  12. package/bin/runners/lib/authority/index.js +293 -0
  13. package/bin/runners/lib/authority-badge.js +425 -425
  14. package/bin/runners/lib/bundle/bundle-intelligence.js +846 -0
  15. package/bin/runners/lib/cli-charts.js +368 -0
  16. package/bin/runners/lib/cli-config-display.js +405 -0
  17. package/bin/runners/lib/cli-demo.js +275 -0
  18. package/bin/runners/lib/cli-errors.js +438 -0
  19. package/bin/runners/lib/cli-help-formatter.js +439 -0
  20. package/bin/runners/lib/cli-interactive-menu.js +509 -0
  21. package/bin/runners/lib/cli-prompts.js +441 -0
  22. package/bin/runners/lib/cli-scan-cards.js +362 -0
  23. package/bin/runners/lib/compliance-reporter.js +710 -0
  24. package/bin/runners/lib/conductor/index.js +671 -0
  25. package/bin/runners/lib/easy/README.md +123 -0
  26. package/bin/runners/lib/easy/index.js +140 -0
  27. package/bin/runners/lib/easy/interactive-wizard.js +788 -0
  28. package/bin/runners/lib/easy/one-click-firewall.js +564 -0
  29. package/bin/runners/lib/easy/zero-config-reality.js +714 -0
  30. package/bin/runners/lib/engines/accessibility-engine.js +218 -18
  31. package/bin/runners/lib/engines/api-consistency-engine.js +335 -30
  32. package/bin/runners/lib/engines/async-patterns-engine.js +444 -0
  33. package/bin/runners/lib/engines/bundle-size-engine.js +433 -0
  34. package/bin/runners/lib/engines/confidence-scoring.js +276 -0
  35. package/bin/runners/lib/engines/context-detection.js +264 -0
  36. package/bin/runners/lib/engines/cross-file-analysis-engine.js +292 -27
  37. package/bin/runners/lib/engines/database-patterns-engine.js +429 -0
  38. package/bin/runners/lib/engines/duplicate-code-engine.js +354 -0
  39. package/bin/runners/lib/engines/empty-catch-engine.js +127 -17
  40. package/bin/runners/lib/engines/env-variables-engine.js +458 -0
  41. package/bin/runners/lib/engines/error-handling-engine.js +437 -0
  42. package/bin/runners/lib/engines/false-positive-prevention.js +630 -0
  43. package/bin/runners/lib/engines/framework-adapters/index.js +607 -0
  44. package/bin/runners/lib/engines/framework-detection.js +508 -0
  45. package/bin/runners/lib/engines/import-order-engine.js +429 -0
  46. package/bin/runners/lib/engines/mock-data-engine.js +53 -10
  47. package/bin/runners/lib/engines/naming-conventions-engine.js +544 -0
  48. package/bin/runners/lib/engines/noise-reduction-engine.js +452 -0
  49. package/bin/runners/lib/engines/orchestrator.js +334 -0
  50. package/bin/runners/lib/engines/performance-issues-engine.js +176 -36
  51. package/bin/runners/lib/engines/react-patterns-engine.js +457 -0
  52. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +382 -54
  53. package/bin/runners/lib/engines/type-aware-engine.js +263 -39
  54. package/bin/runners/lib/engines/vibecheck-engines/index.js +122 -13
  55. package/bin/runners/lib/engines/vibecheck-engines/lib/ai-hallucination-engine.js +806 -0
  56. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +373 -73
  57. package/bin/runners/lib/engines/vibecheck-engines/lib/smart-fix-engine.js +577 -0
  58. package/bin/runners/lib/engines/vibecheck-engines/lib/vibe-score-engine.js +543 -0
  59. package/bin/runners/lib/engines/vibecheck-engines.js +514 -0
  60. package/bin/runners/lib/enhanced-features/index.js +305 -0
  61. package/bin/runners/lib/enhanced-output.js +631 -0
  62. package/bin/runners/lib/enterprise.js +300 -0
  63. package/bin/runners/lib/entitlements-v2.js +161 -478
  64. package/bin/runners/lib/firewall/command-validator.js +351 -0
  65. package/bin/runners/lib/firewall/config.js +341 -0
  66. package/bin/runners/lib/firewall/content-validator.js +519 -0
  67. package/bin/runners/lib/firewall/index.js +101 -0
  68. package/bin/runners/lib/firewall/path-validator.js +256 -0
  69. package/bin/runners/lib/html-proof-report.js +350 -700
  70. package/bin/runners/lib/intelligence/cross-repo-intelligence.js +817 -0
  71. package/bin/runners/lib/mcp-utils.js +425 -0
  72. package/bin/runners/lib/missions/plan.js +46 -6
  73. package/bin/runners/lib/missions/templates.js +232 -0
  74. package/bin/runners/lib/output/index.js +1022 -0
  75. package/bin/runners/lib/policy-engine.js +652 -0
  76. package/bin/runners/lib/polish/autofix/accessibility-fixes.js +333 -0
  77. package/bin/runners/lib/polish/autofix/async-handlers.js +273 -0
  78. package/bin/runners/lib/polish/autofix/dead-code.js +280 -0
  79. package/bin/runners/lib/polish/autofix/imports-optimizer.js +344 -0
  80. package/bin/runners/lib/polish/autofix/index.js +200 -0
  81. package/bin/runners/lib/polish/autofix/remove-consoles.js +209 -0
  82. package/bin/runners/lib/polish/autofix/strengthen-types.js +245 -0
  83. package/bin/runners/lib/polish/backend-checks.js +148 -0
  84. package/bin/runners/lib/polish/documentation-checks.js +111 -0
  85. package/bin/runners/lib/polish/frontend-checks.js +168 -0
  86. package/bin/runners/lib/polish/index.js +71 -0
  87. package/bin/runners/lib/polish/infrastructure-checks.js +131 -0
  88. package/bin/runners/lib/polish/library-detection.js +175 -0
  89. package/bin/runners/lib/polish/performance-checks.js +100 -0
  90. package/bin/runners/lib/polish/security-checks.js +148 -0
  91. package/bin/runners/lib/polish/utils.js +203 -0
  92. package/bin/runners/lib/prompt-builder.js +540 -0
  93. package/bin/runners/lib/proof-certificate.js +634 -0
  94. package/bin/runners/lib/reality/accessibility-audit.js +946 -0
  95. package/bin/runners/lib/reality/api-contract-validator.js +1012 -0
  96. package/bin/runners/lib/reality/chaos-engineering.js +1084 -0
  97. package/bin/runners/lib/reality/performance-tracker.js +1077 -0
  98. package/bin/runners/lib/reality/scenario-generator.js +1404 -0
  99. package/bin/runners/lib/reality/visual-regression.js +852 -0
  100. package/bin/runners/lib/reality-profiler.js +717 -0
  101. package/bin/runners/lib/replay/flight-recorder-viewer.js +1160 -0
  102. package/bin/runners/lib/review/ai-code-review.js +832 -0
  103. package/bin/runners/lib/rules/custom-rule-engine.js +985 -0
  104. package/bin/runners/lib/sbom-generator.js +641 -0
  105. package/bin/runners/lib/scan-output-enhanced.js +512 -0
  106. package/bin/runners/lib/scan-output.js +65 -19
  107. package/bin/runners/lib/security/owasp-scanner.js +939 -0
  108. package/bin/runners/lib/ship-output.js +18 -25
  109. package/bin/runners/lib/terminal-ui.js +113 -1
  110. package/bin/runners/lib/unified-cli-output.js +603 -430
  111. package/bin/runners/lib/upsell.js +90 -338
  112. package/bin/runners/lib/validators/contract-validator.js +283 -0
  113. package/bin/runners/lib/validators/dead-export-detector.js +279 -0
  114. package/bin/runners/lib/validators/dep-audit.js +245 -0
  115. package/bin/runners/lib/validators/env-validator.js +319 -0
  116. package/bin/runners/lib/validators/index.js +120 -0
  117. package/bin/runners/lib/validators/license-checker.js +252 -0
  118. package/bin/runners/lib/validators/route-validator.js +290 -0
  119. package/bin/runners/runAIAgent.js +5 -10
  120. package/bin/runners/runAgent.js +3 -0
  121. package/bin/runners/runApprove.js +1233 -1200
  122. package/bin/runners/runAuth.js +22 -1
  123. package/bin/runners/runAuthority.js +528 -0
  124. package/bin/runners/runCheckpoint.js +4 -24
  125. package/bin/runners/runClassify.js +862 -859
  126. package/bin/runners/runConductor.js +772 -0
  127. package/bin/runners/runContainer.js +366 -0
  128. package/bin/runners/runContext.js +3 -0
  129. package/bin/runners/runDoctor.js +28 -41
  130. package/bin/runners/runEasy.js +410 -0
  131. package/bin/runners/runFirewall.js +3 -0
  132. package/bin/runners/runFirewallHook.js +3 -0
  133. package/bin/runners/runFix.js +76 -66
  134. package/bin/runners/runGuard.js +411 -18
  135. package/bin/runners/runIaC.js +372 -0
  136. package/bin/runners/runInit.js +10 -60
  137. package/bin/runners/runMcp.js +11 -12
  138. package/bin/runners/runPolish.js +240 -64
  139. package/bin/runners/runPromptFirewall.js +5 -12
  140. package/bin/runners/runProve.js +20 -55
  141. package/bin/runners/runReality.js +68 -59
  142. package/bin/runners/runReport.js +31 -5
  143. package/bin/runners/runRuntime.js +5 -8
  144. package/bin/runners/runScan.js +194 -1273
  145. package/bin/runners/runShip.js +695 -47
  146. package/bin/runners/runTruth.js +3 -0
  147. package/bin/runners/runValidate.js +7 -11
  148. package/bin/runners/runVibe.js +791 -0
  149. package/bin/runners/runWatch.js +14 -23
  150. package/bin/vibecheck.js +179 -65
  151. package/mcp-server/index.js +202 -636
  152. package/mcp-server/lib/api-client.cjs +7 -299
  153. package/mcp-server/package.json +1 -1
  154. package/mcp-server/tier-auth.js +175 -574
  155. package/mcp-server/tools-v3.js +800 -505
  156. package/mcp-server/tools.js +495 -0
  157. package/package.json +1 -1
  158. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +0 -164
  159. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +0 -291
  160. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +0 -83
  161. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +0 -198
  162. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +0 -275
  163. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +0 -167
  164. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +0 -217
  165. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +0 -140
  166. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +0 -164
  167. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +0 -234
  168. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +0 -217
  169. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +0 -78
  170. package/mcp-server/index-v1.js +0 -698
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Authority System - The AI That Says No
3
+ *
4
+ * Allows designated approvers (human or automated) to sign off on changes.
5
+ *
6
+ * Built-in Authorities:
7
+ * - security: Security review (checks for vulnerabilities)
8
+ * - architecture: Architecture review (patterns, structure)
9
+ * - compliance: Compliance check (SOC2, GDPR, HIPAA, etc.)
10
+ * - quality: Code quality review
11
+ * - human: Requires human approval (creates GitHub issue/Slack message)
12
+ *
13
+ * @example
14
+ * const { listAuthorities, requestApproval } = require('./authority');
15
+ *
16
+ * // List available authorities
17
+ * const authorities = await listAuthorities();
18
+ *
19
+ * // Request approval from security authority
20
+ * const result = await requestApproval('security', {
21
+ * files: [{ path: 'src/auth.ts', content: '...' }],
22
+ * diff: '+ const password = "secret123";',
23
+ * });
24
+ *
25
+ * console.log(result.verdict); // 'APPROVED' or 'REJECTED'
26
+ */
27
+
28
+ "use strict";
29
+
30
+ const { SecurityAuthority } = require("./authorities/security");
31
+ const { ArchitectureAuthority } = require("./authorities/architecture");
32
+ const { ComplianceAuthority } = require("./authorities/compliance");
33
+ const { QualityAuthority } = require("./authorities/quality");
34
+ const { HumanAuthority } = require("./authorities/human");
35
+
36
+ // ═══════════════════════════════════════════════════════════════════════════════
37
+ // AUTHORITY REGISTRY
38
+ // ═══════════════════════════════════════════════════════════════════════════════
39
+
40
+ const AUTHORITIES = {
41
+ security: SecurityAuthority,
42
+ architecture: ArchitectureAuthority,
43
+ compliance: ComplianceAuthority,
44
+ quality: QualityAuthority,
45
+ human: HumanAuthority,
46
+ };
47
+
48
+ // ═══════════════════════════════════════════════════════════════════════════════
49
+ // PUBLIC API
50
+ // ═══════════════════════════════════════════════════════════════════════════════
51
+
52
+ /**
53
+ * List all available approval authorities
54
+ *
55
+ * @returns {Promise<Array<{name: string, description: string, automated: boolean, tier: string}>>}
56
+ */
57
+ async function listAuthorities() {
58
+ return Object.entries(AUTHORITIES).map(([name, Authority]) => ({
59
+ name,
60
+ description: Authority.description,
61
+ automated: Authority.automated,
62
+ tier: Authority.tier,
63
+ }));
64
+ }
65
+
66
+ /**
67
+ * Get a specific authority by name
68
+ *
69
+ * @param {string} authorityName - Name of the authority
70
+ * @returns {Object|null} Authority class or null if not found
71
+ */
72
+ function getAuthority(authorityName) {
73
+ return AUTHORITIES[authorityName] || null;
74
+ }
75
+
76
+ /**
77
+ * Check if an authority exists
78
+ *
79
+ * @param {string} authorityName - Name of the authority
80
+ * @returns {boolean}
81
+ */
82
+ function hasAuthority(authorityName) {
83
+ return authorityName in AUTHORITIES;
84
+ }
85
+
86
+ /**
87
+ * Request approval from a specific authority
88
+ *
89
+ * @param {string} authorityName - Name of the authority to request approval from
90
+ * @param {Object} payload - The payload to review
91
+ * @param {Array<{path: string, content: string}>} payload.files - Files to review
92
+ * @param {string} payload.diff - Git diff of changes
93
+ * @param {Object} payload.context - Additional context (branch, commit, etc.)
94
+ * @param {Object} options - Additional options for the authority
95
+ * @returns {Promise<{
96
+ * authority: string,
97
+ * verdict: 'APPROVED' | 'REJECTED' | 'PENDING',
98
+ * reason: string,
99
+ * findings: Array<Object>,
100
+ * timestamp: string,
101
+ * signature: string,
102
+ * metadata?: Object
103
+ * }>}
104
+ */
105
+ async function requestApproval(authorityName, payload, options = {}) {
106
+ const Authority = AUTHORITIES[authorityName];
107
+
108
+ if (!Authority) {
109
+ throw new Error(`Unknown authority: ${authorityName}`);
110
+ }
111
+
112
+ const authority = new Authority(options);
113
+ const result = await authority.review(payload);
114
+
115
+ // Determine verdict from result
116
+ let verdict;
117
+ if (result.status === "pending") {
118
+ verdict = "PENDING";
119
+ } else {
120
+ verdict = result.approved ? "APPROVED" : "REJECTED";
121
+ }
122
+
123
+ return {
124
+ authority: authorityName,
125
+ verdict,
126
+ reason: result.reason,
127
+ findings: result.findings || [],
128
+ timestamp: new Date().toISOString(),
129
+ signature: result.signature,
130
+ metadata: result.metadata,
131
+ // Include additional fields from specific authorities
132
+ ...(result.qualityScore !== undefined && { qualityScore: result.qualityScore }),
133
+ ...(result.metrics && { metrics: result.metrics }),
134
+ ...(result.approvalRequest && { approvalRequest: result.approvalRequest }),
135
+ ...(result.notifications && { notifications: result.notifications }),
136
+ ...(result.existingApproval && { existingApproval: result.existingApproval }),
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Run multiple authorities in parallel
142
+ *
143
+ * @param {string[]} authorityNames - Names of authorities to run
144
+ * @param {Object} payload - The payload to review
145
+ * @param {Object} options - Options passed to each authority
146
+ * @returns {Promise<Array<Object>>} Results from all authorities
147
+ */
148
+ async function requestMultipleApprovals(authorityNames, payload, options = {}) {
149
+ const results = await Promise.all(
150
+ authorityNames.map(name =>
151
+ requestApproval(name, payload, options[name] || {})
152
+ .catch(error => ({
153
+ authority: name,
154
+ verdict: "ERROR",
155
+ reason: error.message,
156
+ findings: [],
157
+ timestamp: new Date().toISOString(),
158
+ signature: null,
159
+ error: true,
160
+ }))
161
+ )
162
+ );
163
+
164
+ return results;
165
+ }
166
+
167
+ /**
168
+ * Get aggregated verdict from multiple authority results
169
+ *
170
+ * @param {Array<Object>} results - Results from requestMultipleApprovals
171
+ * @returns {{
172
+ * verdict: 'APPROVED' | 'REJECTED' | 'PENDING',
173
+ * summary: Object,
174
+ * blockers: Array<string>
175
+ * }}
176
+ */
177
+ function getAggregatedVerdict(results) {
178
+ const summary = {
179
+ total: results.length,
180
+ approved: 0,
181
+ rejected: 0,
182
+ pending: 0,
183
+ error: 0,
184
+ };
185
+
186
+ const blockers = [];
187
+
188
+ for (const result of results) {
189
+ switch (result.verdict) {
190
+ case "APPROVED":
191
+ summary.approved++;
192
+ break;
193
+ case "REJECTED":
194
+ summary.rejected++;
195
+ blockers.push(`${result.authority}: ${result.reason}`);
196
+ break;
197
+ case "PENDING":
198
+ summary.pending++;
199
+ blockers.push(`${result.authority}: Awaiting approval`);
200
+ break;
201
+ case "ERROR":
202
+ summary.error++;
203
+ blockers.push(`${result.authority}: Error - ${result.reason}`);
204
+ break;
205
+ }
206
+ }
207
+
208
+ let verdict;
209
+ if (summary.rejected > 0 || summary.error > 0) {
210
+ verdict = "REJECTED";
211
+ } else if (summary.pending > 0) {
212
+ verdict = "PENDING";
213
+ } else {
214
+ verdict = "APPROVED";
215
+ }
216
+
217
+ return {
218
+ verdict,
219
+ summary,
220
+ blockers,
221
+ };
222
+ }
223
+
224
+ /**
225
+ * Register a custom authority
226
+ *
227
+ * @param {string} name - Name for the authority
228
+ * @param {Function} AuthorityClass - Authority class with static description, automated, tier properties
229
+ */
230
+ function registerAuthority(name, AuthorityClass) {
231
+ if (AUTHORITIES[name]) {
232
+ throw new Error(`Authority "${name}" is already registered`);
233
+ }
234
+
235
+ if (!AuthorityClass.description) {
236
+ throw new Error("Authority class must have a static 'description' property");
237
+ }
238
+
239
+ if (typeof AuthorityClass.prototype.review !== "function") {
240
+ throw new Error("Authority class must have a 'review' method");
241
+ }
242
+
243
+ AUTHORITIES[name] = AuthorityClass;
244
+ }
245
+
246
+ /**
247
+ * Unregister a custom authority (built-in authorities cannot be removed)
248
+ *
249
+ * @param {string} name - Name of the authority to remove
250
+ */
251
+ function unregisterAuthority(name) {
252
+ const builtInAuthorities = ["security", "architecture", "compliance", "quality", "human"];
253
+
254
+ if (builtInAuthorities.includes(name)) {
255
+ throw new Error(`Cannot unregister built-in authority: ${name}`);
256
+ }
257
+
258
+ if (!AUTHORITIES[name]) {
259
+ throw new Error(`Authority "${name}" is not registered`);
260
+ }
261
+
262
+ delete AUTHORITIES[name];
263
+ }
264
+
265
+ // ═══════════════════════════════════════════════════════════════════════════════
266
+ // EXPORTS
267
+ // ═══════════════════════════════════════════════════════════════════════════════
268
+
269
+ module.exports = {
270
+ // Core API
271
+ listAuthorities,
272
+ requestApproval,
273
+ requestMultipleApprovals,
274
+ getAggregatedVerdict,
275
+
276
+ // Authority management
277
+ getAuthority,
278
+ hasAuthority,
279
+ registerAuthority,
280
+ unregisterAuthority,
281
+
282
+ // Authority classes (for extension/testing)
283
+ SecurityAuthority,
284
+ ArchitectureAuthority,
285
+ ComplianceAuthority,
286
+ QualityAuthority,
287
+ HumanAuthority,
288
+
289
+ // Registry (read-only access)
290
+ get AUTHORITIES() {
291
+ return { ...AUTHORITIES };
292
+ },
293
+ };