okstra 0.174.0 → 0.176.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 (419) hide show
  1. package/README.md +18 -9
  2. package/bin/okstra +8 -4
  3. package/dist/cli-registry.d.mts +16 -0
  4. package/dist/cli-registry.mjs +560 -0
  5. package/dist/cli-registry.mjs.map +1 -0
  6. package/dist/commands/execute/agent-prompt.d.mts +1 -0
  7. package/{src → dist}/commands/execute/agent-prompt.mjs +10 -11
  8. package/dist/commands/execute/agent-prompt.mjs.map +1 -0
  9. package/dist/commands/execute/codex-dispatch.d.mts +3 -0
  10. package/dist/commands/execute/codex-dispatch.mjs +6 -0
  11. package/dist/commands/execute/codex-dispatch.mjs.map +1 -0
  12. package/dist/commands/execute/codex-run.d.mts +3 -0
  13. package/{src → dist}/commands/execute/codex-run.mjs +30 -37
  14. package/dist/commands/execute/codex-run.mjs.map +1 -0
  15. package/dist/commands/execute/convergence.d.mts +1 -0
  16. package/{src → dist}/commands/execute/convergence.mjs +15 -16
  17. package/dist/commands/execute/convergence.mjs.map +1 -0
  18. package/dist/commands/execute/error-log.d.mts +1 -0
  19. package/{src → dist}/commands/execute/error-log.mjs +2 -3
  20. package/dist/commands/execute/error-log.mjs.map +1 -0
  21. package/dist/commands/execute/git-reconcile.d.mts +1 -0
  22. package/{src → dist}/commands/execute/git-reconcile.mjs +10 -11
  23. package/dist/commands/execute/git-reconcile.mjs.map +1 -0
  24. package/dist/commands/execute/handoff.d.mts +1 -0
  25. package/{src → dist}/commands/execute/handoff.mjs +10 -11
  26. package/dist/commands/execute/handoff.mjs.map +1 -0
  27. package/dist/commands/execute/incremental-carry.d.mts +1 -0
  28. package/{src → dist}/commands/execute/incremental-carry.mjs +2 -3
  29. package/dist/commands/execute/incremental-carry.mjs.map +1 -0
  30. package/dist/commands/execute/incremental-scope.d.mts +1 -0
  31. package/{src → dist}/commands/execute/incremental-scope.mjs +2 -3
  32. package/dist/commands/execute/incremental-scope.mjs.map +1 -0
  33. package/dist/commands/execute/integrate-stages.d.mts +1 -0
  34. package/{src → dist}/commands/execute/integrate-stages.mjs +10 -11
  35. package/dist/commands/execute/integrate-stages.mjs.map +1 -0
  36. package/dist/commands/execute/pane-title.d.mts +1 -0
  37. package/dist/commands/execute/pane-title.mjs +20 -0
  38. package/dist/commands/execute/pane-title.mjs.map +1 -0
  39. package/dist/commands/execute/plan-items.d.mts +1 -0
  40. package/dist/commands/execute/plan-items.mjs +9 -0
  41. package/dist/commands/execute/plan-items.mjs.map +1 -0
  42. package/dist/commands/execute/plan-validate.d.mts +1 -0
  43. package/dist/commands/execute/plan-validate.mjs +68 -0
  44. package/dist/commands/execute/plan-validate.mjs.map +1 -0
  45. package/dist/commands/execute/plan-verify.d.mts +1 -0
  46. package/{src → dist}/commands/execute/plan-verify.mjs +13 -16
  47. package/dist/commands/execute/plan-verify.mjs.map +1 -0
  48. package/dist/commands/execute/render-bundle.d.mts +3 -0
  49. package/{src → dist}/commands/execute/render-bundle.mjs +65 -61
  50. package/dist/commands/execute/render-bundle.mjs.map +1 -0
  51. package/dist/commands/execute/run.d.mts +24 -0
  52. package/dist/commands/execute/run.mjs +196 -0
  53. package/dist/commands/execute/run.mjs.map +1 -0
  54. package/dist/commands/execute/spawn-followups.d.mts +1 -0
  55. package/{src → dist}/commands/execute/spawn-followups.mjs +6 -7
  56. package/dist/commands/execute/spawn-followups.mjs.map +1 -0
  57. package/dist/commands/execute/team.d.mts +3 -0
  58. package/{src → dist}/commands/execute/team.mjs +29 -36
  59. package/dist/commands/execute/team.mjs.map +1 -0
  60. package/dist/commands/execute/token-usage.d.mts +1 -0
  61. package/{src → dist}/commands/execute/token-usage.mjs +2 -3
  62. package/dist/commands/execute/token-usage.mjs.map +1 -0
  63. package/dist/commands/execute/wizard.d.mts +8 -0
  64. package/dist/commands/execute/wizard.mjs +191 -0
  65. package/dist/commands/execute/wizard.mjs.map +1 -0
  66. package/dist/commands/execute/worker-audit-check.d.mts +1 -0
  67. package/{src → dist}/commands/execute/worker-audit-check.mjs +11 -12
  68. package/dist/commands/execute/worker-audit-check.mjs.map +1 -0
  69. package/dist/commands/execute/worker-dispatch.d.mts +7 -0
  70. package/{src → dist}/commands/execute/worker-dispatch.mjs +34 -46
  71. package/dist/commands/execute/worker-dispatch.mjs.map +1 -0
  72. package/dist/commands/execute/worker-state.d.mts +1 -0
  73. package/{src → dist}/commands/execute/worker-state.mjs +15 -16
  74. package/dist/commands/execute/worker-state.mjs.map +1 -0
  75. package/dist/commands/execute/worktree-lookup.d.mts +1 -0
  76. package/{src → dist}/commands/execute/worktree-lookup.mjs +38 -37
  77. package/dist/commands/execute/worktree-lookup.mjs.map +1 -0
  78. package/dist/commands/execute/worktree-status.d.mts +1 -0
  79. package/{src → dist}/commands/execute/worktree-status.mjs +52 -46
  80. package/dist/commands/execute/worktree-status.mjs.map +1 -0
  81. package/dist/commands/inspect/code-review.d.mts +1 -0
  82. package/{src → dist}/commands/inspect/code-review.mjs +16 -19
  83. package/dist/commands/inspect/code-review.mjs.map +1 -0
  84. package/dist/commands/inspect/container.d.mts +1 -0
  85. package/{src → dist}/commands/inspect/container.mjs +11 -13
  86. package/dist/commands/inspect/container.mjs.map +1 -0
  87. package/dist/commands/inspect/context-cost.d.mts +1 -0
  88. package/{src → dist}/commands/inspect/context-cost.mjs +11 -13
  89. package/dist/commands/inspect/context-cost.mjs.map +1 -0
  90. package/dist/commands/inspect/design-prep.d.mts +1 -0
  91. package/{src → dist}/commands/inspect/design-prep.mjs +10 -11
  92. package/dist/commands/inspect/design-prep.mjs.map +1 -0
  93. package/dist/commands/inspect/error-report.d.mts +1 -0
  94. package/{src → dist}/commands/inspect/error-report.mjs +11 -13
  95. package/dist/commands/inspect/error-report.mjs.map +1 -0
  96. package/dist/commands/inspect/error-zip.d.mts +1 -0
  97. package/{src → dist}/commands/inspect/error-zip.mjs +11 -12
  98. package/dist/commands/inspect/error-zip.mjs.map +1 -0
  99. package/dist/commands/inspect/log-report.d.mts +1 -0
  100. package/{src → dist}/commands/inspect/log-report.mjs +11 -13
  101. package/dist/commands/inspect/log-report.mjs.map +1 -0
  102. package/dist/commands/inspect/profile-show.d.mts +1 -0
  103. package/{src → dist}/commands/inspect/profile-show.mjs +10 -11
  104. package/dist/commands/inspect/profile-show.mjs.map +1 -0
  105. package/dist/commands/inspect/recap.d.mts +1 -0
  106. package/{src → dist}/commands/inspect/recap.mjs +11 -13
  107. package/dist/commands/inspect/recap.mjs.map +1 -0
  108. package/dist/commands/inspect/resolve-task-key.d.mts +1 -0
  109. package/{src → dist}/commands/inspect/resolve-task-key.mjs +11 -13
  110. package/dist/commands/inspect/resolve-task-key.mjs.map +1 -0
  111. package/dist/commands/inspect/rollup.d.mts +1 -0
  112. package/{src → dist}/commands/inspect/rollup.mjs +11 -13
  113. package/dist/commands/inspect/rollup.mjs.map +1 -0
  114. package/dist/commands/inspect/run-audit.d.mts +1 -0
  115. package/{src → dist}/commands/inspect/run-audit.mjs +11 -12
  116. package/dist/commands/inspect/run-audit.mjs.map +1 -0
  117. package/dist/commands/inspect/set-work-status.d.mts +1 -0
  118. package/{src → dist}/commands/inspect/set-work-status.mjs +11 -13
  119. package/dist/commands/inspect/set-work-status.mjs.map +1 -0
  120. package/dist/commands/inspect/stage-map.d.mts +1 -0
  121. package/dist/commands/inspect/stage-map.mjs +110 -0
  122. package/dist/commands/inspect/stage-map.mjs.map +1 -0
  123. package/dist/commands/inspect/task-list.d.mts +1 -0
  124. package/dist/commands/inspect/task-list.mjs +103 -0
  125. package/dist/commands/inspect/task-list.mjs.map +1 -0
  126. package/dist/commands/inspect/task-show.d.mts +1 -0
  127. package/dist/commands/inspect/task-show.mjs +108 -0
  128. package/dist/commands/inspect/task-show.mjs.map +1 -0
  129. package/dist/commands/inspect/time-report.d.mts +1 -0
  130. package/{src → dist}/commands/inspect/time-report.mjs +11 -13
  131. package/dist/commands/inspect/time-report.mjs.map +1 -0
  132. package/dist/commands/inspect/usage-report.d.mts +1 -0
  133. package/{src → dist}/commands/inspect/usage-report.mjs +11 -13
  134. package/dist/commands/inspect/usage-report.mjs.map +1 -0
  135. package/dist/commands/inspect/user-response.d.mts +1 -0
  136. package/{src → dist}/commands/inspect/user-response.mjs +10 -11
  137. package/dist/commands/inspect/user-response.mjs.map +1 -0
  138. package/dist/commands/inspect/worker-liveness.d.mts +1 -0
  139. package/{src → dist}/commands/inspect/worker-liveness.mjs +11 -13
  140. package/dist/commands/inspect/worker-liveness.mjs.map +1 -0
  141. package/dist/commands/lifecycle/check-project.d.mts +21 -0
  142. package/dist/commands/lifecycle/check-project.mjs +175 -0
  143. package/dist/commands/lifecycle/check-project.mjs.map +1 -0
  144. package/dist/commands/lifecycle/config.d.mts +1 -0
  145. package/dist/commands/lifecycle/config.mjs +369 -0
  146. package/dist/commands/lifecycle/config.mjs.map +1 -0
  147. package/dist/commands/lifecycle/doctor.d.mts +10 -0
  148. package/dist/commands/lifecycle/doctor.mjs +317 -0
  149. package/dist/commands/lifecycle/doctor.mjs.map +1 -0
  150. package/dist/commands/lifecycle/install.d.mts +17 -0
  151. package/dist/commands/lifecycle/install.mjs +1077 -0
  152. package/dist/commands/lifecycle/install.mjs.map +1 -0
  153. package/dist/commands/lifecycle/migrate.d.mts +1 -0
  154. package/{src → dist}/commands/lifecycle/migrate.mjs +10 -11
  155. package/dist/commands/lifecycle/migrate.mjs.map +1 -0
  156. package/dist/commands/lifecycle/model.d.mts +1 -0
  157. package/dist/commands/lifecycle/model.mjs +22 -0
  158. package/dist/commands/lifecycle/model.mjs.map +1 -0
  159. package/dist/commands/lifecycle/paths.d.mts +1 -0
  160. package/dist/commands/lifecycle/paths.mjs +102 -0
  161. package/dist/commands/lifecycle/paths.mjs.map +1 -0
  162. package/dist/commands/lifecycle/preflight.d.mts +1 -0
  163. package/dist/commands/lifecycle/preflight.mjs +124 -0
  164. package/dist/commands/lifecycle/preflight.mjs.map +1 -0
  165. package/dist/commands/lifecycle/setup.d.mts +1 -0
  166. package/dist/commands/lifecycle/setup.mjs +297 -0
  167. package/dist/commands/lifecycle/setup.mjs.map +1 -0
  168. package/dist/commands/lifecycle/uninstall.d.mts +4 -0
  169. package/dist/commands/lifecycle/uninstall.mjs +262 -0
  170. package/dist/commands/lifecycle/uninstall.mjs.map +1 -0
  171. package/dist/commands/manager.d.mts +3 -0
  172. package/{src → dist}/commands/manager.mjs +25 -32
  173. package/dist/commands/manager.mjs.map +1 -0
  174. package/dist/commands/memory/memory.d.mts +1 -0
  175. package/dist/commands/memory/memory.mjs +569 -0
  176. package/dist/commands/memory/memory.mjs.map +1 -0
  177. package/dist/commands/pr/pr.d.mts +33 -0
  178. package/dist/commands/pr/pr.mjs +296 -0
  179. package/dist/commands/pr/pr.mjs.map +1 -0
  180. package/dist/commands/report/agent-activity.d.mts +1 -0
  181. package/{src → dist}/commands/report/agent-activity.mjs +11 -12
  182. package/dist/commands/report/agent-activity.mjs.map +1 -0
  183. package/dist/commands/report/finalize.d.mts +4 -0
  184. package/{src → dist}/commands/report/finalize.mjs +25 -32
  185. package/dist/commands/report/finalize.mjs.map +1 -0
  186. package/dist/commands/report/inject-report-index.d.mts +1 -0
  187. package/{src → dist}/commands/report/inject-report-index.mjs +6 -7
  188. package/dist/commands/report/inject-report-index.mjs.map +1 -0
  189. package/dist/commands/report/render-final-report.d.mts +1 -0
  190. package/{src → dist}/commands/report/render-final-report.mjs +6 -7
  191. package/dist/commands/report/render-final-report.mjs.map +1 -0
  192. package/dist/commands/report/render-views.d.mts +1 -0
  193. package/{src → dist}/commands/report/render-views.mjs +6 -7
  194. package/dist/commands/report/render-views.mjs.map +1 -0
  195. package/dist/commands/report/translate.d.mts +1 -0
  196. package/{src → dist}/commands/report/translate.mjs +6 -7
  197. package/dist/commands/report/translate.mjs.map +1 -0
  198. package/dist/lib/helper-scripts.d.mts +3 -0
  199. package/{src → dist}/lib/helper-scripts.mjs +11 -14
  200. package/dist/lib/helper-scripts.mjs.map +1 -0
  201. package/dist/lib/host-registry-client.d.mts +25 -0
  202. package/dist/lib/host-registry-client.mjs +152 -0
  203. package/dist/lib/host-registry-client.mjs.map +1 -0
  204. package/dist/lib/install-assets.d.mts +8 -0
  205. package/{src → dist}/lib/install-assets.mjs +17 -20
  206. package/dist/lib/install-assets.mjs.map +1 -0
  207. package/dist/lib/okstra-dirs.d.mts +4 -0
  208. package/{src → dist}/lib/okstra-dirs.mjs +3 -6
  209. package/dist/lib/okstra-dirs.mjs.map +1 -0
  210. package/dist/lib/paths.d.mts +4 -0
  211. package/dist/lib/paths.mjs +78 -0
  212. package/dist/lib/paths.mjs.map +1 -0
  213. package/dist/lib/proc.d.mts +3 -0
  214. package/dist/lib/proc.mjs +31 -0
  215. package/dist/lib/proc.mjs.map +1 -0
  216. package/dist/lib/python-helper.d.mts +8 -0
  217. package/dist/lib/python-helper.mjs +123 -0
  218. package/dist/lib/python-helper.mjs.map +1 -0
  219. package/dist/lib/runtime-manifest.d.mts +7 -0
  220. package/dist/lib/runtime-manifest.mjs +73 -0
  221. package/dist/lib/runtime-manifest.mjs.map +1 -0
  222. package/dist/lib/skill-catalog.d.mts +4 -0
  223. package/dist/lib/skill-catalog.mjs +50 -0
  224. package/dist/lib/skill-catalog.mjs.map +1 -0
  225. package/dist/lib/types.d.mts +129 -0
  226. package/dist/lib/types.mjs +2 -0
  227. package/dist/lib/types.mjs.map +1 -0
  228. package/dist/lib/version.d.mts +2 -0
  229. package/dist/lib/version.mjs +27 -0
  230. package/dist/lib/version.mjs.map +1 -0
  231. package/docs/architecture/storage-model.md +6 -2
  232. package/docs/architecture.md +29 -20
  233. package/docs/cli.md +40 -16
  234. package/docs/contributor-change-matrix.md +2 -2
  235. package/docs/for-ai/skills/okstra-inspect.md +2 -3
  236. package/docs/for-ai/skills/okstra-rollup.md +1 -0
  237. package/docs/project-structure-overview.md +72 -62
  238. package/docs/task-process/README.md +12 -8
  239. package/docs/task-process/common-flow.md +13 -16
  240. package/docs/task-process/error-analysis.md +9 -10
  241. package/docs/task-process/final-verification.md +7 -7
  242. package/docs/task-process/implementation-planning.md +9 -9
  243. package/docs/task-process/implementation.md +6 -6
  244. package/docs/task-process/release-handoff.md +8 -7
  245. package/docs/task-process/requirements-discovery.md +8 -8
  246. package/package.json +11 -5
  247. package/runtime/BUILD.json +2 -2
  248. package/runtime/agents/workers/claude-worker.md +2 -1
  249. package/runtime/agents/workers/report-writer-worker.md +3 -1
  250. package/runtime/agents/workers/translator-worker.md +3 -1
  251. package/runtime/bin/lib/okstra/cli.sh +12 -0
  252. package/runtime/bin/lib/okstra/globals.sh +3 -0
  253. package/runtime/bin/lib/okstra/interactive.sh +12 -6
  254. package/runtime/bin/lib/okstra/usage.sh +7 -6
  255. package/runtime/bin/okstra-error-log.py +27 -0
  256. package/runtime/bin/okstra-provider-exec.py +217 -5
  257. package/runtime/bin/okstra-spawn-followups.py +4 -2
  258. package/runtime/bin/okstra.sh +10 -0
  259. package/runtime/prompts/launch.template.md +2 -2
  260. package/runtime/prompts/lead/context-loader.md +1 -2
  261. package/runtime/prompts/lead/convergence.md +27 -18
  262. package/runtime/prompts/lead/okstra-lead-contract.md +6 -5
  263. package/runtime/prompts/lead/plan-body-verification.md +10 -3
  264. package/runtime/prompts/lead/report-writer.md +15 -1
  265. package/runtime/prompts/lead/team-contract.md +17 -13
  266. package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
  267. package/runtime/prompts/profiles/_implementation-executor.md +0 -3
  268. package/runtime/prompts/profiles/_implementation-verifier.md +3 -7
  269. package/runtime/prompts/profiles/change-impact-analysis.md +20 -0
  270. package/runtime/prompts/profiles/error-analysis.md +27 -1
  271. package/runtime/prompts/profiles/feature-analysis.md +20 -0
  272. package/runtime/prompts/profiles/final-verification.md +20 -1
  273. package/runtime/prompts/profiles/implementation-option-selection.md +20 -0
  274. package/runtime/prompts/profiles/implementation-planning.md +26 -0
  275. package/runtime/prompts/profiles/implementation.md +19 -0
  276. package/runtime/prompts/profiles/improvement-discovery.md +21 -1
  277. package/runtime/prompts/profiles/project-analysis.md +20 -0
  278. package/runtime/prompts/profiles/release-handoff.md +4 -0
  279. package/runtime/prompts/profiles/requirements-discovery.md +27 -1
  280. package/runtime/prompts/wizard/prompts.ko.json +35 -0
  281. package/runtime/python/okstra_ctl/adapters/dispatch/cli_wrapper.py +8 -0
  282. package/runtime/python/okstra_ctl/adapters/dispatch/cmux.py +8 -0
  283. package/runtime/python/okstra_ctl/adapters/dispatch/native_team.py +13 -0
  284. package/runtime/python/okstra_ctl/adapters/hosts/antigravity/adapter.py +2 -2
  285. package/runtime/python/okstra_ctl/adapters/hosts/claude-code/adapter.py +25 -5
  286. package/runtime/python/okstra_ctl/adapters/hosts/codex/adapter.py +2 -2
  287. package/runtime/python/okstra_ctl/adapters/hosts/external/adapter.py +4 -1
  288. package/runtime/python/okstra_ctl/adapters/hosts/grok/adapter.py +2 -2
  289. package/runtime/python/okstra_ctl/adapters/hosts/kimi/adapter.py +2 -2
  290. package/runtime/python/okstra_ctl/adapters/providers/antigravity/adapter.py +79 -11
  291. package/runtime/python/okstra_ctl/adapters/providers/claude/adapter.py +95 -25
  292. package/runtime/python/okstra_ctl/adapters/providers/codex/adapter.py +59 -14
  293. package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +55 -9
  294. package/runtime/python/okstra_ctl/adapters/providers/kimi/adapter.py +51 -12
  295. package/runtime/python/okstra_ctl/adapters/runtime/__init__.py +1 -0
  296. package/runtime/python/okstra_ctl/adapters/runtime/assembly.py +27 -0
  297. package/runtime/python/okstra_ctl/adapters/runtime/cli_wrapper.py +49 -0
  298. package/runtime/python/okstra_ctl/adapters/runtime/cmux.py +74 -0
  299. package/runtime/python/okstra_ctl/agent_activity.py +5 -1
  300. package/runtime/python/okstra_ctl/agent_invocation.py +608 -14
  301. package/runtime/python/okstra_ctl/agent_prompt_cli.py +249 -50
  302. package/runtime/python/okstra_ctl/application/open_worker.py +29 -0
  303. package/runtime/python/okstra_ctl/application/resolve_assignment.py +53 -12
  304. package/runtime/python/okstra_ctl/assignment_environment.py +102 -0
  305. package/runtime/python/okstra_ctl/assignment_resolver.py +790 -0
  306. package/runtime/python/okstra_ctl/attempt_evidence.py +342 -0
  307. package/runtime/python/okstra_ctl/convergence.py +409 -3
  308. package/runtime/python/okstra_ctl/convergence_engine.py +248 -15
  309. package/runtime/python/okstra_ctl/convergence_store.py +170 -1
  310. package/runtime/python/okstra_ctl/dispatch_core.py +1204 -155
  311. package/runtime/python/okstra_ctl/dispatch_state.py +696 -11
  312. package/runtime/python/okstra_ctl/doctor.py +14 -0
  313. package/runtime/python/okstra_ctl/domain/host.py +34 -1
  314. package/runtime/python/okstra_ctl/domain/provider.py +212 -6
  315. package/runtime/python/okstra_ctl/domain/role.py +125 -0
  316. package/runtime/python/okstra_ctl/domain/wizard/interaction.py +18 -0
  317. package/runtime/python/okstra_ctl/domain/worker_exec.py +34 -1
  318. package/runtime/python/okstra_ctl/domain/worker_role.py +13 -3
  319. package/runtime/python/okstra_ctl/domain/worker_runtime.py +44 -0
  320. package/runtime/python/okstra_ctl/domain/worker_stream.py +24 -0
  321. package/runtime/python/okstra_ctl/error_log_write.py +9 -0
  322. package/runtime/python/okstra_ctl/error_report.py +21 -1
  323. package/runtime/python/okstra_ctl/execution_identity.py +529 -0
  324. package/runtime/python/okstra_ctl/execution_manifest.py +1281 -0
  325. package/runtime/python/okstra_ctl/execution_mutation_audit.py +619 -0
  326. package/runtime/python/okstra_ctl/implementation_outcome.py +21 -5
  327. package/runtime/python/okstra_ctl/index.py +6 -2
  328. package/runtime/python/okstra_ctl/initial_prompt_materialization.py +43 -3
  329. package/runtime/python/okstra_ctl/legacy_model_selection.py +578 -0
  330. package/runtime/python/okstra_ctl/manager_sync.py +4 -1
  331. package/runtime/python/okstra_ctl/model_cli.py +278 -0
  332. package/runtime/python/okstra_ctl/model_defaults.py +46 -0
  333. package/runtime/python/okstra_ctl/model_discovery.py +26 -7
  334. package/runtime/python/okstra_ctl/model_pool.py +501 -0
  335. package/runtime/python/okstra_ctl/models.py +47 -27
  336. package/runtime/python/okstra_ctl/mutation_recovery.py +293 -0
  337. package/runtime/python/okstra_ctl/next_phase.py +236 -0
  338. package/runtime/python/okstra_ctl/pane_title.py +151 -0
  339. package/runtime/python/okstra_ctl/ports/host_model.py +48 -17
  340. package/runtime/python/okstra_ctl/ports/worker_dispatch.py +4 -0
  341. package/runtime/python/okstra_ctl/ports/worker_runtime.py +26 -0
  342. package/runtime/python/okstra_ctl/recap.py +4 -1
  343. package/runtime/python/okstra_ctl/registry/provider_registry.py +8 -4
  344. package/runtime/python/okstra_ctl/render.py +124 -57
  345. package/runtime/python/okstra_ctl/render_final_report.py +19 -0
  346. package/runtime/python/okstra_ctl/report_contract.py +39 -0
  347. package/runtime/python/okstra_ctl/report_finalize.py +16 -0
  348. package/runtime/python/okstra_ctl/report_html/render.py +1 -0
  349. package/runtime/python/okstra_ctl/role_requirements.py +210 -0
  350. package/runtime/python/okstra_ctl/rollup.py +4 -1
  351. package/runtime/python/okstra_ctl/run.py +1210 -258
  352. package/runtime/python/okstra_ctl/run_index_row.py +7 -1
  353. package/runtime/python/okstra_ctl/stage_fix_carry.py +17 -1
  354. package/runtime/python/okstra_ctl/team.py +14 -18
  355. package/runtime/python/okstra_ctl/time_report.py +38 -4
  356. package/runtime/python/okstra_ctl/usage_identity.py +86 -0
  357. package/runtime/python/okstra_ctl/usage_report.py +15 -3
  358. package/runtime/python/okstra_ctl/wizard.py +1449 -66
  359. package/runtime/python/okstra_ctl/worker_audit_ledger.py +68 -65
  360. package/runtime/python/okstra_ctl/worker_prompt_body.py +18 -2
  361. package/runtime/python/okstra_ctl/worker_prompt_contract.py +40 -9
  362. package/runtime/python/okstra_ctl/worker_prompt_headers.py +16 -1
  363. package/runtime/python/okstra_ctl/worker_request.py +7 -1
  364. package/runtime/python/okstra_ctl/worker_runner.py +130 -5
  365. package/runtime/python/okstra_ctl/workers.py +7 -5
  366. package/runtime/python/okstra_ctl/workflow.py +18 -32
  367. package/runtime/python/okstra_ctl/worktree.py +3 -3
  368. package/runtime/python/okstra_ctl/worktree_registry.py +5 -4
  369. package/runtime/python/okstra_ctl/write_policy.py +571 -0
  370. package/runtime/python/okstra_project/state.py +54 -6
  371. package/runtime/schemas/convergence-groups-v2.0.schema.json +128 -0
  372. package/runtime/schemas/execution-manifest-v2.schema.json +340 -0
  373. package/runtime/schemas/final-report-v2.0.schema.json +68 -5
  374. package/runtime/skills/okstra-inspect/facets/recap.md +2 -0
  375. package/runtime/skills/okstra-inspect/facets/report.md +1 -1
  376. package/runtime/skills/okstra-inspect/facets/status.md +15 -13
  377. package/runtime/skills/okstra-rollup/SKILL.md +1 -0
  378. package/runtime/skills/okstra-run/SKILL.md +14 -14
  379. package/runtime/templates/implementation-worker-preamble.md +3 -18
  380. package/runtime/templates/project-docs/task-index.template.md +0 -1
  381. package/runtime/templates/report-writer-prompt-preamble.md +2 -0
  382. package/runtime/templates/reports/final-report-v2.template.md +7 -1
  383. package/runtime/templates/reports/html/base.template.html +21 -0
  384. package/runtime/templates/reports/html/i18n/en.json +4 -0
  385. package/runtime/templates/reports/html/i18n/ko.json +4 -0
  386. package/runtime/templates/reports/html/macros/forms.html +5 -4
  387. package/runtime/templates/reports/html/tasks/final-verification.template.html +1 -1
  388. package/runtime/templates/reports/html/tasks/implementation.template.html +1 -1
  389. package/runtime/templates/worker-prompt-preamble.md +6 -35
  390. package/runtime/validators/lib/fixtures.sh +49 -16
  391. package/runtime/validators/validate-run.py +486 -134
  392. package/runtime/validators/validate_session_conformance.py +25 -7
  393. package/src/cli-registry.mjs +0 -539
  394. package/src/commands/execute/codex-dispatch.mjs +0 -10
  395. package/src/commands/execute/plan-items.mjs +0 -9
  396. package/src/commands/execute/plan-validate.mjs +0 -68
  397. package/src/commands/execute/run.mjs +0 -208
  398. package/src/commands/execute/wizard.mjs +0 -167
  399. package/src/commands/inspect/stage-map.mjs +0 -98
  400. package/src/commands/inspect/task-list.mjs +0 -97
  401. package/src/commands/inspect/task-show.mjs +0 -100
  402. package/src/commands/lifecycle/check-project.mjs +0 -187
  403. package/src/commands/lifecycle/config.mjs +0 -385
  404. package/src/commands/lifecycle/doctor.mjs +0 -308
  405. package/src/commands/lifecycle/install.mjs +0 -1170
  406. package/src/commands/lifecycle/paths.mjs +0 -104
  407. package/src/commands/lifecycle/preflight.mjs +0 -125
  408. package/src/commands/lifecycle/setup.mjs +0 -333
  409. package/src/commands/lifecycle/uninstall.mjs +0 -279
  410. package/src/commands/memory/memory.mjs +0 -524
  411. package/src/commands/pr/pr.mjs +0 -261
  412. package/src/lib/host-registry-client.mjs +0 -176
  413. package/src/lib/paths.mjs +0 -86
  414. package/src/lib/proc.mjs +0 -31
  415. package/src/lib/python-helper.mjs +0 -142
  416. package/src/lib/runtime-manifest.mjs +0 -70
  417. package/src/lib/skill-catalog.mjs +0 -53
  418. package/src/lib/version.mjs +0 -20
  419. /package/{src → dist}/commands/pr/default.md +0 -0
package/README.md CHANGED
@@ -32,11 +32,15 @@ Role assignments are persisted separately from the host runtime, but the lead pr
32
32
 
33
33
  | Provider | Native host | CLI wrapper | Public roles |
34
34
  |---|---|---|---|
35
- | Claude | Claude Code | `okstra-claude-exec.sh` | lead, analysis, implementation, report writer |
36
- | Codex | Codex | `okstra-codex-exec.sh` | lead, analysis, implementation, report writer |
37
- | Antigravity | Antigravity CLI | `okstra-antigravity-exec.sh` | lead, analysis, and implementation |
38
- | Grok | Grok CLI | `okstra-grok-exec.sh` | lead, read-only analyser, and critic |
39
- | Kimi | Kimi CLI | `okstra-kimi-exec.sh` | lead, read-only analyser, and critic |
35
+ | Claude | Claude Code | `okstra-claude-exec.sh` | leader, analyser, designer, planner, implementer, verifier, report-writer, translator |
36
+ | Codex | Codex | `okstra-codex-exec.sh` | leader, analyser, designer, planner, implementer, verifier, report-writer, translator |
37
+ | Antigravity | Antigravity CLI | `okstra-antigravity-exec.sh` | leader, analyser, critic, implementer, verifier |
38
+ | Grok | Grok CLI | `okstra-grok-exec.sh` | leader, read-only analyser, and critic |
39
+ | Kimi | Kimi CLI | `okstra-kimi-exec.sh` | leader, read-only analyser, and critic |
40
+
41
+ Canonical role names are `leader`, `analyser`, `critic`, `designer`, `planner`, `implementer`, `verifier`, `report-writer`, and `translator`. `lead` is a compatibility alias for `leader`. `executor` is a compatibility alias for `implementer`. New records write only the canonical names.
42
+
43
+ Role count becomes a `RoleInstance` ordinal. `ModelPool` selects one model per ordinal. A pinned model is kept only when the host can bind it exactly. The resulting `RoleExecution` owns `Invocation` and `Attempt` rows and the stored `executionLabel`. Pane titles use that label. `okstra model list` and `okstra doctor --json` report pool state without an inference call.
40
44
 
41
45
  Grok and Kimi can now lead through their registered host adapters. Their worker roles remain read-only analyser and critic; executor, verifier, and report-writer roles were not added. A real authenticated local invocation still depends on the corresponding CLI being installed and configured.
42
46
 
@@ -56,7 +60,8 @@ okstra is **not** a one-shot code review tool. It is for work that **spans multi
56
60
  okstra/ npm package = repo root
57
61
  ├── package.json name: "okstra"
58
62
  ├── bin/okstra Node CLI entry point
59
- ├── src/ Node CLI command modules (install, wizard, config, render, token usage, ...)
63
+ ├── src/ TypeScript Node CLI sources (`*.mts`)
64
+ ├── dist/ compiled `.mjs` CLI artifacts used by `bin/okstra`
60
65
  ├── tools/build.mjs runtime/ synchronization script (invoked by prepack)
61
66
  ├── runtime/ gitignored install payload copied to ~/.okstra
62
67
  ├── scripts/ Python + Bash runtime sources
@@ -70,7 +75,7 @@ okstra/ npm package = repo root
70
75
  └── RELEASING.md, CHANGELOG.md, README.md
71
76
  ```
72
77
 
73
- During `prepack`, `tools/build.mjs` rebuilds `runtime/` from `scripts/`, `skills/`, `agents/`, `prompts/`, `schemas/`, `templates/`, and `validators/`. This is the install payload copied to `~/.okstra`; the npm package also ships the Node CLI (`bin/`, `src/`), documentation, and the README.
78
+ The package requires Node.js 22 or newer. TypeScript sources under `src/` compile to `dist/**/*.mjs` before `tools/build.mjs` rebuilds `runtime/` from `scripts/`, `skills/`, `agents/`, `prompts/`, `schemas/`, `templates/`, and `validators/`. `bin/okstra` executes `dist/`; the npm package ships the compiled CLI, runtime payload, documentation, and README.
74
79
 
75
80
  <a id="user-machine-layout-after-install"></a>
76
81
  ### 2.2 User-machine layout after install
@@ -217,7 +222,9 @@ This starts a new `claude` process in the lead role. For the complete argument l
217
222
 
218
223
  Notable workflow flags:
219
224
 
220
- - `--executor claude|codex|antigravity`selects the provider that may mutate files for `--task-type implementation`. The other two providers are dispatched as strict read-only verifiers in the same run ([`docs/cli.md`](docs/cli.md#--executor)).
225
+ - `--role-count <role>=<N>`sets the total instance count for one static role. `lead` is a compatibility alias for `leader`.
226
+ - `--role-model <role>=<modelRef>` — pins `<provider>/<model>` onto role instances in ordinal order. Unknown models fail before any side effect.
227
+ - `--executor claude|codex|antigravity` — compatibility input that selects the implementer provider for `--task-type implementation`. The other two providers are dispatched as strict read-only verifiers in the same run ([`docs/cli.md`](docs/cli.md#--executor)).
221
228
  - `--work-category bugfix|feature|refactor|ops|improvement` — directly classifies work when the lifecycle skips the `requirements-discovery` phase.
222
229
  - `--approve` — with `--approved-plan`, toggles the plan's YAML frontmatter `approved` field from `false` to `true`, replacing the removed `--ack-approved` alias and the former `[ ] Approved` checkbox marker.
223
230
  - `--selected-direction <selection-final-report.md>` — starts a new `implementation-planning` run from a validated `implementation-option-selection` report. Existing planning reruns continue through `--clarification-response`.
@@ -246,7 +253,9 @@ Major workflow changes added to `main` after 0.8.0:
246
253
  | Command | Purpose |
247
254
  |---|---|
248
255
  | `npx -y okstra@latest paths` | Print runtime paths (`--field <name>` or `--shell`) |
249
- | `npx -y okstra@latest doctor [--runtime claude-code\|codex\|antigravity\|external\|all] [--phase <phase>]` | Diagnose runtime, skills, and Python imports. `codex`, `antigravity`, and `external` exclude Claude skill checks; `--phase` adds readiness checks for implementation, final-verification, release-handoff, and improvement-discovery |
256
+ | `npx -y okstra@latest doctor [--runtime claude-code\|codex\|antigravity\|external\|all] [--phase <phase>]` | Diagnose runtime, skills, Python imports, and model-pool state. `codex`, `antigravity`, and `external` exclude Claude skill checks; `--phase` adds readiness checks for implementation, final-verification, release-handoff, and improvement-discovery. JSON includes `modelPool` and never sends an inference call |
257
+ | `npx -y okstra@latest model list [--role <role>] [--host <host>] [--json]` | List catalog models and exact-binding availability without an inference call |
258
+ | `npx -y okstra@latest model default set\|unset <role> ... --scope project\|global` | Write or remove role model defaults in `.okstra/project.json` or `~/.okstra/config.json` |
250
259
  | `npx -y okstra@latest ensure-installed` | Run an idempotent check and automatically reinstall stale assets (skills call this internally) |
251
260
  | `npx -y okstra@latest setup --project-id <id>` | Register the current project in `.okstra/project.json` |
252
261
  | `npx -y okstra@latest check-project` | Verify that the current project was registered with `setup` |
package/bin/okstra CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { getPackageVersion } from "../src/lib/version.mjs";
3
- import { COMMANDS, USAGE } from "../src/cli-registry.mjs";
2
+ import { getPackageVersion } from "../dist/lib/version.mjs";
3
+ import { COMMANDS, USAGE } from "../dist/cli-registry.mjs";
4
4
 
5
+ /** @param {readonly string[]} argv */
5
6
  async function main(argv) {
6
7
  const args = argv.slice(2);
7
8
 
@@ -40,8 +41,11 @@ async function main(argv) {
40
41
  const exitCode = await run(rest);
41
42
  return typeof exitCode === "number" ? exitCode : 0;
42
43
  } catch (err) {
43
- process.stderr.write(`error: ${err.message}\n`);
44
- if (process.env.OKSTRA_DEBUG) process.stderr.write(`${err.stack}\n`);
44
+ const message = err instanceof Error ? err.message : String(err);
45
+ process.stderr.write(`error: ${message}\n`);
46
+ if (process.env.OKSTRA_DEBUG && err instanceof Error && err.stack) {
47
+ process.stderr.write(`${err.stack}\n`);
48
+ }
45
49
  return 1;
46
50
  }
47
51
  }
@@ -0,0 +1,16 @@
1
+ import type { CommandRunner } from "./lib/types.mjs";
2
+ export declare const COMMAND_REGISTRY: ({
3
+ name: string;
4
+ module: string;
5
+ export: string;
6
+ category: "admin";
7
+ summary: string[];
8
+ } | {
9
+ name: string;
10
+ module: string;
11
+ export: string;
12
+ category: "introspection";
13
+ summary: string[];
14
+ })[];
15
+ export declare const COMMANDS: Map<string, () => Promise<CommandRunner>>;
16
+ export declare const USAGE: string;
@@ -0,0 +1,560 @@
1
+ const SUMMARY_COLUMN = 25;
2
+ export const COMMAND_REGISTRY = [
3
+ {
4
+ name: "install",
5
+ module: "./commands/lifecycle/install.mjs",
6
+ export: "runInstall",
7
+ category: "admin",
8
+ summary: ["Install runtime; seed skills into Agent and Claude homes"],
9
+ },
10
+ {
11
+ name: "ensure-installed",
12
+ module: "./commands/lifecycle/install.mjs",
13
+ export: "runEnsureInstalled",
14
+ category: "admin",
15
+ summary: ["Verify install is fresh; reinstall if stale (idempotent)"],
16
+ },
17
+ {
18
+ name: "uninstall",
19
+ module: "./commands/lifecycle/uninstall.mjs",
20
+ export: "runUninstall",
21
+ category: "admin",
22
+ summary: ["Remove runtime + skills (user data preserved by default)"],
23
+ },
24
+ {
25
+ name: "setup",
26
+ module: "./commands/lifecycle/setup.mjs",
27
+ export: "run",
28
+ category: "admin",
29
+ summary: ["Register the current project (.okstra/project.json)"],
30
+ },
31
+ {
32
+ name: "doctor",
33
+ module: "./commands/lifecycle/doctor.mjs",
34
+ export: "run",
35
+ category: "admin",
36
+ summary: [
37
+ "Diagnostic check; --runtime selects assets, --phase checks readiness",
38
+ ],
39
+ },
40
+ {
41
+ name: "check-project",
42
+ module: "./commands/lifecycle/check-project.mjs",
43
+ export: "run",
44
+ category: "admin",
45
+ summary: ["Verify the current project has been registered with setup"],
46
+ },
47
+ {
48
+ name: "preflight",
49
+ module: "./commands/lifecycle/preflight.mjs",
50
+ export: "run",
51
+ category: "admin",
52
+ summary: ["One-call skill preflight: ensure-installed + check-project (JSON)"],
53
+ },
54
+ {
55
+ name: "config",
56
+ module: "./commands/lifecycle/config.mjs",
57
+ export: "run",
58
+ category: "admin",
59
+ summary: ["Read / write okstra settings (e.g. PR template path)"],
60
+ },
61
+ {
62
+ name: "migrate",
63
+ module: "./commands/lifecycle/migrate.mjs",
64
+ export: "run",
65
+ category: "admin",
66
+ summary: ["Move legacy .project-docs/okstra/ to .okstra/ (one-shot)"],
67
+ },
68
+ {
69
+ name: "convergence",
70
+ module: "./commands/execute/convergence.mjs",
71
+ export: "run",
72
+ category: "admin",
73
+ summary: ["Advance and validate deterministic re-verification state"],
74
+ },
75
+ {
76
+ name: "plan-items",
77
+ module: "./commands/execute/plan-items.mjs",
78
+ export: "run",
79
+ category: "admin",
80
+ summary: ["Extract and validate deterministic plan-body items"],
81
+ },
82
+ {
83
+ name: "agent-prompt",
84
+ module: "./commands/execute/agent-prompt.mjs",
85
+ export: "run",
86
+ category: "admin",
87
+ summary: ["Materialize and verify auditable agent invocations"],
88
+ },
89
+ {
90
+ name: "pane-title",
91
+ module: "./commands/execute/pane-title.mjs",
92
+ export: "run",
93
+ category: "admin",
94
+ summary: ["Lease pane titles from stored execution labels"],
95
+ },
96
+ {
97
+ name: "model",
98
+ module: "./commands/lifecycle/model.mjs",
99
+ export: "run",
100
+ category: "admin",
101
+ summary: ["List models and set or unset role model defaults"],
102
+ },
103
+ {
104
+ name: "worker-dispatch",
105
+ module: "./commands/execute/worker-dispatch.mjs",
106
+ export: "run",
107
+ category: "admin",
108
+ summary: ["Dispatch verified CLI-backed worker assignments"],
109
+ },
110
+ {
111
+ name: "plan-verify",
112
+ module: "./commands/execute/plan-verify.mjs",
113
+ export: "run",
114
+ category: "admin",
115
+ summary: ["Score the §5.5.9 plan-body gate for one self-fix round"],
116
+ },
117
+ {
118
+ name: "worker-audit-check",
119
+ module: "./commands/execute/worker-audit-check.mjs",
120
+ export: "run",
121
+ category: "admin",
122
+ summary: [
123
+ "Check a run's worker audit sidecars while the workers",
124
+ "are still alive (the Phase 7 rules, run early)",
125
+ ],
126
+ },
127
+ {
128
+ name: "git-reconcile",
129
+ module: "./commands/execute/git-reconcile.mjs",
130
+ export: "run",
131
+ category: "admin",
132
+ summary: ["Reconcile stale stage SHAs after external git history changes"],
133
+ },
134
+ {
135
+ name: "handoff",
136
+ module: "./commands/execute/handoff.mjs",
137
+ export: "run",
138
+ category: "admin",
139
+ summary: ["Stage-group release-handoff helpers (eligible/assemble/record)"],
140
+ },
141
+ {
142
+ name: "integrate-stages",
143
+ module: "./commands/execute/integrate-stages.mjs",
144
+ export: "run",
145
+ category: "admin",
146
+ summary: ["stage 들을 task 브랜치에 통합 머지하고 stage worktree 를 정리"],
147
+ },
148
+ {
149
+ name: "paths",
150
+ module: "./commands/lifecycle/paths.mjs",
151
+ export: "run",
152
+ category: "admin",
153
+ summary: [
154
+ "Print runtime paths (workspace/agents/pythonpath/bin/home/version)",
155
+ ],
156
+ },
157
+ {
158
+ name: "task-list",
159
+ module: "./commands/inspect/task-list.mjs",
160
+ export: "run",
161
+ category: "introspection",
162
+ summary: ["List tasks registered in the current project"],
163
+ },
164
+ {
165
+ name: "task-show",
166
+ module: "./commands/inspect/task-show.mjs",
167
+ export: "run",
168
+ category: "introspection",
169
+ summary: ["Summarize a task's manifest + workflow phase state"],
170
+ },
171
+ {
172
+ name: "stage-map",
173
+ module: "./commands/inspect/stage-map.mjs",
174
+ export: "run",
175
+ category: "introspection",
176
+ summary: ["Dump a task's implementation-planning Stage Map + done stages"],
177
+ },
178
+ {
179
+ name: "context-cost",
180
+ module: "./commands/inspect/context-cost.mjs",
181
+ export: "run",
182
+ category: "introspection",
183
+ summary: ["Estimate file/read context cost for a task bundle"],
184
+ },
185
+ {
186
+ name: "resolve-task-key",
187
+ module: "./commands/inspect/resolve-task-key.mjs",
188
+ export: "run",
189
+ category: "introspection",
190
+ summary: ["Resolve a bare task-id to candidate task-keys from the catalog"],
191
+ },
192
+ {
193
+ name: "code-review",
194
+ module: "./commands/inspect/code-review.mjs",
195
+ export: "run",
196
+ category: "introspection",
197
+ summary: ["Resolve a code review's diff range and result file path"],
198
+ },
199
+ {
200
+ name: "set-work-status",
201
+ module: "./commands/inspect/set-work-status.mjs",
202
+ export: "run",
203
+ category: "introspection",
204
+ summary: ["Set a task's user-managed workStatus in task-manifest.json"],
205
+ },
206
+ {
207
+ name: "time-report",
208
+ module: "./commands/inspect/time-report.mjs",
209
+ export: "run",
210
+ category: "introspection",
211
+ summary: ["Aggregate elapsed work time across a task's runs (raw ms)"],
212
+ },
213
+ {
214
+ name: "usage-report",
215
+ module: "./commands/inspect/usage-report.mjs",
216
+ export: "run",
217
+ category: "introspection",
218
+ summary: ["Aggregate recent token, cost, and time usage by task type"],
219
+ },
220
+ {
221
+ name: "log-report",
222
+ module: "./commands/inspect/log-report.mjs",
223
+ export: "run",
224
+ category: "introspection",
225
+ summary: ["Inventory wrapper sidecar logs by size and task (read-only)"],
226
+ },
227
+ {
228
+ name: "worker-liveness",
229
+ module: "./commands/inspect/worker-liveness.mjs",
230
+ export: "run",
231
+ category: "introspection",
232
+ summary: ["Report whether pending workers are still alive (read-only)"],
233
+ },
234
+ {
235
+ name: "error-report",
236
+ module: "./commands/inspect/error-report.mjs",
237
+ export: "run",
238
+ category: "introspection",
239
+ summary: ["Aggregate okstra-run error logs into a task-level report"],
240
+ },
241
+ {
242
+ name: "error-zip",
243
+ module: "./commands/inspect/error-zip.mjs",
244
+ export: "run",
245
+ category: "introspection",
246
+ summary: ["Bundle cross-project okstra error logs into a zip"],
247
+ },
248
+ {
249
+ name: "run-audit",
250
+ module: "./commands/inspect/run-audit.mjs",
251
+ export: "run",
252
+ category: "introspection",
253
+ summary: ["Check okstra run artifacts against progress invariants"],
254
+ },
255
+ {
256
+ name: "recap",
257
+ module: "./commands/inspect/recap.mjs",
258
+ export: "run",
259
+ category: "introspection",
260
+ summary: ["Assemble a task's run-to-run phase recap or append a recap log entry"],
261
+ },
262
+ {
263
+ name: "user-response",
264
+ module: "./commands/inspect/user-response.mjs",
265
+ export: "run",
266
+ category: "introspection",
267
+ summary: ["Answer a task's open clarification questions in-session and write the response sidecar"],
268
+ },
269
+ {
270
+ name: "design-prep",
271
+ module: "./commands/inspect/design-prep.mjs",
272
+ export: "run",
273
+ category: "introspection",
274
+ summary: ["Review and record AI-prepared implementation design inputs"],
275
+ },
276
+ {
277
+ name: "rollup",
278
+ module: "./commands/inspect/rollup.mjs",
279
+ export: "run",
280
+ category: "introspection",
281
+ summary: ["Roll up run results across a task-group's tasks (raw ms + tallies)"],
282
+ },
283
+ {
284
+ name: "container",
285
+ module: "./commands/inspect/container.mjs",
286
+ export: "run",
287
+ category: "introspection",
288
+ summary: ["Manage the okstra container runtime (up/status/logs/stop-watcher/down)"],
289
+ },
290
+ {
291
+ name: "manager",
292
+ module: "./commands/manager.mjs",
293
+ export: "run",
294
+ category: "introspection",
295
+ summary: ["Manage cross-project okstra tasks"],
296
+ },
297
+ {
298
+ name: "worktree-lookup",
299
+ module: "./commands/execute/worktree-lookup.mjs",
300
+ export: "run",
301
+ category: "introspection",
302
+ summary: ["Look up registered worktree for a task-key"],
303
+ },
304
+ {
305
+ name: "worktree-status",
306
+ module: "./commands/execute/worktree-status.mjs",
307
+ export: "run",
308
+ category: "introspection",
309
+ summary: ["Clean-worktree check that ignores okstra's own scaffolding"],
310
+ },
311
+ {
312
+ name: "plan-validate",
313
+ module: "./commands/execute/plan-validate.mjs",
314
+ export: "run",
315
+ category: "introspection",
316
+ summary: ["Check an approved-plan file for the approval marker"],
317
+ },
318
+ {
319
+ name: "render-bundle",
320
+ module: "./commands/execute/render-bundle.mjs",
321
+ export: "run",
322
+ category: "introspection",
323
+ summary: [
324
+ "Preview prepare_task_bundle() output (forwards to",
325
+ "python3 -m okstra_ctl.run --render-only)",
326
+ ],
327
+ },
328
+ {
329
+ name: "profile",
330
+ module: "./commands/inspect/profile-show.mjs",
331
+ export: "run",
332
+ category: "introspection",
333
+ summary: [
334
+ "Print a phase profile with {{INCLUDE:}} expanded and its",
335
+ "lazy-read sidecars appended (read-only)",
336
+ ],
337
+ },
338
+ {
339
+ name: "run",
340
+ module: "./commands/execute/run.mjs",
341
+ export: "run",
342
+ category: "introspection",
343
+ summary: ["Host-aware auto execution front door"],
344
+ },
345
+ {
346
+ name: "codex-run",
347
+ module: "./commands/execute/codex-run.mjs",
348
+ export: "run",
349
+ category: "introspection",
350
+ summary: [
351
+ "Prepare a render-only Codex lead task bundle",
352
+ "(--lead-runtime codex, no worker dispatch)",
353
+ ],
354
+ },
355
+ {
356
+ name: "codex-dispatch",
357
+ module: "./commands/execute/codex-dispatch.mjs",
358
+ export: "run",
359
+ category: "introspection",
360
+ summary: ["Dispatch CLI-backed workers for a prepared Codex run"],
361
+ },
362
+ {
363
+ name: "worker-state",
364
+ module: "./commands/execute/worker-state.mjs",
365
+ export: "run",
366
+ category: "admin",
367
+ summary: ["Atomically transition persisted worker status"],
368
+ },
369
+ {
370
+ name: "team",
371
+ module: "./commands/execute/team.mjs",
372
+ export: "run",
373
+ category: "introspection",
374
+ summary: ["Dispatch and await pane-backed workers for external leads"],
375
+ },
376
+ {
377
+ name: "wizard",
378
+ module: "./commands/execute/wizard.mjs",
379
+ export: "run",
380
+ category: "introspection",
381
+ summary: [
382
+ "Drive the okstra-run interactive input state machine",
383
+ "(init / step / render-args / confirmation)",
384
+ ],
385
+ },
386
+ {
387
+ name: "token-usage",
388
+ module: "./commands/execute/token-usage.mjs",
389
+ export: "run",
390
+ category: "introspection",
391
+ summary: [
392
+ "Collect token usage for a run (wraps the installed",
393
+ "okstra-token-usage.py so skills avoid emitting",
394
+ 'python3 "$HOME/..." invocations).',
395
+ ],
396
+ },
397
+ {
398
+ name: "render-views",
399
+ module: "./commands/report/render-views.mjs",
400
+ export: "run",
401
+ category: "introspection",
402
+ summary: ["Render slim AI + self-contained HTML views of a final report"],
403
+ },
404
+ {
405
+ name: "report-translate",
406
+ module: "./commands/report/translate.mjs",
407
+ export: "run",
408
+ category: "introspection",
409
+ summary: [
410
+ "Build and verify the translation sidecar the HTML",
411
+ "renderer overlays when the report language is not",
412
+ "English (extract | check).",
413
+ ],
414
+ },
415
+ {
416
+ name: "agent-activity",
417
+ module: "./commands/report/agent-activity.mjs",
418
+ export: "run",
419
+ category: "introspection",
420
+ summary: ["Record and project structured lead activity into report data"],
421
+ },
422
+ {
423
+ name: "report-finalize",
424
+ module: "./commands/report/finalize.mjs",
425
+ export: "run",
426
+ category: "introspection",
427
+ summary: [
428
+ "Run the Phase 7 post-report sequence (token-usage,",
429
+ "render-views, spawn-followups, validate-run) in its",
430
+ "contractual order against one final report.",
431
+ ],
432
+ },
433
+ {
434
+ name: "render-final-report",
435
+ module: "./commands/report/render-final-report.mjs",
436
+ export: "run",
437
+ category: "introspection",
438
+ summary: ["Render the markdown sibling of a final-report data.json"],
439
+ },
440
+ {
441
+ name: "inject-report-index",
442
+ module: "./commands/report/inject-report-index.mjs",
443
+ export: "run",
444
+ category: "introspection",
445
+ summary: ["Add the top-of-report Index + scroll anchors to a report"],
446
+ },
447
+ {
448
+ name: "spawn-followups",
449
+ module: "./commands/execute/spawn-followups.mjs",
450
+ export: "run",
451
+ category: "introspection",
452
+ summary: ["Create follow-up task bundles from a final report"],
453
+ },
454
+ {
455
+ name: "error-log",
456
+ module: "./commands/execute/error-log.mjs",
457
+ export: "run",
458
+ category: "introspection",
459
+ summary: ["Append run error events to the run error log"],
460
+ },
461
+ {
462
+ name: "incremental-scope",
463
+ module: "./commands/execute/incremental-scope.mjs",
464
+ export: "run",
465
+ category: "introspection",
466
+ summary: ["Decide re-verify vs carry-forward scope for a clarification re-run"],
467
+ },
468
+ {
469
+ name: "incremental-carry",
470
+ module: "./commands/execute/incremental-carry.mjs",
471
+ export: "run",
472
+ category: "introspection",
473
+ summary: ["Merge carried-forward plan-item verdicts into an incremental re-run"],
474
+ },
475
+ {
476
+ name: "memory",
477
+ module: "./commands/memory/memory.mjs",
478
+ export: "run",
479
+ category: "introspection",
480
+ summary: [
481
+ "Store and find user-home conversation memory under",
482
+ "~/.okstra/memory-book.",
483
+ ],
484
+ },
485
+ {
486
+ name: "pr",
487
+ module: "./commands/pr/pr.mjs",
488
+ export: "run",
489
+ category: "introspection",
490
+ summary: [
491
+ "Manage PR body templates and prepare PR generation",
492
+ "bundles under ~/.okstra/template/pr.",
493
+ ],
494
+ },
495
+ ];
496
+ function isRecord(value) {
497
+ return typeof value === "object" && value !== null;
498
+ }
499
+ function isCommandRunner(value) {
500
+ return typeof value === "function";
501
+ }
502
+ async function loadCommand(definition) {
503
+ const moduleRecord = await import(definition.module);
504
+ if (!isRecord(moduleRecord)) {
505
+ throw new Error(`command module is not an object: ${definition.module}`);
506
+ }
507
+ const runner = moduleRecord[definition.export];
508
+ if (!isCommandRunner(runner)) {
509
+ throw new Error(`command export is not callable: ${definition.module}#${definition.export}`);
510
+ }
511
+ return runner;
512
+ }
513
+ export const COMMANDS = new Map(COMMAND_REGISTRY.map((c) => [
514
+ c.name,
515
+ () => loadCommand(c),
516
+ ]));
517
+ const PREAMBLE = `okstra — host-aware multi-provider cross-verification orchestrator
518
+
519
+ This CLI is the installer/admin tool. Day-to-day usage happens inside a
520
+ supported agent host through installed skills (okstra-setup, okstra-run, ...).
521
+
522
+ Quick start (CLI):
523
+ 1. npx -y okstra@latest install # one-time, this machine
524
+ 2. cd <your project>
525
+ 3. npx -y okstra@latest setup --project-id <id> # one-time, this project
526
+ 4. open Claude Code, Codex, or Antigravity and run okstra-run # start a task
527
+
528
+ Inside a supported agent host you can replace step 3 with okstra-setup —
529
+ both write the same <PROJECT_ROOT>/.okstra/project.json.
530
+
531
+ Usage:
532
+ okstra <command> [options]
533
+ `;
534
+ const GLOBAL_OPTIONS = ` --version Print okstra version and exit
535
+ --help Print this help`;
536
+ const FOOTER = `
537
+
538
+ Run 'okstra <command> --help' for command-specific options.
539
+ Docs: https://github.com/Devonshin/okstra#readme
540
+ `;
541
+ function renderRow(command) {
542
+ const [first, ...rest] = command.summary;
543
+ const head = " " + command.name.padEnd(SUMMARY_COLUMN - 2) + first;
544
+ const continuations = rest.map((line) => " ".repeat(SUMMARY_COLUMN) + line);
545
+ return [head, ...continuations].join("\n");
546
+ }
547
+ function renderRows(category) {
548
+ return COMMAND_REGISTRY.filter((c) => c.category === category)
549
+ .map(renderRow)
550
+ .join("\n");
551
+ }
552
+ export const USAGE = PREAMBLE +
553
+ "\nAdmin commands:\n" +
554
+ renderRows("admin") +
555
+ "\n\nIntrospection commands (JSON output, used by skills to avoid python heredocs):\n" +
556
+ renderRows("introspection") +
557
+ "\n\nGlobal options:\n" +
558
+ GLOBAL_OPTIONS +
559
+ FOOTER;
560
+ //# sourceMappingURL=cli-registry.mjs.map