@openrig/cli 0.3.1 → 0.3.3-rc.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 (358) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
  2. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +8 -8
  3. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  4. package/daemon/dist/adapters/cmux-transport.js +51 -9
  5. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  6. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  7. package/daemon/dist/adapters/codex-runtime-adapter.js +34 -5
  8. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  9. package/daemon/dist/adapters/tmux.d.ts +68 -1
  10. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  11. package/daemon/dist/adapters/tmux.js +141 -2
  12. package/daemon/dist/adapters/tmux.js.map +1 -1
  13. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +5 -1
  14. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -1
  15. package/daemon/dist/db/migrations/037_mission_control_actions.js +5 -1
  16. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -1
  17. package/daemon/dist/db/migrations/041_rig_policy.d.ts +32 -0
  18. package/daemon/dist/db/migrations/041_rig_policy.d.ts.map +1 -0
  19. package/daemon/dist/db/migrations/041_rig_policy.js +47 -0
  20. package/daemon/dist/db/migrations/041_rig_policy.js.map +1 -0
  21. package/daemon/dist/db/migrations/042_rig_archive.d.ts +16 -0
  22. package/daemon/dist/db/migrations/042_rig_archive.d.ts.map +1 -0
  23. package/daemon/dist/db/migrations/042_rig_archive.js +21 -0
  24. package/daemon/dist/db/migrations/042_rig_archive.js.map +1 -0
  25. package/daemon/dist/domain/agent-images/resume-token-discovery.js +1 -1
  26. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
  27. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -1
  28. package/daemon/dist/domain/agent-images/snapshot-capturer.js +2 -1
  29. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -1
  30. package/daemon/dist/domain/agent-manifest.js +27 -0
  31. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  32. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  33. package/daemon/dist/domain/bootstrap-orchestrator.js +86 -6
  34. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  35. package/daemon/dist/domain/bundle-agent-images-router.d.ts +95 -0
  36. package/daemon/dist/domain/bundle-agent-images-router.d.ts.map +1 -0
  37. package/daemon/dist/domain/bundle-agent-images-router.js +140 -0
  38. package/daemon/dist/domain/bundle-agent-images-router.js.map +1 -0
  39. package/daemon/dist/domain/bundle-assembler.d.ts +18 -1
  40. package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -1
  41. package/daemon/dist/domain/bundle-assembler.js +11 -1
  42. package/daemon/dist/domain/bundle-assembler.js.map +1 -1
  43. package/daemon/dist/domain/bundle-audit.d.ts +89 -0
  44. package/daemon/dist/domain/bundle-audit.d.ts.map +1 -0
  45. package/daemon/dist/domain/bundle-audit.js +87 -0
  46. package/daemon/dist/domain/bundle-audit.js.map +1 -0
  47. package/daemon/dist/domain/bundle-conflict-detector.d.ts +57 -0
  48. package/daemon/dist/domain/bundle-conflict-detector.d.ts.map +1 -0
  49. package/daemon/dist/domain/bundle-conflict-detector.js +49 -0
  50. package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -0
  51. package/daemon/dist/domain/bundle-context-packs-router.d.ts +100 -0
  52. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -0
  53. package/daemon/dist/domain/bundle-context-packs-router.js +158 -0
  54. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -0
  55. package/daemon/dist/domain/bundle-plugins-router.d.ts +69 -0
  56. package/daemon/dist/domain/bundle-plugins-router.d.ts.map +1 -0
  57. package/daemon/dist/domain/bundle-plugins-router.js +87 -0
  58. package/daemon/dist/domain/bundle-plugins-router.js.map +1 -0
  59. package/daemon/dist/domain/bundle-skills-router.d.ts +62 -0
  60. package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -0
  61. package/daemon/dist/domain/bundle-skills-router.js +90 -0
  62. package/daemon/dist/domain/bundle-skills-router.js.map +1 -0
  63. package/daemon/dist/domain/bundle-types.d.ts +106 -0
  64. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  65. package/daemon/dist/domain/bundle-types.js +375 -0
  66. package/daemon/dist/domain/bundle-types.js.map +1 -1
  67. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts +94 -0
  68. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts.map +1 -0
  69. package/daemon/dist/domain/bundle-workflow-specs-router.js +144 -0
  70. package/daemon/dist/domain/bundle-workflow-specs-router.js.map +1 -0
  71. package/daemon/dist/domain/context-monitor.d.ts +5 -1
  72. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  73. package/daemon/dist/domain/context-monitor.js +28 -15
  74. package/daemon/dist/domain/context-monitor.js.map +1 -1
  75. package/daemon/dist/domain/graph-projection.d.ts +6 -0
  76. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  77. package/daemon/dist/domain/graph-projection.js +6 -0
  78. package/daemon/dist/domain/graph-projection.js.map +1 -1
  79. package/daemon/dist/domain/native-resume-probe.js +7 -7
  80. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  81. package/daemon/dist/domain/node-inventory.d.ts +18 -0
  82. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  83. package/daemon/dist/domain/node-inventory.js +98 -0
  84. package/daemon/dist/domain/node-inventory.js.map +1 -1
  85. package/daemon/dist/domain/node-launcher.d.ts +12 -0
  86. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  87. package/daemon/dist/domain/node-launcher.js +25 -1
  88. package/daemon/dist/domain/node-launcher.js.map +1 -1
  89. package/daemon/dist/domain/pod-bundle-assembler.d.ts +16 -1
  90. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  91. package/daemon/dist/domain/pod-bundle-assembler.js +11 -1
  92. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  93. package/daemon/dist/domain/profile-resolver.d.ts +10 -0
  94. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  95. package/daemon/dist/domain/profile-resolver.js +4 -0
  96. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  97. package/daemon/dist/domain/ps-projection.d.ts +28 -1
  98. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  99. package/daemon/dist/domain/ps-projection.js +67 -1
  100. package/daemon/dist/domain/ps-projection.js.map +1 -1
  101. package/daemon/dist/domain/queue-repository.d.ts +37 -1
  102. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  103. package/daemon/dist/domain/queue-repository.js +99 -2
  104. package/daemon/dist/domain/queue-repository.js.map +1 -1
  105. package/daemon/dist/domain/restore-check-service.d.ts +4 -0
  106. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  107. package/daemon/dist/domain/restore-check-service.js +16 -7
  108. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  109. package/daemon/dist/domain/rig-expansion-service.d.ts +1 -1
  110. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  111. package/daemon/dist/domain/rig-expansion-service.js +12 -10
  112. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  113. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts +48 -0
  114. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +1 -0
  115. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js +96 -0
  116. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +1 -0
  117. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts +46 -0
  118. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +1 -0
  119. package/daemon/dist/domain/rig-policy/rig-policy-store.js +171 -0
  120. package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +1 -0
  121. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts +145 -0
  122. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +1 -0
  123. package/daemon/dist/domain/rig-policy/rig-policy-types.js +52 -0
  124. package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +1 -0
  125. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts +58 -0
  126. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +1 -0
  127. package/daemon/dist/domain/rig-policy/rig-policy-validator.js +211 -0
  128. package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +1 -0
  129. package/daemon/dist/domain/rig-repository.d.ts +28 -2
  130. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  131. package/daemon/dist/domain/rig-repository.js +40 -3
  132. package/daemon/dist/domain/rig-repository.js.map +1 -1
  133. package/daemon/dist/domain/rigspec-instantiator.d.ts +177 -1
  134. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  135. package/daemon/dist/domain/rigspec-instantiator.js +414 -55
  136. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  137. package/daemon/dist/domain/rigspec-preflight.d.ts +19 -1
  138. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  139. package/daemon/dist/domain/rigspec-preflight.js +30 -12
  140. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  141. package/daemon/dist/domain/rigspec-schema.d.ts +1 -0
  142. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  143. package/daemon/dist/domain/rigspec-schema.js +4 -1
  144. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  145. package/daemon/dist/domain/seat-activity-service.d.ts +79 -0
  146. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -0
  147. package/daemon/dist/domain/seat-activity-service.js +123 -0
  148. package/daemon/dist/domain/seat-activity-service.js.map +1 -0
  149. package/daemon/dist/domain/session-transport.d.ts +15 -0
  150. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  151. package/daemon/dist/domain/session-transport.js +8 -3
  152. package/daemon/dist/domain/session-transport.js.map +1 -1
  153. package/daemon/dist/domain/slices/slice-indexer.d.ts +12 -0
  154. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  155. package/daemon/dist/domain/slices/slice-indexer.js +23 -0
  156. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  157. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  158. package/daemon/dist/domain/spec-library-service.js +19 -0
  159. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  160. package/daemon/dist/domain/topology-converge.d.ts +97 -0
  161. package/daemon/dist/domain/topology-converge.d.ts.map +1 -0
  162. package/daemon/dist/domain/topology-converge.js +70 -0
  163. package/daemon/dist/domain/topology-converge.js.map +1 -0
  164. package/daemon/dist/domain/types.d.ts +85 -3
  165. package/daemon/dist/domain/types.d.ts.map +1 -1
  166. package/daemon/dist/domain/types.js.map +1 -1
  167. package/daemon/dist/domain/whoami-service.d.ts +8 -0
  168. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  169. package/daemon/dist/domain/whoami-service.js +1 -0
  170. package/daemon/dist/domain/whoami-service.js.map +1 -1
  171. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  172. package/daemon/dist/domain/workflow-runtime.js +9 -1
  173. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  174. package/daemon/dist/domain/workflow-spec-cache.d.ts +41 -0
  175. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  176. package/daemon/dist/domain/workflow-spec-cache.js +63 -0
  177. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  178. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +7 -0
  179. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  180. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +156 -3
  181. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  182. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +197 -0
  183. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -0
  184. package/daemon/dist/domain/workspace/workspace-doctor.js +448 -0
  185. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -0
  186. package/daemon/dist/index.d.ts.map +1 -1
  187. package/daemon/dist/index.js +11 -0
  188. package/daemon/dist/index.js.map +1 -1
  189. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  190. package/daemon/dist/routes/bundles.js +966 -7
  191. package/daemon/dist/routes/bundles.js.map +1 -1
  192. package/daemon/dist/routes/config.d.ts.map +1 -1
  193. package/daemon/dist/routes/config.js +19 -2
  194. package/daemon/dist/routes/config.js.map +1 -1
  195. package/daemon/dist/routes/info.d.ts +3 -0
  196. package/daemon/dist/routes/info.d.ts.map +1 -0
  197. package/daemon/dist/routes/info.js +20 -0
  198. package/daemon/dist/routes/info.js.map +1 -0
  199. package/daemon/dist/routes/ps.js +4 -1
  200. package/daemon/dist/routes/ps.js.map +1 -1
  201. package/daemon/dist/routes/queue.d.ts +18 -0
  202. package/daemon/dist/routes/queue.d.ts.map +1 -1
  203. package/daemon/dist/routes/queue.js +97 -5
  204. package/daemon/dist/routes/queue.js.map +1 -1
  205. package/daemon/dist/routes/rig-policy.d.ts +9 -0
  206. package/daemon/dist/routes/rig-policy.d.ts.map +1 -0
  207. package/daemon/dist/routes/rig-policy.js +174 -0
  208. package/daemon/dist/routes/rig-policy.js.map +1 -0
  209. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  210. package/daemon/dist/routes/rigs.js +134 -4
  211. package/daemon/dist/routes/rigs.js.map +1 -1
  212. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  213. package/daemon/dist/routes/sessions.js +26 -3
  214. package/daemon/dist/routes/sessions.js.map +1 -1
  215. package/daemon/dist/routes/up.d.ts +25 -0
  216. package/daemon/dist/routes/up.d.ts.map +1 -1
  217. package/daemon/dist/routes/up.js +70 -3
  218. package/daemon/dist/routes/up.js.map +1 -1
  219. package/daemon/dist/routes/workspace.d.ts.map +1 -1
  220. package/daemon/dist/routes/workspace.js +80 -1
  221. package/daemon/dist/routes/workspace.js.map +1 -1
  222. package/daemon/dist/server.d.ts +10 -0
  223. package/daemon/dist/server.d.ts.map +1 -1
  224. package/daemon/dist/server.js +11 -0
  225. package/daemon/dist/server.js.map +1 -1
  226. package/daemon/dist/startup.d.ts.map +1 -1
  227. package/daemon/dist/startup.js +46 -4
  228. package/daemon/dist/startup.js.map +1 -1
  229. package/daemon/docs/reference/getting-started.md +69 -0
  230. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +28 -4
  231. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +361 -15
  232. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +2 -2
  233. package/daemon/specs/rigs/launch/conveyor/rig.yaml +1 -1
  234. package/dist/client.d.ts +3 -0
  235. package/dist/client.d.ts.map +1 -1
  236. package/dist/client.js +13 -1
  237. package/dist/client.js.map +1 -1
  238. package/dist/commands/add.d.ts +4 -0
  239. package/dist/commands/add.d.ts.map +1 -0
  240. package/dist/commands/add.js +115 -0
  241. package/dist/commands/add.js.map +1 -0
  242. package/dist/commands/archive.d.ts +10 -0
  243. package/dist/commands/archive.d.ts.map +1 -0
  244. package/dist/commands/archive.js +68 -0
  245. package/dist/commands/archive.js.map +1 -0
  246. package/dist/commands/bootstrap.js +2 -2
  247. package/dist/commands/bootstrap.js.map +1 -1
  248. package/dist/commands/bundle.d.ts.map +1 -1
  249. package/dist/commands/bundle.js +123 -2
  250. package/dist/commands/bundle.js.map +1 -1
  251. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  252. package/dist/commands/config-init-workspace.js +40 -5
  253. package/dist/commands/config-init-workspace.js.map +1 -1
  254. package/dist/commands/discover.js +2 -2
  255. package/dist/commands/discover.js.map +1 -1
  256. package/dist/commands/down.d.ts +1 -1
  257. package/dist/commands/down.d.ts.map +1 -1
  258. package/dist/commands/down.js +91 -3
  259. package/dist/commands/down.js.map +1 -1
  260. package/dist/commands/ps.d.ts.map +1 -1
  261. package/dist/commands/ps.js +72 -10
  262. package/dist/commands/ps.js.map +1 -1
  263. package/dist/commands/queue.d.ts +6 -0
  264. package/dist/commands/queue.d.ts.map +1 -1
  265. package/dist/commands/queue.js +103 -5
  266. package/dist/commands/queue.js.map +1 -1
  267. package/dist/commands/rig-policy.d.ts +48 -0
  268. package/dist/commands/rig-policy.d.ts.map +1 -0
  269. package/dist/commands/rig-policy.js +429 -0
  270. package/dist/commands/rig-policy.js.map +1 -0
  271. package/dist/commands/scope.d.ts +6 -0
  272. package/dist/commands/scope.d.ts.map +1 -0
  273. package/dist/commands/scope.js +659 -0
  274. package/dist/commands/scope.js.map +1 -0
  275. package/dist/commands/send.d.ts.map +1 -1
  276. package/dist/commands/send.js +11 -0
  277. package/dist/commands/send.js.map +1 -1
  278. package/dist/commands/setup.d.ts +7 -0
  279. package/dist/commands/setup.d.ts.map +1 -1
  280. package/dist/commands/setup.js +28 -1
  281. package/dist/commands/setup.js.map +1 -1
  282. package/dist/commands/status.d.ts.map +1 -1
  283. package/dist/commands/status.js +35 -2
  284. package/dist/commands/status.js.map +1 -1
  285. package/dist/commands/unarchive.d.ts +10 -0
  286. package/dist/commands/unarchive.d.ts.map +1 -0
  287. package/dist/commands/unarchive.js +53 -0
  288. package/dist/commands/unarchive.js.map +1 -0
  289. package/dist/commands/up.d.ts.map +1 -1
  290. package/dist/commands/up.js +97 -0
  291. package/dist/commands/up.js.map +1 -1
  292. package/dist/commands/whoami.d.ts.map +1 -1
  293. package/dist/commands/whoami.js +4 -1
  294. package/dist/commands/whoami.js.map +1 -1
  295. package/dist/commands/workflow.d.ts +9 -0
  296. package/dist/commands/workflow.d.ts.map +1 -1
  297. package/dist/commands/workflow.js +141 -4
  298. package/dist/commands/workflow.js.map +1 -1
  299. package/dist/commands/workspace.d.ts +20 -0
  300. package/dist/commands/workspace.d.ts.map +1 -1
  301. package/dist/commands/workspace.js +140 -10
  302. package/dist/commands/workspace.js.map +1 -1
  303. package/dist/daemon-lifecycle.d.ts +48 -1
  304. package/dist/daemon-lifecycle.d.ts.map +1 -1
  305. package/dist/daemon-lifecycle.js +57 -2
  306. package/dist/daemon-lifecycle.js.map +1 -1
  307. package/dist/index.d.ts +5 -0
  308. package/dist/index.d.ts.map +1 -1
  309. package/dist/index.js +12 -0
  310. package/dist/index.js.map +1 -1
  311. package/dist/lib/scope/dot-id.d.ts +43 -0
  312. package/dist/lib/scope/dot-id.d.ts.map +1 -0
  313. package/dist/lib/scope/dot-id.js +165 -0
  314. package/dist/lib/scope/dot-id.js.map +1 -0
  315. package/dist/lib/scope/scope-fs.d.ts +79 -0
  316. package/dist/lib/scope/scope-fs.d.ts.map +1 -0
  317. package/dist/lib/scope/scope-fs.js +468 -0
  318. package/dist/lib/scope/scope-fs.js.map +1 -0
  319. package/dist/lib/scope/templates.d.ts +38 -0
  320. package/dist/lib/scope/templates.d.ts.map +1 -0
  321. package/dist/lib/scope/templates.js +109 -0
  322. package/dist/lib/scope/templates.js.map +1 -0
  323. package/dist/lib/scope/types.d.ts +61 -0
  324. package/dist/lib/scope/types.d.ts.map +1 -0
  325. package/dist/lib/scope/types.js +38 -0
  326. package/dist/lib/scope/types.js.map +1 -0
  327. package/dist/lib/scope-templates/backlog-deprecation.md +26 -0
  328. package/dist/lib/scope-templates/backlog-tech-debt.md +22 -0
  329. package/dist/lib/scope-templates/bug-fix.md +30 -0
  330. package/dist/lib/scope-templates/mission-notes.md +97 -0
  331. package/dist/lib/scope-templates/mission-placeholder.md +20 -0
  332. package/dist/lib/scope-templates/mission-release.md +25 -0
  333. package/dist/lib/scope-templates/placeholder.md +30 -0
  334. package/dist/lib/scope-templates/release-feature.md +26 -0
  335. package/dist/lib/scope-templates/research.md +22 -0
  336. package/dist/mcp-server.d.ts.map +1 -1
  337. package/dist/mcp-server.js +29 -0
  338. package/dist/mcp-server.js.map +1 -1
  339. package/dist/release-surface/affected-skills.d.ts +49 -0
  340. package/dist/release-surface/affected-skills.d.ts.map +1 -0
  341. package/dist/release-surface/affected-skills.js +153 -0
  342. package/dist/release-surface/affected-skills.js.map +1 -0
  343. package/dist/release-surface/extract-surface.d.ts +23 -0
  344. package/dist/release-surface/extract-surface.d.ts.map +1 -0
  345. package/dist/release-surface/extract-surface.js +193 -0
  346. package/dist/release-surface/extract-surface.js.map +1 -0
  347. package/dist/release-surface/generate.d.ts +2 -0
  348. package/dist/release-surface/generate.d.ts.map +1 -0
  349. package/dist/release-surface/generate.js +51 -0
  350. package/dist/release-surface/generate.js.map +1 -0
  351. package/dist/release-surface/surface-diff.d.ts +40 -0
  352. package/dist/release-surface/surface-diff.d.ts.map +1 -0
  353. package/dist/release-surface/surface-diff.js +212 -0
  354. package/dist/release-surface/surface-diff.js.map +1 -0
  355. package/package.json +2 -2
  356. package/ui/dist/assets/index-CrJgCmkX.js +552 -0
  357. package/ui/dist/index.html +1 -1
  358. package/ui/dist/assets/index-Rl3ZBrUg.js +0 -547
@@ -0,0 +1,468 @@
1
+ // release-0.3.2 slice 12 — filesystem + git helpers shared across
2
+ // `rig scope` verbs. Mission/slice discovery, frontmatter parse/write,
3
+ // auto-numbering, git mv wrapper. Keeps slice/mission command files
4
+ // thin.
5
+ import { execFileSync } from "node:child_process";
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import YAML from "yaml";
9
+ import { ScopeCliError } from "./types.js";
10
+ import { DEFAULT_PROJECT_PREFIX, inferMissionDotId, nextEscapeBandOrdinal, } from "./dot-id.js";
11
+ const FRONTMATTER_DELIM = "---\n";
12
+ const SLICE_DIRNAME_RE = /^(\d+)-(.+)$/;
13
+ // ---------------------------------------------------------------------
14
+ // Frontmatter parse + write
15
+ // ---------------------------------------------------------------------
16
+ /** Split a markdown file into [frontmatter, body]. Returns `[{}, content]`
17
+ * when no frontmatter delimiter is present. */
18
+ export function splitFrontmatter(content) {
19
+ if (!content.startsWith(FRONTMATTER_DELIM)) {
20
+ return { frontmatter: {}, body: content };
21
+ }
22
+ const rest = content.slice(FRONTMATTER_DELIM.length);
23
+ const endIdx = rest.indexOf(`\n${FRONTMATTER_DELIM.trim()}\n`);
24
+ if (endIdx === -1) {
25
+ // Allow trailing `---` without a final newline (last char of file).
26
+ const endIdx2 = rest.indexOf(`\n---`);
27
+ if (endIdx2 === -1)
28
+ return { frontmatter: {}, body: content };
29
+ const raw = rest.slice(0, endIdx2);
30
+ return { frontmatter: parseYamlSafely(raw), body: rest.slice(endIdx2 + 4).replace(/^\n/, "") };
31
+ }
32
+ const raw = rest.slice(0, endIdx);
33
+ const body = rest.slice(endIdx + `\n${FRONTMATTER_DELIM.trim()}\n`.length);
34
+ return { frontmatter: parseYamlSafely(raw), body };
35
+ }
36
+ function parseYamlSafely(raw) {
37
+ try {
38
+ const parsed = YAML.parse(raw);
39
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
40
+ ? parsed
41
+ : {};
42
+ }
43
+ catch {
44
+ return {};
45
+ }
46
+ }
47
+ /** Re-stitch frontmatter + body into a single markdown string. */
48
+ export function joinFrontmatter(frontmatter, body) {
49
+ const yaml = YAML.stringify(frontmatter, { lineWidth: 0 }).trim();
50
+ const trailing = body.startsWith("\n") ? "" : "\n";
51
+ return `---\n${yaml}\n---\n${trailing}${body}`;
52
+ }
53
+ /** Read + parse frontmatter from a markdown file. Returns `{}` if the
54
+ * file is missing OR has no frontmatter (graceful for placeholder
55
+ * missions that pre-date the convention). */
56
+ export function readFrontmatter(absPath) {
57
+ try {
58
+ return splitFrontmatter(fs.readFileSync(absPath, "utf8")).frontmatter;
59
+ }
60
+ catch {
61
+ return {};
62
+ }
63
+ }
64
+ /** Update specific keys in a markdown file's frontmatter. Existing
65
+ * unknown keys are preserved. Generates minimal frontmatter when
66
+ * absent. */
67
+ export function updateFrontmatter(absPath, updates) {
68
+ const original = fs.existsSync(absPath) ? fs.readFileSync(absPath, "utf8") : "";
69
+ const { frontmatter, body } = splitFrontmatter(original);
70
+ const merged = { ...frontmatter, ...updates };
71
+ fs.writeFileSync(absPath, joinFrontmatter(merged, body), "utf8");
72
+ }
73
+ // ---------------------------------------------------------------------
74
+ // Mission discovery
75
+ // ---------------------------------------------------------------------
76
+ /** Locate the missions root for the working substrate. Resolution
77
+ * order:
78
+ * 1. Explicit override (env or arg)
79
+ * 2. $OPENRIG_WORK_ROOT/missions
80
+ * 3. Search up from cwd for a `missions/` folder
81
+ */
82
+ export function resolveMissionsRoot(opts = {}) {
83
+ const cwd = opts.cwd ?? process.cwd();
84
+ const fromOverride = opts.override ?? process.env.OPENRIG_WORK_ROOT;
85
+ if (fromOverride) {
86
+ const candidate = path.isAbsolute(fromOverride) ? fromOverride : path.resolve(cwd, fromOverride);
87
+ const missions = path.join(candidate, "missions");
88
+ if (fs.existsSync(missions) && fs.statSync(missions).isDirectory())
89
+ return missions;
90
+ if (path.basename(candidate) === "missions" && fs.existsSync(candidate))
91
+ return candidate;
92
+ }
93
+ let dir = cwd;
94
+ for (let i = 0; i < 8; i++) {
95
+ const candidate = path.join(dir, "missions");
96
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory())
97
+ return candidate;
98
+ const parent = path.dirname(dir);
99
+ if (parent === dir)
100
+ break;
101
+ dir = parent;
102
+ }
103
+ throw new ScopeCliError({
104
+ fact: `Could not locate a missions/ root from cwd ${cwd}.`,
105
+ consequence: "No mission tree to operate on.",
106
+ action: "cd into the substrate workspace, or set OPENRIG_WORK_ROOT=/path/to/your/workspace.",
107
+ });
108
+ }
109
+ /** List mission folders under the missions root. A mission is any
110
+ * top-level folder containing a README.md (per IMPLEMENTATION-PRD
111
+ * §2.1 / HG-8). Directories without a README.md are skipped — they
112
+ * represent scratch/junk, not declared missions. */
113
+ export function listMissions(missionsRoot) {
114
+ if (!fs.existsSync(missionsRoot))
115
+ return [];
116
+ const entries = fs.readdirSync(missionsRoot, { withFileTypes: true });
117
+ const out = [];
118
+ for (const entry of entries) {
119
+ if (!entry.isDirectory())
120
+ continue;
121
+ const absPath = path.join(missionsRoot, entry.name);
122
+ const readmePath = path.join(absPath, "README.md");
123
+ const hasReadme = fs.existsSync(readmePath);
124
+ if (!hasReadme)
125
+ continue;
126
+ const frontmatter = readFrontmatter(readmePath);
127
+ const slicesDir = path.join(absPath, "slices");
128
+ const closedDir = path.join(absPath, "closed");
129
+ const activeSliceCount = countSliceDirs(slicesDir);
130
+ const closedSliceCount = countSliceDirs(closedDir);
131
+ const id = pickIdFromFrontmatter(frontmatter);
132
+ out.push({
133
+ name: entry.name,
134
+ absPath,
135
+ readmePath: hasReadme ? readmePath : null,
136
+ frontmatter,
137
+ id,
138
+ activeSliceCount,
139
+ closedSliceCount,
140
+ });
141
+ }
142
+ // Stable order: by mission name.
143
+ out.sort((a, b) => a.name.localeCompare(b.name));
144
+ return out;
145
+ }
146
+ function countSliceDirs(dir) {
147
+ if (!fs.existsSync(dir))
148
+ return 0;
149
+ return fs.readdirSync(dir, { withFileTypes: true })
150
+ .filter((e) => e.isDirectory() && SLICE_DIRNAME_RE.test(e.name))
151
+ .length;
152
+ }
153
+ function pickIdFromFrontmatter(fm) {
154
+ const candidate = fm.id ?? fm.dotId;
155
+ return typeof candidate === "string" && candidate.length > 0 ? candidate : null;
156
+ }
157
+ /** Resolve a mission by name OR path relative to the missions root.
158
+ * Throws ScopeCliError on miss OR when the directory exists but
159
+ * lacks a README.md (consistent with listMissions' README gate per
160
+ * PRD §2.1 / HG-8 — README-less dirs are scratch/junk, not declared
161
+ * missions, so mutation commands must not silently target them). */
162
+ export function findMission(missionsRoot, identifier) {
163
+ const candidates = [
164
+ path.join(missionsRoot, identifier),
165
+ path.isAbsolute(identifier) ? identifier : path.resolve(missionsRoot, identifier),
166
+ ];
167
+ for (const candidate of candidates) {
168
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
169
+ const readmePath = path.join(candidate, "README.md");
170
+ if (!fs.existsSync(readmePath)) {
171
+ throw new ScopeCliError({
172
+ fact: `Directory "${identifier}" exists at ${candidate} but contains no README.md.`,
173
+ consequence: "It is not a declared mission. Command did not run.",
174
+ action: "Create it as a mission with: rig scope mission create " + identifier + ". Or add a README.md if the folder is intended to be a mission.",
175
+ });
176
+ }
177
+ return buildMissionInfo(missionsRoot, candidate);
178
+ }
179
+ }
180
+ throw new ScopeCliError({
181
+ fact: `Mission "${identifier}" not found under ${missionsRoot}.`,
182
+ consequence: "Command did not run.",
183
+ action: "List available missions with: rig scope mission ls",
184
+ });
185
+ }
186
+ function buildMissionInfo(missionsRoot, absPath) {
187
+ const readmePath = path.join(absPath, "README.md");
188
+ const hasReadme = fs.existsSync(readmePath);
189
+ const frontmatter = hasReadme ? readFrontmatter(readmePath) : {};
190
+ return {
191
+ name: path.basename(absPath),
192
+ absPath,
193
+ readmePath: hasReadme ? readmePath : null,
194
+ frontmatter,
195
+ id: pickIdFromFrontmatter(frontmatter),
196
+ activeSliceCount: countSliceDirs(path.join(absPath, "slices")),
197
+ closedSliceCount: countSliceDirs(path.join(absPath, "closed")),
198
+ };
199
+ }
200
+ // ---------------------------------------------------------------------
201
+ // Slice discovery
202
+ // ---------------------------------------------------------------------
203
+ export function listSlices(mission, state) {
204
+ const dirs = [];
205
+ if (state === "active" || state === "shipped" || state === "all") {
206
+ dirs.push({ root: path.join(mission.absPath, "slices"), bucket: "active" });
207
+ }
208
+ if (state === "closed" || state === "all") {
209
+ dirs.push({ root: path.join(mission.absPath, "closed"), bucket: "closed" });
210
+ }
211
+ const out = [];
212
+ for (const { root } of dirs) {
213
+ if (!fs.existsSync(root))
214
+ continue;
215
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
216
+ if (!entry.isDirectory())
217
+ continue;
218
+ const m = SLICE_DIRNAME_RE.exec(entry.name);
219
+ if (!m)
220
+ continue;
221
+ const sliceInfo = buildSliceInfo(mission, root, entry.name);
222
+ out.push(sliceInfo);
223
+ }
224
+ }
225
+ if (state === "active") {
226
+ // active = not in closed/, but also not shipped status.
227
+ return out.filter((s) => {
228
+ const st = (s.status ?? "").toLowerCase();
229
+ return !st.startsWith("closed") && !st.startsWith("shipped");
230
+ });
231
+ }
232
+ if (state === "shipped") {
233
+ return out.filter((s) => (s.status ?? "").toLowerCase().startsWith("shipped"));
234
+ }
235
+ return out;
236
+ }
237
+ function buildSliceInfo(mission, sliceRoot, dirName) {
238
+ const m = SLICE_DIRNAME_RE.exec(dirName);
239
+ const nn = m ? Number(m[1]) : null;
240
+ const slug = m ? m[2] : null;
241
+ const absPath = path.join(sliceRoot, dirName);
242
+ const readmePath = path.join(absPath, "README.md");
243
+ const hasReadme = fs.existsSync(readmePath);
244
+ const frontmatter = hasReadme ? readFrontmatter(readmePath) : {};
245
+ const id = pickIdFromFrontmatter(frontmatter);
246
+ const status = typeof frontmatter.status === "string" ? frontmatter.status.toLowerCase() : null;
247
+ return {
248
+ name: dirName,
249
+ absPath,
250
+ readmePath: hasReadme ? readmePath : null,
251
+ frontmatter,
252
+ nn,
253
+ slug,
254
+ missionName: mission.name,
255
+ id,
256
+ status,
257
+ };
258
+ }
259
+ /** Resolve a slice path (absolute, relative-to-substrate, or
260
+ * relative-to-mission) into a SliceInfo. */
261
+ export function findSlice(missionsRoot, slicePath, hintMission) {
262
+ const candidates = [];
263
+ if (path.isAbsolute(slicePath)) {
264
+ candidates.push(slicePath);
265
+ }
266
+ else {
267
+ candidates.push(path.resolve(missionsRoot, "..", slicePath));
268
+ candidates.push(path.resolve(missionsRoot, slicePath));
269
+ if (hintMission) {
270
+ candidates.push(path.join(missionsRoot, hintMission, "slices", slicePath));
271
+ candidates.push(path.join(missionsRoot, hintMission, "closed", slicePath));
272
+ }
273
+ }
274
+ for (const candidate of candidates) {
275
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
276
+ // Walk up to find the owning mission.
277
+ const owningMissionPath = findOwningMission(missionsRoot, candidate);
278
+ if (!owningMissionPath) {
279
+ throw new ScopeCliError({
280
+ fact: `Slice path "${slicePath}" resolved to ${candidate} but no parent mission was found.`,
281
+ consequence: "Cannot determine mission context for this slice.",
282
+ action: "Ensure the slice lives under <missionsRoot>/<mission>/{slices,closed}/.",
283
+ });
284
+ }
285
+ const mission = buildMissionInfo(missionsRoot, owningMissionPath);
286
+ const sliceRoot = path.dirname(candidate);
287
+ return buildSliceInfo(mission, sliceRoot, path.basename(candidate));
288
+ }
289
+ }
290
+ throw new ScopeCliError({
291
+ fact: `Slice "${slicePath}" not found.`,
292
+ consequence: "Command did not run.",
293
+ action: "Check the path. List slices in a mission with: rig scope slice ls --mission <name>",
294
+ });
295
+ }
296
+ function findOwningMission(missionsRoot, slicePath) {
297
+ let dir = path.dirname(slicePath);
298
+ while (dir.startsWith(missionsRoot) && dir !== missionsRoot) {
299
+ if (path.dirname(dir) === missionsRoot)
300
+ return dir;
301
+ dir = path.dirname(dir);
302
+ }
303
+ return null;
304
+ }
305
+ // ---------------------------------------------------------------------
306
+ // Auto-numbering
307
+ // ---------------------------------------------------------------------
308
+ /** Find the next available NN for a mission's slices/ folder. Scans
309
+ * BOTH slices/ AND closed/ so numbers are never reused (§3.2). */
310
+ export function nextSliceNN(missionAbsPath) {
311
+ let max = 0;
312
+ for (const subdir of ["slices", "closed"]) {
313
+ const root = path.join(missionAbsPath, subdir);
314
+ if (!fs.existsSync(root))
315
+ continue;
316
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
317
+ if (!entry.isDirectory())
318
+ continue;
319
+ const m = SLICE_DIRNAME_RE.exec(entry.name);
320
+ if (!m)
321
+ continue;
322
+ const n = Number(m[1]);
323
+ if (Number.isFinite(n) && n > max)
324
+ max = n;
325
+ }
326
+ }
327
+ return max + 1;
328
+ }
329
+ /** Mint or read the dot-ID for a mission. If the mission's README has
330
+ * an `id:` field, return it. Otherwise infer from the folder name
331
+ * (release-X.Y.Z → OPR.X.Y.Z; otherwise escape band). */
332
+ export function ensureMissionId(mission, missionsRoot) {
333
+ if (mission.id)
334
+ return mission.id;
335
+ // Try release-pattern first; if it matches, no peer scan needed.
336
+ try {
337
+ const id = inferMissionDotId(mission.name, null);
338
+ return id;
339
+ }
340
+ catch {
341
+ // Fall through to escape-band path.
342
+ }
343
+ const peers = listMissions(missionsRoot).filter((m) => m.name !== mission.name);
344
+ const ordinal = nextEscapeBandOrdinal(peers.map((p) => p.id));
345
+ return inferMissionDotId(mission.name, ordinal);
346
+ }
347
+ /** Same as ensureMissionId, but ALSO writes the inferred id back into
348
+ * the mission's README frontmatter when it was absent. Use this at
349
+ * every site that mints a child id (slice create / ship / move target)
350
+ * — per the convention's lazy-adoption rule: when a child is created
351
+ * under a pre-existing parent with no id, assign the parent's id
352
+ * on-demand at the same time. Narrow, single-parent, create-triggered;
353
+ * never mass-migration. */
354
+ export function ensureMissionIdPersisted(mission, missionsRoot) {
355
+ const id = ensureMissionId(mission, missionsRoot);
356
+ if (!mission.id && mission.readmePath) {
357
+ updateFrontmatter(mission.readmePath, { id });
358
+ // Reflect the write on the in-memory MissionInfo so subsequent
359
+ // callers in the same command don't re-mint a different ordinal.
360
+ mission.id = id;
361
+ }
362
+ return id;
363
+ }
364
+ // ---------------------------------------------------------------------
365
+ // Git move
366
+ // ---------------------------------------------------------------------
367
+ /** Return the git toplevel for a path, or null if not inside a repo. */
368
+ export function gitTopLevel(absPath) {
369
+ const dir = fs.existsSync(absPath) && fs.statSync(absPath).isDirectory() ? absPath : path.dirname(absPath);
370
+ try {
371
+ const out = execFileSync("git", ["-C", dir, "rev-parse", "--show-toplevel"], {
372
+ encoding: "utf8",
373
+ stdio: ["ignore", "pipe", "ignore"],
374
+ }).trim();
375
+ return out || null;
376
+ }
377
+ catch {
378
+ return null;
379
+ }
380
+ }
381
+ /** Refuse to move a path with uncommitted local changes. Catches the
382
+ * "dirty working tree" risk in §11.1 / §3.4 — `git mv` would silently
383
+ * carry along the user's in-progress edits. */
384
+ export function assertCleanWorkingTree(repoRoot, relPath) {
385
+ let status;
386
+ try {
387
+ status = execFileSync("git", ["-C", repoRoot, "status", "--porcelain", "--", relPath], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] });
388
+ }
389
+ catch (err) {
390
+ throw new ScopeCliError({
391
+ fact: `git status failed for ${relPath} in ${repoRoot}: ${err.message}`,
392
+ consequence: "Could not verify the slice's working-tree state. Move aborted.",
393
+ action: "Check the repository at " + repoRoot + " and retry.",
394
+ });
395
+ }
396
+ if (status.trim().length > 0) {
397
+ throw new ScopeCliError({
398
+ fact: `Working tree under ${relPath} has uncommitted changes:\n${status.trimEnd()}`,
399
+ consequence: "Refusing to git mv — your local edits would silently move with the slice.",
400
+ action: "Commit (git commit -m '...') or stash (git stash) and retry.",
401
+ });
402
+ }
403
+ }
404
+ /** Move a directory using `git mv` when inside a repo; fall back to
405
+ * `fs.renameSync` with a warning when not. Returns true if git was
406
+ * used. */
407
+ export function moveSlice(srcAbs, destAbs, opts = {}) {
408
+ if (!fs.existsSync(srcAbs)) {
409
+ throw new ScopeCliError({
410
+ fact: `Source path ${srcAbs} does not exist.`,
411
+ consequence: "Move did not run.",
412
+ action: "Verify the slice path and retry.",
413
+ });
414
+ }
415
+ if (fs.existsSync(destAbs)) {
416
+ throw new ScopeCliError({
417
+ fact: `Destination path ${destAbs} already exists.`,
418
+ consequence: "Refusing to overwrite an existing slice.",
419
+ action: "Pick a different destination, or remove the existing folder first.",
420
+ });
421
+ }
422
+ fs.mkdirSync(path.dirname(destAbs), { recursive: true });
423
+ const repoRoot = gitTopLevel(srcAbs);
424
+ if (!repoRoot) {
425
+ fs.renameSync(srcAbs, destAbs);
426
+ return { usedGit: false, repoRoot: null };
427
+ }
428
+ // Normalize symlinks (macOS /var/folders → /private/var/folders) so
429
+ // path.relative produces a path INSIDE the repo, not a ../../escape.
430
+ const realSrcAbs = fs.realpathSync(srcAbs);
431
+ const realDestParent = fs.realpathSync(path.dirname(destAbs));
432
+ const realDestAbs = path.join(realDestParent, path.basename(destAbs));
433
+ const srcRel = path.relative(repoRoot, realSrcAbs);
434
+ assertCleanWorkingTree(repoRoot, srcRel);
435
+ const destRel = path.relative(repoRoot, realDestAbs);
436
+ try {
437
+ execFileSync("git", ["-C", repoRoot, "mv", srcRel, destRel], {
438
+ encoding: "utf8",
439
+ stdio: ["ignore", "pipe", "pipe"],
440
+ });
441
+ }
442
+ catch (err) {
443
+ throw new ScopeCliError({
444
+ fact: `git mv ${srcRel} ${destRel} failed: ${err.message}`,
445
+ consequence: "Move aborted; source unchanged.",
446
+ action: "Inspect the repo state and retry.",
447
+ });
448
+ }
449
+ if (opts.commit) {
450
+ // Future hook; v0 doesn't auto-commit.
451
+ }
452
+ return { usedGit: true, repoRoot };
453
+ }
454
+ // ---------------------------------------------------------------------
455
+ // Misc
456
+ // ---------------------------------------------------------------------
457
+ export function todayDateISO() {
458
+ const d = new Date();
459
+ const y = d.getUTCFullYear();
460
+ const m = String(d.getUTCMonth() + 1).padStart(2, "0");
461
+ const day = String(d.getUTCDate()).padStart(2, "0");
462
+ return `${y}-${m}-${day}`;
463
+ }
464
+ export function pad2(n) {
465
+ return String(n).padStart(2, "0");
466
+ }
467
+ export { DEFAULT_PROJECT_PREFIX };
468
+ //# sourceMappingURL=scope-fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-fs.js","sourceRoot":"","sources":["../../../src/lib/scope/scope-fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { MissionTemplateKind, SliceTemplateKind } from "./types.js";
2
+ export interface RenderOpts {
3
+ id: string;
4
+ slice_number?: string;
5
+ slug: string;
6
+ mission: string;
7
+ title: string;
8
+ created_date: string;
9
+ release_version?: string;
10
+ }
11
+ export declare function renderSliceTemplate(kind: SliceTemplateKind, opts: RenderOpts): string;
12
+ export declare function renderMissionTemplate(kind: MissionTemplateKind, opts: RenderOpts): string;
13
+ export interface MissionNotesRenderOpts {
14
+ mission_id: string;
15
+ mission_name: string;
16
+ created_date: string;
17
+ }
18
+ /**
19
+ * Resolve the MISSION_NOTES.md template absolute path.
20
+ * Env-var override > built-in bundled fallback (scope-templates/mission-notes.md).
21
+ * Returns the absolute path; the caller reads the file content.
22
+ */
23
+ export declare function resolveMissionNotesTemplatePath(envValue?: string): string;
24
+ /**
25
+ * Render a MISSION_NOTES.md by reading the resolved template + substituting
26
+ * the three placeholders (mission_id / mission_name / created_date).
27
+ *
28
+ * Surfaces the resolution decision (env-override vs built-in) for callers
29
+ * that want to log or test the path.
30
+ */
31
+ export declare function renderMissionNotesTemplate(opts: MissionNotesRenderOpts, envValue?: string): {
32
+ rendered: string;
33
+ resolvedFrom: "env" | "built-in";
34
+ absPath: string;
35
+ };
36
+ /** Convert a folder-slug to a title-cased display name. */
37
+ export declare function titleFromSlug(slug: string): string;
38
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/lib/scope/templates.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+BzE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIzF;AAUD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAczE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUzE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}
@@ -0,0 +1,109 @@
1
+ // release-0.3.2 slice 12 — template loader. Templates live as
2
+ // markdown files alongside the source so they can be edited like any
3
+ // other doc. The build copies them to dist/ via tsconfig
4
+ // rootDir/files behavior — but since .md isn't a .ts file, we read
5
+ // them directly via fileURLToPath to remain robust across local dev
6
+ // and the published package layout.
7
+ import fs from "node:fs";
8
+ import path from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { ScopeCliError } from "./types.js";
11
+ const here = path.dirname(fileURLToPath(import.meta.url));
12
+ /** Candidate template roots, in order: source tree (dev), dist (built).
13
+ * We resolve at call time so the first existing directory wins. */
14
+ function candidateRoots() {
15
+ return [
16
+ // Dev: packages/cli/src/lib/scope/ → ../scope-templates
17
+ path.resolve(here, "..", "scope-templates"),
18
+ // Built: dist/lib/scope/ → ../../src/lib/scope-templates (one level up further if
19
+ // dist lands at packages/cli/dist/lib/scope).
20
+ path.resolve(here, "..", "..", "lib", "scope-templates"),
21
+ // Fallback: source tree relative to compiled dist when source is co-shipped.
22
+ path.resolve(here, "..", "..", "..", "src", "lib", "scope-templates"),
23
+ ];
24
+ }
25
+ function resolveTemplate(filename) {
26
+ for (const root of candidateRoots()) {
27
+ const candidate = path.join(root, filename);
28
+ if (fs.existsSync(candidate))
29
+ return candidate;
30
+ }
31
+ throw new ScopeCliError({
32
+ fact: `Template ${filename} could not be located.`,
33
+ consequence: "Cannot scaffold the new artifact.",
34
+ action: "Reinstall @openrig/cli, or run from a checkout with packages/cli/src/lib/scope-templates/ present.",
35
+ });
36
+ }
37
+ function applyPlaceholders(content, opts) {
38
+ return content
39
+ .replace(/\{\{id\}\}/g, opts.id)
40
+ .replace(/\{\{slice_number\}\}/g, opts.slice_number ?? "")
41
+ .replace(/\{\{slug\}\}/g, opts.slug)
42
+ .replace(/\{\{mission\}\}/g, opts.mission)
43
+ .replace(/\{\{title\}\}/g, opts.title)
44
+ .replace(/\{\{created_date\}\}/g, opts.created_date)
45
+ .replace(/\{\{release_version\}\}/g, opts.release_version ?? "");
46
+ }
47
+ export function renderSliceTemplate(kind, opts) {
48
+ const filename = `${kind}.md`;
49
+ const raw = fs.readFileSync(resolveTemplate(filename), "utf8");
50
+ return applyPlaceholders(raw, opts);
51
+ }
52
+ export function renderMissionTemplate(kind, opts) {
53
+ const filename = kind === "release" ? "mission-release.md" : "mission-placeholder.md";
54
+ const raw = fs.readFileSync(resolveTemplate(filename), "utf8");
55
+ return applyPlaceholders(raw, opts);
56
+ }
57
+ function applyMissionNotesPlaceholders(content, opts) {
58
+ return content
59
+ .replace(/\{\{mission_id\}\}/g, opts.mission_id)
60
+ .replace(/\{\{mission_name\}\}/g, opts.mission_name)
61
+ .replace(/\{\{created_date\}\}/g, opts.created_date);
62
+ }
63
+ /**
64
+ * Resolve the MISSION_NOTES.md template absolute path.
65
+ * Env-var override > built-in bundled fallback (scope-templates/mission-notes.md).
66
+ * Returns the absolute path; the caller reads the file content.
67
+ */
68
+ export function resolveMissionNotesTemplatePath(envValue) {
69
+ const fromEnv = envValue ?? process.env.OPENRIG_MISSION_NOTES_TEMPLATE_PATH;
70
+ if (fromEnv && fromEnv.trim().length > 0) {
71
+ const absPath = path.resolve(fromEnv.trim());
72
+ if (!fs.existsSync(absPath)) {
73
+ throw new ScopeCliError({
74
+ fact: `OPENRIG_MISSION_NOTES_TEMPLATE_PATH points at "${fromEnv}", which does not exist.`,
75
+ consequence: "MISSION_NOTES.md not scaffolded.",
76
+ action: "Set OPENRIG_MISSION_NOTES_TEMPLATE_PATH to an absolute path to a readable template file, or unset it to use the built-in bundled fallback.",
77
+ });
78
+ }
79
+ return absPath;
80
+ }
81
+ return resolveTemplate("mission-notes.md");
82
+ }
83
+ /**
84
+ * Render a MISSION_NOTES.md by reading the resolved template + substituting
85
+ * the three placeholders (mission_id / mission_name / created_date).
86
+ *
87
+ * Surfaces the resolution decision (env-override vs built-in) for callers
88
+ * that want to log or test the path.
89
+ */
90
+ export function renderMissionNotesTemplate(opts, envValue) {
91
+ const envVal = envValue ?? process.env.OPENRIG_MISSION_NOTES_TEMPLATE_PATH;
92
+ const usedEnv = Boolean(envVal && envVal.trim().length > 0);
93
+ const absPath = resolveMissionNotesTemplatePath(envValue);
94
+ const raw = fs.readFileSync(absPath, "utf8");
95
+ return {
96
+ rendered: applyMissionNotesPlaceholders(raw, opts),
97
+ resolvedFrom: usedEnv ? "env" : "built-in",
98
+ absPath,
99
+ };
100
+ }
101
+ /** Convert a folder-slug to a title-cased display name. */
102
+ export function titleFromSlug(slug) {
103
+ return slug
104
+ .split(/[-_]/g)
105
+ .filter(Boolean)
106
+ .map((word) => word[0].toUpperCase() + word.slice(1))
107
+ .join(" ");
108
+ }
109
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/lib/scope/templates.ts"],"names":[],"mappings":"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"}