specrails-core 4.11.2 → 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 (56) 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/codex-skills/batch-implement/SKILL.md +4 -0
  50. package/templates/commands/specrails/batch-implement.md +11 -0
  51. package/templates/gemini-commands/batch-implement.toml +4 -0
  52. package/templates/kimi/specrails/run-skill.mjs +3005 -0
  53. package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
  54. package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
  55. package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
  56. package/templates/profiles/kimi-default.json +15 -0
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/installer/phases/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/installer/phases/manifest.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,41 @@ import { commandExists, runCommand } from '../util/exec.js';
4
4
  import { isDir, isFile, listDir } from '../util/fs.js';
5
5
  import { info, ok, warn } from '../util/logger.js';
6
6
  import { gitInstalled, initRepo, isGitRepo, repoRoot } from '../util/git.js';
7
- import { assertClaudeAuthenticated, claudeVersion, detectAvailability, resolveProvider, } from './provider-detect.js';
7
+ import { assertClaudeAuthenticated, assertKimiAuthenticated, claudeVersion, detectAvailability, isSupportedKimiVersion, kimiVersion, MIN_KIMI_VERSION, resolveProvider, } from './provider-detect.js';
8
+ /**
9
+ * OpenSpec 1.4.1, which the installer invokes during the default init/update
10
+ * flow, requires Node >=20.19.0. Keep this floor independent from Kimi's npm
11
+ * package requirement: SpecRails launches an externally installed Kimi CLI and
12
+ * does not require the Kimi npm distribution.
13
+ */
14
+ export const MIN_NODE_VERSION = '20.19.0';
15
+ export function isSupportedNodeVersion(version) {
16
+ const parsed = /^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(version.trim());
17
+ if (!parsed)
18
+ return false;
19
+ const actual = parsed.slice(1, 4).map(Number);
20
+ const minimum = MIN_NODE_VERSION.split('.').map(Number);
21
+ for (let index = 0; index < minimum.length; index++) {
22
+ if (actual[index] > minimum[index])
23
+ return true;
24
+ if (actual[index] < minimum[index])
25
+ return false;
26
+ }
27
+ return true;
28
+ }
8
29
  /**
9
30
  * Orchestrates every prerequisite check that must pass before the
10
31
  * installer proceeds to Phase 3 (scaffolding). Emits ok/warn/info
11
32
  * lines matching the retired bash output.
12
33
  */
13
34
  export async function checkPrerequisites(options) {
35
+ const nodeVersion = process.versions.node;
36
+ if (!isSupportedNodeVersion(nodeVersion)) {
37
+ throw new PrerequisiteError(`Node.js ${nodeVersion} is unsupported. SpecRails requires Node.js ` +
38
+ `${MIN_NODE_VERSION} or newer because OpenSpec 1.4.1 uses that runtime floor. ` +
39
+ 'Install a supported Node.js release from https://nodejs.org/');
40
+ }
41
+ ok(`Node.js: ${nodeVersion}`);
14
42
  if (!(await gitInstalled())) {
15
43
  throw new PrerequisiteError('git is required but not on PATH. Install git: https://git-scm.com/');
16
44
  }
@@ -40,18 +68,45 @@ export async function checkPrerequisites(options) {
40
68
  ok(`Provider: claude (--provider flag)`);
41
69
  }
42
70
  }
71
+ if (provider === 'kimi') {
72
+ if (availability.kimi) {
73
+ const v = await kimiVersion();
74
+ if (!isSupportedKimiVersion(v) && !options.skipPrereqs) {
75
+ throw new PrerequisiteError(`Kimi Code ${v} is unsupported. Upgrade to ${MIN_KIMI_VERSION} or newer: ` +
76
+ 'https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started.html');
77
+ }
78
+ ok(`Kimi Code CLI: ${v}`);
79
+ }
80
+ else if (options.explicitProvider === 'kimi') {
81
+ if (!options.skipPrereqs) {
82
+ throw new PrerequisiteError('Kimi Code CLI is not installed. Install it from https://www.kimi.com/code/docs/en/ ' +
83
+ 'and retry, or run with SPECRAILS_SKIP_PREREQS=1 for fixture generation.');
84
+ }
85
+ ok('Provider: kimi (--provider flag)');
86
+ }
87
+ }
43
88
  // 1.3 Authentication for the selected provider.
44
89
  if (provider === 'claude') {
45
90
  await assertClaudeAuthenticated({ skipPrereqs: options.skipPrereqs });
46
91
  ok('Claude: authenticated');
47
92
  }
93
+ if (provider === 'kimi' && availability.kimi) {
94
+ const status = await assertKimiAuthenticated({ skipPrereqs: options.skipPrereqs });
95
+ if (status === 'authenticated') {
96
+ ok('Kimi: authentication evidence found');
97
+ }
98
+ else if (status === 'unknown') {
99
+ info('Kimi authentication could not be proven without a billable prompt; ' +
100
+ 'the first workflow will report 401/login errors. Run `kimi login` if needed.');
101
+ }
102
+ }
48
103
  // 1.4 npm — required for running the TUI and for the `update` command.
49
104
  if (!(await commandExists('npm'))) {
50
105
  if (options.skipPrereqs) {
51
106
  warn('npm not found (skipped — SPECRAILS_SKIP_PREREQS=1)');
52
107
  }
53
108
  else {
54
- throw new PrerequisiteError('npm is required but not on PATH. Install Node.js 20+ from https://nodejs.org/');
109
+ throw new PrerequisiteError(`npm is required but not on PATH. Install Node.js ${MIN_NODE_VERSION}+ from https://nodejs.org/`);
55
110
  }
56
111
  }
57
112
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"prereqs.js","sourceRoot":"","sources":["../../../src/installer/phases/prereqs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prereqs.js","sourceRoot":"","sources":["../../../src/installer/phases/prereqs.ts"],"names":[],"mappings":"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"}
@@ -3,17 +3,20 @@ import path from 'node:path';
3
3
  import { ProviderError } from '../util/errors.js';
4
4
  import { commandExists, runCommand } from '../util/exec.js';
5
5
  import { pathExists, readTextFile } from '../util/fs.js';
6
+ /** Oldest TypeScript Kimi Code CLI release covered by this integration. */
7
+ export const MIN_KIMI_VERSION = '0.27.0';
6
8
  /**
7
9
  * Detects which AI CLIs are on PATH. Runs `where` on Windows and
8
10
  * `which` on POSIX via the cross-platform commandExists helper.
9
11
  */
10
12
  export async function detectAvailability() {
11
- const [claude, codex, gemini] = await Promise.all([
13
+ const [claude, codex, gemini, kimi] = await Promise.all([
12
14
  commandExists('claude'),
13
15
  commandExists('codex'),
14
16
  commandExists('gemini'),
17
+ commandExists('kimi'),
15
18
  ]);
16
- return { claude, codex, gemini };
19
+ return { claude, codex, gemini, kimi };
17
20
  }
18
21
  /**
19
22
  * Returns the Claude CLI version string (stdout of `claude --version`)
@@ -28,13 +31,36 @@ export async function claudeVersion() {
28
31
  return 'unknown';
29
32
  }
30
33
  }
34
+ /** Returns the raw Kimi Code CLI version or `unknown` when it cannot be probed. */
35
+ export async function kimiVersion() {
36
+ try {
37
+ const { stdout, stderr } = await runCommand('kimi', ['--version'], {
38
+ inherit: false,
39
+ timeoutMs: 10_000,
40
+ });
41
+ return stdout.trim() || stderr.trim() || 'unknown';
42
+ }
43
+ catch {
44
+ return 'unknown';
45
+ }
46
+ }
47
+ /** Extracts a semver-like triple from version output such as `kimi-code 0.27.0`. */
48
+ export function parseCliVersion(raw) {
49
+ return /(?:^|[^\d])(\d+)\.(\d+)\.(\d+)(?:[^\d]|$)/.exec(raw)?.slice(1, 4).join('.') ?? null;
50
+ }
51
+ /** True when `raw` identifies a Kimi CLI at or above {@link MIN_KIMI_VERSION}. */
52
+ export function isSupportedKimiVersion(raw) {
53
+ const parsed = parseCliVersion(raw);
54
+ if (!parsed)
55
+ return false;
56
+ return compareVersionTriples(parsed, MIN_KIMI_VERSION) >= 0;
57
+ }
31
58
  /**
32
59
  * Resolves which provider the installer should use. Priority:
33
60
  * 1. Explicit `--provider claude` flag (already passed through args).
34
61
  * 2. Config file (read upstream in install-config.ts).
35
62
  * 3. Whichever CLI is installed.
36
63
  *
37
- * Codex-only installs error out — see design: Codex is "coming soon".
38
64
  * The caller may bypass prereq failures with `skipPrereqs: true`
39
65
  * (env `SPECRAILS_SKIP_PREREQS=1`).
40
66
  */
@@ -45,26 +71,33 @@ export async function resolveProvider(availability, options = {}) {
45
71
  return 'claude';
46
72
  if (options.explicit === 'gemini')
47
73
  return 'gemini';
74
+ if (options.explicit === 'kimi')
75
+ return 'kimi';
48
76
  // No multi-provider auto-pick beyond the historical Claude-first default: when
49
77
  // several CLIs are installed and no provider was requested, prefer Claude so
50
78
  // existing projects don't get re-bootstrapped onto a different provider. Users
51
- // pick codex/gemini via --provider or install-config.yaml.
79
+ // pick codex/gemini/kimi via --provider or install-config.yaml.
52
80
  if (availability.claude)
53
81
  return 'claude';
54
82
  if (availability.codex)
55
83
  return 'codex';
56
84
  if (availability.gemini)
57
85
  return 'gemini';
86
+ if (availability.kimi)
87
+ return 'kimi';
58
88
  if (options.skipPrereqs)
59
89
  return 'claude';
60
90
  throw new ProviderError('No AI CLI found. Install Claude Code (https://claude.ai/download), ' +
61
91
  'Codex CLI (https://developers.openai.com/codex), or ' +
62
- 'Gemini CLI (https://github.com/google-gemini/gemini-cli) before running specrails-core init.');
92
+ 'Gemini CLI (https://github.com/google-gemini/gemini-cli), or ' +
93
+ 'Kimi Code (https://www.kimi.com/code/docs/en/) before running specrails-core init.');
63
94
  }
64
95
  /**
65
96
  * Directory / filename conventions the provider dictates.
66
97
  * - Claude Code: .claude/ + CLAUDE.md
67
98
  * - Codex: .codex/ + AGENTS.md
99
+ * - Gemini CLI: .gemini/ + GEMINI.md
100
+ * - Kimi Code: .kimi-code/ + AGENTS.md
68
101
  */
69
102
  export function derivedPaths(provider) {
70
103
  if (provider === 'codex') {
@@ -73,7 +106,13 @@ export function derivedPaths(provider) {
73
106
  if (provider === 'gemini') {
74
107
  return { providerDir: '.gemini', instructionsFile: 'GEMINI.md' };
75
108
  }
76
- return { providerDir: '.claude', instructionsFile: 'CLAUDE.md' };
109
+ if (provider === 'kimi') {
110
+ return { providerDir: '.kimi-code', instructionsFile: '.kimi-code/AGENTS.md' };
111
+ }
112
+ if (provider === 'claude') {
113
+ return { providerDir: '.claude', instructionsFile: 'CLAUDE.md' };
114
+ }
115
+ throw new ProviderError(`Unsupported provider: ${String(provider)}`);
77
116
  }
78
117
  /**
79
118
  * Asserts that Claude Code is authenticated. Matches the three-path
@@ -96,6 +135,59 @@ export async function assertClaudeAuthenticated(options = {}) {
96
135
  ' Option 2 (OAuth): claude auth login',
97
136
  ].join('\n'));
98
137
  }
138
+ /**
139
+ * Bounded, non-billing Kimi authentication probe.
140
+ *
141
+ * Kimi 0.27 has no CLI command that proves managed OAuth readiness without
142
+ * starting a model request. We therefore recognise non-secret evidence (the
143
+ * managed credential file or a process-scoped model key), and honour explicit
144
+ * login failures emitted by `kimi doctor`. A successful `kimi doctor` only
145
+ * validates configuration, so it deliberately yields `unknown`.
146
+ */
147
+ export async function probeKimiAuthentication(options = {}) {
148
+ const env = options.env ?? process.env;
149
+ if (typeof env.KIMI_MODEL_API_KEY === 'string' &&
150
+ env.KIMI_MODEL_API_KEY.length > 0 &&
151
+ typeof env.KIMI_MODEL_NAME === 'string' &&
152
+ env.KIMI_MODEL_NAME.length > 0) {
153
+ return 'authenticated';
154
+ }
155
+ const kimiHome = options.kimiCodeHome ??
156
+ (typeof env.KIMI_CODE_HOME === 'string' && env.KIMI_CODE_HOME.length > 0
157
+ ? env.KIMI_CODE_HOME
158
+ : path.join(homedir(), '.kimi-code'));
159
+ if (pathExists(path.join(kimiHome, 'credentials', 'kimi-code.json'))) {
160
+ return 'authenticated';
161
+ }
162
+ try {
163
+ const { stdout, stderr } = await runCommand('kimi', ['doctor'], {
164
+ inherit: false,
165
+ timeoutMs: 10_000,
166
+ env,
167
+ });
168
+ return textReportsMissingKimiLogin(`${stdout}\n${stderr}`) ? 'unauthenticated' : 'unknown';
169
+ }
170
+ catch (error) {
171
+ const probe = error;
172
+ const text = `${probe.stdout ?? ''}\n${probe.stderr ?? ''}\n${probe.message ?? ''}`;
173
+ return textReportsMissingKimiLogin(text) ? 'unauthenticated' : 'unknown';
174
+ }
175
+ }
176
+ /**
177
+ * Rejects only a conclusive login failure. `unknown` is allowed because setup
178
+ * must not spend quota merely to prove authentication.
179
+ */
180
+ export async function assertKimiAuthenticated(options = {}) {
181
+ const status = await probeKimiAuthentication(options);
182
+ if (status !== 'unauthenticated' || options.skipPrereqs)
183
+ return status;
184
+ throw new ProviderError([
185
+ 'Kimi Code is installed but login is required.',
186
+ '',
187
+ ' Run: kimi login',
188
+ ' Then retry specrails-core init.',
189
+ ].join('\n'));
190
+ }
99
191
  async function hasClaudeApiKeyConfigured() {
100
192
  try {
101
193
  const { stdout } = await runCommand('claude', ['config', 'list'], { inherit: false });
@@ -117,4 +209,22 @@ async function hasClaudeOauthJson() {
117
209
  return false;
118
210
  }
119
211
  }
212
+ function textReportsMissingKimiLogin(raw) {
213
+ const text = raw.toLowerCase();
214
+ return (text.includes('login required') ||
215
+ text.includes('not logged in') ||
216
+ text.includes('not authenticated') ||
217
+ text.includes('please run kimi login') ||
218
+ text.includes('run `kimi login`'));
219
+ }
220
+ function compareVersionTriples(left, right) {
221
+ const a = left.split('.').map(Number);
222
+ const b = right.split('.').map(Number);
223
+ for (let i = 0; i < 3; i++) {
224
+ const diff = (a[i] ?? 0) - (b[i] ?? 0);
225
+ if (diff !== 0)
226
+ return diff;
227
+ }
228
+ return 0;
229
+ }
120
230
  //# sourceMappingURL=provider-detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-detect.js","sourceRoot":"","sources":["../../../src/installer/phases/provider-detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-detect.js","sourceRoot":"","sources":["../../../src/installer/phases/provider-detect.ts"],"names":[],"mappings":"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"}