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
@@ -146,6 +146,14 @@ _TRACKED_READ_BASENAMES = (
146
146
  @dataclass
147
147
  class SessionConformanceResult:
148
148
  errors: list[str] = field(default_factory=list)
149
+ # Conformance findings that are reported without failing the run: the
150
+ # PROGRESS narration lines. A missing checkpoint line means the run is
151
+ # harder to follow after the fact, not that any of its work is wrong, and
152
+ # by the time this validator runs the line can no longer be emitted — the
153
+ # session that would have written it has ended. Checks that verify a
154
+ # *claim* (a user confirmation the report says it obtained) stay in
155
+ # `errors`.
156
+ advisories: list[str] = field(default_factory=list)
149
157
 
150
158
  @property
151
159
  def ok(self) -> bool:
@@ -1089,26 +1097,30 @@ def _check_progress_checkpoints(
1089
1097
  suffix: str | None,
1090
1098
  report_path: Path,
1091
1099
  errors: list[str],
1100
+ advisories: list[str] | None = None,
1092
1101
  ) -> None:
1102
+ # The narration lines are advisory (see `SessionConformanceResult`); the
1103
+ # user-confirmation cross-check below stays in `errors`.
1104
+ narration = advisories if advisories is not None else errors
1093
1105
  by_phase: dict[str, list[tuple[str, str]]] = {}
1094
1106
  for ts, phase, line in evidence.progress:
1095
1107
  by_phase.setdefault(phase, []).append((ts, line))
1096
1108
 
1097
1109
  def require(phase: str, condition: bool, detail: str) -> None:
1098
1110
  if condition and phase not in by_phase:
1099
- errors.append(
1111
+ narration.append(
1100
1112
  f"PROGRESS checkpoint missing: `{phase}` ({detail}) — "
1101
1113
  "prompts/lead/okstra-lead-contract.md 'Progress reporting (BLOCKING)'."
1102
1114
  )
1103
1115
 
1104
1116
  intake = by_phase.get("phase-1-intake", [])
1105
1117
  if not any("complete" not in line.lower() for _ts, line in intake):
1106
- errors.append(
1118
+ narration.append(
1107
1119
  "PROGRESS checkpoint missing: `phase-1-intake reading task bundle` "
1108
1120
  "(start-of-Phase-1 line) — prompts/lead/okstra-lead-contract.md 'Progress reporting (BLOCKING)'."
1109
1121
  )
1110
1122
  if not any("complete" in line.lower() for _ts, line in intake):
1111
- errors.append(
1123
+ narration.append(
1112
1124
  "PROGRESS checkpoint missing: `phase-1-intake complete` "
1113
1125
  "(after all intake reads) — prompts/lead/okstra-lead-contract.md 'Progress reporting (BLOCKING)'."
1114
1126
  )
@@ -1126,7 +1138,7 @@ def _check_progress_checkpoints(
1126
1138
  "`using implicit team (split-pane=<on|off>)` line, or the "
1127
1139
  "`skipped (concurrent-run)` variant in the concurrent-run path",
1128
1140
  )
1129
- _check_worker_checkpoint_lines(by_phase, analysis_workers, errors)
1141
+ _check_worker_checkpoint_lines(by_phase, analysis_workers, narration)
1130
1142
  convergence_ran = _convergence_rounds_ran(run_dir, suffix)
1131
1143
  require(
1132
1144
  "phase-5.5-convergence",
@@ -1145,10 +1157,10 @@ def _check_progress_checkpoints(
1145
1157
  )
1146
1158
  require("phase-7-persist", True, "at the start of Phase 7")
1147
1159
  _check_batch_cleanup_checkpoints(
1148
- by_phase, convergence_ran, report_writer_dispatched, errors
1160
+ by_phase, convergence_ran, report_writer_dispatched, narration
1149
1161
  )
1150
1162
  _check_plan_verify_cleanup_checkpoints(
1151
- by_phase, _plan_body_rounds_ran(run_dir, suffix), errors
1163
+ by_phase, _plan_body_rounds_ran(run_dir, suffix), narration
1152
1164
  )
1153
1165
  _check_user_confirm_checkpoints(
1154
1166
  by_phase, _ids_reported_as_asked(report_path), errors
@@ -1413,7 +1425,13 @@ def validate_session_conformance(
1413
1425
  result.errors.append(error)
1414
1426
  return result
1415
1427
  _check_progress_checkpoints(
1416
- evidence, team_state, run_dir, suffix, report_path, result.errors
1428
+ evidence,
1429
+ team_state,
1430
+ run_dir,
1431
+ suffix,
1432
+ report_path,
1433
+ result.errors,
1434
+ result.advisories,
1417
1435
  )
1418
1436
  _check_activity_contract(
1419
1437
  evidence,
@@ -1,539 +0,0 @@
1
- const SUMMARY_COLUMN = 25;
2
-
3
- export const COMMAND_REGISTRY = [
4
- {
5
- name: "install",
6
- module: "./commands/lifecycle/install.mjs",
7
- export: "runInstall",
8
- category: "admin",
9
- summary: ["Install runtime; seed skills into Agent and Claude homes"],
10
- },
11
- {
12
- name: "ensure-installed",
13
- module: "./commands/lifecycle/install.mjs",
14
- export: "runEnsureInstalled",
15
- category: "admin",
16
- summary: ["Verify install is fresh; reinstall if stale (idempotent)"],
17
- },
18
- {
19
- name: "uninstall",
20
- module: "./commands/lifecycle/uninstall.mjs",
21
- export: "runUninstall",
22
- category: "admin",
23
- summary: ["Remove runtime + skills (user data preserved by default)"],
24
- },
25
- {
26
- name: "setup",
27
- module: "./commands/lifecycle/setup.mjs",
28
- export: "run",
29
- category: "admin",
30
- summary: ["Register the current project (.okstra/project.json)"],
31
- },
32
- {
33
- name: "doctor",
34
- module: "./commands/lifecycle/doctor.mjs",
35
- export: "run",
36
- category: "admin",
37
- summary: [
38
- "Diagnostic check; --runtime selects assets, --phase checks readiness",
39
- ],
40
- },
41
- {
42
- name: "check-project",
43
- module: "./commands/lifecycle/check-project.mjs",
44
- export: "run",
45
- category: "admin",
46
- summary: ["Verify the current project has been registered with setup"],
47
- },
48
- {
49
- name: "preflight",
50
- module: "./commands/lifecycle/preflight.mjs",
51
- export: "run",
52
- category: "admin",
53
- summary: ["One-call skill preflight: ensure-installed + check-project (JSON)"],
54
- },
55
- {
56
- name: "config",
57
- module: "./commands/lifecycle/config.mjs",
58
- export: "run",
59
- category: "admin",
60
- summary: ["Read / write okstra settings (e.g. PR template path)"],
61
- },
62
- {
63
- name: "migrate",
64
- module: "./commands/lifecycle/migrate.mjs",
65
- export: "run",
66
- category: "admin",
67
- summary: ["Move legacy .project-docs/okstra/ to .okstra/ (one-shot)"],
68
- },
69
- {
70
- name: "convergence",
71
- module: "./commands/execute/convergence.mjs",
72
- export: "run",
73
- category: "admin",
74
- summary: ["Advance and validate deterministic re-verification state"],
75
- },
76
- {
77
- name: "plan-items",
78
- module: "./commands/execute/plan-items.mjs",
79
- export: "run",
80
- category: "admin",
81
- summary: ["Extract and validate deterministic plan-body items"],
82
- },
83
- {
84
- name: "agent-prompt",
85
- module: "./commands/execute/agent-prompt.mjs",
86
- export: "run",
87
- category: "admin",
88
- summary: ["Materialize and verify auditable agent invocations"],
89
- },
90
- {
91
- name: "worker-dispatch",
92
- module: "./commands/execute/worker-dispatch.mjs",
93
- export: "run",
94
- category: "admin",
95
- summary: ["Dispatch verified CLI-backed worker assignments"],
96
- },
97
- {
98
- name: "plan-verify",
99
- module: "./commands/execute/plan-verify.mjs",
100
- export: "run",
101
- category: "admin",
102
- summary: ["Score the §5.5.9 plan-body gate for one self-fix round"],
103
- },
104
- {
105
- name: "worker-audit-check",
106
- module: "./commands/execute/worker-audit-check.mjs",
107
- export: "run",
108
- category: "admin",
109
- summary: [
110
- "Check a run's worker audit sidecars while the workers",
111
- "are still alive (the Phase 7 rules, run early)",
112
- ],
113
- },
114
- {
115
- name: "git-reconcile",
116
- module: "./commands/execute/git-reconcile.mjs",
117
- export: "run",
118
- category: "admin",
119
- summary: ["Reconcile stale stage SHAs after external git history changes"],
120
- },
121
- {
122
- name: "handoff",
123
- module: "./commands/execute/handoff.mjs",
124
- export: "run",
125
- category: "admin",
126
- summary: ["Stage-group release-handoff helpers (eligible/assemble/record)"],
127
- },
128
- {
129
- name: "integrate-stages",
130
- module: "./commands/execute/integrate-stages.mjs",
131
- export: "run",
132
- category: "admin",
133
- summary: ["stage 들을 task 브랜치에 통합 머지하고 stage worktree 를 정리"],
134
- },
135
- {
136
- name: "paths",
137
- module: "./commands/lifecycle/paths.mjs",
138
- export: "run",
139
- category: "admin",
140
- summary: [
141
- "Print runtime paths (workspace/agents/pythonpath/bin/home/version)",
142
- ],
143
- },
144
- {
145
- name: "task-list",
146
- module: "./commands/inspect/task-list.mjs",
147
- export: "run",
148
- category: "introspection",
149
- summary: ["List tasks registered in the current project"],
150
- },
151
- {
152
- name: "task-show",
153
- module: "./commands/inspect/task-show.mjs",
154
- export: "run",
155
- category: "introspection",
156
- summary: ["Summarize a task's manifest + workflow phase state"],
157
- },
158
- {
159
- name: "stage-map",
160
- module: "./commands/inspect/stage-map.mjs",
161
- export: "run",
162
- category: "introspection",
163
- summary: ["Dump a task's implementation-planning Stage Map + done stages"],
164
- },
165
- {
166
- name: "context-cost",
167
- module: "./commands/inspect/context-cost.mjs",
168
- export: "run",
169
- category: "introspection",
170
- summary: ["Estimate file/read context cost for a task bundle"],
171
- },
172
- {
173
- name: "resolve-task-key",
174
- module: "./commands/inspect/resolve-task-key.mjs",
175
- export: "run",
176
- category: "introspection",
177
- summary: ["Resolve a bare task-id to candidate task-keys from the catalog"],
178
- },
179
- {
180
- name: "code-review",
181
- module: "./commands/inspect/code-review.mjs",
182
- export: "run",
183
- category: "introspection",
184
- summary: ["Resolve a code review's diff range and result file path"],
185
- },
186
- {
187
- name: "set-work-status",
188
- module: "./commands/inspect/set-work-status.mjs",
189
- export: "run",
190
- category: "introspection",
191
- summary: ["Set a task's user-managed workStatus in task-manifest.json"],
192
- },
193
- {
194
- name: "time-report",
195
- module: "./commands/inspect/time-report.mjs",
196
- export: "run",
197
- category: "introspection",
198
- summary: ["Aggregate elapsed work time across a task's runs (raw ms)"],
199
- },
200
- {
201
- name: "usage-report",
202
- module: "./commands/inspect/usage-report.mjs",
203
- export: "run",
204
- category: "introspection",
205
- summary: ["Aggregate recent token, cost, and time usage by task type"],
206
- },
207
- {
208
- name: "log-report",
209
- module: "./commands/inspect/log-report.mjs",
210
- export: "run",
211
- category: "introspection",
212
- summary: ["Inventory wrapper sidecar logs by size and task (read-only)"],
213
- },
214
- {
215
- name: "worker-liveness",
216
- module: "./commands/inspect/worker-liveness.mjs",
217
- export: "run",
218
- category: "introspection",
219
- summary: ["Report whether pending workers are still alive (read-only)"],
220
- },
221
- {
222
- name: "error-report",
223
- module: "./commands/inspect/error-report.mjs",
224
- export: "run",
225
- category: "introspection",
226
- summary: ["Aggregate okstra-run error logs into a task-level report"],
227
- },
228
- {
229
- name: "error-zip",
230
- module: "./commands/inspect/error-zip.mjs",
231
- export: "run",
232
- category: "introspection",
233
- summary: ["Bundle cross-project okstra error logs into a zip"],
234
- },
235
- {
236
- name: "run-audit",
237
- module: "./commands/inspect/run-audit.mjs",
238
- export: "run",
239
- category: "introspection",
240
- summary: ["Check okstra run artifacts against progress invariants"],
241
- },
242
- {
243
- name: "recap",
244
- module: "./commands/inspect/recap.mjs",
245
- export: "run",
246
- category: "introspection",
247
- summary: ["Assemble a task's run-to-run phase recap or append a recap log entry"],
248
- },
249
- {
250
- name: "user-response",
251
- module: "./commands/inspect/user-response.mjs",
252
- export: "run",
253
- category: "introspection",
254
- summary: ["Answer a task's open clarification questions in-session and write the response sidecar"],
255
- },
256
- {
257
- name: "design-prep",
258
- module: "./commands/inspect/design-prep.mjs",
259
- export: "run",
260
- category: "introspection",
261
- summary: ["Review and record AI-prepared implementation design inputs"],
262
- },
263
- {
264
- name: "rollup",
265
- module: "./commands/inspect/rollup.mjs",
266
- export: "run",
267
- category: "introspection",
268
- summary: ["Roll up run results across a task-group's tasks (raw ms + tallies)"],
269
- },
270
- {
271
- name: "container",
272
- module: "./commands/inspect/container.mjs",
273
- export: "run",
274
- category: "introspection",
275
- summary: ["Manage the okstra container runtime (up/status/logs/stop-watcher/down)"],
276
- },
277
- {
278
- name: "manager",
279
- module: "./commands/manager.mjs",
280
- export: "run",
281
- category: "introspection",
282
- summary: ["Manage cross-project okstra tasks"],
283
- },
284
- {
285
- name: "worktree-lookup",
286
- module: "./commands/execute/worktree-lookup.mjs",
287
- export: "run",
288
- category: "introspection",
289
- summary: ["Look up registered worktree for a task-key"],
290
- },
291
- {
292
- name: "worktree-status",
293
- module: "./commands/execute/worktree-status.mjs",
294
- export: "run",
295
- category: "introspection",
296
- summary: ["Clean-worktree check that ignores okstra's own scaffolding"],
297
- },
298
- {
299
- name: "plan-validate",
300
- module: "./commands/execute/plan-validate.mjs",
301
- export: "run",
302
- category: "introspection",
303
- summary: ["Check an approved-plan file for the approval marker"],
304
- },
305
- {
306
- name: "render-bundle",
307
- module: "./commands/execute/render-bundle.mjs",
308
- export: "run",
309
- category: "introspection",
310
- summary: [
311
- "Preview prepare_task_bundle() output (forwards to",
312
- "python3 -m okstra_ctl.run --render-only)",
313
- ],
314
- },
315
- {
316
- name: "profile",
317
- module: "./commands/inspect/profile-show.mjs",
318
- export: "run",
319
- category: "introspection",
320
- summary: [
321
- "Print a phase profile with {{INCLUDE:}} expanded and its",
322
- "lazy-read sidecars appended (read-only)",
323
- ],
324
- },
325
- {
326
- name: "run",
327
- module: "./commands/execute/run.mjs",
328
- export: "run",
329
- category: "introspection",
330
- summary: ["Host-aware auto execution front door"],
331
- },
332
- {
333
- name: "codex-run",
334
- module: "./commands/execute/codex-run.mjs",
335
- export: "run",
336
- category: "introspection",
337
- summary: [
338
- "Prepare a render-only Codex lead task bundle",
339
- "(--lead-runtime codex, no worker dispatch)",
340
- ],
341
- },
342
- {
343
- name: "codex-dispatch",
344
- module: "./commands/execute/codex-dispatch.mjs",
345
- export: "run",
346
- category: "introspection",
347
- summary: ["Dispatch CLI-backed workers for a prepared Codex run"],
348
- },
349
- {
350
- name: "worker-state",
351
- module: "./commands/execute/worker-state.mjs",
352
- export: "run",
353
- category: "admin",
354
- summary: ["Atomically transition persisted worker status"],
355
- },
356
- {
357
- name: "team",
358
- module: "./commands/execute/team.mjs",
359
- export: "run",
360
- category: "introspection",
361
- summary: ["Dispatch and await pane-backed workers for external leads"],
362
- },
363
- {
364
- name: "wizard",
365
- module: "./commands/execute/wizard.mjs",
366
- export: "run",
367
- category: "introspection",
368
- summary: [
369
- "Drive the okstra-run interactive input state machine",
370
- "(init / step / render-args / confirmation)",
371
- ],
372
- },
373
- {
374
- name: "token-usage",
375
- module: "./commands/execute/token-usage.mjs",
376
- export: "run",
377
- category: "introspection",
378
- summary: [
379
- "Collect token usage for a run (wraps the installed",
380
- "okstra-token-usage.py so skills avoid emitting",
381
- 'python3 "$HOME/..." invocations).',
382
- ],
383
- },
384
- {
385
- name: "render-views",
386
- module: "./commands/report/render-views.mjs",
387
- export: "run",
388
- category: "introspection",
389
- summary: ["Render slim AI + self-contained HTML views of a final report"],
390
- },
391
- {
392
- name: "report-translate",
393
- module: "./commands/report/translate.mjs",
394
- export: "run",
395
- category: "introspection",
396
- summary: [
397
- "Build and verify the translation sidecar the HTML",
398
- "renderer overlays when the report language is not",
399
- "English (extract | check).",
400
- ],
401
- },
402
- {
403
- name: "agent-activity",
404
- module: "./commands/report/agent-activity.mjs",
405
- export: "run",
406
- category: "introspection",
407
- summary: ["Record and project structured lead activity into report data"],
408
- },
409
- {
410
- name: "report-finalize",
411
- module: "./commands/report/finalize.mjs",
412
- export: "run",
413
- category: "introspection",
414
- summary: [
415
- "Run the Phase 7 post-report sequence (token-usage,",
416
- "render-views, spawn-followups, validate-run) in its",
417
- "contractual order against one final report.",
418
- ],
419
- },
420
- {
421
- name: "render-final-report",
422
- module: "./commands/report/render-final-report.mjs",
423
- export: "run",
424
- category: "introspection",
425
- summary: ["Render the markdown sibling of a final-report data.json"],
426
- },
427
- {
428
- name: "inject-report-index",
429
- module: "./commands/report/inject-report-index.mjs",
430
- export: "run",
431
- category: "introspection",
432
- summary: ["Add the top-of-report Index + scroll anchors to a report"],
433
- },
434
- {
435
- name: "spawn-followups",
436
- module: "./commands/execute/spawn-followups.mjs",
437
- export: "run",
438
- category: "introspection",
439
- summary: ["Create follow-up task bundles from a final report"],
440
- },
441
- {
442
- name: "error-log",
443
- module: "./commands/execute/error-log.mjs",
444
- export: "run",
445
- category: "introspection",
446
- summary: ["Append run error events to the run error log"],
447
- },
448
- {
449
- name: "incremental-scope",
450
- module: "./commands/execute/incremental-scope.mjs",
451
- export: "run",
452
- category: "introspection",
453
- summary: ["Decide re-verify vs carry-forward scope for a clarification re-run"],
454
- },
455
- {
456
- name: "incremental-carry",
457
- module: "./commands/execute/incremental-carry.mjs",
458
- export: "run",
459
- category: "introspection",
460
- summary: ["Merge carried-forward plan-item verdicts into an incremental re-run"],
461
- },
462
- {
463
- name: "memory",
464
- module: "./commands/memory/memory.mjs",
465
- export: "run",
466
- category: "introspection",
467
- summary: [
468
- "Store and find user-home conversation memory under",
469
- "~/.okstra/memory-book.",
470
- ],
471
- },
472
- {
473
- name: "pr",
474
- module: "./commands/pr/pr.mjs",
475
- export: "run",
476
- category: "introspection",
477
- summary: [
478
- "Manage PR body templates and prepare PR generation",
479
- "bundles under ~/.okstra/template/pr.",
480
- ],
481
- },
482
- ];
483
-
484
- export const COMMANDS = new Map(
485
- COMMAND_REGISTRY.map((c) => [
486
- c.name,
487
- () => import(c.module).then((m) => m[c.export]),
488
- ]),
489
- );
490
-
491
- const PREAMBLE = `okstra — host-aware multi-provider cross-verification orchestrator
492
-
493
- This CLI is the installer/admin tool. Day-to-day usage happens inside a
494
- supported agent host through installed skills (okstra-setup, okstra-run, ...).
495
-
496
- Quick start (CLI):
497
- 1. npx -y okstra@latest install # one-time, this machine
498
- 2. cd <your project>
499
- 3. npx -y okstra@latest setup --project-id <id> # one-time, this project
500
- 4. open Claude Code, Codex, or Antigravity and run okstra-run # start a task
501
-
502
- Inside a supported agent host you can replace step 3 with okstra-setup —
503
- both write the same <PROJECT_ROOT>/.okstra/project.json.
504
-
505
- Usage:
506
- okstra <command> [options]
507
- `;
508
-
509
- const GLOBAL_OPTIONS = ` --version Print okstra version and exit
510
- --help Print this help`;
511
-
512
- const FOOTER = `
513
-
514
- Run 'okstra <command> --help' for command-specific options.
515
- Docs: https://github.com/Devonshin/okstra#readme
516
- `;
517
-
518
- function renderRow(command) {
519
- const [first, ...rest] = command.summary;
520
- const head = " " + command.name.padEnd(SUMMARY_COLUMN - 2) + first;
521
- const continuations = rest.map((line) => " ".repeat(SUMMARY_COLUMN) + line);
522
- return [head, ...continuations].join("\n");
523
- }
524
-
525
- function renderRows(category) {
526
- return COMMAND_REGISTRY.filter((c) => c.category === category)
527
- .map(renderRow)
528
- .join("\n");
529
- }
530
-
531
- export const USAGE =
532
- PREAMBLE +
533
- "\nAdmin commands:\n" +
534
- renderRows("admin") +
535
- "\n\nIntrospection commands (JSON output, used by skills to avoid python heredocs):\n" +
536
- renderRows("introspection") +
537
- "\n\nGlobal options:\n" +
538
- GLOBAL_OPTIONS +
539
- FOOTER;
@@ -1,10 +0,0 @@
1
- import {
2
- buildWorkerDispatchArgs,
3
- runWorkerDispatch,
4
- } from "./worker-dispatch.mjs";
5
-
6
- export const buildCodexDispatchArgs = buildWorkerDispatchArgs;
7
-
8
- export async function run(args) {
9
- return runWorkerDispatch(args, { commandName: "codex-dispatch" });
10
- }
@@ -1,9 +0,0 @@
1
- import { runPythonModule } from "../../lib/python-helper.mjs";
2
-
3
- export async function run(args) {
4
- const { code } = await runPythonModule({
5
- module: "okstra_ctl.plan_items_cli",
6
- args,
7
- });
8
- return code ?? 1;
9
- }