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.
- package/README.md +56 -20
- package/bin/specrails-core.mjs +343 -20
- package/bin/tui-installer.mjs +103 -52
- package/dist/installer/cli.js +1 -1
- package/dist/installer/cli.js.map +1 -1
- package/dist/installer/commands/doctor.js +486 -24
- package/dist/installer/commands/doctor.js.map +1 -1
- package/dist/installer/commands/framework.js +49 -7
- package/dist/installer/commands/framework.js.map +1 -1
- package/dist/installer/commands/init.js +423 -25
- package/dist/installer/commands/init.js.map +1 -1
- package/dist/installer/commands/update.js +36 -9
- package/dist/installer/commands/update.js.map +1 -1
- package/dist/installer/phases/framework-lifecycle.js +125 -0
- package/dist/installer/phases/framework-lifecycle.js.map +1 -0
- package/dist/installer/phases/install-config.js +157 -5
- package/dist/installer/phases/install-config.js.map +1 -1
- package/dist/installer/phases/manifest.js +27 -2
- package/dist/installer/phases/manifest.js.map +1 -1
- package/dist/installer/phases/prereqs.js +57 -2
- package/dist/installer/phases/prereqs.js.map +1 -1
- package/dist/installer/phases/provider-detect.js +116 -6
- package/dist/installer/phases/provider-detect.js.map +1 -1
- package/dist/installer/phases/scaffold.js +1222 -12
- package/dist/installer/phases/scaffold.js.map +1 -1
- package/dist/installer/runtime/kimi.js +255 -0
- package/dist/installer/runtime/kimi.js.map +1 -0
- package/dist/installer/util/paths.js +12 -0
- package/dist/installer/util/paths.js.map +1 -1
- package/dist/installer/util/registry.js +234 -14
- package/dist/installer/util/registry.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/deployment.md +6 -7
- package/docs/getting-started.md +11 -7
- package/docs/installation.md +34 -16
- package/docs/plugin-architecture.md +11 -8
- package/docs/updating.md +21 -3
- package/docs/user-docs/cli-reference.md +43 -22
- package/docs/user-docs/codex-vs-claude-code.md +11 -9
- package/docs/user-docs/faq.md +1 -1
- package/docs/user-docs/getting-started-codex.md +5 -8
- package/docs/user-docs/getting-started-kimi.md +423 -0
- package/docs/user-docs/installation.md +49 -14
- package/docs/user-docs/quick-start.md +11 -8
- package/docs/windows.md +29 -4
- package/integration-contract.json +85 -13
- package/package.json +9 -5
- package/schemas/profile.v1.json +67 -5
- package/templates/kimi/specrails/run-skill.mjs +3005 -0
- package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
- package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
- package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
- package/templates/profiles/kimi-default.json +15 -0
|
@@ -1,12 +1,30 @@
|
|
|
1
|
-
import { appendFileSync } from 'node:fs';
|
|
1
|
+
import { appendFileSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { info, ok, fail as logFail, rawOut } from '../util/logger.js';
|
|
5
6
|
import { commandExists, runCommand } from '../util/exec.js';
|
|
6
|
-
import { isDir, isFile, listDir, mkdirp } from '../util/fs.js';
|
|
7
|
-
import {
|
|
7
|
+
import { isDir, isFile, listDir, mkdirp, readTextFile, } from '../util/fs.js';
|
|
8
|
+
import { isGitRepo } from '../util/git.js';
|
|
9
|
+
import { buildManifest } from '../phases/manifest.js';
|
|
10
|
+
import { assertClaudeAuthenticated, assertKimiAuthenticated, isSupportedKimiVersion, kimiVersion, MIN_KIMI_VERSION, } from '../phases/provider-detect.js';
|
|
8
11
|
import { derivedPaths } from '../phases/provider-detect.js';
|
|
12
|
+
import { ProviderError } from '../util/errors.js';
|
|
9
13
|
import { resolveArtifacts } from '../util/registry.js';
|
|
14
|
+
import { KIMI_REQUIRED_OPENSPEC_SKILLS } from './init.js';
|
|
15
|
+
const CORE_PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
|
|
16
|
+
/**
|
|
17
|
+
* Every canonical SpecRails command is materialized as a direct-child Kimi
|
|
18
|
+
* skill. Discover the list from the packaged source of truth so doctor cannot
|
|
19
|
+
* silently fall behind when the command catalog grows.
|
|
20
|
+
*/
|
|
21
|
+
export const KIMI_MANAGED_WORKFLOW_SKILLS = listDir(path.join(CORE_PACKAGE_ROOT, 'templates', 'commands', 'specrails'))
|
|
22
|
+
.filter((entry) => isFile(entry) &&
|
|
23
|
+
path.extname(entry) === '.md' &&
|
|
24
|
+
path.basename(entry) !== 'setup.md')
|
|
25
|
+
.map((entry) => `specrails-${path.basename(entry, '.md')}`)
|
|
26
|
+
.sort();
|
|
27
|
+
const SHA256_DIGEST = /^sha256:[0-9a-f]{64}$/;
|
|
10
28
|
export async function runDoctor(flags = {}) {
|
|
11
29
|
const projectRoot = path.resolve(typeof flags['root-dir'] === 'string' ? flags['root-dir'] : process.cwd());
|
|
12
30
|
// Relocate-always: Specrails artifacts (provider dir, agent files, instructions
|
|
@@ -25,18 +43,32 @@ export async function runDoctor(flags = {}) {
|
|
|
25
43
|
const addFail = (message, fix) => {
|
|
26
44
|
results.push({ kind: 'fail', message, fix });
|
|
27
45
|
};
|
|
28
|
-
const provider =
|
|
46
|
+
const provider = resolveDoctorProvider(artifactRoot, flags.provider);
|
|
29
47
|
const { providerDir, instructionsFile } = derivedPaths(provider);
|
|
30
|
-
// Check 1:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
48
|
+
// Check 1: selected provider CLI.
|
|
49
|
+
const cli = provider === 'claude' ? 'claude' : provider;
|
|
50
|
+
const cliLabel = provider === 'claude'
|
|
51
|
+
? 'Claude Code'
|
|
52
|
+
: provider === 'kimi'
|
|
53
|
+
? 'Kimi Code'
|
|
54
|
+
: provider === 'gemini'
|
|
55
|
+
? 'Gemini'
|
|
56
|
+
: 'Codex';
|
|
57
|
+
const cliFound = await commandExists(cli);
|
|
58
|
+
if (cliFound) {
|
|
59
|
+
const path_ = await resolveCommandPath(cli);
|
|
60
|
+
addPass(`${cliLabel} CLI: found${path_ ? ` (${path_})` : ''}`);
|
|
34
61
|
}
|
|
35
62
|
else {
|
|
36
|
-
|
|
63
|
+
const installFix = provider === 'kimi'
|
|
64
|
+
? 'Install Kimi Code: https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started.html'
|
|
65
|
+
: provider === 'claude'
|
|
66
|
+
? 'Install Claude Code: https://claude.ai/download'
|
|
67
|
+
: `Install the ${cliLabel} CLI and retry`;
|
|
68
|
+
addFail(`${cliLabel} CLI: not found`, installFix);
|
|
37
69
|
}
|
|
38
|
-
// Check 2:
|
|
39
|
-
if (
|
|
70
|
+
// Check 2: provider version/authentication when a bounded probe exists.
|
|
71
|
+
if (cliFound && provider === 'claude') {
|
|
40
72
|
try {
|
|
41
73
|
await assertClaudeAuthenticated({ skipPrereqs: false });
|
|
42
74
|
addPass('Claude: authenticated');
|
|
@@ -45,22 +77,59 @@ export async function runDoctor(flags = {}) {
|
|
|
45
77
|
addFail('Claude: not authenticated', 'Option 1: claude config set api_key <your-key> | Option 2: claude auth login');
|
|
46
78
|
}
|
|
47
79
|
}
|
|
48
|
-
|
|
49
|
-
|
|
80
|
+
else if (cliFound && provider === 'kimi') {
|
|
81
|
+
const version = await kimiVersion();
|
|
82
|
+
if (isSupportedKimiVersion(version)) {
|
|
83
|
+
addPass(`Kimi Code version: ${version}`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
addFail(`Kimi Code version: unsupported (${version})`, `Upgrade Kimi Code to ${MIN_KIMI_VERSION} or newer`);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const auth = await assertKimiAuthenticated({ skipPrereqs: false });
|
|
90
|
+
if (auth === 'authenticated') {
|
|
91
|
+
addPass('Kimi: authentication evidence found');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// There is no non-billable readiness probe in 0.27. Unknown is healthy:
|
|
95
|
+
// doctor must not spend quota merely to prove login.
|
|
96
|
+
addPass('Kimi: authentication readiness unknown (non-billing check)');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
addFail('Kimi: not authenticated', 'Run: kimi login');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Check 3: provider-native role artifacts.
|
|
104
|
+
const agentsDir = provider === 'kimi'
|
|
105
|
+
? path.join(artifactRoot, providerDir, 'skills')
|
|
106
|
+
: provider === 'codex'
|
|
107
|
+
? path.join(artifactRoot, providerDir, 'skills', 'rails')
|
|
108
|
+
: path.join(artifactRoot, providerDir, 'agents');
|
|
50
109
|
if (isDir(agentsDir)) {
|
|
51
110
|
const agentFiles = findInstalledAgentFiles(agentsDir, provider);
|
|
52
111
|
if (agentFiles.length >= 1) {
|
|
53
112
|
const names = agentFiles
|
|
54
|
-
.map((f) =>
|
|
113
|
+
.map((f) => provider === 'kimi' || provider === 'codex'
|
|
114
|
+
? path.basename(path.dirname(f))
|
|
115
|
+
: path.basename(f, path.extname(f)))
|
|
55
116
|
.join(', ');
|
|
56
|
-
|
|
117
|
+
const relativeRoleDir = provider === 'kimi'
|
|
118
|
+
? `${providerDir}/skills`
|
|
119
|
+
: provider === 'codex'
|
|
120
|
+
? `${providerDir}/skills/rails`
|
|
121
|
+
: `${providerDir}/agents`;
|
|
122
|
+
const label = provider === 'kimi' ? 'Role skills' : 'Agent files';
|
|
123
|
+
addPass(`${label}: ${agentFiles.length} agent(s) found in ${relativeRoleDir} (${names})`);
|
|
57
124
|
}
|
|
58
125
|
else {
|
|
59
|
-
addFail(
|
|
126
|
+
addFail(`${provider === 'kimi' ? 'Role skills' : 'Agent files'}: ` +
|
|
127
|
+
`${path.relative(artifactRoot, agentsDir)} exists but no generated role artifacts were found`, 'Run specrails-core init to set up agents');
|
|
60
128
|
}
|
|
61
129
|
}
|
|
62
130
|
else {
|
|
63
|
-
addFail(
|
|
131
|
+
addFail(`${provider === 'kimi' ? 'Role skills' : 'Agent files'}: ` +
|
|
132
|
+
`${path.relative(artifactRoot, agentsDir)} directory not found`, 'Run specrails-core init to set up agents');
|
|
64
133
|
}
|
|
65
134
|
// Check 4: provider instructions file present
|
|
66
135
|
if (isFile(path.join(artifactRoot, instructionsFile))) {
|
|
@@ -71,8 +140,14 @@ export async function runDoctor(flags = {}) {
|
|
|
71
140
|
? 'Run specrails-core init to regenerate the provider instructions.'
|
|
72
141
|
: 'Run /specrails:enrich inside Claude Code to regenerate.');
|
|
73
142
|
}
|
|
74
|
-
|
|
75
|
-
|
|
143
|
+
if (provider === 'kimi') {
|
|
144
|
+
checkKimiArtifacts({ artifactRoot, codeRoot, addPass, addFail });
|
|
145
|
+
}
|
|
146
|
+
// Check 5: Git initialized (in the repo — codeRoot, not the artifact root).
|
|
147
|
+
// `git rev-parse` supports normal repositories, linked worktrees (`.git` is a
|
|
148
|
+
// file there), subdirectories and repository layouts that do not expose a
|
|
149
|
+
// literal `.git/` directory.
|
|
150
|
+
if (await isGitRepo(codeRoot)) {
|
|
76
151
|
addPass('Git: initialized');
|
|
77
152
|
}
|
|
78
153
|
else {
|
|
@@ -102,7 +177,9 @@ export async function runDoctor(flags = {}) {
|
|
|
102
177
|
const failed = results.length - passed;
|
|
103
178
|
rawOut('\n');
|
|
104
179
|
if (failed === 0) {
|
|
105
|
-
info(`All ${passed + failed} checks passed. Run
|
|
180
|
+
info(`All ${passed + failed} checks passed. Run ${provider === 'kimi'
|
|
181
|
+
? '/skill:specrails-get-backlog-specs'
|
|
182
|
+
: '/specrails:get-backlog-specs'} to get started.`);
|
|
106
183
|
}
|
|
107
184
|
else {
|
|
108
185
|
rawOut(`${failed} check(s) failed.\n`);
|
|
@@ -122,23 +199,408 @@ async function resolveCommandPath(cmd) {
|
|
|
122
199
|
return null;
|
|
123
200
|
}
|
|
124
201
|
}
|
|
125
|
-
function
|
|
202
|
+
function resolveDoctorProvider(projectRoot, explicit) {
|
|
203
|
+
if (explicit === 'claude' ||
|
|
204
|
+
explicit === 'codex' ||
|
|
205
|
+
explicit === 'gemini' ||
|
|
206
|
+
explicit === 'kimi') {
|
|
207
|
+
return explicit;
|
|
208
|
+
}
|
|
209
|
+
if (explicit !== undefined) {
|
|
210
|
+
throw new ProviderError(`--provider value must be 'claude', 'codex', 'gemini', or 'kimi', got: ${String(explicit)}`);
|
|
211
|
+
}
|
|
212
|
+
const manifestPath = path.join(projectRoot, '.specrails', 'specrails-manifest.json');
|
|
213
|
+
if (isFile(manifestPath)) {
|
|
214
|
+
try {
|
|
215
|
+
const manifest = JSON.parse(readTextFile(manifestPath));
|
|
216
|
+
if (isProvider(manifest.primary_provider))
|
|
217
|
+
return manifest.primary_provider;
|
|
218
|
+
if (Array.isArray(manifest.providers)) {
|
|
219
|
+
const recorded = manifest.providers.filter(isProvider);
|
|
220
|
+
if (recorded.length === 1)
|
|
221
|
+
return recorded[0];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// The manifest itself is diagnosed later. Preserve legacy directory
|
|
226
|
+
// fallback here so doctor still reports every actionable problem.
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Preserve the established multi-tree fallback: Gemini and Codex predate
|
|
230
|
+
// Claude-first resolution. Kimi slots ahead of Claude without changing
|
|
231
|
+
// existing Gemini/Codex behavior.
|
|
126
232
|
if (isDir(path.join(projectRoot, '.gemini')))
|
|
127
233
|
return 'gemini';
|
|
128
234
|
if (isDir(path.join(projectRoot, '.codex')))
|
|
129
235
|
return 'codex';
|
|
236
|
+
if (isDir(path.join(projectRoot, '.kimi-code')))
|
|
237
|
+
return 'kimi';
|
|
238
|
+
if (isDir(path.join(projectRoot, '.claude')))
|
|
239
|
+
return 'claude';
|
|
130
240
|
return 'claude';
|
|
131
241
|
}
|
|
242
|
+
function isProvider(value) {
|
|
243
|
+
return (value === 'claude' ||
|
|
244
|
+
value === 'codex' ||
|
|
245
|
+
value === 'gemini' ||
|
|
246
|
+
value === 'kimi');
|
|
247
|
+
}
|
|
132
248
|
function findInstalledAgentFiles(root, provider) {
|
|
133
249
|
if (!isDir(root))
|
|
134
250
|
return [];
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
251
|
+
if (provider === 'kimi') {
|
|
252
|
+
return listDir(root)
|
|
253
|
+
.filter((entry) => {
|
|
254
|
+
const id = path.basename(entry);
|
|
255
|
+
return (isDir(entry) &&
|
|
256
|
+
/^(?:sr|custom)-[a-z0-9-]+$/.test(id) &&
|
|
257
|
+
isFile(path.join(entry, 'SKILL.md')));
|
|
258
|
+
})
|
|
259
|
+
.map((entry) => path.join(entry, 'SKILL.md'))
|
|
260
|
+
.sort();
|
|
261
|
+
}
|
|
262
|
+
if (provider === 'codex') {
|
|
263
|
+
return listDir(root)
|
|
264
|
+
.filter((entry) => isDir(entry) && isFile(path.join(entry, 'SKILL.md')))
|
|
265
|
+
.map((entry) => path.join(entry, 'SKILL.md'))
|
|
266
|
+
.sort();
|
|
267
|
+
}
|
|
268
|
+
const matcher = /^(custom-|sr-).+\.md$/;
|
|
138
269
|
return listDir(root)
|
|
139
270
|
.filter((entry) => isFile(entry) && matcher.test(path.basename(entry)))
|
|
140
271
|
.sort();
|
|
141
272
|
}
|
|
273
|
+
function isRecord(value) {
|
|
274
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
275
|
+
}
|
|
276
|
+
function validateStringRecord(value, field) {
|
|
277
|
+
if (!isRecord(value))
|
|
278
|
+
return [`${field} must be an object of string values`];
|
|
279
|
+
return Object.entries(value)
|
|
280
|
+
.filter(([, item]) => typeof item !== 'string')
|
|
281
|
+
.map(([key]) => `${field}.${key} must be a string`);
|
|
282
|
+
}
|
|
283
|
+
function validateStringArray(value, field) {
|
|
284
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|
|
285
|
+
return [`${field} must be an array of strings`];
|
|
286
|
+
}
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
function validateKimiMcpServer(name, value) {
|
|
290
|
+
const field = `mcpServers.${name}`;
|
|
291
|
+
if (!isRecord(value))
|
|
292
|
+
return [`${field} must be an object`];
|
|
293
|
+
const errors = [];
|
|
294
|
+
let transport = value.transport;
|
|
295
|
+
if (transport === undefined) {
|
|
296
|
+
if (typeof value.command === 'string')
|
|
297
|
+
transport = 'stdio';
|
|
298
|
+
else if (typeof value.url === 'string')
|
|
299
|
+
transport = 'http';
|
|
300
|
+
}
|
|
301
|
+
if (transport !== 'stdio' && transport !== 'http' && transport !== 'sse') {
|
|
302
|
+
return [`${field} must declare a command, a URL, or a supported transport`];
|
|
303
|
+
}
|
|
304
|
+
if (transport === 'stdio') {
|
|
305
|
+
if (typeof value.command !== 'string' || value.command.length === 0) {
|
|
306
|
+
errors.push(`${field}.command must be a non-empty string`);
|
|
307
|
+
}
|
|
308
|
+
if (value.args !== undefined) {
|
|
309
|
+
errors.push(...validateStringArray(value.args, `${field}.args`));
|
|
310
|
+
}
|
|
311
|
+
if (value.env !== undefined) {
|
|
312
|
+
errors.push(...validateStringRecord(value.env, `${field}.env`));
|
|
313
|
+
}
|
|
314
|
+
if (value.cwd !== undefined && typeof value.cwd !== 'string') {
|
|
315
|
+
errors.push(`${field}.cwd must be a string`);
|
|
316
|
+
}
|
|
317
|
+
if (value.executor !== undefined &&
|
|
318
|
+
value.executor !== 'local' &&
|
|
319
|
+
value.executor !== 'kaos') {
|
|
320
|
+
errors.push(`${field}.executor must be "local" or "kaos"`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
if (typeof value.url !== 'string') {
|
|
325
|
+
errors.push(`${field}.url must be a valid URL`);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
try {
|
|
329
|
+
new URL(value.url);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
errors.push(`${field}.url must be a valid URL`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (value.headers !== undefined) {
|
|
336
|
+
errors.push(...validateStringRecord(value.headers, `${field}.headers`));
|
|
337
|
+
}
|
|
338
|
+
if (value.auth !== undefined && value.auth !== 'oauth') {
|
|
339
|
+
errors.push(`${field}.auth must be "oauth"`);
|
|
340
|
+
}
|
|
341
|
+
if (value.bearerTokenEnvVar !== undefined &&
|
|
342
|
+
(typeof value.bearerTokenEnvVar !== 'string' ||
|
|
343
|
+
value.bearerTokenEnvVar.length === 0)) {
|
|
344
|
+
errors.push(`${field}.bearerTokenEnvVar must be a non-empty string`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (value.enabled !== undefined && typeof value.enabled !== 'boolean') {
|
|
348
|
+
errors.push(`${field}.enabled must be a boolean`);
|
|
349
|
+
}
|
|
350
|
+
for (const timeoutField of ['startupTimeoutMs', 'toolTimeoutMs']) {
|
|
351
|
+
const timeout = value[timeoutField];
|
|
352
|
+
if (timeout !== undefined &&
|
|
353
|
+
(typeof timeout !== 'number' ||
|
|
354
|
+
!Number.isInteger(timeout) ||
|
|
355
|
+
timeout < 1)) {
|
|
356
|
+
errors.push(`${field}.${timeoutField} must be a positive integer`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
for (const toolsField of ['enabledTools', 'disabledTools']) {
|
|
360
|
+
if (value[toolsField] !== undefined) {
|
|
361
|
+
errors.push(...validateStringArray(value[toolsField], `${field}.${toolsField}`));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return errors;
|
|
365
|
+
}
|
|
366
|
+
function inspectKimiMcpConfig(filePath) {
|
|
367
|
+
let parsed;
|
|
368
|
+
try {
|
|
369
|
+
parsed = JSON.parse(readTextFile(filePath));
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return { errors: ['file is not valid JSON'], serverCount: 0 };
|
|
373
|
+
}
|
|
374
|
+
if (!isRecord(parsed)) {
|
|
375
|
+
return { errors: ['root must be a JSON object'], serverCount: 0 };
|
|
376
|
+
}
|
|
377
|
+
// Kimi defaults a missing mcpServers field to an empty object, so `{}` is a
|
|
378
|
+
// valid upstream config. When present, every entry must match Kimi 0.27's
|
|
379
|
+
// stdio/HTTP/SSE schema.
|
|
380
|
+
const serversValue = parsed.mcpServers ?? {};
|
|
381
|
+
if (!isRecord(serversValue)) {
|
|
382
|
+
return {
|
|
383
|
+
errors: ['mcpServers must be an object keyed by server name'],
|
|
384
|
+
serverCount: 0,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
const errors = Object.entries(serversValue).flatMap(([name, value]) => validateKimiMcpServer(name, value));
|
|
388
|
+
return { errors, serverCount: Object.keys(serversValue).length };
|
|
389
|
+
}
|
|
390
|
+
function summarizePaths(paths) {
|
|
391
|
+
const shown = paths.slice(0, 3).join(', ');
|
|
392
|
+
return paths.length <= 3 ? shown : `${shown} (+${paths.length - 3} more)`;
|
|
393
|
+
}
|
|
394
|
+
function readCorePackageVersion() {
|
|
395
|
+
try {
|
|
396
|
+
const parsed = JSON.parse(readTextFile(path.join(CORE_PACKAGE_ROOT, 'package.json')));
|
|
397
|
+
return typeof parsed.version === 'string' && parsed.version.trim().length > 0
|
|
398
|
+
? parsed.version.trim()
|
|
399
|
+
: null;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
function inspectKimiManifest(artifactRoot, manifestPath) {
|
|
406
|
+
let parsed;
|
|
407
|
+
try {
|
|
408
|
+
parsed = JSON.parse(readTextFile(manifestPath));
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
return { errors: ['file is not valid JSON'], version: null, artifactCount: 0 };
|
|
412
|
+
}
|
|
413
|
+
if (!isRecord(parsed)) {
|
|
414
|
+
return {
|
|
415
|
+
errors: ['root must be a JSON object'],
|
|
416
|
+
version: null,
|
|
417
|
+
artifactCount: 0,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
const errors = [];
|
|
421
|
+
const version = typeof parsed.version === 'string' && parsed.version.trim().length > 0
|
|
422
|
+
? parsed.version.trim()
|
|
423
|
+
: null;
|
|
424
|
+
if (!version)
|
|
425
|
+
errors.push('version must be a non-empty string');
|
|
426
|
+
const currentVersion = readCorePackageVersion();
|
|
427
|
+
if (!currentVersion) {
|
|
428
|
+
errors.push('running Core package version could not be read');
|
|
429
|
+
}
|
|
430
|
+
else if (version && version !== currentVersion) {
|
|
431
|
+
errors.push(`version ${version} does not match running Core ${currentVersion}`);
|
|
432
|
+
}
|
|
433
|
+
const markerPath = path.join(artifactRoot, '.specrails', 'specrails-version');
|
|
434
|
+
if (!isFile(markerPath)) {
|
|
435
|
+
errors.push('specrails-version marker is missing');
|
|
436
|
+
}
|
|
437
|
+
else if (version && readTextFile(markerPath).trim() !== version) {
|
|
438
|
+
errors.push('specrails-version marker does not match manifest version');
|
|
439
|
+
}
|
|
440
|
+
if (typeof parsed.installed_at !== 'string' ||
|
|
441
|
+
!Number.isFinite(Date.parse(parsed.installed_at))) {
|
|
442
|
+
errors.push('installed_at must be a valid timestamp');
|
|
443
|
+
}
|
|
444
|
+
const providers = Array.isArray(parsed.providers)
|
|
445
|
+
? parsed.providers.filter(isProvider)
|
|
446
|
+
: [];
|
|
447
|
+
if (!Array.isArray(parsed.providers) ||
|
|
448
|
+
providers.length !== parsed.providers.length ||
|
|
449
|
+
providers.length === 0) {
|
|
450
|
+
errors.push('providers must be a non-empty array of supported providers');
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
if (new Set(providers).size !== providers.length) {
|
|
454
|
+
errors.push('providers must not contain duplicates');
|
|
455
|
+
}
|
|
456
|
+
if (!providers.includes('kimi')) {
|
|
457
|
+
errors.push('providers does not record kimi');
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
if (!isProvider(parsed.primary_provider)) {
|
|
461
|
+
errors.push('primary_provider must be a supported provider');
|
|
462
|
+
}
|
|
463
|
+
else if (!providers.includes(parsed.primary_provider)) {
|
|
464
|
+
errors.push('primary_provider must also appear in providers');
|
|
465
|
+
}
|
|
466
|
+
if (!isRecord(parsed.artifacts) || Object.keys(parsed.artifacts).length === 0) {
|
|
467
|
+
errors.push('artifacts must be a non-empty checksum object');
|
|
468
|
+
return { errors, version, artifactCount: 0 };
|
|
469
|
+
}
|
|
470
|
+
const actualArtifacts = parsed.artifacts;
|
|
471
|
+
const malformedDigests = Object.entries(actualArtifacts)
|
|
472
|
+
.filter(([, digest]) => typeof digest !== 'string' || !SHA256_DIGEST.test(digest))
|
|
473
|
+
.map(([artifact]) => artifact);
|
|
474
|
+
if (malformedDigests.length > 0) {
|
|
475
|
+
errors.push(`artifacts contains invalid sha256 digests: ${summarizePaths(malformedDigests)}`);
|
|
476
|
+
}
|
|
477
|
+
try {
|
|
478
|
+
const expectedArtifacts = buildManifest({
|
|
479
|
+
scriptDir: CORE_PACKAGE_ROOT,
|
|
480
|
+
repoRoot: artifactRoot,
|
|
481
|
+
version: currentVersion ?? version ?? 'unknown',
|
|
482
|
+
installedAt: '1970-01-01T00:00:00Z',
|
|
483
|
+
}).artifacts;
|
|
484
|
+
const actualKeys = Object.keys(actualArtifacts);
|
|
485
|
+
const expectedKeys = Object.keys(expectedArtifacts);
|
|
486
|
+
const missing = expectedKeys.filter((key) => !(key in actualArtifacts));
|
|
487
|
+
const unexpected = actualKeys.filter((key) => !(key in expectedArtifacts));
|
|
488
|
+
const changed = expectedKeys.filter((key) => key in actualArtifacts && actualArtifacts[key] !== expectedArtifacts[key]);
|
|
489
|
+
if (missing.length > 0) {
|
|
490
|
+
errors.push(`artifacts is missing: ${summarizePaths(missing)}`);
|
|
491
|
+
}
|
|
492
|
+
if (unexpected.length > 0) {
|
|
493
|
+
errors.push(`artifacts has unknown entries: ${summarizePaths(unexpected)}`);
|
|
494
|
+
}
|
|
495
|
+
if (changed.length > 0) {
|
|
496
|
+
errors.push(`artifacts checksum mismatch: ${summarizePaths(changed)}`);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
errors.push('packaged Core artifact checksums could not be computed');
|
|
501
|
+
}
|
|
502
|
+
return {
|
|
503
|
+
errors,
|
|
504
|
+
version,
|
|
505
|
+
artifactCount: Object.keys(actualArtifacts).length,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
function checkKimiArtifacts(args) {
|
|
509
|
+
const skillRoot = path.join(args.artifactRoot, '.kimi-code', 'skills');
|
|
510
|
+
const legacyRoleRoot = path.join(skillRoot, 'rails');
|
|
511
|
+
const staleNestedRoles = listDir(legacyRoleRoot).filter((entry) => isDir(entry));
|
|
512
|
+
if (staleNestedRoles.length > 0) {
|
|
513
|
+
args.addFail(`Kimi role skills: stale nested skills/rails layout contains ` +
|
|
514
|
+
staleNestedRoles.map((entry) => path.basename(entry)).join(', '), 'Run: npx specrails-core update --provider kimi; resolve any reported custom-role conflict manually');
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
args.addPass('Kimi role layout: all roles are direct children of .kimi-code/skills');
|
|
518
|
+
}
|
|
519
|
+
const runnerRoot = path.join(args.artifactRoot, '.kimi-code', 'specrails');
|
|
520
|
+
const requiredRunnerFiles = [
|
|
521
|
+
'run-skill.mjs',
|
|
522
|
+
path.join('vendor', 'js-yaml', 'js-yaml.mjs'),
|
|
523
|
+
path.join('vendor', 'js-yaml', 'LICENSE'),
|
|
524
|
+
path.join('vendor', 'js-yaml', 'NOTICE.md'),
|
|
525
|
+
];
|
|
526
|
+
const missingRunnerFiles = requiredRunnerFiles.filter((relative) => !isFile(path.join(runnerRoot, relative)));
|
|
527
|
+
const mismatchedRunnerFiles = missingRunnerFiles.length === 0
|
|
528
|
+
? requiredRunnerFiles.filter((relative) => {
|
|
529
|
+
const installed = path.join(runnerRoot, relative);
|
|
530
|
+
const packaged = path.join(CORE_PACKAGE_ROOT, 'templates', 'kimi', 'specrails', relative);
|
|
531
|
+
try {
|
|
532
|
+
return !readFileSync(installed).equals(readFileSync(packaged));
|
|
533
|
+
}
|
|
534
|
+
catch {
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
537
|
+
})
|
|
538
|
+
: [];
|
|
539
|
+
if (missingRunnerFiles.length === 0 &&
|
|
540
|
+
mismatchedRunnerFiles.length === 0) {
|
|
541
|
+
args.addPass('Kimi headless skill runner: complete managed bundle integrity verified outside the skill scanner');
|
|
542
|
+
}
|
|
543
|
+
else if (missingRunnerFiles.length > 0) {
|
|
544
|
+
args.addFail(`Kimi headless skill runner: missing ${missingRunnerFiles.join(', ')} ` +
|
|
545
|
+
'under .kimi-code/specrails', 'Run: npx specrails-core update --provider kimi');
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
args.addFail(`Kimi headless skill runner: managed content mismatch in ` +
|
|
549
|
+
mismatchedRunnerFiles.join(', '), 'Run: npx specrails-core update --provider kimi');
|
|
550
|
+
}
|
|
551
|
+
const missingSpecrails = KIMI_MANAGED_WORKFLOW_SKILLS.filter((name) => !isFile(path.join(skillRoot, name, 'SKILL.md')));
|
|
552
|
+
if (KIMI_MANAGED_WORKFLOW_SKILLS.length === 0) {
|
|
553
|
+
args.addFail('Kimi workflow skills: packaged managed catalog is unavailable', 'Reinstall specrails-core, then run: npx specrails-core update --provider kimi');
|
|
554
|
+
}
|
|
555
|
+
else if (missingSpecrails.length === 0) {
|
|
556
|
+
args.addPass(`Kimi workflow skills: all ${KIMI_MANAGED_WORKFLOW_SKILLS.length} managed workflows present`);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
args.addFail(`Kimi workflow skills: missing ${missingSpecrails.join(', ')}`, 'Run: npx specrails-core update --provider kimi');
|
|
560
|
+
}
|
|
561
|
+
const missingOpenSpec = KIMI_REQUIRED_OPENSPEC_SKILLS.filter((name) => !isFile(path.join(skillRoot, name, 'SKILL.md')));
|
|
562
|
+
if (missingOpenSpec.length === 0) {
|
|
563
|
+
args.addPass(`Kimi OpenSpec skills: all ${KIMI_REQUIRED_OPENSPEC_SKILLS.length} present`);
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
args.addFail(`Kimi OpenSpec skills: missing ${missingOpenSpec.join(', ')}`, 'Run: npx specrails-core update --provider kimi');
|
|
567
|
+
}
|
|
568
|
+
const legacyRoot = path.join(args.codeRoot, '.kimi', 'skills');
|
|
569
|
+
const staleLegacy = listDir(legacyRoot).filter((entry) => isDir(entry) && path.basename(entry).startsWith('openspec-'));
|
|
570
|
+
if (staleLegacy.length > 0) {
|
|
571
|
+
args.addFail(`Kimi OpenSpec skills: stale generated .kimi/skills output found`, 'Run: npx specrails-core update --provider kimi');
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
args.addPass('Kimi OpenSpec layout: no stale .kimi/skills output');
|
|
575
|
+
}
|
|
576
|
+
const mcpPath = path.join(args.artifactRoot, '.kimi-code', 'mcp.json');
|
|
577
|
+
if (isFile(mcpPath)) {
|
|
578
|
+
const mcp = inspectKimiMcpConfig(mcpPath);
|
|
579
|
+
if (mcp.errors.length === 0) {
|
|
580
|
+
args.addPass(`.kimi-code/mcp.json: valid (${mcp.serverCount} server(s))`);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
args.addFail(`.kimi-code/mcp.json: invalid (${mcp.errors.join('; ')})`, 'Fix the JSON using `kimi` → `/mcp-config`, or restore a valid config and retry');
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
args.addFail('.kimi-code/mcp.json: missing', 'Run: npx specrails-core update --provider kimi');
|
|
588
|
+
}
|
|
589
|
+
const manifestPath = path.join(args.artifactRoot, '.specrails', 'specrails-manifest.json');
|
|
590
|
+
if (isFile(manifestPath)) {
|
|
591
|
+
const manifest = inspectKimiManifest(args.artifactRoot, manifestPath);
|
|
592
|
+
if (manifest.errors.length === 0) {
|
|
593
|
+
args.addPass(`SpecRails manifest: valid for Core ${manifest.version} ` +
|
|
594
|
+
`(${manifest.artifactCount} packaged source checksums verified; records kimi)`);
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
args.addFail(`SpecRails manifest: invalid (${manifest.errors.join('; ')})`, 'Run: npx specrails-core update --provider kimi');
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
601
|
+
args.addFail('SpecRails manifest: missing', 'Run: npx specrails-core update --provider kimi');
|
|
602
|
+
}
|
|
603
|
+
}
|
|
142
604
|
function appendDoctorLog(passed, failed) {
|
|
143
605
|
try {
|
|
144
606
|
const logDir = path.join(homedir(), '.specrails');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/installer/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/installer/commands/doctor.ts"],"names":[],"mappings":"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"}
|