@neurcode-ai/cli 0.9.42 → 0.9.43

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/README.md CHANGED
@@ -17,12 +17,18 @@ neurcode --version
17
17
  neurcode login
18
18
  neurcode init
19
19
 
20
- neurcode plan "Add org-level RBAC"
21
- neurcode policy compile --intent "No auth bypass, no secret literals" --require-deterministic-match
22
- neurcode prompt
20
+ neurcode bootstrap --pack soc2 --auto-detect
21
+ neurcode contract import --provider codex --auto-detect --no-confirm
22
+ neurcode prompt "Implement role-based access control for org members"
23
23
  neurcode verify --record --compiled-policy neurcode.policy.compiled.json --enforce-change-contract --require-signed-artifacts
24
24
  ```
25
25
 
26
+ To preview possible auto-detected plans before import:
27
+
28
+ ```bash
29
+ neurcode contract import --provider codex --auto-detect --list-candidates --json
30
+ ```
31
+
26
32
  ## Read-only Q&A
27
33
 
28
34
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAkBA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA+HD,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6RpF"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAYA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAwDD,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6RpF"}
@@ -1,88 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bootstrapCommand = bootstrapCommand;
4
- const child_process_1 = require("child_process");
5
4
  const fs_1 = require("fs");
6
5
  const project_root_1 = require("../utils/project-root");
7
- let chalk;
8
- try {
9
- chalk = require('chalk');
10
- }
11
- catch {
12
- chalk = {
13
- green: (value) => value,
14
- yellow: (value) => value,
15
- red: (value) => value,
16
- bold: (value) => value,
17
- dim: (value) => value,
18
- cyan: (value) => value,
19
- };
20
- }
21
- function stripAnsi(value) {
22
- return value.replace(/\u001b\[[0-9;]*m/g, '');
23
- }
24
- function extractLastJsonObject(output) {
25
- const clean = stripAnsi(output).trim();
26
- const end = clean.lastIndexOf('}');
27
- if (end === -1)
28
- return null;
29
- for (let start = end; start >= 0; start -= 1) {
30
- if (clean[start] !== '{')
31
- continue;
32
- const candidate = clean.slice(start, end + 1);
33
- try {
34
- const parsed = JSON.parse(candidate);
35
- if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
36
- return parsed;
37
- }
38
- }
39
- catch {
40
- // Keep searching until parseable JSON object is found.
41
- }
42
- }
43
- return null;
44
- }
45
- function asString(record, key) {
46
- if (!record)
47
- return null;
48
- const value = record[key];
49
- return typeof value === 'string' ? value : null;
50
- }
51
- function asNumber(value) {
6
+ const cli_json_1 = require("../utils/cli-json");
7
+ const chalk = (0, cli_json_1.loadChalk)();
8
+ function asNumberValue(value) {
52
9
  return typeof value === 'number' && Number.isFinite(value) ? value : null;
53
10
  }
54
- async function runCliJson(commandArgs, cwd) {
55
- const args = commandArgs.includes('--json') ? [...commandArgs] : [...commandArgs, '--json'];
56
- const stdoutChunks = [];
57
- const stderrChunks = [];
58
- const exitCode = await new Promise((resolvePromise, reject) => {
59
- const child = (0, child_process_1.spawn)(process.execPath, [process.argv[1], ...args], {
60
- cwd,
61
- env: {
62
- ...process.env,
63
- CI: process.env.CI || 'true',
64
- FORCE_COLOR: '0',
65
- },
66
- stdio: ['pipe', 'pipe', 'pipe'],
67
- });
68
- child.stdout.on('data', (chunk) => stdoutChunks.push(String(chunk)));
69
- child.stderr.on('data', (chunk) => stderrChunks.push(String(chunk)));
70
- child.on('error', (error) => reject(error));
71
- child.on('close', (code) => resolvePromise(typeof code === 'number' ? code : 1));
72
- });
73
- const stdout = stdoutChunks.join('');
74
- const stderr = stderrChunks.join('');
75
- const payload = extractLastJsonObject(`${stdout}\n${stderr}`);
76
- return {
77
- exitCode,
78
- stdout,
79
- stderr,
80
- payload,
81
- command: args,
82
- };
83
- }
84
11
  function emitJson(payload) {
85
- console.log(JSON.stringify(payload, null, 2));
12
+ (0, cli_json_1.emitJson)(payload);
86
13
  }
87
14
  function hasPlanImportInput(options) {
88
15
  return Boolean((options.planInput && options.planInput.trim())
@@ -93,7 +20,7 @@ function hasExistingChangeContract(projectRoot) {
93
20
  return (0, fs_1.existsSync)(`${projectRoot}/.neurcode/change-contract.json`);
94
21
  }
95
22
  function shouldFallbackToAdvisory(result) {
96
- const message = (asString(result.payload, 'message')
23
+ const message = ((0, cli_json_1.asString)(result.payload, 'message')
97
24
  || result.stderr
98
25
  || result.stdout
99
26
  || '').toLowerCase();
@@ -128,14 +55,14 @@ async function bootstrapCommand(options = {}) {
128
55
  if (options.requireDashboard === true) {
129
56
  policyArgs.push('--require-dashboard');
130
57
  }
131
- const policyRun = await runCliJson(policyArgs, projectRoot);
58
+ const policyRun = await (0, cli_json_1.runCliJson)(policyArgs, { cwd: projectRoot });
132
59
  if (policyRun.exitCode !== 0) {
133
60
  stages.push({
134
61
  stage: 'policy_bootstrap',
135
62
  status: 'failed',
136
63
  command: policyRun.command,
137
64
  exitCode: policyRun.exitCode,
138
- message: asString(policyRun.payload, 'error') || 'Policy bootstrap failed.',
65
+ message: (0, cli_json_1.asString)(policyRun.payload, 'error') || 'Policy bootstrap failed.',
139
66
  payload: policyRun.payload,
140
67
  });
141
68
  const output = {
@@ -168,7 +95,7 @@ async function bootstrapCommand(options = {}) {
168
95
  const bootstrapMeta = policyRun.payload && typeof policyRun.payload === 'object'
169
96
  ? policyRun.payload.bootstrap
170
97
  : undefined;
171
- const deterministicRuleCount = asNumber(bootstrapMeta?.deterministicRuleCount);
98
+ const deterministicRuleCount = asNumberValue(bootstrapMeta?.deterministicRuleCount);
172
99
  const unmatchedStatements = Array.isArray(bootstrapMeta?.unmatchedStatements)
173
100
  ? bootstrapMeta.unmatchedStatements.length
174
101
  : 0;
@@ -197,14 +124,14 @@ async function bootstrapCommand(options = {}) {
197
124
  else if (options.planStdin === true) {
198
125
  contractArgs.push('--stdin');
199
126
  }
200
- const contractRun = await runCliJson(contractArgs, projectRoot);
127
+ const contractRun = await (0, cli_json_1.runCliJson)(contractArgs, { cwd: projectRoot });
201
128
  if (contractRun.exitCode !== 0) {
202
129
  stages.push({
203
130
  stage: 'contract_import',
204
131
  status: 'failed',
205
132
  command: contractRun.command,
206
133
  exitCode: contractRun.exitCode,
207
- message: asString(contractRun.payload, 'message') || 'Contract import failed.',
134
+ message: (0, cli_json_1.asString)(contractRun.payload, 'message') || 'Contract import failed.',
208
135
  payload: contractRun.payload,
209
136
  });
210
137
  const output = {
@@ -226,7 +153,7 @@ async function bootstrapCommand(options = {}) {
226
153
  }
227
154
  process.exit(1);
228
155
  }
229
- planIdFromContract = asString(contractRun.payload, 'planId');
156
+ planIdFromContract = (0, cli_json_1.asString)(contractRun.payload, 'planId');
230
157
  stages.push({
231
158
  stage: 'contract_import',
232
159
  status: 'success',
@@ -272,7 +199,7 @@ async function bootstrapCommand(options = {}) {
272
199
  if (planIdFromContract) {
273
200
  guardArgs.push('--plan-id', planIdFromContract);
274
201
  }
275
- const guardRun = await runCliJson(guardArgs, projectRoot);
202
+ const guardRun = await (0, cli_json_1.runCliJson)(guardArgs, { cwd: projectRoot });
276
203
  if (guardRun.exitCode === 0) {
277
204
  stages.push({
278
205
  stage: 'guard_start',
@@ -286,7 +213,7 @@ async function bootstrapCommand(options = {}) {
286
213
  });
287
214
  }
288
215
  else if (strictGuard && allowAdvisoryFallback && shouldFallbackToAdvisory(guardRun)) {
289
- const advisoryRun = await runCliJson(['guard', 'start', '--no-strict'], projectRoot);
216
+ const advisoryRun = await (0, cli_json_1.runCliJson)(['guard', 'start', '--no-strict'], { cwd: projectRoot });
290
217
  if (advisoryRun.exitCode === 0) {
291
218
  finalMode = 'advisory';
292
219
  stages.push({
@@ -305,8 +232,8 @@ async function bootstrapCommand(options = {}) {
305
232
  status: 'failed',
306
233
  command: advisoryRun.command,
307
234
  exitCode: advisoryRun.exitCode,
308
- message: asString(advisoryRun.payload, 'message')
309
- || asString(guardRun.payload, 'message')
235
+ message: (0, cli_json_1.asString)(advisoryRun.payload, 'message')
236
+ || (0, cli_json_1.asString)(guardRun.payload, 'message')
310
237
  || 'Runtime guard start failed.',
311
238
  payload: advisoryRun.payload || guardRun.payload,
312
239
  });
@@ -318,7 +245,7 @@ async function bootstrapCommand(options = {}) {
318
245
  status: 'failed',
319
246
  command: guardRun.command,
320
247
  exitCode: guardRun.exitCode,
321
- message: asString(guardRun.payload, 'message') || 'Runtime guard start failed.',
248
+ message: (0, cli_json_1.asString)(guardRun.payload, 'message') || 'Runtime guard start failed.',
322
249
  payload: guardRun.payload,
323
250
  });
324
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkRpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiJtD"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6apC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6MtD"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.contractCommand = contractCommand;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
+ const readline_1 = require("readline");
6
7
  const api_client_1 = require("../api-client");
7
8
  const config_1 = require("../config");
8
9
  const project_root_1 = require("../utils/project-root");
@@ -59,6 +60,19 @@ function parseAsJsonIfPossible(raw) {
59
60
  function normalizeProvider(provider) {
60
61
  return String(provider || 'generic').trim().toLowerCase();
61
62
  }
63
+ function normalizeCandidateLimit(value) {
64
+ if (!Number.isFinite(value))
65
+ return 8;
66
+ const rounded = Math.trunc(value);
67
+ if (rounded < 1)
68
+ return 1;
69
+ if (rounded > 30)
70
+ return 30;
71
+ return rounded;
72
+ }
73
+ function isInteractiveTerminal() {
74
+ return process.stdin.isTTY && process.stdout.isTTY && process.env.CI !== 'true';
75
+ }
62
76
  function listFilesRecursively(dirPath, maxDepth = 4, maxFiles = 240) {
63
77
  const files = [];
64
78
  const walk = (current, depth) => {
@@ -102,15 +116,7 @@ function isCandidatePlanFile(filePath) {
102
116
  || normalized.includes('contract')
103
117
  || normalized.includes('prompt'));
104
118
  }
105
- function fileRecencyScore(filePath) {
106
- try {
107
- return (0, fs_1.statSync)(filePath).mtimeMs || 0;
108
- }
109
- catch {
110
- return 0;
111
- }
112
- }
113
- function discoverAgentPlanFile(projectRoot, options) {
119
+ function resolveAutoDetectRoots(projectRoot, options) {
114
120
  const provider = normalizeProvider(options.provider);
115
121
  const explicitPath = options.agentPath?.trim();
116
122
  const explicitRoots = explicitPath ? [(0, path_1.resolve)(projectRoot, explicitPath)] : [];
@@ -121,9 +127,18 @@ function discoverAgentPlanFile(projectRoot, options) {
121
127
  chatgpt: ['.chatgpt', '.openai', '.neurcode/import'],
122
128
  generic: ['.neurcode/import', '.claude/plans', '.cursor/plans', '.codex/plans'],
123
129
  };
130
+ if (explicitRoots.length > 0 && !(0, fs_1.existsSync)(explicitRoots[0])) {
131
+ throw new Error(`--agent-path does not exist: ${explicitRoots[0]}`);
132
+ }
124
133
  const defaultRoots = providerRoots[provider] || providerRoots.generic;
125
- const roots = [...explicitRoots, ...defaultRoots.map((entry) => (0, path_1.resolve)(projectRoot, entry))];
134
+ return explicitRoots.length > 0
135
+ ? explicitRoots
136
+ : defaultRoots.map((entry) => (0, path_1.resolve)(projectRoot, entry));
137
+ }
138
+ function discoverAgentPlanCandidates(projectRoot, options) {
139
+ const roots = resolveAutoDetectRoots(projectRoot, options);
126
140
  const candidates = [];
141
+ const dedupe = new Set();
127
142
  for (const root of roots) {
128
143
  if (!(0, fs_1.existsSync)(root)) {
129
144
  continue;
@@ -131,27 +146,91 @@ function discoverAgentPlanFile(projectRoot, options) {
131
146
  try {
132
147
  const stat = (0, fs_1.statSync)(root);
133
148
  if (stat.isFile()) {
134
- if (isCandidatePlanFile(root)) {
135
- candidates.push(root);
149
+ if (isCandidatePlanFile(root) && !dedupe.has(root)) {
150
+ dedupe.add(root);
151
+ candidates.push({
152
+ path: root,
153
+ mtimeMs: stat.mtimeMs || 0,
154
+ sizeBytes: stat.size || 0,
155
+ });
136
156
  }
137
157
  continue;
138
158
  }
139
159
  const discovered = listFilesRecursively(root);
140
160
  for (const file of discovered) {
141
- if (isCandidatePlanFile(file)) {
142
- candidates.push(file);
161
+ if (!isCandidatePlanFile(file) || dedupe.has(file)) {
162
+ continue;
143
163
  }
164
+ dedupe.add(file);
165
+ const fileStat = (0, fs_1.statSync)(file);
166
+ candidates.push({
167
+ path: file,
168
+ mtimeMs: fileStat.mtimeMs || 0,
169
+ sizeBytes: fileStat.size || 0,
170
+ });
144
171
  }
145
172
  }
146
173
  catch {
147
174
  // Continue scanning remaining roots.
148
175
  }
149
176
  }
177
+ candidates.sort((left, right) => right.mtimeMs - left.mtimeMs);
178
+ return candidates;
179
+ }
180
+ function formatAutoDetectCandidates(projectRoot, candidates) {
181
+ return candidates.map((candidate) => ({
182
+ path: candidate.path,
183
+ relativePath: (0, path_1.relative)(projectRoot, candidate.path) || candidate.path,
184
+ modifiedAt: new Date(candidate.mtimeMs).toISOString(),
185
+ sizeBytes: candidate.sizeBytes,
186
+ }));
187
+ }
188
+ function askQuestion(question) {
189
+ return new Promise((resolvePromise) => {
190
+ const rl = (0, readline_1.createInterface)({
191
+ input: process.stdin,
192
+ output: process.stdout,
193
+ });
194
+ rl.question(question, (answer) => {
195
+ rl.close();
196
+ resolvePromise(String(answer || '').trim());
197
+ });
198
+ });
199
+ }
200
+ async function confirmAutoDetectedCandidate(projectRoot, candidates) {
150
201
  if (candidates.length === 0) {
151
- return null;
202
+ throw new Error('No plan candidates available for confirmation.');
203
+ }
204
+ console.log(chalk.bold.cyan('\n🧭 Auto-detected plan candidates'));
205
+ candidates.forEach((candidate, idx) => {
206
+ const rel = (0, path_1.relative)(projectRoot, candidate.path) || candidate.path;
207
+ const modified = new Date(candidate.mtimeMs).toLocaleString();
208
+ console.log(chalk.dim(` ${idx + 1}. ${rel} (${modified}, ${candidate.sizeBytes} bytes)`));
209
+ });
210
+ console.log('');
211
+ const selectionAnswer = await askQuestion(`Select candidate [1-${candidates.length}] (default: 1, q to cancel): `);
212
+ if (/^q(?:uit)?$/i.test(selectionAnswer)) {
213
+ throw new Error('Auto-detect selection cancelled by user.');
214
+ }
215
+ let selectedRank = 1;
216
+ if (selectionAnswer) {
217
+ const parsed = Number.parseInt(selectionAnswer, 10);
218
+ if (!Number.isFinite(parsed) || parsed < 1 || parsed > candidates.length) {
219
+ throw new Error(`Invalid selection "${selectionAnswer}". Expected a value between 1 and ${candidates.length}.`);
220
+ }
221
+ selectedRank = parsed;
152
222
  }
153
- candidates.sort((left, right) => fileRecencyScore(right) - fileRecencyScore(left));
154
- return candidates[0] || null;
223
+ const selected = candidates[selectedRank - 1];
224
+ const selectedRel = (0, path_1.relative)(projectRoot, selected.path) || selected.path;
225
+ const confirmAnswer = await askQuestion(`Use "${selectedRel}" for contract import? [Y/n]: `);
226
+ if (confirmAnswer && !/^y(?:es)?$/i.test(confirmAnswer)) {
227
+ throw new Error('Auto-detect confirmation denied by user.');
228
+ }
229
+ return {
230
+ selected,
231
+ selectedRank,
232
+ confirmed: true,
233
+ };
155
234
  }
156
235
  async function resolveImportPayload(projectRoot, options) {
157
236
  if (options.text && options.text.trim()) {
@@ -171,27 +250,54 @@ async function resolveImportPayload(projectRoot, options) {
171
250
  return {
172
251
  source: 'file',
173
252
  planJson: parsed,
253
+ sourcePath: inputPath,
174
254
  };
175
255
  }
176
256
  return {
177
257
  source: 'file',
178
258
  planText: raw,
259
+ sourcePath: inputPath,
179
260
  };
180
261
  }
181
262
  if (options.autoDetect || (options.agentPath && options.agentPath.trim())) {
182
- const detectedFile = discoverAgentPlanFile(projectRoot, options);
183
- if (detectedFile) {
184
- const raw = (0, fs_1.readFileSync)(detectedFile, 'utf-8');
263
+ const candidateLimit = normalizeCandidateLimit(options.maxCandidates);
264
+ const discovered = discoverAgentPlanCandidates(projectRoot, options);
265
+ if (discovered.length > 0) {
266
+ const topCandidates = discovered.slice(0, candidateLimit);
267
+ const shouldConfirm = options.confirm !== false && !options.json && isInteractiveTerminal();
268
+ let selected = topCandidates[0];
269
+ let selectedRank = 1;
270
+ let confirmed = !shouldConfirm;
271
+ if (shouldConfirm) {
272
+ const confirmation = await confirmAutoDetectedCandidate(projectRoot, topCandidates);
273
+ selected = confirmation.selected;
274
+ selectedRank = confirmation.selectedRank;
275
+ confirmed = confirmation.confirmed;
276
+ }
277
+ const raw = (0, fs_1.readFileSync)(selected.path, 'utf-8');
278
+ const autoDetectMetadata = {
279
+ provider: normalizeProvider(options.provider),
280
+ candidateCount: discovered.length,
281
+ selectedPath: selected.path,
282
+ selectedRank,
283
+ confirmRequired: shouldConfirm,
284
+ confirmed,
285
+ candidates: formatAutoDetectCandidates(projectRoot, topCandidates),
286
+ };
185
287
  const parsed = parseAsJsonIfPossible(raw);
186
288
  if (parsed !== null) {
187
289
  return {
188
290
  source: 'agent_auto',
189
291
  planJson: parsed,
292
+ sourcePath: selected.path,
293
+ autoDetect: autoDetectMetadata,
190
294
  };
191
295
  }
192
296
  return {
193
297
  source: 'agent_auto',
194
298
  planText: raw,
299
+ sourcePath: selected.path,
300
+ autoDetect: autoDetectMetadata,
195
301
  };
196
302
  }
197
303
  if (options.autoDetect || (options.agentPath && options.agentPath.trim())) {
@@ -234,12 +340,46 @@ function contractCommand(program) {
234
340
  .option('--stdin', 'Read plan payload from stdin')
235
341
  .option('--auto-detect', 'Auto-detect latest plan artifact from local AI assistant directories')
236
342
  .option('--agent-path <path>', 'Optional file/dir override when using --auto-detect')
343
+ .option('--no-confirm', 'Skip interactive confirmation for auto-detected plan selection')
344
+ .option('--list-candidates', 'List auto-detected candidate plan files and exit without importing')
345
+ .option('--max-candidates <n>', 'Max auto-detect candidates to inspect/report (default: 8)', (value) => parseInt(value, 10))
237
346
  .option('--no-write-change-contract', 'Skip writing .neurcode/change-contract.json')
238
347
  .option('--json', 'Output machine-readable JSON')
239
348
  .action(async (options) => {
240
349
  const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
241
350
  const startedAt = Date.now();
242
351
  try {
352
+ if (options.listCandidates) {
353
+ const candidateLimit = normalizeCandidateLimit(options.maxCandidates);
354
+ const discovered = discoverAgentPlanCandidates(projectRoot, options);
355
+ const candidates = formatAutoDetectCandidates(projectRoot, discovered.slice(0, candidateLimit));
356
+ const payload = {
357
+ success: true,
358
+ mode: 'candidate_list',
359
+ provider: normalizeProvider(options.provider),
360
+ candidateCount: discovered.length,
361
+ candidates,
362
+ message: discovered.length > 0
363
+ ? 'Auto-detect candidates resolved.'
364
+ : 'No auto-detect candidates found. Provide --input or use --agent-path.',
365
+ timestamp: new Date().toISOString(),
366
+ };
367
+ if (options.json) {
368
+ console.log(JSON.stringify(payload, null, 2));
369
+ }
370
+ else if (candidates.length === 0) {
371
+ console.log(chalk.yellow('\n⚠️ No auto-detect plan candidates found.\n'));
372
+ }
373
+ else {
374
+ console.log(chalk.bold.cyan('\n🧭 Auto-detect plan candidates\n'));
375
+ candidates.forEach((candidate, idx) => {
376
+ console.log(chalk.dim(` ${idx + 1}. ${candidate.relativePath}`));
377
+ console.log(chalk.dim(` modified: ${candidate.modifiedAt} | size: ${candidate.sizeBytes} bytes`));
378
+ });
379
+ console.log('');
380
+ }
381
+ return;
382
+ }
243
383
  const config = (0, config_1.loadConfig)();
244
384
  if (!config.apiKey) {
245
385
  config.apiKey = (0, config_1.requireApiKey)();
@@ -293,6 +433,8 @@ function contractCommand(program) {
293
433
  projectId: options.projectId || null,
294
434
  parseMode: response.parseMode,
295
435
  importedFiles: response.importedFiles,
436
+ sourcePath: payload.sourcePath || null,
437
+ autoDetect: payload.autoDetect || null,
296
438
  warnings: response.warnings || [],
297
439
  changeContract: changeContractPayload,
298
440
  message: response.message,
@@ -304,6 +446,19 @@ function contractCommand(program) {
304
446
  console.log(chalk.bold.cyan('\n📥 Neurcode Contract Import\n'));
305
447
  if (payload.source === 'agent_auto') {
306
448
  console.log(chalk.dim('Import source: auto-detected agent artifact'));
449
+ if (payload.sourcePath) {
450
+ console.log(chalk.dim(`Detected file: ${payload.sourcePath}`));
451
+ }
452
+ if (payload.autoDetect) {
453
+ console.log(chalk.dim(`Candidates scanned: ${payload.autoDetect.candidateCount} ` +
454
+ `(showing top ${payload.autoDetect.candidates.length})`));
455
+ if (payload.autoDetect.confirmRequired) {
456
+ console.log(chalk.dim(`Selection confirmed: ${payload.autoDetect.confirmed ? 'yes' : 'no'}`));
457
+ }
458
+ }
459
+ }
460
+ else if (payload.source === 'file' && payload.sourcePath) {
461
+ console.log(chalk.dim(`Import source file: ${payload.sourcePath}`));
307
462
  }
308
463
  console.log(chalk.dim(`Provider: ${response.provider}`));
309
464
  console.log(chalk.dim(`Parse mode: ${response.parseMode}`));
@@ -338,6 +493,8 @@ function contractCommand(program) {
338
493
  projectId: options.projectId || null,
339
494
  parseMode: null,
340
495
  importedFiles: 0,
496
+ sourcePath: null,
497
+ autoDetect: null,
341
498
  warnings: [],
342
499
  changeContract: null,
343
500
  message,
@@ -350,6 +507,8 @@ function contractCommand(program) {
350
507
  console.log(chalk.dim('Examples:'));
351
508
  console.log(chalk.dim(' neurcode contract import --provider claude --input ./plan.md'));
352
509
  console.log(chalk.dim(' neurcode contract import --provider claude --auto-detect'));
510
+ console.log(chalk.dim(' neurcode contract import --provider codex --auto-detect --list-candidates'));
511
+ console.log(chalk.dim(' neurcode contract import --provider codex --auto-detect --no-confirm'));
353
512
  console.log(chalk.dim(' cat plan.json | neurcode contract import --provider cursor --stdin\n'));
354
513
  process.exit(1);
355
514
  }