okstra 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/bin/okstra +62 -0
- package/package.json +30 -0
- package/runtime/.gitkeep +0 -0
- package/runtime/BUILD.json +5 -0
- package/runtime/agents/SKILL.md +243 -0
- package/runtime/agents/TODO.md +168 -0
- package/runtime/agents/workers/claude-worker.md +106 -0
- package/runtime/agents/workers/codex-worker.md +179 -0
- package/runtime/agents/workers/gemini-worker.md +179 -0
- package/runtime/agents/workers/report-writer-worker.md +116 -0
- package/runtime/bin/okstra-central.sh +152 -0
- package/runtime/bin/okstra-codex-exec.sh +53 -0
- package/runtime/bin/okstra-error-log.py +295 -0
- package/runtime/bin/okstra-gemini-exec.sh +55 -0
- package/runtime/bin/okstra-token-usage.py +46 -0
- package/runtime/bin/okstra.sh +162 -0
- package/runtime/prompts/launch.template.md +52 -0
- package/runtime/prompts/profiles/error-analysis.md +43 -0
- package/runtime/prompts/profiles/final-verification.md +37 -0
- package/runtime/prompts/profiles/implementation-planning.md +85 -0
- package/runtime/prompts/profiles/implementation.md +71 -0
- package/runtime/prompts/profiles/requirements-discovery.md +43 -0
- package/runtime/python/lib/okstra/cli.sh +227 -0
- package/runtime/python/lib/okstra/globals.sh +157 -0
- package/runtime/python/lib/okstra/interactive.sh +411 -0
- package/runtime/python/lib/okstra/project-resolver.sh +57 -0
- package/runtime/python/lib/okstra/usage.sh +98 -0
- package/runtime/python/lib/okstra-ctl/cmd-batch.sh +59 -0
- package/runtime/python/lib/okstra-ctl/cmd-list.sh +35 -0
- package/runtime/python/lib/okstra-ctl/cmd-open.sh +36 -0
- package/runtime/python/lib/okstra-ctl/cmd-projects.sh +26 -0
- package/runtime/python/lib/okstra-ctl/cmd-reconcile.sh +27 -0
- package/runtime/python/lib/okstra-ctl/cmd-reindex.sh +38 -0
- package/runtime/python/lib/okstra-ctl/cmd-rerun.sh +326 -0
- package/runtime/python/lib/okstra-ctl/cmd-show.sh +27 -0
- package/runtime/python/lib/okstra-ctl/cmd-tail.sh +76 -0
- package/runtime/python/lib/okstra-ctl/main.sh +41 -0
- package/runtime/python/lib/okstra-ctl/prepare.sh +29 -0
- package/runtime/python/lib/okstra-ctl/usage.sh +23 -0
- package/runtime/python/okstra_ctl/__init__.py +125 -0
- package/runtime/python/okstra_ctl/backfill.py +253 -0
- package/runtime/python/okstra_ctl/batch.py +62 -0
- package/runtime/python/okstra_ctl/ids.py +84 -0
- package/runtime/python/okstra_ctl/index.py +216 -0
- package/runtime/python/okstra_ctl/invocation.py +49 -0
- package/runtime/python/okstra_ctl/jsonl.py +84 -0
- package/runtime/python/okstra_ctl/listing.py +156 -0
- package/runtime/python/okstra_ctl/locks.py +42 -0
- package/runtime/python/okstra_ctl/material.py +62 -0
- package/runtime/python/okstra_ctl/models.py +63 -0
- package/runtime/python/okstra_ctl/path_resolve.py +40 -0
- package/runtime/python/okstra_ctl/paths.py +251 -0
- package/runtime/python/okstra_ctl/project_meta.py +51 -0
- package/runtime/python/okstra_ctl/reconcile.py +166 -0
- package/runtime/python/okstra_ctl/render.py +1065 -0
- package/runtime/python/okstra_ctl/resolver.py +54 -0
- package/runtime/python/okstra_ctl/run.py +674 -0
- package/runtime/python/okstra_ctl/run_context.py +166 -0
- package/runtime/python/okstra_ctl/seeding.py +97 -0
- package/runtime/python/okstra_ctl/sequence.py +53 -0
- package/runtime/python/okstra_ctl/session.py +33 -0
- package/runtime/python/okstra_ctl/tmux.py +27 -0
- package/runtime/python/okstra_ctl/workers.py +64 -0
- package/runtime/python/okstra_ctl/workflow.py +182 -0
- package/runtime/python/okstra_project/__init__.py +41 -0
- package/runtime/python/okstra_project/resolver.py +126 -0
- package/runtime/python/okstra_project/state.py +170 -0
- package/runtime/python/okstra_token_usage/__init__.py +26 -0
- package/runtime/python/okstra_token_usage/blocks.py +62 -0
- package/runtime/python/okstra_token_usage/claude.py +97 -0
- package/runtime/python/okstra_token_usage/cli.py +84 -0
- package/runtime/python/okstra_token_usage/codex.py +80 -0
- package/runtime/python/okstra_token_usage/collect.py +161 -0
- package/runtime/python/okstra_token_usage/gemini.py +77 -0
- package/runtime/python/okstra_token_usage/jsonl_io.py +18 -0
- package/runtime/python/okstra_token_usage/paths.py +22 -0
- package/runtime/python/okstra_token_usage/pricing.py +71 -0
- package/runtime/python/okstra_token_usage/report.py +64 -0
- package/runtime/templates/prd/brief.template.md +273 -0
- package/runtime/templates/project-docs/task-index.template.md +65 -0
- package/runtime/templates/reports/error-analysis-input.template.md +80 -0
- package/runtime/templates/reports/final-report.template.md +167 -0
- package/runtime/templates/reports/final-verification-input.template.md +67 -0
- package/runtime/templates/reports/implementation-input.template.md +81 -0
- package/runtime/templates/reports/implementation-planning-input.template.md +93 -0
- package/runtime/templates/reports/quick-input.template.md +64 -0
- package/runtime/templates/reports/schedule.template.md +168 -0
- package/runtime/templates/reports/settings.template.json +101 -0
- package/runtime/templates/reports/task-brief.template.md +165 -0
- package/runtime/validators/lib/common.sh +44 -0
- package/runtime/validators/lib/fixtures.sh +322 -0
- package/runtime/validators/lib/paths.sh +44 -0
- package/runtime/validators/lib/runners.sh +140 -0
- package/runtime/validators/lib/summary.sh +15 -0
- package/runtime/validators/lib/validate-assets.sh +44 -0
- package/runtime/validators/lib/validate-prompt-metadata.sh +267 -0
- package/runtime/validators/lib/validate-tasks.sh +335 -0
- package/runtime/validators/validate-run.py +568 -0
- package/runtime/validators/validate-schedule.py +665 -0
- package/runtime/validators/validate-workflow.sh +190 -0
- package/src/doctor.mjs +127 -0
- package/src/install.mjs +355 -0
- package/src/paths.mjs +132 -0
- package/src/uninstall.mjs +122 -0
- package/src/version.mjs +20 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# shellcheck shell=bash
|
|
2
|
+
|
|
3
|
+
collect_required_arguments() {
|
|
4
|
+
local missing_required=""
|
|
5
|
+
|
|
6
|
+
missing_required="$(missing_required_arguments_summary)"
|
|
7
|
+
if [[ -z "$missing_required" ]]; then
|
|
8
|
+
return 0
|
|
9
|
+
fi
|
|
10
|
+
if [[ "$ASSUME_YES" == "true" ]]; then
|
|
11
|
+
printf '%s\n' "--yes requires all required arguments. Missing: $missing_required" >&2
|
|
12
|
+
usage
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
if ! is_interactive_session; then
|
|
17
|
+
printf 'missing required arguments: %s\n' "$missing_required" >&2
|
|
18
|
+
usage
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
printf 'okstra is missing required arguments. Please provide the following values.\n' >&2
|
|
23
|
+
prompt_for_required_argument PROJECT_ID "Project ID"
|
|
24
|
+
prompt_for_required_argument TASK_GROUP "Task Group"
|
|
25
|
+
prompt_for_required_argument TASK_ID "Task ID"
|
|
26
|
+
prompt_for_required_argument ANALYSIS_TYPE "Task Type"
|
|
27
|
+
prompt_for_required_argument BRIEF_PATH "Task Brief Path"
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
confirm_execution_plan() {
|
|
31
|
+
local confirmation=""
|
|
32
|
+
local normalized_confirmation=""
|
|
33
|
+
if [[ "$ASSUME_YES" == "true" ]]; then
|
|
34
|
+
return 0
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
if ! is_interactive_session; then
|
|
38
|
+
return 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
cat >&2 <<CONFIRM_EOF
|
|
42
|
+
okstra execution summary:
|
|
43
|
+
render only: ${RENDER_ONLY}
|
|
44
|
+
task type: ${ANALYSIS_TYPE}
|
|
45
|
+
project id: ${PROJECT_ID}
|
|
46
|
+
task group: ${TASK_GROUP}
|
|
47
|
+
task id: ${TASK_ID}
|
|
48
|
+
task brief path: ${BRIEF_FILE_PATH}
|
|
49
|
+
clarification response: ${CLARIFICATION_RESPONSE_FILE:-None}
|
|
50
|
+
related tasks: ${RELATED_TASKS_INLINE}
|
|
51
|
+
recommended workers: ${SELECTED_REVIEWERS}
|
|
52
|
+
lead model: ${LEAD_MODEL_DISPLAY}
|
|
53
|
+
worker models: claude=${CLAUDE_WORKER_MODEL_DISPLAY}, codex=${CODEX_WORKER_MODEL_DISPLAY}, gemini=${GEMINI_WORKER_MODEL_DISPLAY}, report-writer=${REPORT_WRITER_MODEL_DISPLAY}
|
|
54
|
+
task key input: ${TASK_KEY_INPUT:-None}
|
|
55
|
+
task key: ${TASK_KEY}
|
|
56
|
+
task root: ${TASK_ROOT}
|
|
57
|
+
run dir: ${RUN_DIR}
|
|
58
|
+
final report path: ${FINAL_REPORT_FILE}
|
|
59
|
+
final report template: ${FINAL_REPORT_TEMPLATE_FILE}
|
|
60
|
+
CONFIRM_EOF
|
|
61
|
+
|
|
62
|
+
printf 'Continue? [y/yes]: ' >&2
|
|
63
|
+
if ! IFS= read -r confirmation; then
|
|
64
|
+
printf 'confirmation cancelled\n' >&2
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
normalized_confirmation="$(trim_whitespace "$confirmation")"
|
|
69
|
+
normalized_confirmation="$(printf '%s' "$normalized_confirmation" | tr '[:upper:]' '[:lower:]')"
|
|
70
|
+
|
|
71
|
+
if [[ "$normalized_confirmation" != "y" && "$normalized_confirmation" != "yes" ]]; then
|
|
72
|
+
printf 'okstra cancelled before execution\n' >&2
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
}
|
|
76
|
+
require_option_value() {
|
|
77
|
+
local option_name="$1"
|
|
78
|
+
local option_value="${2-}"
|
|
79
|
+
|
|
80
|
+
if [[ -z "$option_value" ]]; then
|
|
81
|
+
printf 'missing value for %s\n' "$option_name" >&2
|
|
82
|
+
usage
|
|
83
|
+
exit 1
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
printf '%s' "$option_value"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
parse_cli_arguments() {
|
|
90
|
+
while [[ $# -gt 0 ]]; do
|
|
91
|
+
case "$1" in
|
|
92
|
+
--render-only)
|
|
93
|
+
RENDER_ONLY="true"
|
|
94
|
+
shift
|
|
95
|
+
;;
|
|
96
|
+
--resume-clarification)
|
|
97
|
+
RESUME_CLARIFICATION_MODE="true"
|
|
98
|
+
shift
|
|
99
|
+
;;
|
|
100
|
+
--yes)
|
|
101
|
+
ASSUME_YES="true"
|
|
102
|
+
shift
|
|
103
|
+
;;
|
|
104
|
+
--refresh-assets)
|
|
105
|
+
printf 'warning: --refresh-assets is deprecated. okstra now installs into ~/.claude and ~/.okstra via okstra-install.sh.\n' >&2
|
|
106
|
+
printf ' re-run "%s/scripts/okstra-install.sh --refresh" to refresh installed assets.\n' "$WORKSPACE_ROOT" >&2
|
|
107
|
+
REFRESH_OKSTRA_ASSETS="true"
|
|
108
|
+
shift
|
|
109
|
+
;;
|
|
110
|
+
--workers)
|
|
111
|
+
WORKERS_OVERRIDE="$(require_option_value --workers "${2-}")"
|
|
112
|
+
shift 2
|
|
113
|
+
;;
|
|
114
|
+
--lead-model)
|
|
115
|
+
LEAD_MODEL_OVERRIDE="$(require_option_value --lead-model "${2-}")"
|
|
116
|
+
shift 2
|
|
117
|
+
;;
|
|
118
|
+
--claude-model)
|
|
119
|
+
CLAUDE_MODEL_OVERRIDE="$(require_option_value --claude-model "${2-}")"
|
|
120
|
+
shift 2
|
|
121
|
+
;;
|
|
122
|
+
--codex-model)
|
|
123
|
+
CODEX_MODEL_OVERRIDE="$(require_option_value --codex-model "${2-}")"
|
|
124
|
+
shift 2
|
|
125
|
+
;;
|
|
126
|
+
--gemini-model)
|
|
127
|
+
GEMINI_MODEL_OVERRIDE="$(require_option_value --gemini-model "${2-}")"
|
|
128
|
+
shift 2
|
|
129
|
+
;;
|
|
130
|
+
--report-writer-model)
|
|
131
|
+
REPORT_WRITER_MODEL_OVERRIDE="$(require_option_value --report-writer-model "${2-}")"
|
|
132
|
+
shift 2
|
|
133
|
+
;;
|
|
134
|
+
--related-tasks)
|
|
135
|
+
RELATED_TASKS_RAW="$(require_option_value --related-tasks "${2-}")"
|
|
136
|
+
shift 2
|
|
137
|
+
;;
|
|
138
|
+
--task-type)
|
|
139
|
+
ANALYSIS_TYPE="$(require_option_value --task-type "${2-}")"
|
|
140
|
+
shift 2
|
|
141
|
+
;;
|
|
142
|
+
--project-id)
|
|
143
|
+
PROJECT_ID="$(require_option_value --project-id "${2-}")"
|
|
144
|
+
shift 2
|
|
145
|
+
;;
|
|
146
|
+
--project-root)
|
|
147
|
+
PROJECT_ROOT_OVERRIDE="$(require_option_value --project-root "${2-}")"
|
|
148
|
+
shift 2
|
|
149
|
+
;;
|
|
150
|
+
--task-group)
|
|
151
|
+
TASK_GROUP="$(require_option_value --task-group "${2-}")"
|
|
152
|
+
shift 2
|
|
153
|
+
;;
|
|
154
|
+
--task-id)
|
|
155
|
+
TASK_ID="$(require_option_value --task-id "${2-}")"
|
|
156
|
+
shift 2
|
|
157
|
+
;;
|
|
158
|
+
--task-brief)
|
|
159
|
+
BRIEF_PATH="$(require_option_value --task-brief "${2-}")"
|
|
160
|
+
shift 2
|
|
161
|
+
;;
|
|
162
|
+
--directive)
|
|
163
|
+
DIRECTIVE="$(require_option_value --directive "${2-}")"
|
|
164
|
+
shift 2
|
|
165
|
+
;;
|
|
166
|
+
--clarification-response)
|
|
167
|
+
CLARIFICATION_RESPONSE_PATH="$(require_option_value --clarification-response "${2-}")"
|
|
168
|
+
shift 2
|
|
169
|
+
;;
|
|
170
|
+
--task-key)
|
|
171
|
+
TASK_KEY_INPUT="$(require_option_value --task-key "${2-}")"
|
|
172
|
+
shift 2
|
|
173
|
+
;;
|
|
174
|
+
--approved-plan)
|
|
175
|
+
APPROVED_PLAN_PATH="$(require_option_value --approved-plan "${2-}")"
|
|
176
|
+
shift 2
|
|
177
|
+
;;
|
|
178
|
+
-h|--help)
|
|
179
|
+
usage
|
|
180
|
+
exit 0
|
|
181
|
+
;;
|
|
182
|
+
-*)
|
|
183
|
+
__unknown_opt="$1"
|
|
184
|
+
__opt_name="${__unknown_opt%%=*}"
|
|
185
|
+
printf 'unknown option: %s\n' "$__unknown_opt" >&2
|
|
186
|
+
case "$__opt_name" in
|
|
187
|
+
--phase|--phases|--lifecycle-phase)
|
|
188
|
+
printf ' hint: --phase is not a valid flag. Use --task-type <requirements-discovery|error-analysis|implementation-planning|implementation|final-verification>.\n' >&2
|
|
189
|
+
printf ' "phase" is a manifest lifecycle field name, not a CLI option.\n' >&2
|
|
190
|
+
;;
|
|
191
|
+
--brief|--task-brief)
|
|
192
|
+
printf ' hint: did you mean --task-brief?\n' >&2
|
|
193
|
+
;;
|
|
194
|
+
--analysis-target|--target|--review-target)
|
|
195
|
+
printf ' hint: --analysis-target was removed. Put supplementary materials inside the task brief itself.\n' >&2
|
|
196
|
+
;;
|
|
197
|
+
--project|--proj)
|
|
198
|
+
printf ' hint: did you mean --project-id?\n' >&2
|
|
199
|
+
;;
|
|
200
|
+
--group)
|
|
201
|
+
printf ' hint: did you mean --task-group?\n' >&2
|
|
202
|
+
;;
|
|
203
|
+
--id)
|
|
204
|
+
printf ' hint: did you mean --task-id?\n' >&2
|
|
205
|
+
;;
|
|
206
|
+
esac
|
|
207
|
+
printf ' valid options: --render-only --resume-clarification --yes --refresh-assets --workers --lead-model --claude-model --codex-model --gemini-model --report-writer-model --related-tasks --task-type --project-id --project-root --task-group --task-id --task-brief --directive --clarification-response --approved-plan -h|--help\n' >&2
|
|
208
|
+
usage
|
|
209
|
+
exit 1
|
|
210
|
+
;;
|
|
211
|
+
*)
|
|
212
|
+
printf 'unexpected positional argument: %s\n' "$1" >&2
|
|
213
|
+
if [[ "$1" == *:*:* ]]; then
|
|
214
|
+
__key_proj="${1%%:*}"
|
|
215
|
+
__key_rest="${1#*:}"
|
|
216
|
+
__key_group="${__key_rest%%:*}"
|
|
217
|
+
__key_id="${__key_rest#*:}"
|
|
218
|
+
printf ' hint: looks like a manifest taskKey (project:group:id). Pass it via --task-key, e.g. --task-key %s:%s:%s\n' "$__key_proj" "$__key_group" "$__key_id" >&2
|
|
219
|
+
else
|
|
220
|
+
printf ' hint: all inputs must be passed as named flags. See usage below.\n' >&2
|
|
221
|
+
fi
|
|
222
|
+
usage
|
|
223
|
+
exit 1
|
|
224
|
+
;;
|
|
225
|
+
esac
|
|
226
|
+
done
|
|
227
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# shellcheck shell=bash
|
|
2
|
+
|
|
3
|
+
PROFILE_DIR="$WORKSPACE_ROOT/prompts/profiles"
|
|
4
|
+
PROMPT_TEMPLATE="$WORKSPACE_ROOT/prompts/launch.template.md"
|
|
5
|
+
TASK_INDEX_TEMPLATE="$WORKSPACE_ROOT/templates/project-docs/task-index.template.md"
|
|
6
|
+
FINAL_REPORT_TEMPLATE_SOURCE="$WORKSPACE_ROOT/templates/reports/final-report.template.md"
|
|
7
|
+
RUN_VALIDATOR_SCRIPT="$WORKSPACE_ROOT/validators/validate-run.py"
|
|
8
|
+
SOURCE_CLAUDE_OKSTRA_SKILL="$WORKSPACE_ROOT/agents/SKILL.md"
|
|
9
|
+
OKSTRA_ROOT=""
|
|
10
|
+
OKSTRA_TASKS_ROOT=""
|
|
11
|
+
OKSTRA_DISCOVERY_DIR=""
|
|
12
|
+
OKSTRA_DISCOVERY_RELATIVE_PATH=""
|
|
13
|
+
OKSTRA_LATEST_TASK_FILE=""
|
|
14
|
+
OKSTRA_LATEST_TASK_RELATIVE_PATH=""
|
|
15
|
+
OKSTRA_TASK_CATALOG_FILE=""
|
|
16
|
+
OKSTRA_TASK_CATALOG_RELATIVE_PATH=""
|
|
17
|
+
RENDER_ONLY="false"
|
|
18
|
+
ASSUME_YES="false"
|
|
19
|
+
RESUME_CLARIFICATION_MODE="false"
|
|
20
|
+
REFRESH_OKSTRA_ASSETS="false"
|
|
21
|
+
WORKERS_OVERRIDE=""
|
|
22
|
+
LEAD_MODEL_OVERRIDE=""
|
|
23
|
+
CLAUDE_MODEL_OVERRIDE=""
|
|
24
|
+
CODEX_MODEL_OVERRIDE=""
|
|
25
|
+
GEMINI_MODEL_OVERRIDE=""
|
|
26
|
+
REPORT_WRITER_MODEL_OVERRIDE=""
|
|
27
|
+
RELATED_TASKS_RAW=""
|
|
28
|
+
ANALYSIS_TYPE=""
|
|
29
|
+
BRIEF_PATH=""
|
|
30
|
+
PROJECT_ID=""
|
|
31
|
+
TASK_GROUP=""
|
|
32
|
+
TASK_ID=""
|
|
33
|
+
TASK_KEY_INPUT=""
|
|
34
|
+
TASK_KEY=""
|
|
35
|
+
REVIEW_PROFILE=""
|
|
36
|
+
DIRECTIVE=""
|
|
37
|
+
CLARIFICATION_RESPONSE_PATH=""
|
|
38
|
+
APPROVED_PLAN_PATH=""
|
|
39
|
+
CLARIFICATION_RESPONSE_FILE=""
|
|
40
|
+
CLARIFICATION_RESPONSE_RELATIVE_PATH=""
|
|
41
|
+
PROJECT_ROOT=""
|
|
42
|
+
PROJECT_ROOT_OVERRIDE=""
|
|
43
|
+
PROFILE_FILE=""
|
|
44
|
+
BRIEF_FILE_PATH=""
|
|
45
|
+
REVIEW_MATERIAL=""
|
|
46
|
+
PROFILE_CONTENT=""
|
|
47
|
+
SELECTED_REVIEWERS=""
|
|
48
|
+
BRIEF_RELATIVE_PATH=""
|
|
49
|
+
TASK_GROUP_SEGMENT=""
|
|
50
|
+
TASK_ID_SEGMENT=""
|
|
51
|
+
TASK_ROOT=""
|
|
52
|
+
TASK_MANIFEST_FILE=""
|
|
53
|
+
TASK_INDEX_FILE=""
|
|
54
|
+
INSTRUCTION_SET_DIR=""
|
|
55
|
+
RUNS_DIR=""
|
|
56
|
+
HISTORY_DIR=""
|
|
57
|
+
TIMELINE_FILE=""
|
|
58
|
+
RUN_DIR=""
|
|
59
|
+
RUN_MANIFESTS_DIR=""
|
|
60
|
+
RUN_STATE_DIR=""
|
|
61
|
+
RUN_PROMPTS_DIR=""
|
|
62
|
+
RUN_REPORTS_DIR=""
|
|
63
|
+
RUN_STATUS_DIR=""
|
|
64
|
+
RUN_SESSIONS_DIR=""
|
|
65
|
+
RUN_LOGS_DIR=""
|
|
66
|
+
RUN_MANIFEST_FILE=""
|
|
67
|
+
RUN_MANIFEST_RELATIVE_PATH=""
|
|
68
|
+
RUN_PROMPT_SNAPSHOT_FILE=""
|
|
69
|
+
RUN_PROMPT_SNAPSHOT_RELATIVE_PATH=""
|
|
70
|
+
CLAUDE_WORKER_PROMPT_FILE=""
|
|
71
|
+
CLAUDE_WORKER_PROMPT_RELATIVE_PATH=""
|
|
72
|
+
CODEX_WORKER_PROMPT_FILE=""
|
|
73
|
+
CODEX_WORKER_PROMPT_RELATIVE_PATH=""
|
|
74
|
+
GEMINI_WORKER_PROMPT_FILE=""
|
|
75
|
+
GEMINI_WORKER_PROMPT_RELATIVE_PATH=""
|
|
76
|
+
REPORT_WRITER_WORKER_PROMPT_FILE=""
|
|
77
|
+
REPORT_WRITER_WORKER_PROMPT_RELATIVE_PATH=""
|
|
78
|
+
FINAL_REPORT_FILE=""
|
|
79
|
+
FINAL_STATUS_FILE=""
|
|
80
|
+
FINAL_REPORT_RELATIVE_PATH=""
|
|
81
|
+
FINAL_STATUS_RELATIVE_PATH=""
|
|
82
|
+
FINAL_REPORT_TEMPLATE_FILE=""
|
|
83
|
+
FINAL_REPORT_TEMPLATE_RELATIVE_PATH=""
|
|
84
|
+
REFERENCE_EXPECTATIONS_FILE=""
|
|
85
|
+
REFERENCE_EXPECTATIONS_RELATIVE_PATH=""
|
|
86
|
+
TEAM_STATE_FILE=""
|
|
87
|
+
TEAM_STATE_RELATIVE_PATH=""
|
|
88
|
+
WORKER_RESULTS_DIR=""
|
|
89
|
+
WORKER_RESULTS_RELATIVE_PATH=""
|
|
90
|
+
RUN_VALIDATOR_RELATIVE_PATH=""
|
|
91
|
+
CLAUDE_WORKER_RESULT_FILE=""
|
|
92
|
+
CLAUDE_WORKER_RESULT_RELATIVE_PATH=""
|
|
93
|
+
CODEX_WORKER_RESULT_FILE=""
|
|
94
|
+
CODEX_WORKER_RESULT_RELATIVE_PATH=""
|
|
95
|
+
GEMINI_WORKER_RESULT_FILE=""
|
|
96
|
+
GEMINI_WORKER_RESULT_RELATIVE_PATH=""
|
|
97
|
+
REPORT_WRITER_WORKER_RESULT_FILE=""
|
|
98
|
+
REPORT_WRITER_WORKER_RESULT_RELATIVE_PATH=""
|
|
99
|
+
CLAUDE_SESSION_ID=""
|
|
100
|
+
CLAUDE_RESUME_COMMAND_FILE=""
|
|
101
|
+
CLAUDE_RESUME_COMMAND_RELATIVE_PATH=""
|
|
102
|
+
RUN_TIMESTAMP_ISO=""
|
|
103
|
+
RUN_DATETIME_SEGMENT=""
|
|
104
|
+
RUN_TIME_SEGMENT=""
|
|
105
|
+
RUN_FILE_SUFFIX=""
|
|
106
|
+
RUN_MANIFESTS_SEQ=""
|
|
107
|
+
RUN_PROMPTS_SEQ=""
|
|
108
|
+
RUN_REPORTS_SEQ=""
|
|
109
|
+
RUN_STATUS_SEQ=""
|
|
110
|
+
RUN_STATE_SEQ=""
|
|
111
|
+
RUN_SESSIONS_SEQ=""
|
|
112
|
+
WORKER_RESULTS_SEQ=""
|
|
113
|
+
TASK_ROOT_RELATIVE_PATH=""
|
|
114
|
+
TASK_MANIFEST_RELATIVE_PATH=""
|
|
115
|
+
TASK_INDEX_RELATIVE_PATH=""
|
|
116
|
+
INSTRUCTION_SET_RELATIVE_PATH=""
|
|
117
|
+
RUNS_RELATIVE_PATH=""
|
|
118
|
+
HISTORY_RELATIVE_PATH=""
|
|
119
|
+
TIMELINE_RELATIVE_PATH=""
|
|
120
|
+
RUN_DIR_RELATIVE_PATH=""
|
|
121
|
+
RUN_MANIFESTS_RELATIVE_PATH=""
|
|
122
|
+
RUN_STATE_RELATIVE_PATH=""
|
|
123
|
+
RUN_PROMPTS_RELATIVE_PATH=""
|
|
124
|
+
RUN_REPORTS_RELATIVE_PATH=""
|
|
125
|
+
RUN_STATUS_RELATIVE_PATH=""
|
|
126
|
+
RUN_SESSIONS_RELATIVE_PATH=""
|
|
127
|
+
LATEST_RUN_PATH=""
|
|
128
|
+
LATEST_RUN_RELATIVE_PATH=""
|
|
129
|
+
LATEST_REPORT_PATH=""
|
|
130
|
+
LATEST_REPORT_RELATIVE_PATH=""
|
|
131
|
+
CURRENT_TASK_STATUS=""
|
|
132
|
+
CURRENT_RUN_STATUS=""
|
|
133
|
+
VALIDATION_STATUS="not-run"
|
|
134
|
+
VALIDATION_UPDATED_AT=""
|
|
135
|
+
VALIDATION_FAILURES_JSON="[]"
|
|
136
|
+
RELATED_TASKS_JSON="[]"
|
|
137
|
+
RELATED_TASKS_BULLETS="- None recorded"
|
|
138
|
+
RELATED_TASKS_INLINE="None"
|
|
139
|
+
PROMPT=""
|
|
140
|
+
LEAD_MODEL_DISPLAY=""
|
|
141
|
+
LEAD_MODEL_EXECUTION_VALUE=""
|
|
142
|
+
CLAUDE_WORKER_MODEL_DISPLAY=""
|
|
143
|
+
CLAUDE_WORKER_MODEL_EXECUTION_VALUE=""
|
|
144
|
+
CODEX_WORKER_MODEL_DISPLAY=""
|
|
145
|
+
CODEX_WORKER_MODEL_EXECUTION_VALUE=""
|
|
146
|
+
GEMINI_WORKER_MODEL_DISPLAY=""
|
|
147
|
+
GEMINI_WORKER_MODEL_EXECUTION_VALUE=""
|
|
148
|
+
REPORT_WRITER_MODEL_DISPLAY=""
|
|
149
|
+
REPORT_WRITER_MODEL_EXECUTION_VALUE=""
|
|
150
|
+
DEFAULT_WORKERS="claude,codex,gemini,report-writer"
|
|
151
|
+
DEFAULT_LEAD_MODEL_NAME="${OKSTRA_DEFAULT_LEAD_MODEL:-opus}"
|
|
152
|
+
DEFAULT_CLAUDE_WORKER_MODEL_NAME="${OKSTRA_DEFAULT_CLAUDE_MODEL:-sonnet}"
|
|
153
|
+
DEFAULT_CODEX_WORKER_MODEL_NAME="${OKSTRA_DEFAULT_CODEX_MODEL:-gpt-5.5}"
|
|
154
|
+
DEFAULT_GEMINI_WORKER_MODEL_NAME="${OKSTRA_DEFAULT_GEMINI_MODEL:-auto}"
|
|
155
|
+
DEFAULT_REPORT_WRITER_MODEL_NAME="${OKSTRA_DEFAULT_REPORT_WRITER_MODEL:-$DEFAULT_LEAD_MODEL_NAME}"
|
|
156
|
+
DISPLAY_COMMAND_NAME="${OKSTRA_COMMAND_NAME:-$(basename "$0")}"
|
|
157
|
+
DISPLAY_TOOL_NAME="${OKSTRA_TOOL_NAME:-okstra}"
|