specrails-core 4.11.3 → 4.12.0

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 (53) hide show
  1. package/README.md +56 -20
  2. package/bin/specrails-core.mjs +343 -20
  3. package/bin/tui-installer.mjs +103 -52
  4. package/dist/installer/cli.js +1 -1
  5. package/dist/installer/cli.js.map +1 -1
  6. package/dist/installer/commands/doctor.js +486 -24
  7. package/dist/installer/commands/doctor.js.map +1 -1
  8. package/dist/installer/commands/framework.js +49 -7
  9. package/dist/installer/commands/framework.js.map +1 -1
  10. package/dist/installer/commands/init.js +423 -25
  11. package/dist/installer/commands/init.js.map +1 -1
  12. package/dist/installer/commands/update.js +36 -9
  13. package/dist/installer/commands/update.js.map +1 -1
  14. package/dist/installer/phases/framework-lifecycle.js +125 -0
  15. package/dist/installer/phases/framework-lifecycle.js.map +1 -0
  16. package/dist/installer/phases/install-config.js +157 -5
  17. package/dist/installer/phases/install-config.js.map +1 -1
  18. package/dist/installer/phases/manifest.js +27 -2
  19. package/dist/installer/phases/manifest.js.map +1 -1
  20. package/dist/installer/phases/prereqs.js +57 -2
  21. package/dist/installer/phases/prereqs.js.map +1 -1
  22. package/dist/installer/phases/provider-detect.js +116 -6
  23. package/dist/installer/phases/provider-detect.js.map +1 -1
  24. package/dist/installer/phases/scaffold.js +1222 -12
  25. package/dist/installer/phases/scaffold.js.map +1 -1
  26. package/dist/installer/runtime/kimi.js +255 -0
  27. package/dist/installer/runtime/kimi.js.map +1 -0
  28. package/dist/installer/util/paths.js +12 -0
  29. package/dist/installer/util/paths.js.map +1 -1
  30. package/dist/installer/util/registry.js +234 -14
  31. package/dist/installer/util/registry.js.map +1 -1
  32. package/docs/README.md +1 -0
  33. package/docs/deployment.md +6 -7
  34. package/docs/getting-started.md +11 -7
  35. package/docs/installation.md +34 -16
  36. package/docs/plugin-architecture.md +11 -8
  37. package/docs/updating.md +21 -3
  38. package/docs/user-docs/cli-reference.md +43 -22
  39. package/docs/user-docs/codex-vs-claude-code.md +11 -9
  40. package/docs/user-docs/faq.md +1 -1
  41. package/docs/user-docs/getting-started-codex.md +5 -8
  42. package/docs/user-docs/getting-started-kimi.md +423 -0
  43. package/docs/user-docs/installation.md +49 -14
  44. package/docs/user-docs/quick-start.md +11 -8
  45. package/docs/windows.md +29 -4
  46. package/integration-contract.json +85 -13
  47. package/package.json +9 -5
  48. package/schemas/profile.v1.json +67 -5
  49. package/templates/kimi/specrails/run-skill.mjs +3005 -0
  50. package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
  51. package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
  52. package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
  53. package/templates/profiles/kimi-default.json +15 -0
@@ -10,9 +10,10 @@
10
10
  */
11
11
 
12
12
  import { checkbox, select, Separator } from '@inquirer/prompts';
13
- import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
13
+ import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
14
14
  import { execSync } from 'node:child_process';
15
15
  import { resolve } from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
16
17
 
17
18
  // ─── Alternate screen buffer (fullscreen mode) ──────────────────────────────
18
19
 
@@ -72,10 +73,10 @@ const DEFAULT_SELECTED = new Set([
72
73
  ...CORE_AGENTS,
73
74
  ]);
74
75
 
75
- // ─── Model presets (Claude only — see PROVIDER_DEFAULT_MODEL) ────────────────────
76
- // Claude has real cost/quality tiers (sonnet/haiku/opus). Codex and gemini are
77
- // single-model in the scaffold (it hardcodes the per-agent model and ignores the
78
- // install-config preset), so these presets apply to Claude only.
76
+ // ─── Model presets ──────────────────────────────────────────────────────────────
77
+ // Claude exposes distinct Core-defined cost/quality tiers. Other providers use
78
+ // an explicit provider-native default for every named preset; preset names never
79
+ // imply that Claude aliases should be copied into another provider's config.
79
80
 
80
81
  const MODEL_PRESETS = {
81
82
  balanced: {
@@ -95,16 +96,24 @@ const MODEL_PRESETS = {
95
96
  },
96
97
  };
97
98
 
98
- // Per-provider default agent model. For codex/gemini the scaffold hardcodes this
99
- // (the install-config model is advisory), so the TUI writes the provider's real
100
- // model instead of a Claude-flavoured preset. Keep in sync with scaffold.ts
101
- // (GEMINI_DEFAULT_MODEL / the codex config.toml model).
99
+ // Per-provider default agent model. Keep in sync with install-config.ts and the
100
+ // provider renderers.
102
101
  const PROVIDER_DEFAULT_MODEL = {
103
102
  claude: 'sonnet',
104
103
  codex: 'gpt-5.5-mini',
105
104
  gemini: 'gemini-3.5-flash',
105
+ kimi: 'k3',
106
106
  };
107
107
 
108
+ function resolveProviderModelPreset(provider, preset = 'balanced') {
109
+ if (provider === 'claude') return MODEL_PRESETS[preset];
110
+ return {
111
+ label: `${PROVIDER_DEFAULT_MODEL[provider]} for all agents`,
112
+ defaults: PROVIDER_DEFAULT_MODEL[provider],
113
+ overrides: {},
114
+ };
115
+ }
116
+
108
117
  // ─── Provider registry ─────────────────────────────────────────────────────────
109
118
  // Single source of truth for the AI CLIs the TUI can target. Add a provider here
110
119
  // and it flows through detection, the --provider flag, and the interactive picker.
@@ -112,8 +121,19 @@ const PROVIDERS = [
112
121
  { id: 'claude', label: 'Claude Code (recommended)', versionCmd: 'claude --version', installLabel: 'Claude Code', installUrl: 'https://claude.ai/download' },
113
122
  { id: 'codex', label: 'Codex (OpenAI)', versionCmd: 'codex --version', installLabel: 'Codex CLI', installUrl: 'https://developers.openai.com/codex' },
114
123
  { id: 'gemini', label: 'Gemini CLI (Google)', versionCmd: 'gemini --version', installLabel: 'Gemini CLI', installUrl: 'https://github.com/google-gemini/gemini-cli' },
124
+ { id: 'kimi', label: 'Kimi Code', versionCmd: 'kimi --version', installLabel: 'Kimi Code', installUrl: 'https://www.kimi.com/code/docs/en/' },
115
125
  ];
116
126
  const VALID_PROVIDER_IDS = new Set(PROVIDERS.map(p => p.id));
127
+ const providerProbeTimeoutOverride = Number.parseInt(
128
+ process.env.SPECRAILS_PROVIDER_PROBE_TIMEOUT_MS ?? '',
129
+ 10,
130
+ );
131
+ const PROVIDER_PROBE_TIMEOUT_MS =
132
+ Number.isFinite(providerProbeTimeoutOverride) &&
133
+ providerProbeTimeoutOverride >= 100 &&
134
+ providerProbeTimeoutOverride <= 30_000
135
+ ? providerProbeTimeoutOverride
136
+ : 3_000;
117
137
 
118
138
  // ─── Helpers ──────────────────────────────────────────────────────────────────
119
139
 
@@ -121,25 +141,46 @@ const VALID_PROVIDER_IDS = new Set(PROVIDERS.map(p => p.id));
121
141
  function detectInstalledProviders() {
122
142
  const installed = new Set();
123
143
  for (const p of PROVIDERS) {
124
- try { execSync(p.versionCmd, { stdio: 'ignore' }); installed.add(p.id); } catch { /* not installed */ }
144
+ try {
145
+ execSync(p.versionCmd, {
146
+ stdio: 'ignore',
147
+ timeout: PROVIDER_PROBE_TIMEOUT_MS,
148
+ });
149
+ installed.add(p.id);
150
+ } catch { /* absent, broken, or hung — do not block the installer */ }
125
151
  }
126
152
  return installed;
127
153
  }
128
154
 
129
- // Parse `--provider <id>` or `--provider=<id>` from process.argv. Returns a valid
130
- // provider id or null (unknown values warn-then-null so the TUI falls back to the
131
- // interactive picker).
132
- function parseProviderArg() {
133
- const args = process.argv.slice(2);
155
+ // Parse `--provider <id>` or `--provider=<id>` from process.argv. An explicit
156
+ // but invalid value is a configuration error, never an invitation to silently
157
+ // open a picker and install a different provider.
158
+ function parseProviderArg(args = process.argv.slice(2)) {
134
159
  for (let i = 0; i < args.length; i++) {
135
160
  const a = args[i];
136
- if (a === '--provider' && args[i + 1]) {
161
+ if (a === '--provider') {
162
+ if (!args[i + 1] || args[i + 1].startsWith('-')) {
163
+ throw new Error(
164
+ `--provider requires one of: ${[...VALID_PROVIDER_IDS].join(', ')}`,
165
+ );
166
+ }
137
167
  const v = args[i + 1].trim().toLowerCase();
138
- return VALID_PROVIDER_IDS.has(v) ? v : null;
168
+ if (!VALID_PROVIDER_IDS.has(v)) {
169
+ throw new Error(
170
+ `unsupported --provider '${args[i + 1]}' (expected: ${[...VALID_PROVIDER_IDS].join(', ')})`,
171
+ );
172
+ }
173
+ return v;
139
174
  }
140
175
  if (a.startsWith('--provider=')) {
141
176
  const v = a.slice('--provider='.length).trim().toLowerCase();
142
- return VALID_PROVIDER_IDS.has(v) ? v : null;
177
+ if (!VALID_PROVIDER_IDS.has(v)) {
178
+ throw new Error(
179
+ `unsupported --provider '${a.slice('--provider='.length)}' ` +
180
+ `(expected: ${[...VALID_PROVIDER_IDS].join(', ')})`,
181
+ );
182
+ }
183
+ return v;
143
184
  }
144
185
  }
145
186
  return null;
@@ -205,23 +246,47 @@ function writeInstallConfig(specrailsDir, cfg) {
205
246
  function writeDefaultConfig(specrailsDir, provider) {
206
247
  const defaultSelected = [...DEFAULT_SELECTED];
207
248
  const defaultExcluded = ALL_AGENT_IDS.filter(id => !DEFAULT_SELECTED.has(id));
249
+ const modelSelection = resolveProviderModelPreset(provider);
208
250
  writeInstallConfig(specrailsDir, {
209
251
  provider,
210
252
  tier: 'full',
211
253
  selectedAgents: defaultSelected,
212
254
  excludedAgents: defaultExcluded,
213
255
  modelPreset: 'balanced',
214
- modelDefaults: PROVIDER_DEFAULT_MODEL[provider] ?? 'sonnet',
215
- modelOverrides: {},
256
+ modelDefaults: modelSelection.defaults,
257
+ modelOverrides: modelSelection.overrides,
216
258
  });
217
259
  }
218
260
 
261
+ function scaffoldDefaultProfile(specrailsDir, provider) {
262
+ try {
263
+ const scriptDir = fileURLToPath(new URL('..', import.meta.url));
264
+ const templateName = provider === 'kimi' ? 'kimi-default.json' : 'default.json';
265
+ const templatePath = resolve(scriptDir, 'templates/profiles', templateName);
266
+ const profilesDir = resolve(specrailsDir, 'profiles');
267
+ // Provider-bound defaults must coexist in a multi-provider project. Keep
268
+ // the historical filename for Claude and give Kimi its own stable fallback.
269
+ const targetName = provider === 'kimi' ? 'kimi-default.json' : 'project-default.json';
270
+ const targetPath = resolve(profilesDir, targetName);
271
+ if (existsSync(templatePath) && !existsSync(targetPath)) {
272
+ mkdirSync(profilesDir, { recursive: true });
273
+ writeFileSync(targetPath, readFileSync(templatePath));
274
+ console.log(` ✓ Profile scaffolded at .specrails/profiles/${targetName}`);
275
+ } else if (existsSync(targetPath)) {
276
+ console.log(` ↷ Profile already exists at .specrails/profiles/${targetName} — skipped`);
277
+ }
278
+ } catch (e) {
279
+ console.warn(` ⚠ Could not scaffold profile: ${e.message}`);
280
+ }
281
+ }
282
+
219
283
  // ─── Main ─────────────────────────────────────────────────────────────────────
220
284
 
221
285
  async function run() {
222
286
  const rawArgs = process.argv.slice(2);
223
287
  const autoYes = rawArgs.includes('--yes') || rawArgs.includes('-y');
224
288
  const withProfiles = rawArgs.includes('--with-profiles');
289
+ const argvProvider = parseProviderArg(rawArgs);
225
290
  // First positional arg (skipping flag values that follow `--provider`,
226
291
  // `--root-dir`, etc.) is the target directory.
227
292
  const FLAGS_WITH_VALUES = new Set(['--provider', '--root-dir', '--from-config']);
@@ -246,35 +311,12 @@ async function run() {
246
311
 
247
312
  const specrailsDir = resolve(rootDir, '.specrails');
248
313
 
249
- // Optional: scaffold .specrails/profiles/project-default.json from the shipped template.
250
- // Off by default to keep standalone installs zero-noise.
251
- if (withProfiles) {
252
- try {
253
- const { readFileSync, writeFileSync, existsSync, mkdirSync } = await import('node:fs');
254
- const { dirname } = await import('node:path');
255
- const scriptDir = new URL('..', import.meta.url).pathname;
256
- const templatePath = resolve(scriptDir, 'templates/profiles/default.json');
257
- const profilesDir = resolve(specrailsDir, 'profiles');
258
- const targetPath = resolve(profilesDir, 'project-default.json');
259
- if (existsSync(templatePath) && !existsSync(targetPath)) {
260
- mkdirSync(profilesDir, { recursive: true });
261
- writeFileSync(targetPath, readFileSync(templatePath));
262
- console.log(` ✓ Profile scaffolded at .specrails/profiles/project-default.json`);
263
- } else if (existsSync(targetPath)) {
264
- console.log(` ↷ Profile already exists at .specrails/profiles/project-default.json — skipped`);
265
- }
266
- } catch (e) {
267
- console.warn(` ⚠ Could not scaffold profile: ${e.message}`);
268
- }
269
- }
270
-
271
314
  // Auto-yes: write defaults and exit (no TUI needed)
272
315
  //
273
316
  // Honours an explicit --provider <id> argv flag when present; otherwise
274
317
  // picks claude → codex → first-detected. Errors only when none detected.
275
318
  if (autoYes) {
276
319
  const installed = detectInstalledProviders();
277
- const argvProvider = parseProviderArg();
278
320
  let provider;
279
321
  if (argvProvider) {
280
322
  if (!installed.has(argvProvider)) {
@@ -291,12 +333,13 @@ async function run() {
291
333
  provider = PROVIDERS.find(p => installed.has(p.id))?.id;
292
334
  if (!provider) {
293
335
  console.error('');
294
- console.error(' ⚠ No supported AI CLI detected on PATH (Claude Code, Codex, or Gemini CLI).');
336
+ console.error(' ⚠ No supported AI CLI detected on PATH (Claude Code, Codex, Gemini CLI, or Kimi Code).');
295
337
  for (const p of PROVIDERS) console.error(` Install ${p.installLabel}: ${p.installUrl}`);
296
338
  console.error('');
297
339
  process.exit(1);
298
340
  }
299
341
  }
342
+ if (withProfiles) scaffoldDefaultProfile(specrailsDir, provider);
300
343
  writeDefaultConfig(specrailsDir, provider);
301
344
  console.log(` ✓ Default config written to .specrails/install-config.yaml`);
302
345
  console.log(` ✓ Provider: ${provider}, Tier: full, Agents: ${DEFAULT_SELECTED.size}/${ALL_AGENT_IDS.length}, Preset: balanced\n`);
@@ -328,7 +371,6 @@ async function run() {
328
371
  // ── Step 1: Provider ────────────────────────────────────────────────────────
329
372
 
330
373
  const installed = detectInstalledProviders();
331
- const argvProvider = parseProviderArg();
332
374
  let provider;
333
375
 
334
376
  if (argvProvider) {
@@ -359,6 +401,7 @@ async function run() {
359
401
  });
360
402
  }
361
403
  }
404
+ if (withProfiles) scaffoldDefaultProfile(specrailsDir, provider);
362
405
 
363
406
  // ── Step 2: Installation tier ───────────────────────────────────────────────
364
407
 
@@ -377,7 +420,10 @@ async function run() {
377
420
  {
378
421
  value: 'full',
379
422
  name: 'Full — AI-powered setup',
380
- description: 'After install, run /specrails:enrich to AI-customize all agents for your codebase',
423
+ description:
424
+ provider === 'kimi'
425
+ ? 'After install, run /skill:specrails-enrich to AI-customize all agents for your codebase'
426
+ : 'After install, run /specrails:enrich to AI-customize all agents for your codebase',
381
427
  },
382
428
  ],
383
429
  });
@@ -409,11 +455,13 @@ async function run() {
409
455
  clearScreen();
410
456
  console.log(` Provider: ${provider} | Tier: ${tier} | Agents: ${selectedAgents.length}/${ALL_AGENT_IDS.length}\n`);
411
457
 
412
- // Claude exposes real model tiers; codex/gemini are single-model in the scaffold,
413
- // so skip the (Claude-flavoured) preset picker for them and use the fixed model.
458
+ // Claude exposes real model tiers. Other providers retain the same config
459
+ // shape but resolve the preset through their provider-native catalog.
414
460
  let modelPreset = 'balanced';
415
- let modelDefaults = PROVIDER_DEFAULT_MODEL[provider] ?? 'sonnet';
416
- let modelOverrides = {};
461
+ let {
462
+ defaults: modelDefaults,
463
+ overrides: modelOverrides,
464
+ } = resolveProviderModelPreset(provider, modelPreset);
417
465
  if (provider === 'claude') {
418
466
  modelPreset = await select({
419
467
  message: 'Model configuration:',
@@ -424,7 +472,7 @@ async function run() {
424
472
  });
425
473
  ({ defaults: modelDefaults, overrides: modelOverrides } = MODEL_PRESETS[modelPreset]);
426
474
  } else {
427
- console.log(` → Model: ${modelDefaults} (${provider} uses one model for all agents)\n`);
475
+ console.log(` → Model: ${modelDefaults} (${provider} provider preset)\n`);
428
476
  }
429
477
 
430
478
  // ── Write config & exit fullscreen ──────────────────────────────────────────
@@ -444,7 +492,10 @@ async function run() {
444
492
  console.log(`\n ✓ Config written to .specrails/install-config.yaml`);
445
493
  console.log(` ✓ Provider: ${provider} | Tier: ${tier} | Agents: ${selectedAgents.length}/${ALL_AGENT_IDS.length} | Preset: ${modelPreset}`);
446
494
  if (tier === 'full') {
447
- console.log(`\n Next: run /specrails:enrich --from-config inside ${provider} to AI-customize your agents.\n`);
495
+ const enrichCommand = provider === 'kimi'
496
+ ? '/skill:specrails-enrich --from-config'
497
+ : '/specrails:enrich --from-config';
498
+ console.log(`\n Next: run ${enrichCommand} inside ${provider} to AI-customize your agents.\n`);
448
499
  } else {
449
500
  console.log(`\n Agents will be installed with template defaults.\n`);
450
501
  }
@@ -73,7 +73,7 @@ export function parseArgs(argv) {
73
73
  function usageText() {
74
74
  return [
75
75
  '',
76
- 'specrails-core — AI agent workflow system',
76
+ 'specrails-core — Provider-independent AI agent workflow system',
77
77
  '',
78
78
  'Usage:',
79
79
  ' specrails-core <command> [options]',
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/installer/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/installer/cli.ts"],"names":[],"mappings":"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"}