@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.
Files changed (71) hide show
  1. package/dist/commands/control-plane.js +7 -7
  2. package/dist/commands/control-plane.js.map +1 -1
  3. package/dist/commands/fix.d.ts.map +1 -1
  4. package/dist/commands/fix.js +108 -1
  5. package/dist/commands/fix.js.map +1 -1
  6. package/dist/commands/patch-apply.d.ts +2 -0
  7. package/dist/commands/patch-apply.d.ts.map +1 -1
  8. package/dist/commands/patch-apply.js +331 -19
  9. package/dist/commands/patch-apply.js.map +1 -1
  10. package/dist/commands/replay.js +5 -5
  11. package/dist/commands/replay.js.map +1 -1
  12. package/dist/commands/verify.d.ts.map +1 -1
  13. package/dist/commands/verify.js +29 -1
  14. package/dist/commands/verify.js.map +1 -1
  15. package/dist/commands/workspace.js +7 -7
  16. package/dist/commands/workspace.js.map +1 -1
  17. package/dist/daemon/server.d.ts +2 -2
  18. package/dist/daemon/server.d.ts.map +1 -1
  19. package/dist/daemon/server.js +1054 -36
  20. package/dist/daemon/server.js.map +1 -1
  21. package/dist/index.js +15 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/intent-engine/matcher.d.ts.map +1 -1
  24. package/dist/intent-engine/matcher.js +2 -0
  25. package/dist/intent-engine/matcher.js.map +1 -1
  26. package/dist/patch-engine/diff.d.ts +1 -1
  27. package/dist/patch-engine/diff.js +1 -1
  28. package/dist/patch-engine/generator.d.ts +9 -0
  29. package/dist/patch-engine/generator.d.ts.map +1 -1
  30. package/dist/patch-engine/generator.js +375 -17
  31. package/dist/patch-engine/generator.js.map +1 -1
  32. package/dist/patch-engine/index.d.ts +25 -25
  33. package/dist/patch-engine/index.d.ts.map +1 -1
  34. package/dist/patch-engine/index.js +134 -87
  35. package/dist/patch-engine/index.js.map +1 -1
  36. package/dist/patch-engine/patterns.d.ts +1 -1
  37. package/dist/patch-engine/patterns.d.ts.map +1 -1
  38. package/dist/patch-engine/patterns.js +277 -40
  39. package/dist/patch-engine/patterns.js.map +1 -1
  40. package/dist/patch-engine/rollback.d.ts +31 -0
  41. package/dist/patch-engine/rollback.d.ts.map +1 -0
  42. package/dist/patch-engine/rollback.js +275 -0
  43. package/dist/patch-engine/rollback.js.map +1 -0
  44. package/dist/patch-engine/safety.d.ts +28 -0
  45. package/dist/patch-engine/safety.d.ts.map +1 -0
  46. package/dist/patch-engine/safety.js +122 -0
  47. package/dist/patch-engine/safety.js.map +1 -0
  48. package/dist/patch-engine/transaction.d.ts +52 -0
  49. package/dist/patch-engine/transaction.d.ts.map +1 -0
  50. package/dist/patch-engine/transaction.js +93 -0
  51. package/dist/patch-engine/transaction.js.map +1 -0
  52. package/dist/utils/advisory-signals.d.ts +5 -0
  53. package/dist/utils/advisory-signals.d.ts.map +1 -1
  54. package/dist/utils/advisory-signals.js +50 -12
  55. package/dist/utils/advisory-signals.js.map +1 -1
  56. package/dist/utils/ai-debt-budget.d.ts.map +1 -1
  57. package/dist/utils/ai-debt-budget.js +5 -2
  58. package/dist/utils/ai-debt-budget.js.map +1 -1
  59. package/dist/utils/cli-json.d.ts.map +1 -1
  60. package/dist/utils/cli-json.js +80 -12
  61. package/dist/utils/cli-json.js.map +1 -1
  62. package/dist/utils/execution-bus.d.ts +10 -0
  63. package/dist/utils/execution-bus.d.ts.map +1 -1
  64. package/dist/utils/execution-bus.js +16 -0
  65. package/dist/utils/execution-bus.js.map +1 -1
  66. package/dist/utils/policy-compiler.d.ts +6 -0
  67. package/dist/utils/policy-compiler.d.ts.map +1 -1
  68. package/dist/utils/policy-compiler.js +20 -0
  69. package/dist/utils/policy-compiler.js.map +1 -1
  70. package/package.json +9 -8
  71. package/LICENSE +0 -201
@@ -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
- // Patterns that must appear in original content for a patch to be considered safe.
10
- const PATCHABLE_PATTERN_RE = /db\.(query|execute|run|find[A-Za-z]*)\b|prisma\.\w+\.\w+\b|new\s+Pool\s*\(|knex\s*\(|TODO|FIXME|\bvalidat/i;
11
- /**
12
- * A patch is safe when:
13
- * - updated content is non-empty
14
- * - the diff is non-empty (something actually changed)
15
- * - total added + removed lines ≤ 5 (not a full-file rewrite)
16
- * - the original file contains at least one recognizable patchable pattern
17
- */
18
- function isPatchSafe(original, updated) {
19
- if (!updated || !updated.trim())
20
- return false;
21
- const diff = (0, diff_1.generateUnifiedDiff)('', original, updated);
22
- if (!diff)
23
- return false;
24
- let changed = 0;
25
- for (const line of diff.split('\n')) {
26
- if (line.startsWith('-') && !line.startsWith('---'))
27
- changed++;
28
- if (line.startsWith('+') && !line.startsWith('+++'))
29
- changed++;
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 scorePatchConfidence(kind) {
38
- if (kind === 'db_in_ui')
39
- return 'high';
40
- if (kind === 'missing_validation')
41
- return 'medium';
42
- return 'low'; // todo_fixme — simple removal, lowest confidence
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 the single-hunk diff format, verifies every context and removal line
48
- * matches the current file, then reconstructs the updated content.
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
- // Lines before the hunk are copied unchanged
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++; // consume original line without adding to output
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; // unexpected prefix — stop hunk processing
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
- * Detect the first matching patchable pattern in fileContent and return the
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
- * Used by `neurcode patch --file` to apply a patch without needing suggestion metadata.
175
+ * Returns null when no deterministic recipe matches the target file.
122
176
  */
123
177
  function applyFirstMatchingPatch(filePath, fileContent) {
124
- const kinds = ['db_in_ui', 'missing_validation', 'todo_fixme'];
125
- for (const kind of kinds) {
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 (!result)
184
+ if (!bundle)
134
185
  continue;
135
- const diff = (0, diff_1.generateUnifiedDiff)(filePath, fileContent, result.updatedContent);
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
- * Given a fix suggestion and the current content of suggestion.file,
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 result = (0, generator_1.generatePatch)({
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 (!result)
204
+ if (!generated)
170
205
  return null;
171
- const diff = (0, diff_1.generateUnifiedDiff)(suggestion.file, fileContent, result.updatedContent);
206
+ const diff = (0, diff_1.generateUnifiedDiff)(suggestion.file, fileContent, generated.updatedContent);
172
207
  if (!diff)
173
208
  return null;
174
- if (!isPatchSafe(fileContent, result.updatedContent))
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: scorePatchConfidence(kind),
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":"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"}
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,GAAG,UAAU,GAAG,oBAAoB,GAAG,YAAY,CAAC;AAM3E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAsBnF;AA2ED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAO/E"}
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"}