specrails-core 4.5.0 → 4.6.3
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/bin/specrails-core.mjs +7 -0
- package/bin/tui-installer.mjs +96 -33
- package/dist/installer/commands/init.js +3 -7
- package/dist/installer/commands/init.js.map +1 -1
- package/dist/installer/phases/install-config.js +2 -5
- package/dist/installer/phases/install-config.js.map +1 -1
- package/dist/installer/phases/provider-detect.js +10 -11
- package/dist/installer/phases/provider-detect.js.map +1 -1
- package/dist/installer/phases/scaffold.js +419 -21
- package/dist/installer/phases/scaffold.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/sr-architect.md +25 -2
- package/templates/agents/sr-developer.md +30 -1
- package/templates/agents/sr-reviewer.md +20 -0
- package/templates/codex-skills/batch-implement/SKILL.md +268 -0
- package/templates/codex-skills/enrich/SKILL.md +191 -0
- package/templates/codex-skills/implement/SKILL.md +349 -0
- package/templates/codex-skills/merge-resolve/SKILL.md +88 -0
- package/templates/codex-skills/rails/sr-architect/SKILL.md +254 -0
- package/templates/codex-skills/rails/sr-backend-developer/SKILL.md +90 -0
- package/templates/codex-skills/rails/sr-backend-reviewer/SKILL.md +120 -0
- package/templates/codex-skills/rails/sr-developer/SKILL.md +163 -0
- package/templates/codex-skills/rails/sr-doc-sync/SKILL.md +123 -0
- package/templates/codex-skills/rails/sr-frontend-developer/SKILL.md +103 -0
- package/templates/codex-skills/rails/sr-frontend-reviewer/SKILL.md +111 -0
- package/templates/codex-skills/rails/sr-merge-resolver/SKILL.md +156 -0
- package/templates/codex-skills/rails/sr-performance-reviewer/SKILL.md +109 -0
- package/templates/codex-skills/rails/sr-product-analyst/SKILL.md +85 -0
- package/templates/codex-skills/rails/sr-product-manager/SKILL.md +129 -0
- package/templates/codex-skills/rails/sr-reviewer/SKILL.md +188 -0
- package/templates/codex-skills/rails/sr-security-reviewer/SKILL.md +121 -0
- package/templates/codex-skills/rails/sr-test-writer/SKILL.md +115 -0
- package/templates/codex-skills/retry/SKILL.md +117 -0
- package/templates/commands/specrails/implement.md +3 -3
- package/templates/settings/codex-config.toml +15 -10
- package/templates/skills/rails/sr-architect/SKILL.md +234 -0
- package/templates/skills/rails/sr-developer/SKILL.md +210 -0
- package/templates/skills/rails/sr-merge-resolver/SKILL.md +197 -0
- package/templates/skills/rails/sr-reviewer/SKILL.md +320 -0
- package/templates/settings/codex-rules.star +0 -12
package/bin/specrails-core.mjs
CHANGED
|
@@ -133,7 +133,14 @@ if (subcommand === 'init') {
|
|
|
133
133
|
? path.resolve(subargs[rootDirIdx + 1])
|
|
134
134
|
: process.cwd()
|
|
135
135
|
|
|
136
|
+
// Forward --provider so the TUI can honour an explicit choice and
|
|
137
|
+
// skip the interactive picker. Other flags stay with the Node CLI step.
|
|
138
|
+
const providerIdx = subargs.indexOf('--provider')
|
|
139
|
+
const providerVal = providerIdx >= 0 ? subargs[providerIdx + 1] : null
|
|
140
|
+
const providerEqArg = subargs.find((a) => a.startsWith('--provider='))
|
|
136
141
|
const tuiArgs = [path.resolve(ROOT, 'bin', 'tui-installer.mjs'), rootDir]
|
|
142
|
+
if (providerVal) tuiArgs.push('--provider', providerVal)
|
|
143
|
+
else if (providerEqArg) tuiArgs.push(providerEqArg)
|
|
137
144
|
const tuiResult = spawnSync('node', tuiArgs, {
|
|
138
145
|
stdio: 'inherit',
|
|
139
146
|
cwd: process.cwd(),
|
package/bin/tui-installer.mjs
CHANGED
|
@@ -55,19 +55,19 @@ const AGENTS = [
|
|
|
55
55
|
|
|
56
56
|
const ALL_AGENT_IDS = AGENTS.map(a => a.id);
|
|
57
57
|
|
|
58
|
-
// Core agents
|
|
59
|
-
//
|
|
58
|
+
// Core agents — the three that every install requires. The implement
|
|
59
|
+
// pipeline depends on exactly these three. All other agents (including
|
|
60
|
+
// sr-merge-resolver) are optional add-ons selected by the user.
|
|
60
61
|
const CORE_AGENTS = new Set([
|
|
61
62
|
'sr-architect',
|
|
62
63
|
'sr-developer',
|
|
63
64
|
'sr-reviewer',
|
|
64
|
-
'sr-merge-resolver',
|
|
65
65
|
]);
|
|
66
66
|
|
|
67
|
-
// Only the CORE agents are pre-selected. Optional agents (
|
|
68
|
-
// test writer, layer specialists, reviewers, utilities) are
|
|
69
|
-
// default install is as lean as possible. Users can add optional
|
|
70
|
-
// `/specrails:enrich` or by re-running init.
|
|
67
|
+
// Only the three CORE agents are pre-selected. Optional agents (sr-merge-resolver,
|
|
68
|
+
// product manager, test writer, layer specialists, reviewers, utilities) are
|
|
69
|
+
// opt-in so the default install is as lean as possible. Users can add optional
|
|
70
|
+
// agents via `/specrails:enrich` or by re-running init.
|
|
71
71
|
const DEFAULT_SELECTED = new Set([
|
|
72
72
|
...CORE_AGENTS,
|
|
73
73
|
]);
|
|
@@ -102,6 +102,25 @@ function detectProvider() {
|
|
|
102
102
|
return { hasClaude, hasCodex };
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
// Parse `--provider <id>` or `--provider=<id>` from process.argv. Returns
|
|
106
|
+
// 'claude' | 'codex' | null. Unknown values warn-then-null so the TUI
|
|
107
|
+
// falls back to interactive selection.
|
|
108
|
+
function parseProviderArg() {
|
|
109
|
+
const args = process.argv.slice(2);
|
|
110
|
+
for (let i = 0; i < args.length; i++) {
|
|
111
|
+
const a = args[i];
|
|
112
|
+
if (a === '--provider' && args[i + 1]) {
|
|
113
|
+
const v = args[i + 1].trim().toLowerCase();
|
|
114
|
+
return v === 'claude' || v === 'codex' ? v : null;
|
|
115
|
+
}
|
|
116
|
+
if (a.startsWith('--provider=')) {
|
|
117
|
+
const v = a.slice('--provider='.length).trim().toLowerCase();
|
|
118
|
+
return v === 'claude' || v === 'codex' ? v : null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
|
|
105
124
|
function detectGitRoot(dir) {
|
|
106
125
|
try {
|
|
107
126
|
return execSync('git rev-parse --show-toplevel', { cwd: dir, stdio: ['ignore', 'pipe', 'ignore'] })
|
|
@@ -181,9 +200,27 @@ async function run() {
|
|
|
181
200
|
const rawArgs = process.argv.slice(2);
|
|
182
201
|
const autoYes = rawArgs.includes('--yes') || rawArgs.includes('-y');
|
|
183
202
|
const withProfiles = rawArgs.includes('--with-profiles');
|
|
184
|
-
|
|
203
|
+
// First positional arg (skipping flag values that follow `--provider`,
|
|
204
|
+
// `--root-dir`, etc.) is the target directory.
|
|
205
|
+
const FLAGS_WITH_VALUES = new Set(['--provider', '--root-dir', '--from-config']);
|
|
206
|
+
let rootArg;
|
|
207
|
+
for (let i = 0; i < rawArgs.length; i++) {
|
|
208
|
+
const a = rawArgs[i];
|
|
209
|
+
if (a.startsWith('-')) {
|
|
210
|
+
if (FLAGS_WITH_VALUES.has(a)) i++; // skip its value
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
rootArg = a;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
185
216
|
const inputDir = rootArg ? resolve(rootArg) : process.cwd();
|
|
186
|
-
|
|
217
|
+
// Use inputDir directly — matches the Node CLI step that reads back
|
|
218
|
+
// install-config.yaml from `<inputDir>/.specrails/`. We deliberately do
|
|
219
|
+
// NOT walk up to a git root here: if the user wants the install to land
|
|
220
|
+
// at a git ancestor, they can pass `--root-dir <path>` explicitly, and
|
|
221
|
+
// the Node CLI will honour the same path. Otherwise TUI + Node CLI must
|
|
222
|
+
// agree on the same directory or the config gets stranded.
|
|
223
|
+
const rootDir = inputDir;
|
|
187
224
|
|
|
188
225
|
const specrailsDir = resolve(rootDir, '.specrails');
|
|
189
226
|
|
|
@@ -211,19 +248,40 @@ async function run() {
|
|
|
211
248
|
|
|
212
249
|
// Auto-yes: write defaults and exit (no TUI needed)
|
|
213
250
|
//
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
// Code is the only runtime we can install for today.
|
|
251
|
+
// Honours an explicit --provider <id> argv flag when present; otherwise
|
|
252
|
+
// picks claude → codex → first-detected. Errors only when none detected.
|
|
217
253
|
if (autoYes) {
|
|
218
254
|
const { hasClaude, hasCodex } = detectProvider();
|
|
219
|
-
|
|
255
|
+
const argvProvider = parseProviderArg();
|
|
256
|
+
let provider;
|
|
257
|
+
if (argvProvider) {
|
|
258
|
+
if (argvProvider === 'claude' && !hasClaude) {
|
|
259
|
+
console.error('');
|
|
260
|
+
console.error(' ⚠ --provider claude requested but Claude Code is not installed.');
|
|
261
|
+
console.error(' Install: https://claude.ai/download');
|
|
262
|
+
console.error('');
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
if (argvProvider === 'codex' && !hasCodex) {
|
|
266
|
+
console.error('');
|
|
267
|
+
console.error(' ⚠ --provider codex requested but Codex CLI is not installed.');
|
|
268
|
+
console.error(' Install: https://developers.openai.com/codex');
|
|
269
|
+
console.error('');
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
provider = argvProvider;
|
|
273
|
+
} else if (hasClaude) {
|
|
274
|
+
provider = 'claude';
|
|
275
|
+
} else if (hasCodex) {
|
|
276
|
+
provider = 'codex';
|
|
277
|
+
} else {
|
|
220
278
|
console.error('');
|
|
221
|
-
console.error(' ⚠
|
|
222
|
-
console.error('
|
|
279
|
+
console.error(' ⚠ Neither Claude Code nor Codex CLI detected on PATH.');
|
|
280
|
+
console.error(' Install Claude: https://claude.ai/download');
|
|
281
|
+
console.error(' Install Codex: https://developers.openai.com/codex');
|
|
223
282
|
console.error('');
|
|
224
283
|
process.exit(1);
|
|
225
284
|
}
|
|
226
|
-
const provider = 'claude';
|
|
227
285
|
writeDefaultConfig(specrailsDir, provider);
|
|
228
286
|
console.log(` ✓ Default config written to .specrails/install-config.yaml`);
|
|
229
287
|
console.log(` ✓ Provider: ${provider}, Tier: full, Agents: ${DEFAULT_SELECTED.size}/${ALL_AGENT_IDS.length}, Preset: balanced\n`);
|
|
@@ -253,36 +311,41 @@ async function run() {
|
|
|
253
311
|
console.log(banner.join('\n'));
|
|
254
312
|
|
|
255
313
|
// ── Step 1: Provider ────────────────────────────────────────────────────────
|
|
256
|
-
//
|
|
257
|
-
// Codex (OpenAI) is still being tested in our lab ("Coming Soon"). Until the
|
|
258
|
-
// feature ships, the TUI exposes only Claude Code as a runtime — Codex shows
|
|
259
|
-
// as a disabled "Coming Soon" option so users can see it's on the roadmap.
|
|
260
314
|
|
|
261
315
|
const { hasClaude, hasCodex } = detectProvider();
|
|
316
|
+
const argvProvider = parseProviderArg();
|
|
262
317
|
let provider;
|
|
263
318
|
|
|
264
|
-
if (
|
|
319
|
+
if (argvProvider) {
|
|
320
|
+
if (argvProvider === 'claude' && !hasClaude) {
|
|
321
|
+
exitFullscreen();
|
|
322
|
+
console.error('\n ⚠ --provider claude requested but Claude Code is not installed.\n Install: https://claude.ai/download\n');
|
|
323
|
+
process.exit(1);
|
|
324
|
+
}
|
|
325
|
+
if (argvProvider === 'codex' && !hasCodex) {
|
|
326
|
+
exitFullscreen();
|
|
327
|
+
console.error('\n ⚠ --provider codex requested but Codex CLI is not installed.\n Install: https://developers.openai.com/codex\n');
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
provider = argvProvider;
|
|
331
|
+
console.log(` → Provider: ${provider} (from --provider flag)\n`);
|
|
332
|
+
} else if (hasClaude && hasCodex) {
|
|
265
333
|
provider = await select({
|
|
266
334
|
message: 'Which AI provider will you use?',
|
|
267
335
|
choices: [
|
|
268
336
|
{ value: 'claude', name: 'Claude Code (recommended)' },
|
|
269
|
-
{ value: 'codex', name: 'Codex
|
|
337
|
+
{ value: 'codex', name: 'Codex (OpenAI)' },
|
|
270
338
|
],
|
|
271
339
|
});
|
|
272
340
|
} else if (hasCodex) {
|
|
273
|
-
|
|
274
|
-
console.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
console.
|
|
278
|
-
process.exit(1);
|
|
341
|
+
provider = 'codex';
|
|
342
|
+
console.log(' → Provider: codex (auto-detected — Claude Code not found)\n');
|
|
343
|
+
} else if (hasClaude) {
|
|
344
|
+
provider = 'claude';
|
|
345
|
+
console.log(' → Provider: claude (auto-detected)\n');
|
|
279
346
|
} else {
|
|
280
347
|
provider = 'claude';
|
|
281
|
-
|
|
282
|
-
console.log(' → Provider: claude (auto-detected)\n');
|
|
283
|
-
} else {
|
|
284
|
-
console.log(' → Provider: claude (default — claude CLI not found, install it at claude.ai/download)\n');
|
|
285
|
-
}
|
|
348
|
+
console.log(' → Provider: claude (default — neither claude nor codex CLI found)\n');
|
|
286
349
|
}
|
|
287
350
|
|
|
288
351
|
// ── Step 2: Installation tier ───────────────────────────────────────────────
|
|
@@ -43,14 +43,10 @@ export async function runInit(flags) {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
else if (typeof flags.provider === 'string') {
|
|
46
|
-
if (flags.provider
|
|
47
|
-
throw new InstallerError(
|
|
48
|
-
'Use --provider claude for now.', 40);
|
|
46
|
+
if (flags.provider !== 'claude' && flags.provider !== 'codex') {
|
|
47
|
+
throw new InstallerError(`--provider value must be 'claude' or 'codex', got: ${flags.provider}`, 40);
|
|
49
48
|
}
|
|
50
|
-
|
|
51
|
-
throw new InstallerError(`--provider value must be 'claude', got: ${flags.provider}`, 40);
|
|
52
|
-
}
|
|
53
|
-
providerHint = 'claude';
|
|
49
|
+
providerHint = flags.provider;
|
|
54
50
|
}
|
|
55
51
|
if (flags.quick === true) {
|
|
56
52
|
tierHint = 'quick';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/installer/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAGL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAgC5D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAgB;IAC5C,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC3B,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC1E,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,CAAA;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAA;IAE9D,+DAA+D;IAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;IAC3C,IAAI,YAAkC,CAAA;IACtC,IAAI,QAA0B,CAAA;IAC9B,IAAI,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAClD,IAAI,kBAAwC,CAAA;IAE5C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;QACpF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC9B,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;YACtB,IAAI,MAAM,CAAC,WAAW;gBAAE,cAAc,GAAG,IAAI,CAAA;YAC7C,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAA;YAC3C,IAAI,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,oCAAoC,QAAQ,mCAAmC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/installer/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,11 +57,8 @@ export function validateInstallConfig(raw) {
|
|
|
57
57
|
if (doc.provider === undefined) {
|
|
58
58
|
errors.push(`missing required 'provider' field`);
|
|
59
59
|
}
|
|
60
|
-
else if (doc.provider
|
|
61
|
-
errors.push(`
|
|
62
|
-
}
|
|
63
|
-
else if (doc.provider !== 'claude') {
|
|
64
|
-
errors.push(`unsupported provider '${String(doc.provider)}' (expected: claude)`);
|
|
60
|
+
else if (doc.provider !== 'claude' && doc.provider !== 'codex') {
|
|
61
|
+
errors.push(`unsupported provider '${String(doc.provider)}' (expected: claude or codex)`);
|
|
65
62
|
}
|
|
66
63
|
if (doc.tier !== undefined && doc.tier !== 'full' && doc.tier !== 'quick') {
|
|
67
64
|
errors.push(`unsupported tier '${String(doc.tier)}' (expected: full or quick)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-config.js","sourceRoot":"","sources":["../../../src/installer/phases/install-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAE1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA+BrE,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAC3C,MAAM,CAAU;IAEzB,YAAY,MAAgB;QAC1B,KAAK,CAAC,oCAAoC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,gCAAgC,CAAA;AAEpE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAiB;IACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAA;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAAC,CAAC,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,IAAI,kBAAkB,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAA;IAE1C,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IACjD,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAClD,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"install-config.js","sourceRoot":"","sources":["../../../src/installer/phases/install-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,25 +35,24 @@ export async function claudeVersion() {
|
|
|
35
35
|
* (env `SPECRAILS_SKIP_PREREQS=1`).
|
|
36
36
|
*/
|
|
37
37
|
export async function resolveProvider(availability, options = {}) {
|
|
38
|
-
if (options.explicit === 'codex')
|
|
39
|
-
|
|
40
|
-
'Use --provider claude for now.');
|
|
41
|
-
}
|
|
38
|
+
if (options.explicit === 'codex')
|
|
39
|
+
return 'codex';
|
|
42
40
|
if (options.explicit === 'claude')
|
|
43
41
|
return 'claude';
|
|
42
|
+
// Both installed: prefer Claude (the historical default) so existing
|
|
43
|
+
// projects don't get re-bootstrapped onto a different provider when the
|
|
44
|
+
// user just runs `npx specrails-core init` without `--provider`. Users
|
|
45
|
+
// who want codex pass --provider codex or set it in install-config.yaml.
|
|
44
46
|
if (availability.claude && availability.codex)
|
|
45
47
|
return 'claude';
|
|
46
48
|
if (availability.claude)
|
|
47
49
|
return 'claude';
|
|
48
|
-
if (availability.codex)
|
|
49
|
-
|
|
50
|
-
'Please install Claude Code to continue: https://claude.ai/download');
|
|
51
|
-
}
|
|
50
|
+
if (availability.codex)
|
|
51
|
+
return 'codex';
|
|
52
52
|
if (options.skipPrereqs)
|
|
53
53
|
return 'claude';
|
|
54
|
-
throw new ProviderError('No AI CLI found (claude)
|
|
55
|
-
'
|
|
56
|
-
'Codex (OpenAI) support: coming soon.');
|
|
54
|
+
throw new ProviderError('No AI CLI found. Install Claude Code (https://claude.ai/download) or ' +
|
|
55
|
+
'Codex CLI (https://developers.openai.com/codex) before running specrails-core init.');
|
|
57
56
|
}
|
|
58
57
|
/**
|
|
59
58
|
* Directory / filename conventions the provider dictates.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-detect.js","sourceRoot":"","sources":["../../../src/installer/phases/provider-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAuBxD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5F,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAChF,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAAkC,EAClC,UAA0D,EAAE;IAE5D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO
|
|
1
|
+
{"version":3,"file":"provider-detect.js","sourceRoot":"","sources":["../../../src/installer/phases/provider-detect.ts"],"names":[],"mappings":"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"}
|