prizmkit 1.1.99 → 1.1.101

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 (321) hide show
  1. package/bin/create-prizmkit.js +4 -4
  2. package/bundled/VERSION.json +3 -3
  3. package/bundled/dev-pipeline/.env.example +3 -3
  4. package/bundled/dev-pipeline/README.md +110 -90
  5. package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +1 -1
  6. package/bundled/dev-pipeline/cli.py +27 -0
  7. package/bundled/dev-pipeline/prizmkit_runtime/__init__.py +13 -0
  8. package/bundled/dev-pipeline/prizmkit_runtime/__main__.py +9 -0
  9. package/bundled/dev-pipeline/prizmkit_runtime/cli.py +193 -0
  10. package/bundled/dev-pipeline/prizmkit_runtime/commands.py +313 -0
  11. package/bundled/dev-pipeline/prizmkit_runtime/compat.py +32 -0
  12. package/bundled/dev-pipeline/prizmkit_runtime/config.py +410 -0
  13. package/bundled/dev-pipeline/prizmkit_runtime/daemon.py +478 -0
  14. package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +734 -0
  15. package/bundled/dev-pipeline/prizmkit_runtime/heartbeat.py +256 -0
  16. package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +109 -0
  17. package/bundled/dev-pipeline/prizmkit_runtime/paths.py +110 -0
  18. package/bundled/dev-pipeline/prizmkit_runtime/processes.py +373 -0
  19. package/bundled/dev-pipeline/prizmkit_runtime/reset.py +389 -0
  20. package/bundled/dev-pipeline/prizmkit_runtime/runner_bookkeeping.py +51 -0
  21. package/bundled/dev-pipeline/prizmkit_runtime/runner_classification.py +179 -0
  22. package/bundled/dev-pipeline/prizmkit_runtime/runner_models.py +345 -0
  23. package/bundled/dev-pipeline/prizmkit_runtime/runner_prompts.py +118 -0
  24. package/bundled/dev-pipeline/prizmkit_runtime/runner_recovery.py +187 -0
  25. package/bundled/dev-pipeline/prizmkit_runtime/runner_status.py +147 -0
  26. package/bundled/dev-pipeline/prizmkit_runtime/runners.py +422 -0
  27. package/bundled/dev-pipeline/prizmkit_runtime/sessions.py +552 -0
  28. package/bundled/dev-pipeline/prizmkit_runtime/status.py +71 -0
  29. package/bundled/dev-pipeline/scripts/check-session-status.py +74 -1
  30. package/bundled/dev-pipeline/scripts/continuation.py +374 -0
  31. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +64 -52
  32. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +35 -25
  33. package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +2 -2
  34. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +15 -20
  35. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +185 -16
  36. package/bundled/dev-pipeline/scripts/update-bug-status.py +214 -6
  37. package/bundled/dev-pipeline/scripts/update-feature-status.py +237 -6
  38. package/bundled/dev-pipeline/scripts/update-refactor-status.py +214 -6
  39. package/bundled/dev-pipeline/templates/agent-prompts/dev-implement.md +8 -2
  40. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +4 -0
  41. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +14 -5
  42. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +16 -6
  43. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +16 -6
  44. package/bundled/dev-pipeline/templates/bugfix-bootstrap-prompt.md +1 -1
  45. package/bundled/dev-pipeline/templates/refactor-bootstrap-prompt.md +3 -3
  46. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +2 -0
  47. package/bundled/dev-pipeline/templates/sections/log-size-awareness.md +13 -69
  48. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +15 -7
  49. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +42 -29
  50. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +41 -39
  51. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +4 -0
  52. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +4 -0
  53. package/bundled/dev-pipeline/templates/session-status-schema.json +1 -1
  54. package/bundled/dev-pipeline/tests/conftest.py +1 -0
  55. package/bundled/dev-pipeline/tests/test_auto_skip.py +932 -0
  56. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +207 -0
  57. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +100 -0
  58. package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +43 -0
  59. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +1138 -0
  60. package/bundled/dev-pipeline/tests/test_unified_cli.py +1045 -0
  61. package/bundled/skills/_metadata.json +1 -1
  62. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +29 -34
  63. package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +6 -5
  64. package/bundled/skills/feature-pipeline-launcher/SKILL.md +29 -35
  65. package/bundled/skills/feature-pipeline-launcher/references/configuration.md +7 -6
  66. package/bundled/skills/feature-workflow/SKILL.md +3 -6
  67. package/bundled/skills/recovery-workflow/SKILL.md +23 -32
  68. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +29 -35
  69. package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +7 -6
  70. package/bundled/skills/refactor-workflow/SKILL.md +3 -6
  71. package/bundled/templates/hooks/commit-intent.json +2 -2
  72. package/bundled/templates/hooks/diff-prizm-docs.py +226 -0
  73. package/bundled/templates/hooks/prizm-pre-commit.py +45 -0
  74. package/bundled/templates/hooks/validate-prizm-docs.py +240 -0
  75. package/package.json +1 -1
  76. package/src/config.js +33 -12
  77. package/src/index.js +3 -6
  78. package/src/manifest.js +3 -2
  79. package/src/metadata.js +7 -18
  80. package/src/prompts.js +0 -12
  81. package/src/runtimes.js +18 -11
  82. package/src/scaffold.js +133 -116
  83. package/src/upgrade.js +1 -1
  84. package/bundled/dev-pipeline/launch-bugfix-daemon.sh +0 -500
  85. package/bundled/dev-pipeline/launch-feature-daemon.sh +0 -657
  86. package/bundled/dev-pipeline/launch-refactor-daemon.sh +0 -502
  87. package/bundled/dev-pipeline/lib/branch.sh +0 -326
  88. package/bundled/dev-pipeline/lib/common.sh +0 -1257
  89. package/bundled/dev-pipeline/lib/heartbeat.sh +0 -469
  90. package/bundled/dev-pipeline/reset-bug.sh +0 -395
  91. package/bundled/dev-pipeline/reset-feature.sh +0 -406
  92. package/bundled/dev-pipeline/reset-refactor.sh +0 -393
  93. package/bundled/dev-pipeline/run-bugfix.sh +0 -1315
  94. package/bundled/dev-pipeline/run-feature.sh +0 -1602
  95. package/bundled/dev-pipeline/run-recovery.sh +0 -648
  96. package/bundled/dev-pipeline/run-refactor.sh +0 -1348
  97. package/bundled/dev-pipeline/scripts/monitor-log.sh +0 -104
  98. package/bundled/dev-pipeline/tests/test-path-resolution.sh +0 -100
  99. package/bundled/dev-pipeline-windows/.env.example +0 -36
  100. package/bundled/dev-pipeline-windows/README.md +0 -30
  101. package/bundled/dev-pipeline-windows/SCHEMA_ANALYSIS.md +0 -533
  102. package/bundled/dev-pipeline-windows/assets/feature-list-example.json +0 -146
  103. package/bundled/dev-pipeline-windows/assets/prizm-dev-team-integration.md +0 -137
  104. package/bundled/dev-pipeline-windows/launch-bugfix-daemon.ps1 +0 -9
  105. package/bundled/dev-pipeline-windows/launch-feature-daemon.ps1 +0 -9
  106. package/bundled/dev-pipeline-windows/launch-refactor-daemon.ps1 +0 -9
  107. package/bundled/dev-pipeline-windows/lib/branch.ps1 +0 -235
  108. package/bundled/dev-pipeline-windows/lib/common.ps1 +0 -829
  109. package/bundled/dev-pipeline-windows/lib/daemon.ps1 +0 -140
  110. package/bundled/dev-pipeline-windows/lib/pipeline.ps1 +0 -967
  111. package/bundled/dev-pipeline-windows/lib/reset.ps1 +0 -87
  112. package/bundled/dev-pipeline-windows/reset-bug.ps1 +0 -9
  113. package/bundled/dev-pipeline-windows/reset-feature.ps1 +0 -9
  114. package/bundled/dev-pipeline-windows/reset-refactor.ps1 +0 -9
  115. package/bundled/dev-pipeline-windows/run-bugfix.ps1 +0 -9
  116. package/bundled/dev-pipeline-windows/run-feature.ps1 +0 -9
  117. package/bundled/dev-pipeline-windows/run-recovery.ps1 +0 -179
  118. package/bundled/dev-pipeline-windows/run-refactor.ps1 +0 -9
  119. package/bundled/dev-pipeline-windows/scripts/check-session-status.py +0 -228
  120. package/bundled/dev-pipeline-windows/scripts/detect-stuck.py +0 -530
  121. package/bundled/dev-pipeline-windows/scripts/generate-bootstrap-prompt.py +0 -2282
  122. package/bundled/dev-pipeline-windows/scripts/generate-bugfix-prompt.py +0 -767
  123. package/bundled/dev-pipeline-windows/scripts/generate-recovery-prompt.py +0 -805
  124. package/bundled/dev-pipeline-windows/scripts/generate-refactor-prompt.py +0 -845
  125. package/bundled/dev-pipeline-windows/scripts/init-bugfix-pipeline.py +0 -316
  126. package/bundled/dev-pipeline-windows/scripts/init-dev-team.py +0 -134
  127. package/bundled/dev-pipeline-windows/scripts/init-pipeline.py +0 -382
  128. package/bundled/dev-pipeline-windows/scripts/init-refactor-pipeline.py +0 -399
  129. package/bundled/dev-pipeline-windows/scripts/monitor-log.ps1 +0 -102
  130. package/bundled/dev-pipeline-windows/scripts/parse-stream-progress.py +0 -1232
  131. package/bundled/dev-pipeline-windows/scripts/patch-completion-notes.py +0 -191
  132. package/bundled/dev-pipeline-windows/scripts/prizmkit-test-gate.py +0 -446
  133. package/bundled/dev-pipeline-windows/scripts/update-bug-status.py +0 -913
  134. package/bundled/dev-pipeline-windows/scripts/update-checkpoint.py +0 -173
  135. package/bundled/dev-pipeline-windows/scripts/update-feature-status.py +0 -1558
  136. package/bundled/dev-pipeline-windows/scripts/update-refactor-status.py +0 -1119
  137. package/bundled/dev-pipeline-windows/scripts/utils.py +0 -542
  138. package/bundled/dev-pipeline-windows/templates/agent-prompts/critic-plan-challenge.md +0 -7
  139. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-fix.md +0 -7
  140. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-implement.md +0 -65
  141. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-resume.md +0 -5
  142. package/bundled/dev-pipeline-windows/templates/agent-prompts/reviewer-review.md +0 -7
  143. package/bundled/dev-pipeline-windows/templates/bootstrap-prompt.md +0 -73
  144. package/bundled/dev-pipeline-windows/templates/bootstrap-tier1.md +0 -589
  145. package/bundled/dev-pipeline-windows/templates/bootstrap-tier2.md +0 -710
  146. package/bundled/dev-pipeline-windows/templates/bootstrap-tier3.md +0 -791
  147. package/bundled/dev-pipeline-windows/templates/bug-fix-list-schema.json +0 -263
  148. package/bundled/dev-pipeline-windows/templates/bugfix-bootstrap-prompt.md +0 -326
  149. package/bundled/dev-pipeline-windows/templates/feature-list-schema.json +0 -237
  150. package/bundled/dev-pipeline-windows/templates/refactor-bootstrap-prompt.md +0 -340
  151. package/bundled/dev-pipeline-windows/templates/refactor-list-schema.json +0 -270
  152. package/bundled/dev-pipeline-windows/templates/sections/ac-verification-checklist.md +0 -7
  153. package/bundled/dev-pipeline-windows/templates/sections/checkpoint-system.md +0 -91
  154. package/bundled/dev-pipeline-windows/templates/sections/context-budget-rules.md +0 -34
  155. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-agent.md +0 -10
  156. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-full.md +0 -12
  157. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-lite.md +0 -7
  158. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-agent.md +0 -8
  159. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-full.md +0 -9
  160. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-lite.md +0 -6
  161. package/bundled/dev-pipeline-windows/templates/sections/failure-capture.md +0 -21
  162. package/bundled/dev-pipeline-windows/templates/sections/feature-context.md +0 -21
  163. package/bundled/dev-pipeline-windows/templates/sections/log-size-awareness.md +0 -78
  164. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-auto.md +0 -283
  165. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-opencli.md +0 -112
  166. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification.md +0 -168
  167. package/bundled/dev-pipeline-windows/templates/sections/phase-commit-full.md +0 -82
  168. package/bundled/dev-pipeline-windows/templates/sections/phase-commit.md +0 -75
  169. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-agent-suffix.md +0 -23
  170. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-base.md +0 -14
  171. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-lite-suffix.md +0 -19
  172. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan-full.md +0 -63
  173. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan.md +0 -42
  174. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-agent.md +0 -44
  175. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-full.md +0 -59
  176. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-lite.md +0 -39
  177. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-agent.md +0 -27
  178. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-lite.md +0 -27
  179. package/bundled/dev-pipeline-windows/templates/sections/phase-prizmkit-test.md +0 -39
  180. package/bundled/dev-pipeline-windows/templates/sections/phase-review-agent.md +0 -35
  181. package/bundled/dev-pipeline-windows/templates/sections/phase-review-full.md +0 -35
  182. package/bundled/dev-pipeline-windows/templates/sections/phase-specify-plan-full.md +0 -73
  183. package/bundled/dev-pipeline-windows/templates/sections/phase0-init.md +0 -13
  184. package/bundled/dev-pipeline-windows/templates/sections/phase0-test-baseline.md +0 -21
  185. package/bundled/dev-pipeline-windows/templates/sections/session-context.md +0 -5
  186. package/bundled/dev-pipeline-windows/templates/sections/subagent-timeout-recovery.md +0 -6
  187. package/bundled/dev-pipeline-windows/templates/sections/task-contract.md +0 -34
  188. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-agent.md +0 -48
  189. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-lite.md +0 -48
  190. package/bundled/dev-pipeline-windows/templates/session-status-schema.json +0 -83
  191. package/bundled/skills-windows/app-planner/SKILL.md +0 -296
  192. package/bundled/skills-windows/app-planner/assets/app-design-guide.md +0 -101
  193. package/bundled/skills-windows/app-planner/references/architecture-decisions.md +0 -52
  194. package/bundled/skills-windows/app-planner/references/brainstorm-guide.md +0 -101
  195. package/bundled/skills-windows/app-planner/references/frontend-design-guide.md +0 -71
  196. package/bundled/skills-windows/app-planner/references/infrastructure-convention-discovery.md +0 -108
  197. package/bundled/skills-windows/app-planner/references/project-brief-guide.md +0 -82
  198. package/bundled/skills-windows/app-planner/references/project-conventions-discovery.md +0 -59
  199. package/bundled/skills-windows/app-planner/references/project-state-detection.md +0 -90
  200. package/bundled/skills-windows/app-planner/references/red-team-checklist.md +0 -40
  201. package/bundled/skills-windows/app-planner/references/rules/backend/derivation-rules.md +0 -619
  202. package/bundled/skills-windows/app-planner/references/rules/backend/fixed-rules.md +0 -285
  203. package/bundled/skills-windows/app-planner/references/rules/backend/question-bank.md +0 -249
  204. package/bundled/skills-windows/app-planner/references/rules/backend/question-manifest.json +0 -46
  205. package/bundled/skills-windows/app-planner/references/rules/backend/template.md +0 -173
  206. package/bundled/skills-windows/app-planner/references/rules/database/derivation-rules.md +0 -382
  207. package/bundled/skills-windows/app-planner/references/rules/database/fixed-rules.md +0 -211
  208. package/bundled/skills-windows/app-planner/references/rules/database/question-bank.md +0 -184
  209. package/bundled/skills-windows/app-planner/references/rules/database/question-manifest.json +0 -39
  210. package/bundled/skills-windows/app-planner/references/rules/database/template.md +0 -158
  211. package/bundled/skills-windows/app-planner/references/rules/frontend/derivation-rules.md +0 -820
  212. package/bundled/skills-windows/app-planner/references/rules/frontend/fixed-rules.md +0 -188
  213. package/bundled/skills-windows/app-planner/references/rules/frontend/question-bank.md +0 -319
  214. package/bundled/skills-windows/app-planner/references/rules/frontend/question-manifest.json +0 -51
  215. package/bundled/skills-windows/app-planner/references/rules/frontend/template.md +0 -339
  216. package/bundled/skills-windows/app-planner/references/rules/mobile/derivation-rules.md +0 -649
  217. package/bundled/skills-windows/app-planner/references/rules/mobile/fixed-rules.md +0 -290
  218. package/bundled/skills-windows/app-planner/references/rules/mobile/question-bank.md +0 -232
  219. package/bundled/skills-windows/app-planner/references/rules/mobile/question-manifest.json +0 -47
  220. package/bundled/skills-windows/app-planner/references/rules/mobile/template.md +0 -175
  221. package/bundled/skills-windows/app-planner/references/rules-configuration.md +0 -46
  222. package/bundled/skills-windows/bug-fix-workflow/SKILL.md +0 -379
  223. package/bundled/skills-windows/bug-fix-workflow/references/bug-diagnosis.md +0 -41
  224. package/bundled/skills-windows/bug-planner/SKILL.md +0 -402
  225. package/bundled/skills-windows/bug-planner/assets/bug-confirmation-template.md +0 -43
  226. package/bundled/skills-windows/bug-planner/references/critic-and-verification.md +0 -44
  227. package/bundled/skills-windows/bug-planner/references/error-recovery.md +0 -73
  228. package/bundled/skills-windows/bug-planner/references/input-formats.md +0 -53
  229. package/bundled/skills-windows/bug-planner/references/schema-validation.md +0 -25
  230. package/bundled/skills-windows/bug-planner/references/severity-rules.md +0 -16
  231. package/bundled/skills-windows/bug-planner/scripts/validate-bug-list.py +0 -322
  232. package/bundled/skills-windows/bugfix-pipeline-launcher/SKILL.md +0 -304
  233. package/bundled/skills-windows/bugfix-pipeline-launcher/references/configuration.md +0 -84
  234. package/bundled/skills-windows/feature-pipeline-launcher/SKILL.md +0 -381
  235. package/bundled/skills-windows/feature-pipeline-launcher/references/configuration.md +0 -67
  236. package/bundled/skills-windows/feature-pipeline-launcher/scripts/preflight-check.py +0 -462
  237. package/bundled/skills-windows/feature-planner/SKILL.md +0 -397
  238. package/bundled/skills-windows/feature-planner/assets/evaluation-guide.md +0 -64
  239. package/bundled/skills-windows/feature-planner/assets/planning-guide.md +0 -214
  240. package/bundled/skills-windows/feature-planner/references/browser-interaction.md +0 -59
  241. package/bundled/skills-windows/feature-planner/references/completeness-review.md +0 -57
  242. package/bundled/skills-windows/feature-planner/references/decomposition-patterns.md +0 -75
  243. package/bundled/skills-windows/feature-planner/references/error-recovery.md +0 -90
  244. package/bundled/skills-windows/feature-planner/references/incremental-feature-planning.md +0 -112
  245. package/bundled/skills-windows/feature-planner/references/new-project-planning.md +0 -85
  246. package/bundled/skills-windows/feature-planner/scripts/validate-and-generate.py +0 -1020
  247. package/bundled/skills-windows/feature-workflow/SKILL.md +0 -374
  248. package/bundled/skills-windows/feature-workflow/references/brainstorm-guide.md +0 -137
  249. package/bundled/skills-windows/prizm-kit/SKILL.md +0 -93
  250. package/bundled/skills-windows/prizmkit-code-review/SKILL.md +0 -161
  251. package/bundled/skills-windows/prizmkit-code-review/references/dev-agent-prompt.md +0 -30
  252. package/bundled/skills-windows/prizmkit-code-review/references/review-report-template.md +0 -31
  253. package/bundled/skills-windows/prizmkit-code-review/references/reviewer-agent-prompt.md +0 -66
  254. package/bundled/skills-windows/prizmkit-code-review/scripts/check_loop.py +0 -186
  255. package/bundled/skills-windows/prizmkit-committer/SKILL.md +0 -89
  256. package/bundled/skills-windows/prizmkit-deploy/SKILL.md +0 -444
  257. package/bundled/skills-windows/prizmkit-deploy/references/ci-cd-workflows.md +0 -115
  258. package/bundled/skills-windows/prizmkit-deploy/references/cloud-platform-deploy.md +0 -93
  259. package/bundled/skills-windows/prizmkit-deploy/references/data-safety-examples.md +0 -120
  260. package/bundled/skills-windows/prizmkit-deploy/references/database-setup.md +0 -46
  261. package/bundled/skills-windows/prizmkit-deploy/references/deploy-config-schema.md +0 -148
  262. package/bundled/skills-windows/prizmkit-deploy/references/deploy-history-schema.md +0 -62
  263. package/bundled/skills-windows/prizmkit-deploy/references/deployment-modes.md +0 -50
  264. package/bundled/skills-windows/prizmkit-deploy/references/direct-upload.md +0 -26
  265. package/bundled/skills-windows/prizmkit-deploy/references/dns-setup.md +0 -42
  266. package/bundled/skills-windows/prizmkit-deploy/references/docker-deploy.md +0 -31
  267. package/bundled/skills-windows/prizmkit-deploy/references/firewall-setup.md +0 -37
  268. package/bundled/skills-windows/prizmkit-deploy/references/live-validation-notes.md +0 -21
  269. package/bundled/skills-windows/prizmkit-deploy/references/nginx-blue-green.md +0 -59
  270. package/bundled/skills-windows/prizmkit-deploy/references/ssh-bootstrap-flow.md +0 -49
  271. package/bundled/skills-windows/prizmkit-deploy/references/ssh-execution-flow.md +0 -41
  272. package/bundled/skills-windows/prizmkit-deploy/references/ssh-takeover.md +0 -20
  273. package/bundled/skills-windows/prizmkit-deploy/references/ssl-setup.md +0 -56
  274. package/bundled/skills-windows/prizmkit-implement/SKILL.md +0 -71
  275. package/bundled/skills-windows/prizmkit-init/SKILL.md +0 -356
  276. package/bundled/skills-windows/prizmkit-init/assets/project-brief-template.md +0 -82
  277. package/bundled/skills-windows/prizmkit-init/references/config-schema.md +0 -70
  278. package/bundled/skills-windows/prizmkit-init/references/rules/layer-detection.md +0 -41
  279. package/bundled/skills-windows/prizmkit-init/references/tech-stack-catalog.md +0 -13
  280. package/bundled/skills-windows/prizmkit-init/references/update-supplement.md +0 -9
  281. package/bundled/skills-windows/prizmkit-plan/SKILL.md +0 -102
  282. package/bundled/skills-windows/prizmkit-plan/assets/plan-template.md +0 -115
  283. package/bundled/skills-windows/prizmkit-plan/assets/spec-template.md +0 -73
  284. package/bundled/skills-windows/prizmkit-plan/references/clarify-guide.md +0 -67
  285. package/bundled/skills-windows/prizmkit-plan/references/examples.md +0 -85
  286. package/bundled/skills-windows/prizmkit-plan/references/verification-checklist.md +0 -60
  287. package/bundled/skills-windows/prizmkit-prizm-docs/SKILL.md +0 -129
  288. package/bundled/skills-windows/prizmkit-prizm-docs/assets/prizm-docs-format.md +0 -613
  289. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-init.md +0 -45
  290. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-rebuild.md +0 -15
  291. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-status.md +0 -14
  292. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-update.md +0 -19
  293. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-validate.md +0 -17
  294. package/bundled/skills-windows/prizmkit-retrospective/SKILL.md +0 -87
  295. package/bundled/skills-windows/prizmkit-retrospective/references/knowledge-injection-steps.md +0 -50
  296. package/bundled/skills-windows/prizmkit-retrospective/references/structural-sync-steps.md +0 -43
  297. package/bundled/skills-windows/prizmkit-test/SKILL.md +0 -227
  298. package/bundled/skills-windows/prizmkit-test/references/boundary-coverage-protocol.md +0 -220
  299. package/bundled/skills-windows/prizmkit-test/references/examples.md +0 -143
  300. package/bundled/skills-windows/prizmkit-test/references/service-boundary-test-catalog.md +0 -225
  301. package/bundled/skills-windows/prizmkit-test/references/test-generation-steps.md +0 -109
  302. package/bundled/skills-windows/prizmkit-test/references/test-report-template.md +0 -111
  303. package/bundled/skills-windows/prizmkit-test/scripts/validate_boundary_report.py +0 -347
  304. package/bundled/skills-windows/recovery-workflow/SKILL.md +0 -355
  305. package/bundled/skills-windows/recovery-workflow/evals/evals.json +0 -46
  306. package/bundled/skills-windows/recovery-workflow/references/detection.md +0 -58
  307. package/bundled/skills-windows/recovery-workflow/scripts/detect-recovery-state.py +0 -544
  308. package/bundled/skills-windows/refactor-pipeline-launcher/SKILL.md +0 -346
  309. package/bundled/skills-windows/refactor-pipeline-launcher/references/configuration.md +0 -72
  310. package/bundled/skills-windows/refactor-planner/SKILL.md +0 -398
  311. package/bundled/skills-windows/refactor-planner/assets/planning-guide.md +0 -292
  312. package/bundled/skills-windows/refactor-planner/references/behavior-preservation.md +0 -301
  313. package/bundled/skills-windows/refactor-planner/references/fast-path.md +0 -59
  314. package/bundled/skills-windows/refactor-planner/references/planning-phases.md +0 -135
  315. package/bundled/skills-windows/refactor-planner/references/refactor-scoping-guide.md +0 -221
  316. package/bundled/skills-windows/refactor-planner/scripts/validate-and-generate-refactor.py +0 -858
  317. package/bundled/skills-windows/refactor-workflow/SKILL.md +0 -343
  318. package/bundled/skills-windows/refactor-workflow/references/brainstorm-guide.md +0 -116
  319. package/bundled/templates/hooks/diff-prizm-docs.sh +0 -158
  320. package/bundled/templates/hooks/prizm-pre-commit.sh +0 -108
  321. package/bundled/templates/hooks/validate-prizm-docs.sh +0 -139
@@ -1,469 +0,0 @@
1
- #!/usr/bin/env bash
2
- # ============================================================
3
- # dev-pipeline/lib/heartbeat.sh - Shared heartbeat monitoring
4
- #
5
- # Provides start_heartbeat / stop_heartbeat functions that read
6
- # structured progress from progress.json (written by
7
- # parse-stream-progress.py) and fall back to tail-based monitoring.
8
- #
9
- # When stale_kill_threshold is set (>0), the heartbeat monitor will
10
- # automatically kill the AI CLI process if it shows no progress for
11
- # the specified duration. This prevents sessions from hanging forever
12
- # when the AI CLI process doesn't exit after completing its work.
13
- #
14
- # Usage:
15
- # source "$SCRIPT_DIR/lib/heartbeat.sh"
16
- # start_heartbeat "$cli_pid" "$session_log" "$progress_json" "$interval" ["$stale_kill_threshold"]
17
- # # ... wait for CLI to finish ...
18
- # stop_heartbeat "$_HEARTBEAT_PID"
19
- #
20
- # Requires: colors (GREEN, YELLOW, BLUE, NC) and log functions
21
- # to be defined before sourcing.
22
- # ============================================================
23
-
24
- # Start a heartbeat monitor in the background.
25
- # Sets _HEARTBEAT_PID to the background process PID.
26
- #
27
- # Arguments:
28
- # $1 - cli_pid PID of the AI CLI process to monitor
29
- # $2 - session_log Path to session.log
30
- # $3 - progress_json Path to progress.json (may not exist if stream-json disabled)
31
- # $4 - interval Heartbeat interval in seconds
32
- # $5 - stale_kill_threshold (optional) Seconds of no progress before auto-killing the process.
33
- # 0 = disabled (default). Recommended: 900 (15 minutes).
34
- start_heartbeat() {
35
- local cli_pid="$1"
36
- local session_log="$2"
37
- local progress_json="$3"
38
- local heartbeat_interval="$4"
39
- local stale_kill_threshold="${5:-0}"
40
-
41
- (
42
- local elapsed=0
43
- local prev_size=0
44
- local prev_max_size=0
45
- local prev_child_activity_signature=""
46
- local prev_progress_signature=""
47
- local stale_seconds=0
48
- local stale_reason="stale_session"
49
- while kill -0 "$cli_pid" 2>/dev/null; do
50
- sleep "$heartbeat_interval"
51
- elapsed=$((elapsed + heartbeat_interval))
52
- kill -0 "$cli_pid" 2>/dev/null || break
53
-
54
- # Get log file size. If session_log was truncated (e.g. by subagent
55
- # stdout redirection severing the file descriptor), detect and flag it.
56
- local cur_size=0
57
- if [[ -f "$session_log" ]]; then
58
- cur_size=$(wc -c < "$session_log" 2>/dev/null || echo 0)
59
- cur_size=$(echo "$cur_size" | tr -d ' ')
60
- fi
61
-
62
- # Detect log truncation: size dropped to 0 or near-zero after previously
63
- # accumulating significant content (>100KB). This indicates the file was
64
- # unlinked/truncated by something outside our control while the AI CLI
65
- # process is still running.
66
- local log_truncated=false
67
- if [[ $cur_size -lt 1024 && $prev_max_size -gt 102400 ]]; then
68
- log_truncated=true
69
- fi
70
- # Track the maximum size we've seen for truncation detection
71
- local prev_max_size=$prev_max_size
72
- if [[ $cur_size -gt $prev_max_size ]]; then
73
- prev_max_size=$cur_size
74
- fi
75
-
76
- local growth=$((cur_size - prev_size))
77
- prev_size=$cur_size
78
-
79
- local child_activity_signature=""
80
- local child_total_bytes=0
81
- local child_session_count=0
82
- local progress_signature=""
83
- if [[ -f "$progress_json" ]]; then
84
- local progress_activity_data
85
- progress_activity_data=$(python3 - "$progress_json" <<'PY' 2>/dev/null || true
86
- import json
87
- import sys
88
-
89
- try:
90
- with open(sys.argv[1], "r", encoding="utf-8") as fh:
91
- progress = json.load(fh)
92
- except Exception:
93
- sys.exit(0)
94
-
95
- child_signature = str(progress.get("child_activity_signature") or "")
96
- total_bytes = int(progress.get("child_total_bytes") or 0)
97
- session_count = len(progress.get("child_session_files") or [])
98
- progress_signature = json.dumps(
99
- [
100
- progress.get("current_phase") or "",
101
- progress.get("current_tool") or "",
102
- int(progress.get("message_count") or 0),
103
- int(progress.get("total_tool_calls") or 0),
104
- int(progress.get("active_subagent_count") or 0),
105
- int(progress.get("subagent_spawn_count") or 0),
106
- child_signature,
107
- total_bytes,
108
- session_count,
109
- progress.get("fatal_error_code") or "",
110
- progress.get("terminal_result_text") or "",
111
- ],
112
- separators=(",", ":"),
113
- )
114
- sep = "\x1f"
115
- print(sep.join([child_signature, str(total_bytes), str(session_count), progress_signature]))
116
- PY
117
- )
118
- if [[ -n "$progress_activity_data" ]]; then
119
- IFS=$'\037' read -r child_activity_signature child_total_bytes child_session_count progress_signature <<< "$progress_activity_data"
120
- fi
121
- fi
122
-
123
- local child_growth=0
124
- if [[ -n "$child_activity_signature" && "$child_activity_signature" != "$prev_child_activity_signature" ]]; then
125
- child_growth=1
126
- fi
127
- prev_child_activity_signature="$child_activity_signature"
128
-
129
- local progress_advanced=0
130
- if [[ -n "$progress_signature" && "$progress_signature" != "$prev_progress_signature" ]]; then
131
- progress_advanced=1
132
- fi
133
- prev_progress_signature="$progress_signature"
134
-
135
- local effective_stale_kill_threshold="$stale_kill_threshold"
136
- if [[ $stale_kill_threshold -gt 0 && -f "$progress_json" ]]; then
137
- local extended_threshold
138
- extended_threshold=$(python3 - "$progress_json" "$stale_kill_threshold" <<'PY' 2>/dev/null || true
139
- import json
140
- import os
141
- import sys
142
-
143
- progress_path = sys.argv[1]
144
- base_threshold = int(sys.argv[2])
145
-
146
- with open(progress_path, "r", encoding="utf-8") as fh:
147
- progress = json.load(fh)
148
-
149
- spawn_count = 0
150
- for tool in progress.get("tool_calls", []):
151
- if isinstance(tool, dict) and tool.get("name") in ("spawn_agent", "Agent", "TaskCreate"):
152
- try:
153
- spawn_count += int(tool.get("count", 0))
154
- except (TypeError, ValueError):
155
- pass
156
-
157
- # Also check the subagent_spawn_count field (set by _record_cb_agent_tool_call)
158
- if not spawn_count:
159
- spawn_count = int(progress.get("subagent_spawn_count", 0))
160
-
161
- fmt = progress.get("event_format", "")
162
-
163
- # Codex: current_tool == "wait" means parent is blocked on spawn_agent completion
164
- if (
165
- fmt == "codex-json"
166
- and progress.get("current_tool") == "wait"
167
- and spawn_count > 0
168
- ):
169
- configured = os.environ.get("CODEX_WAIT_STALE_KILL_THRESHOLD", "")
170
- try:
171
- wait_threshold = int(configured)
172
- except ValueError:
173
- wait_threshold = max(base_threshold * 4, 3600)
174
- if wait_threshold > base_threshold:
175
- print(wait_threshold)
176
-
177
- # CodeBuddy: Agent tool blocks synchronously; Task* tools imply bg agents.
178
- # Extend the stale window when sub-agents have been spawned so the heartbeat
179
- # doesn't kill the parent while children are still running.
180
- if (
181
- fmt == "stream-json"
182
- and spawn_count > 0
183
- and progress.get("cb_session_id", "")
184
- ):
185
- configured = os.environ.get("CB_SUBAGENT_STALE_KILL_THRESHOLD", "")
186
- try:
187
- cb_threshold = int(configured)
188
- except ValueError:
189
- cb_threshold = max(base_threshold * 4, 3600)
190
- if cb_threshold > base_threshold:
191
- print(cb_threshold)
192
- PY
193
- )
194
- if [[ "$extended_threshold" =~ ^[0-9]+$ && "$extended_threshold" -gt "$stale_kill_threshold" ]]; then
195
- effective_stale_kill_threshold="$extended_threshold"
196
- fi
197
- fi
198
-
199
- # Track progress staleness. Parent sessions can sit in a wait/polling
200
- # tool while child transcripts or structured progress counters keep
201
- # advancing, so both child activity and progress.json state changes
202
- # count as progress.
203
- #
204
- # When the main session log has been truncated (e.g. by subagent stdout
205
- # redirection severing the file descriptor), use structured progress and
206
- # child activity as the primary progress signals — the parent process is
207
- # still running and children may still be producing output.
208
- if [[ "$log_truncated" == "true" ]]; then
209
- if [[ $progress_advanced -gt 0 || $child_growth -gt 0 ]]; then
210
- stale_seconds=0
211
- else
212
- stale_seconds=$((stale_seconds + heartbeat_interval))
213
- fi
214
- elif [[ $growth -le 0 && $child_growth -eq 0 && $progress_advanced -eq 0 ]]; then
215
- stale_seconds=$((stale_seconds + heartbeat_interval))
216
- else
217
- stale_seconds=0
218
- fi
219
-
220
- local size_display
221
- if $log_truncated; then
222
- size_display="${cur_size}B/TRUNCATED(from ${prev_max_size}B)"
223
- elif [[ $cur_size -gt 1048576 ]]; then
224
- size_display="$((cur_size / 1048576))MB"
225
- elif [[ $cur_size -gt 1024 ]]; then
226
- size_display="$((cur_size / 1024))KB"
227
- else
228
- size_display="${cur_size}B"
229
- fi
230
- local child_display=""
231
- if [[ ${child_total_bytes:-0} -gt 0 ]]; then
232
- local child_size_display
233
- if [[ $child_total_bytes -gt 1048576 ]]; then
234
- child_size_display="$((child_total_bytes / 1048576))MB"
235
- elif [[ $child_total_bytes -gt 1024 ]]; then
236
- child_size_display="$((child_total_bytes / 1024))KB"
237
- else
238
- child_size_display="${child_total_bytes}B"
239
- fi
240
- child_display=" | child: ${child_size_display}"
241
- if [[ ${child_session_count:-0} -gt 1 ]]; then
242
- child_display="${child_display}/${child_session_count}"
243
- fi
244
- fi
245
-
246
- local mins=$((elapsed / 60))
247
- local secs=$((elapsed % 60))
248
-
249
- local status_icon
250
- if $log_truncated; then
251
- status_icon="${RED}⚠${NC}"
252
- elif [[ $growth -gt 0 || $child_growth -gt 0 || $progress_advanced -gt 0 ]]; then
253
- status_icon="${GREEN}▶${NC}"
254
- else
255
- status_icon="${YELLOW}⏸${NC}"
256
- fi
257
-
258
- # Fatal provider/runtime errors are terminal; do not wait for the
259
- # stale window when progress.json already proves the model cannot
260
- # continue (for example context_too_large).
261
- if [[ -f "$progress_json" ]]; then
262
- local fatal_error_code=""
263
- fatal_error_code=$(python3 - "$progress_json" <<'PY' 2>/dev/null || true
264
- import json
265
- import sys
266
- try:
267
- with open(sys.argv[1], encoding="utf-8") as fh:
268
- progress = json.load(fh)
269
- except Exception:
270
- raise SystemExit(0)
271
- code = progress.get("fatal_error_code") or ""
272
- if code:
273
- print(code)
274
- PY
275
- )
276
- if [[ -n "$fatal_error_code" ]]; then
277
- echo -e " ${RED}[HEARTBEAT]${NC} ${mins}m${secs}s | log: ${size_display} | ${RED}FATAL: ${fatal_error_code}${NC}"
278
- local _marker_dir
279
- _marker_dir="$(dirname "$session_log")"
280
- echo "{\"killed_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"reason\": \"${fatal_error_code}\", \"fatal_error_code\": \"${fatal_error_code}\", \"stale_seconds\": $stale_seconds, \"threshold\": $effective_stale_kill_threshold}" > "$_marker_dir/fatal-error.json" 2>/dev/null || true
281
- echo "{\"killed_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"reason\": \"${fatal_error_code}\", \"fatal_error_code\": \"${fatal_error_code}\", \"stale_seconds\": $stale_seconds, \"threshold\": $effective_stale_kill_threshold}" > "$_marker_dir/stale-kill.json" 2>/dev/null || true
282
- kill -TERM "$cli_pid" 2>/dev/null || true
283
- local fatal_kill_grace_seconds="${STALE_KILL_GRACE_SECONDS:-10}"
284
- if [[ $fatal_kill_grace_seconds -gt 0 ]]; then
285
- sleep "$fatal_kill_grace_seconds"
286
- fi
287
- if kill -0 "$cli_pid" 2>/dev/null; then
288
- kill -9 "$cli_pid" 2>/dev/null || true
289
- fi
290
- break
291
- fi
292
- fi
293
-
294
- # Stale-kill: auto-terminate process if no progress for too long.
295
- # Parent sessions can wait on spawned work; child transcript growth
296
- # counts as progress above, while silent waits still use the active
297
- # stale window to surface stuck agents promptly.
298
- if [[ $effective_stale_kill_threshold -gt 0 && $stale_seconds -ge $effective_stale_kill_threshold ]]; then
299
- local stale_mins=$((stale_seconds / 60))
300
- echo -e " ${RED}[HEARTBEAT]${NC} ${mins}m${secs}s | log: ${size_display} | ${RED}STALE-KILL: no progress for ${stale_mins}m (threshold: ${effective_stale_kill_threshold}s)${NC}"
301
- echo -e " ${RED}[HEARTBEAT]${NC} Killing AI CLI process $cli_pid (stale session)..."
302
- # Write the marker before killing. Some CLIs exit quickly, and the
303
- # parent runner may stop this heartbeat process immediately after
304
- # wait(1) returns.
305
- local _marker_dir
306
- _marker_dir="$(dirname "$session_log")"
307
- echo "{\"killed_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"reason\": \"${stale_reason}\", \"stale_seconds\": $stale_seconds, \"threshold\": $effective_stale_kill_threshold}" > "$_marker_dir/stale-kill.json" 2>/dev/null || true
308
- kill -TERM "$cli_pid" 2>/dev/null || true
309
- # Give process 10s to exit gracefully, then force kill
310
- local stale_kill_grace_seconds="${STALE_KILL_GRACE_SECONDS:-10}"
311
- if [[ $stale_kill_grace_seconds -gt 0 ]]; then
312
- sleep "$stale_kill_grace_seconds"
313
- fi
314
- if kill -0 "$cli_pid" 2>/dev/null; then
315
- echo -e " ${RED}[HEARTBEAT]${NC} Process still alive after SIGTERM, sending SIGKILL..."
316
- kill -9 "$cli_pid" 2>/dev/null || true
317
- fi
318
- break
319
- fi
320
-
321
- # Build staleness hint for display
322
- local stale_hint=""
323
- if [[ $effective_stale_kill_threshold -gt 0 && $stale_seconds -gt 0 ]]; then
324
- local stale_mins=$((stale_seconds / 60))
325
- local threshold_mins=$((effective_stale_kill_threshold / 60))
326
- stale_hint=" | stale: ${stale_mins}m/${threshold_mins}m"
327
- fi
328
-
329
- # Try structured progress from progress.json
330
- if [[ -f "$progress_json" ]]; then
331
- local phase tool msgs tools_total
332
- phase=$(python3 -c "
333
- import json, sys
334
- try:
335
- with open(sys.argv[1]) as f:
336
- d = json.load(f)
337
- parts = []
338
- if d.get('current_phase'):
339
- parts.append('phase: ' + d['current_phase'])
340
- if d.get('current_tool'):
341
- parts.append('tool: ' + d['current_tool'])
342
- parts.append('msgs: ' + str(d.get('message_count', 0)))
343
- parts.append(str(d.get('total_tool_calls', 0)) + ' tool calls')
344
- print(' | '.join(parts))
345
- except Exception:
346
- sys.exit(1)
347
- " "$progress_json" 2>/dev/null) && {
348
- echo -e " ${status_icon} ${BLUE}[HEARTBEAT]${NC} ${mins}m${secs}s | log: ${size_display}${child_display} | ${phase}${stale_hint}"
349
- continue
350
- }
351
- fi
352
-
353
- # Fallback: tail-based activity detection
354
- local last_activity=""
355
- if [[ -f "$session_log" ]]; then
356
- last_activity=$(tail -20 "$session_log" 2>/dev/null | grep -v '^$' | tail -1 | cut -c1-80 || echo "")
357
- fi
358
-
359
- echo -e " ${status_icon} ${BLUE}[HEARTBEAT]${NC} ${mins}m${secs}s elapsed | log: ${size_display}${child_display} (+${growth}B) | ${last_activity}${stale_hint}"
360
- done
361
- ) &
362
- _HEARTBEAT_PID=$!
363
- }
364
-
365
- # Stop a heartbeat monitor process.
366
- #
367
- # Arguments:
368
- # $1 - heartbeat_pid PID returned by start_heartbeat
369
- stop_heartbeat() {
370
- local heartbeat_pid="$1"
371
- if [[ -n "$heartbeat_pid" ]]; then
372
- kill "$heartbeat_pid" 2>/dev/null || true
373
- wait "$heartbeat_pid" 2>/dev/null || true
374
- fi
375
- }
376
-
377
- # Start the stream-json progress parser as a background process.
378
- # Sets _PARSER_PID to the background process PID.
379
- # No-op if USE_STREAM_JSON is not "true".
380
- #
381
- # Arguments:
382
- # $1 - session_log Path to session.log
383
- # $2 - progress_json Path to write progress.json
384
- # $3 - scripts_dir Path to scripts/ directory
385
- start_progress_parser() {
386
- local session_log="$1"
387
- local progress_json="$2"
388
- local scripts_dir="$3"
389
-
390
- _PARSER_PID=""
391
-
392
- if [[ "${USE_STREAM_JSON:-}" != "true" ]]; then
393
- return 0
394
- fi
395
-
396
- local parser_script="$scripts_dir/parse-stream-progress.py"
397
- if [[ ! -f "$parser_script" ]]; then
398
- return 0
399
- fi
400
-
401
- python3 "$parser_script" \
402
- --session-log "$session_log" \
403
- --progress-file "$progress_json" &
404
- _PARSER_PID=$!
405
- }
406
-
407
- # Stop the progress parser process.
408
- #
409
- # Arguments:
410
- # $1 - parser_pid PID returned by start_progress_parser
411
- stop_progress_parser() {
412
- local parser_pid="$1"
413
- if [[ -n "$parser_pid" ]]; then
414
- kill "$parser_pid" 2>/dev/null || true
415
- wait "$parser_pid" 2>/dev/null || true
416
- fi
417
- }
418
-
419
- # Detect whether the AI CLI supports structured JSON progress.
420
- # Sets USE_STREAM_JSON to "true" or "false".
421
- #
422
- # Arguments:
423
- # $1 - cli_cmd The AI CLI command
424
- detect_stream_json_support() {
425
- local cli_cmd="$1"
426
- USE_STREAM_JSON="false"
427
- STREAM_JSON_FORMAT=""
428
-
429
- local session_platform=""
430
- session_platform="$(_prizm_known_platform_from_cli "$cli_cmd" 2>/dev/null || true)"
431
- if [[ -z "$session_platform" ]]; then
432
- case "$(_prizm_normalize_platform "${PRIZMKIT_PLATFORM:-${PLATFORM:-}}")" in
433
- codex|claude|codebuddy)
434
- session_platform="$(_prizm_normalize_platform "${PRIZMKIT_PLATFORM:-${PLATFORM:-}}")"
435
- ;;
436
- esac
437
- fi
438
-
439
- # CodeBuddy (cbc) always supports stream-json
440
- if [[ "$session_platform" == "codebuddy" || "$cli_cmd" == "cbc" ]]; then
441
- USE_STREAM_JSON="true"
442
- STREAM_JSON_FORMAT="stream-json"
443
- export USE_STREAM_JSON STREAM_JSON_FORMAT
444
- return 0
445
- fi
446
-
447
- # Codex uses `codex exec --json` JSONL, not `--output-format stream-json`.
448
- if [[ "$session_platform" == "codex" ]]; then
449
- local codex_help
450
- codex_help=$("$cli_cmd" exec --help 2>&1) || true
451
- if echo "$codex_help" | grep -q -- "--json"; then
452
- USE_STREAM_JSON="true"
453
- STREAM_JSON_FORMAT="codex-json"
454
- fi
455
- export USE_STREAM_JSON STREAM_JSON_FORMAT
456
- return 0
457
- fi
458
-
459
- # For other CLIs, try to detect support via --help output
460
- # Use explicit file descriptor to avoid issues in background processes
461
- local help_output
462
- help_output=$("$cli_cmd" --help 2>&1) || true
463
-
464
- if echo "$help_output" | grep -q "stream-json"; then
465
- USE_STREAM_JSON="true"
466
- STREAM_JSON_FORMAT="stream-json"
467
- fi
468
- export USE_STREAM_JSON STREAM_JSON_FORMAT
469
- }