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
@@ -1,7 +1,6 @@
1
1
  import { runPythonModule } from "../../lib/python-helper.mjs";
2
2
  import { resolvePaths } from "../../lib/paths.mjs";
3
3
  import { resolveRuntime } from "../../lib/host-registry-client.mjs";
4
-
5
4
  const USAGE = `okstra render-bundle — preview the task bundle without launching a lead
6
5
 
7
6
  This is a thin shim over \`python3 -m okstra_ctl.run\` that forces
@@ -16,6 +15,7 @@ Usage:
16
15
  --task-brief <path-or-rel> [--executor <name>] \\
17
16
  [--approved-plan <path>] [--workers <list>] [--directive <text>] \\
18
17
  [--analysis-target <text>] [--evidence-inputs <csv>] \\
18
+ [--role-count <role>=<N>] [--role-model <role>=<modelRef>] \\
19
19
  [--lead-model <m>] [--claude-model <m>] [--codex-model <m>] \\
20
20
  [--antigravity-model <m>] [--report-writer-model <m>] \\
21
21
  [--lead-runtime auto|<host-id-or-alias>] \\
@@ -45,71 +45,75 @@ and \`--render-only\`, so callers do not need to set those.
45
45
  Replaces the long \`from okstra_ctl.run import PrepareInputs,
46
46
  prepare_task_bundle\` heredoc pattern.
47
47
  `;
48
-
49
48
  function findFlagValue(args, flag) {
50
- const equals = args.find((arg) => arg.startsWith(`${flag}=`));
51
- if (equals) return equals.slice(flag.length + 1);
52
- const index = args.indexOf(flag);
53
- return index >= 0 ? args[index + 1] : "";
49
+ const equals = args.find((arg) => arg.startsWith(`${flag}=`));
50
+ if (equals)
51
+ return equals.slice(flag.length + 1);
52
+ const index = args.indexOf(flag);
53
+ return index >= 0 ? args[index + 1] ?? "" : "";
54
54
  }
55
-
56
55
  function withoutLeadRuntime(args) {
57
- const out = [];
58
- for (let i = 0; i < args.length; i += 1) {
59
- const arg = args[i];
60
- if (arg === "--lead-runtime") {
61
- i += 1;
62
- continue;
56
+ const out = [];
57
+ for (let i = 0; i < args.length; i += 1) {
58
+ const arg = args[i];
59
+ if (arg === undefined)
60
+ continue;
61
+ if (arg === "--lead-runtime") {
62
+ i += 1;
63
+ continue;
64
+ }
65
+ if (arg.startsWith("--lead-runtime="))
66
+ continue;
67
+ out.push(arg);
63
68
  }
64
- if (arg.startsWith("--lead-runtime=")) continue;
65
- out.push(arg);
66
- }
67
- return out;
69
+ return out;
70
+ }
71
+ export function buildRenderBundleArgs(args, workspaceRoot, resolvedRuntime, requestedRuntime, runtimeResolutionJson) {
72
+ return [
73
+ "--workspace-root", workspaceRoot,
74
+ "--render-only",
75
+ "--lead-runtime", resolvedRuntime,
76
+ "--lead-runtime-request", requestedRuntime,
77
+ "--runtime-resolution-json", runtimeResolutionJson,
78
+ ...withoutLeadRuntime(args),
79
+ ];
68
80
  }
69
-
70
81
  export async function run(args) {
71
- if (args.includes("--help") || args.includes("-h")) {
72
- process.stdout.write(USAGE);
73
- return 0;
74
- }
75
- const paths = await resolvePaths();
76
-
77
- // Callers should not pass these; we own them.
78
- const forbidden = ["--workspace-root", "--render-only"];
79
- for (const f of forbidden) {
80
- if (args.includes(f)) {
81
- process.stderr.write(
82
- `error: ${f} is set by 'okstra render-bundle' itself — remove it from your args\n`,
83
- );
84
- return 2;
82
+ if (args.includes("--help") || args.includes("-h")) {
83
+ process.stdout.write(USAGE);
84
+ return 0;
85
85
  }
86
- }
87
-
88
- const requestedRuntime = findFlagValue(args, "--lead-runtime") || "auto";
89
- const runtimeResolution = await resolveRuntime({
90
- requestedRuntime,
91
- command: "render",
92
- env: process.env,
93
- capabilities: { tmuxAvailable: Boolean(process.env.TMUX) },
94
- });
95
- if (!runtimeResolution.ok) {
96
- process.stderr.write(`error: ${runtimeResolution.reason}\n`);
97
- return 2;
98
- }
99
-
100
- const finalArgs = [
101
- "--workspace-root", paths.workspace,
102
- "--render-only",
103
- "--lead-runtime", runtimeResolution.resolvedRuntime,
104
- "--lead-runtime-request", requestedRuntime,
105
- "--runtime-resolution-json", JSON.stringify(runtimeResolution),
106
- ...withoutLeadRuntime(args),
107
- ];
108
-
109
- const result = await runPythonModule({
110
- module: "okstra_ctl.run",
111
- args: finalArgs,
112
- stdio: "inherit-stdout",
113
- });
114
- return result.code;
86
+ const paths = await resolvePaths();
87
+ // Callers should not pass these; we own them.
88
+ const forbidden = ["--workspace-root", "--render-only"];
89
+ for (const f of forbidden) {
90
+ if (args.includes(f)) {
91
+ process.stderr.write(`error: ${f} is set by 'okstra render-bundle' itself — remove it from your args\n`);
92
+ return 2;
93
+ }
94
+ }
95
+ const requestedRuntime = findFlagValue(args, "--lead-runtime") || "auto";
96
+ const runtimeResolution = await resolveRuntime({
97
+ requestedRuntime,
98
+ command: "render",
99
+ env: process.env,
100
+ capabilities: { tmuxAvailable: Boolean(process.env.TMUX) },
101
+ });
102
+ if (!runtimeResolution.ok) {
103
+ process.stderr.write(`error: ${runtimeResolution.reason}\n`);
104
+ return 2;
105
+ }
106
+ const resolvedRuntime = runtimeResolution.resolvedRuntime;
107
+ if (resolvedRuntime === null) {
108
+ process.stderr.write("error: host runtime resolution returned no runtime\n");
109
+ return 2;
110
+ }
111
+ const finalArgs = buildRenderBundleArgs(args, paths.workspace, resolvedRuntime, requestedRuntime, JSON.stringify(runtimeResolution));
112
+ const result = await runPythonModule({
113
+ module: "okstra_ctl.run",
114
+ args: finalArgs,
115
+ stdio: "inherit-stdout",
116
+ });
117
+ return result.code;
115
118
  }
119
+ //# sourceMappingURL=render-bundle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-bundle.mjs","sourceRoot":"","sources":["../../../src/commands/execute/render-bundle.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CliArgs, HostRuntimeResolution, RuntimePaths } from "../../lib/types.mjs";
2
+ interface RunCommand {
3
+ readonly name: string;
4
+ readonly args: string[];
5
+ readonly capture: boolean;
6
+ }
7
+ interface RunPlan {
8
+ readonly ok: boolean;
9
+ readonly kind?: "team" | "launch-lead";
10
+ readonly reason: string;
11
+ readonly commands: RunCommand[];
12
+ }
13
+ export declare function positionalRuntime(args: CliArgs): string;
14
+ export declare function requestedRuntimeFromArgs(args: CliArgs): string;
15
+ export declare function withoutRuntimeSelection(args: CliArgs): string[];
16
+ export declare function extractLabel(stdout: string, label: string): string;
17
+ export declare function buildRunPlan({ args, paths, resolution, runManifestPath, }: {
18
+ readonly args: CliArgs;
19
+ readonly paths: RuntimePaths;
20
+ readonly resolution: HostRuntimeResolution;
21
+ readonly runManifestPath?: string;
22
+ }): RunPlan;
23
+ export declare function run(args: readonly string[]): Promise<number>;
24
+ export {};
@@ -0,0 +1,196 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { runEnsureInstalled } from "../lifecycle/install.mjs";
5
+ import { runPythonModule } from "../../lib/python-helper.mjs";
6
+ import { resolvePaths } from "../../lib/paths.mjs";
7
+ import { resolveRuntime } from "../../lib/host-registry-client.mjs";
8
+ const USAGE = `okstra run — host-aware okstra execution front door
9
+
10
+ Usage:
11
+ okstra run [<host-id-or-alias>] --project-root <dir> \\
12
+ --project-id <id> --task-group <tg> --task-id <tid> --task-type <type> \\
13
+ [--lead-runtime auto|<host-id-or-alias>] [--yes]
14
+
15
+ The leading word selects the lead and is an alias for --lead-runtime, so
16
+ 'okstra run codex' starts a Codex lead. Naming a lead starts that CLI with the
17
+ prepared prompt; 'external' instead orchestrates an all-CLI run through okstra
18
+ team. Starting a lead whose CLI sandboxes itself asks for confirmation first,
19
+ which --yes answers.
20
+ `;
21
+ function flagValue(args, flag) {
22
+ const equals = args.find((arg) => arg.startsWith(`${flag}=`));
23
+ if (equals)
24
+ return equals.slice(flag.length + 1);
25
+ const index = args.indexOf(flag);
26
+ return index >= 0 ? args[index + 1] ?? "" : "";
27
+ }
28
+ export function positionalRuntime(args) {
29
+ const first = args[0];
30
+ return !first || first.startsWith("-") ? "" : first;
31
+ }
32
+ export function requestedRuntimeFromArgs(args) {
33
+ return flagValue(args, "--lead-runtime") || positionalRuntime(args) || "auto";
34
+ }
35
+ export function withoutRuntimeSelection(args) {
36
+ const rest = positionalRuntime(args) ? args.slice(1) : args;
37
+ const out = [];
38
+ for (let i = 0; i < rest.length; i += 1) {
39
+ const arg = rest[i];
40
+ if (arg === undefined)
41
+ continue;
42
+ if (arg === "--lead-runtime") {
43
+ i += 1;
44
+ continue;
45
+ }
46
+ if (arg.startsWith("--lead-runtime="))
47
+ continue;
48
+ out.push(arg);
49
+ }
50
+ return out;
51
+ }
52
+ export function extractLabel(stdout, label) {
53
+ const prefix = `${label}:`;
54
+ const line = String(stdout || "").split("\n").find((item) => item.startsWith(prefix));
55
+ return line ? line.slice(prefix.length).trim() : "";
56
+ }
57
+ function projectRootFromArgs(args) {
58
+ return flagValue(args, "--project-root");
59
+ }
60
+ function renderArgs(args, resolution) {
61
+ return [
62
+ "--lead-runtime", resolution.resolvedRuntime ?? "auto",
63
+ "--lead-runtime-request", resolution.requestedRuntime,
64
+ "--runtime-resolution-json", JSON.stringify(resolution),
65
+ ...withoutRuntimeSelection(args),
66
+ ];
67
+ }
68
+ export function buildRunPlan({ args, paths, resolution, runManifestPath = "", }) {
69
+ void paths;
70
+ const projectRoot = projectRootFromArgs(args);
71
+ if (resolution.launchMode === "team") {
72
+ return {
73
+ ok: true,
74
+ kind: "team",
75
+ reason: resolution.reason,
76
+ commands: [
77
+ { name: "render-bundle", args: renderArgs(args, resolution), capture: true },
78
+ { name: "team dispatch", args: ["dispatch", "--project-root", projectRoot, "--run-manifest", runManifestPath], capture: false },
79
+ { name: "team await", args: ["await", "--project-root", projectRoot, "--run-manifest", runManifestPath], capture: false },
80
+ ],
81
+ };
82
+ }
83
+ if (resolution.launchMode === "lead") {
84
+ return {
85
+ ok: true,
86
+ kind: "launch-lead",
87
+ reason: resolution.reason,
88
+ // Handed to okstra.sh, which owns input collection and the launch. Only
89
+ // the runtime is decided here; everything else is passed through so the
90
+ // launcher can prompt for whatever is still missing.
91
+ // --launch-only: open the host and stop. Task inputs are collected by the
92
+ // okstra-run skill inside the session, which is how the Claude Code path
93
+ // has always worked — demanding a task id out here asks for it before the
94
+ // user has a session to pick one in.
95
+ commands: [
96
+ {
97
+ name: "launcher",
98
+ args: [
99
+ "--launch-only",
100
+ "--lead-runtime", resolution.resolvedRuntime ?? "auto",
101
+ ...withoutRuntimeSelection(args),
102
+ ],
103
+ capture: false,
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ return { ok: false, reason: `unsupported launch mode: ${resolution.launchMode}`, commands: [] };
109
+ }
110
+ async function ensureRuntime(requestedRuntime) {
111
+ return await runEnsureInstalled(["--runtime", requestedRuntime, "-q"]);
112
+ }
113
+ async function runRenderCommand(command, paths) {
114
+ const result = await runPythonModule({
115
+ module: "okstra_ctl.run",
116
+ args: ["--workspace-root", paths.workspace, "--render-only", ...command.args],
117
+ stdio: "capture",
118
+ });
119
+ process.stdout.write(result.stdout);
120
+ if (result.stderr)
121
+ process.stderr.write(result.stderr);
122
+ return result;
123
+ }
124
+ async function launchLead(command, paths) {
125
+ // okstra.sh already collects missing task inputs, prepares the bundle, asks
126
+ // about a sandbox waiver, and execs the lead. Reimplementing any of that here
127
+ // would give the two front doors separate answers to the same questions —
128
+ // most visibly, this one had no way to ask for a task id and simply forwarded
129
+ // the gap to python's argument parser.
130
+ const launcher = join(paths.bin, "okstra.sh");
131
+ if (!existsSync(launcher)) {
132
+ process.stderr.write(`error: launcher not found at ${launcher} — run 'okstra install'\n`);
133
+ return 1;
134
+ }
135
+ const started = spawnSync(launcher, command.args, { stdio: "inherit" });
136
+ if (started.error) {
137
+ process.stderr.write(`error: could not start the launcher: ${started.error.message}\n`);
138
+ return 1;
139
+ }
140
+ return started.status ?? 1;
141
+ }
142
+ async function runTeam(args) {
143
+ const { run: runTeamCommand } = await import("./team.mjs");
144
+ return await runTeamCommand(args);
145
+ }
146
+ export async function run(args) {
147
+ if (args.includes("--help") || args.includes("-h")) {
148
+ process.stdout.write(USAGE);
149
+ return 0;
150
+ }
151
+ const paths = await resolvePaths();
152
+ const requestedRuntime = requestedRuntimeFromArgs(args);
153
+ const resolution = await resolveRuntime({
154
+ requestedRuntime,
155
+ command: "run",
156
+ env: process.env,
157
+ capabilities: { tmuxAvailable: Boolean(process.env.TMUX) },
158
+ });
159
+ if (!resolution.ok) {
160
+ process.stderr.write(`error: ${resolution.reason}\n`);
161
+ return 2;
162
+ }
163
+ const firstPlan = buildRunPlan({ args, paths, resolution });
164
+ if (!firstPlan.ok) {
165
+ process.stderr.write(`error: ${firstPlan.reason}\n`);
166
+ return 2;
167
+ }
168
+ const ensureCode = await ensureRuntime(requestedRuntime);
169
+ if (ensureCode !== 0)
170
+ return ensureCode;
171
+ if (firstPlan.kind === "launch-lead") {
172
+ const launchCommand = firstPlan.commands[0];
173
+ if (launchCommand === undefined)
174
+ return 1;
175
+ return await launchLead(launchCommand, paths);
176
+ }
177
+ const render = firstPlan.commands[0];
178
+ if (render === undefined)
179
+ return 1;
180
+ const prepared = await runRenderCommand(render, paths);
181
+ if (prepared.code !== 0)
182
+ return prepared.code ?? 1;
183
+ const runManifestPath = extractLabel(prepared.stdout, "okstra run manifest");
184
+ if (!runManifestPath) {
185
+ process.stderr.write("error: render output did not include 'okstra run manifest:'\n");
186
+ return 1;
187
+ }
188
+ const plan = buildRunPlan({ args, paths, resolution, runManifestPath });
189
+ for (const command of plan.commands.slice(1)) {
190
+ const code = await runTeam(command.args);
191
+ if (code !== 0)
192
+ return code;
193
+ }
194
+ return 0;
195
+ }
196
+ //# sourceMappingURL=run.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.mjs","sourceRoot":"","sources":["../../../src/commands/execute/run.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function run(args: readonly string[]): Promise<number>;
@@ -1,5 +1,4 @@
1
1
  import { runInstalledScript } from "../../lib/python-helper.mjs";
2
-
3
2
  const USAGE = `okstra spawn-followups — create follow-up task bundles from a final report
4
3
 
5
4
  Wraps the python helper (\`okstra-spawn-followups.py\`) installed under
@@ -13,11 +12,11 @@ Usage:
13
12
  All arguments are forwarded verbatim to the python helper. See
14
13
  \`okstra spawn-followups --help\` for the full option list.
15
14
  `;
16
-
17
15
  export async function run(args) {
18
- return runInstalledScript({
19
- scriptName: "okstra-spawn-followups.py",
20
- args,
21
- usage: USAGE,
22
- });
16
+ return runInstalledScript({
17
+ scriptName: "okstra-spawn-followups.py",
18
+ args,
19
+ usage: USAGE,
20
+ });
23
21
  }
22
+ //# sourceMappingURL=spawn-followups.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-followups.mjs","sourceRoot":"","sources":["../../../src/commands/execute/spawn-followups.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC;QACxB,UAAU,EAAE,2BAA2B;QACvC,IAAI;QACJ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CliArgs, RuntimePaths } from "../../lib/types.mjs";
2
+ export declare function buildTeamArgs(args: CliArgs, paths: RuntimePaths): string[];
3
+ export declare function run(args: readonly string[]): Promise<number>;
@@ -1,6 +1,5 @@
1
1
  import { runPythonModule } from "../../lib/python-helper.mjs";
2
2
  import { resolvePaths } from "../../lib/paths.mjs";
3
-
4
3
  const USAGE = `okstra team — dispatch and await pane-backed workers for external leads
5
4
 
6
5
  Usage:
@@ -19,45 +18,39 @@ subprocesses everywhere else.
19
18
 
20
19
  --workspace-root and --okstra-bin are owned by this command.
21
20
  `;
22
-
23
21
  const OWNED_FLAGS = new Set(["--workspace-root", "--okstra-bin"]);
24
-
25
22
  function isOwnedFlag(arg) {
26
- if (OWNED_FLAGS.has(arg)) return true;
27
- return [...OWNED_FLAGS].some((flag) => arg.startsWith(`${flag}=`));
23
+ if (OWNED_FLAGS.has(arg))
24
+ return true;
25
+ return [...OWNED_FLAGS].some((flag) => arg.startsWith(`${flag}=`));
28
26
  }
29
-
30
27
  export function buildTeamArgs(args, paths) {
31
- return [
32
- "--workspace-root", paths.workspace,
33
- "--okstra-bin", paths.bin,
34
- ...args,
35
- ];
28
+ return [
29
+ "--workspace-root", paths.workspace,
30
+ "--okstra-bin", paths.bin,
31
+ ...args,
32
+ ];
36
33
  }
37
-
38
34
  export async function run(args) {
39
- if (args.includes("--help") || args.includes("-h")) {
40
- process.stdout.write(USAGE);
41
- return 0;
42
- }
43
- if (args.length === 0) {
44
- process.stdout.write(USAGE);
45
- return 2;
46
- }
47
-
48
- const forbidden = args.find(isOwnedFlag);
49
- if (forbidden) {
50
- process.stderr.write(
51
- `error: ${forbidden} is set by 'okstra team' itself — remove it from your args\n`,
52
- );
53
- return 2;
54
- }
55
-
56
- const paths = await resolvePaths();
57
- const result = await runPythonModule({
58
- module: "okstra_ctl.team",
59
- args: buildTeamArgs(args, paths),
60
- stdio: "inherit-stdout",
61
- });
62
- return result.code;
35
+ if (args.includes("--help") || args.includes("-h")) {
36
+ process.stdout.write(USAGE);
37
+ return 0;
38
+ }
39
+ if (args.length === 0) {
40
+ process.stdout.write(USAGE);
41
+ return 2;
42
+ }
43
+ const forbidden = args.find(isOwnedFlag);
44
+ if (forbidden) {
45
+ process.stderr.write(`error: ${forbidden} is set by 'okstra team' itself — remove it from your args\n`);
46
+ return 2;
47
+ }
48
+ const paths = await resolvePaths();
49
+ const result = await runPythonModule({
50
+ module: "okstra_ctl.team",
51
+ args: buildTeamArgs(args, paths),
52
+ stdio: "inherit-stdout",
53
+ });
54
+ return result.code;
63
55
  }
56
+ //# sourceMappingURL=team.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team.mjs","sourceRoot":"","sources":["../../../src/commands/execute/team.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;CAiBb,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;AAElE,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,KAAmB;IAC9D,OAAO;QACL,kBAAkB,EAAE,KAAK,CAAC,SAAS;QACnC,cAAc,EAAE,KAAK,CAAC,GAAG;QACzB,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,SAAS,8DAA8D,CAClF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,KAAK,EAAE,gBAAgB;KACxB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function run(args: readonly string[]): Promise<number>;
@@ -1,5 +1,4 @@
1
1
  import { runInstalledScript } from "../../lib/python-helper.mjs";
2
-
3
2
  const USAGE = `okstra token-usage — collect token usage for a run
4
3
 
5
4
  Wraps the python helper (\`okstra-token-usage.py\`) installed under
@@ -14,7 +13,7 @@ Usage:
14
13
  Arguments and flags after the state-file path are forwarded verbatim to
15
14
  the python helper. See \`okstra token-usage --help\` for the full option list.
16
15
  `;
17
-
18
16
  export async function run(args) {
19
- return runInstalledScript({ scriptName: "okstra-token-usage.py", args, usage: USAGE });
17
+ return runInstalledScript({ scriptName: "okstra-token-usage.py", args, usage: USAGE });
20
18
  }
19
+ //# sourceMappingURL=token-usage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.mjs","sourceRoot":"","sources":["../../../src/commands/execute/token-usage.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;;CAab,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CliArgs } from "../../lib/types.mjs";
2
+ type WizardFlagValue = string | boolean | readonly string[] | undefined;
3
+ type WizardFlags = Readonly<Record<string, WizardFlagValue>>;
4
+ export declare function parseFlags(args: CliArgs): Record<string, WizardFlagValue>;
5
+ export declare function buildPythonArgs(sub: string, flags: WizardFlags, workspaceRoot?: string): string[];
6
+ export declare function orderedRenderArgv(renderArgs: Readonly<Record<string, string | readonly string[]>>): string[];
7
+ export declare function run(args: readonly string[]): Promise<number>;
8
+ export {};