@neurcode-ai/cli 0.9.63 → 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 +1035 -32
- 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 +2 -2
|
@@ -6,58 +6,122 @@ exports.generatePatchForSuggestion = generatePatchForSuggestion;
|
|
|
6
6
|
const patterns_1 = require("./patterns");
|
|
7
7
|
const generator_1 = require("./generator");
|
|
8
8
|
const diff_1 = require("./diff");
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
9
|
+
const transaction_1 = require("./transaction");
|
|
10
|
+
const safety_1 = require("./safety");
|
|
11
|
+
function scorePatchConfidence(kind) {
|
|
12
|
+
switch (kind) {
|
|
13
|
+
case 'missing_validation':
|
|
14
|
+
case 'missing_timeout_handling':
|
|
15
|
+
case 'unsafe_inner_html_usage':
|
|
16
|
+
return 'high';
|
|
17
|
+
case 'missing_auth_middleware':
|
|
18
|
+
case 'missing_rate_limiting':
|
|
19
|
+
case 'unsafe_fetch_without_retries':
|
|
20
|
+
case 'missing_idempotency_keys':
|
|
21
|
+
case 'unsafe_file_uploads':
|
|
22
|
+
case 'missing_token_expiry':
|
|
23
|
+
case 'unsafe_sensitive_logging':
|
|
24
|
+
return 'medium';
|
|
25
|
+
case 'db_in_ui':
|
|
26
|
+
case 'todo_fixme':
|
|
27
|
+
return 'low';
|
|
28
|
+
default:
|
|
29
|
+
return 'low';
|
|
30
30
|
}
|
|
31
|
-
if (changed > 5)
|
|
32
|
-
return false;
|
|
33
|
-
if (!PATCHABLE_PATTERN_RE.test(original))
|
|
34
|
-
return false;
|
|
35
|
-
return true;
|
|
36
31
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
function patchPriorityKinds() {
|
|
33
|
+
return [
|
|
34
|
+
'missing_validation',
|
|
35
|
+
'missing_timeout_handling',
|
|
36
|
+
'unsafe_fetch_without_retries',
|
|
37
|
+
'missing_idempotency_keys',
|
|
38
|
+
'unsafe_file_uploads',
|
|
39
|
+
'unsafe_inner_html_usage',
|
|
40
|
+
'missing_token_expiry',
|
|
41
|
+
'missing_auth_middleware',
|
|
42
|
+
'missing_rate_limiting',
|
|
43
|
+
'unsafe_sensitive_logging',
|
|
44
|
+
'db_in_ui',
|
|
45
|
+
'todo_fixme',
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
function buildPatchTokenPayload(input) {
|
|
49
|
+
return {
|
|
50
|
+
schemaVersion: 'neurcode.patch-preview-token.v1',
|
|
51
|
+
file: input.filePath,
|
|
52
|
+
createdAt: new Date().toISOString(),
|
|
53
|
+
beforeHash: input.beforeHash,
|
|
54
|
+
afterHash: input.afterHash,
|
|
55
|
+
diffHash: input.diffHash,
|
|
56
|
+
patchHash: input.patchHash,
|
|
57
|
+
patternKind: input.patternKind,
|
|
58
|
+
confidence: input.patchConfidence,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function buildPatchBundle(input) {
|
|
62
|
+
const generated = (0, generator_1.generatePatch)({
|
|
63
|
+
filePath: input.filePath,
|
|
64
|
+
issue: '',
|
|
65
|
+
policy: '',
|
|
66
|
+
fileContent: input.fileContent,
|
|
67
|
+
patternKind: input.patternKind,
|
|
68
|
+
});
|
|
69
|
+
if (!generated)
|
|
70
|
+
return null;
|
|
71
|
+
const diff = (0, diff_1.generateUnifiedDiff)(input.filePath, input.fileContent, generated.updatedContent);
|
|
72
|
+
if (!diff)
|
|
73
|
+
return null;
|
|
74
|
+
const patchConfidence = scorePatchConfidence(input.patternKind);
|
|
75
|
+
const validation = (0, safety_1.validatePatchCandidate)({
|
|
76
|
+
originalContent: input.fileContent,
|
|
77
|
+
updatedContent: generated.updatedContent,
|
|
78
|
+
diff,
|
|
79
|
+
kind: input.patternKind,
|
|
80
|
+
confidence: patchConfidence,
|
|
81
|
+
});
|
|
82
|
+
const beforeHash = (0, transaction_1.hashPatchValue)(input.fileContent);
|
|
83
|
+
const afterHash = (0, transaction_1.hashPatchValue)(generated.updatedContent);
|
|
84
|
+
const patchHash = (0, transaction_1.buildPatchHash)({
|
|
85
|
+
file: input.filePath,
|
|
86
|
+
beforeHash,
|
|
87
|
+
afterHash,
|
|
88
|
+
diffHash: validation.diffHash,
|
|
89
|
+
patternKind: input.patternKind,
|
|
90
|
+
});
|
|
91
|
+
const previewToken = (0, transaction_1.createPatchPreviewToken)(buildPatchTokenPayload({
|
|
92
|
+
filePath: input.filePath,
|
|
93
|
+
patternKind: input.patternKind,
|
|
94
|
+
patchConfidence,
|
|
95
|
+
beforeHash,
|
|
96
|
+
afterHash,
|
|
97
|
+
diffHash: validation.diffHash,
|
|
98
|
+
patchHash,
|
|
99
|
+
}));
|
|
100
|
+
return {
|
|
101
|
+
updatedContent: generated.updatedContent,
|
|
102
|
+
patternKind: input.patternKind,
|
|
103
|
+
patchConfidence,
|
|
104
|
+
diff,
|
|
105
|
+
validation,
|
|
106
|
+
previewToken,
|
|
107
|
+
patchHash,
|
|
108
|
+
recipe: generated.metadata,
|
|
109
|
+
beforeHash,
|
|
110
|
+
afterHash,
|
|
111
|
+
};
|
|
43
112
|
}
|
|
44
113
|
/**
|
|
45
114
|
* Apply a unified diff (as produced by generateUnifiedDiff) to fileContent.
|
|
46
115
|
*
|
|
47
|
-
* Parses
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* Returns null when:
|
|
51
|
-
* - no hunk header found
|
|
52
|
-
* - a context or removal line does not match current file content (file changed)
|
|
116
|
+
* Parses a single-hunk diff format, verifies every context/removal line matches
|
|
117
|
+
* the current file, then reconstructs updated content.
|
|
53
118
|
*/
|
|
54
119
|
function applyUnifiedDiff(fileContent, diff) {
|
|
55
120
|
if (!diff)
|
|
56
121
|
return null;
|
|
57
122
|
const diffLines = diff.split('\n');
|
|
58
|
-
// Locate the hunk header (skip --- / +++ file headers)
|
|
59
123
|
let hunkIdx = -1;
|
|
60
|
-
for (let i = 0; i < diffLines.length; i
|
|
124
|
+
for (let i = 0; i < diffLines.length; i += 1) {
|
|
61
125
|
if (diffLines[i].startsWith('@@')) {
|
|
62
126
|
hunkIdx = i;
|
|
63
127
|
break;
|
|
@@ -65,118 +129,101 @@ function applyUnifiedDiff(fileContent, diff) {
|
|
|
65
129
|
}
|
|
66
130
|
if (hunkIdx === -1)
|
|
67
131
|
return null;
|
|
68
|
-
// Parse @@ -oldStart[,oldCount] +newStart[,newCount] @@
|
|
69
132
|
const match = diffLines[hunkIdx].match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
|
|
70
133
|
if (!match)
|
|
71
134
|
return null;
|
|
72
|
-
// Diff uses 1-indexed lines; convert to 0-indexed
|
|
73
135
|
const origStart = parseInt(match[1], 10) - 1;
|
|
74
136
|
const origLines = fileContent.split('\n');
|
|
75
137
|
const output = [];
|
|
76
|
-
|
|
77
|
-
for (let i = 0; i < origStart; i++) {
|
|
138
|
+
for (let i = 0; i < origStart; i += 1) {
|
|
78
139
|
output.push(origLines[i] ?? '');
|
|
79
140
|
}
|
|
80
141
|
let origIdx = origStart;
|
|
81
|
-
for (let i = hunkIdx + 1; i < diffLines.length; i
|
|
142
|
+
for (let i = hunkIdx + 1; i < diffLines.length; i += 1) {
|
|
82
143
|
const line = diffLines[i];
|
|
83
|
-
// A trailing empty string from split('\n') signals end of diff
|
|
84
144
|
if (line.length === 0 && i === diffLines.length - 1)
|
|
85
145
|
break;
|
|
86
146
|
const prefix = line[0];
|
|
87
147
|
const content = line.slice(1);
|
|
88
148
|
if (prefix === ' ') {
|
|
89
|
-
// Context: must match current file — abort on mismatch (file changed)
|
|
90
149
|
if (origIdx >= origLines.length || origLines[origIdx] !== content)
|
|
91
150
|
return null;
|
|
92
151
|
output.push(content);
|
|
93
|
-
origIdx
|
|
152
|
+
origIdx += 1;
|
|
94
153
|
}
|
|
95
154
|
else if (prefix === '-') {
|
|
96
|
-
// Removal: must match current file — abort on mismatch
|
|
97
155
|
if (origIdx >= origLines.length || origLines[origIdx] !== content)
|
|
98
156
|
return null;
|
|
99
|
-
origIdx
|
|
157
|
+
origIdx += 1;
|
|
100
158
|
}
|
|
101
159
|
else if (prefix === '+') {
|
|
102
|
-
// Addition: inject into output without consuming original
|
|
103
160
|
output.push(content);
|
|
104
161
|
}
|
|
105
162
|
else {
|
|
106
|
-
break;
|
|
163
|
+
break;
|
|
107
164
|
}
|
|
108
165
|
}
|
|
109
|
-
// Copy remaining original lines after the hunk
|
|
110
166
|
while (origIdx < origLines.length) {
|
|
111
167
|
output.push(origLines[origIdx]);
|
|
112
|
-
origIdx
|
|
168
|
+
origIdx += 1;
|
|
113
169
|
}
|
|
114
170
|
return output.join('\n');
|
|
115
171
|
}
|
|
116
172
|
/**
|
|
117
|
-
*
|
|
118
|
-
* updated content. Tries patterns in priority order: db_in_ui → missing_validation
|
|
119
|
-
* → todo_fixme. Validates safety before returning.
|
|
173
|
+
* Deterministically build a patch bundle for the first matching remediation kind.
|
|
120
174
|
*
|
|
121
|
-
*
|
|
175
|
+
* Returns null when no deterministic recipe matches the target file.
|
|
122
176
|
*/
|
|
123
177
|
function applyFirstMatchingPatch(filePath, fileContent) {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
const result = (0, generator_1.generatePatch)({
|
|
178
|
+
for (const kind of patchPriorityKinds()) {
|
|
179
|
+
const bundle = buildPatchBundle({
|
|
127
180
|
filePath,
|
|
128
|
-
issue: '',
|
|
129
|
-
policy: '',
|
|
130
181
|
fileContent,
|
|
131
182
|
patternKind: kind,
|
|
132
183
|
});
|
|
133
|
-
if (!
|
|
184
|
+
if (!bundle)
|
|
134
185
|
continue;
|
|
135
|
-
|
|
136
|
-
if (!diff)
|
|
137
|
-
continue;
|
|
138
|
-
if (!isPatchSafe(fileContent, result.updatedContent))
|
|
139
|
-
continue;
|
|
140
|
-
return {
|
|
141
|
-
updatedContent: result.updatedContent,
|
|
142
|
-
patternKind: kind,
|
|
143
|
-
patchConfidence: scorePatchConfidence(kind),
|
|
144
|
-
};
|
|
186
|
+
return bundle;
|
|
145
187
|
}
|
|
146
188
|
return null;
|
|
147
189
|
}
|
|
148
190
|
/**
|
|
149
|
-
*
|
|
150
|
-
* attempts to generate a deterministic, safety-validated code patch.
|
|
151
|
-
*
|
|
152
|
-
* Returns null when:
|
|
153
|
-
* - the violation type has no patchable pattern
|
|
154
|
-
* - the pattern is not found in the file content
|
|
155
|
-
* - the generated patch produces no diff
|
|
156
|
-
* - the patch fails the safety gate (isPatchSafe)
|
|
191
|
+
* Generate a deterministic patch for a specific verify/fix suggestion.
|
|
157
192
|
*/
|
|
158
193
|
function generatePatchForSuggestion(suggestion, fileContent) {
|
|
159
194
|
const kind = (0, patterns_1.classifyViolation)(suggestion.issue, suggestion.policy);
|
|
160
195
|
if (!kind)
|
|
161
196
|
return null;
|
|
162
|
-
const
|
|
197
|
+
const generated = (0, generator_1.generatePatch)({
|
|
163
198
|
filePath: suggestion.file,
|
|
164
199
|
issue: suggestion.issue,
|
|
165
200
|
policy: suggestion.policy,
|
|
166
201
|
fileContent,
|
|
167
202
|
patternKind: kind,
|
|
168
203
|
});
|
|
169
|
-
if (!
|
|
204
|
+
if (!generated)
|
|
170
205
|
return null;
|
|
171
|
-
const diff = (0, diff_1.generateUnifiedDiff)(suggestion.file, fileContent,
|
|
206
|
+
const diff = (0, diff_1.generateUnifiedDiff)(suggestion.file, fileContent, generated.updatedContent);
|
|
172
207
|
if (!diff)
|
|
173
208
|
return null;
|
|
174
|
-
|
|
209
|
+
const patchConfidence = scorePatchConfidence(kind);
|
|
210
|
+
const validation = (0, safety_1.validatePatchCandidate)({
|
|
211
|
+
originalContent: fileContent,
|
|
212
|
+
updatedContent: generated.updatedContent,
|
|
213
|
+
diff,
|
|
214
|
+
kind,
|
|
215
|
+
confidence: patchConfidence,
|
|
216
|
+
});
|
|
217
|
+
// Keep low-confidence / unsafe transforms out of auto-fix suggestions.
|
|
218
|
+
if (!validation.safe)
|
|
175
219
|
return null;
|
|
176
220
|
return {
|
|
177
221
|
file: suggestion.file,
|
|
178
222
|
diff,
|
|
179
|
-
patchConfidence
|
|
223
|
+
patchConfidence,
|
|
224
|
+
patternKind: kind,
|
|
225
|
+
validation,
|
|
226
|
+
recipe: generated.metadata,
|
|
180
227
|
};
|
|
181
228
|
}
|
|
182
229
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patch-engine/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patch-engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type PatternKind = 'db_in_ui' | 'missing_validation' | 'todo_fixme';
|
|
1
|
+
export type PatternKind = 'db_in_ui' | 'missing_validation' | 'todo_fixme' | 'missing_auth_middleware' | 'missing_role_checks' | 'unsafe_jwt_usage' | 'missing_token_expiry' | 'unsafe_secret_exposure' | 'insecure_cookie_configuration' | 'missing_csrf_protection' | 'missing_rate_limiting' | 'missing_try_catch' | 'missing_timeout_handling' | 'unsafe_fetch_without_retries' | 'missing_idempotency_keys' | 'unsafe_webhook_verification' | 'unsafe_serialization' | 'missing_transaction_wrappers' | 'unsafe_sql_string_concatenation' | 'unsafe_file_uploads' | 'missing_mime_validation' | 'missing_size_limits' | 'unsafe_path_traversal_usage' | 'dangerous_useeffect_cleanup' | 'missing_abort_controller_cleanup' | 'unsafe_inner_html_usage' | 'unhandled_promise_chains' | 'unsafe_websocket_lifecycle' | 'missing_audit_logs' | 'unsafe_sensitive_logging' | 'missing_error_boundaries' | 'missing_tracing_wrappers' | 'deprecated_package_migration_mappings' | 'unsafe_env_usage' | 'dangerous_hardcoded_credentials';
|
|
2
2
|
export declare function classifyViolation(issue: string, policy: string): PatternKind | null;
|
|
3
3
|
export declare function detectPattern(content: string, kind: PatternKind): number | null;
|
|
4
4
|
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,oBAAoB,GACpB,YAAY,GACZ,yBAAyB,GACzB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,wBAAwB,GACxB,+BAA+B,GAC/B,yBAAyB,GACzB,uBAAuB,GACvB,mBAAmB,GACnB,0BAA0B,GAC1B,8BAA8B,GAC9B,0BAA0B,GAC1B,6BAA6B,GAC7B,sBAAsB,GACtB,8BAA8B,GAC9B,iCAAiC,GACjC,qBAAqB,GACrB,yBAAyB,GACzB,qBAAqB,GACrB,6BAA6B,GAC7B,6BAA6B,GAC7B,kCAAkC,GAClC,yBAAyB,GACzB,0BAA0B,GAC1B,4BAA4B,GAC5B,oBAAoB,GACpB,0BAA0B,GAC1B,0BAA0B,GAC1B,0BAA0B,GAC1B,uCAAuC,GACvC,kBAAkB,GAClB,iCAAiC,CAAC;AA6StC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBnF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAgC/E"}
|