@vibecheckai/cli 3.8.0 → 3.9.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 (34) hide show
  1. package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -98
  2. package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -318
  3. package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -484
  4. package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -418
  5. package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -333
  6. package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +634 -622
  7. package/bin/runners/lib/agent-firewall/intent/index.js +102 -102
  8. package/bin/runners/lib/agent-firewall/intent/schema.js +352 -352
  9. package/bin/runners/lib/agent-firewall/intent/store.js +283 -283
  10. package/bin/runners/lib/agent-firewall/interceptor/base.js +7 -3
  11. package/bin/runners/lib/engine/ast-cache.js +210 -210
  12. package/bin/runners/lib/engine/auth-extractor.js +211 -211
  13. package/bin/runners/lib/engine/billing-extractor.js +112 -112
  14. package/bin/runners/lib/engine/enforcement-extractor.js +100 -100
  15. package/bin/runners/lib/engine/env-extractor.js +207 -207
  16. package/bin/runners/lib/engine/express-extractor.js +208 -208
  17. package/bin/runners/lib/engine/extractors.js +849 -849
  18. package/bin/runners/lib/engine/index.js +207 -207
  19. package/bin/runners/lib/engine/repo-index.js +514 -514
  20. package/bin/runners/lib/engine/types.js +124 -124
  21. package/bin/runners/runIntent.js +906 -906
  22. package/bin/runners/runPacks.js +2089 -2089
  23. package/bin/runners/runReality.js +178 -1
  24. package/bin/runners/runShield.js +1282 -1282
  25. package/mcp-server/handlers/index.ts +2 -2
  26. package/mcp-server/handlers/tool-handler.ts +47 -8
  27. package/mcp-server/lib/executor.ts +5 -5
  28. package/mcp-server/lib/index.ts +14 -4
  29. package/mcp-server/lib/sandbox.test.ts +4 -4
  30. package/mcp-server/lib/sandbox.ts +2 -2
  31. package/mcp-server/package.json +1 -1
  32. package/mcp-server/registry.test.ts +18 -12
  33. package/mcp-server/tsconfig.json +1 -0
  34. package/package.json +2 -1
@@ -1,207 +1,207 @@
1
- // bin/runners/lib/engine/index.js
2
- // Main entry point for the vNext scanner engine
3
-
4
- const { RepoIndex, DEFAULT_IGNORE, PREFILTER_TOKENS } = require("./repo-index");
5
- const { ASTCache, globalASTCache, DEFAULT_PARSER_OPTIONS } = require("./ast-cache");
6
- const {
7
- extractNextAppRoutes,
8
- extractNextPagesRoutes,
9
- extractClientRefs,
10
- extractFastifyRoutes,
11
- detectFastifyEntries,
12
- canonicalizeMethod,
13
- canonicalizePath,
14
- joinPaths,
15
- } = require("./extractors");
16
- const {
17
- extractEnvUsage,
18
- extractEnvDeclared,
19
- buildEnvTruthV2,
20
- } = require("./env-extractor");
21
- const { buildBillingTruthV2 } = require("./billing-extractor");
22
- const { buildAuthTruthV2 } = require("./auth-extractor");
23
- const { buildEnforcementTruthV2 } = require("./enforcement-extractor");
24
- const { extractExpressRoutes } = require("./express-extractor");
25
-
26
- /**
27
- * Create a RepoIndex for a repository
28
- *
29
- * @param {string} repoRoot - Absolute path to repo root
30
- * @param {Object} [options]
31
- * @param {string[]} [options.ignorePatterns] - Additional ignore patterns
32
- * @param {boolean} [options.buildTokenIndex] - Whether to build token index (default: true)
33
- * @returns {Promise<RepoIndex>}
34
- *
35
- * @example
36
- * const index = await createIndex('/path/to/repo');
37
- * console.log(`Indexed ${index.stats.totalFiles} files in ${index.stats.indexTimeMs}ms`);
38
- * console.log('Detected frameworks:', Array.from(index.signals.detectedFrameworks));
39
- */
40
- async function createIndex(repoRoot, options = {}) {
41
- const index = new RepoIndex(repoRoot, options);
42
- await index.build();
43
- return index;
44
- }
45
-
46
- /**
47
- * Log index summary for debugging
48
- * @param {RepoIndex} index
49
- */
50
- function logIndexSummary(index) {
51
- const frameworks = Array.from(index.signals.detectedFrameworks).join(", ") || "none";
52
-
53
- console.log(`📁 RepoIndex Summary:`);
54
- console.log(` Files: ${index.stats.totalFiles}`);
55
- console.log(` Size: ${(index.stats.totalSize / 1024 / 1024).toFixed(2)} MB`);
56
- console.log(` Time: ${index.stats.indexTimeMs}ms`);
57
- console.log(` Frameworks: ${frameworks}`);
58
-
59
- if (index.signals.hasNextApp || index.signals.hasNextPages) {
60
- console.log(` Next.js: app=${index.signals.hasNextApp}, pages=${index.signals.hasNextPages}`);
61
- }
62
- if (index.signals.hasOpenAPI) {
63
- console.log(` OpenAPI: detected`);
64
- }
65
- if (index.signals.hasGraphQL) {
66
- console.log(` GraphQL: detected`);
67
- }
68
- }
69
-
70
- /**
71
- * Get files that need Fastify scanning (prefiltered)
72
- * @param {RepoIndex} index
73
- * @returns {string[]} - Absolute paths
74
- */
75
- function getFastifyFiles(index) {
76
- if (!index.hasFramework("fastify")) return [];
77
-
78
- return index.getByAnyToken([
79
- "fastify",
80
- "Fastify",
81
- "register",
82
- ]).filter(abs => {
83
- const ext = abs.split(".").pop();
84
- return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
85
- });
86
- }
87
-
88
- /**
89
- * Get files that need Express scanning (prefiltered)
90
- * @param {RepoIndex} index
91
- * @returns {string[]} - Absolute paths
92
- */
93
- function getExpressFiles(index) {
94
- if (!index.hasFramework("express")) return [];
95
-
96
- return index.getByAnyToken([
97
- "express",
98
- "Express",
99
- "app.get",
100
- "app.post",
101
- "router.get",
102
- "router.post",
103
- ]).filter(abs => {
104
- const ext = abs.split(".").pop();
105
- return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
106
- });
107
- }
108
-
109
- /**
110
- * Get files that need client ref scanning (prefiltered)
111
- * @param {RepoIndex} index
112
- * @returns {string[]} - Absolute paths
113
- */
114
- function getClientRefFiles(index) {
115
- return index.getByAnyToken([
116
- "fetch(",
117
- "axios",
118
- "useSWR",
119
- "useQuery",
120
- ]).filter(abs => {
121
- const ext = abs.split(".").pop();
122
- return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
123
- });
124
- }
125
-
126
- /**
127
- * Get files that need env var scanning (prefiltered)
128
- * @param {RepoIndex} index
129
- * @returns {string[]} - Absolute paths
130
- */
131
- function getEnvFiles(index) {
132
- return index.getByAnyToken([
133
- "process.env",
134
- "import.meta.env",
135
- "os.environ",
136
- "getenv",
137
- ]);
138
- }
139
-
140
- /**
141
- * Get Next.js app router route files
142
- * @param {RepoIndex} index
143
- * @returns {import('./types').FileRecord[]}
144
- */
145
- function getNextAppRoutes(index) {
146
- return index.files.filter(f =>
147
- f.rel.includes("/app/") &&
148
- f.rel.includes("/api/") &&
149
- /route\.(ts|tsx|js|jsx)$/.test(f.rel)
150
- );
151
- }
152
-
153
- /**
154
- * Get Next.js pages router API files
155
- * @param {RepoIndex} index
156
- * @returns {import('./types').FileRecord[]}
157
- */
158
- function getNextPagesRoutes(index) {
159
- return index.files.filter(f =>
160
- f.rel.includes("/pages/api/") &&
161
- /\.(ts|tsx|js|jsx)$/.test(f.rel) &&
162
- !f.rel.includes("/_")
163
- );
164
- }
165
-
166
- module.exports = {
167
- // Core classes
168
- RepoIndex,
169
- ASTCache,
170
-
171
- // Factory functions
172
- createIndex,
173
-
174
- // Optimized extractors (use RepoIndex)
175
- extractNextAppRoutes,
176
- extractNextPagesRoutes,
177
- extractClientRefs,
178
- extractFastifyRoutes,
179
- detectFastifyEntries,
180
- extractEnvUsage,
181
- extractEnvDeclared,
182
- buildEnvTruthV2,
183
- buildBillingTruthV2,
184
- buildAuthTruthV2,
185
- buildEnforcementTruthV2,
186
- extractExpressRoutes,
187
-
188
- // Utilities
189
- logIndexSummary,
190
- getFastifyFiles,
191
- getExpressFiles,
192
- getClientRefFiles,
193
- getEnvFiles,
194
- getNextAppRoutes,
195
- getNextPagesRoutes,
196
- canonicalizeMethod,
197
- canonicalizePath,
198
- joinPaths,
199
-
200
- // Shared instances
201
- globalASTCache,
202
-
203
- // Constants
204
- DEFAULT_IGNORE,
205
- PREFILTER_TOKENS,
206
- DEFAULT_PARSER_OPTIONS,
207
- };
1
+ // bin/runners/lib/engine/index.js
2
+ // Main entry point for the vNext scanner engine
3
+
4
+ const { RepoIndex, DEFAULT_IGNORE, PREFILTER_TOKENS } = require("./repo-index");
5
+ const { ASTCache, globalASTCache, DEFAULT_PARSER_OPTIONS } = require("./ast-cache");
6
+ const {
7
+ extractNextAppRoutes,
8
+ extractNextPagesRoutes,
9
+ extractClientRefs,
10
+ extractFastifyRoutes,
11
+ detectFastifyEntries,
12
+ canonicalizeMethod,
13
+ canonicalizePath,
14
+ joinPaths,
15
+ } = require("./extractors");
16
+ const {
17
+ extractEnvUsage,
18
+ extractEnvDeclared,
19
+ buildEnvTruthV2,
20
+ } = require("./env-extractor");
21
+ const { buildBillingTruthV2 } = require("./billing-extractor");
22
+ const { buildAuthTruthV2 } = require("./auth-extractor");
23
+ const { buildEnforcementTruthV2 } = require("./enforcement-extractor");
24
+ const { extractExpressRoutes } = require("./express-extractor");
25
+
26
+ /**
27
+ * Create a RepoIndex for a repository
28
+ *
29
+ * @param {string} repoRoot - Absolute path to repo root
30
+ * @param {Object} [options]
31
+ * @param {string[]} [options.ignorePatterns] - Additional ignore patterns
32
+ * @param {boolean} [options.buildTokenIndex] - Whether to build token index (default: true)
33
+ * @returns {Promise<RepoIndex>}
34
+ *
35
+ * @example
36
+ * const index = await createIndex('/path/to/repo');
37
+ * console.log(`Indexed ${index.stats.totalFiles} files in ${index.stats.indexTimeMs}ms`);
38
+ * console.log('Detected frameworks:', Array.from(index.signals.detectedFrameworks));
39
+ */
40
+ async function createIndex(repoRoot, options = {}) {
41
+ const index = new RepoIndex(repoRoot, options);
42
+ await index.build();
43
+ return index;
44
+ }
45
+
46
+ /**
47
+ * Log index summary for debugging
48
+ * @param {RepoIndex} index
49
+ */
50
+ function logIndexSummary(index) {
51
+ const frameworks = Array.from(index.signals.detectedFrameworks).join(", ") || "none";
52
+
53
+ console.log(`📁 RepoIndex Summary:`);
54
+ console.log(` Files: ${index.stats.totalFiles}`);
55
+ console.log(` Size: ${(index.stats.totalSize / 1024 / 1024).toFixed(2)} MB`);
56
+ console.log(` Time: ${index.stats.indexTimeMs}ms`);
57
+ console.log(` Frameworks: ${frameworks}`);
58
+
59
+ if (index.signals.hasNextApp || index.signals.hasNextPages) {
60
+ console.log(` Next.js: app=${index.signals.hasNextApp}, pages=${index.signals.hasNextPages}`);
61
+ }
62
+ if (index.signals.hasOpenAPI) {
63
+ console.log(` OpenAPI: detected`);
64
+ }
65
+ if (index.signals.hasGraphQL) {
66
+ console.log(` GraphQL: detected`);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Get files that need Fastify scanning (prefiltered)
72
+ * @param {RepoIndex} index
73
+ * @returns {string[]} - Absolute paths
74
+ */
75
+ function getFastifyFiles(index) {
76
+ if (!index.hasFramework("fastify")) return [];
77
+
78
+ return index.getByAnyToken([
79
+ "fastify",
80
+ "Fastify",
81
+ "register",
82
+ ]).filter(abs => {
83
+ const ext = abs.split(".").pop();
84
+ return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
85
+ });
86
+ }
87
+
88
+ /**
89
+ * Get files that need Express scanning (prefiltered)
90
+ * @param {RepoIndex} index
91
+ * @returns {string[]} - Absolute paths
92
+ */
93
+ function getExpressFiles(index) {
94
+ if (!index.hasFramework("express")) return [];
95
+
96
+ return index.getByAnyToken([
97
+ "express",
98
+ "Express",
99
+ "app.get",
100
+ "app.post",
101
+ "router.get",
102
+ "router.post",
103
+ ]).filter(abs => {
104
+ const ext = abs.split(".").pop();
105
+ return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
106
+ });
107
+ }
108
+
109
+ /**
110
+ * Get files that need client ref scanning (prefiltered)
111
+ * @param {RepoIndex} index
112
+ * @returns {string[]} - Absolute paths
113
+ */
114
+ function getClientRefFiles(index) {
115
+ return index.getByAnyToken([
116
+ "fetch(",
117
+ "axios",
118
+ "useSWR",
119
+ "useQuery",
120
+ ]).filter(abs => {
121
+ const ext = abs.split(".").pop();
122
+ return ["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext);
123
+ });
124
+ }
125
+
126
+ /**
127
+ * Get files that need env var scanning (prefiltered)
128
+ * @param {RepoIndex} index
129
+ * @returns {string[]} - Absolute paths
130
+ */
131
+ function getEnvFiles(index) {
132
+ return index.getByAnyToken([
133
+ "process.env",
134
+ "import.meta.env",
135
+ "os.environ",
136
+ "getenv",
137
+ ]);
138
+ }
139
+
140
+ /**
141
+ * Get Next.js app router route files
142
+ * @param {RepoIndex} index
143
+ * @returns {import('./types').FileRecord[]}
144
+ */
145
+ function getNextAppRoutes(index) {
146
+ return index.files.filter(f =>
147
+ f.rel.includes("/app/") &&
148
+ f.rel.includes("/api/") &&
149
+ /route\.(ts|tsx|js|jsx)$/.test(f.rel)
150
+ );
151
+ }
152
+
153
+ /**
154
+ * Get Next.js pages router API files
155
+ * @param {RepoIndex} index
156
+ * @returns {import('./types').FileRecord[]}
157
+ */
158
+ function getNextPagesRoutes(index) {
159
+ return index.files.filter(f =>
160
+ f.rel.includes("/pages/api/") &&
161
+ /\.(ts|tsx|js|jsx)$/.test(f.rel) &&
162
+ !f.rel.includes("/_")
163
+ );
164
+ }
165
+
166
+ module.exports = {
167
+ // Core classes
168
+ RepoIndex,
169
+ ASTCache,
170
+
171
+ // Factory functions
172
+ createIndex,
173
+
174
+ // Optimized extractors (use RepoIndex)
175
+ extractNextAppRoutes,
176
+ extractNextPagesRoutes,
177
+ extractClientRefs,
178
+ extractFastifyRoutes,
179
+ detectFastifyEntries,
180
+ extractEnvUsage,
181
+ extractEnvDeclared,
182
+ buildEnvTruthV2,
183
+ buildBillingTruthV2,
184
+ buildAuthTruthV2,
185
+ buildEnforcementTruthV2,
186
+ extractExpressRoutes,
187
+
188
+ // Utilities
189
+ logIndexSummary,
190
+ getFastifyFiles,
191
+ getExpressFiles,
192
+ getClientRefFiles,
193
+ getEnvFiles,
194
+ getNextAppRoutes,
195
+ getNextPagesRoutes,
196
+ canonicalizeMethod,
197
+ canonicalizePath,
198
+ joinPaths,
199
+
200
+ // Shared instances
201
+ globalASTCache,
202
+
203
+ // Constants
204
+ DEFAULT_IGNORE,
205
+ PREFILTER_TOKENS,
206
+ DEFAULT_PARSER_OPTIONS,
207
+ };