@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
@@ -1,31 +1,143 @@
1
1
  "use strict";
2
- // Detection rules for deterministic patch generation.
3
- // Each function returns the 0-based line index of the first match, or null.
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
- // Classifiy a fix suggestion into a patchable pattern kind
9
- // ---------------------------------------------------------------------------
10
- function classifyViolation(issue, policy) {
11
- const combined = `${issue} ${policy}`.toLowerCase();
12
- if (combined.includes('todo') || combined.includes('fixme'))
13
- return 'todo_fixme';
14
- if (combined.includes('db') || combined.includes('database') ||
15
- combined.includes('query') || combined.includes('data access') ||
16
- combined.includes('direct access') ||
17
- policy.includes('layer') || policy.includes('layering') || policy.includes('db')) {
18
- return 'db_in_ui';
19
- }
20
- if (combined.includes('validation') || combined.includes('validate') ||
21
- combined.includes('input') || policy.includes('validation')) {
22
- return 'missing_validation';
23
- }
24
- return null;
25
- }
26
- // ---------------------------------------------------------------------------
27
- // Pattern detectors (work on pre-split line arrays)
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
- function findDbAccessLine(lines) {
57
- for (let i = 0; i < lines.length; i++) {
58
- const trimmed = lines[i].trimStart();
59
- // Skip lines that are themselves comments
60
- if (trimmed.startsWith('//') || trimmed.startsWith('*'))
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 (DB_ACCESS_PATTERNS.some((re) => re.test(lines[i])))
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
- for (let i = 0; i < lines.length; i++) {
86
- if (TODO_FIXME_RE.test(lines[i]))
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': return findDbAccessLine(lines);
95
- case 'missing_validation': return findMissingValidationLine(lines);
96
- case 'todo_fixme': return findTodoLine(lines);
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":"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"}
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"}