okstra 0.179.2 → 0.183.2
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.mjs +30 -2
- package/dist/cli-registry.mjs.map +1 -1
- package/dist/commands/execute/incremental-carry.mjs +9 -8
- package/dist/commands/execute/incremental-carry.mjs.map +1 -1
- package/dist/commands/execute/plan-verify.mjs +3 -1
- package/dist/commands/execute/plan-verify.mjs.map +1 -1
- package/dist/commands/execute/render-bundle.d.mts +4 -2
- package/dist/commands/execute/render-bundle.mjs +46 -5
- package/dist/commands/execute/render-bundle.mjs.map +1 -1
- package/dist/commands/execute/run.mjs +11 -3
- package/dist/commands/execute/run.mjs.map +1 -1
- package/dist/commands/inspect/model-io.d.mts +1 -0
- package/dist/commands/inspect/model-io.mjs +25 -0
- package/dist/commands/inspect/model-io.mjs.map +1 -0
- package/dist/commands/inspect/stage-map.mjs +29 -8
- package/dist/commands/inspect/stage-map.mjs.map +1 -1
- package/dist/commands/inspect/task-list.mjs +52 -6
- package/dist/commands/inspect/task-list.mjs.map +1 -1
- package/dist/commands/inspect/user-response.mjs +14 -4
- package/dist/commands/inspect/user-response.mjs.map +1 -1
- package/dist/commands/lifecycle/check-project.d.mts +1 -0
- package/dist/commands/lifecycle/check-project.mjs +69 -50
- package/dist/commands/lifecycle/check-project.mjs.map +1 -1
- package/dist/commands/lifecycle/contract-check.d.mts +1 -0
- package/dist/commands/lifecycle/contract-check.mjs +18 -0
- package/dist/commands/lifecycle/contract-check.mjs.map +1 -0
- package/dist/commands/lifecycle/preflight.mjs +154 -51
- package/dist/commands/lifecycle/preflight.mjs.map +1 -1
- package/dist/commands/pr/pr.d.mts +1 -0
- package/dist/commands/pr/pr.mjs +19 -1
- package/dist/commands/pr/pr.mjs.map +1 -1
- package/dist/commands/report/agent-activity.mjs +2 -2
- package/dist/commands/report/approval-decision.d.mts +1 -0
- package/dist/commands/report/approval-decision.mjs +21 -0
- package/dist/commands/report/approval-decision.mjs.map +1 -0
- package/dist/commands/report/design-snapshot.d.mts +1 -0
- package/dist/commands/report/design-snapshot.mjs +19 -0
- package/dist/commands/report/design-snapshot.mjs.map +1 -0
- package/dist/commands/report/translate.mjs +3 -0
- package/dist/commands/report/translate.mjs.map +1 -1
- package/dist/lib/host-registry-client.mjs +13 -9
- package/dist/lib/host-registry-client.mjs.map +1 -1
- package/docs/architecture/storage-model.md +1 -1
- package/docs/architecture.md +21 -10
- package/docs/cli.md +36 -20
- package/docs/container.md +6 -4
- package/docs/contributor-change-matrix.md +1 -1
- package/docs/for-ai/README.md +2 -2
- package/docs/for-ai/skills/okstra-brief-gen.md +5 -3
- package/docs/for-ai/skills/okstra-code-review.md +4 -4
- package/docs/for-ai/skills/okstra-container-build.md +20 -17
- package/docs/for-ai/skills/okstra-inspect.md +20 -23
- package/docs/for-ai/skills/okstra-manager.md +19 -18
- package/docs/for-ai/skills/okstra-memory.md +2 -2
- package/docs/for-ai/skills/okstra-pr-gen.md +3 -3
- package/docs/for-ai/skills/okstra-rollup.md +14 -13
- package/docs/for-ai/skills/okstra-run.md +7 -3
- package/docs/for-ai/skills/okstra-schedule-gen.md +15 -18
- package/docs/for-ai/skills/okstra-setup.md +7 -7
- package/docs/for-ai/skills/okstra-usage.md +5 -4
- package/docs/for-ai/skills/okstra-user-response.md +50 -32
- package/docs/project-structure-overview.md +43 -31
- package/docs/task-process/implementation-planning.md +2 -2
- package/docs/task-process/implementation.md +7 -4
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/claude-worker.md +4 -4
- package/runtime/agents/workers/report-writer-worker.md +15 -164
- package/runtime/agents/workers/translator-worker.md +5 -13
- package/runtime/bin/okstra-error-log.py +51 -11
- package/runtime/bin/okstra-report-translate.py +210 -23
- package/runtime/prompts/host-orchestration/implementation.md +1 -1
- package/runtime/prompts/launch.template.md +9 -12
- package/runtime/prompts/lead/adapters/cmux.md +1 -1
- package/runtime/prompts/lead/context-loader.md +41 -141
- package/runtime/prompts/lead/convergence.md +10 -8
- package/runtime/prompts/lead/okstra-lead-contract.md +40 -49
- package/runtime/prompts/lead/plan-body-verification.md +217 -23
- package/runtime/prompts/lead/report-writer.md +81 -421
- package/runtime/prompts/lead/team-contract.md +9 -54
- package/runtime/prompts/profiles/_clarification-recommendation.md +5 -4
- package/runtime/prompts/profiles/_coding-conventions-preflight.md +3 -2
- package/runtime/prompts/profiles/_common-contract.md +4 -4
- package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
- package/runtime/prompts/profiles/_implementation-diff-review.md +1 -1
- package/runtime/prompts/profiles/_implementation-verifier.md +3 -3
- package/runtime/prompts/profiles/change-impact-analysis.md +1 -1
- package/runtime/prompts/profiles/error-analysis.md +1 -1
- package/runtime/prompts/profiles/feature-analysis.md +1 -1
- package/runtime/prompts/profiles/final-verification.md +1 -1
- package/runtime/prompts/profiles/implementation-planning.md +20 -12
- package/runtime/prompts/profiles/improvement-discovery.md +1 -1
- package/runtime/prompts/profiles/project-analysis.md +1 -1
- package/runtime/prompts/profiles/release-handoff.md +0 -1
- package/runtime/prompts/profiles/requirements-discovery.md +1 -1
- package/runtime/prompts/wizard/prompts.ko.json +0 -1
- package/runtime/python/okstra_ctl/adapters/hosts/capability_adapter.py +69 -17
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/adapter.py +13 -4
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/relay.md +8 -2
- package/runtime/python/okstra_ctl/adapters/hosts/codex/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/hosts/codex/relay.md +50 -5
- package/runtime/python/okstra_ctl/adapters/hosts/external/relay.md +1 -1
- package/runtime/python/okstra_ctl/adapters/hosts/grok/adapter.py +2 -2
- package/runtime/python/okstra_ctl/adapters/hosts/grok/relay.md +66 -5
- package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +70 -2
- package/runtime/python/okstra_ctl/agent_activity.py +141 -38
- package/runtime/python/okstra_ctl/agent_invocation.py +19 -6
- package/runtime/python/okstra_ctl/agent_prompt_cli.py +70 -23
- package/runtime/python/okstra_ctl/analysis_inputs.py +5 -4
- package/runtime/python/okstra_ctl/analysis_packet.py +124 -3
- package/runtime/python/okstra_ctl/approval_decisions.py +328 -0
- package/runtime/python/okstra_ctl/attempt_evidence.py +2 -2
- package/runtime/python/okstra_ctl/backfill.py +13 -10
- package/runtime/python/okstra_ctl/batch.py +2 -4
- package/runtime/python/okstra_ctl/build_tools.py +6 -3
- package/runtime/python/okstra_ctl/claim_reproduction.py +101 -0
- package/runtime/python/okstra_ctl/clarification_items.py +27 -13
- package/runtime/python/okstra_ctl/cmux.py +130 -52
- package/runtime/python/okstra_ctl/code_review_target.py +34 -8
- package/runtime/python/okstra_ctl/consumers.py +5 -4
- package/runtime/python/okstra_ctl/container.py +103 -8
- package/runtime/python/okstra_ctl/context_cost.py +2 -1
- package/runtime/python/okstra_ctl/contract_graph.py +497 -0
- package/runtime/python/okstra_ctl/contract_graph_cli.py +62 -0
- package/runtime/python/okstra_ctl/convergence.py +338 -17
- package/runtime/python/okstra_ctl/convergence_engine.py +10 -18
- package/runtime/python/okstra_ctl/convergence_provenance.py +58 -8
- package/runtime/python/okstra_ctl/convergence_store.py +55 -34
- package/runtime/python/okstra_ctl/design_prep.py +7 -4
- package/runtime/python/okstra_ctl/design_snapshot.py +134 -0
- package/runtime/python/okstra_ctl/dispatch_core.py +97 -69
- package/runtime/python/okstra_ctl/dispatch_state.py +163 -63
- package/runtime/python/okstra_ctl/doctor.py +6 -3
- package/runtime/python/okstra_ctl/domain/worker_presentation.py +70 -9
- package/runtime/python/okstra_ctl/entrypoints/hosts.py +16 -30
- package/runtime/python/okstra_ctl/error_log_write.py +35 -30
- package/runtime/python/okstra_ctl/error_report.py +26 -1
- package/runtime/python/okstra_ctl/error_zip.py +27 -5
- package/runtime/python/okstra_ctl/execution_identity.py +3 -2
- package/runtime/python/okstra_ctl/execution_manifest.py +7 -4
- package/runtime/python/okstra_ctl/execution_mutation_audit.py +6 -2
- package/runtime/python/okstra_ctl/final_report_schema.py +26 -17
- package/runtime/python/okstra_ctl/fix_cycles.py +2 -2
- package/runtime/python/okstra_ctl/fixed_text.py +39 -0
- package/runtime/python/okstra_ctl/git_reconcile.py +41 -9
- package/runtime/python/okstra_ctl/handoff.py +5 -4
- package/runtime/python/okstra_ctl/i18n.py +4 -2
- package/runtime/python/okstra_ctl/implementation_direction.py +22 -14
- package/runtime/python/okstra_ctl/implementation_outcome.py +4 -7
- package/runtime/python/okstra_ctl/incremental_carry.py +130 -17
- package/runtime/python/okstra_ctl/incremental_scope.py +12 -4
- package/runtime/python/okstra_ctl/index.py +8 -11
- package/runtime/python/okstra_ctl/initial_prompt_materialization.py +79 -7
- package/runtime/python/okstra_ctl/invocation.py +3 -6
- package/runtime/python/okstra_ctl/json_boundary.py +366 -0
- package/runtime/python/okstra_ctl/json_registry.py +10 -12
- package/runtime/python/okstra_ctl/jsonl.py +19 -2
- package/runtime/python/okstra_ctl/lead_events.py +33 -1
- package/runtime/python/okstra_ctl/listing.py +3 -3
- package/runtime/python/okstra_ctl/log_report.py +24 -2
- package/runtime/python/okstra_ctl/manager_cli.py +92 -7
- package/runtime/python/okstra_ctl/manager_store.py +12 -10
- package/runtime/python/okstra_ctl/material.py +5 -1
- package/runtime/python/okstra_ctl/migrate.py +29 -25
- package/runtime/python/okstra_ctl/model_cli.py +3 -15
- package/runtime/python/okstra_ctl/model_io_cli.py +1051 -0
- package/runtime/python/okstra_ctl/mutation_probe.py +13 -4
- package/runtime/python/okstra_ctl/pane_reclaim.py +3 -2
- package/runtime/python/okstra_ctl/path_hints.py +12 -0
- package/runtime/python/okstra_ctl/paths.py +21 -0
- package/runtime/python/okstra_ctl/plan_items.py +115 -4
- package/runtime/python/okstra_ctl/plan_items_cli.py +626 -34
- package/runtime/python/okstra_ctl/ports/worker_dispatch.py +2 -1
- package/runtime/python/okstra_ctl/pr_template.py +3 -2
- package/runtime/python/okstra_ctl/project_meta.py +5 -7
- package/runtime/python/okstra_ctl/recap.py +5 -4
- package/runtime/python/okstra_ctl/reconcile.py +21 -27
- package/runtime/python/okstra_ctl/registry/host_discovery.py +3 -2
- package/runtime/python/okstra_ctl/registry/provider_registry.py +3 -2
- package/runtime/python/okstra_ctl/render.py +74 -16
- package/runtime/python/okstra_ctl/render_final_report.py +10 -8
- package/runtime/python/okstra_ctl/report_assembly.py +509 -0
- package/runtime/python/okstra_ctl/report_contract.py +2 -1
- package/runtime/python/okstra_ctl/report_finalize.py +67 -32
- package/runtime/python/okstra_ctl/report_html/render.py +3 -2
- package/runtime/python/okstra_ctl/report_inputs.py +72 -0
- package/runtime/python/okstra_ctl/report_language.py +3 -2
- package/runtime/python/okstra_ctl/report_markdown.py +81 -8
- package/runtime/python/okstra_ctl/report_narrative.py +351 -0
- package/runtime/python/okstra_ctl/report_projections.py +265 -0
- package/runtime/python/okstra_ctl/report_synthesis_packet.py +518 -0
- package/runtime/python/okstra_ctl/report_views.py +3 -2
- package/runtime/python/okstra_ctl/rollup.py +65 -4
- package/runtime/python/okstra_ctl/run.py +184 -65
- package/runtime/python/okstra_ctl/run_audit.py +3 -2
- package/runtime/python/okstra_ctl/run_context.py +6 -9
- package/runtime/python/okstra_ctl/run_index_row.py +2 -8
- package/runtime/python/okstra_ctl/schedule_semantics.py +5 -2
- package/runtime/python/okstra_ctl/schema_excerpt.py +15 -8
- package/runtime/python/okstra_ctl/session_transcript.py +27 -1
- package/runtime/python/okstra_ctl/set_work_status.py +64 -38
- package/runtime/python/okstra_ctl/stage_fix_carry.py +8 -6
- package/runtime/python/okstra_ctl/stage_ledger.py +132 -18
- package/runtime/python/okstra_ctl/stage_map.py +96 -28
- package/runtime/python/okstra_ctl/stage_targets.py +3 -4
- package/runtime/python/okstra_ctl/team.py +3 -2
- package/runtime/python/okstra_ctl/team_reconcile.py +11 -2
- package/runtime/python/okstra_ctl/time_report.py +51 -4
- package/runtime/python/okstra_ctl/usage_identity.py +2 -1
- package/runtime/python/okstra_ctl/usage_report.py +58 -4
- package/runtime/python/okstra_ctl/user_response.py +1431 -66
- package/runtime/python/okstra_ctl/wizard.py +11 -44
- package/runtime/python/okstra_ctl/work_categories.py +3 -2
- package/runtime/python/okstra_ctl/worker_dispatch.py +5 -2
- package/runtime/python/okstra_ctl/worker_prompt_body.py +49 -3
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +3 -2
- package/runtime/python/okstra_ctl/worker_prompt_policy.py +31 -3
- package/runtime/python/okstra_ctl/worker_runner.py +14 -12
- package/runtime/python/okstra_ctl/workflow.py +2 -1
- package/runtime/python/okstra_ctl/worktree.py +3 -2
- package/runtime/python/okstra_ctl/wrapper_status.py +4 -2
- package/runtime/python/okstra_ctl/write_policy.py +4 -2
- package/runtime/python/okstra_token_usage/antigravity.py +39 -12
- package/runtime/python/okstra_token_usage/collect.py +90 -38
- package/runtime/python/okstra_token_usage/grok.py +127 -0
- package/runtime/schemas/final-report-v2.0.schema.json +9 -0
- package/runtime/schemas/final-report-v3.0.schema.json +10219 -0
- package/runtime/schemas/report-narrative-v3.0.schema.json +30 -0
- package/runtime/schemas/report-synthesis-packet-v1.0.schema.json +140 -0
- package/runtime/skills/okstra-brief-gen/SKILL.md +9 -7
- package/runtime/skills/okstra-code-review/SKILL.md +21 -11
- package/runtime/skills/okstra-container-build/SKILL.md +18 -18
- package/runtime/skills/okstra-inspect/SKILL.md +12 -11
- package/runtime/skills/okstra-inspect/facets/error-zip.md +8 -8
- package/runtime/skills/okstra-inspect/facets/errors.md +2 -2
- package/runtime/skills/okstra-inspect/facets/history.md +9 -14
- package/runtime/skills/okstra-inspect/facets/logs.md +2 -2
- package/runtime/skills/okstra-inspect/facets/recap.md +5 -5
- package/runtime/skills/okstra-inspect/facets/report.md +6 -10
- package/runtime/skills/okstra-inspect/facets/status.md +9 -8
- package/runtime/skills/okstra-inspect/facets/time.md +3 -3
- package/runtime/skills/okstra-manager/SKILL.md +16 -14
- package/runtime/skills/okstra-memory/SKILL.md +3 -3
- package/runtime/skills/okstra-pr-gen/SKILL.md +5 -4
- package/runtime/skills/okstra-rollup/SKILL.md +6 -16
- package/runtime/skills/okstra-run/SKILL.md +7 -7
- package/runtime/skills/okstra-schedule-gen/SKILL.md +21 -17
- package/runtime/skills/okstra-setup/SKILL.md +21 -13
- package/runtime/skills/okstra-setup/references/project-config.md +2 -2
- package/runtime/skills/okstra-usage/SKILL.md +10 -10
- package/runtime/skills/okstra-user-response/SKILL.md +78 -107
- package/runtime/templates/report-writer-prompt-preamble.md +29 -19
- package/runtime/templates/reports/html/macros/forms.html +6 -4
- package/runtime/templates/reports/schedule.template.md +4 -4
- package/runtime/templates/worker-error-contract.md +17 -29
- package/runtime/validators/validate-run.py +636 -72
- package/runtime/validators/validate_session_conformance.py +43 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-list.mjs","sourceRoot":"","sources":["../../../src/commands/inspect/task-list.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG9E,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"task-list.mjs","sourceRoot":"","sources":["../../../src/commands/inspect/task-list.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG9E,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;CAkBb,CAAC;AASF,SAAS,SAAS,CAAC,IAAa;IAC9B,MAAM,IAAI,GAAG;QACX,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE;QACtE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK;KACtC,CAAC;IACF,MAAM,MAAM,GAA4C;QACtD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU;QACrE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO;KAC1F,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,aAAa;QAC1E,KAAK,KAAK,qBAAqB,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,SAAS,CAAC;AACvF,CAAC;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDd,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;QACpC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe;YACpE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;KAC3D,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;gBAC/B,CAAC,CAAC,qCAAqC;gBACvC,CAAC,CAAC,0BAA0B,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB;kBAClB,qBAAqB;kBACrB,6BAA6B;kBAC7B,uBAAuB,MAAM,MAAM,CACtC,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,aAAa,CAAC;YACZ,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,6BAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE;SAC3E,CAAC,CAAC;QACH,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7C,CAAC"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import { runPythonModule } from "../../lib/python-helper.mjs";
|
|
2
|
-
const USAGE = `okstra user-response —
|
|
2
|
+
const USAGE = `okstra user-response — 열린 clarification을 고정 텍스트로 읽고 sidecar 트랜잭션 기록
|
|
3
3
|
|
|
4
|
-
A thin shim over \`python3 -m okstra_ctl.user_response\`.
|
|
4
|
+
A thin shim over \`python3 -m okstra_ctl.user_response\`.
|
|
5
5
|
|
|
6
6
|
Usage:
|
|
7
7
|
okstra user-response list --home <dir> --project <id> [--limit <n>]
|
|
8
|
+
okstra user-response list-view --home <dir> --project <id> [--limit <n>]
|
|
8
9
|
okstra user-response show --report <md>
|
|
9
|
-
okstra user-response
|
|
10
|
-
|
|
10
|
+
okstra user-response show-view --report <md|data.json> --project-root <dir>
|
|
11
|
+
okstra user-response begin --report <md|data.json> --task-key <key>
|
|
12
|
+
okstra user-response answer --transaction <id> --clarification-id <C-NNN> \\
|
|
13
|
+
--kind <kind> --option-number <N>
|
|
14
|
+
okstra user-response answer --transaction <id> --clarification-id <C-NNN> \\
|
|
15
|
+
--kind <kind> --disposition <value> --value-file <md> [--rationale-file <md>]
|
|
16
|
+
okstra user-response plan-decision --transaction <id> --status <value> \\
|
|
17
|
+
[--implementation-option <name>] [--reason-file <md>]
|
|
18
|
+
okstra user-response legacy-report-authoring --transaction <id> \\
|
|
19
|
+
--status <approved|denied> --reason-file <md>
|
|
20
|
+
okstra user-response finalize --transaction <id>
|
|
11
21
|
|
|
12
22
|
Exit codes: 0 ok / 1 오류
|
|
13
23
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-response.mjs","sourceRoot":"","sources":["../../../src/commands/inspect/user-response.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"user-response.mjs","sourceRoot":"","sources":["../../../src/commands/inspect/user-response.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC;QACrC,MAAM,EAAE,0BAA0B;QAClC,IAAI;KACL,CAAC,CAAC;IACH,OAAO,IAAI,IAAI,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -13,6 +13,7 @@ type CheckResult = {
|
|
|
13
13
|
} | {
|
|
14
14
|
readonly code: 1 | 2;
|
|
15
15
|
readonly payload: CheckPayload;
|
|
16
|
+
readonly textRecovery?: "replace_project_json";
|
|
16
17
|
};
|
|
17
18
|
export declare function run(args: readonly string[]): Promise<number>;
|
|
18
19
|
export declare function checkProject({ cwd }?: {
|
|
@@ -68,9 +68,7 @@ export async function run(args) {
|
|
|
68
68
|
emit(opts, payload);
|
|
69
69
|
return code;
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
// and validates .okstra/project.json without writing to stdout.
|
|
73
|
-
export async function checkProject({ cwd = process.cwd() } = {}) {
|
|
71
|
+
async function resolveProjectPaths(cwd) {
|
|
74
72
|
const paths = await resolvePaths();
|
|
75
73
|
const probe = await runProcess("python3", [
|
|
76
74
|
"-c",
|
|
@@ -86,45 +84,72 @@ export async function checkProject({ cwd = process.cwd() } = {}) {
|
|
|
86
84
|
].join("\n"),
|
|
87
85
|
cwd,
|
|
88
86
|
], { PYTHONPATH: buildPythonpath(paths) });
|
|
87
|
+
return projectPathsFromProbe(cwd, probe);
|
|
88
|
+
}
|
|
89
|
+
function taggedProbeValue(stdout, key) {
|
|
90
|
+
const line = stdout.trim().split("\n").find((item) => item.startsWith(key + " "));
|
|
91
|
+
return line?.slice(key.length + 1).trim() ?? null;
|
|
92
|
+
}
|
|
93
|
+
function projectPathsFromProbe(cwd, probe) {
|
|
89
94
|
if (probe.code !== 0) {
|
|
90
95
|
const raw = probe.stderr.trim() || probe.stdout.trim();
|
|
91
96
|
return {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
kind: "failed",
|
|
98
|
+
result: {
|
|
99
|
+
code: 1,
|
|
100
|
+
payload: {
|
|
101
|
+
ok: false,
|
|
102
|
+
stage: "python",
|
|
103
|
+
reason: `python invocation failed: ${raw}. ` +
|
|
104
|
+
"This usually means the okstra runtime is stale or missing — " +
|
|
105
|
+
"run 'okstra doctor' to diagnose, then 'okstra ensure-installed' " +
|
|
106
|
+
"to repair.",
|
|
107
|
+
},
|
|
100
108
|
},
|
|
101
109
|
};
|
|
102
110
|
}
|
|
103
|
-
const
|
|
104
|
-
const tagOf = (key) => lines
|
|
105
|
-
.find((l) => l.startsWith(key + " "))
|
|
106
|
-
?.slice(key.length + 1)
|
|
107
|
-
.trim() ?? null;
|
|
108
|
-
const resolverError = tagOf("RESOLVER_ERROR");
|
|
111
|
+
const resolverError = taggedProbeValue(probe.stdout, "RESOLVER_ERROR");
|
|
109
112
|
if (resolverError) {
|
|
110
113
|
return {
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
kind: "failed",
|
|
115
|
+
result: {
|
|
116
|
+
code: 2,
|
|
117
|
+
payload: { ok: false, stage: "resolve", reason: resolverError, cwd },
|
|
118
|
+
},
|
|
113
119
|
};
|
|
114
120
|
}
|
|
115
|
-
const projectRoot =
|
|
116
|
-
const projectJsonPath =
|
|
121
|
+
const projectRoot = taggedProbeValue(probe.stdout, "PROJECT_ROOT");
|
|
122
|
+
const projectJsonPath = taggedProbeValue(probe.stdout, "PROJECT_JSON");
|
|
117
123
|
if (!projectRoot || !projectJsonPath) {
|
|
118
124
|
return {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
kind: "failed",
|
|
126
|
+
result: {
|
|
127
|
+
code: 1,
|
|
128
|
+
payload: {
|
|
129
|
+
ok: false,
|
|
130
|
+
stage: "parse",
|
|
131
|
+
reason: "could not parse python output",
|
|
132
|
+
raw: probe.stdout,
|
|
133
|
+
},
|
|
125
134
|
},
|
|
126
135
|
};
|
|
127
136
|
}
|
|
137
|
+
return { kind: "resolved", projectRoot, projectJsonPath };
|
|
138
|
+
}
|
|
139
|
+
function invalidProjectJsonResult(projectRoot, projectJsonPath, reason, textRecovery) {
|
|
140
|
+
return {
|
|
141
|
+
code: 1,
|
|
142
|
+
payload: {
|
|
143
|
+
ok: false,
|
|
144
|
+
stage: "project_json_invalid",
|
|
145
|
+
reason,
|
|
146
|
+
projectRoot,
|
|
147
|
+
projectJsonPath,
|
|
148
|
+
},
|
|
149
|
+
...(textRecovery ? { textRecovery } : {}),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async function checkProjectJson(projectRoot, projectJsonPath) {
|
|
128
153
|
if (!(await fileExists(projectJsonPath))) {
|
|
129
154
|
return {
|
|
130
155
|
code: 1,
|
|
@@ -137,39 +162,33 @@ export async function checkProject({ cwd = process.cwd() } = {}) {
|
|
|
137
162
|
},
|
|
138
163
|
};
|
|
139
164
|
}
|
|
140
|
-
let
|
|
165
|
+
let projectData;
|
|
141
166
|
try {
|
|
142
|
-
|
|
143
|
-
projectId = typeof data?.projectId === "string" ? data.projectId : null;
|
|
167
|
+
projectData = JSON.parse(await fs.readFile(projectJsonPath, "utf8"));
|
|
144
168
|
}
|
|
145
169
|
catch (err) {
|
|
146
170
|
const message = err instanceof Error ? err.message : String(err);
|
|
147
|
-
return {
|
|
148
|
-
code: 1,
|
|
149
|
-
payload: {
|
|
150
|
-
ok: false,
|
|
151
|
-
stage: "project_json_invalid",
|
|
152
|
-
reason: `failed to parse ${projectJsonPath}: ${message}`,
|
|
153
|
-
projectRoot,
|
|
154
|
-
projectJsonPath,
|
|
155
|
-
},
|
|
156
|
-
};
|
|
171
|
+
return invalidProjectJsonResult(projectRoot, projectJsonPath, `failed to parse ${projectJsonPath}: ${message}`);
|
|
157
172
|
}
|
|
173
|
+
if (typeof projectData !== "object" || projectData === null || Array.isArray(projectData)) {
|
|
174
|
+
return invalidProjectJsonResult(projectRoot, projectJsonPath, `${projectJsonPath} missing projectId field`, "replace_project_json");
|
|
175
|
+
}
|
|
176
|
+
const projectIdValue = Reflect.get(projectData, "projectId");
|
|
177
|
+
const projectId = typeof projectIdValue === "string" ? projectIdValue : null;
|
|
158
178
|
if (!projectId) {
|
|
159
|
-
return {
|
|
160
|
-
code: 1,
|
|
161
|
-
payload: {
|
|
162
|
-
ok: false,
|
|
163
|
-
stage: "project_json_invalid",
|
|
164
|
-
reason: `${projectJsonPath} missing projectId field`,
|
|
165
|
-
projectRoot,
|
|
166
|
-
projectJsonPath,
|
|
167
|
-
},
|
|
168
|
-
};
|
|
179
|
+
return invalidProjectJsonResult(projectRoot, projectJsonPath, `${projectJsonPath} missing projectId field`);
|
|
169
180
|
}
|
|
170
181
|
return {
|
|
171
182
|
code: 0,
|
|
172
183
|
payload: { ok: true, projectRoot, projectJsonPath, projectId },
|
|
173
184
|
};
|
|
174
185
|
}
|
|
186
|
+
// Core check shared with 'okstra preflight' — resolves PROJECT_ROOT from cwd
|
|
187
|
+
// and validates .okstra/project.json without writing to stdout.
|
|
188
|
+
export async function checkProject({ cwd = process.cwd() } = {}) {
|
|
189
|
+
const paths = await resolveProjectPaths(cwd);
|
|
190
|
+
if (paths.kind === "failed")
|
|
191
|
+
return paths.result;
|
|
192
|
+
return checkProjectJson(paths.projectRoot, paths.projectJsonPath);
|
|
193
|
+
}
|
|
175
194
|
//# sourceMappingURL=check-project.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-project.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/check-project.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-project.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/check-project.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function run(args: readonly string[]): Promise<number>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { runPythonModule } from "../../lib/python-helper.mjs";
|
|
2
|
+
const USAGE = `okstra contract-check — validate runtime contract dependencies
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
okstra contract-check --root <repo-or-staging-root> [--profile <id> | --operation <id>]
|
|
6
|
+
`;
|
|
7
|
+
export async function run(args) {
|
|
8
|
+
if (args.length === 1 && (args[0] === "--help" || args[0] === "-h")) {
|
|
9
|
+
process.stdout.write(USAGE);
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
const { code } = await runPythonModule({
|
|
13
|
+
module: "okstra_ctl.contract_graph_cli",
|
|
14
|
+
args,
|
|
15
|
+
});
|
|
16
|
+
return code ?? 1;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=contract-check.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-check.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/contract-check.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,KAAK,GAAG;;;;CAIb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC;QACrC,MAAM,EAAE,+BAA+B;QACvC,IAAI;KACL,CAAC,CAAC;IACH,OAAO,IAAI,IAAI,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -4,13 +4,25 @@ import { missingHelperScripts } from "../../lib/helper-scripts.mjs";
|
|
|
4
4
|
import { resolveInstalledScript } from "../../lib/python-helper.mjs";
|
|
5
5
|
import { resolvePaths } from "../../lib/paths.mjs";
|
|
6
6
|
import { checkRuntimeReadiness } from "../../lib/host-registry-client.mjs";
|
|
7
|
+
const RECOVERY_BY_STAGE = Object.freeze({
|
|
8
|
+
install: "run okstra doctor, then run okstra install",
|
|
9
|
+
helper_scripts_missing: "run okstra install",
|
|
10
|
+
resolve: "rerun okstra preflight with --cwd <project-root>",
|
|
11
|
+
project_json_missing: "run /okstra-setup",
|
|
12
|
+
project_json_invalid: "run /okstra-setup and supply a project ID",
|
|
13
|
+
runtime_readiness: "inspect host readiness",
|
|
14
|
+
python: "run okstra doctor, then run okstra ensure-installed",
|
|
15
|
+
parse: "run okstra doctor, then run okstra ensure-installed",
|
|
16
|
+
});
|
|
17
|
+
const BLOCKING_CHECK_STATUSES = new Set(["required", "unavailable"]);
|
|
7
18
|
const USAGE = `okstra preflight — one-call skill preflight (ensure-installed + check-project)
|
|
8
19
|
|
|
9
20
|
Usage:
|
|
10
|
-
okstra preflight [--runtime <name>] [--cwd <dir>] [--
|
|
21
|
+
okstra preflight [--runtime <name>] [--cwd <dir>] [--machine]
|
|
11
22
|
|
|
12
23
|
Runs the runtime freshness check (quietly reinstalling when stale), then
|
|
13
|
-
verifies the target project has .okstra/project.json.
|
|
24
|
+
verifies the target project has .okstra/project.json. The default output is a
|
|
25
|
+
fixed text projection for model callers. Machine mode prints one JSON object:
|
|
14
26
|
|
|
15
27
|
ok: true {ok, projectRoot, projectJsonPath, projectId, runtimeReadiness}
|
|
16
28
|
ok: false {ok, stage, reason, ...}
|
|
@@ -22,7 +34,8 @@ Options:
|
|
|
22
34
|
--runtime <name> Runtime whose assets must be present (e.g. claude-code);
|
|
23
35
|
forwarded to ensure-installed.
|
|
24
36
|
--cwd <dir> Resolve PROJECT_ROOT from <dir> instead of process cwd.
|
|
25
|
-
--
|
|
37
|
+
--machine Print the automation JSON contract.
|
|
38
|
+
--json Deprecated one-release alias for --machine.
|
|
26
39
|
|
|
27
40
|
Exit codes:
|
|
28
41
|
0 runtime fresh, project registered, and current host ready
|
|
@@ -30,11 +43,15 @@ Exit codes:
|
|
|
30
43
|
2 PROJECT_ROOT could not be resolved from cwd (pass --cwd), or bad flags
|
|
31
44
|
`;
|
|
32
45
|
function parseArgs(args) {
|
|
33
|
-
const opts = {
|
|
46
|
+
const opts = {
|
|
47
|
+
cwd: process.cwd(),
|
|
48
|
+
runtime: null,
|
|
49
|
+
output: "text",
|
|
50
|
+
};
|
|
34
51
|
for (let i = 0; i < args.length; i++) {
|
|
35
52
|
const a = args[i];
|
|
36
|
-
if (a === "--json")
|
|
37
|
-
|
|
53
|
+
if (a === "--machine" || a === "--json")
|
|
54
|
+
opts.output = "machine";
|
|
38
55
|
if (a === "--cwd" || a === "--runtime") {
|
|
39
56
|
const next = args[i + 1];
|
|
40
57
|
if (!next || next.startsWith("--"))
|
|
@@ -45,80 +62,166 @@ function parseArgs(args) {
|
|
|
45
62
|
opts.runtime = next;
|
|
46
63
|
i++;
|
|
47
64
|
}
|
|
48
|
-
else {
|
|
65
|
+
else if (a !== "--machine" && a !== "--json") {
|
|
49
66
|
throw new Error(`unknown argument '${a}'`);
|
|
50
67
|
}
|
|
51
68
|
}
|
|
52
69
|
return opts;
|
|
53
70
|
}
|
|
54
|
-
function
|
|
55
|
-
|
|
71
|
+
function escapeControlCharacter(value) {
|
|
72
|
+
if (value === "\r")
|
|
73
|
+
return "\\r";
|
|
74
|
+
if (value === "\n")
|
|
75
|
+
return "\\n";
|
|
76
|
+
const codePoint = value.codePointAt(0) ?? 0;
|
|
77
|
+
const width = codePoint <= 0xff ? 2 : 4;
|
|
78
|
+
const prefix = codePoint <= 0xff ? "\\x" : "\\u";
|
|
79
|
+
return prefix + codePoint.toString(16).padStart(width, "0");
|
|
80
|
+
}
|
|
81
|
+
function scalar(value) {
|
|
82
|
+
if (value === null || value === undefined || value === "")
|
|
83
|
+
return "-";
|
|
84
|
+
if (!["string", "number", "boolean"].includes(typeof value))
|
|
85
|
+
return "-";
|
|
86
|
+
return String(value)
|
|
87
|
+
.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g, escapeControlCharacter)
|
|
88
|
+
.trim() || "-";
|
|
89
|
+
}
|
|
90
|
+
function propertyOf(value, key) {
|
|
91
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
92
|
+
return undefined;
|
|
93
|
+
return Reflect.get(value, key);
|
|
94
|
+
}
|
|
95
|
+
function recoveryFor(payload, textRecovery) {
|
|
96
|
+
const stage = scalar(payload.stage);
|
|
97
|
+
if (stage === "project_json_invalid") {
|
|
98
|
+
const reason = scalar(payload.reason);
|
|
99
|
+
if (reason.startsWith("failed to parse ") || textRecovery === "replace_project_json") {
|
|
100
|
+
return `get user approval to back up and remove ${scalar(payload.projectJsonPath)}, ` +
|
|
101
|
+
"then run /okstra-setup";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (stage !== "runtime_readiness")
|
|
105
|
+
return RECOVERY_BY_STAGE[stage] ?? "inspect failure details";
|
|
106
|
+
const rawChecks = propertyOf(payload.runtimeReadiness, "checks");
|
|
107
|
+
const checks = Array.isArray(rawChecks) ? rawChecks : [];
|
|
108
|
+
const blockingCheck = checks.find((check) => BLOCKING_CHECK_STATUSES.has(scalar(propertyOf(check, "status"))));
|
|
109
|
+
return scalar(propertyOf(blockingCheck, "action") ?? RECOVERY_BY_STAGE.runtime_readiness);
|
|
110
|
+
}
|
|
111
|
+
function readinessLines(payload) {
|
|
112
|
+
const readiness = payload.runtimeReadiness;
|
|
113
|
+
const rawChecks = propertyOf(readiness, "checks");
|
|
114
|
+
const checks = Array.isArray(rawChecks) ? rawChecks : [];
|
|
115
|
+
const lines = [
|
|
116
|
+
`Runtime: ${scalar(propertyOf(readiness, "runtime"))}`,
|
|
117
|
+
`Runtime readiness: ${scalar(propertyOf(readiness, "status"))}`,
|
|
118
|
+
`Relay contract: ${scalar(propertyOf(readiness, "relayContract"))}`,
|
|
119
|
+
];
|
|
120
|
+
for (const check of checks) {
|
|
121
|
+
lines.push(`Readiness check: ${scalar(propertyOf(check, "id"))}`, `Readiness check status: ${scalar(propertyOf(check, "status"))}`, `Readiness check action: ${scalar(propertyOf(check, "action"))}`);
|
|
122
|
+
}
|
|
123
|
+
return lines;
|
|
124
|
+
}
|
|
125
|
+
function renderFixedText(result) {
|
|
126
|
+
const { payload } = result;
|
|
127
|
+
if (payload.ok === true) {
|
|
128
|
+
return [
|
|
129
|
+
"Okstra preflight: ready",
|
|
130
|
+
`Project ID: ${scalar(payload.projectId)}`,
|
|
131
|
+
`Project root: ${scalar(payload.projectRoot)}`,
|
|
132
|
+
...readinessLines(payload),
|
|
133
|
+
].join("\n") + "\n";
|
|
134
|
+
}
|
|
135
|
+
const lines = [
|
|
136
|
+
"Okstra preflight: failed",
|
|
137
|
+
`Stage: ${scalar(payload.stage)}`,
|
|
138
|
+
`Reason: ${scalar(payload.reason)}`,
|
|
139
|
+
`Recovery: ${recoveryFor(payload, result.textRecovery)}`,
|
|
140
|
+
];
|
|
141
|
+
if (payload.runtimeReadiness !== undefined)
|
|
142
|
+
lines.push(...readinessLines(payload));
|
|
143
|
+
return lines.join("\n") + "\n";
|
|
144
|
+
}
|
|
145
|
+
function emit(opts, result) {
|
|
146
|
+
const output = opts.output === "machine"
|
|
147
|
+
? JSON.stringify(result.payload, null, 2) + "\n"
|
|
148
|
+
: renderFixedText(result);
|
|
149
|
+
process.stdout.write(output);
|
|
56
150
|
}
|
|
57
151
|
// A BLOCKING lead step calls these mid-run; resolving them here turns a stale
|
|
58
152
|
// install into an up-front failure instead of a dead end hours into a run.
|
|
59
153
|
async function findMissingHelperScripts() {
|
|
60
154
|
return missingHelperScripts(await resolvePaths(), resolveInstalledScript);
|
|
61
155
|
}
|
|
62
|
-
|
|
63
|
-
if (args.includes("--help") || args.includes("-h")) {
|
|
64
|
-
process.stdout.write(USAGE);
|
|
65
|
-
return 0;
|
|
66
|
-
}
|
|
67
|
-
let opts;
|
|
68
|
-
try {
|
|
69
|
-
opts = parseArgs(args);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
73
|
-
process.stderr.write(`error: ${message}\n\n${USAGE}`);
|
|
74
|
-
return 2;
|
|
75
|
-
}
|
|
156
|
+
async function checkInstallation(opts) {
|
|
76
157
|
const ensureArgs = ["--quiet"];
|
|
77
158
|
if (opts.runtime)
|
|
78
159
|
ensureArgs.push("--runtime", opts.runtime);
|
|
79
160
|
const installCode = await runEnsureInstalled(ensureArgs);
|
|
80
161
|
if (installCode !== 0) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
162
|
+
return {
|
|
163
|
+
code: installCode === 2 ? 2 : 1,
|
|
164
|
+
payload: {
|
|
165
|
+
ok: false,
|
|
166
|
+
stage: "install",
|
|
167
|
+
reason: "okstra runtime install failed — run 'okstra doctor' to diagnose, " +
|
|
168
|
+
"then 'okstra install' to repair.",
|
|
169
|
+
},
|
|
170
|
+
};
|
|
88
171
|
}
|
|
89
172
|
const missingHelpers = await findMissingHelperScripts();
|
|
90
|
-
if (missingHelpers.length
|
|
91
|
-
|
|
173
|
+
if (missingHelpers.length === 0)
|
|
174
|
+
return null;
|
|
175
|
+
return {
|
|
176
|
+
code: 1,
|
|
177
|
+
payload: {
|
|
92
178
|
ok: false,
|
|
93
179
|
stage: "helper_scripts_missing",
|
|
94
180
|
missingHelpers,
|
|
95
181
|
reason: `${missingHelpers.length} helper script(s) a lead prompt can call are not ` +
|
|
96
182
|
"installed — run 'okstra install' to repair before starting a run.",
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async function checkProjectReadiness(opts) {
|
|
100
187
|
const projectCheck = await checkProject({ cwd: opts.cwd });
|
|
101
|
-
if (projectCheck.code !== 0)
|
|
102
|
-
|
|
103
|
-
return projectCheck.code;
|
|
104
|
-
}
|
|
188
|
+
if (projectCheck.code !== 0)
|
|
189
|
+
return projectCheck;
|
|
105
190
|
const { payload } = projectCheck;
|
|
106
|
-
const projectRoot = payload.projectRoot;
|
|
107
191
|
const runtimeReadiness = await checkRuntimeReadiness({
|
|
108
192
|
runtime: opts.runtime,
|
|
109
|
-
projectRoot,
|
|
193
|
+
projectRoot: payload.projectRoot,
|
|
110
194
|
});
|
|
111
195
|
if (["blocked", "unknown"].includes(runtimeReadiness.status)) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
196
|
+
return {
|
|
197
|
+
code: 1,
|
|
198
|
+
payload: {
|
|
199
|
+
...payload,
|
|
200
|
+
ok: false,
|
|
201
|
+
stage: "runtime_readiness",
|
|
202
|
+
reason: `current host readiness is ${runtimeReadiness.status}`,
|
|
203
|
+
runtimeReadiness,
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return { code: projectCheck.code, payload: { ...payload, runtimeReadiness } };
|
|
208
|
+
}
|
|
209
|
+
export async function run(args) {
|
|
210
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
211
|
+
process.stdout.write(USAGE);
|
|
212
|
+
return 0;
|
|
213
|
+
}
|
|
214
|
+
let opts;
|
|
215
|
+
try {
|
|
216
|
+
opts = parseArgs(args);
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
220
|
+
process.stderr.write(`error: ${message}\n\n${USAGE}`);
|
|
221
|
+
return 2;
|
|
120
222
|
}
|
|
121
|
-
|
|
122
|
-
|
|
223
|
+
const result = await checkInstallation(opts) ?? await checkProjectReadiness(opts);
|
|
224
|
+
emit(opts, result);
|
|
225
|
+
return result.code;
|
|
123
226
|
}
|
|
124
227
|
//# sourceMappingURL=preflight.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/preflight.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.mjs","sourceRoot":"","sources":["../../../src/commands/lifecycle/preflight.mts"],"names":[],"mappings":"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"}
|
|
@@ -29,5 +29,6 @@ export declare function buildGenBundle({ cwd, home, base, templateName, }: {
|
|
|
29
29
|
readonly base: string;
|
|
30
30
|
readonly templateName: string | undefined;
|
|
31
31
|
}): Promise<GenerationBundle>;
|
|
32
|
+
export declare function renderGenerationBundle(bundle: GenerationBundle): string;
|
|
32
33
|
export declare function run(args: readonly string[]): Promise<number>;
|
|
33
34
|
export {};
|
package/dist/commands/pr/pr.mjs
CHANGED
|
@@ -243,11 +243,29 @@ export async function buildGenBundle({ cwd, home, base, templateName, }) {
|
|
|
243
243
|
: "default";
|
|
244
244
|
return { base, currentBranch, templateName: resolvedName, template, commits, diffStat };
|
|
245
245
|
}
|
|
246
|
+
export function renderGenerationBundle(bundle) {
|
|
247
|
+
const commits = bundle.commits.length
|
|
248
|
+
? bundle.commits.map((commit) => `- ${commit.hash} ${commit.subject}`).join("\n")
|
|
249
|
+
: "-";
|
|
250
|
+
return [
|
|
251
|
+
"Okstra PR generation",
|
|
252
|
+
`Base: ${bundle.base}`,
|
|
253
|
+
`Current branch: ${bundle.currentBranch ?? "-"}`,
|
|
254
|
+
`Template name: ${bundle.templateName}`,
|
|
255
|
+
"Commits:",
|
|
256
|
+
commits,
|
|
257
|
+
"Diff stat:",
|
|
258
|
+
bundle.diffStat || "-",
|
|
259
|
+
"Template:",
|
|
260
|
+
bundle.template,
|
|
261
|
+
].join("\n");
|
|
262
|
+
}
|
|
246
263
|
async function cmdGen(args, cwd, home) {
|
|
247
264
|
const opts = {
|
|
248
265
|
base: null,
|
|
249
266
|
template: "default",
|
|
250
267
|
};
|
|
268
|
+
const json = args.includes("--json");
|
|
251
269
|
for (let i = 0; i < args.length; i++) {
|
|
252
270
|
const flag = args[i];
|
|
253
271
|
if (flag === "--base")
|
|
@@ -267,7 +285,7 @@ async function cmdGen(args, cwd, home) {
|
|
|
267
285
|
base: opts.base,
|
|
268
286
|
templateName: opts.template,
|
|
269
287
|
});
|
|
270
|
-
output.write(JSON.stringify(bundle) + "\n");
|
|
288
|
+
output.write(json ? JSON.stringify(bundle) + "\n" : renderGenerationBundle(bundle));
|
|
271
289
|
return 0;
|
|
272
290
|
}
|
|
273
291
|
export async function run(args) {
|