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
@@ -0,0 +1,297 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { createInterface } from "node:readline";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve as resolvePath } from "node:path";
5
+ import { buildPythonpath, resolvePaths } from "../../lib/paths.mjs";
6
+ import { fileExists, runProcess } from "../../lib/proc.mjs";
7
+ const USAGE = `okstra setup — register the current project with okstra
8
+
9
+ Writes <PROJECT_ROOT>/.okstra/project.json. This is the
10
+ project-level companion to 'okstra install' (which is machine-level).
11
+ Inside a Claude Code session this is also exposed as the /okstra-setup
12
+ slash command.
13
+
14
+ Usage:
15
+ okstra setup --project-id <id> Register with explicit projectId
16
+ okstra setup Use existing project.json or
17
+ prompt for projectId (TTY only)
18
+ okstra setup --project-root <path> Override PROJECT_ROOT resolution
19
+ okstra setup --yes Skip prompts; require all inputs
20
+ on the command line
21
+
22
+ Behavior:
23
+ - If project.json already exists, the projectId must match (okstra refuses
24
+ to silently rename a project). Delete the file manually if you really
25
+ want to change projectId.
26
+ - If --project-id is omitted and stdin is a TTY, you are prompted.
27
+ - If --project-id is omitted and stdin is not a TTY, the command exits
28
+ with an error (use --project-id for CI / scripts).
29
+
30
+ Exit codes:
31
+ 0 project.json present and valid after the run
32
+ 1 I/O / python failure or projectId mismatch
33
+ 2 PROJECT_ROOT could not be resolved
34
+ `;
35
+ function parseArgs(args) {
36
+ const opts = {
37
+ projectId: null,
38
+ projectRoot: null,
39
+ yes: false,
40
+ };
41
+ for (let i = 0; i < args.length; i++) {
42
+ const a = args[i];
43
+ if (a === "--yes" || a === "-y")
44
+ opts.yes = true;
45
+ else if (a === "--project-id") {
46
+ const next = args[i + 1];
47
+ if (!next || next.startsWith("--"))
48
+ throw new Error("--project-id requires a value");
49
+ opts.projectId = next;
50
+ i++;
51
+ }
52
+ else if (a === "--project-root") {
53
+ const next = args[i + 1];
54
+ if (!next || next.startsWith("--"))
55
+ throw new Error("--project-root requires a path");
56
+ opts.projectRoot = next;
57
+ i++;
58
+ }
59
+ else {
60
+ throw new Error(`unknown argument '${a}'`);
61
+ }
62
+ }
63
+ return opts;
64
+ }
65
+ function prompt(question) {
66
+ return new Promise((resolve) => {
67
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
68
+ rl.question(question, (answer) => {
69
+ rl.close();
70
+ resolve(answer.trim());
71
+ });
72
+ });
73
+ }
74
+ function validateProjectId(id) {
75
+ if (!id)
76
+ return "project-id is empty";
77
+ if (!/[A-Za-z0-9]/.test(id))
78
+ return "project-id must contain at least one alphanumeric character";
79
+ return null;
80
+ }
81
+ async function resolveProjectRoot(paths, explicit) {
82
+ const probe = await runProcess("python3", [
83
+ "-c",
84
+ [
85
+ "import sys",
86
+ "from okstra_project import resolve_project_root, project_json_path, ResolverError",
87
+ "try:",
88
+ " pr = resolve_project_root(explicit_root=sys.argv[1], cwd=sys.argv[2])",
89
+ " print('PROJECT_ROOT', pr)",
90
+ " print('PROJECT_JSON', project_json_path(pr))",
91
+ "except ResolverError as e:",
92
+ " print('RESOLVER_ERROR', e)",
93
+ ].join("\n"),
94
+ explicit || "",
95
+ process.cwd(),
96
+ ], { PYTHONPATH: buildPythonpath(paths) });
97
+ if (probe.code !== 0) {
98
+ throw new Error(`python invocation failed: ${probe.stderr.trim() || probe.stdout.trim()}`);
99
+ }
100
+ const lines = probe.stdout.trim().split("\n");
101
+ const tagOf = (key) => lines
102
+ .find((l) => l.startsWith(key + " "))
103
+ ?.slice(key.length + 1)
104
+ .trim() ?? null;
105
+ const resolverError = tagOf("RESOLVER_ERROR");
106
+ if (resolverError) {
107
+ throw Object.assign(new Error(resolverError), { code: "RESOLVER" });
108
+ }
109
+ return {
110
+ projectRoot: tagOf("PROJECT_ROOT"),
111
+ projectJsonPath: tagOf("PROJECT_JSON"),
112
+ };
113
+ }
114
+ async function upsert(paths, projectRoot, projectId) {
115
+ const probe = await runProcess("python3", [
116
+ "-c",
117
+ [
118
+ "import json, sys",
119
+ "from pathlib import Path",
120
+ "from okstra_project import upsert_project_json, ResolverError",
121
+ "try:",
122
+ " result = upsert_project_json(Path(sys.argv[1]), sys.argv[2])",
123
+ " print('OK', json.dumps(result))",
124
+ "except ResolverError as e:",
125
+ " print('ERROR', e)",
126
+ ].join("\n"),
127
+ projectRoot,
128
+ projectId,
129
+ ], { PYTHONPATH: buildPythonpath(paths) });
130
+ if (probe.code !== 0) {
131
+ throw new Error(`python invocation failed: ${probe.stderr.trim() || probe.stdout.trim()}`);
132
+ }
133
+ const out = probe.stdout.trim();
134
+ if (out.startsWith("OK ")) {
135
+ return JSON.parse(out.slice(3));
136
+ }
137
+ if (out.startsWith("ERROR ")) {
138
+ throw new Error(out.slice(6));
139
+ }
140
+ throw new Error(`unexpected upsert output: ${out}`);
141
+ }
142
+ export async function run(args) {
143
+ if (args.includes("--help") || args.includes("-h")) {
144
+ process.stdout.write(USAGE);
145
+ return 0;
146
+ }
147
+ let opts;
148
+ try {
149
+ opts = parseArgs(args);
150
+ }
151
+ catch (err) {
152
+ process.stderr.write(`error: ${err.message}\n\n${USAGE}`);
153
+ return 1;
154
+ }
155
+ const paths = await resolvePaths();
156
+ let resolved;
157
+ try {
158
+ resolved = await resolveProjectRoot(paths, opts.projectRoot);
159
+ }
160
+ catch (err) {
161
+ if (err.code === "RESOLVER") {
162
+ const cwd = resolvePath(process.cwd());
163
+ const home = resolvePath(homedir());
164
+ const inHome = cwd === home;
165
+ process.stderr.write("error: 'okstra setup' registers the CURRENT directory as an okstra project,\n" +
166
+ " but no project root could be resolved from here.\n" +
167
+ ` cwd: ${cwd}\n` +
168
+ (inHome
169
+ ? " (this looks like your home directory — setup is project-level, not machine-level;\n" +
170
+ " machine-level install is 'okstra install', which you've likely already done.)\n"
171
+ : "") +
172
+ "\nFix one of:\n" +
173
+ " 1. cd into the project you want to register, then re-run:\n" +
174
+ " cd <your project> && okstra setup --project-id <id>\n" +
175
+ " 2. pass an explicit path:\n" +
176
+ " okstra setup --project-root <abs-path> --project-id <id>\n" +
177
+ " 3. run from inside any git working tree (the toplevel becomes PROJECT_ROOT).\n" +
178
+ `\n(underlying error: ${err.message})\n`);
179
+ return 2;
180
+ }
181
+ // Non-RESOLVER path: typically python invocation failure (PYTHONPATH wrong,
182
+ // ~/.okstra missing, python3 not on PATH, okstra_project module missing).
183
+ // The user can't fix this by adjusting setup arguments — it's a runtime
184
+ // health issue, not a PROJECT_ROOT issue. Reword accordingly.
185
+ const looksLikePythonFailure = /python invocation failed|ModuleNotFoundError|No module named/.test(err.message);
186
+ if (looksLikePythonFailure) {
187
+ process.stderr.write("error: 'okstra setup' could not start because the okstra runtime is not\n" +
188
+ " reachable from this process. This is almost always a stale or\n" +
189
+ " incomplete install, not a problem with your setup arguments.\n" +
190
+ "\nFix:\n" +
191
+ " 1. run 'okstra doctor' to see exactly what is missing\n" +
192
+ " 2. run 'okstra ensure-installed' (or 'npx -y okstra@latest install')\n" +
193
+ " to repair the runtime\n" +
194
+ " 3. retry: okstra setup --project-id <id>\n" +
195
+ `\n(underlying error: ${err.message})\n`);
196
+ return 1;
197
+ }
198
+ process.stderr.write(`error: could not resolve PROJECT_ROOT: ${err.message}\n`);
199
+ return 1;
200
+ }
201
+ const { projectRoot, projectJsonPath } = resolved;
202
+ let existing = null;
203
+ if (await fileExists(projectJsonPath)) {
204
+ try {
205
+ existing = JSON.parse(await fs.readFile(projectJsonPath, "utf8"));
206
+ }
207
+ catch (err) {
208
+ process.stderr.write(`error: failed to parse ${projectJsonPath}: ${err.message}\n`);
209
+ return 1;
210
+ }
211
+ }
212
+ let projectId = opts.projectId;
213
+ if (!projectId && existing?.projectId) {
214
+ projectId = existing.projectId;
215
+ }
216
+ if (!projectId) {
217
+ if (opts.yes || !process.stdin.isTTY) {
218
+ process.stderr.write(`error: --project-id is required (no existing project.json, not a TTY)\n`);
219
+ return 1;
220
+ }
221
+ process.stderr.write(`PROJECT_ROOT: ${projectRoot}\n`);
222
+ const answer = await prompt("project-id (e.g. INV-1234, my-app): ");
223
+ projectId = answer;
224
+ }
225
+ const invalid = validateProjectId(projectId);
226
+ if (invalid) {
227
+ process.stderr.write(`error: ${invalid}\n`);
228
+ return 1;
229
+ }
230
+ let result;
231
+ try {
232
+ result = await upsert(paths, projectRoot, projectId);
233
+ }
234
+ catch (err) {
235
+ process.stderr.write(`error: ${err.message}\n`);
236
+ return 1;
237
+ }
238
+ let settingsSymlink = null;
239
+ try {
240
+ settingsSymlink = await ensureProjectSettingsSymlink(projectRoot);
241
+ }
242
+ catch (err) {
243
+ process.stderr.write(`warning: failed to provision .claude/settings.local.json symlink — ` +
244
+ `host Claude Code sessions in this project may need to add wrapper permissions manually. (${err.message})\n`);
245
+ }
246
+ process.stdout.write(JSON.stringify({
247
+ ok: true,
248
+ ...result,
249
+ projectJsonPath,
250
+ settingsLocalJson: settingsSymlink,
251
+ }, null, 2) + "\n");
252
+ return 0;
253
+ }
254
+ async function ensureProjectSettingsSymlink(projectRoot) {
255
+ const template = join(homedir(), ".okstra", "templates", "settings.local.json");
256
+ try {
257
+ await fs.access(template);
258
+ }
259
+ catch {
260
+ return null; // install hasn't provisioned the template yet (pre-0.14 install)
261
+ }
262
+ const claudeDir = join(projectRoot, ".claude");
263
+ const target = join(claudeDir, "settings.local.json");
264
+ await fs.mkdir(claudeDir, { recursive: true });
265
+ let existingStat;
266
+ try {
267
+ existingStat = await fs.lstat(target);
268
+ }
269
+ catch {
270
+ existingStat = null;
271
+ }
272
+ if (existingStat?.isSymbolicLink()) {
273
+ const current = await fs.readlink(target);
274
+ const resolved = current.startsWith("/") ? current : join(claudeDir, current);
275
+ if (resolved === template)
276
+ return target;
277
+ await backupAndReplace(target, template);
278
+ return target;
279
+ }
280
+ if (existingStat) {
281
+ await backupAndReplace(target, template);
282
+ return target;
283
+ }
284
+ await fs.symlink(template, target);
285
+ return target;
286
+ }
287
+ async function backupAndReplace(target, template) {
288
+ const stamp = new Date()
289
+ .toISOString()
290
+ .replace(/[-:]/g, "")
291
+ .replace(/\..*/, "")
292
+ .replace("T", "-");
293
+ const backup = `${target}.bak.${stamp}`;
294
+ await fs.rename(target, backup);
295
+ await fs.symlink(template, target);
296
+ }
297
+ //# sourceMappingURL=setup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/setup.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const FALLBACK_SKILL_NAMES: string[];
2
+ export declare const FALLBACK_AGENT_NAMES: string[];
3
+ export declare function runUninstall(args: any): Promise<0 | 1>;
4
+ export declare function shouldUseClaudeAssetFallback(runtimeManifest: any): boolean;
@@ -0,0 +1,262 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { resolvePaths } from "../../lib/paths.mjs";
5
+ import { RUNTIMES_MANIFEST_REL, runtimeManifestIncludesClaudeAssets, } from "../../lib/runtime-manifest.mjs";
6
+ import { OBSOLETE_SKILL_NAMES, USER_SKILL_NAMES } from "../../lib/skill-catalog.mjs";
7
+ import { AGENTS_MANIFEST_REL, INSTALLED_FILES, INSTALLED_TREES, LEGACY_TRANSPORT_AGENT_NAMES, SKILLS_MANIFEST_REL, } from "../../lib/install-assets.mjs";
8
+ // Manifest-less uninstall must clean out every okstra skill directory — the
9
+ // live names AND every former/renamed one. Both sets are the single source of
10
+ // truth in skill-catalog.mjs (install prunes OBSOLETE_SKILL_NAMES from each
11
+ // skill home), so deriving the fallback from their union keeps uninstall from
12
+ // drifting behind skill additions or renames.
13
+ export const FALLBACK_SKILL_NAMES = [
14
+ ...new Set([...USER_SKILL_NAMES, ...OBSOLETE_SKILL_NAMES]),
15
+ ];
16
+ export const FALLBACK_AGENT_NAMES = [
17
+ "claude-worker.md",
18
+ "report-writer-worker.md",
19
+ "translator-worker.md",
20
+ ...LEGACY_TRANSPORT_AGENT_NAMES,
21
+ ];
22
+ const USER_HOME = homedir();
23
+ const CLAUDE_HOME = join(USER_HOME, ".claude");
24
+ const AGENTS_HOME = join(USER_HOME, ".agents");
25
+ const CLAUDE_SKILLS_DIR = join(CLAUDE_HOME, "skills");
26
+ const AGENTS_SKILLS_DIR = join(AGENTS_HOME, "skills");
27
+ const CLAUDE_AGENTS_DIR = join(CLAUDE_HOME, "agents");
28
+ const FALLBACK_SKILL_ROOTS = [
29
+ CLAUDE_SKILLS_DIR,
30
+ AGENTS_SKILLS_DIR,
31
+ ];
32
+ const USAGE = `okstra uninstall — remove installed runtime and okstra skills
33
+
34
+ Usage:
35
+ okstra uninstall Remove ~/.okstra/{lib (python + validators),
36
+ bin, schemas, templates, version,
37
+ dev-link, installed-runtimes.json,
38
+ installed-skills.json, installed-agents.json} AND
39
+ every skill target recorded in
40
+ installed-skills.json
41
+ (~/.claude/skills or ~/.agents/skills).
42
+ Claude worker agents are
43
+ removed from ~/.claude/agents when installed.
44
+ Missing manifests fall back to hard-coded
45
+ Claude okstra-* / *-worker.md names.
46
+ Preserves user data: recent.jsonl,
47
+ active.jsonl, projects/, archive/,
48
+ state.json, .locks/
49
+ Per-project artifacts created by 'okstra setup'
50
+ (<PROJECT>/.claude/settings.local.json symlink)
51
+ are NOT touched — remove them manually if needed.
52
+ okstra uninstall --purge Remove the entire ~/.okstra directory AND
53
+ okstra skills in Claude/Agent homes AND
54
+ ~/.claude/agents/<*-worker.md> (DESTRUCTIVE).
55
+ Requires -y or an interactive confirmation
56
+ okstra uninstall --dry-run Print the plan without touching disk
57
+ okstra uninstall -y Skip confirmation prompt for --purge
58
+ `;
59
+ async function pathExists(p) {
60
+ try {
61
+ await fs.lstat(p);
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
68
+ async function removePath(p, opts) {
69
+ const { dryRun = false, quiet = false } = opts ?? {};
70
+ if (!(await pathExists(p))) {
71
+ if (!quiet)
72
+ process.stdout.write(` not present: ${p}\n`);
73
+ return false;
74
+ }
75
+ if (dryRun) {
76
+ process.stdout.write(`[dry-run] rm ${p}\n`);
77
+ return true;
78
+ }
79
+ await fs.rm(p, { recursive: true, force: true });
80
+ if (!quiet)
81
+ process.stdout.write(` removed: ${p}\n`);
82
+ return true;
83
+ }
84
+ async function promptConfirm(question) {
85
+ if (!process.stdin.isTTY)
86
+ return false;
87
+ process.stdout.write(`${question} [y/N] `);
88
+ return await new Promise((resolveP) => {
89
+ process.stdin.setEncoding("utf8");
90
+ process.stdin.once("data", (chunk) => {
91
+ const answer = chunk.toString().trim().toLowerCase();
92
+ resolveP(answer === "y" || answer === "yes");
93
+ });
94
+ });
95
+ }
96
+ export async function runUninstall(args) {
97
+ if (args.includes("--help") || args.includes("-h")) {
98
+ process.stdout.write(USAGE);
99
+ return 0;
100
+ }
101
+ const opts = {
102
+ dryRun: args.includes("--dry-run"),
103
+ quiet: args.includes("-q") || args.includes("--quiet"),
104
+ purge: args.includes("--purge"),
105
+ yes: args.includes("-y") || args.includes("--yes"),
106
+ };
107
+ const paths = await resolvePaths();
108
+ if (!(await pathExists(paths.home))) {
109
+ if (!opts.quiet)
110
+ process.stdout.write(`okstra not installed (no ${paths.home})\n`);
111
+ return 0;
112
+ }
113
+ if (opts.purge) {
114
+ if (!opts.yes && !opts.dryRun) {
115
+ const ok = await promptConfirm(`purge entire ${paths.home} AND okstra skills in Claude/Agent homes? user data will be lost.`);
116
+ if (!ok) {
117
+ process.stdout.write("aborted.\n");
118
+ return 1;
119
+ }
120
+ }
121
+ if (!opts.quiet)
122
+ process.stdout.write(`purging ${paths.home}\n`);
123
+ await removePath(paths.home, opts);
124
+ // Skills and worker agents live outside ~/.okstra — purge those too.
125
+ for (const root of FALLBACK_SKILL_ROOTS) {
126
+ for (const name of FALLBACK_SKILL_NAMES) {
127
+ await removePath(join(root, name), opts);
128
+ }
129
+ }
130
+ for (const name of FALLBACK_AGENT_NAMES) {
131
+ await removePath(join(CLAUDE_AGENTS_DIR, name), opts);
132
+ }
133
+ return 0;
134
+ }
135
+ if (!opts.quiet) {
136
+ process.stdout.write(`uninstalling okstra runtime\n`);
137
+ process.stdout.write(` home: ${paths.home}\n`);
138
+ }
139
+ // Every tree the install writes, read from the list install itself copies
140
+ // from. A per-name list here drifts behind additions the moment one lands on
141
+ // the install side only — which is how a stale validator, a stale schema and
142
+ // a stale prompts tree each survived uninstall→reinstall in turn, one bug
143
+ // report at a time.
144
+ for (const tree of INSTALLED_TREES) {
145
+ await removePath(join(paths.home, ...tree.to), opts);
146
+ }
147
+ // Clean now-empty lib parent (best-effort) — the trees above were the only
148
+ // okstra-owned children.
149
+ const libDir = join(paths.home, "lib");
150
+ if (await pathExists(libDir)) {
151
+ try {
152
+ const entries = await fs.readdir(libDir);
153
+ if (entries.length === 0) {
154
+ if (!opts.dryRun)
155
+ await fs.rmdir(libDir);
156
+ if (!opts.quiet)
157
+ process.stdout.write(` removed empty: ${libDir}\n`);
158
+ }
159
+ }
160
+ catch {
161
+ /* ignore */
162
+ }
163
+ }
164
+ // Remove the skills we own. Manifest v2 records every target root; legacy
165
+ // manifests fall back to Claude-only names when the runtime manifest says
166
+ // Claude assets may have been installed.
167
+ const runtimeManifest = await readRuntimeManifest(paths.home);
168
+ const skillTargets = await readSkillsManifest(paths.home, runtimeManifest);
169
+ for (const target of skillTargets) {
170
+ if (!opts.quiet) {
171
+ process.stdout.write(` skills: removing ${target.skills.length} entries from ${target.root}\n`);
172
+ }
173
+ for (const name of target.skills) {
174
+ await removePath(join(target.root, name), opts);
175
+ }
176
+ }
177
+ await removePath(join(paths.home, SKILLS_MANIFEST_REL), opts);
178
+ // Remove worker agents we own. Agents only live in Claude Code's agent home.
179
+ const shouldRemoveClaudeAgents = skillTargets.some((target) => target.provider === "claude") ||
180
+ shouldUseClaudeAssetFallback(runtimeManifest);
181
+ const agentNames = shouldRemoveClaudeAgents ? await readAgentsManifest(paths.home) : [];
182
+ if (!opts.quiet) {
183
+ process.stdout.write(` agents: removing ${agentNames.length} entries from ${CLAUDE_AGENTS_DIR}\n`);
184
+ }
185
+ for (const name of agentNames) {
186
+ await removePath(join(CLAUDE_AGENTS_DIR, name), opts);
187
+ }
188
+ // Per-project <PROJECT>/.claude/settings.local.json symlinks are NOT removed
189
+ // here — uninstall is machine-level and does not know which projects opted
190
+ // in. They will dangle until the user removes them manually or re-runs
191
+ // okstra install + okstra setup.
192
+ // Stamps and manifests, last: the skill/agent removal above reads two of them.
193
+ for (const name of INSTALLED_FILES) {
194
+ await removePath(join(paths.home, name), opts);
195
+ }
196
+ if (!opts.quiet) {
197
+ process.stdout.write("done. user data preserved (recent.jsonl, projects/, archive/, ...).\n");
198
+ }
199
+ return 0;
200
+ }
201
+ async function readRuntimeManifest(home) {
202
+ try {
203
+ const raw = await fs.readFile(join(home, RUNTIMES_MANIFEST_REL), "utf8");
204
+ const data = JSON.parse(raw);
205
+ return data && typeof data === "object" ? data : null;
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }
211
+ export function shouldUseClaudeAssetFallback(runtimeManifest) {
212
+ if (runtimeManifest === null)
213
+ return true;
214
+ return runtimeManifestIncludesClaudeAssets(runtimeManifest);
215
+ }
216
+ function normalizeSkillTargets(data) {
217
+ if (Array.isArray(data?.targets)) {
218
+ return data.targets
219
+ .filter((target) => typeof target?.root === "string" && Array.isArray(target?.skills))
220
+ .map((target) => ({
221
+ provider: typeof target.provider === "string" ? target.provider : "unknown",
222
+ root: target.root,
223
+ skills: target.skills.filter((name) => typeof name === "string"),
224
+ }));
225
+ }
226
+ if (Array.isArray(data?.skills)) {
227
+ return [{
228
+ provider: "claude",
229
+ root: CLAUDE_SKILLS_DIR,
230
+ skills: data.skills.filter((name) => typeof name === "string"),
231
+ }];
232
+ }
233
+ return null;
234
+ }
235
+ async function readSkillsManifest(home, runtimeManifest) {
236
+ try {
237
+ const raw = await fs.readFile(join(home, SKILLS_MANIFEST_REL), "utf8");
238
+ const data = JSON.parse(raw);
239
+ const targets = normalizeSkillTargets(data);
240
+ if (targets !== null)
241
+ return targets;
242
+ }
243
+ catch {
244
+ /* fall through */
245
+ }
246
+ return shouldUseClaudeAssetFallback(runtimeManifest)
247
+ ? [{ provider: "claude", root: CLAUDE_SKILLS_DIR, skills: FALLBACK_SKILL_NAMES }]
248
+ : [];
249
+ }
250
+ async function readAgentsManifest(home) {
251
+ try {
252
+ const raw = await fs.readFile(join(home, AGENTS_MANIFEST_REL), "utf8");
253
+ const data = JSON.parse(raw);
254
+ if (Array.isArray(data?.agents))
255
+ return data.agents;
256
+ }
257
+ catch {
258
+ /* fall through */
259
+ }
260
+ return FALLBACK_AGENT_NAMES;
261
+ }
262
+ //# sourceMappingURL=uninstall.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/uninstall.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliArgs, RuntimePaths } from "../lib/types.mjs";
2
+ export declare function buildManagerArgs(args: CliArgs, paths: RuntimePaths): string[];
3
+ export declare function run(args: readonly string[]): Promise<number>;