@neurcode-ai/cli 0.9.26 → 0.9.28

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 (59) hide show
  1. package/dist/commands/allow.d.ts.map +1 -1
  2. package/dist/commands/allow.js +5 -19
  3. package/dist/commands/allow.js.map +1 -1
  4. package/dist/commands/apply.d.ts +1 -0
  5. package/dist/commands/apply.d.ts.map +1 -1
  6. package/dist/commands/apply.js +105 -46
  7. package/dist/commands/apply.js.map +1 -1
  8. package/dist/commands/ask.d.ts.map +1 -1
  9. package/dist/commands/ask.js +1849 -1783
  10. package/dist/commands/ask.js.map +1 -1
  11. package/dist/commands/init.d.ts +2 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +83 -24
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/plan.d.ts +4 -0
  16. package/dist/commands/plan.d.ts.map +1 -1
  17. package/dist/commands/plan.js +344 -48
  18. package/dist/commands/plan.js.map +1 -1
  19. package/dist/commands/policy.d.ts.map +1 -1
  20. package/dist/commands/policy.js +629 -0
  21. package/dist/commands/policy.js.map +1 -1
  22. package/dist/commands/prompt.d.ts +7 -1
  23. package/dist/commands/prompt.d.ts.map +1 -1
  24. package/dist/commands/prompt.js +106 -25
  25. package/dist/commands/prompt.js.map +1 -1
  26. package/dist/commands/ship.d.ts +32 -0
  27. package/dist/commands/ship.d.ts.map +1 -1
  28. package/dist/commands/ship.js +1404 -75
  29. package/dist/commands/ship.js.map +1 -1
  30. package/dist/commands/verify.d.ts +6 -0
  31. package/dist/commands/verify.d.ts.map +1 -1
  32. package/dist/commands/verify.js +527 -102
  33. package/dist/commands/verify.js.map +1 -1
  34. package/dist/index.js +89 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/utils/custom-policy-rules.d.ts +21 -0
  37. package/dist/utils/custom-policy-rules.d.ts.map +1 -0
  38. package/dist/utils/custom-policy-rules.js +71 -0
  39. package/dist/utils/custom-policy-rules.js.map +1 -0
  40. package/dist/utils/plan-cache.d.ts.map +1 -1
  41. package/dist/utils/plan-cache.js +4 -0
  42. package/dist/utils/plan-cache.js.map +1 -1
  43. package/dist/utils/policy-audit.d.ts +29 -0
  44. package/dist/utils/policy-audit.d.ts.map +1 -0
  45. package/dist/utils/policy-audit.js +208 -0
  46. package/dist/utils/policy-audit.js.map +1 -0
  47. package/dist/utils/policy-exceptions.d.ts +96 -0
  48. package/dist/utils/policy-exceptions.d.ts.map +1 -0
  49. package/dist/utils/policy-exceptions.js +389 -0
  50. package/dist/utils/policy-exceptions.js.map +1 -0
  51. package/dist/utils/policy-governance.d.ts +24 -0
  52. package/dist/utils/policy-governance.d.ts.map +1 -0
  53. package/dist/utils/policy-governance.js +124 -0
  54. package/dist/utils/policy-governance.js.map +1 -0
  55. package/dist/utils/policy-packs.d.ts +72 -1
  56. package/dist/utils/policy-packs.d.ts.map +1 -1
  57. package/dist/utils/policy-packs.js +285 -0
  58. package/dist/utils/policy-packs.js.map +1 -1
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ interface PlanOptions {
5
5
  pr?: string;
6
6
  mask?: boolean;
7
7
  cache?: boolean;
8
+ json?: boolean;
9
+ snapshotMode?: 'auto' | 'full' | 'off';
10
+ snapshotMaxFiles?: number;
11
+ snapshotBudgetMs?: number;
8
12
  }
9
13
  export type IntentMode = 'implementation' | 'analysis';
10
14
  export declare function detectIntentMode(intent: string): IntentMode;
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAuDA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0KD,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAwB3D;AAyFD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,iBAi6BrE"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAwDA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsLD,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAwB3D;AAiOD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,iBA4mCrE"}
@@ -37,6 +37,7 @@ exports.detectIntentMode = detectIntentMode;
37
37
  exports.planCommand = planCommand;
38
38
  const fs_1 = require("fs");
39
39
  const path_1 = require("path");
40
+ const crypto_1 = require("crypto");
40
41
  const config_1 = require("../config");
41
42
  const api_client_1 = require("../api-client");
42
43
  const project_detector_1 = require("../utils/project-detector");
@@ -267,6 +268,102 @@ function renderCacheMissReason(reason, bestIntentSimilarity) {
267
268
  }
268
269
  return reasonText[reason];
269
270
  }
271
+ function hasPersistedPlanId(planId) {
272
+ return typeof planId === 'string' && planId.trim().length > 0 && planId !== 'unknown';
273
+ }
274
+ function toUnixPath(filePath) {
275
+ return filePath.replace(/\\/g, '/');
276
+ }
277
+ function parsePositiveInt(raw) {
278
+ if (!raw)
279
+ return null;
280
+ const parsed = Number(raw);
281
+ if (!Number.isFinite(parsed) || parsed <= 0)
282
+ return null;
283
+ return Math.floor(parsed);
284
+ }
285
+ function parseSnapshotMode(raw) {
286
+ if (!raw)
287
+ return null;
288
+ const normalized = raw.trim().toLowerCase();
289
+ if (normalized === 'auto' || normalized === 'full' || normalized === 'off') {
290
+ return normalized;
291
+ }
292
+ return null;
293
+ }
294
+ function resolveSnapshotMode(optionMode) {
295
+ if (process.env.NEURCODE_PLAN_SKIP_SNAPSHOTS === '1') {
296
+ return 'off';
297
+ }
298
+ const optionParsed = parseSnapshotMode(optionMode);
299
+ const envMode = parseSnapshotMode(process.env.NEURCODE_PLAN_SNAPSHOT_MODE);
300
+ return optionParsed || envMode || 'auto';
301
+ }
302
+ function resolveSnapshotMaxFiles(mode, optionValue) {
303
+ const envOverride = parsePositiveInt(process.env.NEURCODE_PLAN_SNAPSHOT_MAX_FILES);
304
+ const configured = optionValue && optionValue > 0 ? Math.floor(optionValue) : envOverride;
305
+ if (configured && configured > 0)
306
+ return configured;
307
+ return mode === 'full' ? 500 : 40;
308
+ }
309
+ function resolveSnapshotBudgetMs(mode, optionValue) {
310
+ const envOverride = parsePositiveInt(process.env.NEURCODE_PLAN_SNAPSHOT_BUDGET_MS);
311
+ const configured = optionValue && optionValue > 0 ? Math.floor(optionValue) : envOverride;
312
+ if (typeof configured === 'number' && configured > 0)
313
+ return configured;
314
+ return mode === 'full' ? 0 : 60_000;
315
+ }
316
+ function resolveSnapshotMaxBytes(mode) {
317
+ const envOverride = parsePositiveInt(process.env.NEURCODE_PLAN_SNAPSHOT_MAX_BYTES);
318
+ if (typeof envOverride === 'number' && envOverride > 0)
319
+ return envOverride;
320
+ return mode === 'full' ? 0 : 256 * 1024;
321
+ }
322
+ function getSnapshotManifestPath(projectRoot) {
323
+ return (0, path_1.join)(projectRoot, '.neurcode', 'snapshot-manifest.json');
324
+ }
325
+ function loadSnapshotManifest(projectRoot) {
326
+ const manifestPath = getSnapshotManifestPath(projectRoot);
327
+ if (!(0, fs_1.existsSync)(manifestPath)) {
328
+ return {
329
+ version: 1,
330
+ updatedAt: new Date().toISOString(),
331
+ entries: {},
332
+ };
333
+ }
334
+ try {
335
+ const parsed = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf-8'));
336
+ if (parsed && parsed.version === 1 && parsed.entries && typeof parsed.entries === 'object') {
337
+ return {
338
+ version: 1,
339
+ updatedAt: typeof parsed.updatedAt === 'string' ? parsed.updatedAt : new Date().toISOString(),
340
+ entries: parsed.entries,
341
+ };
342
+ }
343
+ }
344
+ catch {
345
+ // Ignore manifest parse errors and start fresh.
346
+ }
347
+ return {
348
+ version: 1,
349
+ updatedAt: new Date().toISOString(),
350
+ entries: {},
351
+ };
352
+ }
353
+ function saveSnapshotManifest(projectRoot, manifest) {
354
+ const manifestPath = getSnapshotManifestPath(projectRoot);
355
+ const manifestDir = (0, path_1.join)(projectRoot, '.neurcode');
356
+ if (!(0, fs_1.existsSync)(manifestDir)) {
357
+ (0, fs_1.mkdirSync)(manifestDir, { recursive: true });
358
+ }
359
+ (0, fs_1.writeFileSync)(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
360
+ }
361
+ function computeSnapshotHash(content) {
362
+ return (0, crypto_1.createHash)('sha256').update(content, 'utf-8').digest('hex');
363
+ }
364
+ function emitPlanJson(payload) {
365
+ console.log(JSON.stringify(payload, null, 2));
366
+ }
270
367
  function emitCachedPlanHit(input) {
271
368
  if (input.touchKey) {
272
369
  try {
@@ -283,14 +380,32 @@ function emitCachedPlanHit(input) {
283
380
  else {
284
381
  console.log(chalk.dim(`⚡ Using cached plan (created: ${createdAtLabel})\n`));
285
382
  }
286
- displayPlan(input.response.plan);
287
- console.log(chalk.dim(`\nGenerated at: ${new Date(input.response.timestamp).toLocaleString()} (cached)`));
288
- if (input.response.planId && input.response.planId !== 'unknown') {
289
- console.log(chalk.bold.cyan(`\n📌 Plan ID: ${input.response.planId} (Cached)`));
290
- console.log(chalk.dim(' Run \'neurcode prompt\' to generate a Cursor/AI prompt.'));
383
+ const persistedPlan = hasPersistedPlanId(input.response.planId);
384
+ if (input.jsonMode) {
385
+ emitPlanJson({
386
+ success: persistedPlan,
387
+ cached: true,
388
+ mode: input.intentMode,
389
+ planId: persistedPlan ? input.response.planId : null,
390
+ sessionId: input.response.sessionId || null,
391
+ projectId: input.projectId || null,
392
+ timestamp: input.response.timestamp,
393
+ message: persistedPlan
394
+ ? `Using ${input.mode === 'near' ? 'near-' : ''}cached plan`
395
+ : 'Plan generated but could not be persisted (missing planId)',
396
+ plan: input.response.plan,
397
+ });
398
+ }
399
+ else {
400
+ displayPlan(input.response.plan);
401
+ console.log(chalk.dim(`\nGenerated at: ${new Date(input.response.timestamp).toLocaleString()} (cached)`));
402
+ if (persistedPlan) {
403
+ console.log(chalk.bold.cyan(`\n📌 Plan ID: ${input.response.planId} (Cached)`));
404
+ console.log(chalk.dim(' Run \'neurcode prompt\' to generate a Cursor/AI prompt.'));
405
+ }
291
406
  }
292
407
  try {
293
- if (input.response.planId && input.response.planId !== 'unknown') {
408
+ if (persistedPlan) {
294
409
  (0, state_1.setActivePlanId)(input.response.planId);
295
410
  (0, state_1.setLastPlanGeneratedAt)(new Date().toISOString());
296
411
  }
@@ -311,15 +426,47 @@ function emitCachedPlanHit(input) {
311
426
  catch {
312
427
  // ignore state write errors
313
428
  }
429
+ return persistedPlan;
314
430
  }
315
431
  async function planCommand(intent, options) {
316
432
  try {
317
433
  if (!intent || !intent.trim()) {
434
+ if (options.json) {
435
+ emitPlanJson({
436
+ success: false,
437
+ cached: false,
438
+ mode: 'implementation',
439
+ planId: null,
440
+ sessionId: null,
441
+ projectId: options.projectId || null,
442
+ timestamp: new Date().toISOString(),
443
+ message: 'Intent cannot be empty',
444
+ });
445
+ }
318
446
  console.error(chalk.red('❌ Error: Intent cannot be empty. What are you building?'));
319
447
  console.log(chalk.dim('Usage: neurcode plan "<your intent description>"'));
320
448
  console.log(chalk.dim('Example: neurcode plan "Add user authentication to login page"'));
321
449
  process.exit(1);
322
450
  }
451
+ if (options.snapshotMode) {
452
+ const parsedSnapshotMode = parseSnapshotMode(String(options.snapshotMode));
453
+ if (!parsedSnapshotMode) {
454
+ if (options.json) {
455
+ emitPlanJson({
456
+ success: false,
457
+ cached: false,
458
+ mode: 'implementation',
459
+ planId: null,
460
+ sessionId: null,
461
+ projectId: options.projectId || null,
462
+ timestamp: new Date().toISOString(),
463
+ message: `Invalid --snapshot-mode "${options.snapshotMode}". Expected: auto | full | off.`,
464
+ });
465
+ }
466
+ console.error(chalk.red(`❌ Invalid --snapshot-mode "${options.snapshotMode}". Expected: auto | full | off.`));
467
+ process.exit(1);
468
+ }
469
+ }
323
470
  // Load configuration first (needed for TicketService)
324
471
  const config = (0, config_1.loadConfig)();
325
472
  // API URL is automatically set to production - no need to check
@@ -376,14 +523,18 @@ async function planCommand(intent, options) {
376
523
  });
377
524
  const cached = (0, plan_cache_1.readCachedPlan)(cwd, key);
378
525
  if (cached) {
379
- emitCachedPlanHit({
526
+ const persisted = emitCachedPlanHit({
380
527
  cwd,
381
528
  response: cached.response,
382
529
  createdAt: cached.createdAt,
383
530
  mode: 'exact',
384
531
  orgId,
385
532
  projectId: finalProjectIdEarly,
533
+ jsonMode: options.json === true,
534
+ intentMode,
386
535
  });
536
+ if (!persisted)
537
+ process.exit(2);
387
538
  return;
388
539
  }
389
540
  const near = (0, plan_cache_1.findNearCachedPlan)(cwd, {
@@ -398,7 +549,7 @@ async function planCommand(intent, options) {
398
549
  minIntentSimilarity: nearIntentSimilarityFloor,
399
550
  });
400
551
  if (near) {
401
- emitCachedPlanHit({
552
+ const persisted = emitCachedPlanHit({
402
553
  cwd,
403
554
  response: near.entry.response,
404
555
  createdAt: near.entry.createdAt,
@@ -407,7 +558,11 @@ async function planCommand(intent, options) {
407
558
  orgId,
408
559
  projectId: finalProjectIdEarly,
409
560
  touchKey: near.entry.key,
561
+ jsonMode: options.json === true,
562
+ intentMode,
410
563
  });
564
+ if (!persisted)
565
+ process.exit(2);
411
566
  return;
412
567
  }
413
568
  const miss = (0, plan_cache_1.diagnosePlanCacheMiss)(cwd, {
@@ -586,14 +741,18 @@ async function planCommand(intent, options) {
586
741
  });
587
742
  const cached = (0, plan_cache_1.readCachedPlan)(cwd, key);
588
743
  if (cached) {
589
- emitCachedPlanHit({
744
+ const persisted = emitCachedPlanHit({
590
745
  cwd,
591
746
  response: cached.response,
592
747
  createdAt: cached.createdAt,
593
748
  mode: 'exact',
594
749
  orgId,
595
750
  projectId: finalProjectIdForGuard,
751
+ jsonMode: options.json === true,
752
+ intentMode,
596
753
  });
754
+ if (!persisted)
755
+ process.exit(2);
597
756
  return;
598
757
  }
599
758
  const near = (0, plan_cache_1.findNearCachedPlan)(cwd, {
@@ -608,7 +767,7 @@ async function planCommand(intent, options) {
608
767
  minIntentSimilarity: nearIntentSimilarityFloor,
609
768
  });
610
769
  if (near) {
611
- emitCachedPlanHit({
770
+ const persisted = emitCachedPlanHit({
612
771
  cwd,
613
772
  response: near.entry.response,
614
773
  createdAt: near.entry.createdAt,
@@ -617,7 +776,11 @@ async function planCommand(intent, options) {
617
776
  orgId,
618
777
  projectId: finalProjectIdForGuard,
619
778
  touchKey: near.entry.key,
779
+ jsonMode: options.json === true,
780
+ intentMode,
620
781
  });
782
+ if (!persisted)
783
+ process.exit(2);
621
784
  return;
622
785
  }
623
786
  const miss = (0, plan_cache_1.diagnosePlanCacheMiss)(cwd, {
@@ -876,8 +1039,9 @@ async function planCommand(intent, options) {
876
1039
  // Brain progression tracking should never block plan generation.
877
1040
  }
878
1041
  }
1042
+ const persistedPlanId = hasPersistedPlanId(response.planId);
879
1043
  // Persist in local cache for instant repeat plans.
880
- if (shouldUseCache && orgId && finalProjectIdForGuard) {
1044
+ if (persistedPlanId && shouldUseCache && orgId && finalProjectIdForGuard) {
881
1045
  // Recompute repo fingerprint right before writing to cache so Neurcode-managed
882
1046
  // housekeeping (e.g. `.neurcode/config.json`, `.gitignore` updates) doesn't
883
1047
  // cause immediate cache misses on the next identical run.
@@ -918,60 +1082,149 @@ async function planCommand(intent, options) {
918
1082
  if (orgId && finalProjectIdForGuard) {
919
1083
  (0, neurcode_context_1.appendPlanToOrgProjectMemory)(cwd, orgId, finalProjectIdForGuard, intent, response);
920
1084
  }
921
- // Pre-Flight Snapshot: Capture current state of files that will be MODIFIED
922
- // This ensures we have a baseline to revert to if AI destroys files
923
- const modifyFiles = response.plan.files.filter(f => f.action === 'MODIFY');
924
- const skipSnapshotsByEnv = process.env.NEURCODE_PLAN_SKIP_SNAPSHOTS === '1';
1085
+ // Pre-flight snapshots: capture current state for MODIFY targets.
1086
+ const modifyFiles = response.plan.files.filter((f) => f.action === 'MODIFY');
1087
+ const snapshotMode = resolveSnapshotMode(options.snapshotMode);
1088
+ const snapshotMaxFiles = resolveSnapshotMaxFiles(snapshotMode, options.snapshotMaxFiles);
1089
+ const snapshotBudgetMs = resolveSnapshotBudgetMs(snapshotMode, options.snapshotBudgetMs);
1090
+ const snapshotMaxBytes = resolveSnapshotMaxBytes(snapshotMode);
925
1091
  if (isReadOnlyAnalysis) {
926
1092
  console.log(chalk.dim('\n🔎 Analysis mode: skipping pre-flight file snapshots'));
927
1093
  }
928
- else if (skipSnapshotsByEnv) {
929
- console.log(chalk.dim('\n⚡ Snapshot capture skipped by runtime flag (fast ship mode)'));
1094
+ else if (snapshotMode === 'off') {
1095
+ console.log(chalk.dim('\n⚡ Snapshot capture disabled (snapshot mode: off)'));
930
1096
  }
931
1097
  else if (modifyFiles.length > 0) {
932
- console.log(chalk.dim(`\n📸 Capturing pre-flight snapshots for ${modifyFiles.length} file(s)...`));
1098
+ const snapshotCandidates = modifyFiles.slice(0, snapshotMaxFiles);
1099
+ const cappedCount = Math.max(0, modifyFiles.length - snapshotCandidates.length);
1100
+ const snapshotConcurrency = Math.min(16, Math.max(1, parsePositiveInt(process.env.NEURCODE_PLAN_SNAPSHOT_CONCURRENCY) ?? (snapshotMode === 'full' ? 8 : 6)));
1101
+ const snapshotTimeoutMs = Math.max(1000, parsePositiveInt(process.env.NEURCODE_PLAN_SNAPSHOT_TIMEOUT_MS) ?? (snapshotMode === 'full' ? 15000 : 8000));
1102
+ const deadline = snapshotBudgetMs > 0 ? Date.now() + snapshotBudgetMs : 0;
1103
+ const forceResnapshot = process.env.NEURCODE_PLAN_SNAPSHOT_FORCE === '1';
1104
+ console.log(chalk.dim(`\n📸 Capturing pre-flight snapshots for ${snapshotCandidates.length}/${modifyFiles.length} file(s)` +
1105
+ ` [mode=${snapshotMode}, concurrency=${snapshotConcurrency}` +
1106
+ `${snapshotBudgetMs > 0 ? `, budget=${snapshotBudgetMs}ms` : ', budget=unbounded'}]...`));
933
1107
  let snapshotsSaved = 0;
934
1108
  let snapshotsFailed = 0;
935
- for (const file of modifyFiles) {
936
- try {
937
- // Resolve file path relative to current working directory
938
- const filePath = (0, path_1.resolve)(cwd, file.path);
939
- // Check if file exists locally
940
- if (!(0, fs_1.existsSync)(filePath)) {
941
- console.log(chalk.yellow(` ⚠️ Skipping ${file.path} (file not found locally)`));
942
- continue;
1109
+ let snapshotsSkippedMissing = 0;
1110
+ let snapshotsSkippedUnchanged = 0;
1111
+ let snapshotsSkippedLarge = 0;
1112
+ let snapshotsProcessed = 0;
1113
+ let budgetExhausted = false;
1114
+ const withTimeout = async (promise, timeoutMs) => {
1115
+ return await Promise.race([
1116
+ promise,
1117
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`snapshot timeout after ${timeoutMs}ms`)), timeoutMs)),
1118
+ ]);
1119
+ };
1120
+ const manifest = loadSnapshotManifest(cwd);
1121
+ let manifestDirty = false;
1122
+ let cursor = 0;
1123
+ const workers = Array.from({ length: Math.min(snapshotConcurrency, snapshotCandidates.length) }, async () => {
1124
+ while (cursor < snapshotCandidates.length) {
1125
+ if (budgetExhausted)
1126
+ break;
1127
+ if (deadline > 0 && Date.now() >= deadline) {
1128
+ budgetExhausted = true;
1129
+ break;
943
1130
  }
944
- // Read current file content
945
- const fileContent = (0, fs_1.readFileSync)(filePath, 'utf-8');
946
- // Save as backup version with descriptive reason
947
- const reason = `Pre-Plan Snapshot for "${intent.trim()}"`;
948
- await client.saveFileVersion(file.path, fileContent, finalProjectId, reason, 'modify', // Pre-flight snapshot is a modification checkpoint
949
- 0, // No lines added yet (this is the baseline)
950
- 0 // No lines removed yet (this is the baseline)
951
- );
952
- snapshotsSaved++;
953
- console.log(chalk.green(` ✓ Snapshot saved: ${file.path}`));
1131
+ const current = snapshotCandidates[cursor++];
1132
+ if (!current)
1133
+ break;
1134
+ snapshotsProcessed++;
1135
+ try {
1136
+ const normalizedPath = toUnixPath(current.path);
1137
+ const filePath = (0, path_1.resolve)(cwd, current.path);
1138
+ if (!(0, fs_1.existsSync)(filePath)) {
1139
+ snapshotsSkippedMissing++;
1140
+ if (process.env.DEBUG) {
1141
+ console.log(chalk.yellow(` ⚠️ Skipping ${current.path} (file not found locally)`));
1142
+ }
1143
+ continue;
1144
+ }
1145
+ const fileContent = (0, fs_1.readFileSync)(filePath, 'utf-8');
1146
+ const fileSize = Buffer.byteLength(fileContent, 'utf-8');
1147
+ if (snapshotMaxBytes > 0 && fileSize > snapshotMaxBytes) {
1148
+ snapshotsSkippedLarge++;
1149
+ if (process.env.DEBUG) {
1150
+ console.log(chalk.yellow(` ⚠️ Skipping ${current.path} (size ${fileSize}B > ${snapshotMaxBytes}B)`));
1151
+ }
1152
+ continue;
1153
+ }
1154
+ const fileHash = computeSnapshotHash(fileContent);
1155
+ const previous = manifest.entries[normalizedPath];
1156
+ if (snapshotMode === 'auto' &&
1157
+ !forceResnapshot &&
1158
+ previous &&
1159
+ previous.sha256 === fileHash &&
1160
+ previous.size === fileSize) {
1161
+ snapshotsSkippedUnchanged++;
1162
+ continue;
1163
+ }
1164
+ const reason = `Pre-Plan Snapshot for "${intent.trim()}"`;
1165
+ await withTimeout(client.saveFileVersion(current.path, fileContent, finalProjectId, reason, 'modify', 0, 0), snapshotTimeoutMs);
1166
+ snapshotsSaved++;
1167
+ manifest.entries[normalizedPath] = {
1168
+ sha256: fileHash,
1169
+ size: fileSize,
1170
+ snapshotAt: new Date().toISOString(),
1171
+ };
1172
+ manifestDirty = true;
1173
+ if (process.env.DEBUG) {
1174
+ console.log(chalk.green(` ✓ Snapshot saved: ${current.path}`));
1175
+ }
1176
+ }
1177
+ catch (error) {
1178
+ snapshotsFailed++;
1179
+ if (process.env.DEBUG) {
1180
+ console.warn(chalk.yellow(` ⚠️ Failed to save snapshot for ${current.path}: ${error instanceof Error ? error.message : 'Unknown error'}`));
1181
+ }
1182
+ }
1183
+ }
1184
+ });
1185
+ await Promise.all(workers);
1186
+ if (manifestDirty) {
1187
+ try {
1188
+ manifest.updatedAt = new Date().toISOString();
1189
+ saveSnapshotManifest(cwd, manifest);
954
1190
  }
955
- catch (error) {
956
- snapshotsFailed++;
957
- console.warn(chalk.yellow(` ⚠️ Failed to save snapshot for ${file.path}: ${error instanceof Error ? error.message : 'Unknown error'}`));
958
- // Continue with other files even if one fails
1191
+ catch (manifestError) {
1192
+ if (process.env.DEBUG) {
1193
+ console.warn(chalk.yellow(` ⚠️ Could not persist snapshot manifest: ${manifestError instanceof Error ? manifestError.message : 'Unknown error'}`));
1194
+ }
959
1195
  }
960
1196
  }
1197
+ const snapshotsSkippedBudget = Math.max(0, snapshotCandidates.length - snapshotsProcessed);
961
1198
  if (snapshotsSaved > 0) {
962
1199
  console.log(chalk.green(`\n✅ ${snapshotsSaved} pre-flight snapshot(s) saved successfully`));
963
- if (snapshotsFailed > 0) {
964
- console.log(chalk.yellow(` ${snapshotsFailed} snapshot(s) failed (plan will continue)`));
965
- }
966
- console.log(chalk.dim(' You can revert these files using: neurcode revert <filePath> --to-version <version>\n'));
1200
+ console.log(chalk.dim(' You can revert these files using: neurcode revert <filePath> --to-version <version>'));
967
1201
  }
968
1202
  else if (snapshotsFailed > 0) {
969
1203
  console.log(chalk.yellow(`\n⚠️ No snapshots were saved (${snapshotsFailed} failed)`));
970
- console.log(chalk.dim(' Plan will continue, but revert functionality may be limited\n'));
1204
+ console.log(chalk.dim(' Plan will continue, but revert functionality may be limited'));
971
1205
  }
972
1206
  else {
973
- console.log(chalk.dim('\n No files to snapshot\n'));
1207
+ console.log(chalk.dim('\n No new snapshots were required'));
1208
+ }
1209
+ if (snapshotsSkippedUnchanged > 0) {
1210
+ console.log(chalk.dim(` ${snapshotsSkippedUnchanged} file(s) skipped (unchanged since last snapshot)`));
1211
+ }
1212
+ if (snapshotsSkippedMissing > 0) {
1213
+ console.log(chalk.dim(` ${snapshotsSkippedMissing} file(s) skipped (not found locally)`));
1214
+ }
1215
+ if (snapshotsSkippedLarge > 0) {
1216
+ console.log(chalk.dim(` ${snapshotsSkippedLarge} file(s) skipped (size limit)`));
1217
+ }
1218
+ if (cappedCount > 0) {
1219
+ console.log(chalk.dim(` ${cappedCount} file(s) deferred by snapshot max-file cap (${snapshotMaxFiles})`));
1220
+ }
1221
+ if (snapshotsSkippedBudget > 0) {
1222
+ console.log(chalk.dim(` ${snapshotsSkippedBudget} file(s) deferred by snapshot budget`));
1223
+ }
1224
+ if (budgetExhausted && process.env.DEBUG) {
1225
+ console.log(chalk.dim(' Snapshot budget exhausted before processing all candidates.'));
974
1226
  }
1227
+ console.log('');
975
1228
  }
976
1229
  // Step 3: Post-Generation Hallucination Check (DEEP SCAN)
977
1230
  // Scan ALL plan content for phantom packages - not just summaries, but full proposed code
@@ -1105,6 +1358,24 @@ async function planCommand(intent, options) {
1105
1358
  console.log(chalk.green('✅ No hallucinations detected'));
1106
1359
  }
1107
1360
  }
1361
+ if (!persistedPlanId) {
1362
+ const missingPlanMessage = 'Plan generated but failed to persist (planId missing). Cannot continue with prompt/apply/ship.';
1363
+ if (options.json) {
1364
+ emitPlanJson({
1365
+ success: false,
1366
+ cached: false,
1367
+ mode: intentMode,
1368
+ planId: null,
1369
+ sessionId: response.sessionId || null,
1370
+ projectId: finalProjectId || null,
1371
+ timestamp: response.timestamp,
1372
+ message: missingPlanMessage,
1373
+ plan: response.plan,
1374
+ });
1375
+ }
1376
+ console.error(chalk.red(`\n❌ ${missingPlanMessage}`));
1377
+ process.exit(2);
1378
+ }
1108
1379
  // Display the plan (AFTER hallucination warnings)
1109
1380
  if (isReadOnlyAnalysis) {
1110
1381
  const writableTargets = response.plan.files.filter((file) => file.action !== 'BLOCK').length;
@@ -1113,13 +1384,13 @@ async function planCommand(intent, options) {
1113
1384
  displayPlan(response.plan);
1114
1385
  console.log(chalk.dim(`\nGenerated at: ${new Date(response.timestamp).toLocaleString()}`));
1115
1386
  // Display plan ID if available
1116
- if (response.planId && response.planId !== 'unknown') {
1387
+ if (persistedPlanId) {
1117
1388
  console.log(chalk.bold.cyan(`\n📌 Plan ID: ${response.planId} (Saved)`));
1118
1389
  console.log(chalk.dim(' Run \'neurcode prompt \' to generate a Cursor/AI prompt. (Ready now)'));
1119
1390
  }
1120
1391
  // Save sessionId and planId to state file (.neurcode/config.json)
1121
1392
  try {
1122
- if (response.planId && response.planId !== 'unknown') {
1393
+ if (persistedPlanId) {
1123
1394
  // Save active plan ID (primary) and lastPlanId (backward compatibility)
1124
1395
  (0, state_1.setActivePlanId)(response.planId);
1125
1396
  (0, state_1.setLastPlanGeneratedAt)(new Date().toISOString());
@@ -1135,8 +1406,33 @@ async function planCommand(intent, options) {
1135
1406
  console.warn(chalk.yellow(`⚠️ Could not save sessionId/planId to state: ${stateError instanceof Error ? stateError.message : 'Unknown error'}`));
1136
1407
  }
1137
1408
  }
1409
+ if (options.json) {
1410
+ emitPlanJson({
1411
+ success: true,
1412
+ cached: false,
1413
+ mode: intentMode,
1414
+ planId: response.planId,
1415
+ sessionId: response.sessionId || null,
1416
+ projectId: finalProjectId || null,
1417
+ timestamp: response.timestamp,
1418
+ message: 'Plan generated and persisted',
1419
+ plan: response.plan,
1420
+ });
1421
+ }
1138
1422
  }
1139
1423
  catch (error) {
1424
+ if (options.json) {
1425
+ emitPlanJson({
1426
+ success: false,
1427
+ cached: false,
1428
+ mode: 'implementation',
1429
+ planId: null,
1430
+ sessionId: null,
1431
+ projectId: options.projectId || null,
1432
+ timestamp: new Date().toISOString(),
1433
+ message: error instanceof Error ? error.message : 'Unknown error',
1434
+ });
1435
+ }
1140
1436
  console.error(chalk.red('\n❌ Error generating plan:'));
1141
1437
  if (error instanceof Error) {
1142
1438
  console.error(chalk.red(error.message));