prizmkit 1.1.57 → 1.1.60
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/bin/create-prizmkit.js +8 -6
- package/bundled/VERSION.json +3 -3
- package/bundled/adapters/codex/agent-adapter.js +38 -0
- package/bundled/adapters/codex/paths.js +27 -0
- package/bundled/adapters/codex/rules-adapter.js +30 -0
- package/bundled/adapters/codex/settings-adapter.js +27 -0
- package/bundled/adapters/codex/skill-adapter.js +65 -0
- package/bundled/adapters/codex/team-adapter.js +37 -0
- package/bundled/dev-pipeline/.env.example +2 -1
- package/bundled/dev-pipeline/README.md +10 -7
- package/bundled/dev-pipeline/lib/common.sh +278 -37
- package/bundled/dev-pipeline/run-bugfix.sh +10 -61
- package/bundled/dev-pipeline/run-feature.sh +10 -78
- package/bundled/dev-pipeline/run-recovery.sh +10 -46
- package/bundled/dev-pipeline/run-refactor.sh +10 -61
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +17 -7
- package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +9 -3
- package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +9 -3
- package/bundled/dev-pipeline/scripts/utils.py +6 -4
- package/bundled/dev-pipeline-windows/.env.example +28 -0
- package/bundled/dev-pipeline-windows/README.md +30 -0
- package/bundled/dev-pipeline-windows/SCHEMA_ANALYSIS.md +525 -0
- package/bundled/dev-pipeline-windows/assets/feature-list-example.json +146 -0
- package/bundled/dev-pipeline-windows/assets/prizm-dev-team-integration.md +138 -0
- package/bundled/dev-pipeline-windows/launch-bugfix-daemon.ps1 +9 -0
- package/bundled/dev-pipeline-windows/launch-feature-daemon.ps1 +9 -0
- package/bundled/dev-pipeline-windows/launch-refactor-daemon.ps1 +9 -0
- package/bundled/dev-pipeline-windows/lib/common.ps1 +432 -0
- package/bundled/dev-pipeline-windows/lib/daemon.ps1 +140 -0
- package/bundled/dev-pipeline-windows/lib/pipeline.ps1 +446 -0
- package/bundled/dev-pipeline-windows/lib/reset.ps1 +87 -0
- package/bundled/dev-pipeline-windows/reset-bug.ps1 +9 -0
- package/bundled/dev-pipeline-windows/reset-feature.ps1 +9 -0
- package/bundled/dev-pipeline-windows/reset-refactor.ps1 +9 -0
- package/bundled/dev-pipeline-windows/run-bugfix.ps1 +9 -0
- package/bundled/dev-pipeline-windows/run-feature.ps1 +9 -0
- package/bundled/dev-pipeline-windows/run-recovery.ps1 +76 -0
- package/bundled/dev-pipeline-windows/run-refactor.ps1 +9 -0
- package/bundled/dev-pipeline-windows/scripts/check-session-status.py +228 -0
- package/bundled/dev-pipeline-windows/scripts/cleanup-logs.py +192 -0
- package/bundled/dev-pipeline-windows/scripts/detect-stuck.py +530 -0
- package/bundled/dev-pipeline-windows/scripts/generate-bootstrap-prompt.py +1737 -0
- package/bundled/dev-pipeline-windows/scripts/generate-bugfix-prompt.py +685 -0
- package/bundled/dev-pipeline-windows/scripts/generate-recovery-prompt.py +805 -0
- package/bundled/dev-pipeline-windows/scripts/generate-refactor-prompt.py +763 -0
- package/bundled/dev-pipeline-windows/scripts/init-bugfix-pipeline.py +316 -0
- package/bundled/dev-pipeline-windows/scripts/init-dev-team.py +134 -0
- package/bundled/dev-pipeline-windows/scripts/init-pipeline.py +380 -0
- package/bundled/dev-pipeline-windows/scripts/init-refactor-pipeline.py +399 -0
- package/bundled/dev-pipeline-windows/scripts/parse-stream-progress.py +388 -0
- package/bundled/dev-pipeline-windows/scripts/patch-completion-notes.py +191 -0
- package/bundled/dev-pipeline-windows/scripts/update-bug-status.py +864 -0
- package/bundled/dev-pipeline-windows/scripts/update-checkpoint.py +173 -0
- package/bundled/dev-pipeline-windows/scripts/update-feature-status.py +1501 -0
- package/bundled/dev-pipeline-windows/scripts/update-refactor-status.py +1073 -0
- package/bundled/dev-pipeline-windows/scripts/utils.py +542 -0
- package/bundled/dev-pipeline-windows/templates/agent-prompts/critic-plan-challenge.md +7 -0
- package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-fix.md +7 -0
- package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-implement.md +30 -0
- package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-resume.md +5 -0
- package/bundled/dev-pipeline-windows/templates/agent-prompts/reviewer-review.md +7 -0
- package/bundled/dev-pipeline-windows/templates/bootstrap-prompt.md +46 -0
- package/bundled/dev-pipeline-windows/templates/bootstrap-tier1.md +43 -0
- package/bundled/dev-pipeline-windows/templates/bootstrap-tier2.md +43 -0
- package/bundled/dev-pipeline-windows/templates/bootstrap-tier3.md +43 -0
- package/bundled/dev-pipeline-windows/templates/bug-fix-list-schema.json +263 -0
- package/bundled/dev-pipeline-windows/templates/bugfix-bootstrap-prompt.md +320 -0
- package/bundled/dev-pipeline-windows/templates/feature-list-schema.json +237 -0
- package/bundled/dev-pipeline-windows/templates/refactor-bootstrap-prompt.md +331 -0
- package/bundled/dev-pipeline-windows/templates/refactor-list-schema.json +270 -0
- package/bundled/dev-pipeline-windows/templates/sections/ac-verification-checklist.md +13 -0
- package/bundled/dev-pipeline-windows/templates/sections/checkpoint-system.md +91 -0
- package/bundled/dev-pipeline-windows/templates/sections/context-budget-rules.md +33 -0
- package/bundled/dev-pipeline-windows/templates/sections/critical-paths-agent.md +10 -0
- package/bundled/dev-pipeline-windows/templates/sections/critical-paths-full.md +12 -0
- package/bundled/dev-pipeline-windows/templates/sections/critical-paths-lite.md +7 -0
- package/bundled/dev-pipeline-windows/templates/sections/directory-convention-agent.md +8 -0
- package/bundled/dev-pipeline-windows/templates/sections/directory-convention-full.md +9 -0
- package/bundled/dev-pipeline-windows/templates/sections/directory-convention-lite.md +6 -0
- package/bundled/dev-pipeline-windows/templates/sections/failure-capture.md +21 -0
- package/bundled/dev-pipeline-windows/templates/sections/feature-context.md +31 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-auto.md +72 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-opencli.md +63 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification.md +62 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-commit-full.md +71 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-commit.md +64 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-agent-suffix.md +23 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-base.md +24 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-lite-suffix.md +12 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan-full.md +53 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan.md +32 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-implement-agent.md +37 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-implement-full.md +50 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-implement-lite.md +52 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-plan-agent.md +27 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-plan-lite.md +27 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-review-agent.md +27 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-review-full.md +29 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase-specify-plan-full.md +77 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase0-init.md +13 -0
- package/bundled/dev-pipeline-windows/templates/sections/phase0-test-baseline.md +23 -0
- package/bundled/dev-pipeline-windows/templates/sections/session-context.md +5 -0
- package/bundled/dev-pipeline-windows/templates/sections/subagent-timeout-recovery.md +6 -0
- package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-agent.md +67 -0
- package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-lite.md +58 -0
- package/bundled/dev-pipeline-windows/templates/session-status-schema.json +83 -0
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/app-planner/SKILL.md +26 -18
- package/bundled/skills/app-planner/references/architecture-decisions.md +9 -5
- package/bundled/skills/app-planner/references/frontend-design-guide.md +1 -1
- package/bundled/skills/feature-planner/SKILL.md +9 -2
- package/bundled/skills/prizmkit-init/SKILL.md +7 -6
- package/bundled/skills/recovery-workflow/scripts/detect-recovery-state.py +2 -0
- package/bundled/skills-windows/app-planner/SKILL.md +639 -0
- package/bundled/skills-windows/app-planner/assets/app-design-guide.md +101 -0
- package/bundled/skills-windows/app-planner/references/architecture-decisions.md +52 -0
- package/bundled/skills-windows/app-planner/references/brainstorm-guide.md +101 -0
- package/bundled/skills-windows/app-planner/references/frontend-design-guide.md +71 -0
- package/bundled/skills-windows/app-planner/references/project-brief-guide.md +82 -0
- package/bundled/skills-windows/app-planner/references/red-team-checklist.md +40 -0
- package/bundled/skills-windows/app-planner/references/rules/backend/derivation-rules.md +609 -0
- package/bundled/skills-windows/app-planner/references/rules/backend/fixed-rules.md +285 -0
- package/bundled/skills-windows/app-planner/references/rules/backend/question-bank.md +249 -0
- package/bundled/skills-windows/app-planner/references/rules/backend/template.md +173 -0
- package/bundled/skills-windows/app-planner/references/rules/database/derivation-rules.md +373 -0
- package/bundled/skills-windows/app-planner/references/rules/database/fixed-rules.md +211 -0
- package/bundled/skills-windows/app-planner/references/rules/database/question-bank.md +184 -0
- package/bundled/skills-windows/app-planner/references/rules/database/template.md +158 -0
- package/bundled/skills-windows/app-planner/references/rules/frontend/derivation-rules.md +810 -0
- package/bundled/skills-windows/app-planner/references/rules/frontend/fixed-rules.md +188 -0
- package/bundled/skills-windows/app-planner/references/rules/frontend/question-bank.md +302 -0
- package/bundled/skills-windows/app-planner/references/rules/frontend/template.md +320 -0
- package/bundled/skills-windows/app-planner/references/rules/mobile/derivation-rules.md +639 -0
- package/bundled/skills-windows/app-planner/references/rules/mobile/fixed-rules.md +290 -0
- package/bundled/skills-windows/app-planner/references/rules/mobile/question-bank.md +232 -0
- package/bundled/skills-windows/app-planner/references/rules/mobile/template.md +175 -0
- package/bundled/skills-windows/bug-fix-workflow/SKILL.md +415 -0
- package/bundled/skills-windows/bug-planner/SKILL.md +395 -0
- package/bundled/skills-windows/bug-planner/assets/bug-confirmation-template.md +43 -0
- package/bundled/skills-windows/bug-planner/references/critic-and-verification.md +44 -0
- package/bundled/skills-windows/bug-planner/references/error-recovery.md +73 -0
- package/bundled/skills-windows/bug-planner/references/input-formats.md +53 -0
- package/bundled/skills-windows/bug-planner/references/schema-validation.md +25 -0
- package/bundled/skills-windows/bug-planner/references/severity-rules.md +16 -0
- package/bundled/skills-windows/bug-planner/scripts/validate-bug-list.py +322 -0
- package/bundled/skills-windows/bugfix-pipeline-launcher/SKILL.md +380 -0
- package/bundled/skills-windows/feature-pipeline-launcher/SKILL.md +441 -0
- package/bundled/skills-windows/feature-pipeline-launcher/scripts/preflight-check.py +462 -0
- package/bundled/skills-windows/feature-planner/SKILL.md +401 -0
- package/bundled/skills-windows/feature-planner/assets/evaluation-guide.md +64 -0
- package/bundled/skills-windows/feature-planner/assets/planning-guide.md +214 -0
- package/bundled/skills-windows/feature-planner/references/browser-interaction.md +59 -0
- package/bundled/skills-windows/feature-planner/references/completeness-review.md +57 -0
- package/bundled/skills-windows/feature-planner/references/decomposition-patterns.md +75 -0
- package/bundled/skills-windows/feature-planner/references/error-recovery.md +90 -0
- package/bundled/skills-windows/feature-planner/references/incremental-feature-planning.md +112 -0
- package/bundled/skills-windows/feature-planner/references/new-project-planning.md +85 -0
- package/bundled/skills-windows/feature-planner/scripts/validate-and-generate.py +1029 -0
- package/bundled/skills-windows/feature-workflow/SKILL.md +531 -0
- package/bundled/skills-windows/prizmkit-init/SKILL.md +356 -0
- package/bundled/skills-windows/prizmkit-init/assets/project-brief-template.md +82 -0
- package/bundled/skills-windows/prizmkit-init/references/config-schema.md +68 -0
- package/bundled/skills-windows/prizmkit-init/references/rules/layer-detection.md +41 -0
- package/bundled/skills-windows/prizmkit-init/references/tech-stack-catalog.md +13 -0
- package/bundled/skills-windows/prizmkit-init/references/update-supplement.md +9 -0
- package/bundled/skills-windows/recovery-workflow/SKILL.md +456 -0
- package/bundled/skills-windows/recovery-workflow/evals/evals.json +46 -0
- package/bundled/skills-windows/recovery-workflow/scripts/detect-recovery-state.py +544 -0
- package/bundled/skills-windows/refactor-pipeline-launcher/SKILL.md +406 -0
- package/bundled/skills-windows/refactor-planner/SKILL.md +540 -0
- package/bundled/skills-windows/refactor-planner/assets/planning-guide.md +292 -0
- package/bundled/skills-windows/refactor-planner/references/behavior-preservation.md +301 -0
- package/bundled/skills-windows/refactor-planner/references/refactor-scoping-guide.md +221 -0
- package/bundled/skills-windows/refactor-planner/scripts/validate-and-generate-refactor.py +858 -0
- package/bundled/skills-windows/refactor-workflow/SKILL.md +503 -0
- package/package.json +3 -2
- package/src/clean.js +73 -2
- package/src/config.js +159 -50
- package/src/detect-platform.js +16 -8
- package/src/external-skills.js +26 -19
- package/src/index.js +31 -9
- package/src/manifest.js +6 -2
- package/src/metadata.js +43 -5
- package/src/platforms.js +36 -0
- package/src/prompts.js +31 -6
- package/src/runtimes.js +20 -0
- package/src/scaffold.js +314 -110
- package/src/upgrade.js +81 -41
|
@@ -120,12 +120,141 @@ prizm_log_bootstrap_prompt() {
|
|
|
120
120
|
|
|
121
121
|
# Detect AI CLI + platform.
|
|
122
122
|
# Priority:
|
|
123
|
-
# AI_CLI env > .prizmkit/config.json
|
|
123
|
+
# AI_CLI env > .prizmkit/config.json ai_cli > manifest/config platform > CODEBUDDY_CLI
|
|
124
|
+
# > installed PrizmKit platform artifacts > PATH auto-detect > error
|
|
124
125
|
#
|
|
125
126
|
# Exports:
|
|
126
127
|
# CLI_CMD
|
|
127
128
|
# PLATFORM
|
|
128
129
|
# PRIZMKIT_PLATFORM
|
|
130
|
+
_prizm_json_value() {
|
|
131
|
+
local json_file="$1"
|
|
132
|
+
local key="$2"
|
|
133
|
+
[[ -f "$json_file" ]] || return 0
|
|
134
|
+
JSON_FILE="$json_file" JSON_KEY="$key" python3 - <<'PY' 2>/dev/null || true
|
|
135
|
+
import json
|
|
136
|
+
import os
|
|
137
|
+
|
|
138
|
+
try:
|
|
139
|
+
with open(os.environ["JSON_FILE"], encoding="utf-8") as fh:
|
|
140
|
+
data = json.load(fh)
|
|
141
|
+
value = data.get(os.environ["JSON_KEY"], "")
|
|
142
|
+
if value is not None and value != "":
|
|
143
|
+
print(value)
|
|
144
|
+
except Exception:
|
|
145
|
+
pass
|
|
146
|
+
PY
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
_prizm_normalize_platform() {
|
|
150
|
+
printf '%s' "$1" | tr '[:upper:]' '[:lower:]'
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_prizm_concrete_platform() {
|
|
154
|
+
case "$(_prizm_normalize_platform "$1")" in
|
|
155
|
+
codex|claude|codebuddy) printf '%s\n' "$(_prizm_normalize_platform "$1")" ;;
|
|
156
|
+
esac
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
_prizm_cli_names_for_platform() {
|
|
160
|
+
case "$(_prizm_normalize_platform "$1")" in
|
|
161
|
+
codex) printf '%s\n' codex ;;
|
|
162
|
+
claude) printf '%s\n' claude ;;
|
|
163
|
+
codebuddy) printf '%s\n' cbc ;;
|
|
164
|
+
both) printf '%s\n' claude cbc ;;
|
|
165
|
+
all) printf '%s\n' codex claude cbc ;;
|
|
166
|
+
esac
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
_prizm_expected_cli_text() {
|
|
170
|
+
_prizm_cli_names_for_platform "$1" | awk 'BEGIN { sep="" } { printf "%s%s", sep, $0; sep=", " } END { if (sep != "") print "" }'
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
_prizm_resolve_cli_name() {
|
|
174
|
+
local cli_name="$1"
|
|
175
|
+
if [[ "$cli_name" == "cbc" && -n "${CODEBUDDY_CLI:-}" ]]; then
|
|
176
|
+
printf '%s\n' "$CODEBUDDY_CLI"
|
|
177
|
+
return 0
|
|
178
|
+
fi
|
|
179
|
+
if command -v "$cli_name" &>/dev/null; then
|
|
180
|
+
printf '%s\n' "$cli_name"
|
|
181
|
+
return 0
|
|
182
|
+
fi
|
|
183
|
+
return 1
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
_prizm_cli_for_platform() {
|
|
187
|
+
local platform="$1"
|
|
188
|
+
local cli_name cli_cmd
|
|
189
|
+
while IFS= read -r cli_name; do
|
|
190
|
+
[[ -n "$cli_name" ]] || continue
|
|
191
|
+
cli_cmd="$(_prizm_resolve_cli_name "$cli_name" || true)"
|
|
192
|
+
if [[ -n "$cli_cmd" ]]; then
|
|
193
|
+
printf '%s\n' "$cli_cmd"
|
|
194
|
+
return 0
|
|
195
|
+
fi
|
|
196
|
+
done < <(_prizm_cli_names_for_platform "$platform")
|
|
197
|
+
return 1
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
_prizm_known_platform_from_cli() {
|
|
201
|
+
local cli_cmd="$1"
|
|
202
|
+
local cli_token="${cli_cmd%%[[:space:]]*}"
|
|
203
|
+
cli_token="${cli_token#\"}" ; cli_token="${cli_token%\"}"
|
|
204
|
+
cli_token="${cli_token#\'}" ; cli_token="${cli_token%\'}"
|
|
205
|
+
local cli_name="${cli_token##*/}"
|
|
206
|
+
if [[ "$cli_name" == *"claude"* ]]; then
|
|
207
|
+
printf '%s\n' claude
|
|
208
|
+
elif [[ "$cli_name" == *"codex"* ]]; then
|
|
209
|
+
printf '%s\n' codex
|
|
210
|
+
elif [[ "$cli_name" == *"cbc"* || "$cli_name" == *"codebuddy"* ]]; then
|
|
211
|
+
printf '%s\n' codebuddy
|
|
212
|
+
else
|
|
213
|
+
return 1
|
|
214
|
+
fi
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
_prizm_platform_from_cli() {
|
|
218
|
+
local cli_cmd="$1"
|
|
219
|
+
if ! _prizm_known_platform_from_cli "$cli_cmd"; then
|
|
220
|
+
printf '%s\n' codebuddy
|
|
221
|
+
fi
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
_prizm_session_platform() {
|
|
225
|
+
local cli_platform
|
|
226
|
+
cli_platform="$(_prizm_known_platform_from_cli "$CLI_CMD" || true)"
|
|
227
|
+
if [[ -n "$cli_platform" ]]; then
|
|
228
|
+
printf '%s\n' "$cli_platform"
|
|
229
|
+
return 0
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
local platform="${PRIZMKIT_PLATFORM:-${PLATFORM:-}}"
|
|
233
|
+
case "$(_prizm_normalize_platform "$platform")" in
|
|
234
|
+
codex|claude|codebuddy) printf '%s\n' "$(_prizm_normalize_platform "$platform")" ;;
|
|
235
|
+
*) _prizm_platform_from_cli "$CLI_CMD" ;;
|
|
236
|
+
esac
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
_prizm_project_platform_for_cli() {
|
|
240
|
+
local cli_cmd="$1"
|
|
241
|
+
local manifest_platform="$2"
|
|
242
|
+
local config_platform="$3"
|
|
243
|
+
local cli_platform
|
|
244
|
+
cli_platform="$(_prizm_known_platform_from_cli "$cli_cmd" || true)"
|
|
245
|
+
if [[ -n "$cli_platform" ]]; then
|
|
246
|
+
printf '%s\n' "$cli_platform"
|
|
247
|
+
elif [[ -n "${PRIZMKIT_PLATFORM:-}" ]]; then
|
|
248
|
+
printf '%s\n' "$PRIZMKIT_PLATFORM"
|
|
249
|
+
elif [[ -n "$(_prizm_concrete_platform "$manifest_platform")" ]]; then
|
|
250
|
+
_prizm_concrete_platform "$manifest_platform"
|
|
251
|
+
elif [[ -n "$(_prizm_concrete_platform "$config_platform")" ]]; then
|
|
252
|
+
_prizm_concrete_platform "$config_platform"
|
|
253
|
+
else
|
|
254
|
+
printf '%s\n' codebuddy
|
|
255
|
+
fi
|
|
256
|
+
}
|
|
257
|
+
|
|
129
258
|
prizm_detect_cli_and_platform() {
|
|
130
259
|
# Load .env from .prizmkit/.env if it exists (does not override existing env vars)
|
|
131
260
|
if [[ -n "${PRIZMKIT_DIR:-}" ]]; then
|
|
@@ -133,61 +262,173 @@ prizm_detect_cli_and_platform() {
|
|
|
133
262
|
fi
|
|
134
263
|
|
|
135
264
|
local _raw_cli=""
|
|
265
|
+
local _config_ai_cli=""
|
|
266
|
+
local _config_platform=""
|
|
267
|
+
local _manifest_platform=""
|
|
268
|
+
local _installed_cli=""
|
|
269
|
+
local _platform_cli=""
|
|
270
|
+
local _platform_cli_names=""
|
|
271
|
+
|
|
272
|
+
if [[ -n "${PRIZMKIT_DIR:-}" ]]; then
|
|
273
|
+
_config_ai_cli="$(_prizm_json_value "$PRIZMKIT_DIR/config.json" ai_cli)"
|
|
274
|
+
_config_platform="$(_prizm_json_value "$PRIZMKIT_DIR/config.json" platform)"
|
|
275
|
+
_manifest_platform="$(_prizm_json_value "$PRIZMKIT_DIR/manifest.json" platform)"
|
|
276
|
+
fi
|
|
277
|
+
|
|
278
|
+
_detect_installed_platform_cli() {
|
|
279
|
+
if [[ -f "$PROJECT_ROOT/.codex/agents/prizm-dev-team-dev.toml" || -f "$PROJECT_ROOT/.agents/skills/prizm-kit/SKILL.md" ]] && command -v codex &>/dev/null; then
|
|
280
|
+
echo "codex"
|
|
281
|
+
elif [[ -f "$PROJECT_ROOT/.claude/commands/prizm-kit.md" ]] && command -v claude &>/dev/null; then
|
|
282
|
+
echo "claude"
|
|
283
|
+
elif [[ -f "$PROJECT_ROOT/.codebuddy/agents/prizm-dev-team-dev.md" || -f "$PROJECT_ROOT/.codebuddy/skills/prizm-kit/SKILL.md" ]]; then
|
|
284
|
+
_prizm_resolve_cli_name cbc || true
|
|
285
|
+
fi
|
|
286
|
+
}
|
|
136
287
|
|
|
137
288
|
if [[ -n "${AI_CLI:-}" ]]; then
|
|
138
289
|
_raw_cli="$AI_CLI"
|
|
139
|
-
elif [[ -
|
|
140
|
-
_config_ai_cli
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if p == 'claude': v = 'claude'
|
|
149
|
-
elif p == 'codebuddy': v = 'cbc'
|
|
150
|
-
if v: print(v)
|
|
151
|
-
except: pass
|
|
152
|
-
" 2>/dev/null || true)
|
|
153
|
-
if [[ -n "$_config_ai_cli" ]]; then
|
|
154
|
-
_raw_cli="$_config_ai_cli"
|
|
155
|
-
elif [[ -n "${CODEBUDDY_CLI:-}" ]]; then
|
|
156
|
-
_raw_cli="$CODEBUDDY_CLI"
|
|
157
|
-
elif command -v claude &>/dev/null; then
|
|
158
|
-
_raw_cli="claude"
|
|
159
|
-
elif command -v cbc &>/dev/null; then
|
|
160
|
-
_raw_cli="cbc"
|
|
161
|
-
else
|
|
162
|
-
echo "ERROR: No AI CLI found. Install CodeBuddy (cbc) or Claude Code (claude)." >&2
|
|
290
|
+
elif [[ -n "$_config_ai_cli" ]]; then
|
|
291
|
+
_raw_cli="$_config_ai_cli"
|
|
292
|
+
elif [[ -n "$_manifest_platform" ]]; then
|
|
293
|
+
_platform_cli="$(_prizm_cli_for_platform "$_manifest_platform" || true)"
|
|
294
|
+
_platform_cli_names="$(_prizm_cli_names_for_platform "$_manifest_platform")"
|
|
295
|
+
if [[ -n "$_platform_cli" ]]; then
|
|
296
|
+
_raw_cli="$_platform_cli"
|
|
297
|
+
elif [[ -n "$_platform_cli_names" ]]; then
|
|
298
|
+
echo "ERROR: Installed PrizmKit platform '$_manifest_platform' requires one of: $(_prizm_expected_cli_text "$_manifest_platform"). Install it or set AI_CLI." >&2
|
|
163
299
|
exit 1
|
|
164
300
|
fi
|
|
165
|
-
elif [[ -n "$
|
|
301
|
+
elif [[ -n "$_config_platform" ]]; then
|
|
302
|
+
_platform_cli="$(_prizm_cli_for_platform "$_config_platform" || true)"
|
|
303
|
+
_platform_cli_names="$(_prizm_cli_names_for_platform "$_config_platform")"
|
|
304
|
+
if [[ -n "$_platform_cli" ]]; then
|
|
305
|
+
_raw_cli="$_platform_cli"
|
|
306
|
+
elif [[ -n "$_platform_cli_names" ]]; then
|
|
307
|
+
echo "ERROR: Configured PrizmKit platform '$_config_platform' requires one of: $(_prizm_expected_cli_text "$_config_platform"). Install it or set AI_CLI." >&2
|
|
308
|
+
exit 1
|
|
309
|
+
fi
|
|
310
|
+
fi
|
|
311
|
+
|
|
312
|
+
if [[ -z "$_raw_cli" && -n "${CODEBUDDY_CLI:-}" ]]; then
|
|
166
313
|
_raw_cli="$CODEBUDDY_CLI"
|
|
167
|
-
|
|
314
|
+
fi
|
|
315
|
+
if [[ -z "$_raw_cli" ]]; then
|
|
316
|
+
_installed_cli="$(_detect_installed_platform_cli || true)"
|
|
317
|
+
if [[ -n "$_installed_cli" ]]; then
|
|
318
|
+
_raw_cli="$_installed_cli"
|
|
319
|
+
fi
|
|
320
|
+
fi
|
|
321
|
+
if [[ -z "$_raw_cli" ]] && command -v claude &>/dev/null; then
|
|
168
322
|
_raw_cli="claude"
|
|
169
|
-
elif command -v cbc &>/dev/null; then
|
|
323
|
+
elif [[ -z "$_raw_cli" ]] && command -v cbc &>/dev/null; then
|
|
170
324
|
_raw_cli="cbc"
|
|
171
|
-
|
|
172
|
-
|
|
325
|
+
elif [[ -z "$_raw_cli" ]] && command -v codex &>/dev/null; then
|
|
326
|
+
_raw_cli="codex"
|
|
327
|
+
elif [[ -z "$_raw_cli" ]]; then
|
|
328
|
+
echo "ERROR: No AI CLI found. Install CodeBuddy (cbc), Claude Code (claude), or Codex (codex)." >&2
|
|
173
329
|
exit 1
|
|
174
330
|
fi
|
|
175
331
|
|
|
176
332
|
CLI_CMD="$_raw_cli"
|
|
177
333
|
|
|
178
|
-
|
|
179
|
-
PLATFORM="$PRIZMKIT_PLATFORM"
|
|
180
|
-
elif [[ "$_raw_cli" == *"claude"* ]]; then
|
|
181
|
-
PLATFORM="claude"
|
|
182
|
-
else
|
|
183
|
-
PLATFORM="codebuddy"
|
|
184
|
-
fi
|
|
334
|
+
PLATFORM="$(_prizm_project_platform_for_cli "$_raw_cli" "$_manifest_platform" "$_config_platform")"
|
|
185
335
|
|
|
186
336
|
export CLI_CMD
|
|
187
337
|
export PLATFORM
|
|
188
338
|
export PRIZMKIT_PLATFORM="$PLATFORM"
|
|
189
339
|
}
|
|
190
340
|
|
|
341
|
+
# Start an AI CLI session in the background.
|
|
342
|
+
# Usage: prizm_start_ai_session <prompt_path> <log_path> <model>
|
|
343
|
+
# Sets PRIZM_AI_PID to the spawned process PID. Do not call this function via
|
|
344
|
+
# command substitution; the background process must remain a child of the
|
|
345
|
+
# runner shell so wait/heartbeat/trap handling works correctly.
|
|
346
|
+
PRIZM_AI_PID=""
|
|
347
|
+
prizm_start_ai_session() {
|
|
348
|
+
local prompt_path="$1"
|
|
349
|
+
local log_path="$2"
|
|
350
|
+
local model="${3:-}"
|
|
351
|
+
|
|
352
|
+
unset CLAUDECODE 2>/dev/null || true
|
|
353
|
+
|
|
354
|
+
local session_platform
|
|
355
|
+
session_platform="$(_prizm_session_platform)"
|
|
356
|
+
|
|
357
|
+
case "$session_platform" in
|
|
358
|
+
claude)
|
|
359
|
+
local claude_args=(-p "$(cat "$prompt_path")" --dangerously-skip-permissions)
|
|
360
|
+
if [[ "$VERBOSE" == "1" || "$USE_STREAM_JSON" == "true" ]]; then
|
|
361
|
+
claude_args+=(--verbose)
|
|
362
|
+
fi
|
|
363
|
+
if [[ "$USE_STREAM_JSON" == "true" ]]; then
|
|
364
|
+
claude_args+=(--output-format stream-json)
|
|
365
|
+
fi
|
|
366
|
+
if [[ -n "$model" ]]; then
|
|
367
|
+
claude_args+=(--model "$model")
|
|
368
|
+
fi
|
|
369
|
+
"$CLI_CMD" "${claude_args[@]}" > "$log_path" 2>&1 &
|
|
370
|
+
;;
|
|
371
|
+
codex)
|
|
372
|
+
local codex_args=(--ask-for-approval never --sandbox danger-full-access exec --cd "$PROJECT_ROOT" --skip-git-repo-check)
|
|
373
|
+
if [[ -n "$model" ]]; then
|
|
374
|
+
codex_args+=(--model "$model")
|
|
375
|
+
fi
|
|
376
|
+
"$CLI_CMD" "${codex_args[@]}" - < "$prompt_path" > "$log_path" 2>&1 &
|
|
377
|
+
;;
|
|
378
|
+
*)
|
|
379
|
+
local cb_args=(--print -y)
|
|
380
|
+
if [[ "$VERBOSE" == "1" ]]; then
|
|
381
|
+
cb_args+=(--verbose)
|
|
382
|
+
fi
|
|
383
|
+
if [[ "$USE_STREAM_JSON" == "true" ]]; then
|
|
384
|
+
cb_args+=(--output-format stream-json)
|
|
385
|
+
fi
|
|
386
|
+
if [[ -n "$model" ]]; then
|
|
387
|
+
cb_args+=(--model "$model")
|
|
388
|
+
fi
|
|
389
|
+
"$CLI_CMD" "${cb_args[@]}" < "$prompt_path" > "$log_path" 2>&1 &
|
|
390
|
+
;;
|
|
391
|
+
esac
|
|
392
|
+
PRIZM_AI_PID=$!
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
# Run an AI CLI session synchronously.
|
|
396
|
+
# Usage: prizm_run_ai_session <prompt_path> <log_path> <model>
|
|
397
|
+
prizm_run_ai_session() {
|
|
398
|
+
local prompt_path="$1"
|
|
399
|
+
local log_path="$2"
|
|
400
|
+
local model="${3:-}"
|
|
401
|
+
|
|
402
|
+
unset CLAUDECODE 2>/dev/null || true
|
|
403
|
+
|
|
404
|
+
local session_platform
|
|
405
|
+
session_platform="$(_prizm_session_platform)"
|
|
406
|
+
|
|
407
|
+
case "$session_platform" in
|
|
408
|
+
claude)
|
|
409
|
+
local claude_args=(-p "$(cat "$prompt_path")" --dangerously-skip-permissions)
|
|
410
|
+
if [[ -n "$model" ]]; then
|
|
411
|
+
claude_args+=(--model "$model")
|
|
412
|
+
fi
|
|
413
|
+
"$CLI_CMD" "${claude_args[@]}" > "$log_path" 2>&1
|
|
414
|
+
;;
|
|
415
|
+
codex)
|
|
416
|
+
local codex_args=(--ask-for-approval never --sandbox danger-full-access exec --cd "$PROJECT_ROOT" --skip-git-repo-check)
|
|
417
|
+
if [[ -n "$model" ]]; then
|
|
418
|
+
codex_args+=(--model "$model")
|
|
419
|
+
fi
|
|
420
|
+
"$CLI_CMD" "${codex_args[@]}" - < "$prompt_path" > "$log_path" 2>&1
|
|
421
|
+
;;
|
|
422
|
+
*)
|
|
423
|
+
local cb_args=(--print -y)
|
|
424
|
+
if [[ -n "$model" ]]; then
|
|
425
|
+
cb_args+=(--model "$model")
|
|
426
|
+
fi
|
|
427
|
+
"$CLI_CMD" "${cb_args[@]}" < "$prompt_path" > "$log_path" 2>&1
|
|
428
|
+
;;
|
|
429
|
+
esac
|
|
430
|
+
}
|
|
431
|
+
|
|
191
432
|
# prizm_detect_subagents <session_log>
|
|
192
433
|
#
|
|
193
434
|
# Scan session log for subagent spawns, count them, and log the result.
|
|
@@ -16,9 +16,9 @@ set -euo pipefail
|
|
|
16
16
|
# Environment Variables:
|
|
17
17
|
# MAX_RETRIES Max retries per bug (default: 3)
|
|
18
18
|
# SESSION_TIMEOUT Session timeout in seconds (default: 0 = no limit)
|
|
19
|
-
# AI_CLI AI CLI command name (auto-detected: cbc or
|
|
19
|
+
# AI_CLI AI CLI command name (auto-detected: cbc, claude, or codex)
|
|
20
20
|
# CODEBUDDY_CLI Legacy alias for AI_CLI (deprecated, use AI_CLI instead)
|
|
21
|
-
# PRIZMKIT_PLATFORM
|
|
21
|
+
# PRIZMKIT_PLATFORM Platform hint for custom AI_CLI wrappers: codebuddy, claude, or codex
|
|
22
22
|
# VERBOSE Set to 1 to enable --verbose on AI CLI
|
|
23
23
|
# HEARTBEAT_INTERVAL Heartbeat log interval in seconds (default: 30)
|
|
24
24
|
# STALE_KILL_THRESHOLD Auto-kill session after N seconds of no progress (default: 900)
|
|
@@ -92,56 +92,19 @@ spawn_and_wait_session() {
|
|
|
92
92
|
local session_log="$session_dir/logs/session.log"
|
|
93
93
|
local progress_json="$session_dir/logs/progress.json"
|
|
94
94
|
|
|
95
|
-
local
|
|
96
|
-
if [[ "$VERBOSE" == "1" ]]; then
|
|
97
|
-
verbose_flag="--verbose"
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
local stream_json_flag=""
|
|
101
|
-
if [[ "$USE_STREAM_JSON" == "true" ]]; then
|
|
102
|
-
stream_json_flag="--output-format stream-json"
|
|
103
|
-
# claude-internal requires --verbose when using stream-json with -p/--print
|
|
104
|
-
verbose_flag="--verbose"
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
local model_flag=""
|
|
95
|
+
local effective_model=""
|
|
108
96
|
if [[ -n "$item_model" ]]; then
|
|
109
|
-
|
|
97
|
+
effective_model="$item_model"
|
|
110
98
|
elif [[ -n "${MODEL:-}" ]]; then
|
|
111
|
-
|
|
99
|
+
effective_model="$MODEL"
|
|
112
100
|
fi
|
|
113
101
|
|
|
114
|
-
# Unset CLAUDECODE to prevent "nested session" error when launched from
|
|
115
|
-
# within an existing Claude Code session (e.g. via launch-bugfix-daemon.sh).
|
|
116
|
-
unset CLAUDECODE 2>/dev/null || true
|
|
117
|
-
|
|
118
102
|
# Log bootstrap prompt in test mode
|
|
119
103
|
prizm_log_bootstrap_prompt "$bootstrap_prompt" "$bug_id"
|
|
120
104
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"$CLI_CMD" \
|
|
125
|
-
-p "$(cat "$bootstrap_prompt")" \
|
|
126
|
-
--dangerously-skip-permissions \
|
|
127
|
-
$verbose_flag \
|
|
128
|
-
$stream_json_flag \
|
|
129
|
-
$model_flag \
|
|
130
|
-
> "$session_log" 2>&1 &
|
|
131
|
-
;;
|
|
132
|
-
*)
|
|
133
|
-
# CodeBuddy (cbc) and others: prompt via stdin, -y for auto-accept
|
|
134
|
-
"$CLI_CMD" \
|
|
135
|
-
--print \
|
|
136
|
-
-y \
|
|
137
|
-
$verbose_flag \
|
|
138
|
-
$stream_json_flag \
|
|
139
|
-
$model_flag \
|
|
140
|
-
< "$bootstrap_prompt" \
|
|
141
|
-
> "$session_log" 2>&1 &
|
|
142
|
-
;;
|
|
143
|
-
esac
|
|
144
|
-
local cli_pid=$!
|
|
105
|
+
local cli_pid
|
|
106
|
+
prizm_start_ai_session "$bootstrap_prompt" "$session_log" "$effective_model"
|
|
107
|
+
cli_pid="$PRIZM_AI_PID"
|
|
145
108
|
|
|
146
109
|
# Start progress parser (no-op if stream-json not supported)
|
|
147
110
|
start_progress_parser "$session_log" "$progress_json" "$SCRIPTS_DIR"
|
|
@@ -1004,21 +967,7 @@ DEPLOY_PROMPT_EOF
|
|
|
1004
967
|
log_info "Deploy prompt: $deploy_prompt"
|
|
1005
968
|
log_info "Deploy log: $deploy_session_dir/logs/session.log"
|
|
1006
969
|
|
|
1007
|
-
|
|
1008
|
-
*claude*)
|
|
1009
|
-
"$CLI_CMD" \
|
|
1010
|
-
-p "$(cat "$deploy_prompt")" \
|
|
1011
|
-
--dangerously-skip-permissions \
|
|
1012
|
-
> "$deploy_session_dir/logs/session.log" 2>&1
|
|
1013
|
-
;;
|
|
1014
|
-
*)
|
|
1015
|
-
"$CLI_CMD" \
|
|
1016
|
-
--print \
|
|
1017
|
-
-y \
|
|
1018
|
-
< "$deploy_prompt" \
|
|
1019
|
-
> "$deploy_session_dir/logs/session.log" 2>&1
|
|
1020
|
-
;;
|
|
1021
|
-
esac
|
|
970
|
+
prizm_run_ai_session "$deploy_prompt" "$deploy_session_dir/logs/session.log"
|
|
1022
971
|
local deploy_exit=$?
|
|
1023
972
|
|
|
1024
973
|
if [[ $deploy_exit -eq 0 ]]; then
|
|
@@ -1252,7 +1201,7 @@ show_help() {
|
|
|
1252
1201
|
echo " MODEL Default AI model (overridden by per-bug model in bug list)"
|
|
1253
1202
|
echo " PIPELINE_MODE Default pipeline mode: lite|standard|full (overridden by --mode)"
|
|
1254
1203
|
echo " ENABLE_CRITIC Enable/disable critic: true|false|1|0 (overridden by --critic/--no-critic)"
|
|
1255
|
-
echo " AI_CLI AI CLI command name (auto-detected: cbc or
|
|
1204
|
+
echo " AI_CLI AI CLI command name (auto-detected: cbc, claude, or codex)"
|
|
1256
1205
|
echo " VERBOSE Set to 1 for verbose AI CLI output"
|
|
1257
1206
|
echo " HEARTBEAT_INTERVAL Heartbeat log interval in seconds (default: 30)"
|
|
1258
1207
|
echo " STALE_KILL_THRESHOLD Auto-kill session after N seconds of no progress (default: 900)"
|
|
@@ -19,7 +19,7 @@ set -euo pipefail
|
|
|
19
19
|
# SESSION_TIMEOUT Session timeout in seconds (default: 0 = no limit)
|
|
20
20
|
# AI_CLI AI CLI command name (override; also readable from .prizmkit/config.json)
|
|
21
21
|
# CODEBUDDY_CLI Legacy alias for AI_CLI (deprecated, use AI_CLI instead)
|
|
22
|
-
# PRIZMKIT_PLATFORM
|
|
22
|
+
# PRIZMKIT_PLATFORM Platform hint for custom AI_CLI wrappers: codebuddy, claude, or codex
|
|
23
23
|
# MODEL AI model to use (e.g. claude-opus-4.6, claude-sonnet-4.6, claude-haiku-4.5)
|
|
24
24
|
# VERBOSE Set to 1 to enable --verbose on AI CLI (shows subagent output)
|
|
25
25
|
# HEARTBEAT_INTERVAL Heartbeat log interval in seconds (default: 30)
|
|
@@ -105,53 +105,10 @@ spawn_and_wait_session() {
|
|
|
105
105
|
local session_log="$session_dir/logs/session.log"
|
|
106
106
|
local progress_json="$session_dir/logs/progress.json"
|
|
107
107
|
|
|
108
|
-
# Spawn AI CLI session
|
|
109
|
-
local verbose_flag=""
|
|
110
|
-
if [[ "$VERBOSE" == "1" ]]; then
|
|
111
|
-
verbose_flag="--verbose"
|
|
112
|
-
fi
|
|
113
|
-
|
|
114
|
-
local stream_json_flag=""
|
|
115
|
-
if [[ "$USE_STREAM_JSON" == "true" ]]; then
|
|
116
|
-
stream_json_flag="--output-format stream-json"
|
|
117
|
-
# claude-internal requires --verbose when using stream-json with -p/--print
|
|
118
|
-
verbose_flag="--verbose"
|
|
119
|
-
fi
|
|
120
|
-
|
|
121
|
-
local model_flag=""
|
|
122
108
|
local effective_model="${feature_model:-$MODEL}"
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
# Unset CLAUDECODE to prevent "nested session" error when launched from
|
|
128
|
-
# within an existing Claude Code session (e.g. via launch-feature-daemon.sh).
|
|
129
|
-
unset CLAUDECODE 2>/dev/null || true
|
|
130
|
-
|
|
131
|
-
case "$CLI_CMD" in
|
|
132
|
-
*claude*)
|
|
133
|
-
# Claude Code: prompt via -p argument, --dangerously-skip-permissions for auto-accept
|
|
134
|
-
"$CLI_CMD" \
|
|
135
|
-
-p "$(cat "$bootstrap_prompt")" \
|
|
136
|
-
--dangerously-skip-permissions \
|
|
137
|
-
$verbose_flag \
|
|
138
|
-
$stream_json_flag \
|
|
139
|
-
$model_flag \
|
|
140
|
-
> "$session_log" 2>&1 &
|
|
141
|
-
;;
|
|
142
|
-
*)
|
|
143
|
-
# CodeBuddy (cbc) and others: prompt via stdin
|
|
144
|
-
"$CLI_CMD" \
|
|
145
|
-
--print \
|
|
146
|
-
-y \
|
|
147
|
-
$verbose_flag \
|
|
148
|
-
$stream_json_flag \
|
|
149
|
-
$model_flag \
|
|
150
|
-
< "$bootstrap_prompt" \
|
|
151
|
-
> "$session_log" 2>&1 &
|
|
152
|
-
;;
|
|
153
|
-
esac
|
|
154
|
-
local cbc_pid=$!
|
|
109
|
+
local cbc_pid
|
|
110
|
+
prizm_start_ai_session "$bootstrap_prompt" "$session_log" "$effective_model"
|
|
111
|
+
cbc_pid="$PRIZM_AI_PID"
|
|
155
112
|
|
|
156
113
|
# Start progress parser (no-op if stream-json not supported)
|
|
157
114
|
start_progress_parser "$session_log" "$progress_json" "$SCRIPTS_DIR"
|
|
@@ -1231,21 +1188,7 @@ DEPLOY_PROMPT_EOF
|
|
|
1231
1188
|
log_info "Deploy prompt: $deploy_prompt"
|
|
1232
1189
|
log_info "Deploy log: $deploy_session_dir/logs/session.log"
|
|
1233
1190
|
|
|
1234
|
-
|
|
1235
|
-
*claude*)
|
|
1236
|
-
"$CLI_CMD" \
|
|
1237
|
-
-p "$(cat "$deploy_prompt")" \
|
|
1238
|
-
--dangerously-skip-permissions \
|
|
1239
|
-
> "$deploy_session_dir/logs/session.log" 2>&1
|
|
1240
|
-
;;
|
|
1241
|
-
*)
|
|
1242
|
-
"$CLI_CMD" \
|
|
1243
|
-
--print \
|
|
1244
|
-
-y \
|
|
1245
|
-
< "$deploy_prompt" \
|
|
1246
|
-
> "$deploy_session_dir/logs/session.log" 2>&1
|
|
1247
|
-
;;
|
|
1248
|
-
esac
|
|
1191
|
+
prizm_run_ai_session "$deploy_prompt" "$deploy_session_dir/logs/session.log"
|
|
1249
1192
|
local deploy_exit=$?
|
|
1250
1193
|
|
|
1251
1194
|
if [[ $deploy_exit -eq 0 ]]; then
|
|
@@ -1465,7 +1408,7 @@ show_help() {
|
|
|
1465
1408
|
echo "Environment Variables:"
|
|
1466
1409
|
echo " MAX_RETRIES Max retries per feature (default: 3)"
|
|
1467
1410
|
echo " SESSION_TIMEOUT Session timeout in seconds (default: 0 = no limit)"
|
|
1468
|
-
echo " AI_CLI AI CLI command name (auto-detected: cbc or
|
|
1411
|
+
echo " AI_CLI AI CLI command name (auto-detected: cbc, claude, or codex)"
|
|
1469
1412
|
echo " MODEL AI model ID (e.g. claude-opus-4.6, claude-sonnet-4.6, claude-haiku-4.5)"
|
|
1470
1413
|
echo " HEARTBEAT_INTERVAL Heartbeat log interval in seconds (default: 30)"
|
|
1471
1414
|
echo " STALE_KILL_THRESHOLD Auto-kill session after N seconds of no progress (default: 900)"
|
|
@@ -1553,23 +1496,12 @@ case "${1:-run}" in
|
|
|
1553
1496
|
|
|
1554
1497
|
test_prompt="What AI assistant/platform are you and what model are you running? Reply in one line, e.g. \"I'm Claude Code Claude Opnus x.x\".No extra text."
|
|
1555
1498
|
|
|
1556
|
-
local_model_flag=""
|
|
1557
|
-
if [[ -n "$MODEL" ]]; then
|
|
1558
|
-
local_model_flag="--model $MODEL"
|
|
1559
|
-
fi
|
|
1560
|
-
|
|
1561
1499
|
# Run headless query with 30s timeout (background + kill pattern for macOS)
|
|
1562
1500
|
tmpfile=$(mktemp)
|
|
1501
|
+
prompt_file=$(mktemp)
|
|
1502
|
+
printf '%s\n' "$test_prompt" > "$prompt_file"
|
|
1563
1503
|
(
|
|
1564
|
-
|
|
1565
|
-
case "$CLI_CMD" in
|
|
1566
|
-
*claude*)
|
|
1567
|
-
"$CLI_CMD" -p "$test_prompt" --dangerously-skip-permissions --no-session-persistence $local_model_flag > "$tmpfile" 2>/dev/null
|
|
1568
|
-
;;
|
|
1569
|
-
*)
|
|
1570
|
-
echo "$test_prompt" | "$CLI_CMD" --print -y $local_model_flag > "$tmpfile" 2>/dev/null
|
|
1571
|
-
;;
|
|
1572
|
-
esac
|
|
1504
|
+
prizm_run_ai_session "$prompt_file" "$tmpfile" "$MODEL"
|
|
1573
1505
|
) &
|
|
1574
1506
|
query_pid=$!
|
|
1575
1507
|
( sleep 30 && kill "$query_pid" 2>/dev/null ) &
|
|
@@ -1579,7 +1511,7 @@ case "${1:-run}" in
|
|
|
1579
1511
|
wait "$timer_pid" 2>/dev/null || true
|
|
1580
1512
|
|
|
1581
1513
|
model_reply=$(cat "$tmpfile" 2>/dev/null | head -3)
|
|
1582
|
-
rm -f "$tmpfile"
|
|
1514
|
+
rm -f "$tmpfile" "$prompt_file"
|
|
1583
1515
|
|
|
1584
1516
|
if [[ -z "$model_reply" ]]; then
|
|
1585
1517
|
model_reply="(no response — CLI may require auth or is unavailable)"
|