@neurcode-ai/cli 0.9.62 → 0.9.64
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.
- package/dist/commands/control-plane.js +7 -7
- package/dist/commands/control-plane.js.map +1 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +108 -1
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/patch-apply.d.ts +2 -0
- package/dist/commands/patch-apply.d.ts.map +1 -1
- package/dist/commands/patch-apply.js +331 -19
- package/dist/commands/patch-apply.js.map +1 -1
- package/dist/commands/replay.js +5 -5
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +29 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace.js +7 -7
- package/dist/commands/workspace.js.map +1 -1
- package/dist/daemon/server.d.ts +2 -2
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +1054 -36
- package/dist/daemon/server.js.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/intent-engine/matcher.d.ts.map +1 -1
- package/dist/intent-engine/matcher.js +2 -0
- package/dist/intent-engine/matcher.js.map +1 -1
- package/dist/patch-engine/diff.d.ts +1 -1
- package/dist/patch-engine/diff.js +1 -1
- package/dist/patch-engine/generator.d.ts +9 -0
- package/dist/patch-engine/generator.d.ts.map +1 -1
- package/dist/patch-engine/generator.js +375 -17
- package/dist/patch-engine/generator.js.map +1 -1
- package/dist/patch-engine/index.d.ts +25 -25
- package/dist/patch-engine/index.d.ts.map +1 -1
- package/dist/patch-engine/index.js +134 -87
- package/dist/patch-engine/index.js.map +1 -1
- package/dist/patch-engine/patterns.d.ts +1 -1
- package/dist/patch-engine/patterns.d.ts.map +1 -1
- package/dist/patch-engine/patterns.js +277 -40
- package/dist/patch-engine/patterns.js.map +1 -1
- package/dist/patch-engine/rollback.d.ts +31 -0
- package/dist/patch-engine/rollback.d.ts.map +1 -0
- package/dist/patch-engine/rollback.js +275 -0
- package/dist/patch-engine/rollback.js.map +1 -0
- package/dist/patch-engine/safety.d.ts +28 -0
- package/dist/patch-engine/safety.d.ts.map +1 -0
- package/dist/patch-engine/safety.js +122 -0
- package/dist/patch-engine/safety.js.map +1 -0
- package/dist/patch-engine/transaction.d.ts +52 -0
- package/dist/patch-engine/transaction.d.ts.map +1 -0
- package/dist/patch-engine/transaction.js +93 -0
- package/dist/patch-engine/transaction.js.map +1 -0
- package/dist/utils/advisory-signals.d.ts +5 -0
- package/dist/utils/advisory-signals.d.ts.map +1 -1
- package/dist/utils/advisory-signals.js +50 -12
- package/dist/utils/advisory-signals.js.map +1 -1
- package/dist/utils/ai-debt-budget.d.ts.map +1 -1
- package/dist/utils/ai-debt-budget.js +5 -2
- package/dist/utils/ai-debt-budget.js.map +1 -1
- package/dist/utils/cli-json.d.ts.map +1 -1
- package/dist/utils/cli-json.js +80 -12
- package/dist/utils/cli-json.js.map +1 -1
- package/dist/utils/execution-bus.d.ts +10 -0
- package/dist/utils/execution-bus.d.ts.map +1 -1
- package/dist/utils/execution-bus.js +16 -0
- package/dist/utils/execution-bus.js.map +1 -1
- package/dist/utils/policy-compiler.d.ts +6 -0
- package/dist/utils/policy-compiler.d.ts.map +1 -1
- package/dist/utils/policy-compiler.js +20 -0
- package/dist/utils/policy-compiler.js.map +1 -1
- package/package.json +9 -8
- package/LICENSE +0 -201
|
@@ -1,31 +1,143 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
//
|
|
3
|
-
// Each
|
|
2
|
+
// Deterministic detection + classification rules for remediation patch generation.
|
|
3
|
+
// Each detector returns the 0-based line index of the first match, or null.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.classifyViolation = classifyViolation;
|
|
6
6
|
exports.detectPattern = detectPattern;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
7
|
+
const CLASSIFICATION_RULES = [
|
|
8
|
+
{
|
|
9
|
+
kind: 'missing_validation',
|
|
10
|
+
keywords: ['missing_validation', 'missing validation', 'request validation', 'input validation', 'validate req.body', 'validate request'],
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
kind: 'missing_auth_middleware',
|
|
14
|
+
keywords: ['missing auth middleware', 'missing authentication middleware', 'auth middleware missing', 'unauthenticated route'],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
kind: 'missing_role_checks',
|
|
18
|
+
keywords: ['missing role checks', 'missing role check', 'authorization missing', 'missing rbac', 'role guard'],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
kind: 'unsafe_jwt_usage',
|
|
22
|
+
keywords: ['unsafe jwt', 'jwt misuse', 'weak jwt', 'jwt without safeguards'],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
kind: 'missing_token_expiry',
|
|
26
|
+
keywords: ['missing token expiry', 'token expiry missing', 'jwt expiry missing', 'missing expiresin'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
kind: 'unsafe_secret_exposure',
|
|
30
|
+
keywords: ['unsafe secret exposure', 'secret exposure', 'secret leak', 'token leak', 'credential leak'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
kind: 'insecure_cookie_configuration',
|
|
34
|
+
keywords: ['insecure cookie', 'cookie insecure', 'missing httponly', 'missing secure cookie'],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
kind: 'missing_csrf_protection',
|
|
38
|
+
keywords: ['missing csrf', 'csrf protection missing'],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
kind: 'missing_rate_limiting',
|
|
42
|
+
keywords: ['missing rate limiting', 'rate limit missing', 'no rate limit'],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
kind: 'missing_try_catch',
|
|
46
|
+
keywords: ['missing try/catch', 'missing try catch', 'unhandled exception path'],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
kind: 'missing_timeout_handling',
|
|
50
|
+
keywords: ['missing timeout', 'timeout handling missing', 'no timeout'],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
kind: 'unsafe_fetch_without_retries',
|
|
54
|
+
keywords: ['fetch without retries', 'missing retry', 'no retries for fetch'],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
kind: 'missing_idempotency_keys',
|
|
58
|
+
keywords: ['missing idempotency key', 'idempotency missing'],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
kind: 'unsafe_webhook_verification',
|
|
62
|
+
keywords: ['unsafe webhook verification', 'webhook verification missing', 'unverified webhook'],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
kind: 'unsafe_serialization',
|
|
66
|
+
keywords: ['unsafe serialization', 'serialize unsafely', 'json stringify unsafe'],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
kind: 'missing_transaction_wrappers',
|
|
70
|
+
keywords: ['missing transaction', 'transaction wrapper missing', 'no transaction wrapper'],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
kind: 'unsafe_sql_string_concatenation',
|
|
74
|
+
keywords: ['unsafe sql string concatenation', 'sql string concat', 'raw sql concat'],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
kind: 'unsafe_file_uploads',
|
|
78
|
+
keywords: ['unsafe file upload', 'file upload unsafe'],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
kind: 'missing_mime_validation',
|
|
82
|
+
keywords: ['missing mime validation', 'mime validation missing'],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
kind: 'missing_size_limits',
|
|
86
|
+
keywords: ['missing size limits', 'upload size limit missing'],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
kind: 'unsafe_path_traversal_usage',
|
|
90
|
+
keywords: ['path traversal', 'unsafe path usage'],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
kind: 'dangerous_useeffect_cleanup',
|
|
94
|
+
keywords: ['dangerous useeffect cleanup', 'useeffect cleanup missing', 'unsafe useeffect cleanup'],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
kind: 'missing_abort_controller_cleanup',
|
|
98
|
+
keywords: ['abort controller cleanup missing', 'missing abort controller cleanup'],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
kind: 'unsafe_inner_html_usage',
|
|
102
|
+
keywords: ['unsafe innerhtml', 'dangerous innerhtml', 'innerhtml usage'],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
kind: 'unhandled_promise_chains',
|
|
106
|
+
keywords: ['unhandled promise', 'promise chain unhandled'],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
kind: 'unsafe_websocket_lifecycle',
|
|
110
|
+
keywords: ['unsafe websocket lifecycle', 'websocket lifecycle missing cleanup'],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
kind: 'missing_audit_logs',
|
|
114
|
+
keywords: ['missing audit logs', 'audit log missing'],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
kind: 'unsafe_sensitive_logging',
|
|
118
|
+
keywords: ['unsafe sensitive logging', 'sensitive logging', 'logs secret', 'logs token'],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
kind: 'missing_error_boundaries',
|
|
122
|
+
keywords: ['missing error boundaries', 'error boundary missing'],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
kind: 'missing_tracing_wrappers',
|
|
126
|
+
keywords: ['missing tracing wrappers', 'tracing wrapper missing', 'missing tracing'],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
kind: 'deprecated_package_migration_mappings',
|
|
130
|
+
keywords: ['deprecated package migration', 'deprecated package mapping', 'migration mapping deprecated'],
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
kind: 'unsafe_env_usage',
|
|
134
|
+
keywords: ['unsafe env usage', 'unsafe environment variable usage', 'process.env unsafe'],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
kind: 'dangerous_hardcoded_credentials',
|
|
138
|
+
keywords: ['hardcoded credentials', 'hardcoded password', 'hardcoded secret', 'hardcoded token'],
|
|
139
|
+
},
|
|
140
|
+
];
|
|
29
141
|
const DB_ACCESS_PATTERNS = [
|
|
30
142
|
/\bdb\s*\.\s*query\s*\(/,
|
|
31
143
|
/\bdb\s*\.\s*execute\s*\(/,
|
|
@@ -47,31 +159,69 @@ const VALIDATION_PATTERNS = [
|
|
|
47
159
|
/\bzod\s*\./,
|
|
48
160
|
/\bajv\s*\.\s*compile/,
|
|
49
161
|
];
|
|
50
|
-
// Matches the request/response parameter pair in a handler signature
|
|
51
162
|
const REQ_HANDLER_RE = /\b(?:req|request)\s*,\s*(?:res|response|reply)\b/;
|
|
52
|
-
// Matches direct access to incoming data without a prior validation call
|
|
53
163
|
const REQ_INPUT_RE = /\b(?:req|request)\.(?:body|params|query)\b/;
|
|
54
164
|
const TODO_FIXME_RE = /\/\/\s*(?:TODO|FIXME)\b/;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
165
|
+
const ROUTE_WITHOUT_AUTH_RE = /\b(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*(?:(?!requireAuth|authMiddleware|authenticate|withAuth).)*\b(?:async\s+)?\(?\s*(?:req|request)\s*,\s*(?:res|response|reply)/i;
|
|
166
|
+
const ROUTE_WITHOUT_RATE_LIMIT_RE = /\b(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*(?:(?!rateLimit|rateLimiter|throttle).)*\b(?:async\s+)?\(?\s*(?:req|request)\s*,\s*(?:res|response|reply)/i;
|
|
167
|
+
const JWT_SIGN_NO_EXPIRY_RE = /\bjwt\.sign\s*\((?:(?!expiresIn).)*\)/i;
|
|
168
|
+
const INNER_HTML_RE = /\.innerHTML\s*=/;
|
|
169
|
+
const SENSITIVE_LOG_RE = /\bconsole\.(?:log|info|warn|error)\s*\([^\n]*(?:authorization|password|secret|token|apiKey|api_key)[^\n]*\)/i;
|
|
170
|
+
const SQL_STRING_CONCAT_RE = /\b(?:query|execute|run)\s*\((?:\s*`[^`]*\$\{|[^\n]*\+[^\n]*)/i;
|
|
171
|
+
const HARDCODED_SECRET_RE = /\b(?:password|secret|token|api[_-]?key)\b\s*[:=]\s*['"`][^'"`]+['"`]/i;
|
|
172
|
+
const FETCH_WITHOUT_TIMEOUT_RE = /\bfetch\s*\((?![^\n]*signal:)/;
|
|
173
|
+
const ROUTE_WITHOUT_TRY_CATCH_RE = /\b(?:async\s+)?\(?\s*(?:req|request)\s*,\s*(?:res|response|reply)\s*\)?\s*=>\s*\{/;
|
|
174
|
+
const MISSING_AUDIT_LOG_RE = /\b(?:create|update|delete|remove|transfer|refund|charge)\b/i;
|
|
175
|
+
const UNSAFE_ENV_USAGE_RE = /\bprocess\.env\.[A-Z0-9_]+\b/;
|
|
176
|
+
const GENERIC_LINE_MATCHERS = {
|
|
177
|
+
missing_role_checks: [/\b(?:req|request)\.user\b/i],
|
|
178
|
+
unsafe_jwt_usage: [/\bjwt\.(?:sign|verify)\s*\(/i],
|
|
179
|
+
unsafe_secret_exposure: [HARDCODED_SECRET_RE],
|
|
180
|
+
insecure_cookie_configuration: [/\b(?:res|response)\.cookie\s*\(/i],
|
|
181
|
+
missing_csrf_protection: [/\b(?:app|router)\.(?:post|put|patch|delete)\s*\(/i],
|
|
182
|
+
missing_timeout_handling: [FETCH_WITHOUT_TIMEOUT_RE],
|
|
183
|
+
unsafe_fetch_without_retries: [/\bfetch\s*\(/i],
|
|
184
|
+
missing_idempotency_keys: [/\b(?:charge|payment|checkout|order|transaction)\b/i],
|
|
185
|
+
unsafe_webhook_verification: [/\bwebhook\b/i],
|
|
186
|
+
unsafe_serialization: [/\bJSON\.stringify\s*\(/],
|
|
187
|
+
missing_transaction_wrappers: [/\b(?:create|update|delete)\b/i],
|
|
188
|
+
unsafe_file_uploads: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
|
|
189
|
+
missing_mime_validation: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
|
|
190
|
+
missing_size_limits: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
|
|
191
|
+
unsafe_path_traversal_usage: [/\b(?:path\.join|path\.resolve|fs\.(?:readFile|writeFile|createReadStream|createWriteStream))\b/i],
|
|
192
|
+
dangerous_useeffect_cleanup: [/\buseEffect\s*\(\s*\(\s*\)\s*=>\s*\{/],
|
|
193
|
+
missing_abort_controller_cleanup: [/\bAbortController\s*\(/],
|
|
194
|
+
unhandled_promise_chains: [/\b\.then\s*\(/],
|
|
195
|
+
unsafe_websocket_lifecycle: [/\bnew\s+WebSocket\s*\(/],
|
|
196
|
+
missing_error_boundaries: [/\bReact\.(?:Suspense|Fragment)\b|<Route\b/i],
|
|
197
|
+
missing_tracing_wrappers: [/\b(?:handle|process|execute|run)\b/i],
|
|
198
|
+
deprecated_package_migration_mappings: [/\bdeprecated\b|\bmigration\b/i],
|
|
199
|
+
unsafe_env_usage: [UNSAFE_ENV_USAGE_RE],
|
|
200
|
+
dangerous_hardcoded_credentials: [HARDCODED_SECRET_RE],
|
|
201
|
+
};
|
|
202
|
+
function isCommentLine(line) {
|
|
203
|
+
const trimmed = line.trimStart();
|
|
204
|
+
return trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*');
|
|
205
|
+
}
|
|
206
|
+
function findLineByRegex(lines, patterns) {
|
|
207
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
208
|
+
if (isCommentLine(lines[i]))
|
|
61
209
|
continue;
|
|
62
|
-
if (
|
|
210
|
+
if (patterns.some((re) => re.test(lines[i])))
|
|
63
211
|
return i;
|
|
64
212
|
}
|
|
65
213
|
return null;
|
|
66
214
|
}
|
|
215
|
+
function findDbAccessLine(lines) {
|
|
216
|
+
return findLineByRegex(lines, DB_ACCESS_PATTERNS);
|
|
217
|
+
}
|
|
67
218
|
function findMissingValidationLine(lines) {
|
|
68
219
|
let handlerStartIndex = -1;
|
|
69
|
-
for (let i = 0; i < lines.length; i
|
|
220
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
70
221
|
if (REQ_HANDLER_RE.test(lines[i])) {
|
|
71
222
|
handlerStartIndex = i;
|
|
72
223
|
}
|
|
73
224
|
if (handlerStartIndex !== -1 && REQ_INPUT_RE.test(lines[i])) {
|
|
74
|
-
// Look backward from this line (within the handler) for a validation call
|
|
75
225
|
const searchFrom = Math.max(handlerStartIndex, i - 30);
|
|
76
226
|
const priorLines = lines.slice(searchFrom, i);
|
|
77
227
|
const hasValidation = priorLines.some((l) => VALIDATION_PATTERNS.some((re) => re.test(l)));
|
|
@@ -82,18 +232,105 @@ function findMissingValidationLine(lines) {
|
|
|
82
232
|
return null;
|
|
83
233
|
}
|
|
84
234
|
function findTodoLine(lines) {
|
|
85
|
-
|
|
86
|
-
|
|
235
|
+
return findLineByRegex(lines, [TODO_FIXME_RE]);
|
|
236
|
+
}
|
|
237
|
+
function findMissingAuthMiddlewareLine(lines) {
|
|
238
|
+
return findLineByRegex(lines, [ROUTE_WITHOUT_AUTH_RE]);
|
|
239
|
+
}
|
|
240
|
+
function findMissingRateLimitingLine(lines) {
|
|
241
|
+
return findLineByRegex(lines, [ROUTE_WITHOUT_RATE_LIMIT_RE]);
|
|
242
|
+
}
|
|
243
|
+
function findMissingTokenExpiryLine(lines) {
|
|
244
|
+
return findLineByRegex(lines, [JWT_SIGN_NO_EXPIRY_RE]);
|
|
245
|
+
}
|
|
246
|
+
function findUnsafeInnerHtmlLine(lines) {
|
|
247
|
+
return findLineByRegex(lines, [INNER_HTML_RE]);
|
|
248
|
+
}
|
|
249
|
+
function findUnsafeSensitiveLoggingLine(lines) {
|
|
250
|
+
return findLineByRegex(lines, [SENSITIVE_LOG_RE]);
|
|
251
|
+
}
|
|
252
|
+
function findUnsafeSqlStringConcatLine(lines) {
|
|
253
|
+
return findLineByRegex(lines, [SQL_STRING_CONCAT_RE]);
|
|
254
|
+
}
|
|
255
|
+
function findMissingTryCatchLine(lines) {
|
|
256
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
257
|
+
const line = lines[i];
|
|
258
|
+
if (!ROUTE_WITHOUT_TRY_CATCH_RE.test(line))
|
|
259
|
+
continue;
|
|
260
|
+
const end = Math.min(lines.length - 1, i + 40);
|
|
261
|
+
const blockSlice = lines.slice(i, end + 1).join('\n');
|
|
262
|
+
if (blockSlice.includes('await ') && !blockSlice.includes('try {')) {
|
|
263
|
+
return i;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
function findMissingAuditLogLine(lines) {
|
|
269
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
270
|
+
const line = lines[i];
|
|
271
|
+
if (isCommentLine(line))
|
|
272
|
+
continue;
|
|
273
|
+
if (!MISSING_AUDIT_LOG_RE.test(line))
|
|
274
|
+
continue;
|
|
275
|
+
const contextStart = Math.max(0, i - 6);
|
|
276
|
+
const context = lines.slice(contextStart, i + 1).join('\n');
|
|
277
|
+
if (!/audit|logger|telemetry|trace/i.test(context)) {
|
|
87
278
|
return i;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
function classifyViolation(issue, policy) {
|
|
284
|
+
const combined = `${issue} ${policy}`.toLowerCase();
|
|
285
|
+
if (combined.includes('todo') || combined.includes('fixme'))
|
|
286
|
+
return 'todo_fixme';
|
|
287
|
+
if (combined.includes('db')
|
|
288
|
+
|| combined.includes('database')
|
|
289
|
+
|| combined.includes('query')
|
|
290
|
+
|| combined.includes('data access')
|
|
291
|
+
|| combined.includes('direct access')
|
|
292
|
+
|| combined.includes('layering')
|
|
293
|
+
|| combined.includes('layer')) {
|
|
294
|
+
return 'db_in_ui';
|
|
295
|
+
}
|
|
296
|
+
for (const rule of CLASSIFICATION_RULES) {
|
|
297
|
+
if (rule.keywords.some((keyword) => combined.includes(keyword))) {
|
|
298
|
+
return rule.kind;
|
|
299
|
+
}
|
|
88
300
|
}
|
|
89
301
|
return null;
|
|
90
302
|
}
|
|
91
303
|
function detectPattern(content, kind) {
|
|
92
304
|
const lines = content.split('\n');
|
|
93
305
|
switch (kind) {
|
|
94
|
-
case 'db_in_ui':
|
|
95
|
-
|
|
96
|
-
case '
|
|
306
|
+
case 'db_in_ui':
|
|
307
|
+
return findDbAccessLine(lines);
|
|
308
|
+
case 'missing_validation':
|
|
309
|
+
return findMissingValidationLine(lines);
|
|
310
|
+
case 'todo_fixme':
|
|
311
|
+
return findTodoLine(lines);
|
|
312
|
+
case 'missing_auth_middleware':
|
|
313
|
+
return findMissingAuthMiddlewareLine(lines);
|
|
314
|
+
case 'missing_rate_limiting':
|
|
315
|
+
return findMissingRateLimitingLine(lines);
|
|
316
|
+
case 'missing_token_expiry':
|
|
317
|
+
return findMissingTokenExpiryLine(lines);
|
|
318
|
+
case 'unsafe_inner_html_usage':
|
|
319
|
+
return findUnsafeInnerHtmlLine(lines);
|
|
320
|
+
case 'unsafe_sensitive_logging':
|
|
321
|
+
return findUnsafeSensitiveLoggingLine(lines);
|
|
322
|
+
case 'unsafe_sql_string_concatenation':
|
|
323
|
+
return findUnsafeSqlStringConcatLine(lines);
|
|
324
|
+
case 'missing_try_catch':
|
|
325
|
+
return findMissingTryCatchLine(lines);
|
|
326
|
+
case 'missing_audit_logs':
|
|
327
|
+
return findMissingAuditLogLine(lines);
|
|
328
|
+
default: {
|
|
329
|
+
const patterns = GENERIC_LINE_MATCHERS[kind];
|
|
330
|
+
if (!patterns || patterns.length === 0)
|
|
331
|
+
return null;
|
|
332
|
+
return findLineByRegex(lines, patterns);
|
|
333
|
+
}
|
|
97
334
|
}
|
|
98
335
|
}
|
|
99
336
|
//# sourceMappingURL=patterns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type PatchTransactionReceipt } from './transaction';
|
|
2
|
+
export interface PersistRollbackSnapshotResult {
|
|
3
|
+
saved: boolean;
|
|
4
|
+
snapshotId: string | null;
|
|
5
|
+
reason: string | null;
|
|
6
|
+
}
|
|
7
|
+
export interface RollbackApplyResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
file: string;
|
|
10
|
+
snapshotId: string;
|
|
11
|
+
transactionId: string;
|
|
12
|
+
transactionHash: string;
|
|
13
|
+
status: 'rollback_applied' | 'rollback_rejected' | 'rollback_stale';
|
|
14
|
+
changed: boolean;
|
|
15
|
+
staleReason: string | null;
|
|
16
|
+
staleDetails: Record<string, unknown> | null;
|
|
17
|
+
message: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function persistPatchRollbackSnapshot(input: {
|
|
20
|
+
cwd: string;
|
|
21
|
+
file: string;
|
|
22
|
+
beforeContent: string;
|
|
23
|
+
receipt: PatchTransactionReceipt;
|
|
24
|
+
retention?: number;
|
|
25
|
+
}): PersistRollbackSnapshotResult;
|
|
26
|
+
export declare function applyPatchRollback(input: {
|
|
27
|
+
cwd: string;
|
|
28
|
+
snapshotId: string;
|
|
29
|
+
file?: string;
|
|
30
|
+
}): RollbackApplyResult;
|
|
31
|
+
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/patch-engine/rollback.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAyB7E,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAwFD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,6BAA6B,CAsChC;AAkBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,mBAAmB,CAqHtB"}
|