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
|
@@ -24,16 +24,16 @@ flowchart TD
|
|
|
24
24
|
Type --> PlanPick[approved plan pick]
|
|
25
25
|
PlanPick --> Approved[approval marker confirm]
|
|
26
26
|
Approved --> Stage[stage pick<br/>whole-task or stage number]
|
|
27
|
-
Stage -->
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
Stage --> Leader[leader session read-only]
|
|
28
|
+
Leader --> RoleCount[role-count min..max<br/>omit uses recommended; skip if min==max]
|
|
29
|
+
RoleCount --> RoleModel[role-model provider/model per slot]
|
|
30
|
+
RoleModel --> RoleAdd[min=0 roles via role-add only<br/>default skip]
|
|
31
|
+
RoleAdd --> Extras[directive, related tasks, clarification]
|
|
32
|
+
Extras --> Confirm[confirmation]
|
|
33
33
|
Confirm --> Render[render-bundle]
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Launch selection uses role slots and model refs only: leader is the current session (read-only), then each static role's count in `min..max` (default **recommended**; the count step is skipped when `min == max`), then one `provider/model` per slot. Roles with `min = 0` stay closed unless the user opens them with role-add (default skip). Duplicate model refs in the same role are rejected. There is no provider roster multi-pick and no `Use defaults / Customize` fork. Dynamic verifiers are not chosen at launch. `--workers` is a CLI compatibility input only, not a launch picker.
|
|
37
37
|
|
|
38
38
|
This phase does not ask for `base-ref` directly. The wizard selects whole-task or a single stage from the approved plan's Stage Map, and prepare resolves `VERIFICATION_TARGET` from the registry / `consumers.jsonl` / git state.
|
|
39
39
|
|
|
@@ -27,19 +27,17 @@ flowchart TD
|
|
|
27
27
|
Input -->|rerun| Prior[prior planning report via clarification-response]
|
|
28
28
|
Direction --> Worktree{active task worktree?}
|
|
29
29
|
Prior --> Worktree
|
|
30
|
-
Worktree -->|yes|
|
|
30
|
+
Worktree -->|yes| Leader[leader session read-only]
|
|
31
31
|
Worktree -->|no| BaseRef[base-ref pick/text]
|
|
32
|
-
BaseRef -->
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Branch -->|yes| Models[lead, claude, codex, antigravity if selected, report-writer models]
|
|
37
|
-
Models --> Extras[directive, related tasks, clarification]
|
|
32
|
+
BaseRef --> Leader
|
|
33
|
+
Leader --> RoleCount[role-count min..max<br/>omit uses recommended]
|
|
34
|
+
RoleCount --> RoleModel[role-model provider/model per slot]
|
|
35
|
+
RoleModel --> Extras[directive, related tasks, clarification]
|
|
38
36
|
Extras --> Confirm
|
|
39
37
|
Confirm --> Render[render-bundle]
|
|
40
38
|
```
|
|
41
39
|
|
|
42
|
-
For a new plan, the wizard asks for a validated option-selection report and passes it as `--selected-direction`. A planning clarification rerun passes its own prior report through `--clarification-response`. The wizard currently does not ask about `--no-plan-verification`; on the okstra-run path, plan-body verification is prepared as enabled by default.
|
|
40
|
+
For a new plan, the wizard asks for a validated option-selection report and passes it as `--selected-direction`. A planning clarification rerun passes its own prior report through `--clarification-response`. Launch selection uses role slots and model refs only: planner count in `min..max` (default recommended), then one `provider/model` per slot. Duplicate model refs in the same role are rejected. There is no provider roster multi-pick. The wizard currently does not ask about `--no-plan-verification`; on the okstra-run path, plan-body verification is prepared as enabled by default.
|
|
43
41
|
|
|
44
42
|
## 3. prepare_task_bundle handling
|
|
45
43
|
|
|
@@ -59,12 +57,14 @@ sequenceDiagram
|
|
|
59
57
|
P->>P: provision/reuse task worktree
|
|
60
58
|
P->>R: _build_convergence_block()
|
|
61
59
|
R-->>M: convergence.planBodyVerification.enabled=true
|
|
62
|
-
P->>M: workflow nextRecommendedPhase
|
|
60
|
+
P->>M: workflow nextRecommendedPhase inherited, ready lowered to pending
|
|
63
61
|
P-->>W: prepared lead prompt
|
|
64
62
|
```
|
|
65
63
|
|
|
66
64
|
Prepare rejects a new plan without a selected-direction report. Comparison mode requires a valid `DIRECTION SELECTION` sidecar, while preselected-validation mode uses the confirmed upstream direction without one. The normalized snapshot binds the source report, source-data digest, option ID, direction body, requirements, and invariants.
|
|
67
65
|
|
|
66
|
+
Prepare does not name the next phase. It carries the inherited `workflow.nextRecommendedPhase` forward and lowers a `ready` pointer to `pending`, because this run has not finished and a `ready` pointer would read as an invitation to start the following phase. The pointer becomes `ready` at `implementation` only when Phase 7 projects it from this run's `implementationPlanning.outcome` of `plan-ready`.
|
|
67
|
+
|
|
68
68
|
## 4. lead execution flow
|
|
69
69
|
|
|
70
70
|
```mermaid
|
|
@@ -31,16 +31,16 @@ flowchart TD
|
|
|
31
31
|
Approved -->|no| Retry[re-prompt same step]
|
|
32
32
|
Approved -->|yes| Stage[stage multi-pick<br/>ready/active markers]
|
|
33
33
|
Stage --> Chain[render-args<br/>stage + chain-stages]
|
|
34
|
-
Chain -->
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
Chain --> Leader[leader session read-only]
|
|
35
|
+
Leader --> RoleCount[role-count min..max<br/>omit uses recommended; skip if min==max]
|
|
36
|
+
RoleCount --> RoleModel[role-model provider/model per slot]
|
|
37
|
+
RoleModel --> RoleAdd[min=0 roles via role-add only<br/>default skip]
|
|
38
|
+
RoleAdd --> Extras[directive, related tasks, clarification]
|
|
39
39
|
Extras --> Confirm
|
|
40
40
|
Confirm --> Render[render-bundle]
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
`
|
|
43
|
+
Launch selection uses role slots and model refs only: leader is the current session (read-only), then each static role's count in `min..max` (default **recommended**; the count step is skipped when `min == max`), then one `provider/model` per slot. Roles with `min = 0` stay closed unless the user opens them with role-add (default skip). Duplicate model refs in the same role are rejected. There is no provider roster multi-pick and no defaults-vs-customize fork. `executor` is only a compatibility alias for `implementer` in model refs; implementer slots are chosen through role-count / role-model. Dynamic verifiers are not chosen at launch. `--workers` is a CLI compatibility input only, not a launch picker. `stage_pick` is a multi-pick that shows done/in-progress/ready/waiting status. The selected stage set goes through dependency closure and topological sort into a `chain-stages` CSV, and each actual run executes only one of those stages.
|
|
44
44
|
|
|
45
45
|
The current okstra-run wizard path does not expose `--approve` that directly flips the approval checkbox. The plan file must already have a recognized approval marker.
|
|
46
46
|
|
|
@@ -27,19 +27,20 @@ flowchart TD
|
|
|
27
27
|
Type --> Plan[approved plan auto/pick]
|
|
28
28
|
Plan --> Scope[handoff stage pick<br/>whole-task or eligible stages]
|
|
29
29
|
Scope --> Worktree{active task worktree?}
|
|
30
|
-
Worktree -->|yes|
|
|
30
|
+
Worktree -->|yes| Leader[leader session read-only]
|
|
31
31
|
Worktree -->|no| BaseRef[base-ref pick/text]
|
|
32
|
-
BaseRef -->
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
BaseRef --> Leader
|
|
33
|
+
Leader --> RoleCount[role-count min..max<br/>omit uses recommended; skip if min==max]
|
|
34
|
+
RoleCount --> RoleModel[role-model provider/model per slot]
|
|
35
|
+
RoleModel --> RoleAdd[min=0 roles via role-add only<br/>default skip]
|
|
36
|
+
RoleAdd --> Extras[directive, related tasks, clarification]
|
|
36
37
|
Extras --> Template[PR template override?]
|
|
37
38
|
Template --> TemplateScope[save template to project/global?]
|
|
38
|
-
TemplateScope --> Confirm
|
|
39
|
+
TemplateScope --> Confirm[confirmation]
|
|
39
40
|
Confirm --> Render[render-bundle]
|
|
40
41
|
```
|
|
41
42
|
|
|
42
|
-
`release-handoff` has no worker roster
|
|
43
|
+
`release-handoff` has no analysis-worker dispatch. Launch selection still shows the leader session (read-only) and any applicable role-count / role-model steps; there is no provider roster multi-pick and no `Use defaults / Customize` fork. Dynamic verifiers are not chosen at launch. `--workers` is not a launch picker, and the runtime forces the worker list to empty. The wizard outcome's `renderArgs` includes `pr-template-path` only for release-handoff. Scope selection finishes before prepare, and the project/global save runs before `render-bundle` via the `config.set pr-template-path` action of `outcome.persistActions[]`. whole-task requires an accepted whole-task verification report, and for stage-group only the stages that were marked `verified` by an accepted single-stage verification in the Stage Lifecycle Snapshot but not yet covered by a `pr` become candidates.
|
|
43
44
|
|
|
44
45
|
Note that this phase is also a target of task worktree provisioning. The normal flow reuses the implementation/final-verification result of the same task-key. Starting a new task may create a new branch, and it is likely to be blocked at the entry gate's "implementation commit exists" condition.
|
|
45
46
|
|
|
@@ -31,18 +31,18 @@ flowchart TD
|
|
|
31
31
|
Keep -->|keep| Base
|
|
32
32
|
Keep -->|change/no brief| Brief
|
|
33
33
|
Type --> Base{active task worktree?}
|
|
34
|
-
Base -->|yes|
|
|
34
|
+
Base -->|yes| Leader[leader session read-only]
|
|
35
35
|
Base -->|no| BaseRef[base-ref pick/text]
|
|
36
|
-
BaseRef -->
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
BaseRef --> Leader
|
|
37
|
+
Leader --> RoleCount[role-count min..max<br/>omit uses recommended; skip if min==max]
|
|
38
|
+
RoleCount --> RoleModel[role-model provider/model per slot]
|
|
39
|
+
RoleModel --> RoleAdd[min=0 roles via role-add only<br/>default skip]
|
|
40
|
+
RoleAdd --> Extras[directive, related tasks, clarification]
|
|
41
|
+
Extras --> Confirm
|
|
42
42
|
Confirm --> Render[render-bundle]
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Launch selection uses role slots and model refs only: leader is the current session (read-only), then each static role's count in `min..max` (default **recommended**; the count step is skipped when `min == max`), then one `provider/model` per slot. Roles with `min = 0` stay closed unless the user opens them with role-add (default skip). Duplicate model refs in the same role are rejected. There is no provider roster multi-pick and no `Use defaults / Customize` fork. Dynamic verifiers are not chosen at launch. `--workers` is a CLI compatibility input only, not a launch picker.
|
|
46
46
|
|
|
47
47
|
## 3. prepare_task_bundle handling
|
|
48
48
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "okstra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.176.0",
|
|
4
4
|
"description": "Host-aware multi-provider cross-verification orchestrator runtime and agent skills.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "devonshin",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"bin/",
|
|
17
|
-
"
|
|
17
|
+
"dist/",
|
|
18
18
|
"runtime/",
|
|
19
19
|
"docs/architecture.md",
|
|
20
20
|
"docs/architecture/",
|
|
@@ -30,15 +30,21 @@
|
|
|
30
30
|
"README.md"
|
|
31
31
|
],
|
|
32
32
|
"engines": {
|
|
33
|
-
"node": ">=
|
|
33
|
+
"node": ">=22"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "
|
|
37
|
-
"
|
|
36
|
+
"build:ts": "tsc --project tsconfig.json",
|
|
37
|
+
"typecheck": "tsc --project tsconfig.json --noEmit",
|
|
38
|
+
"build": "npm run build:ts && node tools/build.mjs",
|
|
39
|
+
"prepack": "npm run build",
|
|
38
40
|
"test:js": "node --test tests-js/*.test.mjs",
|
|
39
41
|
"test:py": "python3 -m pytest tests/",
|
|
40
42
|
"test:workflow": "bash validators/validate-workflow.sh",
|
|
41
43
|
"test:e2e": "bash tests-e2e/run-all.sh",
|
|
42
44
|
"check": "npm run build && npm run test:js && npm run test:py && npm run test:workflow && npm run test:e2e"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^26.2.0",
|
|
48
|
+
"typescript": "^7.0.2"
|
|
43
49
|
}
|
|
44
50
|
}
|
package/runtime/BUILD.json
CHANGED
|
@@ -26,7 +26,8 @@ invocation. The final prompt's duty contract owns the role boundary,
|
|
|
26
26
|
responsibility, and prohibited actions. This file owns Claude tool usage,
|
|
27
27
|
artifact persistence, and liveness procedure only. Do not shell out to another
|
|
28
28
|
model CLI, and refuse a dispatch whose prompt has no adjacent verified
|
|
29
|
-
invocation metadata.
|
|
29
|
+
invocation metadata. Consume the stored `executionLabel`; do not infer a role
|
|
30
|
+
from the provider name. `lead` is a compatibility alias for `leader`.
|
|
30
31
|
|
|
31
32
|
## Execution Rules
|
|
32
33
|
|
|
@@ -18,7 +18,9 @@ This is the Claude host execution adapter for a materialized Okstra invocation.
|
|
|
18
18
|
The final prompt's `report-writer` duty contract owns the role boundary,
|
|
19
19
|
required responsibility, and prohibited actions. This file owns only how that
|
|
20
20
|
contract is executed with Claude host tools. Refuse a dispatch whose prompt has
|
|
21
|
-
no adjacent verified invocation metadata.
|
|
21
|
+
no adjacent verified invocation metadata. Consume the stored `executionLabel`.
|
|
22
|
+
The final-report `executionRoles[]` set must equal the execution-manifest
|
|
23
|
+
`roleExecutions[]` set.
|
|
22
24
|
|
|
23
25
|
- The `**Report Language:**` header in your dispatch prompt is already
|
|
24
26
|
resolved to `en` or `ko` by the lead. Copy it verbatim into
|
|
@@ -18,7 +18,9 @@ This is the Claude host execution adapter for a materialized Okstra invocation.
|
|
|
18
18
|
The final prompt's `translator` duty contract owns the role boundary,
|
|
19
19
|
responsibility, and prohibited actions. This file owns only the extraction,
|
|
20
20
|
translation-sidecar, and verification tool procedure. Refuse a dispatch whose
|
|
21
|
-
prompt has no adjacent verified invocation metadata.
|
|
21
|
+
prompt has no adjacent verified invocation metadata. Consume the stored
|
|
22
|
+
`executionLabel`; the translator role remains `translator` even without a team
|
|
23
|
+
roster.
|
|
22
24
|
|
|
23
25
|
## Procedure
|
|
24
26
|
|
|
@@ -67,6 +67,18 @@ while [[ $# -gt 0 ]]; do
|
|
|
67
67
|
WORKERS_OVERRIDE="$(require_option_value --workers "${2-}")"
|
|
68
68
|
shift 2
|
|
69
69
|
;;
|
|
70
|
+
--role-count)
|
|
71
|
+
ROLE_COUNTS+=("$(require_option_value --role-count "${2-}")")
|
|
72
|
+
shift 2
|
|
73
|
+
;;
|
|
74
|
+
--role-model)
|
|
75
|
+
ROLE_MODELS+=("$(require_option_value --role-model "${2-}")")
|
|
76
|
+
shift 2
|
|
77
|
+
;;
|
|
78
|
+
--host-session-context-json)
|
|
79
|
+
HOST_SESSION_CONTEXT_JSON="$(require_option_value --host-session-context-json "${2-}")"
|
|
80
|
+
shift 2
|
|
81
|
+
;;
|
|
70
82
|
--lead-model)
|
|
71
83
|
LEAD_MODEL_OVERRIDE="$(require_option_value --lead-model "${2-}")"
|
|
72
84
|
shift 2
|
|
@@ -19,6 +19,9 @@ RESUME_CLARIFICATION_MODE="false"
|
|
|
19
19
|
RESUME_SESSION_MODE="false"
|
|
20
20
|
RESUME_SESSION_ID=""
|
|
21
21
|
WORKERS_OVERRIDE=""
|
|
22
|
+
ROLE_COUNTS=()
|
|
23
|
+
ROLE_MODELS=()
|
|
24
|
+
HOST_SESSION_CONTEXT_JSON=""
|
|
22
25
|
LEAD_MODEL_OVERRIDE=""
|
|
23
26
|
LEAD_PROVIDER_OVERRIDE=""
|
|
24
27
|
CLAUDE_MODEL_OVERRIDE=""
|
|
@@ -192,8 +192,15 @@ PY
|
|
|
192
192
|
need_brief_val="$([[ -z "$BRIEF_PATH" ]] && printf '1' || printf '0')"
|
|
193
193
|
need_type_val="$([[ -z "$TASK_TYPE" ]] && printf '1' || printf '0')"
|
|
194
194
|
local autofill_output=""
|
|
195
|
-
|
|
195
|
+
# autofill 은 편의 기능이라 실패해도 run 을 끊으면 안 된다. heredoc 이
|
|
196
|
+
# okstra_ctl 을 import 하므로 설치가 깨지면 non-zero 로 끝나는데, okstra.sh 는
|
|
197
|
+
# `set -euo pipefail` 이라 이 평범한 대입 하나가 run 을 통째로 중단시킨다.
|
|
198
|
+
# 위 reconcile 호출(:189)이 같은 이유로 `|| true` 를 달고 있다.
|
|
199
|
+
autofill_output="$(PYTHONPATH="$OKSTRA_PYTHONPATH:${PYTHONPATH-}" python3 - "$manifest_path" "$need_brief_val" "$need_type_val" <<'PY'
|
|
196
200
|
import json, sys
|
|
201
|
+
|
|
202
|
+
from okstra_ctl import next_phase
|
|
203
|
+
|
|
197
204
|
path = sys.argv[1]
|
|
198
205
|
need_brief = sys.argv[2] == "1"
|
|
199
206
|
need_type = sys.argv[3] == "1"
|
|
@@ -208,15 +215,14 @@ task_type = ""
|
|
|
208
215
|
if need_brief:
|
|
209
216
|
brief = (data.get("taskBriefPath") or "").strip()
|
|
210
217
|
if need_type:
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
task_type = ""
|
|
218
|
+
# 포인터 판정은 Python SSOT 가 갖는다 — `ready` 가 아니면 빈 문자열이라
|
|
219
|
+
# 셸이 센티널 목록을 따로 들고 있을 이유가 없다.
|
|
220
|
+
task_type = next_phase.autofill_task_type(data)
|
|
215
221
|
|
|
216
222
|
print(f"BRIEF={brief}")
|
|
217
223
|
print(f"TYPE={task_type}")
|
|
218
224
|
PY
|
|
219
|
-
)"
|
|
225
|
+
)" || true
|
|
220
226
|
|
|
221
227
|
local manifest_brief=""
|
|
222
228
|
local manifest_type=""
|
|
@@ -74,8 +74,9 @@ optional arguments:
|
|
|
74
74
|
plans.
|
|
75
75
|
--task-key <project-id:task-group:task-id>
|
|
76
76
|
Shorthand for --project-id/--task-group/--task-id. When the matching task-manifest.json
|
|
77
|
-
exists, brief-path and task-type are auto-filled from it (taskBriefPath and
|
|
78
|
-
workflow.nextRecommendedPhase
|
|
77
|
+
exists, brief-path and task-type are auto-filled from it (taskBriefPath, and
|
|
78
|
+
workflow.nextRecommendedPhase.phase only while its status is \`ready\`).
|
|
79
|
+
Explicit flags always win.
|
|
79
80
|
|
|
80
81
|
options:
|
|
81
82
|
--render-only Render the host-neutral lead handoff prompt only. Do not launch a session.
|
|
@@ -104,8 +105,8 @@ options:
|
|
|
104
105
|
--lead-runtime Registered host ID or alias. Default: claude-code. In-host runs
|
|
105
106
|
use current-session; terminal launch uses spawn-process readiness.
|
|
106
107
|
--executor Provider that performs the Executor role during --task-type=implementation.
|
|
107
|
-
One of: claude | codex | antigravity. Default: OKSTRA_DEFAULT_EXECUTOR or claude.
|
|
108
|
-
The Executor is the only worker allowed to mutate project files; the other
|
|
108
|
+
One of: claude | codex | antigravity | grok | kimi. Default: OKSTRA_DEFAULT_EXECUTOR or claude.
|
|
109
|
+
The Executor is the only worker allowed to mutate project files; the other
|
|
109
110
|
providers are dispatched as read-only verifiers regardless of this selection.
|
|
110
111
|
Has no effect on other task types.
|
|
111
112
|
--critic Provider for the opt-in Phase 5.6 critic pass (coverage gaps /
|
|
@@ -132,9 +133,9 @@ model defaults:
|
|
|
132
133
|
Claude worker: OKSTRA_DEFAULT_CLAUDE_MODEL or opus
|
|
133
134
|
Codex worker: OKSTRA_DEFAULT_CODEX_MODEL or gpt-5.6-sol
|
|
134
135
|
Antigravity worker: OKSTRA_DEFAULT_ANTIGRAVITY_MODEL or gemini-3.1-pro
|
|
135
|
-
Grok worker: grok-
|
|
136
|
+
Grok worker: grok-4.6
|
|
136
137
|
Kimi worker: kimi-k2.7-code (analyser) or kimi-k3 (critic)
|
|
137
|
-
Implementation executor: OKSTRA_DEFAULT_EXECUTOR or claude (one of: claude | codex | antigravity)
|
|
138
|
+
Implementation executor: OKSTRA_DEFAULT_EXECUTOR or claude (one of: claude | codex | antigravity | grok | kimi)
|
|
138
139
|
|
|
139
140
|
output:
|
|
140
141
|
Stable task bundles are stored under:
|
|
@@ -72,6 +72,7 @@ def _build_parser():
|
|
|
72
72
|
grp.add_argument("--stderr-excerpt-file", default=None)
|
|
73
73
|
obs.add_argument("--context-json", default=None,
|
|
74
74
|
help="JSON object string for context")
|
|
75
|
+
_add_identity_flags(obs)
|
|
75
76
|
|
|
76
77
|
dump = sub.add_parser("append-from-worker",
|
|
77
78
|
help="Dump worker sidecar errors[] into errors.jsonl")
|
|
@@ -81,9 +82,33 @@ def _build_parser():
|
|
|
81
82
|
dump.add_argument("--agent", required=True, choices=sorted(ALLOWED_AGENTS))
|
|
82
83
|
dump.add_argument("--agent-role", required=True, choices=sorted(ALLOWED_AGENT_ROLES))
|
|
83
84
|
dump.add_argument("--model", required=True)
|
|
85
|
+
_add_identity_flags(dump)
|
|
84
86
|
return p
|
|
85
87
|
|
|
86
88
|
|
|
89
|
+
def _add_identity_flags(parser):
|
|
90
|
+
parser.add_argument("--participant-ref", default="")
|
|
91
|
+
parser.add_argument("--role-execution-ref", default="")
|
|
92
|
+
parser.add_argument("--invocation-ref", default="")
|
|
93
|
+
parser.add_argument("--attempt", type=int, default=None)
|
|
94
|
+
parser.add_argument("--execution-label", default="")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _identity_from_args(args):
|
|
98
|
+
payload = {}
|
|
99
|
+
if args.participant_ref:
|
|
100
|
+
payload["participantRef"] = args.participant_ref
|
|
101
|
+
if args.role_execution_ref:
|
|
102
|
+
payload["roleExecutionRef"] = args.role_execution_ref
|
|
103
|
+
if args.invocation_ref:
|
|
104
|
+
payload["invocationRef"] = args.invocation_ref
|
|
105
|
+
if args.attempt is not None:
|
|
106
|
+
payload["attempt"] = args.attempt
|
|
107
|
+
if args.execution_label:
|
|
108
|
+
payload["executionLabel"] = args.execution_label
|
|
109
|
+
return payload or None
|
|
110
|
+
|
|
111
|
+
|
|
87
112
|
def _read_stderr(args):
|
|
88
113
|
if args.stderr_excerpt_file:
|
|
89
114
|
return Path(args.stderr_excerpt_file).read_text()
|
|
@@ -114,6 +139,7 @@ def main(argv=None):
|
|
|
114
139
|
message=args.message,
|
|
115
140
|
stderr_excerpt=_read_stderr(args),
|
|
116
141
|
context=_read_context(args),
|
|
142
|
+
identity=_identity_from_args(args),
|
|
117
143
|
)
|
|
118
144
|
return 0
|
|
119
145
|
if args.cmd == "append-from-worker":
|
|
@@ -124,6 +150,7 @@ def main(argv=None):
|
|
|
124
150
|
agent=args.agent,
|
|
125
151
|
agent_role=args.agent_role,
|
|
126
152
|
model=args.model,
|
|
153
|
+
identity=_identity_from_args(args),
|
|
127
154
|
)
|
|
128
155
|
print(n)
|
|
129
156
|
return 0
|