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