okstra 0.186.7 → 0.187.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 +1 -1
- package/dist/cli-registry.d.mts +88 -1
- package/dist/cli-registry.mjs +68 -111
- package/dist/cli-registry.mjs.map +1 -1
- package/dist/commands/execute/render-bundle.mjs +0 -1
- package/dist/commands/execute/render-bundle.mjs.map +1 -1
- package/dist/commands/execute/run.mjs +8 -3
- package/dist/commands/execute/run.mjs.map +1 -1
- package/dist/commands/lifecycle/check-project.mjs +1 -14
- package/dist/commands/lifecycle/check-project.mjs.map +1 -1
- package/dist/commands/lifecycle/config.mjs +38 -40
- package/dist/commands/lifecycle/config.mjs.map +1 -1
- package/dist/commands/lifecycle/doctor.d.mts +22 -7
- package/dist/commands/lifecycle/doctor.mjs +77 -49
- package/dist/commands/lifecycle/doctor.mjs.map +1 -1
- package/dist/commands/lifecycle/install.d.mts +12 -10
- package/dist/commands/lifecycle/install.mjs +104 -39
- package/dist/commands/lifecycle/install.mjs.map +1 -1
- package/dist/commands/lifecycle/paths.mjs +8 -3
- package/dist/commands/lifecycle/paths.mjs.map +1 -1
- package/dist/commands/lifecycle/preflight.mjs +2 -1
- package/dist/commands/lifecycle/preflight.mjs.map +1 -1
- package/dist/commands/lifecycle/setup.mjs +22 -36
- package/dist/commands/lifecycle/setup.mjs.map +1 -1
- package/dist/commands/lifecycle/uninstall.d.mts +4 -2
- package/dist/commands/lifecycle/uninstall.mjs +59 -15
- package/dist/commands/lifecycle/uninstall.mjs.map +1 -1
- package/dist/commands/memory/memory.mjs +7 -1
- package/dist/commands/memory/memory.mjs.map +1 -1
- package/dist/lib/helper-scripts.d.mts +1 -1
- package/dist/lib/helper-scripts.mjs +10 -18
- package/dist/lib/helper-scripts.mjs.map +1 -1
- package/dist/lib/host-config.d.mts +72 -0
- package/dist/lib/host-config.mjs +404 -0
- package/dist/lib/host-config.mjs.map +1 -0
- package/dist/lib/host-registry-client.d.mts +2 -2
- package/dist/lib/host-registry-client.mjs +0 -3
- package/dist/lib/host-registry-client.mjs.map +1 -1
- package/dist/lib/install-assets.d.mts +1 -0
- package/dist/lib/install-assets.mjs +4 -0
- package/dist/lib/install-assets.mjs.map +1 -1
- package/dist/lib/proc.d.mts +2 -0
- package/dist/lib/proc.mjs +12 -0
- package/dist/lib/proc.mjs.map +1 -1
- package/dist/lib/python-command.d.mts +2 -0
- package/dist/lib/python-command.mjs +52 -0
- package/dist/lib/python-command.mjs.map +1 -0
- package/dist/lib/python-helper.d.mts +2 -5
- package/dist/lib/python-helper.mjs +3 -52
- package/dist/lib/python-helper.mjs.map +1 -1
- package/dist/lib/runtime-payload.d.mts +23 -0
- package/dist/lib/runtime-payload.mjs +57 -0
- package/dist/lib/runtime-payload.mjs.map +1 -0
- package/dist/lib/types.d.mts +24 -13
- package/docs/architecture/storage-model.md +21 -5
- package/docs/architecture.md +37 -36
- package/docs/cli.md +55 -76
- package/docs/coding-rules.md +295 -0
- package/docs/container.md +10 -36
- package/docs/contributor-change-matrix.md +1 -1
- package/docs/for-ai/skills/okstra-code-review.md +0 -1
- package/docs/for-ai/skills/okstra-container-build.md +8 -41
- package/docs/for-ai/skills/okstra-inspect.md +4 -4
- package/docs/for-ai/skills/okstra-manager.md +2 -2
- package/docs/for-ai/skills/okstra-rollup.md +0 -1
- package/docs/for-ai/skills/okstra-run.md +3 -3
- package/docs/for-ai/skills/okstra-user-response.md +0 -1
- package/docs/performance-improvement-plan-v2.md +1 -1
- package/docs/project-structure-overview.md +62 -62
- package/docs/task-process/README.md +3 -3
- package/docs/task-process/common-flow.md +1 -1
- package/docs/task-process/error-analysis.md +3 -3
- package/docs/task-process/implementation-planning.md +3 -1
- package/docs/task-process/release-handoff.md +1 -1
- package/package.json +3 -2
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/claude-worker.md +6 -11
- package/runtime/agents/workers/report-writer-worker.md +1 -1
- package/runtime/bin/lib/okstra/cli.sh +4 -0
- package/runtime/bin/lib/okstra/globals.sh +2 -0
- package/runtime/bin/lib/okstra/interactive.sh +26 -173
- package/runtime/bin/lib/okstra/project-resolver.sh +23 -61
- package/runtime/bin/lib/okstra/usage.sh +3 -3
- package/runtime/bin/okstra-compact-reminder.sh +1 -5
- package/runtime/bin/okstra-error-log.py +19 -2
- package/runtime/bin/okstra-import-check.py +26 -0
- package/runtime/bin/okstra-inject-report-index.py +5 -4
- package/runtime/bin/okstra-provider-exec.py +22 -17
- package/runtime/bin/okstra-render-final-report.py +16 -6
- package/runtime/bin/okstra-render-report-views.py +25 -18
- package/runtime/bin/okstra-report-translate.py +30 -18
- package/runtime/bin/okstra-spawn-followups.py +4 -0
- package/runtime/bin/okstra-token-usage.py +3 -0
- package/runtime/bin/okstra.sh +4 -2
- package/runtime/bin/okstra_bootstrap.py +58 -0
- package/runtime/prompts/coding-preflight/overview.md +1 -1
- package/runtime/prompts/duties/planning-worker.md +1 -1
- package/runtime/prompts/launch.template.md +35 -9
- package/runtime/prompts/lead/convergence.md +96 -87
- package/runtime/prompts/lead/okstra-lead-contract.md +63 -12
- package/runtime/prompts/lead/plan-body-verification.md +65 -46
- package/runtime/prompts/lead/report-writer.md +34 -4
- package/runtime/prompts/lead/team-contract.md +4 -1
- package/runtime/prompts/profiles/_clarification-recommendation.md +2 -1
- package/runtime/prompts/profiles/_coding-conventions-preflight.md +1 -1
- package/runtime/prompts/profiles/_common-contract.md +3 -3
- package/runtime/prompts/profiles/_coverage-critic.md +1 -1
- package/runtime/prompts/profiles/_implementation-deliverable.md +2 -2
- package/runtime/prompts/profiles/_implementation-executor.md +3 -1
- package/runtime/prompts/profiles/_implementation-verifier.md +16 -2
- package/runtime/prompts/profiles/error-analysis.md +4 -3
- package/runtime/prompts/profiles/final-verification.md +2 -2
- package/runtime/prompts/profiles/implementation-planning.md +22 -17
- package/runtime/prompts/profiles/implementation.md +3 -2
- package/runtime/prompts/profiles/requirements-discovery.md +2 -1
- package/runtime/prompts/wizard/prompts.ko.json +29 -8
- package/runtime/python/okstra_ctl/__init__.py +6 -27
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/relay.md +4 -5
- package/runtime/python/okstra_ctl/adapters/hosts/codex/adapter.py +21 -2
- package/runtime/python/okstra_ctl/adapters/hosts/external/adapter.py +3 -12
- package/runtime/python/okstra_ctl/adapters/providers/antigravity/adapter.py +40 -22
- package/runtime/python/okstra_ctl/adapters/providers/claude/adapter.py +14 -21
- package/runtime/python/okstra_ctl/adapters/providers/codex/adapter.py +37 -20
- package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +86 -14
- package/runtime/python/okstra_ctl/adapters/providers/kimi/adapter.py +12 -12
- package/runtime/python/okstra_ctl/adapters/runtime/cmux.py +4 -7
- package/runtime/python/okstra_ctl/agent/__init__.py +1 -0
- package/runtime/python/okstra_ctl/{agent_activity.py → agent/activity.py} +12 -1
- package/runtime/python/okstra_ctl/{agent_invocation.py → agent/invocation.py} +34 -5
- package/runtime/python/okstra_ctl/agent/prompt_cli/__init__.py +19 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/__main__.py +11 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/cli.py +215 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/dynamic_verifier.py +155 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/emit.py +66 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/inputs.py +138 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/materialize.py +408 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/results.py +197 -0
- package/runtime/python/okstra_ctl/agent/prompt_cli/run_identity.py +107 -0
- package/runtime/python/okstra_ctl/analysis_packet.py +47 -4
- package/runtime/python/okstra_ctl/approval_decisions.py +260 -8
- package/runtime/python/okstra_ctl/assignment_resolver.py +0 -12
- package/runtime/python/okstra_ctl/attempt_evidence.py +12 -24
- package/runtime/python/okstra_ctl/blocking_checks.py +251 -0
- package/runtime/python/okstra_ctl/brief_frontmatter.py +0 -7
- package/runtime/python/okstra_ctl/clarification_items/__init__.py +102 -0
- package/runtime/python/okstra_ctl/clarification_items/carry.py +224 -0
- package/runtime/python/okstra_ctl/clarification_items/dispositions.py +135 -0
- package/runtime/python/okstra_ctl/clarification_items/parsing.py +253 -0
- package/runtime/python/okstra_ctl/clarification_items/rows.py +115 -0
- package/runtime/python/okstra_ctl/clarification_items/scan.py +215 -0
- package/runtime/python/okstra_ctl/clarification_items/sidecars.py +211 -0
- package/runtime/python/okstra_ctl/cmux.py +38 -31
- package/runtime/python/okstra_ctl/code_review_target.py +163 -1
- package/runtime/python/okstra_ctl/conformance.py +23 -0
- package/runtime/python/okstra_ctl/container.py +38 -421
- package/runtime/python/okstra_ctl/context_cost.py +16 -2
- package/runtime/python/okstra_ctl/contract_graph_cli.py +7 -0
- package/runtime/python/okstra_ctl/convergence.py +101 -15
- package/runtime/python/okstra_ctl/convergence_critic_prompt.py +345 -0
- package/runtime/python/okstra_ctl/convergence_engine.py +382 -70
- package/runtime/python/okstra_ctl/convergence_store.py +5 -29
- package/runtime/python/okstra_ctl/design_prep.py +108 -12
- package/runtime/python/okstra_ctl/design_snapshot.py +11 -1
- package/runtime/python/okstra_ctl/design_surfaces.py +29 -2
- package/runtime/python/okstra_ctl/dispatch_core.py +102 -25
- package/runtime/python/okstra_ctl/dispatch_state.py +268 -39
- package/runtime/python/okstra_ctl/doctor_cli.py +48 -0
- package/runtime/python/okstra_ctl/domain/worker_exec.py +10 -5
- package/runtime/python/okstra_ctl/domain/worker_presentation.py +21 -1
- package/runtime/python/okstra_ctl/domain/worker_stream.py +52 -21
- package/runtime/python/okstra_ctl/domain/write_policy.py +219 -0
- package/runtime/python/okstra_ctl/entrypoints/hosts.py +9 -2
- package/runtime/python/okstra_ctl/error_log_core.py +1 -1
- package/runtime/python/okstra_ctl/error_report.py +14 -0
- package/runtime/python/okstra_ctl/error_zip.py +18 -2
- package/runtime/python/okstra_ctl/execution_identity.py +100 -7
- package/runtime/python/okstra_ctl/execution_manifest.py +67 -20
- package/runtime/python/okstra_ctl/execution_mutation_audit.py +90 -8
- package/runtime/python/okstra_ctl/final_report_paths.py +17 -0
- package/runtime/python/okstra_ctl/final_report_schema.py +90 -16
- package/runtime/python/okstra_ctl/git_reconcile.py +22 -2
- package/runtime/python/okstra_ctl/handoff.py +24 -1
- package/runtime/python/okstra_ctl/ids.py +6 -16
- package/runtime/python/okstra_ctl/implementation_direction.py +142 -33
- package/runtime/python/okstra_ctl/implementation_options.py +25 -11
- package/runtime/python/okstra_ctl/implementation_outcome.py +5 -2
- package/runtime/python/okstra_ctl/improvement_lenses.py +0 -14
- package/runtime/python/okstra_ctl/incremental_carry.py +69 -8
- package/runtime/python/okstra_ctl/incremental_scope.py +173 -12
- package/runtime/python/okstra_ctl/index.py +2 -2
- package/runtime/python/okstra_ctl/initial_prompt_materialization.py +48 -8
- package/runtime/python/okstra_ctl/interactive_cli.py +223 -0
- package/runtime/python/okstra_ctl/json_boundary.py +10 -0
- package/runtime/python/okstra_ctl/listing.py +0 -91
- package/runtime/python/okstra_ctl/locks.py +5 -19
- package/runtime/python/okstra_ctl/log_report.py +14 -0
- package/runtime/python/okstra_ctl/manager_cli.py +22 -3
- package/runtime/python/okstra_ctl/manager_launch.py +4 -8
- package/runtime/python/okstra_ctl/material.py +2 -2
- package/runtime/python/okstra_ctl/migrate.py +23 -1
- package/runtime/python/okstra_ctl/model_cli.py +19 -5
- package/runtime/python/okstra_ctl/model_discovery.py +46 -47
- package/runtime/python/okstra_ctl/model_io/__init__.py +1 -0
- package/runtime/python/okstra_ctl/model_io/lines.py +163 -0
- package/runtime/python/okstra_ctl/model_io/references.py +370 -0
- package/runtime/python/okstra_ctl/model_io/renderers.py +498 -0
- package/runtime/python/okstra_ctl/model_io_cli.py +30 -945
- package/runtime/python/okstra_ctl/model_pool.py +10 -6
- package/runtime/python/okstra_ctl/models.py +8 -8
- package/runtime/python/okstra_ctl/mutation_recovery.py +5 -63
- package/runtime/python/okstra_ctl/next_phase.py +121 -69
- package/runtime/python/okstra_ctl/pane_reclaim.py +23 -0
- package/runtime/python/okstra_ctl/pane_title.py +11 -8
- package/runtime/python/okstra_ctl/path_hints.py +36 -11
- package/runtime/python/okstra_ctl/paths.py +76 -8
- package/runtime/python/okstra_ctl/plan_items.py +132 -16
- package/runtime/python/okstra_ctl/plan_items_cli.py +486 -36
- package/runtime/python/okstra_ctl/plan_run_root.py +1 -1
- package/runtime/python/okstra_ctl/plan_validate_cli.py +51 -0
- package/runtime/python/okstra_ctl/plan_verify_cli.py +80 -0
- package/runtime/python/okstra_ctl/prepare_error.py +20 -0
- package/runtime/python/okstra_ctl/prior_planning.py +157 -0
- package/runtime/python/okstra_ctl/profile_show.py +18 -1
- package/runtime/python/okstra_ctl/project_setup_cli.py +140 -0
- package/runtime/python/okstra_ctl/recap.py +22 -1
- package/runtime/python/okstra_ctl/reconcile.py +84 -0
- package/runtime/python/okstra_ctl/registry/host_registry.py +18 -1
- package/runtime/python/okstra_ctl/render.py +98 -32
- package/runtime/python/okstra_ctl/render_final_report.py +3 -7
- package/runtime/python/okstra_ctl/report_assembly.py +297 -7
- package/runtime/python/okstra_ctl/report_contract.py +30 -7
- package/runtime/python/okstra_ctl/report_finalize.py +206 -15
- package/runtime/python/okstra_ctl/report_html/common.py +2 -2
- package/runtime/python/okstra_ctl/report_html/render.py +8 -12
- package/runtime/python/okstra_ctl/report_language.py +8 -4
- package/runtime/python/okstra_ctl/report_narrative.py +90 -3
- package/runtime/python/okstra_ctl/report_projections.py +8 -2
- package/runtime/python/okstra_ctl/report_synthesis_packet.py +258 -1
- package/runtime/python/okstra_ctl/report_translation.py +2 -35
- package/runtime/python/okstra_ctl/report_views.py +4 -22
- package/runtime/python/okstra_ctl/resolve_task_key.py +13 -0
- package/runtime/python/okstra_ctl/rollup.py +13 -0
- package/runtime/python/okstra_ctl/run.py +639 -138
- package/runtime/python/okstra_ctl/run_audit.py +13 -0
- package/runtime/python/okstra_ctl/run_index_row.py +0 -12
- package/runtime/python/okstra_ctl/seeding.py +21 -11
- package/runtime/python/okstra_ctl/sequence.py +1 -1
- package/runtime/python/okstra_ctl/session.py +64 -14
- package/runtime/python/okstra_ctl/set_work_status.py +18 -0
- package/runtime/python/okstra_ctl/stage_integrate.py +15 -1
- package/runtime/python/okstra_ctl/stage_ledger.py +1 -1
- package/runtime/python/okstra_ctl/stage_map.py +57 -11
- package/runtime/python/okstra_ctl/stage_map_cli.py +83 -0
- package/runtime/python/okstra_ctl/stage_map_view.py +65 -0
- package/runtime/python/okstra_ctl/stage_targets.py +3 -12
- package/runtime/python/okstra_ctl/task_list_cli.py +138 -0
- package/runtime/python/okstra_ctl/task_show_cli.py +66 -0
- package/runtime/python/okstra_ctl/task_target.py +4 -16
- package/runtime/python/okstra_ctl/team.py +49 -2
- package/runtime/python/okstra_ctl/time_report.py +17 -2
- package/runtime/python/okstra_ctl/usage_report.py +11 -0
- package/runtime/python/okstra_ctl/user_response.py +55 -218
- package/runtime/python/okstra_ctl/user_response_values.py +242 -0
- package/runtime/python/okstra_ctl/validation_contract.py +3 -0
- package/runtime/python/okstra_ctl/verification_target.py +68 -0
- package/runtime/python/okstra_ctl/wizard.py +457 -92
- package/runtime/python/okstra_ctl/worker_artifacts.py +75 -16
- package/runtime/python/okstra_ctl/worker_audit_check.py +22 -0
- package/runtime/python/okstra_ctl/worker_dispatch.py +21 -0
- package/runtime/python/okstra_ctl/worker_liveness.py +33 -0
- package/runtime/python/okstra_ctl/worker_prompt_body.py +15 -2
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +98 -7
- package/runtime/python/okstra_ctl/worker_prompt_headers.py +24 -2
- package/runtime/python/okstra_ctl/worker_prompt_policy.py +18 -3
- package/runtime/python/okstra_ctl/worker_request.py +2 -1
- package/runtime/python/okstra_ctl/worker_runner.py +16 -9
- package/runtime/python/okstra_ctl/worker_state.py +16 -1
- package/runtime/python/okstra_ctl/workflow.py +18 -1
- package/runtime/python/okstra_ctl/worktree/__init__.py +92 -0
- package/runtime/python/okstra_ctl/worktree/cleanliness.py +89 -0
- package/runtime/python/okstra_ctl/worktree/decisions.py +127 -0
- package/runtime/python/okstra_ctl/worktree/git_ops.py +165 -0
- package/runtime/python/okstra_ctl/worktree/linking.py +249 -0
- package/runtime/python/okstra_ctl/worktree/naming.py +91 -0
- package/runtime/python/okstra_ctl/worktree/provision.py +385 -0
- package/runtime/python/okstra_ctl/worktree/sync_config.py +181 -0
- package/runtime/python/okstra_ctl/worktree_cli.py +75 -0
- package/runtime/python/okstra_ctl/worktree_lookup_cli.py +39 -0
- package/runtime/python/okstra_ctl/worktree_registry.py +7 -0
- package/runtime/python/okstra_ctl/worktree_status_cli.py +53 -0
- package/runtime/python/okstra_ctl/write_policy.py +90 -213
- package/runtime/python/okstra_project/__init__.py +0 -4
- package/runtime/python/okstra_project/dirs.py +2 -2
- package/runtime/python/okstra_project/phase_pointer.py +84 -0
- package/runtime/python/okstra_project/slug.py +24 -0
- package/runtime/python/okstra_project/state.py +22 -230
- package/runtime/python/okstra_token_usage/claude.py +9 -1
- package/runtime/python/okstra_token_usage/cli.py +3 -1
- package/runtime/python/okstra_token_usage/collect.py +71 -10
- package/runtime/python/okstra_token_usage/cursor.py +2 -0
- package/runtime/python/okstra_token_usage/grok.py +1 -5
- package/runtime/python/okstra_token_usage/paths.py +26 -0
- package/runtime/python/okstra_token_usage/pricing.py +19 -7
- package/runtime/schemas/convergence-critic-results-v1.0.schema.json +5 -0
- package/runtime/schemas/execution-manifest-v2.schema.json +10 -10
- package/runtime/schemas/final-report-v2.0.schema.json +9 -26
- package/runtime/schemas/final-report-v3.0.schema.json +173 -41
- package/runtime/schemas/report-narrative-v3.0.schema.json +3 -2
- package/runtime/skills/okstra-brief-gen/SKILL.md +35 -2
- package/runtime/skills/okstra-container-build/SKILL.md +16 -47
- package/runtime/skills/okstra-inspect/facets/history.md +1 -1
- package/runtime/skills/okstra-inspect/facets/status.md +7 -6
- package/runtime/skills/okstra-pr-gen/SKILL.md +1 -1
- package/runtime/skills/okstra-run/SKILL.md +7 -5
- package/runtime/templates/report-writer-prompt-preamble.md +1 -1
- package/runtime/templates/reports/brief.template.md +6 -2
- package/runtime/templates/reports/error-analysis-input.template.md +2 -0
- package/runtime/templates/reports/final-verification-input.template.md +2 -0
- package/runtime/templates/reports/implementation-input.template.md +7 -1
- package/runtime/templates/reports/implementation-planning-input.template.md +4 -0
- package/runtime/templates/reports/quick-input.template.md +2 -0
- package/runtime/templates/reports/release-handoff-input.template.md +6 -1
- package/runtime/templates/reports/report.js +20 -3
- package/runtime/templates/reports/schedule.template.md +2 -0
- package/runtime/templates/reports/settings.template.json +0 -10
- package/runtime/templates/reports/task-brief.template.md +3 -0
- package/runtime/templates/reports/user-response.template.md +7 -3
- package/runtime/validators/checks/fixtures-01.py +57 -0
- package/runtime/validators/checks/fixtures-02.py +565 -0
- package/runtime/validators/checks/runners-01.py +108 -0
- package/runtime/validators/checks/validate-assets-01.py +60 -0
- package/runtime/validators/checks/validate-prompt-metadata-01.py +261 -0
- package/runtime/validators/checks/validate-tasks-01.py +46 -0
- package/runtime/validators/checks/validate-tasks-02.py +85 -0
- package/runtime/validators/checks/validate-tasks-03.py +61 -0
- package/runtime/validators/checks/validate-tasks-04.py +118 -0
- package/runtime/validators/forbidden_actions.py +73 -3
- package/runtime/validators/lib/common.sh +5 -0
- package/runtime/validators/lib/fixtures.sh +7 -591
- package/runtime/validators/lib/paths.sh +13 -0
- package/runtime/validators/lib/runners.sh +6 -104
- package/runtime/validators/lib/summary.sh +1 -1
- package/runtime/validators/lib/validate-assets.sh +6 -56
- package/runtime/validators/lib/validate-prompt-metadata.sh +6 -257
- package/runtime/validators/lib/validate-tasks.sh +9 -294
- package/runtime/validators/validate-implementation-plan-stages.py +4 -4
- package/runtime/validators/validate-run.py +1369 -2654
- package/runtime/validators/validate-workflow.sh +56 -16
- package/runtime/validators/validate_improvement_report.py +2 -1
- package/runtime/validators/validate_session_conformance.py +295 -49
- package/dist/commands/execute/agent-prompt.d.mts +0 -1
- package/dist/commands/execute/agent-prompt.mjs +0 -24
- package/dist/commands/execute/agent-prompt.mjs.map +0 -1
- package/dist/commands/execute/codex-dispatch.d.mts +0 -3
- package/dist/commands/execute/codex-dispatch.mjs +0 -6
- package/dist/commands/execute/codex-dispatch.mjs.map +0 -1
- package/dist/commands/execute/codex-run.d.mts +0 -3
- package/dist/commands/execute/codex-run.mjs +0 -62
- package/dist/commands/execute/codex-run.mjs.map +0 -1
- package/dist/commands/execute/convergence.d.mts +0 -1
- package/dist/commands/execute/convergence.mjs +0 -38
- package/dist/commands/execute/convergence.mjs.map +0 -1
- package/dist/commands/execute/error-log.d.mts +0 -1
- package/dist/commands/execute/error-log.mjs +0 -18
- package/dist/commands/execute/error-log.mjs.map +0 -1
- package/dist/commands/execute/git-reconcile.d.mts +0 -1
- package/dist/commands/execute/git-reconcile.mjs +0 -30
- package/dist/commands/execute/git-reconcile.mjs.map +0 -1
- package/dist/commands/execute/handoff.d.mts +0 -1
- package/dist/commands/execute/handoff.mjs +0 -31
- package/dist/commands/execute/handoff.mjs.map +0 -1
- package/dist/commands/execute/incremental-carry.d.mts +0 -1
- package/dist/commands/execute/incremental-carry.mjs +0 -20
- package/dist/commands/execute/incremental-carry.mjs.map +0 -1
- package/dist/commands/execute/incremental-scope.d.mts +0 -1
- package/dist/commands/execute/incremental-scope.mjs +0 -29
- package/dist/commands/execute/incremental-scope.mjs.map +0 -1
- package/dist/commands/execute/integrate-stages.d.mts +0 -1
- package/dist/commands/execute/integrate-stages.mjs +0 -24
- package/dist/commands/execute/integrate-stages.mjs.map +0 -1
- package/dist/commands/execute/pane-title.d.mts +0 -1
- package/dist/commands/execute/pane-title.mjs +0 -20
- package/dist/commands/execute/pane-title.mjs.map +0 -1
- package/dist/commands/execute/plan-items.d.mts +0 -1
- package/dist/commands/execute/plan-items.mjs +0 -9
- package/dist/commands/execute/plan-items.mjs.map +0 -1
- package/dist/commands/execute/plan-validate.d.mts +0 -1
- package/dist/commands/execute/plan-validate.mjs +0 -68
- package/dist/commands/execute/plan-validate.mjs.map +0 -1
- package/dist/commands/execute/plan-verify.d.mts +0 -1
- package/dist/commands/execute/plan-verify.mjs +0 -43
- package/dist/commands/execute/plan-verify.mjs.map +0 -1
- package/dist/commands/execute/spawn-followups.d.mts +0 -1
- package/dist/commands/execute/spawn-followups.mjs +0 -22
- package/dist/commands/execute/spawn-followups.mjs.map +0 -1
- package/dist/commands/execute/team.d.mts +0 -3
- package/dist/commands/execute/team.mjs +0 -66
- package/dist/commands/execute/team.mjs.map +0 -1
- package/dist/commands/execute/token-usage.d.mts +0 -1
- package/dist/commands/execute/token-usage.mjs +0 -19
- package/dist/commands/execute/token-usage.mjs.map +0 -1
- package/dist/commands/execute/worker-audit-check.d.mts +0 -1
- package/dist/commands/execute/worker-audit-check.mjs +0 -34
- package/dist/commands/execute/worker-audit-check.mjs.map +0 -1
- package/dist/commands/execute/worker-dispatch.d.mts +0 -7
- package/dist/commands/execute/worker-dispatch.mjs +0 -64
- package/dist/commands/execute/worker-dispatch.mjs.map +0 -1
- package/dist/commands/execute/worker-state.d.mts +0 -1
- package/dist/commands/execute/worker-state.mjs +0 -28
- package/dist/commands/execute/worker-state.mjs.map +0 -1
- package/dist/commands/execute/worktree-lookup.d.mts +0 -1
- package/dist/commands/execute/worktree-lookup.mjs +0 -92
- package/dist/commands/execute/worktree-lookup.mjs.map +0 -1
- package/dist/commands/execute/worktree-status.d.mts +0 -1
- package/dist/commands/execute/worktree-status.mjs +0 -121
- package/dist/commands/execute/worktree-status.mjs.map +0 -1
- package/dist/commands/inspect/code-review.d.mts +0 -1
- package/dist/commands/inspect/code-review.mjs +0 -32
- package/dist/commands/inspect/code-review.mjs.map +0 -1
- package/dist/commands/inspect/container.d.mts +0 -1
- package/dist/commands/inspect/container.mjs +0 -25
- package/dist/commands/inspect/container.mjs.map +0 -1
- package/dist/commands/inspect/context-cost.d.mts +0 -1
- package/dist/commands/inspect/context-cost.mjs +0 -25
- package/dist/commands/inspect/context-cost.mjs.map +0 -1
- package/dist/commands/inspect/design-prep.d.mts +0 -1
- package/dist/commands/inspect/design-prep.mjs +0 -22
- package/dist/commands/inspect/design-prep.mjs.map +0 -1
- package/dist/commands/inspect/error-report.d.mts +0 -1
- package/dist/commands/inspect/error-report.mjs +0 -25
- package/dist/commands/inspect/error-report.mjs.map +0 -1
- package/dist/commands/inspect/error-zip.d.mts +0 -1
- package/dist/commands/inspect/error-zip.mjs +0 -24
- package/dist/commands/inspect/error-zip.mjs.map +0 -1
- package/dist/commands/inspect/log-report.d.mts +0 -1
- package/dist/commands/inspect/log-report.mjs +0 -26
- package/dist/commands/inspect/log-report.mjs.map +0 -1
- package/dist/commands/inspect/model-io.d.mts +0 -1
- package/dist/commands/inspect/model-io.mjs +0 -25
- package/dist/commands/inspect/model-io.mjs.map +0 -1
- package/dist/commands/inspect/profile-show.d.mts +0 -1
- package/dist/commands/inspect/profile-show.mjs +0 -28
- package/dist/commands/inspect/profile-show.mjs.map +0 -1
- package/dist/commands/inspect/recap.d.mts +0 -1
- package/dist/commands/inspect/recap.mjs +0 -30
- package/dist/commands/inspect/recap.mjs.map +0 -1
- package/dist/commands/inspect/resolve-task-key.d.mts +0 -1
- package/dist/commands/inspect/resolve-task-key.mjs +0 -24
- package/dist/commands/inspect/resolve-task-key.mjs.map +0 -1
- package/dist/commands/inspect/rollup.d.mts +0 -1
- package/dist/commands/inspect/rollup.mjs +0 -25
- package/dist/commands/inspect/rollup.mjs.map +0 -1
- package/dist/commands/inspect/run-audit.d.mts +0 -1
- package/dist/commands/inspect/run-audit.mjs +0 -25
- package/dist/commands/inspect/run-audit.mjs.map +0 -1
- package/dist/commands/inspect/set-work-status.d.mts +0 -1
- package/dist/commands/inspect/set-work-status.mjs +0 -29
- package/dist/commands/inspect/set-work-status.mjs.map +0 -1
- package/dist/commands/inspect/stage-map.d.mts +0 -1
- package/dist/commands/inspect/stage-map.mjs +0 -131
- package/dist/commands/inspect/stage-map.mjs.map +0 -1
- package/dist/commands/inspect/task-list.d.mts +0 -1
- package/dist/commands/inspect/task-list.mjs +0 -149
- package/dist/commands/inspect/task-list.mjs.map +0 -1
- package/dist/commands/inspect/task-show.d.mts +0 -1
- package/dist/commands/inspect/task-show.mjs +0 -108
- package/dist/commands/inspect/task-show.mjs.map +0 -1
- package/dist/commands/inspect/time-report.d.mts +0 -1
- package/dist/commands/inspect/time-report.mjs +0 -24
- package/dist/commands/inspect/time-report.mjs.map +0 -1
- package/dist/commands/inspect/usage-report.d.mts +0 -1
- package/dist/commands/inspect/usage-report.mjs +0 -23
- package/dist/commands/inspect/usage-report.mjs.map +0 -1
- package/dist/commands/inspect/user-response.d.mts +0 -1
- package/dist/commands/inspect/user-response.mjs +0 -35
- package/dist/commands/inspect/user-response.mjs.map +0 -1
- package/dist/commands/inspect/worker-liveness.d.mts +0 -1
- package/dist/commands/inspect/worker-liveness.mjs +0 -45
- package/dist/commands/inspect/worker-liveness.mjs.map +0 -1
- package/dist/commands/lifecycle/contract-check.d.mts +0 -1
- package/dist/commands/lifecycle/contract-check.mjs +0 -18
- package/dist/commands/lifecycle/contract-check.mjs.map +0 -1
- package/dist/commands/lifecycle/migrate.d.mts +0 -1
- package/dist/commands/lifecycle/migrate.mjs +0 -30
- package/dist/commands/lifecycle/migrate.mjs.map +0 -1
- package/dist/commands/lifecycle/model.d.mts +0 -1
- package/dist/commands/lifecycle/model.mjs +0 -22
- package/dist/commands/lifecycle/model.mjs.map +0 -1
- package/dist/commands/manager.d.mts +0 -3
- package/dist/commands/manager.mjs +0 -50
- package/dist/commands/manager.mjs.map +0 -1
- package/dist/commands/report/agent-activity.d.mts +0 -1
- package/dist/commands/report/agent-activity.mjs +0 -20
- package/dist/commands/report/agent-activity.mjs.map +0 -1
- package/dist/commands/report/approval-decision.d.mts +0 -1
- package/dist/commands/report/approval-decision.mjs +0 -21
- package/dist/commands/report/approval-decision.mjs.map +0 -1
- package/dist/commands/report/design-snapshot.d.mts +0 -1
- package/dist/commands/report/design-snapshot.mjs +0 -19
- package/dist/commands/report/design-snapshot.mjs.map +0 -1
- package/dist/commands/report/finalize.d.mts +0 -4
- package/dist/commands/report/finalize.mjs +0 -64
- package/dist/commands/report/finalize.mjs.map +0 -1
- package/dist/commands/report/inject-report-index.d.mts +0 -1
- package/dist/commands/report/inject-report-index.mjs +0 -21
- package/dist/commands/report/inject-report-index.mjs.map +0 -1
- package/dist/commands/report/render-final-report.d.mts +0 -1
- package/dist/commands/report/render-final-report.mjs +0 -23
- package/dist/commands/report/render-final-report.mjs.map +0 -1
- package/dist/commands/report/render-views.d.mts +0 -1
- package/dist/commands/report/render-views.mjs +0 -27
- package/dist/commands/report/render-views.mjs.map +0 -1
- package/dist/commands/report/translate.d.mts +0 -1
- package/dist/commands/report/translate.mjs +0 -33
- package/dist/commands/report/translate.mjs.map +0 -1
- package/runtime/bin/lib/okstra/tmux-pane.sh +0 -40
- package/runtime/bin/lib/okstra-ctl/cmd-batch.sh +0 -59
- package/runtime/bin/lib/okstra-ctl/cmd-list.sh +0 -35
- package/runtime/bin/lib/okstra-ctl/cmd-open.sh +0 -36
- package/runtime/bin/lib/okstra-ctl/cmd-projects.sh +0 -26
- package/runtime/bin/lib/okstra-ctl/cmd-reconcile.sh +0 -29
- package/runtime/bin/lib/okstra-ctl/cmd-reindex.sh +0 -38
- package/runtime/bin/lib/okstra-ctl/cmd-rerun.sh +0 -345
- package/runtime/bin/lib/okstra-ctl/cmd-show.sh +0 -27
- package/runtime/bin/lib/okstra-ctl/cmd-tail.sh +0 -92
- package/runtime/bin/lib/okstra-ctl/main.sh +0 -41
- package/runtime/bin/lib/okstra-ctl/prepare.sh +0 -31
- package/runtime/bin/lib/okstra-ctl/usage.sh +0 -23
- package/runtime/bin/okstra-central.sh +0 -152
- package/runtime/bin/okstra-incremental-carry.py +0 -10
- package/runtime/bin/okstra-incremental-scope.py +0 -10
- package/runtime/bin/okstra-team-reconcile.sh +0 -36
- package/runtime/python/okstra_ctl/agent_prompt_cli.py +0 -1156
- package/runtime/python/okstra_ctl/batch.py +0 -60
- package/runtime/python/okstra_ctl/clarification_items.py +0 -1050
- package/runtime/python/okstra_ctl/container_registry.py +0 -72
- package/runtime/python/okstra_ctl/improvement_assignment.py +0 -61
- package/runtime/python/okstra_ctl/resolver.py +0 -54
- package/runtime/python/okstra_ctl/team_reconcile.py +0 -275
- package/runtime/python/okstra_ctl/tmux.py +0 -134
- package/runtime/python/okstra_ctl/worktree.py +0 -1099
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { runInstalledScript, runPythonModule } from "./python-helper.mjs";
|
|
2
|
+
import { resolvePaths } from "./paths.mjs";
|
|
3
|
+
// 이 명령이 스스로 정하는 플래그. 사용자가 같은 플래그를 주면 주입값과
|
|
4
|
+
// 충돌하므로 파이썬에 닿기 전에 exit 2 로 끊는다.
|
|
5
|
+
function ownedFlags(spec) {
|
|
6
|
+
const fromPrefix = (spec.prefix ?? []).filter((token) => token.startsWith("--"));
|
|
7
|
+
const fromInject = (spec.inject ?? []).map((name) => `--${name}`);
|
|
8
|
+
return [...fromInject, ...fromPrefix];
|
|
9
|
+
}
|
|
10
|
+
function findForbidden(args, owned) {
|
|
11
|
+
return args.find((arg) => owned.some((flag) => arg === flag || arg.startsWith(`${flag}=`)));
|
|
12
|
+
}
|
|
13
|
+
// 레지스트리 한 줄을 실행 가능한 러너로 바꾼다. 명령마다 있던 포워더 파일이
|
|
14
|
+
// 하던 일 — 인자 앞에 고정 argv 를 붙이고 python 을 띄우는 것 — 이 전부다.
|
|
15
|
+
// `--help` 는 파이썬 argparse 에 그대로 도달한다: 도움말의 저자는 파이썬이다.
|
|
16
|
+
export function makePythonRunner(name, spec) {
|
|
17
|
+
const owned = ownedFlags(spec);
|
|
18
|
+
return async (args) => {
|
|
19
|
+
const forbidden = findForbidden(args, owned);
|
|
20
|
+
if (forbidden !== undefined) {
|
|
21
|
+
process.stderr.write(`error: ${forbidden} is set by 'okstra ${name}' itself — remove it from your args\n`);
|
|
22
|
+
return 2;
|
|
23
|
+
}
|
|
24
|
+
const injected = [];
|
|
25
|
+
if (spec.inject?.length) {
|
|
26
|
+
const paths = await resolvePaths();
|
|
27
|
+
for (const which of spec.inject) {
|
|
28
|
+
injected.push(`--${which}`, which === "okstra-bin" ? paths.bin : paths.workspace);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
injected.push(...(spec.prefix ?? []));
|
|
32
|
+
const argv = [...injected, ...args];
|
|
33
|
+
const target = spec.target;
|
|
34
|
+
if ("module" in target) {
|
|
35
|
+
const result = await runPythonModule({
|
|
36
|
+
module: target.module,
|
|
37
|
+
args: argv,
|
|
38
|
+
stdio: "inherit-stdout",
|
|
39
|
+
});
|
|
40
|
+
// runPythonModule 은 spawn 자체가 실패하면 -1 을 준다. 그대로 반환하면
|
|
41
|
+
// process.exit(-1) 이 255 로 나가므로, 설치된 스크립트를 띄우는 쪽과
|
|
42
|
+
// 같은 모양(에러 한 줄 + exit 1)으로 맞춘다.
|
|
43
|
+
if (result.code === -1) {
|
|
44
|
+
process.stderr.write(`error: failed to spawn python3: ${result.stderr}\n`);
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
return result.code;
|
|
48
|
+
}
|
|
49
|
+
return await runInstalledScript({ scriptName: target.script, args: argv });
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=python-command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-command.mjs","sourceRoot":"","sources":["../../src/lib/python-command.mts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type { InstalledScriptOptions,
|
|
1
|
+
import type { InstalledScriptOptions, JsonErrorOptions, ProcessResult, PythonModuleOptions, RuntimePaths } from "./types.mjs";
|
|
2
2
|
export declare function resolveInstalledScript(paths: RuntimePaths, scriptName: string): string | null;
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function runInstalledScript({ scriptName, args, usage, emptyArgsCode }: InstalledScriptOptions): Promise<number>;
|
|
5
|
-
export declare function runInstalledValidator({ validatorName, args }: InstalledValidatorOptions): Promise<number>;
|
|
6
|
-
export declare function runPythonSnippet({ script, args, extraEnv }: PythonSnippetOptions): Promise<ProcessResult>;
|
|
3
|
+
export declare function runInstalledScript({ scriptName, args }: InstalledScriptOptions): Promise<number>;
|
|
7
4
|
export declare function runPythonModule({ module, args, extraEnv, stdio }: PythonModuleOptions): Promise<ProcessResult>;
|
|
8
5
|
export declare function emitJsonError({ stage, reason, extra }: JsonErrorOptions): void;
|
|
@@ -14,16 +14,6 @@ export function resolveInstalledScript(paths, scriptName) {
|
|
|
14
14
|
const dev = resolvePath(repoRoot, "scripts", scriptName);
|
|
15
15
|
return existsSync(dev) ? dev : null;
|
|
16
16
|
}
|
|
17
|
-
export function resolveInstalledValidator(paths, validatorName) {
|
|
18
|
-
// `okstra install` lands the validators tree at ~/.okstra/lib/validators;
|
|
19
|
-
// a checkout that has not been installed still has the in-repo source.
|
|
20
|
-
const installed = join(paths.home, "lib", "validators", validatorName);
|
|
21
|
-
if (existsSync(installed))
|
|
22
|
-
return installed;
|
|
23
|
-
const repoRoot = fileURLToPath(new URL("../..", import.meta.url));
|
|
24
|
-
const dev = resolvePath(repoRoot, "validators", validatorName);
|
|
25
|
-
return existsSync(dev) ? dev : null;
|
|
26
|
-
}
|
|
27
17
|
async function spawnPythonEntry(entry, args, paths) {
|
|
28
18
|
return await new Promise((resolve) => {
|
|
29
19
|
const child = spawn("python3", [entry, ...args], {
|
|
@@ -42,18 +32,9 @@ async function spawnPythonEntry(entry, args, paths) {
|
|
|
42
32
|
// and installed/dev resolution in one place so skills call `okstra <cmd>`
|
|
43
33
|
// instead of emitting `python3 "$HOME/..."` (which breaks `Bash(okstra:*)`
|
|
44
34
|
// permission matching and prompts on every call).
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return emptyArgsCode;
|
|
49
|
-
}
|
|
50
|
-
// Only a bare `--help` / `-h` prints the wrapper usage. A `--help` that
|
|
51
|
-
// follows a subcommand (e.g. `error-log append-observed --help`) must reach
|
|
52
|
-
// the python helper so its own per-subcommand help shows through.
|
|
53
|
-
if (args.length === 1 && (args[0] === "--help" || args[0] === "-h")) {
|
|
54
|
-
process.stdout.write(usage);
|
|
55
|
-
return 0;
|
|
56
|
-
}
|
|
35
|
+
//
|
|
36
|
+
// `--help` 는 가로채지 않는다 — 도움말의 저자는 헬퍼 스크립트의 argparse 다.
|
|
37
|
+
export async function runInstalledScript({ scriptName, args }) {
|
|
57
38
|
const paths = await resolvePaths();
|
|
58
39
|
const entry = resolveInstalledScript(paths, scriptName);
|
|
59
40
|
if (!entry) {
|
|
@@ -62,36 +43,6 @@ export async function runInstalledScript({ scriptName, args, usage, emptyArgsCod
|
|
|
62
43
|
}
|
|
63
44
|
return await spawnPythonEntry(entry, args, paths);
|
|
64
45
|
}
|
|
65
|
-
export async function runInstalledValidator({ validatorName, args }) {
|
|
66
|
-
const paths = await resolvePaths();
|
|
67
|
-
const entry = resolveInstalledValidator(paths, validatorName);
|
|
68
|
-
if (!entry) {
|
|
69
|
-
process.stderr.write(`error: ${validatorName} not found — run 'okstra install' (or 'okstra ensure-installed') first\n`);
|
|
70
|
-
return 1;
|
|
71
|
-
}
|
|
72
|
-
return await spawnPythonEntry(entry, args, paths);
|
|
73
|
-
}
|
|
74
|
-
export async function runPythonSnippet({ script, args = [], extraEnv = {} }) {
|
|
75
|
-
const paths = await resolvePaths();
|
|
76
|
-
return new Promise((resolve) => {
|
|
77
|
-
const child = spawn("python3", ["-c", script, ...args], {
|
|
78
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
79
|
-
env: { ...process.env, PYTHONPATH: buildPythonpath(paths), ...extraEnv },
|
|
80
|
-
});
|
|
81
|
-
// Collect chunks and join once: repeated `s += chunk` is O(n^2) for the
|
|
82
|
-
// large rendered prompts some capture-mode callers stream through here.
|
|
83
|
-
const outChunks = [];
|
|
84
|
-
const errChunks = [];
|
|
85
|
-
child.stdout?.on("data", (b) => outChunks.push(b));
|
|
86
|
-
child.stderr?.on("data", (b) => errChunks.push(b));
|
|
87
|
-
child.on("error", (err) => resolve({ code: -1, stdout: Buffer.concat(outChunks).toString(), stderr: err.message }));
|
|
88
|
-
child.on("close", (code) => resolve({
|
|
89
|
-
code: typeof code === "number" ? code : 1,
|
|
90
|
-
stdout: Buffer.concat(outChunks).toString(),
|
|
91
|
-
stderr: Buffer.concat(errChunks).toString(),
|
|
92
|
-
}));
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
46
|
export async function runPythonModule({ module, args = [], extraEnv = {}, stdio = "inherit-stdout" }) {
|
|
96
47
|
const paths = await resolvePaths();
|
|
97
48
|
return new Promise((resolve) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python-helper.mjs","sourceRoot":"","sources":["../../src/lib/python-helper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"python-helper.mjs","sourceRoot":"","sources":["../../src/lib/python-helper.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface RuntimeBinFile {
|
|
2
|
+
/** repo 기준 경로. `scripts/` 하위 파일 이름과 같아야 한다. */
|
|
3
|
+
readonly name: string;
|
|
4
|
+
/**
|
|
5
|
+
* `okstra <cmd>` 가 runInstalledScript() 로 앞세우는 파이썬 헬퍼인가.
|
|
6
|
+
* preflight 가 이 표시가 붙은 것들이 ~/.okstra/bin 에서 해석되는지 검사한다.
|
|
7
|
+
* tests-js 의 계약 테스트가 이 표시를 실제 `scriptName:` 리터럴과 맞춘다.
|
|
8
|
+
*/
|
|
9
|
+
readonly helper?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** `scripts/` 아래에서 `runtime/bin/` 으로 그대로 배포되는 실행 파일들. */
|
|
12
|
+
export declare const RUNTIME_BIN_FILES: readonly RuntimeBinFile[];
|
|
13
|
+
/** `scripts/` 아래에서 `runtime/python/` 으로 배포되는 파이썬 패키지들. */
|
|
14
|
+
export declare const RUNTIME_PYTHON_PACKAGES: readonly string[];
|
|
15
|
+
/**
|
|
16
|
+
* repo 디렉터리 → runtime 디렉터리. bin/lib 는 okstra.sh 가
|
|
17
|
+
* `$SCRIPT_DIR/lib/okstra/*.sh` 로 source 하므로 python/ 이 아니라 bin/ 아래여야 한다.
|
|
18
|
+
*/
|
|
19
|
+
export declare const RUNTIME_DIR_SYNCS: readonly (readonly [string, string])[];
|
|
20
|
+
/** `okstra install` 이 dev-link 모드에서 개별 심링크로 거는 이름들. */
|
|
21
|
+
export declare const BIN_ENTRYPOINT_NAMES: readonly string[];
|
|
22
|
+
/** preflight 가 ~/.okstra/bin 에서 해석되는지 확인하는 파이썬 헬퍼들. */
|
|
23
|
+
export declare const HELPER_SCRIPT_NAMES: readonly string[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// 배포 payload 의 단일 기준점.
|
|
2
|
+
//
|
|
3
|
+
// 예전에는 같은 이름 목록이 세 곳에 손으로 복사돼 있었다 —
|
|
4
|
+
// tools/build.mjs 의 SYNCS, install.mts 의 BIN_ENTRYPOINTS,
|
|
5
|
+
// helper-scripts.mts 의 HELPER_SCRIPT_NAMES. 셋이 어긋나도 아무것도 잡지 못했고,
|
|
6
|
+
// 실제로 어긋나 있었다(예: report-translate·incremental-* 는 SYNCS 로 배포되지만
|
|
7
|
+
// BIN_ENTRYPOINTS 에는 없어 dev-link 설치에서 심링크되지 않았다).
|
|
8
|
+
//
|
|
9
|
+
// 이제 목록은 여기 하나이고 나머지 셋은 여기서 파생된다.
|
|
10
|
+
/** `scripts/` 아래에서 `runtime/bin/` 으로 그대로 배포되는 실행 파일들. */
|
|
11
|
+
export const RUNTIME_BIN_FILES = Object.freeze([
|
|
12
|
+
{ name: "okstra.sh" },
|
|
13
|
+
{ name: "okstra-codex-exec.sh" },
|
|
14
|
+
{ name: "okstra-claude-exec.sh" },
|
|
15
|
+
{ name: "okstra-antigravity-exec.sh" },
|
|
16
|
+
{ name: "okstra-grok-exec.sh" },
|
|
17
|
+
{ name: "okstra-kimi-exec.sh" },
|
|
18
|
+
{ name: "okstra-provider-exec.py" },
|
|
19
|
+
// 진입 스크립트들이 import 하는 경로 부트스트랩. 이들과 같은
|
|
20
|
+
// 디렉터리에 있어야 `sys.path` 를 고치기 전에 import 된다.
|
|
21
|
+
{ name: "okstra_bootstrap.py" },
|
|
22
|
+
{ name: "okstra-import-check.py" },
|
|
23
|
+
{ name: "okstra-compact-reminder.sh" },
|
|
24
|
+
{ name: "okstra-wrapper-status.py" },
|
|
25
|
+
{ name: "okstra-error-log.py", helper: true },
|
|
26
|
+
{ name: "okstra-inject-report-index.py", helper: true },
|
|
27
|
+
{ name: "okstra-render-final-report.py", helper: true },
|
|
28
|
+
{ name: "okstra-render-report-views.py", helper: true },
|
|
29
|
+
{ name: "okstra-report-translate.py", helper: true },
|
|
30
|
+
{ name: "okstra-spawn-followups.py", helper: true },
|
|
31
|
+
{ name: "okstra-token-usage.py", helper: true },
|
|
32
|
+
]);
|
|
33
|
+
/** `scripts/` 아래에서 `runtime/python/` 으로 배포되는 파이썬 패키지들. */
|
|
34
|
+
export const RUNTIME_PYTHON_PACKAGES = Object.freeze([
|
|
35
|
+
"okstra_project",
|
|
36
|
+
"okstra_ctl",
|
|
37
|
+
"okstra_token_usage",
|
|
38
|
+
"okstra_vendor",
|
|
39
|
+
]);
|
|
40
|
+
/**
|
|
41
|
+
* repo 디렉터리 → runtime 디렉터리. bin/lib 는 okstra.sh 가
|
|
42
|
+
* `$SCRIPT_DIR/lib/okstra/*.sh` 로 source 하므로 python/ 이 아니라 bin/ 아래여야 한다.
|
|
43
|
+
*/
|
|
44
|
+
export const RUNTIME_DIR_SYNCS = Object.freeze([
|
|
45
|
+
["scripts/lib/okstra", "bin/lib/okstra"],
|
|
46
|
+
["agents", "agents"],
|
|
47
|
+
["prompts", "prompts"],
|
|
48
|
+
["schemas", "schemas"],
|
|
49
|
+
["templates", "templates"],
|
|
50
|
+
["validators", "validators"],
|
|
51
|
+
["skills", "skills"],
|
|
52
|
+
]);
|
|
53
|
+
/** `okstra install` 이 dev-link 모드에서 개별 심링크로 거는 이름들. */
|
|
54
|
+
export const BIN_ENTRYPOINT_NAMES = Object.freeze(RUNTIME_BIN_FILES.map((entry) => entry.name));
|
|
55
|
+
/** preflight 가 ~/.okstra/bin 에서 해석되는지 확인하는 파이썬 헬퍼들. */
|
|
56
|
+
export const HELPER_SCRIPT_NAMES = Object.freeze(RUNTIME_BIN_FILES.filter((entry) => entry.helper).map((entry) => entry.name));
|
|
57
|
+
//# sourceMappingURL=runtime-payload.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-payload.mjs","sourceRoot":"","sources":["../../src/lib/runtime-payload.mts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,EAAE;AACF,oCAAoC;AACpC,0DAA0D;AAC1D,iEAAiE;AACjE,gEAAgE;AAChE,kDAAkD;AAClD,EAAE;AACF,kCAAkC;AAalC,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAA8B,MAAM,CAAC,MAAM,CAAC;IACxE,EAAE,IAAI,EAAE,WAAW,EAAE;IACrB,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAChC,EAAE,IAAI,EAAE,uBAAuB,EAAE;IACjC,EAAE,IAAI,EAAE,4BAA4B,EAAE;IACtC,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC/B,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC/B,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnC,uCAAuC;IACvC,2CAA2C;IAC3C,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC/B,EAAE,IAAI,EAAE,wBAAwB,EAAE;IAClC,EAAE,IAAI,EAAE,4BAA4B,EAAE;IACtC,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACpC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7C,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,EAAE,IAAI,EAAE,4BAA4B,EAAE,MAAM,EAAE,IAAI,EAAE;IACpD,EAAE,IAAI,EAAE,2BAA2B,EAAE,MAAM,EAAE,IAAI,EAAE;IACnD,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE;CAChD,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACtE,gBAAgB;IAChB,YAAY;IACZ,oBAAoB;IACpB,eAAe;CAChB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2C,MAAM,CAAC,MAAM,CAAC;IACrF,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;IACxC,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,QAAQ,EAAE,QAAQ,CAAC;CACZ,CAAC,CAAC;AAEZ,uDAAuD;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAsB,MAAM,CAAC,MAAM,CAClE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAC7C,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAsB,MAAM,CAAC,MAAM,CACjE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAC7E,CAAC"}
|
package/dist/lib/types.d.mts
CHANGED
|
@@ -3,7 +3,6 @@ export type CommandRunner = (args: CliArgs) => Promise<number>;
|
|
|
3
3
|
export type CommandCategory = "admin" | "introspection";
|
|
4
4
|
export interface HostCapabilities {
|
|
5
5
|
readonly claudeSkillHandoff?: boolean;
|
|
6
|
-
readonly tmuxAvailable?: boolean;
|
|
7
6
|
}
|
|
8
7
|
export interface RuntimeEnvironment {
|
|
9
8
|
readonly OKSTRA_RUNTIME_HOST?: string;
|
|
@@ -49,13 +48,31 @@ export interface HostResolveOptions {
|
|
|
49
48
|
readonly env?: RuntimeEnvironment;
|
|
50
49
|
readonly capabilities?: HostCapabilities;
|
|
51
50
|
}
|
|
52
|
-
export
|
|
51
|
+
export type PythonTarget = {
|
|
52
|
+
readonly module: string;
|
|
53
|
+
} | {
|
|
54
|
+
readonly script: string;
|
|
55
|
+
};
|
|
56
|
+
export type PythonInjectedPath = "workspace-root" | "okstra-bin";
|
|
57
|
+
export interface PythonCommandSpec {
|
|
58
|
+
readonly target: PythonTarget;
|
|
59
|
+
readonly prefix?: readonly string[];
|
|
60
|
+
readonly inject?: readonly PythonInjectedPath[];
|
|
61
|
+
}
|
|
62
|
+
export interface NodeCommandDefinition {
|
|
53
63
|
readonly name: string;
|
|
54
64
|
readonly module: string;
|
|
55
65
|
readonly export: string;
|
|
56
66
|
readonly category: CommandCategory;
|
|
57
67
|
readonly summary: readonly string[];
|
|
58
68
|
}
|
|
69
|
+
export interface PythonCommandDefinition {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
readonly python: PythonCommandSpec;
|
|
72
|
+
readonly category: CommandCategory;
|
|
73
|
+
readonly summary: readonly string[];
|
|
74
|
+
}
|
|
75
|
+
export type CommandDefinition = NodeCommandDefinition | PythonCommandDefinition;
|
|
59
76
|
export interface RuntimePaths {
|
|
60
77
|
readonly agents: string;
|
|
61
78
|
readonly workspace: string;
|
|
@@ -78,20 +95,9 @@ export interface PythonModuleOptions {
|
|
|
78
95
|
readonly extraEnv?: Readonly<Record<string, string | undefined>>;
|
|
79
96
|
readonly stdio?: "capture" | "inherit-stdout";
|
|
80
97
|
}
|
|
81
|
-
export interface PythonSnippetOptions {
|
|
82
|
-
readonly script: string;
|
|
83
|
-
readonly args?: CliArgs;
|
|
84
|
-
readonly extraEnv?: Readonly<Record<string, string | undefined>>;
|
|
85
|
-
}
|
|
86
98
|
export interface InstalledScriptOptions {
|
|
87
99
|
readonly scriptName: string;
|
|
88
100
|
readonly args: CliArgs;
|
|
89
|
-
readonly usage: string;
|
|
90
|
-
readonly emptyArgsCode?: number;
|
|
91
|
-
}
|
|
92
|
-
export interface InstalledValidatorOptions {
|
|
93
|
-
readonly validatorName: string;
|
|
94
|
-
readonly args: CliArgs;
|
|
95
101
|
}
|
|
96
102
|
export interface JsonErrorOptions {
|
|
97
103
|
readonly stage: string;
|
|
@@ -119,6 +125,11 @@ export interface InstalledAssets {
|
|
|
119
125
|
readonly schemas: boolean;
|
|
120
126
|
readonly validators: boolean;
|
|
121
127
|
}
|
|
128
|
+
export interface SkillTarget {
|
|
129
|
+
readonly provider: string;
|
|
130
|
+
readonly root: string;
|
|
131
|
+
readonly skills: readonly string[];
|
|
132
|
+
}
|
|
122
133
|
export interface RuntimeManifest {
|
|
123
134
|
readonly schemaVersion: number;
|
|
124
135
|
readonly installedAt: string;
|
|
@@ -21,7 +21,6 @@ The task manifest, task index, instruction set, runs, and history are collected
|
|
|
21
21
|
- `clarification-response.md`, the user's carried-in clarification answers, when the run has any
|
|
22
22
|
- `selected-direction.json`, the validated implementation direction snapshot for a new `implementation-planning` run
|
|
23
23
|
- `final-report-schema.json`, `final-report-template.md`
|
|
24
|
-
- canonical `lead-execution-prompt.md` plus the `claude-execution-prompt.md` compatibility alias
|
|
25
24
|
- `runs/<task-type>/`
|
|
26
25
|
- `manifests/run-manifest-<task-type>-<seq>.json`
|
|
27
26
|
- `state/team-state-<task-type>-<seq>.json`
|
|
@@ -57,7 +56,7 @@ The representative files below are all relative to the resolved run directory (`
|
|
|
57
56
|
|
|
58
57
|
- `manifests/run-manifest-<task-type>-<seq>.json`
|
|
59
58
|
- `state/team-state-<task-type>-<seq>.json`
|
|
60
|
-
- `prompts/lead-execution-prompt-<task-type>-<seq>.md` *(
|
|
59
|
+
- `prompts/lead-execution-prompt-<task-type>-<seq>.md` *(the only lead prompt file; the run manifest's `resources.claudeExecutionPromptPath` is a key alias resolving to it)*
|
|
61
60
|
- `prompts/<worker>-worker-prompt-<task-type>-<seq>.md`
|
|
62
61
|
- `prompts/<prompt>.md.meta.json` *(invocation identity, assignment, duty identity, source paths, and the five catalog/assignment/duty/instruction/prompt digests)*
|
|
63
62
|
- `prompts/duty-contracts-<task-type>-<seq>/` *(run-scoped snapshot; dispatch verification rejects drift from its catalog digest)*
|
|
@@ -171,6 +170,24 @@ Each wrapper `<prompt>.log` beside a persisted `<prompt>.md` is a growing execut
|
|
|
171
170
|
When the same non-stage task type runs again, it reuses the same `runs/<task-type>/` run directory. Reruns of `implementation` and single-stage `final-verification` reuse their resolved `runs/<task-type>/stage-<N>/` run directories. In both cases, existing artifacts are not overwritten because run-level filenames are separated by `-<task-type>-<seq>` suffixes within type-specific subdirectories. Because `<seq>` is scanned independently for each category directory (`manifests/`, `prompts/`, `reports/`, `status/`, `state/`, `sessions/`, `worker-results/`) beneath the resolved run directory, values may differ by category even within the same run.
|
|
172
171
|
If flat legacy artifacts remain at the top level of a task-type run directory, the next execution automatically moves them into the corresponding type-specific subdirectories.
|
|
173
172
|
|
|
173
|
+
#### Rerun archive
|
|
174
|
+
|
|
175
|
+
Because a rerun reuses the run directory, prior-sequence artifacts pile up in place. A task that re-ran `implementation-planning` twenty-four times left over two hundred files in one `worker-results/`, and checks that glob that directory counted another run's files as this run's — their failure counts grew from 30 to 140 across the reruns.
|
|
176
|
+
|
|
177
|
+
Prepare therefore moves prior-sequence artifacts out of the two directories no consumer reads across sequences:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
runs/<task-type>/archive/run-<seq>/worker-results/…
|
|
181
|
+
runs/<task-type>/archive/run-<seq>/prompts/…
|
|
182
|
+
runs/<task-type>/archive/README.md
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- **Rotated:** `worker-results/` and `prompts/`. Their only readers (`run_audit`, `context_cost`, the plan-body provenance check) scope themselves to the current run's sequence already; `okstra log-report` still counts archived wrapper transcripts because it matches on path components rather than depth.
|
|
186
|
+
- **Not rotated:** `reports/`, `manifests/`, `state/`, `status/`, `sessions/`, `logs/`, `carry/`, and `user-responses/`. `state/` is read across sequences by `okstra plan-items seed --prior-state`, by the prior-planning summary, and by `okstra time-report`; `logs/` is globbed one level deep as `runs/*/logs/errors-*.jsonl` by `okstra error-report`, `okstra error-zip`, and prepare's own prior-run error digest, so an archived path would silently drop from all three.
|
|
187
|
+
- **Retention floor:** the sequence the latest published report's run manifest recorded for that category (`runSequencesByCategory`). That sequence and everything above it stay in place; only older sequences move. When the report-to-manifest mapping cannot be resolved, nothing moves.
|
|
188
|
+
- The move never deletes, never overwrites an existing archive entry, and never touches an entry without a `-<task-type>-<seq>` suffix (`prompts/.agent-invocations/` stays put). Because the retention floor is always at or below the directory's highest sequence, sequence allocation still sees the same maximum and stays monotonic.
|
|
189
|
+
- `archive/README.md` is rewritten on each rotation with what moved, from which sequence, the retention floor used, and how to restore.
|
|
190
|
+
|
|
174
191
|
### 3. Project-level discovery and installed skill assets
|
|
175
192
|
Shared project discovery pointers are created at the following paths.
|
|
176
193
|
|
|
@@ -253,8 +270,7 @@ Examples of key fields:
|
|
|
253
270
|
- `workflow.currentPhaseState`
|
|
254
271
|
- `workflow.phaseStates`
|
|
255
272
|
- `workflow.lastCompletedPhase`
|
|
256
|
-
- `workflow.nextRecommendedPhase` *(object `{phase, status, rationale}`; `status` is `ready` / `pending` / `blocked` / `terminal`.
|
|
257
|
-
- `workflow.nextRecommendedPhaseCorrection` *(present only when Phase 7 validation replaced the authored pointer — `{authored, applied}`)*
|
|
273
|
+
- `workflow.nextRecommendedPhase` *(object `{phase, status, rationale}`; `status` is `ready` / `pending` / `blocked` / `terminal`. `phase` is non-empty only under `ready` — a property of the projection, not a constraint the struct enforces: `prepare` lowers a `ready` pointer to `pending` and keeps its `phase`, so a stored non-`ready` pointer that still names a phase is a normal manifest state. Read `status` to decide whether anything can be launched.)*
|
|
258
274
|
- `workflow.awaitingApproval`
|
|
259
275
|
- `workflow.lastSafeCheckpoint`
|
|
260
276
|
- `phaseOutcome` *(artifact-derived semantic phase outcome; for example, when the implementation carry proves that all stages passed, the implementation phase outcome may be recorded as completed even if run contract validation failures remain)*
|
|
@@ -380,7 +396,7 @@ Convergence keeps its decision trail under the run's `state/` directory:
|
|
|
380
396
|
- `state/convergence-work-<task-type>-<seq>.json` — engine-owned queue, finding state, and round history.
|
|
381
397
|
- `state/convergence-round-<N>-plan-<task-type>-<seq>.json` — immutable roster-aware dispatch plan for one round.
|
|
382
398
|
- `state/convergence-round-<N>-results-<task-type>-<seq>.json` — adapter outcomes and parsed votes supplied to the reducer.
|
|
383
|
-
- `state/convergence-<task-type>-<seq>.json` — validated terminal schema v1.
|
|
399
|
+
- `state/convergence-<task-type>-<seq>.json` — validated terminal schema v1.4 state consumed by reporting and Phase 7. Historical v1.0-v1.3 artifacts are read as they are.
|
|
384
400
|
- `state/migrations/` — byte-for-byte archives of invalid or partial legacy state replaced during an explicit Round 0 restart.
|
|
385
401
|
|
|
386
402
|
A valid terminal legacy final is reused unchanged, and a matching valid working state resumes. Invalid new-engine working state fails closed unless seeding receives `--restart-from-round0`; an existing final can be replaced only when its migration archive still matches its original bytes.
|