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.
Files changed (258) hide show
  1. package/README.md +1 -1
  2. package/dist/cli-registry.mjs +30 -2
  3. package/dist/cli-registry.mjs.map +1 -1
  4. package/dist/commands/execute/incremental-carry.mjs +9 -8
  5. package/dist/commands/execute/incremental-carry.mjs.map +1 -1
  6. package/dist/commands/execute/plan-verify.mjs +3 -1
  7. package/dist/commands/execute/plan-verify.mjs.map +1 -1
  8. package/dist/commands/execute/render-bundle.d.mts +4 -2
  9. package/dist/commands/execute/render-bundle.mjs +46 -5
  10. package/dist/commands/execute/render-bundle.mjs.map +1 -1
  11. package/dist/commands/execute/run.mjs +11 -3
  12. package/dist/commands/execute/run.mjs.map +1 -1
  13. package/dist/commands/inspect/model-io.d.mts +1 -0
  14. package/dist/commands/inspect/model-io.mjs +25 -0
  15. package/dist/commands/inspect/model-io.mjs.map +1 -0
  16. package/dist/commands/inspect/stage-map.mjs +29 -8
  17. package/dist/commands/inspect/stage-map.mjs.map +1 -1
  18. package/dist/commands/inspect/task-list.mjs +52 -6
  19. package/dist/commands/inspect/task-list.mjs.map +1 -1
  20. package/dist/commands/inspect/user-response.mjs +14 -4
  21. package/dist/commands/inspect/user-response.mjs.map +1 -1
  22. package/dist/commands/lifecycle/check-project.d.mts +1 -0
  23. package/dist/commands/lifecycle/check-project.mjs +69 -50
  24. package/dist/commands/lifecycle/check-project.mjs.map +1 -1
  25. package/dist/commands/lifecycle/contract-check.d.mts +1 -0
  26. package/dist/commands/lifecycle/contract-check.mjs +18 -0
  27. package/dist/commands/lifecycle/contract-check.mjs.map +1 -0
  28. package/dist/commands/lifecycle/preflight.mjs +154 -51
  29. package/dist/commands/lifecycle/preflight.mjs.map +1 -1
  30. package/dist/commands/pr/pr.d.mts +1 -0
  31. package/dist/commands/pr/pr.mjs +19 -1
  32. package/dist/commands/pr/pr.mjs.map +1 -1
  33. package/dist/commands/report/agent-activity.mjs +2 -2
  34. package/dist/commands/report/approval-decision.d.mts +1 -0
  35. package/dist/commands/report/approval-decision.mjs +21 -0
  36. package/dist/commands/report/approval-decision.mjs.map +1 -0
  37. package/dist/commands/report/design-snapshot.d.mts +1 -0
  38. package/dist/commands/report/design-snapshot.mjs +19 -0
  39. package/dist/commands/report/design-snapshot.mjs.map +1 -0
  40. package/dist/commands/report/translate.mjs +3 -0
  41. package/dist/commands/report/translate.mjs.map +1 -1
  42. package/dist/lib/host-registry-client.mjs +13 -9
  43. package/dist/lib/host-registry-client.mjs.map +1 -1
  44. package/docs/architecture/storage-model.md +1 -1
  45. package/docs/architecture.md +21 -10
  46. package/docs/cli.md +36 -20
  47. package/docs/container.md +6 -4
  48. package/docs/contributor-change-matrix.md +1 -1
  49. package/docs/for-ai/README.md +2 -2
  50. package/docs/for-ai/skills/okstra-brief-gen.md +5 -3
  51. package/docs/for-ai/skills/okstra-code-review.md +4 -4
  52. package/docs/for-ai/skills/okstra-container-build.md +20 -17
  53. package/docs/for-ai/skills/okstra-inspect.md +20 -23
  54. package/docs/for-ai/skills/okstra-manager.md +19 -18
  55. package/docs/for-ai/skills/okstra-memory.md +2 -2
  56. package/docs/for-ai/skills/okstra-pr-gen.md +3 -3
  57. package/docs/for-ai/skills/okstra-rollup.md +14 -13
  58. package/docs/for-ai/skills/okstra-run.md +7 -3
  59. package/docs/for-ai/skills/okstra-schedule-gen.md +15 -18
  60. package/docs/for-ai/skills/okstra-setup.md +7 -7
  61. package/docs/for-ai/skills/okstra-usage.md +5 -4
  62. package/docs/for-ai/skills/okstra-user-response.md +50 -32
  63. package/docs/project-structure-overview.md +43 -31
  64. package/docs/task-process/implementation-planning.md +2 -2
  65. package/docs/task-process/implementation.md +7 -4
  66. package/package.json +1 -1
  67. package/runtime/BUILD.json +2 -2
  68. package/runtime/agents/workers/claude-worker.md +4 -4
  69. package/runtime/agents/workers/report-writer-worker.md +15 -164
  70. package/runtime/agents/workers/translator-worker.md +5 -13
  71. package/runtime/bin/okstra-error-log.py +51 -11
  72. package/runtime/bin/okstra-report-translate.py +210 -23
  73. package/runtime/prompts/host-orchestration/implementation.md +1 -1
  74. package/runtime/prompts/launch.template.md +9 -12
  75. package/runtime/prompts/lead/adapters/cmux.md +1 -1
  76. package/runtime/prompts/lead/context-loader.md +41 -141
  77. package/runtime/prompts/lead/convergence.md +10 -8
  78. package/runtime/prompts/lead/okstra-lead-contract.md +40 -49
  79. package/runtime/prompts/lead/plan-body-verification.md +217 -23
  80. package/runtime/prompts/lead/report-writer.md +81 -421
  81. package/runtime/prompts/lead/team-contract.md +9 -54
  82. package/runtime/prompts/profiles/_clarification-recommendation.md +5 -4
  83. package/runtime/prompts/profiles/_coding-conventions-preflight.md +3 -2
  84. package/runtime/prompts/profiles/_common-contract.md +4 -4
  85. package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
  86. package/runtime/prompts/profiles/_implementation-diff-review.md +1 -1
  87. package/runtime/prompts/profiles/_implementation-verifier.md +3 -3
  88. package/runtime/prompts/profiles/change-impact-analysis.md +1 -1
  89. package/runtime/prompts/profiles/error-analysis.md +1 -1
  90. package/runtime/prompts/profiles/feature-analysis.md +1 -1
  91. package/runtime/prompts/profiles/final-verification.md +1 -1
  92. package/runtime/prompts/profiles/implementation-planning.md +20 -12
  93. package/runtime/prompts/profiles/improvement-discovery.md +1 -1
  94. package/runtime/prompts/profiles/project-analysis.md +1 -1
  95. package/runtime/prompts/profiles/release-handoff.md +0 -1
  96. package/runtime/prompts/profiles/requirements-discovery.md +1 -1
  97. package/runtime/prompts/wizard/prompts.ko.json +0 -1
  98. package/runtime/python/okstra_ctl/adapters/hosts/capability_adapter.py +69 -17
  99. package/runtime/python/okstra_ctl/adapters/hosts/claude-code/adapter.py +13 -4
  100. package/runtime/python/okstra_ctl/adapters/hosts/claude-code/relay.md +8 -2
  101. package/runtime/python/okstra_ctl/adapters/hosts/codex/adapter.py +2 -2
  102. package/runtime/python/okstra_ctl/adapters/hosts/codex/relay.md +50 -5
  103. package/runtime/python/okstra_ctl/adapters/hosts/external/relay.md +1 -1
  104. package/runtime/python/okstra_ctl/adapters/hosts/grok/adapter.py +2 -2
  105. package/runtime/python/okstra_ctl/adapters/hosts/grok/relay.md +66 -5
  106. package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +70 -2
  107. package/runtime/python/okstra_ctl/agent_activity.py +141 -38
  108. package/runtime/python/okstra_ctl/agent_invocation.py +19 -6
  109. package/runtime/python/okstra_ctl/agent_prompt_cli.py +70 -23
  110. package/runtime/python/okstra_ctl/analysis_inputs.py +5 -4
  111. package/runtime/python/okstra_ctl/analysis_packet.py +124 -3
  112. package/runtime/python/okstra_ctl/approval_decisions.py +328 -0
  113. package/runtime/python/okstra_ctl/attempt_evidence.py +2 -2
  114. package/runtime/python/okstra_ctl/backfill.py +13 -10
  115. package/runtime/python/okstra_ctl/batch.py +2 -4
  116. package/runtime/python/okstra_ctl/build_tools.py +6 -3
  117. package/runtime/python/okstra_ctl/claim_reproduction.py +101 -0
  118. package/runtime/python/okstra_ctl/clarification_items.py +27 -13
  119. package/runtime/python/okstra_ctl/cmux.py +130 -52
  120. package/runtime/python/okstra_ctl/code_review_target.py +34 -8
  121. package/runtime/python/okstra_ctl/consumers.py +5 -4
  122. package/runtime/python/okstra_ctl/container.py +103 -8
  123. package/runtime/python/okstra_ctl/context_cost.py +2 -1
  124. package/runtime/python/okstra_ctl/contract_graph.py +497 -0
  125. package/runtime/python/okstra_ctl/contract_graph_cli.py +62 -0
  126. package/runtime/python/okstra_ctl/convergence.py +338 -17
  127. package/runtime/python/okstra_ctl/convergence_engine.py +10 -18
  128. package/runtime/python/okstra_ctl/convergence_provenance.py +58 -8
  129. package/runtime/python/okstra_ctl/convergence_store.py +55 -34
  130. package/runtime/python/okstra_ctl/design_prep.py +7 -4
  131. package/runtime/python/okstra_ctl/design_snapshot.py +134 -0
  132. package/runtime/python/okstra_ctl/dispatch_core.py +97 -69
  133. package/runtime/python/okstra_ctl/dispatch_state.py +163 -63
  134. package/runtime/python/okstra_ctl/doctor.py +6 -3
  135. package/runtime/python/okstra_ctl/domain/worker_presentation.py +70 -9
  136. package/runtime/python/okstra_ctl/entrypoints/hosts.py +16 -30
  137. package/runtime/python/okstra_ctl/error_log_write.py +35 -30
  138. package/runtime/python/okstra_ctl/error_report.py +26 -1
  139. package/runtime/python/okstra_ctl/error_zip.py +27 -5
  140. package/runtime/python/okstra_ctl/execution_identity.py +3 -2
  141. package/runtime/python/okstra_ctl/execution_manifest.py +7 -4
  142. package/runtime/python/okstra_ctl/execution_mutation_audit.py +6 -2
  143. package/runtime/python/okstra_ctl/final_report_schema.py +26 -17
  144. package/runtime/python/okstra_ctl/fix_cycles.py +2 -2
  145. package/runtime/python/okstra_ctl/fixed_text.py +39 -0
  146. package/runtime/python/okstra_ctl/git_reconcile.py +41 -9
  147. package/runtime/python/okstra_ctl/handoff.py +5 -4
  148. package/runtime/python/okstra_ctl/i18n.py +4 -2
  149. package/runtime/python/okstra_ctl/implementation_direction.py +22 -14
  150. package/runtime/python/okstra_ctl/implementation_outcome.py +4 -7
  151. package/runtime/python/okstra_ctl/incremental_carry.py +130 -17
  152. package/runtime/python/okstra_ctl/incremental_scope.py +12 -4
  153. package/runtime/python/okstra_ctl/index.py +8 -11
  154. package/runtime/python/okstra_ctl/initial_prompt_materialization.py +79 -7
  155. package/runtime/python/okstra_ctl/invocation.py +3 -6
  156. package/runtime/python/okstra_ctl/json_boundary.py +366 -0
  157. package/runtime/python/okstra_ctl/json_registry.py +10 -12
  158. package/runtime/python/okstra_ctl/jsonl.py +19 -2
  159. package/runtime/python/okstra_ctl/lead_events.py +33 -1
  160. package/runtime/python/okstra_ctl/listing.py +3 -3
  161. package/runtime/python/okstra_ctl/log_report.py +24 -2
  162. package/runtime/python/okstra_ctl/manager_cli.py +92 -7
  163. package/runtime/python/okstra_ctl/manager_store.py +12 -10
  164. package/runtime/python/okstra_ctl/material.py +5 -1
  165. package/runtime/python/okstra_ctl/migrate.py +29 -25
  166. package/runtime/python/okstra_ctl/model_cli.py +3 -15
  167. package/runtime/python/okstra_ctl/model_io_cli.py +1051 -0
  168. package/runtime/python/okstra_ctl/mutation_probe.py +13 -4
  169. package/runtime/python/okstra_ctl/pane_reclaim.py +3 -2
  170. package/runtime/python/okstra_ctl/path_hints.py +12 -0
  171. package/runtime/python/okstra_ctl/paths.py +21 -0
  172. package/runtime/python/okstra_ctl/plan_items.py +115 -4
  173. package/runtime/python/okstra_ctl/plan_items_cli.py +626 -34
  174. package/runtime/python/okstra_ctl/ports/worker_dispatch.py +2 -1
  175. package/runtime/python/okstra_ctl/pr_template.py +3 -2
  176. package/runtime/python/okstra_ctl/project_meta.py +5 -7
  177. package/runtime/python/okstra_ctl/recap.py +5 -4
  178. package/runtime/python/okstra_ctl/reconcile.py +21 -27
  179. package/runtime/python/okstra_ctl/registry/host_discovery.py +3 -2
  180. package/runtime/python/okstra_ctl/registry/provider_registry.py +3 -2
  181. package/runtime/python/okstra_ctl/render.py +74 -16
  182. package/runtime/python/okstra_ctl/render_final_report.py +10 -8
  183. package/runtime/python/okstra_ctl/report_assembly.py +509 -0
  184. package/runtime/python/okstra_ctl/report_contract.py +2 -1
  185. package/runtime/python/okstra_ctl/report_finalize.py +67 -32
  186. package/runtime/python/okstra_ctl/report_html/render.py +3 -2
  187. package/runtime/python/okstra_ctl/report_inputs.py +72 -0
  188. package/runtime/python/okstra_ctl/report_language.py +3 -2
  189. package/runtime/python/okstra_ctl/report_markdown.py +81 -8
  190. package/runtime/python/okstra_ctl/report_narrative.py +351 -0
  191. package/runtime/python/okstra_ctl/report_projections.py +265 -0
  192. package/runtime/python/okstra_ctl/report_synthesis_packet.py +518 -0
  193. package/runtime/python/okstra_ctl/report_views.py +3 -2
  194. package/runtime/python/okstra_ctl/rollup.py +65 -4
  195. package/runtime/python/okstra_ctl/run.py +184 -65
  196. package/runtime/python/okstra_ctl/run_audit.py +3 -2
  197. package/runtime/python/okstra_ctl/run_context.py +6 -9
  198. package/runtime/python/okstra_ctl/run_index_row.py +2 -8
  199. package/runtime/python/okstra_ctl/schedule_semantics.py +5 -2
  200. package/runtime/python/okstra_ctl/schema_excerpt.py +15 -8
  201. package/runtime/python/okstra_ctl/session_transcript.py +27 -1
  202. package/runtime/python/okstra_ctl/set_work_status.py +64 -38
  203. package/runtime/python/okstra_ctl/stage_fix_carry.py +8 -6
  204. package/runtime/python/okstra_ctl/stage_ledger.py +132 -18
  205. package/runtime/python/okstra_ctl/stage_map.py +96 -28
  206. package/runtime/python/okstra_ctl/stage_targets.py +3 -4
  207. package/runtime/python/okstra_ctl/team.py +3 -2
  208. package/runtime/python/okstra_ctl/team_reconcile.py +11 -2
  209. package/runtime/python/okstra_ctl/time_report.py +51 -4
  210. package/runtime/python/okstra_ctl/usage_identity.py +2 -1
  211. package/runtime/python/okstra_ctl/usage_report.py +58 -4
  212. package/runtime/python/okstra_ctl/user_response.py +1431 -66
  213. package/runtime/python/okstra_ctl/wizard.py +11 -44
  214. package/runtime/python/okstra_ctl/work_categories.py +3 -2
  215. package/runtime/python/okstra_ctl/worker_dispatch.py +5 -2
  216. package/runtime/python/okstra_ctl/worker_prompt_body.py +49 -3
  217. package/runtime/python/okstra_ctl/worker_prompt_contract.py +3 -2
  218. package/runtime/python/okstra_ctl/worker_prompt_policy.py +31 -3
  219. package/runtime/python/okstra_ctl/worker_runner.py +14 -12
  220. package/runtime/python/okstra_ctl/workflow.py +2 -1
  221. package/runtime/python/okstra_ctl/worktree.py +3 -2
  222. package/runtime/python/okstra_ctl/wrapper_status.py +4 -2
  223. package/runtime/python/okstra_ctl/write_policy.py +4 -2
  224. package/runtime/python/okstra_token_usage/antigravity.py +39 -12
  225. package/runtime/python/okstra_token_usage/collect.py +90 -38
  226. package/runtime/python/okstra_token_usage/grok.py +127 -0
  227. package/runtime/schemas/final-report-v2.0.schema.json +9 -0
  228. package/runtime/schemas/final-report-v3.0.schema.json +10219 -0
  229. package/runtime/schemas/report-narrative-v3.0.schema.json +30 -0
  230. package/runtime/schemas/report-synthesis-packet-v1.0.schema.json +140 -0
  231. package/runtime/skills/okstra-brief-gen/SKILL.md +9 -7
  232. package/runtime/skills/okstra-code-review/SKILL.md +21 -11
  233. package/runtime/skills/okstra-container-build/SKILL.md +18 -18
  234. package/runtime/skills/okstra-inspect/SKILL.md +12 -11
  235. package/runtime/skills/okstra-inspect/facets/error-zip.md +8 -8
  236. package/runtime/skills/okstra-inspect/facets/errors.md +2 -2
  237. package/runtime/skills/okstra-inspect/facets/history.md +9 -14
  238. package/runtime/skills/okstra-inspect/facets/logs.md +2 -2
  239. package/runtime/skills/okstra-inspect/facets/recap.md +5 -5
  240. package/runtime/skills/okstra-inspect/facets/report.md +6 -10
  241. package/runtime/skills/okstra-inspect/facets/status.md +9 -8
  242. package/runtime/skills/okstra-inspect/facets/time.md +3 -3
  243. package/runtime/skills/okstra-manager/SKILL.md +16 -14
  244. package/runtime/skills/okstra-memory/SKILL.md +3 -3
  245. package/runtime/skills/okstra-pr-gen/SKILL.md +5 -4
  246. package/runtime/skills/okstra-rollup/SKILL.md +6 -16
  247. package/runtime/skills/okstra-run/SKILL.md +7 -7
  248. package/runtime/skills/okstra-schedule-gen/SKILL.md +21 -17
  249. package/runtime/skills/okstra-setup/SKILL.md +21 -13
  250. package/runtime/skills/okstra-setup/references/project-config.md +2 -2
  251. package/runtime/skills/okstra-usage/SKILL.md +10 -10
  252. package/runtime/skills/okstra-user-response/SKILL.md +78 -107
  253. package/runtime/templates/report-writer-prompt-preamble.md +29 -19
  254. package/runtime/templates/reports/html/macros/forms.html +6 -4
  255. package/runtime/templates/reports/schedule.template.md +4 -4
  256. package/runtime/templates/worker-error-contract.md +17 -29
  257. package/runtime/validators/validate-run.py +636 -72
  258. 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":"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"}
1
+ {"version":3,"file":"task-list.mjs","sourceRoot":"","sources":["../../../src/commands/inspect/task-list.mts"],"names":[],"mappings":"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"}
@@ -1,13 +1,23 @@
1
1
  import { runPythonModule } from "../../lib/python-helper.mjs";
2
- const USAGE = `okstra user-response — 태스크의 열린 clarification 질문에 세션 내에서 답하고 sidecar 기록
2
+ const USAGE = `okstra user-response — 열린 clarification 고정 텍스트로 읽고 sidecar 트랜잭션 기록
3
3
 
4
- A thin shim over \`python3 -m okstra_ctl.user_response\`. JSON 출력.
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 write --report <md> --answers <json> \\
10
- [--approval <json>] [--task-key <key>]
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;;;;;;;;;;;CAWb,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"}
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
- // Core check shared with 'okstra preflight' — resolves PROJECT_ROOT from cwd
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
- code: 1,
93
- payload: {
94
- ok: false,
95
- stage: "python",
96
- reason: `python invocation failed: ${raw}. ` +
97
- "This usually means the okstra runtime is stale or missing — " +
98
- "run 'okstra doctor' to diagnose, then 'okstra ensure-installed' " +
99
- "to repair.",
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 lines = probe.stdout.trim().split("\n");
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
- code: 2,
112
- payload: { ok: false, stage: "resolve", reason: resolverError, cwd },
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 = tagOf("PROJECT_ROOT");
116
- const projectJsonPath = tagOf("PROJECT_JSON");
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
- code: 1,
120
- payload: {
121
- ok: false,
122
- stage: "parse",
123
- reason: "could not parse python output",
124
- raw: probe.stdout,
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 projectId = null;
165
+ let projectData;
141
166
  try {
142
- const data = JSON.parse(await fs.readFile(projectJsonPath, "utf8"));
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":"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"}
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>] [--json]
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. Prints one JSON object:
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
- --json Default output format (kept for symmetry).
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 = { cwd: process.cwd(), runtime: null };
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
- continue;
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 emit(payload) {
55
- process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
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
- export async function run(args) {
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
- emit({
82
- ok: false,
83
- stage: "install",
84
- reason: "okstra runtime install failed — run 'okstra doctor' to diagnose, " +
85
- "then 'okstra install' to repair.",
86
- });
87
- return installCode === 2 ? 2 : 1;
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 > 0) {
91
- emit({
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
- return 1;
99
- }
183
+ },
184
+ };
185
+ }
186
+ async function checkProjectReadiness(opts) {
100
187
  const projectCheck = await checkProject({ cwd: opts.cwd });
101
- if (projectCheck.code !== 0) {
102
- emit(projectCheck.payload);
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
- emit({
113
- ...payload,
114
- ok: false,
115
- stage: "runtime_readiness",
116
- reason: `current host readiness is ${runtimeReadiness.status}`,
117
- runtimeReadiness,
118
- });
119
- return 1;
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
- emit({ ...payload, runtimeReadiness });
122
- return projectCheck.code;
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":"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"}
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 {};
@@ -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) {