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
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { runInstalledScript } from "../../lib/python-helper.mjs";
|
|
2
|
-
const USAGE = `okstra inject-report-index — add the top-of-report Index + scroll anchors to a report
|
|
3
|
-
|
|
4
|
-
Wraps the python helper (\`okstra-inject-report-index.py\`) installed under
|
|
5
|
-
\`~/.okstra/bin/\` so skills call \`okstra inject-report-index\` instead of
|
|
6
|
-
emitting a \`python3 "$HOME/..."\` invocation (which breaks \`Bash(okstra:*)\`
|
|
7
|
-
permission matching and prompts on every call).
|
|
8
|
-
|
|
9
|
-
Usage:
|
|
10
|
-
okstra inject-report-index <markdown-path> [--report-language <en|ko>]
|
|
11
|
-
|
|
12
|
-
All arguments are forwarded verbatim to the python helper.
|
|
13
|
-
`;
|
|
14
|
-
export async function run(args) {
|
|
15
|
-
return runInstalledScript({
|
|
16
|
-
scriptName: "okstra-inject-report-index.py",
|
|
17
|
-
args,
|
|
18
|
-
usage: USAGE,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=inject-report-index.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inject-report-index.mjs","sourceRoot":"","sources":["../../../src/commands/report/inject-report-index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;CAWb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC;QACxB,UAAU,EAAE,+BAA+B;QAC3C,IAAI;QACJ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function run(args: readonly string[]): Promise<number>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { runInstalledScript } from "../../lib/python-helper.mjs";
|
|
2
|
-
const USAGE = `okstra render-final-report — render the full reading copy sibling of final-report data.json
|
|
3
|
-
|
|
4
|
-
Wraps the python helper (\`okstra-render-final-report.py\`) installed under
|
|
5
|
-
\`~/.okstra/bin/\` so skills call \`okstra render-final-report\` instead of
|
|
6
|
-
emitting a \`python3 "$HOME/..."\` invocation (which breaks \`Bash(okstra:*)\`
|
|
7
|
-
permission matching and prompts on every call).
|
|
8
|
-
|
|
9
|
-
Usage:
|
|
10
|
-
okstra render-final-report <path-to-final-report.data.json>
|
|
11
|
-
|
|
12
|
-
The argument is forwarded verbatim to the Python helper. schemaVersion 1.0
|
|
13
|
-
keeps the legacy Markdown template; schemaVersion 2.0 selects the full reading
|
|
14
|
-
copy template. Human HTML is rendered separately from the same data.json.
|
|
15
|
-
`;
|
|
16
|
-
export async function run(args) {
|
|
17
|
-
return runInstalledScript({
|
|
18
|
-
scriptName: "okstra-render-final-report.py",
|
|
19
|
-
args,
|
|
20
|
-
usage: USAGE,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=render-final-report.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render-final-report.mjs","sourceRoot":"","sources":["../../../src/commands/report/render-final-report.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;;CAab,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC;QACxB,UAAU,EAAE,+BAA+B;QAC3C,IAAI;QACJ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function run(args: readonly string[]): Promise<number>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { runInstalledScript } from "../../lib/python-helper.mjs";
|
|
2
|
-
const USAGE = `okstra render-views — render the self-contained HTML view of a final-report
|
|
3
|
-
|
|
4
|
-
A thin spawn shim over \`scripts/okstra-render-report-views.py\` (installed
|
|
5
|
-
at \`$HOME/.okstra/bin/okstra-render-report-views.py\`). Resolves the final-
|
|
6
|
-
report data and Markdown pair, then writes a single sibling:
|
|
7
|
-
|
|
8
|
-
<stem>.html — single-file self-contained human view; schema v2 is
|
|
9
|
-
always generated, while v1/quick remains conditional
|
|
10
|
-
|
|
11
|
-
Usage:
|
|
12
|
-
okstra render-views <path-to-final-report.data.json|path-to-final-report.md>
|
|
13
|
-
[--task-key <key>] [--task-type <type>] [--seq <NNN>]
|
|
14
|
-
[--source-report <project-relative-path>]
|
|
15
|
-
|
|
16
|
-
Schema v2 data is rendered directly into its task-specific HTML view and is
|
|
17
|
-
always generated. Schema v1 and quick reports keep the legacy conditional
|
|
18
|
-
Markdown view. Optional flags override inferred report metadata.
|
|
19
|
-
`;
|
|
20
|
-
export async function run(args) {
|
|
21
|
-
return runInstalledScript({
|
|
22
|
-
scriptName: "okstra-render-report-views.py",
|
|
23
|
-
args,
|
|
24
|
-
usage: USAGE,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=render-views.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render-views.mjs","sourceRoot":"","sources":["../../../src/commands/report/render-views.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;CAiBb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC;QACxB,UAAU,EAAE,+BAA+B;QAC3C,IAAI;QACJ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function run(args: readonly string[]): Promise<number>;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { runInstalledScript } from "../../lib/python-helper.mjs";
|
|
2
|
-
const USAGE = `okstra report-translate — build and verify a final-report translation sidecar
|
|
3
|
-
|
|
4
|
-
A thin spawn shim over \`scripts/okstra-report-translate.py\` (installed at
|
|
5
|
-
\`$HOME/.okstra/bin/okstra-report-translate.py\`).
|
|
6
|
-
|
|
7
|
-
The final-report data.json is authored in English and stays the SSOT. When the
|
|
8
|
-
resolved report language is not English, Phase 7 dispatches a translator that
|
|
9
|
-
writes a sidecar beside the report; \`render-views\` overlays it so only the
|
|
10
|
-
human HTML is localized.
|
|
11
|
-
|
|
12
|
-
Usage:
|
|
13
|
-
okstra report-translate extract <path-to-final-report.data.json>
|
|
14
|
-
okstra report-translate source --run-manifest <path>
|
|
15
|
-
okstra report-translate write --run-manifest <path> --source-digest <sha256> --translations <markdown>
|
|
16
|
-
okstra report-translate check-data --run-manifest <path>
|
|
17
|
-
Write <stem>.translation-source.json — every pointer the report holds a
|
|
18
|
-
translatable string at, paired with its English text. The translator
|
|
19
|
-
fills in the values, so a sidecar cannot cite a path the report lacks.
|
|
20
|
-
|
|
21
|
-
okstra report-translate check <path-to-final-report.i18n.<lang>.json>
|
|
22
|
-
Resolve every pointer in a filled sidecar against the report it names
|
|
23
|
-
and report what is still English. Exits non-zero on a pointer that
|
|
24
|
-
resolves nowhere — the translator's own gate before it returns.
|
|
25
|
-
`;
|
|
26
|
-
export async function run(args) {
|
|
27
|
-
return runInstalledScript({
|
|
28
|
-
scriptName: "okstra-report-translate.py",
|
|
29
|
-
args,
|
|
30
|
-
usage: USAGE,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=translate.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translate.mjs","sourceRoot":"","sources":["../../../src/commands/report/translate.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,OAAO,kBAAkB,CAAC;QACxB,UAAU,EAAE,4BAA4B;QACxC,IAAI;QACJ,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Resolve the tmux pane that the CURRENT process actually runs in.
|
|
3
|
-
#
|
|
4
|
-
# Why this exists: Claude Code's Bash tool strips $TMUX and $TMUX_PANE, so a
|
|
5
|
-
# bare `tmux display-message -p '#{pane_id}'` does NOT return the caller's pane
|
|
6
|
-
# — it returns the pane of the most-recently-active tmux *client*, which (when
|
|
7
|
-
# the user has several attached sessions) is frequently a DIFFERENT session
|
|
8
|
-
# than the one the okstra run lives in. Earlier trace-pane fixes all trusted
|
|
9
|
-
# `display-message` and therefore mis-placed (or dropped) the tail pane.
|
|
10
|
-
#
|
|
11
|
-
# This resolver instead walks the process's own ancestor PIDs and matches them
|
|
12
|
-
# against the tmux server's pane_pids. That is deterministic and correct
|
|
13
|
-
# regardless of $TMUX/$TMUX_PANE or which client is active: when the process is
|
|
14
|
-
# a descendant of a tmux pane's shell it finds exactly that pane; when it is not
|
|
15
|
-
# inside any tmux pane (e.g. Claude launched from the macOS GUI app) no ancestor
|
|
16
|
-
# matches and the function prints nothing.
|
|
17
|
-
#
|
|
18
|
-
# Usage: pane="$(okstra_resolve_caller_pane)" # empty => not in a tmux pane
|
|
19
|
-
# Optional arg: a starting PID (defaults to $$) — used by the regression test.
|
|
20
|
-
# bash 3.2 safe (no associative arrays).
|
|
21
|
-
okstra_resolve_caller_pane() {
|
|
22
|
-
command -v tmux >/dev/null 2>&1 || return 0
|
|
23
|
-
local panes
|
|
24
|
-
panes="$(tmux list-panes -a -F '#{pane_pid} #{pane_id}' 2>/dev/null)" || return 0
|
|
25
|
-
[ -n "$panes" ] || return 0
|
|
26
|
-
|
|
27
|
-
local pid="${1:-$$}"
|
|
28
|
-
local depth=0
|
|
29
|
-
local hit
|
|
30
|
-
while [ -n "$pid" ] && [ "$pid" != "0" ] && [ "$depth" -lt 16 ]; do
|
|
31
|
-
hit="$(printf '%s\n' "$panes" | awk -v p="$pid" '$1==p {print $2; exit}')"
|
|
32
|
-
if [ -n "$hit" ]; then
|
|
33
|
-
printf '%s\n' "$hit"
|
|
34
|
-
return 0
|
|
35
|
-
fi
|
|
36
|
-
pid="$(ps -o ppid= -p "$pid" 2>/dev/null | tr -d ' ')"
|
|
37
|
-
depth=$((depth + 1))
|
|
38
|
-
done
|
|
39
|
-
return 0
|
|
40
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_batch() {
|
|
4
|
-
if [[ $# -lt 1 ]]; then
|
|
5
|
-
printf 'batch: missing subcommand (list|status)\n' >&2; exit 2
|
|
6
|
-
fi
|
|
7
|
-
local sub="$1"; shift
|
|
8
|
-
case "$sub" in
|
|
9
|
-
list)
|
|
10
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" python3 - <<'PY'
|
|
11
|
-
import json, os
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
home = Path(os.environ["OKSTRA_HOME_RESOLVED"])
|
|
14
|
-
batches = sorted((home / "batches").glob("*.json"))
|
|
15
|
-
print(f"{'BATCH-ID':<24} {'CREATED':<22} {'SPAWNED':>7} {'SKIPPED':>7}")
|
|
16
|
-
for b in batches:
|
|
17
|
-
m = json.loads(b.read_text())
|
|
18
|
-
s = m.get("summary", {})
|
|
19
|
-
print(f"{m['batchId']:<24} {m['createdAt']:<22} "
|
|
20
|
-
f"{s.get('spawned', 0):>7} {s.get('skipped', 0):>7}")
|
|
21
|
-
PY
|
|
22
|
-
;;
|
|
23
|
-
status)
|
|
24
|
-
if [[ $# -lt 1 ]]; then
|
|
25
|
-
printf 'batch status: missing <batch-id>\n' >&2; exit 2
|
|
26
|
-
fi
|
|
27
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
28
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
29
|
-
OK_BID="$1" python3 - <<'PY'
|
|
30
|
-
import json, os, sys
|
|
31
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
32
|
-
from pathlib import Path
|
|
33
|
-
from okstra_ctl import find_row_by_run_id
|
|
34
|
-
home = Path(os.environ["OKSTRA_HOME_RESOLVED"])
|
|
35
|
-
target = home / "batches" / f"{os.environ['OK_BID']}.json"
|
|
36
|
-
if not target.is_file():
|
|
37
|
-
print(f"batch: not found: {os.environ['OK_BID']}", file=sys.stderr); sys.exit(2)
|
|
38
|
-
m = json.loads(target.read_text())
|
|
39
|
-
print(f"batchId : {m['batchId']}")
|
|
40
|
-
print(f"createdAt : {m['createdAt']}")
|
|
41
|
-
print(f"summary : {m['summary']}")
|
|
42
|
-
print()
|
|
43
|
-
print(f"{'SPAWN':<10} {'LIVE':<11} {'NEW-RUN-ID':<55} {'SESSION-NAME'}")
|
|
44
|
-
for it in m["items"]:
|
|
45
|
-
spawn_status = it["status"]
|
|
46
|
-
new_run_id = it.get("newRunId") or "-"
|
|
47
|
-
# 현재 인덱스(active+recent+archive)에서 live 상태를 조회한다.
|
|
48
|
-
live = "-"
|
|
49
|
-
if it.get("newRunId"):
|
|
50
|
-
live_row = find_row_by_run_id(home, it["newRunId"])
|
|
51
|
-
if live_row is not None:
|
|
52
|
-
live = live_row.get("status", "-")
|
|
53
|
-
print(f"{spawn_status:<10} {live:<11} "
|
|
54
|
-
f"{new_run_id:<55} {it.get('sessionName') or '-'}")
|
|
55
|
-
PY
|
|
56
|
-
;;
|
|
57
|
-
*) printf 'batch: unknown subcommand: %s\n' "$sub" >&2; exit 2 ;;
|
|
58
|
-
esac
|
|
59
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_list() {
|
|
4
|
-
local project="all" task_group="all" status="all" since="" limit="0"
|
|
5
|
-
local include_archive="false"
|
|
6
|
-
while [[ $# -gt 0 ]]; do
|
|
7
|
-
case "$1" in
|
|
8
|
-
--project) project="$2"; shift 2 ;;
|
|
9
|
-
--task-group) task_group="$2"; shift 2 ;;
|
|
10
|
-
--status) status="$2"; shift 2 ;;
|
|
11
|
-
--since) since="$2"; shift 2 ;;
|
|
12
|
-
--limit) limit="$2"; shift 2 ;;
|
|
13
|
-
--include-archive) include_archive="true"; shift ;;
|
|
14
|
-
*) printf 'list: unknown option: %s\n' "$1" >&2; exit 2 ;;
|
|
15
|
-
esac
|
|
16
|
-
done
|
|
17
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
18
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
19
|
-
OK_PROJECT="$project" OK_TG="$task_group" OK_STATUS="$status" \
|
|
20
|
-
OK_SINCE="$since" OK_LIMIT="$limit" OK_ARC="$include_archive" \
|
|
21
|
-
python3 - <<'PY'
|
|
22
|
-
import os, sys
|
|
23
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
24
|
-
from pathlib import Path
|
|
25
|
-
from okstra_ctl import list_runs, format_runs_table
|
|
26
|
-
rows = list_runs(
|
|
27
|
-
Path(os.environ["OKSTRA_HOME_RESOLVED"]),
|
|
28
|
-
project=os.environ["OK_PROJECT"], task_group=os.environ["OK_TG"],
|
|
29
|
-
status=os.environ["OK_STATUS"], since=os.environ["OK_SINCE"],
|
|
30
|
-
limit=int(os.environ["OK_LIMIT"]),
|
|
31
|
-
include_archive=os.environ["OK_ARC"] == "true",
|
|
32
|
-
)
|
|
33
|
-
print(format_runs_table(rows), end="")
|
|
34
|
-
PY
|
|
35
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_open() {
|
|
4
|
-
if [[ $# -lt 1 ]]; then
|
|
5
|
-
printf 'open: missing <runId-or-prefix>\n' >&2; exit 2
|
|
6
|
-
fi
|
|
7
|
-
local resolved
|
|
8
|
-
resolved="$(OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
9
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
10
|
-
OK_QUERY="$1" python3 - <<'PY'
|
|
11
|
-
import os, sys
|
|
12
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
13
|
-
from pathlib import Path
|
|
14
|
-
from okstra_ctl import resolve_run_id, find_row_by_run_id, absolute_final_report_path, ResolveError
|
|
15
|
-
home = Path(os.environ["OKSTRA_HOME_RESOLVED"])
|
|
16
|
-
try:
|
|
17
|
-
rid = resolve_run_id(home, os.environ["OK_QUERY"])
|
|
18
|
-
except ResolveError as e:
|
|
19
|
-
print(f"open: {e}", file=sys.stderr); sys.exit(2)
|
|
20
|
-
row = find_row_by_run_id(home, rid)
|
|
21
|
-
abs_path = absolute_final_report_path(row) if row else None
|
|
22
|
-
if abs_path is None or not abs_path.is_file():
|
|
23
|
-
print(f"open: final report not found", file=sys.stderr); sys.exit(2)
|
|
24
|
-
print(str(abs_path))
|
|
25
|
-
PY
|
|
26
|
-
)"
|
|
27
|
-
if [[ -z "$resolved" ]]; then exit 2; fi
|
|
28
|
-
# $EDITOR 가 설정되어 있으면 그것으로 열고, 없으면 경로만 출력한다.
|
|
29
|
-
# EDITOR 는 보통 'code -w' 처럼 인자를 포함할 수 있어 단어 분리해
|
|
30
|
-
# exec 해야 한다(따옴표 안에 두면 단일 명령어로 잘못 해석됨).
|
|
31
|
-
if [[ -n "${EDITOR:-}" ]]; then
|
|
32
|
-
# shellcheck disable=SC2086
|
|
33
|
-
exec ${EDITOR} "$resolved"
|
|
34
|
-
fi
|
|
35
|
-
printf '%s\n' "$resolved"
|
|
36
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_projects() {
|
|
4
|
-
local sort_by="recent" only_active="false"
|
|
5
|
-
while [[ $# -gt 0 ]]; do
|
|
6
|
-
case "$1" in
|
|
7
|
-
--sort) sort_by="$2"; shift 2 ;;
|
|
8
|
-
--active) only_active="true"; shift ;;
|
|
9
|
-
*) printf 'projects: unknown option: %s\n' "$1" >&2; exit 2 ;;
|
|
10
|
-
esac
|
|
11
|
-
done
|
|
12
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
13
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
14
|
-
OKSTRA_SORT_BY="$sort_by" \
|
|
15
|
-
OKSTRA_ONLY_ACTIVE="$only_active" \
|
|
16
|
-
python3 - <<'PY'
|
|
17
|
-
import os, sys
|
|
18
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
19
|
-
from pathlib import Path
|
|
20
|
-
from okstra_ctl import list_projects, format_projects_table
|
|
21
|
-
items = list_projects(Path(os.environ["OKSTRA_HOME_RESOLVED"]),
|
|
22
|
-
only_active=os.environ["OKSTRA_ONLY_ACTIVE"] == "true",
|
|
23
|
-
sort_by=os.environ["OKSTRA_SORT_BY"])
|
|
24
|
-
print(format_projects_table(items), end="")
|
|
25
|
-
PY
|
|
26
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_reconcile() {
|
|
4
|
-
# `okstra-ctl reconcile [--project <id|all>]`. dispatcher 가 이미 호출한
|
|
5
|
-
# _okstra_ctl_prepare 의 reconcile 은 unscoped 이므로, 여기서는 사용자
|
|
6
|
-
# --project 필터를 적용해 한 번 더 호출한다.
|
|
7
|
-
local project="all"
|
|
8
|
-
while [[ $# -gt 0 ]]; do
|
|
9
|
-
case "$1" in
|
|
10
|
-
--project) project="$2"; shift 2 ;;
|
|
11
|
-
*) printf 'reconcile: unknown option: %s\n' "$1" >&2; exit 2 ;;
|
|
12
|
-
esac
|
|
13
|
-
done
|
|
14
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
15
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
16
|
-
OK_PROJECT="$project" \
|
|
17
|
-
python3 - <<'PY'
|
|
18
|
-
import os, sys
|
|
19
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
20
|
-
from pathlib import Path
|
|
21
|
-
from okstra_ctl import reconcile_active, reconcile_recent
|
|
22
|
-
target = os.environ["OK_PROJECT"]
|
|
23
|
-
home = Path(os.environ["OKSTRA_HOME_RESOLVED"])
|
|
24
|
-
scope = None if target == "all" else target
|
|
25
|
-
reconcile_active(home, project=scope)
|
|
26
|
-
reconcile_recent(home, project=scope)
|
|
27
|
-
PY
|
|
28
|
-
printf 'reconcile complete\n'
|
|
29
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# shellcheck shell=bash
|
|
2
|
-
|
|
3
|
-
_okstra_ctl_reindex() {
|
|
4
|
-
local project="all"
|
|
5
|
-
while [[ $# -gt 0 ]]; do
|
|
6
|
-
case "$1" in
|
|
7
|
-
--project) project="$2"; shift 2 ;;
|
|
8
|
-
*) printf 'reindex: unknown option: %s\n' "$1" >&2; exit 2 ;;
|
|
9
|
-
esac
|
|
10
|
-
done
|
|
11
|
-
OKSTRA_HOME_RESOLVED="$(okstra_central_home)" \
|
|
12
|
-
OKSTRA_CTL_LIB_DIR="$SCRIPT_DIR" \
|
|
13
|
-
OK_PROJECT="$project" \
|
|
14
|
-
python3 - <<'PY'
|
|
15
|
-
import os, sys
|
|
16
|
-
sys.path.insert(0, os.environ["OKSTRA_CTL_LIB_DIR"])
|
|
17
|
-
from pathlib import Path
|
|
18
|
-
from okstra_ctl import (discover_project_roots, backfill_project,
|
|
19
|
-
mark_backfilled, central_lock)
|
|
20
|
-
home = Path(os.environ["OKSTRA_HOME_RESOLVED"])
|
|
21
|
-
target = os.environ["OK_PROJECT"]
|
|
22
|
-
total = 0
|
|
23
|
-
# 중앙 락으로 보호 — record_start/reconcile 와 같은 lock 위에서 직렬화하여
|
|
24
|
-
# projects/<id>/meta.json 의 read-modify-write 가 손실되지 않게 한다.
|
|
25
|
-
with central_lock(home):
|
|
26
|
-
# 신규 모델: discover_project_roots 는 ~/.okstra/projects/*/meta.json 을
|
|
27
|
-
# 스캔한다(과거 examples/projects/*.conf.sh 모델 폐기).
|
|
28
|
-
for pid, root in discover_project_roots(home):
|
|
29
|
-
if target != "all" and pid != target:
|
|
30
|
-
continue
|
|
31
|
-
n = backfill_project(home, pid, Path(root))
|
|
32
|
-
print(f"{pid}: {n} new run(s) backfilled")
|
|
33
|
-
total += n
|
|
34
|
-
if target == "all":
|
|
35
|
-
mark_backfilled(home)
|
|
36
|
-
print(f"total: {total}")
|
|
37
|
-
PY
|
|
38
|
-
}
|