okstra 0.165.2 → 0.165.4
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/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/prompts/lead/okstra-lead-contract.md +2 -2
- package/runtime/prompts/profiles/_implementation-deliverable.md +3 -2
- package/runtime/prompts/profiles/_implementation-diff-review.md +2 -2
- package/runtime/prompts/profiles/_implementation-executor.md +22 -15
- package/runtime/prompts/profiles/_implementation-verifier.md +4 -4
- package/runtime/prompts/profiles/_stage-discipline.md +4 -3
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/relay.md +1 -1
- package/runtime/python/okstra_ctl/cmux.py +9 -7
- package/runtime/python/okstra_ctl/consumers.py +73 -24
- package/runtime/python/okstra_ctl/dispatch_core.py +3 -3
- package/runtime/python/okstra_ctl/dispatch_state.py +21 -1
- package/runtime/python/okstra_ctl/domain/wizard/interaction.py +17 -5
- package/runtime/python/okstra_ctl/implementation_stage.py +2 -1
- package/runtime/python/okstra_ctl/initial_prompt_materialization.py +104 -12
- package/runtime/python/okstra_ctl/path_hints.py +10 -2
- package/runtime/python/okstra_ctl/render.py +5 -0
- package/runtime/python/okstra_ctl/stage_map.py +10 -4
- package/runtime/python/okstra_ctl/team.py +30 -6
- package/runtime/python/okstra_ctl/wizard.py +19 -2
- package/runtime/python/okstra_ctl/worker_prompt_body.py +24 -4
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +3 -1
- package/runtime/python/okstra_ctl/worker_prompt_headers.py +18 -1
- package/runtime/python/okstra_ctl/worker_prompt_policy.py +13 -2
- package/runtime/python/okstra_ctl/worktree.py +17 -1
- package/runtime/schemas/final-report-v1.0.schema.json +4 -0
- package/runtime/schemas/final-report-v2.0.schema.json +4 -0
- package/runtime/templates/implementation-worker-preamble.md +10 -3
- package/runtime/templates/reports/final-report.template.md +3 -0
- package/runtime/templates/worker-prompt-preamble.md +4 -3
- package/runtime/validators/validate-implementation-plan-stages.py +19 -2
- package/runtime/validators/validate-run.py +7 -0
- package/src/commands/execute/wizard.mjs +20 -8
|
@@ -22,7 +22,7 @@ Usage:
|
|
|
22
22
|
okstra wizard new-state-file
|
|
23
23
|
okstra wizard init --state-file <path> --project-root <p> --project-id <id> --host-runtime <runtime> \\
|
|
24
24
|
--entry-mode current-session --available-function <semantic-name>
|
|
25
|
-
okstra wizard step --state-file <path>
|
|
25
|
+
okstra wizard step --state-file <path> (--answer <value> | --no-submit)
|
|
26
26
|
okstra wizard render-args --state-file <path>
|
|
27
27
|
okstra wizard confirmation --state-file <path>
|
|
28
28
|
okstra wizard outcome --state-file <path>
|
|
@@ -34,11 +34,14 @@ All subcommands emit a single JSON object on stdout. On validation failure
|
|
|
34
34
|
'step' returns {ok:false, error, current} so the skill can re-prompt.
|
|
35
35
|
`;
|
|
36
36
|
|
|
37
|
-
//
|
|
38
|
-
// after
|
|
39
|
-
// "--". A heuristic that rejects "--"-prefixed values would
|
|
40
|
-
// directive/base-ref answers unsubmittable. The inline
|
|
41
|
-
// callers pass any value (including empty)
|
|
37
|
+
// Only the flags listed here are boolean; every other wizard flag takes a
|
|
38
|
+
// value, so the token after it is always its value — even free-text answers
|
|
39
|
+
// that begin with "--". A heuristic that rejects "--"-prefixed values would
|
|
40
|
+
// make legitimate directive/base-ref answers unsubmittable. The inline
|
|
41
|
+
// "--key=value" form lets callers pass any value (including empty)
|
|
42
|
+
// unambiguously.
|
|
43
|
+
const BOOLEAN_FLAGS = new Set(["no-submit"]);
|
|
44
|
+
|
|
42
45
|
export function parseFlags(args) {
|
|
43
46
|
const out = {};
|
|
44
47
|
const setFlag = (key, value) => {
|
|
@@ -59,6 +62,10 @@ export function parseFlags(args) {
|
|
|
59
62
|
continue;
|
|
60
63
|
}
|
|
61
64
|
const key = a.slice(2);
|
|
65
|
+
if (BOOLEAN_FLAGS.has(key)) {
|
|
66
|
+
out[key] = true;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
62
69
|
if (i + 1 >= args.length) {
|
|
63
70
|
throw new Error(`flag --${key} requires a value`);
|
|
64
71
|
}
|
|
@@ -81,8 +88,13 @@ export function buildPythonArgs(sub, flags, workspaceRoot = "") {
|
|
|
81
88
|
pyArgs.push("--available-function", value);
|
|
82
89
|
}
|
|
83
90
|
pyArgs.push("--entry-mode", flags["entry-mode"] ?? "current-session");
|
|
84
|
-
} else if (sub === "step"
|
|
85
|
-
|
|
91
|
+
} else if (sub === "step") {
|
|
92
|
+
if (flags["no-submit"]) {
|
|
93
|
+
pyArgs.push("--no-submit");
|
|
94
|
+
}
|
|
95
|
+
if (flags.answer !== undefined) {
|
|
96
|
+
pyArgs.push("--answer", flags.answer);
|
|
97
|
+
}
|
|
86
98
|
}
|
|
87
99
|
return pyArgs;
|
|
88
100
|
}
|