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.
- package/README.md +18 -9
- package/bin/okstra +8 -4
- package/dist/cli-registry.d.mts +16 -0
- package/dist/cli-registry.mjs +560 -0
- package/dist/cli-registry.mjs.map +1 -0
- package/dist/commands/execute/agent-prompt.d.mts +1 -0
- package/{src → dist}/commands/execute/agent-prompt.mjs +10 -11
- package/dist/commands/execute/agent-prompt.mjs.map +1 -0
- package/dist/commands/execute/codex-dispatch.d.mts +3 -0
- package/dist/commands/execute/codex-dispatch.mjs +6 -0
- package/dist/commands/execute/codex-dispatch.mjs.map +1 -0
- package/dist/commands/execute/codex-run.d.mts +3 -0
- package/{src → dist}/commands/execute/codex-run.mjs +30 -37
- package/dist/commands/execute/codex-run.mjs.map +1 -0
- package/dist/commands/execute/convergence.d.mts +1 -0
- package/{src → dist}/commands/execute/convergence.mjs +15 -16
- package/dist/commands/execute/convergence.mjs.map +1 -0
- package/dist/commands/execute/error-log.d.mts +1 -0
- package/{src → dist}/commands/execute/error-log.mjs +2 -3
- package/dist/commands/execute/error-log.mjs.map +1 -0
- package/dist/commands/execute/git-reconcile.d.mts +1 -0
- package/{src → dist}/commands/execute/git-reconcile.mjs +10 -11
- package/dist/commands/execute/git-reconcile.mjs.map +1 -0
- package/dist/commands/execute/handoff.d.mts +1 -0
- package/{src → dist}/commands/execute/handoff.mjs +10 -11
- package/dist/commands/execute/handoff.mjs.map +1 -0
- package/dist/commands/execute/incremental-carry.d.mts +1 -0
- package/{src → dist}/commands/execute/incremental-carry.mjs +2 -3
- package/dist/commands/execute/incremental-carry.mjs.map +1 -0
- package/dist/commands/execute/incremental-scope.d.mts +1 -0
- package/{src → dist}/commands/execute/incremental-scope.mjs +2 -3
- package/dist/commands/execute/incremental-scope.mjs.map +1 -0
- package/dist/commands/execute/integrate-stages.d.mts +1 -0
- package/{src → dist}/commands/execute/integrate-stages.mjs +10 -11
- package/dist/commands/execute/integrate-stages.mjs.map +1 -0
- package/dist/commands/execute/pane-title.d.mts +1 -0
- package/dist/commands/execute/pane-title.mjs +20 -0
- package/dist/commands/execute/pane-title.mjs.map +1 -0
- package/dist/commands/execute/plan-items.d.mts +1 -0
- package/dist/commands/execute/plan-items.mjs +9 -0
- package/dist/commands/execute/plan-items.mjs.map +1 -0
- package/dist/commands/execute/plan-validate.d.mts +1 -0
- package/dist/commands/execute/plan-validate.mjs +68 -0
- package/dist/commands/execute/plan-validate.mjs.map +1 -0
- package/dist/commands/execute/plan-verify.d.mts +1 -0
- package/{src → dist}/commands/execute/plan-verify.mjs +13 -16
- package/dist/commands/execute/plan-verify.mjs.map +1 -0
- package/dist/commands/execute/render-bundle.d.mts +3 -0
- package/{src → dist}/commands/execute/render-bundle.mjs +65 -61
- package/dist/commands/execute/render-bundle.mjs.map +1 -0
- package/dist/commands/execute/run.d.mts +24 -0
- package/dist/commands/execute/run.mjs +196 -0
- package/dist/commands/execute/run.mjs.map +1 -0
- package/dist/commands/execute/spawn-followups.d.mts +1 -0
- package/{src → dist}/commands/execute/spawn-followups.mjs +6 -7
- package/dist/commands/execute/spawn-followups.mjs.map +1 -0
- package/dist/commands/execute/team.d.mts +3 -0
- package/{src → dist}/commands/execute/team.mjs +29 -36
- package/dist/commands/execute/team.mjs.map +1 -0
- package/dist/commands/execute/token-usage.d.mts +1 -0
- package/{src → dist}/commands/execute/token-usage.mjs +2 -3
- package/dist/commands/execute/token-usage.mjs.map +1 -0
- package/dist/commands/execute/wizard.d.mts +8 -0
- package/dist/commands/execute/wizard.mjs +191 -0
- package/dist/commands/execute/wizard.mjs.map +1 -0
- package/dist/commands/execute/worker-audit-check.d.mts +1 -0
- package/{src → dist}/commands/execute/worker-audit-check.mjs +11 -12
- package/dist/commands/execute/worker-audit-check.mjs.map +1 -0
- package/dist/commands/execute/worker-dispatch.d.mts +7 -0
- package/{src → dist}/commands/execute/worker-dispatch.mjs +34 -46
- package/dist/commands/execute/worker-dispatch.mjs.map +1 -0
- package/dist/commands/execute/worker-state.d.mts +1 -0
- package/{src → dist}/commands/execute/worker-state.mjs +15 -16
- package/dist/commands/execute/worker-state.mjs.map +1 -0
- package/dist/commands/execute/worktree-lookup.d.mts +1 -0
- package/{src → dist}/commands/execute/worktree-lookup.mjs +38 -37
- package/dist/commands/execute/worktree-lookup.mjs.map +1 -0
- package/dist/commands/execute/worktree-status.d.mts +1 -0
- package/{src → dist}/commands/execute/worktree-status.mjs +52 -46
- package/dist/commands/execute/worktree-status.mjs.map +1 -0
- package/dist/commands/inspect/code-review.d.mts +1 -0
- package/{src → dist}/commands/inspect/code-review.mjs +16 -19
- package/dist/commands/inspect/code-review.mjs.map +1 -0
- package/dist/commands/inspect/container.d.mts +1 -0
- package/{src → dist}/commands/inspect/container.mjs +11 -13
- package/dist/commands/inspect/container.mjs.map +1 -0
- package/dist/commands/inspect/context-cost.d.mts +1 -0
- package/{src → dist}/commands/inspect/context-cost.mjs +11 -13
- package/dist/commands/inspect/context-cost.mjs.map +1 -0
- package/dist/commands/inspect/design-prep.d.mts +1 -0
- package/{src → dist}/commands/inspect/design-prep.mjs +10 -11
- package/dist/commands/inspect/design-prep.mjs.map +1 -0
- package/dist/commands/inspect/error-report.d.mts +1 -0
- package/{src → dist}/commands/inspect/error-report.mjs +11 -13
- package/dist/commands/inspect/error-report.mjs.map +1 -0
- package/dist/commands/inspect/error-zip.d.mts +1 -0
- package/{src → dist}/commands/inspect/error-zip.mjs +11 -12
- package/dist/commands/inspect/error-zip.mjs.map +1 -0
- package/dist/commands/inspect/log-report.d.mts +1 -0
- package/{src → dist}/commands/inspect/log-report.mjs +11 -13
- package/dist/commands/inspect/log-report.mjs.map +1 -0
- package/dist/commands/inspect/profile-show.d.mts +1 -0
- package/{src → dist}/commands/inspect/profile-show.mjs +10 -11
- package/dist/commands/inspect/profile-show.mjs.map +1 -0
- package/dist/commands/inspect/recap.d.mts +1 -0
- package/{src → dist}/commands/inspect/recap.mjs +11 -13
- package/dist/commands/inspect/recap.mjs.map +1 -0
- package/dist/commands/inspect/resolve-task-key.d.mts +1 -0
- package/{src → dist}/commands/inspect/resolve-task-key.mjs +11 -13
- package/dist/commands/inspect/resolve-task-key.mjs.map +1 -0
- package/dist/commands/inspect/rollup.d.mts +1 -0
- package/{src → dist}/commands/inspect/rollup.mjs +11 -13
- package/dist/commands/inspect/rollup.mjs.map +1 -0
- package/dist/commands/inspect/run-audit.d.mts +1 -0
- package/{src → dist}/commands/inspect/run-audit.mjs +11 -12
- package/dist/commands/inspect/run-audit.mjs.map +1 -0
- package/dist/commands/inspect/set-work-status.d.mts +1 -0
- package/{src → dist}/commands/inspect/set-work-status.mjs +11 -13
- package/dist/commands/inspect/set-work-status.mjs.map +1 -0
- package/dist/commands/inspect/stage-map.d.mts +1 -0
- package/dist/commands/inspect/stage-map.mjs +110 -0
- package/dist/commands/inspect/stage-map.mjs.map +1 -0
- package/dist/commands/inspect/task-list.d.mts +1 -0
- package/dist/commands/inspect/task-list.mjs +103 -0
- package/dist/commands/inspect/task-list.mjs.map +1 -0
- package/dist/commands/inspect/task-show.d.mts +1 -0
- package/dist/commands/inspect/task-show.mjs +108 -0
- package/dist/commands/inspect/task-show.mjs.map +1 -0
- package/dist/commands/inspect/time-report.d.mts +1 -0
- package/{src → dist}/commands/inspect/time-report.mjs +11 -13
- package/dist/commands/inspect/time-report.mjs.map +1 -0
- package/dist/commands/inspect/usage-report.d.mts +1 -0
- package/{src → dist}/commands/inspect/usage-report.mjs +11 -13
- package/dist/commands/inspect/usage-report.mjs.map +1 -0
- package/dist/commands/inspect/user-response.d.mts +1 -0
- package/{src → dist}/commands/inspect/user-response.mjs +10 -11
- package/dist/commands/inspect/user-response.mjs.map +1 -0
- package/dist/commands/inspect/worker-liveness.d.mts +1 -0
- package/{src → dist}/commands/inspect/worker-liveness.mjs +11 -13
- package/dist/commands/inspect/worker-liveness.mjs.map +1 -0
- package/dist/commands/lifecycle/check-project.d.mts +21 -0
- package/dist/commands/lifecycle/check-project.mjs +175 -0
- package/dist/commands/lifecycle/check-project.mjs.map +1 -0
- package/dist/commands/lifecycle/config.d.mts +1 -0
- package/dist/commands/lifecycle/config.mjs +369 -0
- package/dist/commands/lifecycle/config.mjs.map +1 -0
- package/dist/commands/lifecycle/doctor.d.mts +10 -0
- package/dist/commands/lifecycle/doctor.mjs +317 -0
- package/dist/commands/lifecycle/doctor.mjs.map +1 -0
- package/dist/commands/lifecycle/install.d.mts +17 -0
- package/dist/commands/lifecycle/install.mjs +1077 -0
- package/dist/commands/lifecycle/install.mjs.map +1 -0
- package/dist/commands/lifecycle/migrate.d.mts +1 -0
- package/{src → dist}/commands/lifecycle/migrate.mjs +10 -11
- package/dist/commands/lifecycle/migrate.mjs.map +1 -0
- package/dist/commands/lifecycle/model.d.mts +1 -0
- package/dist/commands/lifecycle/model.mjs +22 -0
- package/dist/commands/lifecycle/model.mjs.map +1 -0
- package/dist/commands/lifecycle/paths.d.mts +1 -0
- package/dist/commands/lifecycle/paths.mjs +102 -0
- package/dist/commands/lifecycle/paths.mjs.map +1 -0
- package/dist/commands/lifecycle/preflight.d.mts +1 -0
- package/dist/commands/lifecycle/preflight.mjs +124 -0
- package/dist/commands/lifecycle/preflight.mjs.map +1 -0
- package/dist/commands/lifecycle/setup.d.mts +1 -0
- package/dist/commands/lifecycle/setup.mjs +297 -0
- package/dist/commands/lifecycle/setup.mjs.map +1 -0
- package/dist/commands/lifecycle/uninstall.d.mts +4 -0
- package/dist/commands/lifecycle/uninstall.mjs +262 -0
- package/dist/commands/lifecycle/uninstall.mjs.map +1 -0
- package/dist/commands/manager.d.mts +3 -0
- package/{src → dist}/commands/manager.mjs +25 -32
- package/dist/commands/manager.mjs.map +1 -0
- package/dist/commands/memory/memory.d.mts +1 -0
- package/dist/commands/memory/memory.mjs +569 -0
- package/dist/commands/memory/memory.mjs.map +1 -0
- package/dist/commands/pr/pr.d.mts +33 -0
- package/dist/commands/pr/pr.mjs +296 -0
- package/dist/commands/pr/pr.mjs.map +1 -0
- package/dist/commands/report/agent-activity.d.mts +1 -0
- package/{src → dist}/commands/report/agent-activity.mjs +11 -12
- package/dist/commands/report/agent-activity.mjs.map +1 -0
- package/dist/commands/report/finalize.d.mts +4 -0
- package/{src → dist}/commands/report/finalize.mjs +25 -32
- package/dist/commands/report/finalize.mjs.map +1 -0
- package/dist/commands/report/inject-report-index.d.mts +1 -0
- package/{src → dist}/commands/report/inject-report-index.mjs +6 -7
- package/dist/commands/report/inject-report-index.mjs.map +1 -0
- package/dist/commands/report/render-final-report.d.mts +1 -0
- package/{src → dist}/commands/report/render-final-report.mjs +6 -7
- package/dist/commands/report/render-final-report.mjs.map +1 -0
- package/dist/commands/report/render-views.d.mts +1 -0
- package/{src → dist}/commands/report/render-views.mjs +6 -7
- package/dist/commands/report/render-views.mjs.map +1 -0
- package/dist/commands/report/translate.d.mts +1 -0
- package/{src → dist}/commands/report/translate.mjs +6 -7
- package/dist/commands/report/translate.mjs.map +1 -0
- package/dist/lib/helper-scripts.d.mts +3 -0
- package/{src → dist}/lib/helper-scripts.mjs +11 -14
- package/dist/lib/helper-scripts.mjs.map +1 -0
- package/dist/lib/host-registry-client.d.mts +25 -0
- package/dist/lib/host-registry-client.mjs +152 -0
- package/dist/lib/host-registry-client.mjs.map +1 -0
- package/dist/lib/install-assets.d.mts +8 -0
- package/{src → dist}/lib/install-assets.mjs +17 -20
- package/dist/lib/install-assets.mjs.map +1 -0
- package/dist/lib/okstra-dirs.d.mts +4 -0
- package/{src → dist}/lib/okstra-dirs.mjs +3 -6
- package/dist/lib/okstra-dirs.mjs.map +1 -0
- package/dist/lib/paths.d.mts +4 -0
- package/dist/lib/paths.mjs +78 -0
- package/dist/lib/paths.mjs.map +1 -0
- package/dist/lib/proc.d.mts +3 -0
- package/dist/lib/proc.mjs +31 -0
- package/dist/lib/proc.mjs.map +1 -0
- package/dist/lib/python-helper.d.mts +8 -0
- package/dist/lib/python-helper.mjs +123 -0
- package/dist/lib/python-helper.mjs.map +1 -0
- package/dist/lib/runtime-manifest.d.mts +7 -0
- package/dist/lib/runtime-manifest.mjs +73 -0
- package/dist/lib/runtime-manifest.mjs.map +1 -0
- package/dist/lib/skill-catalog.d.mts +4 -0
- package/dist/lib/skill-catalog.mjs +50 -0
- package/dist/lib/skill-catalog.mjs.map +1 -0
- package/dist/lib/types.d.mts +129 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/lib/types.mjs.map +1 -0
- package/dist/lib/version.d.mts +2 -0
- package/dist/lib/version.mjs +27 -0
- package/dist/lib/version.mjs.map +1 -0
- package/docs/architecture/storage-model.md +6 -2
- package/docs/architecture.md +29 -20
- package/docs/cli.md +40 -16
- package/docs/contributor-change-matrix.md +2 -2
- package/docs/for-ai/skills/okstra-inspect.md +2 -3
- package/docs/for-ai/skills/okstra-rollup.md +1 -0
- package/docs/project-structure-overview.md +72 -62
- package/docs/task-process/README.md +12 -8
- package/docs/task-process/common-flow.md +13 -16
- package/docs/task-process/error-analysis.md +9 -10
- package/docs/task-process/final-verification.md +7 -7
- package/docs/task-process/implementation-planning.md +9 -9
- package/docs/task-process/implementation.md +6 -6
- package/docs/task-process/release-handoff.md +8 -7
- package/docs/task-process/requirements-discovery.md +8 -8
- package/package.json +11 -5
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/claude-worker.md +2 -1
- package/runtime/agents/workers/report-writer-worker.md +3 -1
- package/runtime/agents/workers/translator-worker.md +3 -1
- package/runtime/bin/lib/okstra/cli.sh +12 -0
- package/runtime/bin/lib/okstra/globals.sh +3 -0
- package/runtime/bin/lib/okstra/interactive.sh +12 -6
- package/runtime/bin/lib/okstra/usage.sh +7 -6
- package/runtime/bin/okstra-error-log.py +27 -0
- package/runtime/bin/okstra-provider-exec.py +217 -5
- package/runtime/bin/okstra-spawn-followups.py +4 -2
- package/runtime/bin/okstra.sh +10 -0
- package/runtime/prompts/launch.template.md +2 -2
- package/runtime/prompts/lead/context-loader.md +1 -2
- package/runtime/prompts/lead/convergence.md +27 -18
- package/runtime/prompts/lead/okstra-lead-contract.md +6 -5
- package/runtime/prompts/lead/plan-body-verification.md +10 -3
- package/runtime/prompts/lead/report-writer.md +15 -1
- package/runtime/prompts/lead/team-contract.md +17 -13
- package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
- package/runtime/prompts/profiles/_implementation-executor.md +0 -3
- package/runtime/prompts/profiles/_implementation-verifier.md +3 -7
- package/runtime/prompts/profiles/change-impact-analysis.md +20 -0
- package/runtime/prompts/profiles/error-analysis.md +27 -1
- package/runtime/prompts/profiles/feature-analysis.md +20 -0
- package/runtime/prompts/profiles/final-verification.md +20 -1
- package/runtime/prompts/profiles/implementation-option-selection.md +20 -0
- package/runtime/prompts/profiles/implementation-planning.md +26 -0
- package/runtime/prompts/profiles/implementation.md +19 -0
- package/runtime/prompts/profiles/improvement-discovery.md +21 -1
- package/runtime/prompts/profiles/project-analysis.md +20 -0
- package/runtime/prompts/profiles/release-handoff.md +4 -0
- package/runtime/prompts/profiles/requirements-discovery.md +27 -1
- package/runtime/prompts/wizard/prompts.ko.json +35 -0
- package/runtime/python/okstra_ctl/adapters/dispatch/cli_wrapper.py +8 -0
- package/runtime/python/okstra_ctl/adapters/dispatch/cmux.py +8 -0
- package/runtime/python/okstra_ctl/adapters/dispatch/native_team.py +13 -0
- package/runtime/python/okstra_ctl/adapters/hosts/antigravity/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/adapter.py +25 -5
- package/runtime/python/okstra_ctl/adapters/hosts/codex/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/hosts/external/adapter.py +4 -1
- package/runtime/python/okstra_ctl/adapters/hosts/grok/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/hosts/kimi/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/providers/antigravity/adapter.py +79 -11
- package/runtime/python/okstra_ctl/adapters/providers/claude/adapter.py +95 -25
- package/runtime/python/okstra_ctl/adapters/providers/codex/adapter.py +59 -14
- package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +55 -9
- package/runtime/python/okstra_ctl/adapters/providers/kimi/adapter.py +51 -12
- package/runtime/python/okstra_ctl/adapters/runtime/__init__.py +1 -0
- package/runtime/python/okstra_ctl/adapters/runtime/assembly.py +27 -0
- package/runtime/python/okstra_ctl/adapters/runtime/cli_wrapper.py +49 -0
- package/runtime/python/okstra_ctl/adapters/runtime/cmux.py +74 -0
- package/runtime/python/okstra_ctl/agent_activity.py +5 -1
- package/runtime/python/okstra_ctl/agent_invocation.py +608 -14
- package/runtime/python/okstra_ctl/agent_prompt_cli.py +249 -50
- package/runtime/python/okstra_ctl/application/open_worker.py +29 -0
- package/runtime/python/okstra_ctl/application/resolve_assignment.py +53 -12
- package/runtime/python/okstra_ctl/assignment_environment.py +102 -0
- package/runtime/python/okstra_ctl/assignment_resolver.py +790 -0
- package/runtime/python/okstra_ctl/attempt_evidence.py +342 -0
- package/runtime/python/okstra_ctl/convergence.py +409 -3
- package/runtime/python/okstra_ctl/convergence_engine.py +248 -15
- package/runtime/python/okstra_ctl/convergence_store.py +170 -1
- package/runtime/python/okstra_ctl/dispatch_core.py +1204 -155
- package/runtime/python/okstra_ctl/dispatch_state.py +696 -11
- package/runtime/python/okstra_ctl/doctor.py +14 -0
- package/runtime/python/okstra_ctl/domain/host.py +34 -1
- package/runtime/python/okstra_ctl/domain/provider.py +212 -6
- package/runtime/python/okstra_ctl/domain/role.py +125 -0
- package/runtime/python/okstra_ctl/domain/wizard/interaction.py +18 -0
- package/runtime/python/okstra_ctl/domain/worker_exec.py +34 -1
- package/runtime/python/okstra_ctl/domain/worker_role.py +13 -3
- package/runtime/python/okstra_ctl/domain/worker_runtime.py +44 -0
- package/runtime/python/okstra_ctl/domain/worker_stream.py +24 -0
- package/runtime/python/okstra_ctl/error_log_write.py +9 -0
- package/runtime/python/okstra_ctl/error_report.py +21 -1
- package/runtime/python/okstra_ctl/execution_identity.py +529 -0
- package/runtime/python/okstra_ctl/execution_manifest.py +1281 -0
- package/runtime/python/okstra_ctl/execution_mutation_audit.py +619 -0
- package/runtime/python/okstra_ctl/implementation_outcome.py +21 -5
- package/runtime/python/okstra_ctl/index.py +6 -2
- package/runtime/python/okstra_ctl/initial_prompt_materialization.py +43 -3
- package/runtime/python/okstra_ctl/legacy_model_selection.py +578 -0
- package/runtime/python/okstra_ctl/manager_sync.py +4 -1
- package/runtime/python/okstra_ctl/model_cli.py +278 -0
- package/runtime/python/okstra_ctl/model_defaults.py +46 -0
- package/runtime/python/okstra_ctl/model_discovery.py +26 -7
- package/runtime/python/okstra_ctl/model_pool.py +501 -0
- package/runtime/python/okstra_ctl/models.py +47 -27
- package/runtime/python/okstra_ctl/mutation_recovery.py +293 -0
- package/runtime/python/okstra_ctl/next_phase.py +236 -0
- package/runtime/python/okstra_ctl/pane_title.py +151 -0
- package/runtime/python/okstra_ctl/ports/host_model.py +48 -17
- package/runtime/python/okstra_ctl/ports/worker_dispatch.py +4 -0
- package/runtime/python/okstra_ctl/ports/worker_runtime.py +26 -0
- package/runtime/python/okstra_ctl/recap.py +4 -1
- package/runtime/python/okstra_ctl/registry/provider_registry.py +8 -4
- package/runtime/python/okstra_ctl/render.py +124 -57
- package/runtime/python/okstra_ctl/render_final_report.py +19 -0
- package/runtime/python/okstra_ctl/report_contract.py +39 -0
- package/runtime/python/okstra_ctl/report_finalize.py +16 -0
- package/runtime/python/okstra_ctl/report_html/render.py +1 -0
- package/runtime/python/okstra_ctl/role_requirements.py +210 -0
- package/runtime/python/okstra_ctl/rollup.py +4 -1
- package/runtime/python/okstra_ctl/run.py +1210 -258
- package/runtime/python/okstra_ctl/run_index_row.py +7 -1
- package/runtime/python/okstra_ctl/stage_fix_carry.py +17 -1
- package/runtime/python/okstra_ctl/team.py +14 -18
- package/runtime/python/okstra_ctl/time_report.py +38 -4
- package/runtime/python/okstra_ctl/usage_identity.py +86 -0
- package/runtime/python/okstra_ctl/usage_report.py +15 -3
- package/runtime/python/okstra_ctl/wizard.py +1449 -66
- package/runtime/python/okstra_ctl/worker_audit_ledger.py +68 -65
- package/runtime/python/okstra_ctl/worker_prompt_body.py +18 -2
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +40 -9
- package/runtime/python/okstra_ctl/worker_prompt_headers.py +16 -1
- package/runtime/python/okstra_ctl/worker_request.py +7 -1
- package/runtime/python/okstra_ctl/worker_runner.py +130 -5
- package/runtime/python/okstra_ctl/workers.py +7 -5
- package/runtime/python/okstra_ctl/workflow.py +18 -32
- package/runtime/python/okstra_ctl/worktree.py +3 -3
- package/runtime/python/okstra_ctl/worktree_registry.py +5 -4
- package/runtime/python/okstra_ctl/write_policy.py +571 -0
- package/runtime/python/okstra_project/state.py +54 -6
- package/runtime/schemas/convergence-groups-v2.0.schema.json +128 -0
- package/runtime/schemas/execution-manifest-v2.schema.json +340 -0
- package/runtime/schemas/final-report-v2.0.schema.json +68 -5
- package/runtime/skills/okstra-inspect/facets/recap.md +2 -0
- package/runtime/skills/okstra-inspect/facets/report.md +1 -1
- package/runtime/skills/okstra-inspect/facets/status.md +15 -13
- package/runtime/skills/okstra-rollup/SKILL.md +1 -0
- package/runtime/skills/okstra-run/SKILL.md +14 -14
- package/runtime/templates/implementation-worker-preamble.md +3 -18
- package/runtime/templates/project-docs/task-index.template.md +0 -1
- package/runtime/templates/report-writer-prompt-preamble.md +2 -0
- package/runtime/templates/reports/final-report-v2.template.md +7 -1
- package/runtime/templates/reports/html/base.template.html +21 -0
- package/runtime/templates/reports/html/i18n/en.json +4 -0
- package/runtime/templates/reports/html/i18n/ko.json +4 -0
- package/runtime/templates/reports/html/macros/forms.html +5 -4
- package/runtime/templates/reports/html/tasks/final-verification.template.html +1 -1
- package/runtime/templates/reports/html/tasks/implementation.template.html +1 -1
- package/runtime/templates/worker-prompt-preamble.md +6 -35
- package/runtime/validators/lib/fixtures.sh +49 -16
- package/runtime/validators/validate-run.py +486 -134
- package/runtime/validators/validate_session_conformance.py +25 -7
- package/src/cli-registry.mjs +0 -539
- package/src/commands/execute/codex-dispatch.mjs +0 -10
- package/src/commands/execute/plan-items.mjs +0 -9
- package/src/commands/execute/plan-validate.mjs +0 -68
- package/src/commands/execute/run.mjs +0 -208
- package/src/commands/execute/wizard.mjs +0 -167
- package/src/commands/inspect/stage-map.mjs +0 -98
- package/src/commands/inspect/task-list.mjs +0 -97
- package/src/commands/inspect/task-show.mjs +0 -100
- package/src/commands/lifecycle/check-project.mjs +0 -187
- package/src/commands/lifecycle/config.mjs +0 -385
- package/src/commands/lifecycle/doctor.mjs +0 -308
- package/src/commands/lifecycle/install.mjs +0 -1170
- package/src/commands/lifecycle/paths.mjs +0 -104
- package/src/commands/lifecycle/preflight.mjs +0 -125
- package/src/commands/lifecycle/setup.mjs +0 -333
- package/src/commands/lifecycle/uninstall.mjs +0 -279
- package/src/commands/memory/memory.mjs +0 -524
- package/src/commands/pr/pr.mjs +0 -261
- package/src/lib/host-registry-client.mjs +0 -176
- package/src/lib/paths.mjs +0 -86
- package/src/lib/proc.mjs +0 -31
- package/src/lib/python-helper.mjs +0 -142
- package/src/lib/runtime-manifest.mjs +0 -70
- package/src/lib/skill-catalog.mjs +0 -53
- package/src/lib/version.mjs +0 -20
- /package/{src → dist}/commands/pr/default.md +0 -0
|
@@ -1,279 +0,0 @@
|
|
|
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 {
|
|
6
|
-
RUNTIMES_MANIFEST_REL,
|
|
7
|
-
runtimeManifestIncludesClaudeAssets,
|
|
8
|
-
} from "../../lib/runtime-manifest.mjs";
|
|
9
|
-
import { OBSOLETE_SKILL_NAMES, USER_SKILL_NAMES } from "../../lib/skill-catalog.mjs";
|
|
10
|
-
import {
|
|
11
|
-
AGENTS_MANIFEST_REL,
|
|
12
|
-
INSTALLED_FILES,
|
|
13
|
-
INSTALLED_TREES,
|
|
14
|
-
LEGACY_TRANSPORT_AGENT_NAMES,
|
|
15
|
-
SKILLS_MANIFEST_REL,
|
|
16
|
-
} from "../../lib/install-assets.mjs";
|
|
17
|
-
|
|
18
|
-
// Manifest-less uninstall must clean out every okstra skill directory — the
|
|
19
|
-
// live names AND every former/renamed one. Both sets are the single source of
|
|
20
|
-
// truth in skill-catalog.mjs (install prunes OBSOLETE_SKILL_NAMES from each
|
|
21
|
-
// skill home), so deriving the fallback from their union keeps uninstall from
|
|
22
|
-
// drifting behind skill additions or renames.
|
|
23
|
-
export const FALLBACK_SKILL_NAMES = [
|
|
24
|
-
...new Set([...USER_SKILL_NAMES, ...OBSOLETE_SKILL_NAMES]),
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
export const FALLBACK_AGENT_NAMES = [
|
|
28
|
-
"claude-worker.md",
|
|
29
|
-
"report-writer-worker.md",
|
|
30
|
-
"translator-worker.md",
|
|
31
|
-
...LEGACY_TRANSPORT_AGENT_NAMES,
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
const USER_HOME = homedir();
|
|
35
|
-
const CLAUDE_HOME = join(USER_HOME, ".claude");
|
|
36
|
-
const AGENTS_HOME = join(USER_HOME, ".agents");
|
|
37
|
-
const CLAUDE_SKILLS_DIR = join(CLAUDE_HOME, "skills");
|
|
38
|
-
const AGENTS_SKILLS_DIR = join(AGENTS_HOME, "skills");
|
|
39
|
-
const CLAUDE_AGENTS_DIR = join(CLAUDE_HOME, "agents");
|
|
40
|
-
const FALLBACK_SKILL_ROOTS = [
|
|
41
|
-
CLAUDE_SKILLS_DIR,
|
|
42
|
-
AGENTS_SKILLS_DIR,
|
|
43
|
-
];
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const USAGE = `okstra uninstall — remove installed runtime and okstra skills
|
|
47
|
-
|
|
48
|
-
Usage:
|
|
49
|
-
okstra uninstall Remove ~/.okstra/{lib (python + validators),
|
|
50
|
-
bin, schemas, templates, version,
|
|
51
|
-
dev-link, installed-runtimes.json,
|
|
52
|
-
installed-skills.json, installed-agents.json} AND
|
|
53
|
-
every skill target recorded in
|
|
54
|
-
installed-skills.json
|
|
55
|
-
(~/.claude/skills or ~/.agents/skills).
|
|
56
|
-
Claude worker agents are
|
|
57
|
-
removed from ~/.claude/agents when installed.
|
|
58
|
-
Missing manifests fall back to hard-coded
|
|
59
|
-
Claude okstra-* / *-worker.md names.
|
|
60
|
-
Preserves user data: recent.jsonl,
|
|
61
|
-
active.jsonl, projects/, archive/,
|
|
62
|
-
state.json, .locks/
|
|
63
|
-
Per-project artifacts created by 'okstra setup'
|
|
64
|
-
(<PROJECT>/.claude/settings.local.json symlink)
|
|
65
|
-
are NOT touched — remove them manually if needed.
|
|
66
|
-
okstra uninstall --purge Remove the entire ~/.okstra directory AND
|
|
67
|
-
okstra skills in Claude/Agent homes AND
|
|
68
|
-
~/.claude/agents/<*-worker.md> (DESTRUCTIVE).
|
|
69
|
-
Requires -y or an interactive confirmation
|
|
70
|
-
okstra uninstall --dry-run Print the plan without touching disk
|
|
71
|
-
okstra uninstall -y Skip confirmation prompt for --purge
|
|
72
|
-
`;
|
|
73
|
-
|
|
74
|
-
async function pathExists(p) {
|
|
75
|
-
try {
|
|
76
|
-
await fs.lstat(p);
|
|
77
|
-
return true;
|
|
78
|
-
} catch {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async function removePath(p, opts) {
|
|
84
|
-
const { dryRun = false, quiet = false } = opts ?? {};
|
|
85
|
-
if (!(await pathExists(p))) {
|
|
86
|
-
if (!quiet) process.stdout.write(` not present: ${p}\n`);
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
if (dryRun) {
|
|
90
|
-
process.stdout.write(`[dry-run] rm ${p}\n`);
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
await fs.rm(p, { recursive: true, force: true });
|
|
94
|
-
if (!quiet) process.stdout.write(` removed: ${p}\n`);
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async function promptConfirm(question) {
|
|
99
|
-
if (!process.stdin.isTTY) return false;
|
|
100
|
-
process.stdout.write(`${question} [y/N] `);
|
|
101
|
-
return await new Promise((resolveP) => {
|
|
102
|
-
process.stdin.setEncoding("utf8");
|
|
103
|
-
process.stdin.once("data", (chunk) => {
|
|
104
|
-
const answer = chunk.toString().trim().toLowerCase();
|
|
105
|
-
resolveP(answer === "y" || answer === "yes");
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export async function runUninstall(args) {
|
|
111
|
-
if (args.includes("--help") || args.includes("-h")) {
|
|
112
|
-
process.stdout.write(USAGE);
|
|
113
|
-
return 0;
|
|
114
|
-
}
|
|
115
|
-
const opts = {
|
|
116
|
-
dryRun: args.includes("--dry-run"),
|
|
117
|
-
quiet: args.includes("-q") || args.includes("--quiet"),
|
|
118
|
-
purge: args.includes("--purge"),
|
|
119
|
-
yes: args.includes("-y") || args.includes("--yes"),
|
|
120
|
-
};
|
|
121
|
-
const paths = await resolvePaths();
|
|
122
|
-
|
|
123
|
-
if (!(await pathExists(paths.home))) {
|
|
124
|
-
if (!opts.quiet) process.stdout.write(`okstra not installed (no ${paths.home})\n`);
|
|
125
|
-
return 0;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (opts.purge) {
|
|
129
|
-
if (!opts.yes && !opts.dryRun) {
|
|
130
|
-
const ok = await promptConfirm(
|
|
131
|
-
`purge entire ${paths.home} AND okstra skills in Claude/Agent homes? user data will be lost.`,
|
|
132
|
-
);
|
|
133
|
-
if (!ok) {
|
|
134
|
-
process.stdout.write("aborted.\n");
|
|
135
|
-
return 1;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
if (!opts.quiet) process.stdout.write(`purging ${paths.home}\n`);
|
|
139
|
-
await removePath(paths.home, opts);
|
|
140
|
-
// Skills and worker agents live outside ~/.okstra — purge those too.
|
|
141
|
-
for (const root of FALLBACK_SKILL_ROOTS) {
|
|
142
|
-
for (const name of FALLBACK_SKILL_NAMES) {
|
|
143
|
-
await removePath(join(root, name), opts);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
for (const name of FALLBACK_AGENT_NAMES) {
|
|
147
|
-
await removePath(join(CLAUDE_AGENTS_DIR, name), opts);
|
|
148
|
-
}
|
|
149
|
-
return 0;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (!opts.quiet) {
|
|
153
|
-
process.stdout.write(`uninstalling okstra runtime\n`);
|
|
154
|
-
process.stdout.write(` home: ${paths.home}\n`);
|
|
155
|
-
}
|
|
156
|
-
// Every tree the install writes, read from the list install itself copies
|
|
157
|
-
// from. A per-name list here drifts behind additions the moment one lands on
|
|
158
|
-
// the install side only — which is how a stale validator, a stale schema and
|
|
159
|
-
// a stale prompts tree each survived uninstall→reinstall in turn, one bug
|
|
160
|
-
// report at a time.
|
|
161
|
-
for (const tree of INSTALLED_TREES) {
|
|
162
|
-
await removePath(join(paths.home, ...tree.to), opts);
|
|
163
|
-
}
|
|
164
|
-
// Clean now-empty lib parent (best-effort) — the trees above were the only
|
|
165
|
-
// okstra-owned children.
|
|
166
|
-
const libDir = join(paths.home, "lib");
|
|
167
|
-
if (await pathExists(libDir)) {
|
|
168
|
-
try {
|
|
169
|
-
const entries = await fs.readdir(libDir);
|
|
170
|
-
if (entries.length === 0) {
|
|
171
|
-
if (!opts.dryRun) await fs.rmdir(libDir);
|
|
172
|
-
if (!opts.quiet) process.stdout.write(` removed empty: ${libDir}\n`);
|
|
173
|
-
}
|
|
174
|
-
} catch {
|
|
175
|
-
/* ignore */
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Remove the skills we own. Manifest v2 records every target root; legacy
|
|
180
|
-
// manifests fall back to Claude-only names when the runtime manifest says
|
|
181
|
-
// Claude assets may have been installed.
|
|
182
|
-
const runtimeManifest = await readRuntimeManifest(paths.home);
|
|
183
|
-
const skillTargets = await readSkillsManifest(paths.home, runtimeManifest);
|
|
184
|
-
for (const target of skillTargets) {
|
|
185
|
-
if (!opts.quiet) {
|
|
186
|
-
process.stdout.write(` skills: removing ${target.skills.length} entries from ${target.root}\n`);
|
|
187
|
-
}
|
|
188
|
-
for (const name of target.skills) {
|
|
189
|
-
await removePath(join(target.root, name), opts);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
await removePath(join(paths.home, SKILLS_MANIFEST_REL), opts);
|
|
193
|
-
|
|
194
|
-
// Remove worker agents we own. Agents only live in Claude Code's agent home.
|
|
195
|
-
const shouldRemoveClaudeAgents =
|
|
196
|
-
skillTargets.some((target) => target.provider === "claude") ||
|
|
197
|
-
shouldUseClaudeAssetFallback(runtimeManifest);
|
|
198
|
-
const agentNames = shouldRemoveClaudeAgents ? await readAgentsManifest(paths.home) : [];
|
|
199
|
-
if (!opts.quiet) {
|
|
200
|
-
process.stdout.write(` agents: removing ${agentNames.length} entries from ${CLAUDE_AGENTS_DIR}\n`);
|
|
201
|
-
}
|
|
202
|
-
for (const name of agentNames) {
|
|
203
|
-
await removePath(join(CLAUDE_AGENTS_DIR, name), opts);
|
|
204
|
-
}
|
|
205
|
-
// Per-project <PROJECT>/.claude/settings.local.json symlinks are NOT removed
|
|
206
|
-
// here — uninstall is machine-level and does not know which projects opted
|
|
207
|
-
// in. They will dangle until the user removes them manually or re-runs
|
|
208
|
-
// okstra install + okstra setup.
|
|
209
|
-
|
|
210
|
-
// Stamps and manifests, last: the skill/agent removal above reads two of them.
|
|
211
|
-
for (const name of INSTALLED_FILES) {
|
|
212
|
-
await removePath(join(paths.home, name), opts);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (!opts.quiet) {
|
|
216
|
-
process.stdout.write("done. user data preserved (recent.jsonl, projects/, archive/, ...).\n");
|
|
217
|
-
}
|
|
218
|
-
return 0;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
async function readRuntimeManifest(home) {
|
|
222
|
-
try {
|
|
223
|
-
const raw = await fs.readFile(join(home, RUNTIMES_MANIFEST_REL), "utf8");
|
|
224
|
-
const data = JSON.parse(raw);
|
|
225
|
-
return data && typeof data === "object" ? data : null;
|
|
226
|
-
} catch {
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export function shouldUseClaudeAssetFallback(runtimeManifest) {
|
|
232
|
-
if (runtimeManifest === null) return true;
|
|
233
|
-
return runtimeManifestIncludesClaudeAssets(runtimeManifest);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
function normalizeSkillTargets(data) {
|
|
237
|
-
if (Array.isArray(data?.targets)) {
|
|
238
|
-
return data.targets
|
|
239
|
-
.filter((target) => typeof target?.root === "string" && Array.isArray(target?.skills))
|
|
240
|
-
.map((target) => ({
|
|
241
|
-
provider: typeof target.provider === "string" ? target.provider : "unknown",
|
|
242
|
-
root: target.root,
|
|
243
|
-
skills: target.skills.filter((name) => typeof name === "string"),
|
|
244
|
-
}));
|
|
245
|
-
}
|
|
246
|
-
if (Array.isArray(data?.skills)) {
|
|
247
|
-
return [{
|
|
248
|
-
provider: "claude",
|
|
249
|
-
root: CLAUDE_SKILLS_DIR,
|
|
250
|
-
skills: data.skills.filter((name) => typeof name === "string"),
|
|
251
|
-
}];
|
|
252
|
-
}
|
|
253
|
-
return null;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
async function readSkillsManifest(home, runtimeManifest) {
|
|
257
|
-
try {
|
|
258
|
-
const raw = await fs.readFile(join(home, SKILLS_MANIFEST_REL), "utf8");
|
|
259
|
-
const data = JSON.parse(raw);
|
|
260
|
-
const targets = normalizeSkillTargets(data);
|
|
261
|
-
if (targets !== null) return targets;
|
|
262
|
-
} catch {
|
|
263
|
-
/* fall through */
|
|
264
|
-
}
|
|
265
|
-
return shouldUseClaudeAssetFallback(runtimeManifest)
|
|
266
|
-
? [{ provider: "claude", root: CLAUDE_SKILLS_DIR, skills: FALLBACK_SKILL_NAMES }]
|
|
267
|
-
: [];
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
async function readAgentsManifest(home) {
|
|
271
|
-
try {
|
|
272
|
-
const raw = await fs.readFile(join(home, AGENTS_MANIFEST_REL), "utf8");
|
|
273
|
-
const data = JSON.parse(raw);
|
|
274
|
-
if (Array.isArray(data?.agents)) return data.agents;
|
|
275
|
-
} catch {
|
|
276
|
-
/* fall through */
|
|
277
|
-
}
|
|
278
|
-
return FALLBACK_AGENT_NAMES;
|
|
279
|
-
}
|