specrails-core 5.6.0 → 6.0.1

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 (279) 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/change-scope.d.ts +63 -0
  5. package/dist/agent-runtime/change-scope.js +297 -0
  6. package/dist/agent-runtime/cli-executor.d.ts +1 -1
  7. package/dist/agent-runtime/cli-executor.js +1 -2
  8. package/dist/agent-runtime/cli-process.js +0 -1
  9. package/dist/agent-runtime/cli.js +4 -5
  10. package/dist/agent-runtime/codex-schema.js +0 -1
  11. package/dist/agent-runtime/compact/architect.d.ts +3 -272
  12. package/dist/agent-runtime/compact/architect.js +8 -9
  13. package/dist/agent-runtime/compact/chat-client.d.ts +3 -3
  14. package/dist/agent-runtime/compact/chat-client.js +1 -2
  15. package/dist/agent-runtime/compact/developer.d.ts +3 -70
  16. package/dist/agent-runtime/compact/developer.js +13 -14
  17. package/dist/agent-runtime/compact/environment.d.ts +16 -5
  18. package/dist/agent-runtime/compact/environment.js +32 -3
  19. package/dist/agent-runtime/compact/exit-code-honesty.d.ts +2 -1
  20. package/dist/agent-runtime/compact/exit-code-honesty.js +0 -1
  21. package/dist/agent-runtime/compact/guarded-loop.d.ts +2 -18
  22. package/dist/agent-runtime/compact/guarded-loop.js +7 -8
  23. package/dist/agent-runtime/compact/prompt-inputs.d.ts +0 -2
  24. package/dist/agent-runtime/compact/prompt-inputs.js +1 -2
  25. package/dist/agent-runtime/compact/reviewer.d.ts +0 -13
  26. package/dist/agent-runtime/compact/reviewer.js +5 -6
  27. package/dist/agent-runtime/compact/step.d.ts +0 -1
  28. package/dist/agent-runtime/compact/step.js +1 -2
  29. package/dist/agent-runtime/compact/test-reachability.js +6 -3
  30. package/dist/agent-runtime/config.js +0 -1
  31. package/dist/agent-runtime/core-host.d.ts +2 -2
  32. package/dist/agent-runtime/core-host.js +2 -3
  33. package/dist/agent-runtime/durable-store.d.ts +0 -1
  34. package/dist/agent-runtime/durable-store.js +1 -2
  35. package/dist/agent-runtime/efficiency-summary.d.ts +2 -2
  36. package/dist/agent-runtime/efficiency-summary.js +1 -2
  37. package/dist/agent-runtime/efficiency-types.js +0 -1
  38. package/dist/agent-runtime/efficiency.js +0 -1
  39. package/dist/agent-runtime/evaluation-corpus.js +0 -1
  40. package/dist/agent-runtime/evaluation.d.ts +2 -1
  41. package/dist/agent-runtime/evaluation.js +1 -2
  42. package/dist/agent-runtime/executor-types.d.ts +1 -1
  43. package/dist/agent-runtime/executor-types.js +0 -1
  44. package/dist/agent-runtime/executors.js +0 -1
  45. package/dist/agent-runtime/gemini-policy.js +0 -1
  46. package/dist/agent-runtime/graph/artifacts.d.ts +1 -1
  47. package/dist/agent-runtime/graph/artifacts.js +5 -3
  48. package/dist/agent-runtime/graph/convergence.d.ts +26 -0
  49. package/dist/agent-runtime/graph/convergence.js +62 -0
  50. package/dist/agent-runtime/graph/nodes.d.ts +1 -1
  51. package/dist/agent-runtime/graph/nodes.js +170 -24
  52. package/dist/agent-runtime/graph/review-policy.js +0 -1
  53. package/dist/agent-runtime/graph/roles.d.ts +2 -5
  54. package/dist/agent-runtime/graph/roles.js +2 -8
  55. package/dist/agent-runtime/graph/state.d.ts +6 -1
  56. package/dist/agent-runtime/graph/state.js +2 -1
  57. package/dist/agent-runtime/graph-checkpointer.d.ts +2 -1
  58. package/dist/agent-runtime/graph-checkpointer.js +0 -1
  59. package/dist/agent-runtime/guardrails.d.ts +3 -3
  60. package/dist/agent-runtime/guardrails.js +1 -2
  61. package/dist/agent-runtime/index.d.ts +1 -1
  62. package/dist/agent-runtime/index.js +1 -2
  63. package/dist/agent-runtime/kimi-acp.js +1 -2
  64. package/dist/agent-runtime/kimi-model.d.ts +6 -0
  65. package/dist/agent-runtime/kimi-model.js +12 -0
  66. package/dist/agent-runtime/openai-executor.d.ts +0 -9
  67. package/dist/agent-runtime/openai-executor.js +6 -7
  68. package/dist/agent-runtime/openspec-tool-server.js +1 -2
  69. package/dist/agent-runtime/openspec.d.ts +0 -2
  70. package/dist/agent-runtime/openspec.js +1 -6
  71. package/dist/agent-runtime/prompts.d.ts +11 -5
  72. package/dist/agent-runtime/prompts.js +46 -17
  73. package/dist/agent-runtime/provider-diagnostic.js +1 -2
  74. package/dist/agent-runtime/recovery.js +1 -2
  75. package/dist/agent-runtime/repository-context.d.ts +1 -1
  76. package/dist/agent-runtime/repository-context.js +19 -1
  77. package/dist/agent-runtime/review-context.d.ts +1 -1
  78. package/dist/agent-runtime/review-context.js +0 -1
  79. package/dist/agent-runtime/role-routing.js +0 -1
  80. package/dist/agent-runtime/role-state.js +0 -1
  81. package/dist/agent-runtime/runtime-identity.js +1 -2
  82. package/dist/agent-runtime/tool-event.js +0 -1
  83. package/dist/agent-runtime/verification-plan.d.ts +5 -4
  84. package/dist/agent-runtime/verification-plan.js +9 -5
  85. package/dist/agent-runtime/workflow-types.js +0 -1
  86. package/dist/agent-runtime/workflow.js +0 -1
  87. package/dist/agent-runtime/workspace-tools.d.ts +2 -2
  88. package/dist/agent-runtime/workspace-tools.js +1 -2
  89. package/dist/installer/cli.d.ts +3 -32
  90. package/dist/installer/cli.js +26 -101
  91. package/dist/installer/commands/framework.d.ts +4 -3
  92. package/dist/installer/commands/framework.js +0 -1
  93. package/dist/installer/commands/init.d.ts +4 -25
  94. package/dist/installer/commands/init.js +5 -8
  95. package/dist/installer/phases/framework-lifecycle.d.ts +3 -17
  96. package/dist/installer/phases/framework-lifecycle.js +2 -3
  97. package/dist/installer/phases/install-config.d.ts +7 -8
  98. package/dist/installer/phases/install-config.js +2 -7
  99. package/dist/installer/phases/manifest.d.ts +6 -7
  100. package/dist/installer/phases/manifest.js +2 -7
  101. package/dist/installer/phases/prereqs.d.ts +6 -7
  102. package/dist/installer/phases/prereqs.js +4 -6
  103. package/dist/installer/phases/provider-detect.d.ts +6 -7
  104. package/dist/installer/phases/provider-detect.js +2 -4
  105. package/dist/installer/phases/scaffold.d.ts +9 -10
  106. package/dist/installer/phases/scaffold.js +82 -805
  107. package/dist/installer/util/errors.js +0 -1
  108. package/dist/installer/util/exec.d.ts +3 -2
  109. package/dist/installer/util/exec.js +0 -1
  110. package/dist/installer/util/fs.d.ts +0 -10
  111. package/dist/installer/util/fs.js +1 -2
  112. package/dist/installer/util/git.js +0 -1
  113. package/dist/installer/util/install-transaction.d.ts +2 -2
  114. package/dist/installer/util/install-transaction.js +1 -2
  115. package/dist/installer/util/logger.d.ts +1 -3
  116. package/dist/installer/util/logger.js +0 -1
  117. package/dist/installer/util/paths.js +0 -1
  118. package/dist/installer/util/registry.d.ts +4 -8
  119. package/dist/installer/util/registry.js +2 -3
  120. package/dist/{installer/runtime → pipeline}/pipeline-state.d.ts +11 -0
  121. package/dist/{installer/runtime → pipeline}/pipeline-state.js +56 -5
  122. package/dist/shared/args.d.ts +18 -0
  123. package/dist/shared/args.js +53 -0
  124. package/integration-contract.json +11 -47
  125. package/package.json +3 -10
  126. package/templates/agents/sr-architect.md +15 -310
  127. package/templates/agents/sr-developer.md +15 -269
  128. package/templates/agents/sr-reviewer.md +13 -367
  129. package/templates/codex-skills/rails/sr-architect/SKILL.md +14 -308
  130. package/templates/codex-skills/rails/sr-developer/SKILL.md +14 -201
  131. package/templates/codex-skills/rails/sr-reviewer/SKILL.md +15 -289
  132. package/templates/kimi/specrails/run-skill.mjs +91 -2173
  133. package/bin/tui-installer.mjs +0 -430
  134. package/commands/doctor.md +0 -62
  135. package/dist/agent-runtime/capabilities.js.map +0 -1
  136. package/dist/agent-runtime/cli-executor.js.map +0 -1
  137. package/dist/agent-runtime/cli-process.js.map +0 -1
  138. package/dist/agent-runtime/cli.js.map +0 -1
  139. package/dist/agent-runtime/codex-schema.js.map +0 -1
  140. package/dist/agent-runtime/compact/architect.js.map +0 -1
  141. package/dist/agent-runtime/compact/chat-client.js.map +0 -1
  142. package/dist/agent-runtime/compact/developer.js.map +0 -1
  143. package/dist/agent-runtime/compact/environment.js.map +0 -1
  144. package/dist/agent-runtime/compact/exit-code-honesty.js.map +0 -1
  145. package/dist/agent-runtime/compact/guarded-loop.js.map +0 -1
  146. package/dist/agent-runtime/compact/prompt-inputs.js.map +0 -1
  147. package/dist/agent-runtime/compact/reviewer.js.map +0 -1
  148. package/dist/agent-runtime/compact/step.js.map +0 -1
  149. package/dist/agent-runtime/compact/test-reachability.js.map +0 -1
  150. package/dist/agent-runtime/config.js.map +0 -1
  151. package/dist/agent-runtime/core-host.js.map +0 -1
  152. package/dist/agent-runtime/durable-store.js.map +0 -1
  153. package/dist/agent-runtime/efficiency-summary.js.map +0 -1
  154. package/dist/agent-runtime/efficiency-types.js.map +0 -1
  155. package/dist/agent-runtime/efficiency.js.map +0 -1
  156. package/dist/agent-runtime/evaluation-corpus.js.map +0 -1
  157. package/dist/agent-runtime/evaluation.js.map +0 -1
  158. package/dist/agent-runtime/executor-types.js.map +0 -1
  159. package/dist/agent-runtime/executors.js.map +0 -1
  160. package/dist/agent-runtime/gemini-policy.js.map +0 -1
  161. package/dist/agent-runtime/graph/artifacts.js.map +0 -1
  162. package/dist/agent-runtime/graph/nodes.js.map +0 -1
  163. package/dist/agent-runtime/graph/review-policy.js.map +0 -1
  164. package/dist/agent-runtime/graph/roles.js.map +0 -1
  165. package/dist/agent-runtime/graph/state.js.map +0 -1
  166. package/dist/agent-runtime/graph-checkpointer.js.map +0 -1
  167. package/dist/agent-runtime/guardrails.js.map +0 -1
  168. package/dist/agent-runtime/index.js.map +0 -1
  169. package/dist/agent-runtime/kimi-acp.js.map +0 -1
  170. package/dist/agent-runtime/openai-executor.js.map +0 -1
  171. package/dist/agent-runtime/openspec-tool-server.js.map +0 -1
  172. package/dist/agent-runtime/openspec.js.map +0 -1
  173. package/dist/agent-runtime/prompts.js.map +0 -1
  174. package/dist/agent-runtime/provider-diagnostic.js.map +0 -1
  175. package/dist/agent-runtime/recovery.js.map +0 -1
  176. package/dist/agent-runtime/repository-context.js.map +0 -1
  177. package/dist/agent-runtime/review-context.js.map +0 -1
  178. package/dist/agent-runtime/role-routing.js.map +0 -1
  179. package/dist/agent-runtime/role-state.js.map +0 -1
  180. package/dist/agent-runtime/runtime-identity.js.map +0 -1
  181. package/dist/agent-runtime/tool-event.js.map +0 -1
  182. package/dist/agent-runtime/verification-plan.js.map +0 -1
  183. package/dist/agent-runtime/workflow-types.js.map +0 -1
  184. package/dist/agent-runtime/workflow.js.map +0 -1
  185. package/dist/agent-runtime/workspace-tools.js.map +0 -1
  186. package/dist/installer/cli.js.map +0 -1
  187. package/dist/installer/commands/doctor.d.ts +0 -27
  188. package/dist/installer/commands/doctor.js +0 -615
  189. package/dist/installer/commands/doctor.js.map +0 -1
  190. package/dist/installer/commands/framework.js.map +0 -1
  191. package/dist/installer/commands/init.js.map +0 -1
  192. package/dist/installer/commands/update.d.ts +0 -56
  193. package/dist/installer/commands/update.js +0 -257
  194. package/dist/installer/commands/update.js.map +0 -1
  195. package/dist/installer/commands/v5-migration.d.ts +0 -32
  196. package/dist/installer/commands/v5-migration.js +0 -133
  197. package/dist/installer/commands/v5-migration.js.map +0 -1
  198. package/dist/installer/phases/framework-lifecycle.js.map +0 -1
  199. package/dist/installer/phases/install-config.js.map +0 -1
  200. package/dist/installer/phases/manifest.js.map +0 -1
  201. package/dist/installer/phases/prereqs.js.map +0 -1
  202. package/dist/installer/phases/provider-detect.js.map +0 -1
  203. package/dist/installer/phases/scaffold.js.map +0 -1
  204. package/dist/installer/runtime/kimi.d.ts +0 -84
  205. package/dist/installer/runtime/kimi.js +0 -255
  206. package/dist/installer/runtime/kimi.js.map +0 -1
  207. package/dist/installer/runtime/pipeline-state.js.map +0 -1
  208. package/dist/installer/util/errors.js.map +0 -1
  209. package/dist/installer/util/exec.js.map +0 -1
  210. package/dist/installer/util/fs.js.map +0 -1
  211. package/dist/installer/util/git.js.map +0 -1
  212. package/dist/installer/util/install-transaction.js.map +0 -1
  213. package/dist/installer/util/logger.js.map +0 -1
  214. package/dist/installer/util/paths.js.map +0 -1
  215. package/dist/installer/util/prompts.d.ts +0 -23
  216. package/dist/installer/util/prompts.js +0 -49
  217. package/dist/installer/util/prompts.js.map +0 -1
  218. package/dist/installer/util/registry.js.map +0 -1
  219. package/dist/installer/util/template.d.ts +0 -23
  220. package/dist/installer/util/template.js +0 -60
  221. package/dist/installer/util/template.js.map +0 -1
  222. package/docs/README.md +0 -40
  223. package/docs/agent-runtime-efficiency.md +0 -65
  224. package/docs/agent-runtime.md +0 -393
  225. package/docs/agents.md +0 -315
  226. package/docs/changelog.md +0 -168
  227. package/docs/ci-cd.md +0 -60
  228. package/docs/concepts.md +0 -183
  229. package/docs/customization.md +0 -363
  230. package/docs/deployment.md +0 -234
  231. package/docs/getting-started.md +0 -122
  232. package/docs/installation.md +0 -395
  233. package/docs/local-tickets.md +0 -191
  234. package/docs/migration-guide.md +0 -140
  235. package/docs/playbook-oss-maintainer.md +0 -112
  236. package/docs/playbook-parallel-dev.md +0 -124
  237. package/docs/playbook-product-discovery.md +0 -115
  238. package/docs/plugin-architecture.md +0 -144
  239. package/docs/research/codex-compatibility-analysis.md +0 -365
  240. package/docs/research/mcp-feasibility-analysis.md +0 -382
  241. package/docs/testing/test-matrix-codex.md +0 -130
  242. package/docs/updating.md +0 -89
  243. package/docs/user-docs/cli-reference.md +0 -428
  244. package/docs/user-docs/codex-vs-claude-code.md +0 -23
  245. package/docs/user-docs/core-updates.md +0 -70
  246. package/docs/user-docs/faq.md +0 -146
  247. package/docs/user-docs/getting-started-codex.md +0 -194
  248. package/docs/user-docs/getting-started-kimi.md +0 -423
  249. package/docs/user-docs/installation.md +0 -237
  250. package/docs/user-docs/provider-pipelines.md +0 -96
  251. package/docs/user-docs/quick-start.md +0 -161
  252. package/docs/windows.md +0 -78
  253. package/docs/workflows.md +0 -463
  254. package/schemas/profile.v1.json +0 -207
  255. package/templates/claude-md/CLAUDE-quickstart.md +0 -54
  256. package/templates/claude-md/root.md +0 -50
  257. package/templates/codex-skills/batch-implement/SKILL.md +0 -38
  258. package/templates/codex-skills/implement/SKILL.md +0 -38
  259. package/templates/codex-skills/retry/SKILL.md +0 -16
  260. package/templates/commands/specrails/compat-check.md +0 -271
  261. package/templates/commands/specrails/doctor.md +0 -62
  262. package/templates/commands/specrails/explore-spec.md +0 -173
  263. package/templates/commands/specrails/health-check.md +0 -527
  264. package/templates/commands/specrails/memory-inspect.md +0 -261
  265. package/templates/commands/specrails/opsx-diff.md +0 -419
  266. package/templates/commands/specrails/propose-spec.md +0 -102
  267. package/templates/commands/specrails/refactor-recommender.md +0 -169
  268. package/templates/commands/specrails/telemetry.md +0 -553
  269. package/templates/commands/specrails/why.md +0 -96
  270. package/templates/gemini-commands/batch-implement.toml +0 -37
  271. package/templates/gemini-commands/implement.toml +0 -37
  272. package/templates/gemini-commands/retry.toml +0 -15
  273. package/templates/profiles/default.json +0 -14
  274. package/templates/profiles/kimi-default.json +0 -15
  275. package/templates/rules/layer.md +0 -8
  276. package/templates/runtime/provider-pipeline.md +0 -113
  277. package/templates/security/security-exemptions.yaml +0 -20
  278. package/templates/settings/confidence-config.json +0 -17
  279. package/templates/settings/settings.json +0 -15
@@ -1,100 +1,35 @@
1
1
  /**
2
- * specrails-core CLI entry point (Node / TypeScript).
3
- *
4
- * Replaces the legacy bash-dispatch path in `bin/specrails-core.js`.
5
- * During the port, `bin/specrails-core.js` keeps shelling out to the
6
- * shell scripts while this module carries the in-progress Node
7
- * implementation. Once Phases 2–4 ship the command handlers and
8
- * Phase 5 deletes the shell scripts, the `bin/` dispatcher collapses
9
- * to a single `import { main } from './dist/installer/cli.js'` call.
2
+ * specrails-core CLI: the installer and runtime entry points Desktop drives.
3
+ * `bin/specrails-core.mjs` and a direct `node dist/installer/cli.js` run both
4
+ * land in {@link main}.
10
5
  */
11
6
  import { readFileSync, realpathSync } from 'node:fs';
12
7
  import path from 'node:path';
13
8
  import { fileURLToPath, pathToFileURL } from 'node:url';
14
- import { runDoctor } from './commands/doctor.js';
15
9
  import { runAssemble, runInstallFramework, runSwapCurrent, } from './commands/framework.js';
16
10
  import { runInit } from './commands/init.js';
17
- import { runUpdate } from './commands/update.js';
18
- import { runPipelineCommand } from './runtime/pipeline-state.js';
11
+ import { runPipelineCommand } from '../pipeline/pipeline-state.js';
12
+ import { parseArgs } from '../shared/args.js';
19
13
  import { isInstallerError } from './util/errors.js';
20
14
  import { fatal } from './util/logger.js';
21
- /**
22
- * Minimal arg parser, no external dep. Handles:
23
- * subcommand (first bare positional)
24
- * --flag (boolean true)
25
- * --flag=value (string)
26
- * --flag value (string, consumes next token)
27
- * -h / --help (help alias)
28
- * -v / --version (version alias)
29
- * positionals (everything else)
30
- */
31
- export function parseArgs(argv) {
32
- const flags = {};
33
- const positionals = [];
34
- let subcommand = null;
35
- for (let i = 0; i < argv.length; i++) {
36
- const token = argv[i];
37
- if (token.startsWith('--')) {
38
- const rest = token.slice(2);
39
- const eq = rest.indexOf('=');
40
- if (eq >= 0) {
41
- flags[rest.slice(0, eq)] = rest.slice(eq + 1);
42
- }
43
- else {
44
- const peek = argv[i + 1];
45
- if (peek !== undefined && !peek.startsWith('-')) {
46
- flags[rest] = peek;
47
- i++;
48
- }
49
- else {
50
- flags[rest] = true;
51
- }
52
- }
53
- }
54
- else if (token === '-h') {
55
- flags.help = true;
56
- }
57
- else if (token === '-v') {
58
- flags.version = true;
59
- }
60
- else if (token.startsWith('-') && token.length > 1) {
61
- flags[token.slice(1)] = true;
62
- }
63
- else {
64
- if (subcommand === null) {
65
- subcommand = token;
66
- }
67
- else {
68
- positionals.push(token);
69
- }
70
- }
71
- }
72
- return { subcommand, flags, positionals };
73
- }
74
15
  function usageText() {
75
16
  return [
76
17
  '',
77
- 'specrails-core — Provider-independent AI agent workflow system',
18
+ 'specrails-core — agent workflow engine for specrails-desktop',
78
19
  '',
79
20
  'Usage:',
80
21
  ' specrails-core <command> [options]',
81
22
  '',
82
23
  'Commands:',
83
- ' init Install specrails into a repository',
84
- ' update Update an existing specrails installation',
85
- ' pipeline Inspect and execute durable implementation phases',
86
- ' runtime Run, inspect and resume programmatic agents',
87
- ' doctor Diagnose the health of an existing installation',
24
+ ' init Install specrails into a repository (claude, codex, gemini, or kimi)',
88
25
  ' install-framework Materialize the versioned framework (offline)',
89
26
  ' swap-current Point framework/current at a version (offline)',
90
- ' assemble Symlink the framework into a workspace (offline)',
27
+ ' assemble Link the framework into a project workspace (offline)',
28
+ ' pipeline Inspect and verify durable implementation phases',
29
+ ' runtime Run, inspect and resume programmatic agents',
91
30
  ' help Show this help message',
92
31
  ' version Print the installed version',
93
32
  '',
94
- 'Global options:',
95
- ' -h, --help Show this help',
96
- ' -v, --version Print version',
97
- '',
98
33
  ].join('\n');
99
34
  }
100
35
  function readVersion() {
@@ -113,30 +48,15 @@ function readVersion() {
113
48
  return 'unknown';
114
49
  }
115
50
  }
116
- /**
117
- * Sentinel exit code used during the port: when a Node command is not
118
- * yet implemented, the CLI exits with this code and the outer bash
119
- * dispatcher (bin/specrails-core.js) may choose to fall through to
120
- * the shell path. Removed entirely in Phase 5 when no shell scripts
121
- * remain.
122
- */
123
- export const NOT_IMPLEMENTED = 2;
124
- async function dispatch(subcommand, flags, _positionals) {
51
+ async function dispatch(subcommand, flags, positionals) {
125
52
  switch (subcommand) {
126
53
  case 'init':
127
54
  await runInit(flags);
128
55
  return 0;
129
- case 'update':
130
- await runUpdate(flags);
131
- return 0;
132
56
  case 'pipeline':
133
- return runPipelineCommand(flags, _positionals);
57
+ return runPipelineCommand(flags, positionals);
134
58
  case 'runtime':
135
- return (await import('../agent-runtime/cli.js')).runRuntimeCommand(flags, _positionals);
136
- case 'doctor': {
137
- const result = await runDoctor(flags);
138
- return result.failed === 0 ? 0 : 1;
139
- }
59
+ return (await import('../agent-runtime/cli.js')).runRuntimeCommand(flags, positionals);
140
60
  case 'install-framework':
141
61
  await runInstallFramework(flags);
142
62
  return 0;
@@ -147,7 +67,6 @@ async function dispatch(subcommand, flags, _positionals) {
147
67
  await runAssemble(flags);
148
68
  return 0;
149
69
  case 'help':
150
- case '':
151
70
  process.stdout.write(usageText());
152
71
  return 0;
153
72
  case 'version':
@@ -161,16 +80,23 @@ async function dispatch(subcommand, flags, _positionals) {
161
80
  }
162
81
  export async function main(argv = process.argv.slice(2)) {
163
82
  const { subcommand, flags, positionals } = parseArgs(argv);
164
- if (flags.help === true) {
83
+ // `--version` is global only before a command: `swap-current --version <v>`
84
+ // names a framework version.
85
+ if (subcommand === null) {
86
+ if (flags.version === true || flags.V === true) {
87
+ process.stdout.write(`${readVersion()}\n`);
88
+ return 0;
89
+ }
165
90
  process.stdout.write(usageText());
166
91
  return 0;
167
92
  }
168
- if (flags.version === true) {
169
- process.stdout.write(`${readVersion()}\n`);
93
+ // `init --help` must print help, never install.
94
+ if (flags.help === true && subcommand !== 'runtime') {
95
+ process.stdout.write(usageText());
170
96
  return 0;
171
97
  }
172
98
  try {
173
- return await dispatch(subcommand ?? '', flags, positionals);
99
+ return await dispatch(subcommand, flags, positionals);
174
100
  }
175
101
  catch (err) {
176
102
  if (isInstallerError(err)) {
@@ -187,8 +113,8 @@ export async function main(argv = process.argv.slice(2)) {
187
113
  * (`node dist/installer/cli.js <subcommand>`), run `main()` and propagate its
188
114
  * exit code. specrails-desktop's bundled-core path (server/framework-manager.ts)
189
115
  * spawns `node <core>/dist/installer/cli.js install-framework|assemble …` and
190
- * relies on this — the legacy bin dispatcher (bin/specrails-core.mjs) imports
191
- * `main` and is unaffected (it never executes this file as argv[1]).
116
+ * relies on this — `bin/specrails-core.mjs` imports `main` and is unaffected
117
+ * (it never executes this file as argv[1]).
192
118
  *
193
119
  * Comparing `import.meta.url` against `process.argv[1]` keeps the guard inert on
194
120
  * import (so unit tests that `import { main }` never trigger a process.exit).
@@ -219,4 +145,3 @@ if (isDirectRun) {
219
145
  process.exitCode = code;
220
146
  });
221
147
  }
222
- //# sourceMappingURL=cli.js.map
@@ -40,7 +40,7 @@ export interface AssembleFlags {
40
40
  /** Comma-separated per-project agent allow-list (links a subset of the superset). */
41
41
  'selected-agents'?: string | boolean;
42
42
  }
43
- export interface InstallFrameworkOutcome {
43
+ interface InstallFrameworkOutcome {
44
44
  frameworkDir: string;
45
45
  provider: Provider;
46
46
  version: string;
@@ -48,13 +48,13 @@ export interface InstallFrameworkOutcome {
48
48
  /** True when `current` was swapped to `<version>` this call. */
49
49
  swapped: boolean;
50
50
  }
51
- export interface SwapCurrentOutcome {
51
+ interface SwapCurrentOutcome {
52
52
  frameworkDir: string;
53
53
  version: string;
54
54
  /** Complete provider set validated before the pointer was moved. */
55
55
  providers: Provider[];
56
56
  }
57
- export interface AssembleOutcome {
57
+ interface AssembleOutcome {
58
58
  workspace: string;
59
59
  frameworkDir: string;
60
60
  provider: Provider;
@@ -83,3 +83,4 @@ export declare function runSwapCurrent(flags: SwapCurrentFlags): Promise<SwapCur
83
83
  export declare function runAssemble(flags: AssembleFlags): Promise<AssembleOutcome>;
84
84
  /** Read the package version (the version the desktop should materialize). */
85
85
  export declare function readPackageVersion(scriptDir?: string): string;
86
+ export {};
@@ -186,4 +186,3 @@ export function readPackageVersion(scriptDir) {
186
186
  return 'unknown';
187
187
  }
188
188
  }
189
- //# sourceMappingURL=framework.js.map
@@ -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