okstra 0.199.4 → 0.200.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.
Files changed (42) hide show
  1. package/README.md +4 -1
  2. package/dist/lib/runtime-payload.mjs +1 -0
  3. package/dist/lib/runtime-payload.mjs.map +1 -1
  4. package/docs/cli.md +10 -0
  5. package/package.json +1 -1
  6. package/runtime/BUILD.json +2 -2
  7. package/runtime/bin/okstra-provider-exec.py +1 -1
  8. package/runtime/bin/okstra-zai-exec.sh +5 -0
  9. package/runtime/prompts/launch.template.md +12 -0
  10. package/runtime/prompts/lead/okstra-lead-contract.md +3 -1
  11. package/runtime/prompts/lead/plan-body-verification.md +16 -4
  12. package/runtime/prompts/profiles/implementation-planning.md +1 -1
  13. package/runtime/prompts/wizard/prompts.ko.json +1 -0
  14. package/runtime/python/okstra_ctl/adapters/hosts/codex/relay.md +18 -4
  15. package/runtime/python/okstra_ctl/adapters/providers/zai/adapter.py +96 -0
  16. package/runtime/python/okstra_ctl/adapters/providers/zai/manifest.json +5 -0
  17. package/runtime/python/okstra_ctl/agent/prompt_cli/corrections.py +6 -3
  18. package/runtime/python/okstra_ctl/agent/prompt_cli/materialize.py +23 -1
  19. package/runtime/python/okstra_ctl/consumers.py +0 -55
  20. package/runtime/python/okstra_ctl/domain/worker_exec.py +5 -2
  21. package/runtime/python/okstra_ctl/domain/write_policy.py +7 -1
  22. package/runtime/python/okstra_ctl/execution_mutation_audit.py +6 -17
  23. package/runtime/python/okstra_ctl/final_report_schema.py +16 -16
  24. package/runtime/python/okstra_ctl/plan_items_cli.py +6 -0
  25. package/runtime/python/okstra_ctl/report_assembly.py +4 -1
  26. package/runtime/python/okstra_ctl/report_corrections.py +24 -15
  27. package/runtime/python/okstra_ctl/report_finalize.py +1 -1
  28. package/runtime/python/okstra_ctl/report_narrative.py +11 -6
  29. package/runtime/python/okstra_ctl/report_projections.py +1 -0
  30. package/runtime/python/okstra_ctl/report_synthesis_packet.py +1 -1
  31. package/runtime/python/okstra_ctl/wizard/confirmation.py +4 -0
  32. package/runtime/python/okstra_ctl/wizard/engine.py +4 -16
  33. package/runtime/python/okstra_ctl/wizard/picker_navigation.py +7 -37
  34. package/runtime/python/okstra_ctl/worker_runner.py +7 -2
  35. package/runtime/python/okstra_ctl/worktree_status_cli.py +2 -3
  36. package/runtime/python/okstra_ctl/write_policy.py +51 -4
  37. package/runtime/python/okstra_token_usage/claude.py +29 -0
  38. package/runtime/python/okstra_token_usage/collect.py +11 -1
  39. package/runtime/schemas/execution-manifest-v2.schema.json +1 -0
  40. package/runtime/schemas/final-report-v2.0.schema.json +3 -2
  41. package/runtime/schemas/final-report-v3.0.schema.json +3 -2
  42. package/runtime/skills/okstra-run/SKILL.md +9 -1
@@ -7025,7 +7025,8 @@
7025
7025
  "Codex",
7026
7026
  "Antigravity",
7027
7027
  "Grok",
7028
- "Kimi"
7028
+ "Kimi",
7029
+ "Z.ai GLM"
7029
7030
  ]
7030
7031
  },
7031
7032
  "role": {
@@ -8651,7 +8652,7 @@
8651
8652
  "minLength": 1
8652
8653
  },
8653
8654
  "plannedPaths": {
8654
- "description": "Repository-relative paths this step may write, one per entry. `files` is prose for a human reader and cannot serve as a path ledger it carries globs, exclusions and counts so the implementer write policy reads this list instead.",
8655
+ "description": "Paths this step may write, one per entry. Source paths are relative to the assigned worktree; absolute paths under that worktree or the project checkout identify the same repository-relative source. `.okstra` artifact paths are anchored at the original project root and may be absolute. The write-policy builder checks artifact paths against the worker's existing artifact permissions and keeps them out of the source ledger. Keep absolute artifact paths in executable commands. `files` is human-readable prose, not a path ledger.",
8655
8656
  "type": "array",
8656
8657
  "minItems": 1,
8657
8658
  "items": {
@@ -7122,7 +7122,8 @@
7122
7122
  "Codex",
7123
7123
  "Antigravity",
7124
7124
  "Grok",
7125
- "Kimi"
7125
+ "Kimi",
7126
+ "Z.ai GLM"
7126
7127
  ]
7127
7128
  },
7128
7129
  "role": {
@@ -8796,7 +8797,7 @@
8796
8797
  "minLength": 1
8797
8798
  },
8798
8799
  "plannedPaths": {
8799
- "description": "Repository-relative paths this step may write, one per entry. `files` is prose for a human reader and cannot serve as a path ledger it carries globs, exclusions and counts so the implementer write policy reads this list instead.",
8800
+ "description": "Paths this step may write, one per entry. Source paths are relative to the assigned worktree; absolute paths under that worktree or the project checkout identify the same repository-relative source. `.okstra` artifact paths are anchored at the original project root and may be absolute. The write-policy builder checks artifact paths against the worker's existing artifact permissions and keeps them out of the source ledger. Keep absolute artifact paths in executable commands. `files` is human-readable prose, not a path ledger.",
8800
8801
  "type": "array",
8801
8802
  "minItems": 1,
8802
8803
  "items": {
@@ -53,7 +53,7 @@ The wizard tells you which relay operation to use via `next.interaction.kind`. S
53
53
  - `kind: "done"` → input collection finished; move to Step 5.
54
54
  - `kind: "aborted"` → the user picked abort; the wizard is terminally cancelled. Tell the user on one short line that the run setup was aborted, delete the state file (`rm` with the literal path), and stop this skill — do NOT call `render-args` or `render-bundle` (the wizard rejects `render-args` on an aborted state).
55
55
 
56
- When native single selection is available, the runtime divides long lists and unsupported multi-selections into selectable screens. Render the returned screen without rebuilding the full list. This applies to plan confirmation, stages, role counts, and provider/model lists. Submit navigation and completion option values normally; the runtime retains the current step until its answer is complete. A ban on textual choice lists does not authorize asking the user to type a model identifier. If a required selector is unavailable, preserve state and follow the relay's `recovery` object. Genuine text steps still collect text.
56
+ When native selection is available, the runtime keeps choices in that control or in same-screen question tabs when the complete selection fits. Otherwise, it returns a complete numbered list: show all labels and descriptions in one message and accept a number, label, or value (comma-separated for multiple choices). This applies to plan confirmation, stages, role counts, and provider/model lists. Do not paginate choices or add a next-page option. Follow the returned `interaction.kind`, including numbered interactions when the user generally prefers a selector. If the declared selector itself fails, follow the relay's `recovery` object. Genuine text steps still collect text.
57
57
 
58
58
  Submit the answer shape required by `interaction.answerProtocol`; do not add normalization beyond the registered relay's explicit mapping. Invalid, out-of-range, or ambiguous answers return `ok: false` and must re-render the same complete interaction.
59
59
 
@@ -228,6 +228,8 @@ When `next.step == "confirm"`, the prompt's `label` already carries the full sel
228
228
 
229
229
  `okstra wizard confirmation --state-file <path>` returns the same block as `{ok: true, text: ...}` for a text-only host or when the user asks to see the summary again; it is not a substitute for the label.
230
230
 
231
+ Keep the provider data-transfer disclosure in that label alongside the selected roles/models and task inputs. The user's actual `Proceed` response authorizes the displayed recipients and task-material scope; it does not grant host execution privileges. When dispatching, follow the host relay's guidance to carry that response and scope into the execution-permission request. A freshly generated `confirmationText` does not retroactively add disclosure to an older user response.
232
+
231
233
  ## Step 5: Render the task bundle
232
234
 
233
235
  When `next.kind == "done"`, fetch the public wizard outcome:
@@ -261,6 +263,8 @@ Before you ask the user for any approval, clarification, or decision after worke
261
263
 
262
264
  Build the `okstra render-bundle` invocation from `outcome.renderArgv`, passing every token verbatim and in order (including empty strings — they are intentional `use phase default` markers).
263
265
 
266
+ Before invoking it, follow the active host relay's execution-permission guidance. For Codex, read "Permission before bundle preparation" in the relay already selected at preflight: bundle preparation can write protected Git metadata while creating a branch and worktree, even with `--render-only`. Apply this guidance to the first invocation and each subsequent phase or stage preparation.
267
+
264
268
  Analysis sidetracks therefore forward wizard-owned tokens such as `--analysis-target "<value>"` and `--evidence-inputs "<value>"` when they are present. These are examples of the verbatim token rule, not a separate hard-coded argument list.
265
269
 
266
270
  Step 3's empty-answer and escaping rules apply verbatim: every flag in `renderArgv` whose following value is the empty string MUST still be passed explicitly (e.g. `--workers ""`, `--directive ""`) — `render-bundle` distinguishes "flag absent" from "flag present with empty value", and the wizard's intent is always the latter.
@@ -460,6 +464,10 @@ Do not read the wizard state file directly. `okstra wizard outcome` exposes any
460
464
  - Each wizard run owns its own state file (one per `okstra wizard new-state-file`); two parallel skill invocations do not collide.
461
465
  - The skill must NOT call `okstra.sh` (or any other bash entrypoint) that would re-implement the orchestration. The wizard + `render-bundle` is the single authority.
462
466
 
467
+ ## Boundary updates
468
+
469
+ Follow the rendered launch prompt's "Progress, remaining work, and recommendation" guidance at each phase or implementation-stage boundary, at task completion, and before a controlled session pause or handoff. Include results, remaining work, and the recommended action with its reason. During an authorized continuous run, report the boundary and continue the queue; when the lead returns, relay its closeout without repeating an already delivered update.
470
+
463
471
  ## Failure Modes
464
472
 
465
473
  | Symptom | Cause | Fix |