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
@@ -2,8 +2,7 @@ import { type Provider } from '../phases/install-config.js';
2
2
  /**
3
3
  * `npx specrails-core init` entry point.
4
4
  *
5
- * Flags consumed (must remain in sync with ALLOWED_FLAGS in
6
- * bin/specrails-core.cjs until Phase 5):
5
+ * Flags consumed:
7
6
  * --root-dir <path> Target repo (default: cwd)
8
7
  * --yes / -y Non-interactive; auto-init git + accept defaults
9
8
  * --provider <name> Force provider (claude, codex, gemini, or kimi)
@@ -26,11 +25,11 @@ export interface InitFlags {
26
25
  relocate?: boolean;
27
26
  'hub-json'?: boolean;
28
27
  }
29
- export interface InitResult {
28
+ interface InitResult {
30
29
  repoRoot: string;
31
30
  provider: Provider;
32
31
  }
33
- export type WorkspaceProviderSelections = Partial<Record<Provider, string[]>>;
32
+ type WorkspaceProviderSelections = Partial<Record<Provider, string[]>>;
34
33
  /**
35
34
  * Snapshot the provider/role inventory exposed by one live workspace before a
36
35
  * global framework version swap. This matters on Windows: directory junctions
@@ -40,25 +39,6 @@ export type WorkspaceProviderSelections = Partial<Record<Provider, string[]>>;
40
39
  * optional role selection during that refresh.
41
40
  */
42
41
  export declare function snapshotWorkspaceProviderSelections(workspace: string): WorkspaceProviderSelections;
43
- interface ReassembleWorkspaceProvidersInput {
44
- workspace: string;
45
- frameworkDir: string;
46
- version: string;
47
- codeRoot: string;
48
- scriptDir: string;
49
- selectedProvider: Provider;
50
- selectedAgents?: string[];
51
- previousSelections: WorkspaceProviderSelections;
52
- copyStatics: boolean;
53
- }
54
- /**
55
- * Refresh every provider already represented in the project plus the provider
56
- * selected by the current operation. POSIX symlinks continue to follow
57
- * `framework/current`; Windows junctions do not reliably preserve that
58
- * indirection, so rebuilding all live links is required for true
59
- * multi-provider version parity.
60
- */
61
- export declare function reassembleWorkspaceProviders(input: ReassembleWorkspaceProvidersInput): Provider[];
62
42
  /**
63
43
  * Entry called by cli.ts. Returns a {@link InitResult} on success;
64
44
  * throws a typed error (translated to an exit code by the outer CLI)
@@ -72,7 +52,7 @@ export declare function runInit(flags: InitFlags): Promise<InitResult>;
72
52
  * points at the v5 extension path.
73
53
  */
74
54
  export declare function warnUnknownSelectedAgents(selected: string[] | undefined): void;
75
- export interface EnsureFrameworkInput {
55
+ interface EnsureFrameworkInput {
76
56
  scriptDir: string;
77
57
  frameworkDir: string;
78
58
  provider: Provider;
@@ -143,5 +123,4 @@ export declare const KIMI_REQUIRED_OPENSPEC_SKILLS: readonly ["openspec-propose"
143
123
  */
144
124
  export declare function normalizeKimiOpenSpecSkills(repoRoot: string, artifactRoot: string): string[];
145
125
  export declare function normalizeGeminiOpenSpecSkills(repoRoot: string, artifactRoot: string): string[];
146
- export declare function installOpenSpecProject(repoRoot: string, provider: Provider, artifactRoot?: string): Promise<void>;
147
126
  export {};
@@ -97,7 +97,7 @@ function workspaceHasManagedProviderLink(providerRoot, provider) {
97
97
  * indirection, so rebuilding all live links is required for true
98
98
  * multi-provider version parity.
99
99
  */
100
- export function reassembleWorkspaceProviders(input) {
100
+ function reassembleWorkspaceProviders(input) {
101
101
  const providers = WORKSPACE_PROVIDER_ORDER.filter((provider) => provider === input.selectedProvider ||
102
102
  Object.prototype.hasOwnProperty.call(input.previousSelections, provider));
103
103
  for (const provider of providers) {
@@ -129,9 +129,8 @@ export async function runInit(flags) {
129
129
  const repoRoot = path.resolve(typeof flags['root-dir'] === 'string' ? flags['root-dir'] : process.cwd());
130
130
  const autoYes = flags.yes === true || flags.y === true;
131
131
  const skipPrereqs = process.env.SPECRAILS_SKIP_PREREQS === '1';
132
- // Validate an explicit provider before consulting --from-config. The TUI
133
- // intentionally re-enters init with BOTH flags; accepting that flow is safe
134
- // only when the generated config agrees with the original explicit choice.
132
+ // Validate an explicit provider before consulting --from-config; when both
133
+ // are given, the config must agree with the explicit choice.
135
134
  let explicitProvider;
136
135
  if (flags.provider !== undefined) {
137
136
  if (typeof flags.provider !== 'string' ||
@@ -257,7 +256,6 @@ export async function runInit(flags) {
257
256
  recordSuccessfulInstall(repoRoot, { home: process.env.SPECRAILS_REGISTRY_HOME, providers: [prereqs.provider], coreVersion: version });
258
257
  step('Installation complete');
259
258
  info('Agents, commands, and rules were placed directly — no follow-up step required.');
260
- info('Extend the core trio (sr-architect, sr-developer, sr-reviewer) via profiles + custom-*.md agents.');
261
259
  // Terminal sentinel for programmatic consumers (specrails-desktop's setup
262
260
  // wizard matches this exact line via regex to mark the "init complete"
263
261
  // checkpoint). The sentinel line below is FROZEN — the downstream setup
@@ -282,7 +280,7 @@ export function warnUnknownSelectedAgents(selected) {
282
280
  for (const id of selected) {
283
281
  if (!CORE_AGENTS.has(id)) {
284
282
  warn(`install-config.yaml selects agent '${id}', which specrails-core no longer ships — ` +
285
- `skipping (removed in v5; use a .claude/agents/custom-*.md agent declared in a profile).`);
283
+ `skipping (removed in v5).`);
286
284
  }
287
285
  }
288
286
  }
@@ -658,7 +656,7 @@ function removeDirectoryIfEmpty(dir) {
658
656
  if (isDir(dir) && listDir(dir).length === 0)
659
657
  removePath(dir);
660
658
  }
661
- export async function installOpenSpecProject(repoRoot, provider, artifactRoot = repoRoot) {
659
+ async function installOpenSpecProject(repoRoot, provider, artifactRoot = repoRoot) {
662
660
  if (process.env.SPECRAILS_SKIP_OPENSPEC_INIT === '1') {
663
661
  if (provider === 'kimi') {
664
662
  const generatedRoots = [
@@ -709,4 +707,3 @@ export async function installOpenSpecProject(repoRoot, provider, artifactRoot =
709
707
  }
710
708
  }
711
709
  }
712
- //# sourceMappingURL=init.js.map
@@ -1,30 +1,15 @@
1
1
  import { type Provider } from './provider-detect.js';
2
- /**
3
- * Stable provider order for the global framework store. `framework/current` is
4
- * shared by every relocated workspace, so a version transition must carry
5
- * forward every provider that can still have live links through that pointer.
6
- */
7
- export declare const FRAMEWORK_PROVIDERS: readonly Provider[];
8
- export interface ResolveRequiredFrameworkProvidersInput {
2
+ interface ResolveRequiredFrameworkProvidersInput {
9
3
  frameworkDir: string;
10
4
  /** Providers requested by the lifecycle operation that is about to swap. */
11
5
  requested?: readonly Provider[];
12
6
  /** Registry home. Defaults to SPECRAILS_REGISTRY_HOME / the normal home. */
13
7
  registryHome?: string;
14
8
  }
15
- export interface MaterializeFrameworkVersionInput extends ResolveRequiredFrameworkProvidersInput {
9
+ interface MaterializeFrameworkVersionInput extends ResolveRequiredFrameworkProvidersInput {
16
10
  scriptDir: string;
17
11
  version: string;
18
12
  }
19
- /**
20
- * Discover providers represented by a framework version.
21
- *
22
- * A provider is included when either its subtree or its stamp exists. For the
23
- * current version this is deliberately conservative: an interrupted/legacy
24
- * materialization without a stamp may still have live workspace symlinks, so
25
- * the next version must carry that provider forward rather than dropping it.
26
- */
27
- export declare function discoverFrameworkProviders(frameworkDir: string, version: string): Provider[];
28
13
  /**
29
14
  * Compute the provider set that MUST exist in a destination version before the
30
15
  * process may move the global `current` pointer:
@@ -51,3 +36,4 @@ export declare function assertFrameworkVersionComplete(frameworkDir: string, ver
51
36
  * fails, existing workspaces continue resolving through the previous version.
52
37
  */
53
38
  export declare function materializeFrameworkVersion(input: MaterializeFrameworkVersionInput): Provider[];
39
+ export {};
@@ -10,7 +10,7 @@ import { ensureCurrentSymlink, frameworkMaterializationProblem, frameworkStampPa
10
10
  * shared by every relocated workspace, so a version transition must carry
11
11
  * forward every provider that can still have live links through that pointer.
12
12
  */
13
- export const FRAMEWORK_PROVIDERS = [
13
+ const FRAMEWORK_PROVIDERS = [
14
14
  'claude',
15
15
  'codex',
16
16
  'gemini',
@@ -34,7 +34,7 @@ function stableProviders(values) {
34
34
  * materialization without a stamp may still have live workspace symlinks, so
35
35
  * the next version must carry that provider forward rather than dropping it.
36
36
  */
37
- export function discoverFrameworkProviders(frameworkDir, version) {
37
+ function discoverFrameworkProviders(frameworkDir, version) {
38
38
  const versionDir = path.join(frameworkDir, version);
39
39
  return FRAMEWORK_PROVIDERS.filter((provider) => {
40
40
  const { providerDir } = derivedPaths(provider);
@@ -124,4 +124,3 @@ export function materializeFrameworkVersion(input) {
124
124
  ensureCurrentSymlink(input.frameworkDir, input.version);
125
125
  return required;
126
126
  }
127
- //# sourceMappingURL=framework-lifecycle.js.map
@@ -4,9 +4,9 @@ import { InstallerError } from '../util/errors.js';
4
4
  */
5
5
  export type Provider = 'claude' | 'codex' | 'gemini' | 'kimi';
6
6
  /** Cost / capability preset for the model picker. */
7
- export type ModelPreset = 'balanced' | 'budget' | 'max';
7
+ type ModelPreset = 'balanced' | 'budget' | 'max';
8
8
  /** Provider-native model selection retained verbatim in install-config.yaml. */
9
- export interface InstallModelConfig {
9
+ interface InstallModelConfig {
10
10
  preset: ModelPreset;
11
11
  defaults: {
12
12
  model: string;
@@ -14,11 +14,10 @@ export interface InstallModelConfig {
14
14
  overrides: Record<string, string>;
15
15
  }
16
16
  /**
17
- * Shape of the `.specrails/install-config.yaml` file — the single
18
- * source of truth the TUI writes and the installer reads. Fields map
19
- * 1:1 onto the grep-based parser in the retired install.sh.
17
+ * Shape of the `.specrails/install-config.yaml` file that
18
+ * specrails-desktop writes and `init --from-config` reads.
20
19
  */
21
- export interface InstallConfig {
20
+ interface InstallConfig {
22
21
  version: 1;
23
22
  provider: Provider;
24
23
  agents: {
@@ -52,8 +51,7 @@ export declare function resolveConfigPath(repoRoot: string, explicit?: string):
52
51
  export declare function loadInstallConfig(configPath: string): InstallConfig | null;
53
52
  /**
54
53
  * Validates an already-parsed YAML document. Collects every error
55
- * before throwing so the user sees them all at once (matches the
56
- * bash installer's `_config_errors` accumulator behaviour).
54
+ * before throwing so the user sees them all at once.
57
55
  */
58
56
  export declare function validateInstallConfig(raw: unknown): InstallConfig;
59
57
  /**
@@ -62,3 +60,4 @@ export declare function validateInstallConfig(raw: unknown): InstallConfig;
62
60
  * paths (not wired yet) and by tests.
63
61
  */
64
62
  export declare function writeInstallConfig(configPath: string, config: InstallConfig): void;
63
+ export {};
@@ -36,10 +36,7 @@ export function resolveProviderModelConfig(provider, preset = 'balanced') {
36
36
  return {
37
37
  preset,
38
38
  defaults: { model: 'sonnet' },
39
- overrides: {
40
- 'sr-architect': 'opus',
41
- 'sr-product-manager': 'opus',
42
- },
39
+ overrides: { 'sr-architect': 'opus' },
43
40
  };
44
41
  }
45
42
  }
@@ -86,8 +83,7 @@ export function loadInstallConfig(configPath) {
86
83
  }
87
84
  /**
88
85
  * Validates an already-parsed YAML document. Collects every error
89
- * before throwing so the user sees them all at once (matches the
90
- * bash installer's `_config_errors` accumulator behaviour).
86
+ * before throwing so the user sees them all at once.
91
87
  */
92
88
  export function validateInstallConfig(raw) {
93
89
  const errors = [];
@@ -262,4 +258,3 @@ export function writeInstallConfig(configPath, config) {
262
258
  throw new FilesystemError(`failed to write install-config.yaml: ${err.message}`, configPath);
263
259
  }
264
260
  }
265
- //# sourceMappingURL=install-config.js.map
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Shape of the `.specrails/specrails-manifest.json` file the installer
3
- * writes at install time. Consumers (specrails-desktop's compat check,
4
- * the `doctor` command, update.sh) parse it to detect template drift.
3
+ * writes at install time. specrails-desktop reads it to detect template drift.
5
4
  */
6
- export interface SpecrailsManifest {
5
+ interface SpecrailsManifest {
7
6
  version: string;
8
7
  installed_at: string;
9
8
  /** Provider inventory is emitted only by provider-aware lifecycle callers. */
@@ -15,12 +14,12 @@ export interface SpecrailsManifest {
15
14
  * Computes a stable sha256 digest for a file, returned as `sha256:<hex>`.
16
15
  */
17
16
  export declare function sha256Of(filePath: string): string;
18
- export interface BuildManifestInput {
17
+ interface BuildManifestInput {
19
18
  /** Absolute path to the specrails-core source package directory. */
20
19
  scriptDir: string;
21
20
  /** Absolute path to the user's repo root where the manifest is written. */
22
21
  repoRoot: string;
23
- /** Version string from the specrails-core VERSION file. */
22
+ /** specrails-core package version. */
24
23
  version: string;
25
24
  /** Override "installed_at" — exposed for deterministic testing. */
26
25
  installedAt?: string;
@@ -29,8 +28,7 @@ export interface BuildManifestInput {
29
28
  primaryProvider?: string;
30
29
  }
31
30
  /**
32
- * Walks `templates/**` plus the bundled doctor command file and
33
- * produces a stable-sorted manifest.
31
+ * Walks `templates/**` and produces a stable-sorted manifest.
34
32
  *
35
33
  * Stable-sort rule: artifact keys are sorted ascending by POSIX path.
36
34
  */
@@ -43,3 +41,4 @@ export declare function writeManifestFiles(repoRoot: string, manifest: Specrails
43
41
  manifestPath: string;
44
42
  versionPath: string;
45
43
  };
44
+ export {};
@@ -12,8 +12,7 @@ export function sha256Of(filePath) {
12
12
  return `sha256:${hash}`;
13
13
  }
14
14
  /**
15
- * Walks `templates/**` plus the bundled doctor command file and
16
- * produces a stable-sorted manifest.
15
+ * Walks `templates/**` and produces a stable-sorted manifest.
17
16
  *
18
17
  * Stable-sort rule: artifact keys are sorted ascending by POSIX path.
19
18
  */
@@ -25,8 +24,6 @@ export function buildManifest(input) {
25
24
  const rel = path.relative(input.scriptDir, absFile).split(path.sep).join('/');
26
25
  artifacts[rel] = sha256Of(absFile);
27
26
  });
28
- const doctorPath = path.join(input.scriptDir, 'commands', 'doctor.md');
29
- artifacts['commands/specrails/doctor.md'] = sha256Of(doctorPath);
30
27
  const manifest = {
31
28
  version: input.version,
32
29
  installed_at,
@@ -71,8 +68,7 @@ export function writeManifestFiles(repoRoot, manifest) {
71
68
  }
72
69
  /**
73
70
  * Enumerates files under `templates/` excluding `node_modules/` and
74
- * package-lock files, matching the bash helper's find clause:
75
- * find ... -not -path "(star)/node_modules/(star)" -not -name 'package-lock.json'
71
+ * package-lock files.
76
72
  */
77
73
  function walkManifestSources(root) {
78
74
  const collected = [];
@@ -111,4 +107,3 @@ function sortKeys(obj) {
111
107
  }
112
108
  return out;
113
109
  }
114
- //# sourceMappingURL=manifest.js.map
@@ -8,13 +8,12 @@ import { type Provider, type ProviderAvailability } from './provider-detect.js';
8
8
  export declare const MIN_NODE_VERSION = "20.19.0";
9
9
  export declare function isSupportedNodeVersion(version: string): boolean;
10
10
  /**
11
- * Phase 1 prerequisite bundle. Mirrors install.sh's Phase 1 flow but
12
- * with explicit options rather than a grab-bag of globals.
11
+ * Phase 1 prerequisite bundle.
13
12
  *
14
13
  * Returns the resolved inputs later phases need — primarily the
15
14
  * selected provider and the detected CLI availability.
16
15
  */
17
- export interface PrereqOptions {
16
+ interface PrereqOptions {
18
17
  /** Absolute path to the target repository root. */
19
18
  repoRoot: string;
20
19
  /** --yes / -y equivalent — auto-init git, skip interactive prompts. */
@@ -24,7 +23,7 @@ export interface PrereqOptions {
24
23
  /** SPECRAILS_SKIP_PREREQS=1 equivalent — relax hard failures for CI. */
25
24
  skipPrereqs: boolean;
26
25
  }
27
- export interface PrereqResult {
26
+ interface PrereqResult {
28
27
  availability: ProviderAvailability;
29
28
  provider: Provider;
30
29
  /**
@@ -36,7 +35,7 @@ export interface PrereqResult {
36
35
  */
37
36
  ossSignals: OssSignals;
38
37
  }
39
- export interface OssSignals {
38
+ interface OssSignals {
40
39
  hasGh: boolean;
41
40
  publicRepo: boolean;
42
41
  hasCi: boolean;
@@ -45,7 +44,7 @@ export interface OssSignals {
45
44
  }
46
45
  /**
47
46
  * Orchestrates every prerequisite check that must pass before the
48
- * installer proceeds to Phase 3 (scaffolding). Emits ok/warn/info
49
- * lines matching the retired bash output.
47
+ * installer proceeds to Phase 3 (scaffolding).
50
48
  */
51
49
  export declare function checkPrerequisites(options: PrereqOptions): Promise<PrereqResult>;
50
+ export {};
@@ -28,8 +28,7 @@ export function isSupportedNodeVersion(version) {
28
28
  }
29
29
  /**
30
30
  * Orchestrates every prerequisite check that must pass before the
31
- * installer proceeds to Phase 3 (scaffolding). Emits ok/warn/info
32
- * lines matching the retired bash output.
31
+ * installer proceeds to Phase 3 (scaffolding).
33
32
  */
34
33
  export async function checkPrerequisites(options) {
35
34
  const nodeVersion = process.versions.node;
@@ -42,8 +41,8 @@ export async function checkPrerequisites(options) {
42
41
  if (!(await gitInstalled())) {
43
42
  throw new PrerequisiteError('git is required but not on PATH. Install git: https://git-scm.com/');
44
43
  }
45
- // 1.1 Git repository — auto-init when --yes, otherwise assume caller
46
- // resolved the prompt upstream (bin/specrails-core.cjs / desktop app TUI).
44
+ // 1.1 Git repository — auto-init when --yes; otherwise the caller must
45
+ // provide a repository.
47
46
  if (!(await isGitRepo(options.repoRoot))) {
48
47
  if (!options.autoYes) {
49
48
  throw new PrerequisiteError(`${options.repoRoot} is not a git repository. ` +
@@ -100,7 +99,7 @@ export async function checkPrerequisites(options) {
100
99
  'the first workflow will report 401/login errors. Run `kimi login` if needed.');
101
100
  }
102
101
  }
103
- // 1.4 npm — required for running the TUI and for the `update` command.
102
+ // 1.4 npm — required to run the pinned OpenSpec CLI through npx.
104
103
  if (!(await commandExists('npm'))) {
105
104
  if (options.skipPrereqs) {
106
105
  warn('npm not found (skipped — SPECRAILS_SKIP_PREREQS=1)');
@@ -167,4 +166,3 @@ function hasCiWorkflows(repoRoot) {
167
166
  return false;
168
167
  return listDir(dir).some((p) => p.endsWith('.yml') || p.endsWith('.yaml'));
169
168
  }
170
- //# sourceMappingURL=prereqs.js.map
@@ -1,6 +1,5 @@
1
1
  /**
2
- * Provider detection + authentication checks. These mirror the Phase
3
- * 1.2 / 1.3 branches of the retired install.sh.
2
+ * Provider detection + authentication checks (init Phase 1.2 / 1.3).
4
3
  */
5
4
  export type Provider = 'claude' | 'codex' | 'gemini' | 'kimi';
6
5
  /** Oldest TypeScript Kimi Code CLI release covered by this integration. */
@@ -13,7 +12,7 @@ export interface ProviderAvailability {
13
12
  /** Optional so callers/tests predating Kimi still typecheck; absent = false. */
14
13
  kimi?: boolean;
15
14
  }
16
- export interface ProviderDerivedPaths {
15
+ interface ProviderDerivedPaths {
17
16
  /** Root directory inside the user's repo: `.claude` / `.codex` / `.gemini` / `.kimi-code`. */
18
17
  providerDir: string;
19
18
  /** Instructions file relative to the artifact root. */
@@ -57,14 +56,13 @@ export declare function resolveProvider(availability: ProviderAvailability, opti
57
56
  */
58
57
  export declare function derivedPaths(provider: Provider): ProviderDerivedPaths;
59
58
  /**
60
- * Asserts that Claude Code is authenticated. Matches the three-path
61
- * check from install.sh: `claude config list` → ANTHROPIC_API_KEY env →
62
- * ~/.claude.json OAuth.
59
+ * Asserts that Claude Code is authenticated: `claude config list` →
60
+ * ANTHROPIC_API_KEY env → ~/.claude.json OAuth.
63
61
  */
64
62
  export declare function assertClaudeAuthenticated(options?: {
65
63
  skipPrereqs?: boolean;
66
64
  }): Promise<void>;
67
- export type KimiAuthenticationStatus = 'authenticated' | 'unauthenticated' | 'unknown';
65
+ type KimiAuthenticationStatus = 'authenticated' | 'unauthenticated' | 'unknown';
68
66
  /**
69
67
  * Bounded, non-billing Kimi authentication probe.
70
68
  *
@@ -87,3 +85,4 @@ export declare function assertKimiAuthenticated(options?: {
87
85
  kimiCodeHome?: string;
88
86
  env?: NodeJS.ProcessEnv;
89
87
  }): Promise<KimiAuthenticationStatus>;
88
+ export {};
@@ -115,9 +115,8 @@ export function derivedPaths(provider) {
115
115
  throw new ProviderError(`Unsupported provider: ${String(provider)}`);
116
116
  }
117
117
  /**
118
- * Asserts that Claude Code is authenticated. Matches the three-path
119
- * check from install.sh: `claude config list` → ANTHROPIC_API_KEY env →
120
- * ~/.claude.json OAuth.
118
+ * Asserts that Claude Code is authenticated: `claude config list` →
119
+ * ANTHROPIC_API_KEY env → ~/.claude.json OAuth.
121
120
  */
122
121
  export async function assertClaudeAuthenticated(options = {}) {
123
122
  if (await hasClaudeApiKeyConfigured())
@@ -227,4 +226,3 @@ function compareVersionTriples(left, right) {
227
226
  }
228
227
  return 0;
229
228
  }
230
- //# sourceMappingURL=provider-detect.js.map
@@ -30,7 +30,7 @@ export declare function translateOpsxSkillCallsForGemini(body: string): string;
30
30
  export declare function translateClaudeTextForKimi(body: string): string;
31
31
  export declare function geminiAgentLimitMetadata(env?: NodeJS.ProcessEnv): string[];
32
32
  /**
33
- * Phase 2 + Phase 3 of the retired install.sh:
33
+ * Phase 2 + Phase 3 of init:
34
34
  * - Detect prior installation state (.claude/.codex/openspec already present).
35
35
  * - Create the directory skeleton.
36
36
  * - Copy templates into `.specrails/setup-templates/` (the internal
@@ -41,7 +41,7 @@ export declare function geminiAgentLimitMetadata(env?: NodeJS.ProcessEnv): strin
41
41
  * the user's live `.claude/agents/` and `.claude/commands/specrails/` dirs so
42
42
  * the installer finishes in one pass — no follow-up wizard required.
43
43
  */
44
- export interface ScaffoldInput {
44
+ interface ScaffoldInput {
45
45
  /** Absolute path to the specrails-core package (installed via npx). */
46
46
  scriptDir: string;
47
47
  /**
@@ -80,16 +80,14 @@ export interface ScaffoldInput {
80
80
  */
81
81
  materializeAllAgents?: boolean;
82
82
  }
83
- export interface ScaffoldResult {
83
+ interface ScaffoldResult {
84
84
  existingSetup: boolean;
85
85
  createdDirs: string[];
86
86
  copiedFiles: number;
87
87
  }
88
88
  /**
89
89
  * Returns true iff any of the provider directories already contains
90
- * content. The desktop-app-driven path skips the "merge existing?" prompt and
91
- * assumes `--yes`; the CLI dispatcher (bin/specrails-core.cjs) should
92
- * have prompted before entering this phase.
90
+ * content.
93
91
  */
94
92
  export declare function detectExistingSetup(input: Pick<ScaffoldInput, 'artifactRoot' | 'codeRoot' | 'providerDir'>): boolean;
95
93
  /**
@@ -97,7 +95,7 @@ export declare function detectExistingSetup(input: Pick<ScaffoldInput, 'artifact
97
95
  * .gitignore. Returns a summary for logging / tests.
98
96
  */
99
97
  export declare function scaffoldInstallation(input: ScaffoldInput): ScaffoldResult;
100
- export interface InstallFrameworkInput {
98
+ interface InstallFrameworkInput {
101
99
  /** Absolute path to the specrails-core package (templates/ + commands/). */
102
100
  scriptDir: string;
103
101
  /** Root of the versioned framework store, e.g. `<home>/.specrails/framework`. */
@@ -111,7 +109,7 @@ export interface InstallFrameworkInput {
111
109
  /** Optional explicit agent allow-list (kept for parity with scaffold). */
112
110
  selectedAgents?: string[];
113
111
  }
114
- export interface InstallFrameworkResult {
112
+ interface InstallFrameworkResult {
115
113
  /** `<frameworkDir>/<version>/<providerDir>` — root of the static subtree. */
116
114
  providerFrameworkDir: string;
117
115
  /** `<frameworkDir>/<version>` — the version root (also holds setup-templates/). */
@@ -141,7 +139,7 @@ export declare function installFramework(input: InstallFrameworkInput): InstallF
141
139
  * provider links resolve through `current/...` and an update is a single swap.
142
140
  */
143
141
  export declare function ensureCurrentSymlink(frameworkDir: string, version: string): void;
144
- export interface AssembleProjectWorkspaceInput {
142
+ interface AssembleProjectWorkspaceInput {
145
143
  /** The per-project workspace artifact root (= resolveArtifacts artifactRoot). */
146
144
  workspace: string;
147
145
  /** Root of the versioned framework store (the parent of `current/`). */
@@ -176,7 +174,7 @@ export interface AssembleProjectWorkspaceInput {
176
174
  */
177
175
  copyStatics?: boolean;
178
176
  }
179
- export interface AssembleProjectWorkspaceResult {
177
+ interface AssembleProjectWorkspaceResult {
180
178
  /** Per-linked-subtree mechanism, for diagnostics (copy-fallback loses O(1) swap). */
181
179
  links: Record<string, 'symlink' | 'junction' | 'copy'>;
182
180
  /** Agent ids whose memory dirs were seeded as real writable dirs. */
@@ -209,3 +207,4 @@ export declare function assembleProjectWorkspace(input: AssembleProjectWorkspace
209
207
  * acknowledged interactively).
210
208
  */
211
209
  export declare function writeGeminiAgentAcknowledgments(repoRoot: string, agentIds: string[], agentsBaseDir?: string): void;
210
+ export {};