prizmkit 1.1.100 → 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 (309) 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/generate-bootstrap-prompt.py +38 -23
  30. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +20 -5
  31. package/bundled/dev-pipeline/scripts/generate-recovery-prompt.py +2 -2
  32. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +39 -0
  33. package/bundled/dev-pipeline/templates/agent-prompts/dev-implement.md +7 -1
  34. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +4 -0
  35. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +12 -3
  36. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +13 -3
  37. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +13 -3
  38. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +2 -0
  39. package/bundled/dev-pipeline/templates/sections/log-size-awareness.md +9 -30
  40. package/bundled/dev-pipeline/templates/sections/phase-context-snapshot-agent-suffix.md +15 -7
  41. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +42 -29
  42. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +41 -39
  43. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-agent.md +4 -0
  44. package/bundled/dev-pipeline/templates/sections/test-failure-recovery-lite.md +4 -0
  45. package/bundled/dev-pipeline/tests/test_auto_skip.py +436 -14
  46. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +104 -0
  47. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +40 -0
  48. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +1138 -0
  49. package/bundled/dev-pipeline/tests/test_unified_cli.py +1045 -0
  50. package/bundled/skills/_metadata.json +1 -1
  51. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +29 -34
  52. package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +6 -5
  53. package/bundled/skills/feature-pipeline-launcher/SKILL.md +29 -35
  54. package/bundled/skills/feature-pipeline-launcher/references/configuration.md +7 -6
  55. package/bundled/skills/feature-workflow/SKILL.md +3 -6
  56. package/bundled/skills/recovery-workflow/SKILL.md +23 -32
  57. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +29 -35
  58. package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +7 -6
  59. package/bundled/skills/refactor-workflow/SKILL.md +3 -6
  60. package/bundled/templates/hooks/commit-intent.json +2 -2
  61. package/bundled/templates/hooks/diff-prizm-docs.py +226 -0
  62. package/bundled/templates/hooks/prizm-pre-commit.py +45 -0
  63. package/bundled/templates/hooks/validate-prizm-docs.py +240 -0
  64. package/package.json +1 -1
  65. package/src/config.js +33 -12
  66. package/src/index.js +3 -6
  67. package/src/manifest.js +3 -2
  68. package/src/metadata.js +7 -18
  69. package/src/prompts.js +0 -12
  70. package/src/runtimes.js +18 -11
  71. package/src/scaffold.js +133 -116
  72. package/src/upgrade.js +1 -1
  73. package/bundled/dev-pipeline/launch-bugfix-daemon.sh +0 -500
  74. package/bundled/dev-pipeline/launch-feature-daemon.sh +0 -657
  75. package/bundled/dev-pipeline/launch-refactor-daemon.sh +0 -502
  76. package/bundled/dev-pipeline/lib/branch.sh +0 -326
  77. package/bundled/dev-pipeline/lib/common.sh +0 -1476
  78. package/bundled/dev-pipeline/lib/heartbeat.sh +0 -469
  79. package/bundled/dev-pipeline/reset-bug.sh +0 -425
  80. package/bundled/dev-pipeline/reset-feature.sh +0 -436
  81. package/bundled/dev-pipeline/reset-refactor.sh +0 -423
  82. package/bundled/dev-pipeline/run-bugfix.sh +0 -1430
  83. package/bundled/dev-pipeline/run-feature.sh +0 -1718
  84. package/bundled/dev-pipeline/run-recovery.sh +0 -648
  85. package/bundled/dev-pipeline/run-refactor.sh +0 -1463
  86. package/bundled/dev-pipeline/tests/test-path-resolution.sh +0 -100
  87. package/bundled/dev-pipeline-windows/.env.example +0 -36
  88. package/bundled/dev-pipeline-windows/README.md +0 -30
  89. package/bundled/dev-pipeline-windows/SCHEMA_ANALYSIS.md +0 -533
  90. package/bundled/dev-pipeline-windows/assets/feature-list-example.json +0 -146
  91. package/bundled/dev-pipeline-windows/assets/prizm-dev-team-integration.md +0 -137
  92. package/bundled/dev-pipeline-windows/launch-bugfix-daemon.ps1 +0 -9
  93. package/bundled/dev-pipeline-windows/launch-feature-daemon.ps1 +0 -9
  94. package/bundled/dev-pipeline-windows/launch-refactor-daemon.ps1 +0 -9
  95. package/bundled/dev-pipeline-windows/lib/branch.ps1 +0 -235
  96. package/bundled/dev-pipeline-windows/lib/common.ps1 +0 -991
  97. package/bundled/dev-pipeline-windows/lib/daemon.ps1 +0 -140
  98. package/bundled/dev-pipeline-windows/lib/pipeline.ps1 +0 -1051
  99. package/bundled/dev-pipeline-windows/lib/reset.ps1 +0 -121
  100. package/bundled/dev-pipeline-windows/reset-bug.ps1 +0 -10
  101. package/bundled/dev-pipeline-windows/reset-feature.ps1 +0 -10
  102. package/bundled/dev-pipeline-windows/reset-refactor.ps1 +0 -10
  103. package/bundled/dev-pipeline-windows/run-bugfix.ps1 +0 -9
  104. package/bundled/dev-pipeline-windows/run-feature.ps1 +0 -9
  105. package/bundled/dev-pipeline-windows/run-recovery.ps1 +0 -179
  106. package/bundled/dev-pipeline-windows/run-refactor.ps1 +0 -9
  107. package/bundled/dev-pipeline-windows/scripts/check-session-status.py +0 -301
  108. package/bundled/dev-pipeline-windows/scripts/continuation.py +0 -374
  109. package/bundled/dev-pipeline-windows/scripts/detect-stuck.py +0 -530
  110. package/bundled/dev-pipeline-windows/scripts/generate-bootstrap-prompt.py +0 -2279
  111. package/bundled/dev-pipeline-windows/scripts/generate-bugfix-prompt.py +0 -763
  112. package/bundled/dev-pipeline-windows/scripts/generate-recovery-prompt.py +0 -805
  113. package/bundled/dev-pipeline-windows/scripts/generate-refactor-prompt.py +0 -841
  114. package/bundled/dev-pipeline-windows/scripts/init-bugfix-pipeline.py +0 -316
  115. package/bundled/dev-pipeline-windows/scripts/init-dev-team.py +0 -134
  116. package/bundled/dev-pipeline-windows/scripts/init-pipeline.py +0 -382
  117. package/bundled/dev-pipeline-windows/scripts/init-refactor-pipeline.py +0 -399
  118. package/bundled/dev-pipeline-windows/scripts/parse-stream-progress.py +0 -1362
  119. package/bundled/dev-pipeline-windows/scripts/patch-completion-notes.py +0 -191
  120. package/bundled/dev-pipeline-windows/scripts/prizmkit-test-gate.py +0 -446
  121. package/bundled/dev-pipeline-windows/scripts/update-bug-status.py +0 -1121
  122. package/bundled/dev-pipeline-windows/scripts/update-checkpoint.py +0 -173
  123. package/bundled/dev-pipeline-windows/scripts/update-feature-status.py +0 -1789
  124. package/bundled/dev-pipeline-windows/scripts/update-refactor-status.py +0 -1327
  125. package/bundled/dev-pipeline-windows/scripts/utils.py +0 -542
  126. package/bundled/dev-pipeline-windows/templates/agent-prompts/critic-plan-challenge.md +0 -7
  127. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-fix.md +0 -7
  128. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-implement.md +0 -65
  129. package/bundled/dev-pipeline-windows/templates/agent-prompts/dev-resume.md +0 -5
  130. package/bundled/dev-pipeline-windows/templates/agent-prompts/reviewer-review.md +0 -7
  131. package/bundled/dev-pipeline-windows/templates/bootstrap-prompt.md +0 -73
  132. package/bundled/dev-pipeline-windows/templates/bootstrap-tier1.md +0 -589
  133. package/bundled/dev-pipeline-windows/templates/bootstrap-tier2.md +0 -710
  134. package/bundled/dev-pipeline-windows/templates/bootstrap-tier3.md +0 -791
  135. package/bundled/dev-pipeline-windows/templates/bug-fix-list-schema.json +0 -263
  136. package/bundled/dev-pipeline-windows/templates/bugfix-bootstrap-prompt.md +0 -326
  137. package/bundled/dev-pipeline-windows/templates/feature-list-schema.json +0 -237
  138. package/bundled/dev-pipeline-windows/templates/refactor-bootstrap-prompt.md +0 -340
  139. package/bundled/dev-pipeline-windows/templates/refactor-list-schema.json +0 -270
  140. package/bundled/dev-pipeline-windows/templates/sections/ac-verification-checklist.md +0 -7
  141. package/bundled/dev-pipeline-windows/templates/sections/checkpoint-system.md +0 -91
  142. package/bundled/dev-pipeline-windows/templates/sections/context-budget-rules.md +0 -34
  143. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-agent.md +0 -10
  144. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-full.md +0 -12
  145. package/bundled/dev-pipeline-windows/templates/sections/critical-paths-lite.md +0 -7
  146. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-agent.md +0 -8
  147. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-full.md +0 -9
  148. package/bundled/dev-pipeline-windows/templates/sections/directory-convention-lite.md +0 -6
  149. package/bundled/dev-pipeline-windows/templates/sections/failure-capture.md +0 -21
  150. package/bundled/dev-pipeline-windows/templates/sections/feature-context.md +0 -21
  151. package/bundled/dev-pipeline-windows/templates/sections/log-size-awareness.md +0 -41
  152. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-auto.md +0 -283
  153. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification-opencli.md +0 -112
  154. package/bundled/dev-pipeline-windows/templates/sections/phase-browser-verification.md +0 -168
  155. package/bundled/dev-pipeline-windows/templates/sections/phase-commit-full.md +0 -82
  156. package/bundled/dev-pipeline-windows/templates/sections/phase-commit.md +0 -75
  157. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-agent-suffix.md +0 -23
  158. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-base.md +0 -14
  159. package/bundled/dev-pipeline-windows/templates/sections/phase-context-snapshot-lite-suffix.md +0 -19
  160. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan-full.md +0 -63
  161. package/bundled/dev-pipeline-windows/templates/sections/phase-critic-plan.md +0 -42
  162. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-agent.md +0 -44
  163. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-full.md +0 -59
  164. package/bundled/dev-pipeline-windows/templates/sections/phase-implement-lite.md +0 -39
  165. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-agent.md +0 -27
  166. package/bundled/dev-pipeline-windows/templates/sections/phase-plan-lite.md +0 -27
  167. package/bundled/dev-pipeline-windows/templates/sections/phase-prizmkit-test.md +0 -39
  168. package/bundled/dev-pipeline-windows/templates/sections/phase-review-agent.md +0 -35
  169. package/bundled/dev-pipeline-windows/templates/sections/phase-review-full.md +0 -35
  170. package/bundled/dev-pipeline-windows/templates/sections/phase-specify-plan-full.md +0 -73
  171. package/bundled/dev-pipeline-windows/templates/sections/phase0-init.md +0 -13
  172. package/bundled/dev-pipeline-windows/templates/sections/phase0-test-baseline.md +0 -21
  173. package/bundled/dev-pipeline-windows/templates/sections/session-context.md +0 -5
  174. package/bundled/dev-pipeline-windows/templates/sections/subagent-timeout-recovery.md +0 -6
  175. package/bundled/dev-pipeline-windows/templates/sections/task-contract.md +0 -34
  176. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-agent.md +0 -48
  177. package/bundled/dev-pipeline-windows/templates/sections/test-failure-recovery-lite.md +0 -48
  178. package/bundled/dev-pipeline-windows/templates/session-status-schema.json +0 -83
  179. package/bundled/skills-windows/app-planner/SKILL.md +0 -296
  180. package/bundled/skills-windows/app-planner/assets/app-design-guide.md +0 -101
  181. package/bundled/skills-windows/app-planner/references/architecture-decisions.md +0 -52
  182. package/bundled/skills-windows/app-planner/references/brainstorm-guide.md +0 -101
  183. package/bundled/skills-windows/app-planner/references/frontend-design-guide.md +0 -71
  184. package/bundled/skills-windows/app-planner/references/infrastructure-convention-discovery.md +0 -108
  185. package/bundled/skills-windows/app-planner/references/project-brief-guide.md +0 -82
  186. package/bundled/skills-windows/app-planner/references/project-conventions-discovery.md +0 -59
  187. package/bundled/skills-windows/app-planner/references/project-state-detection.md +0 -90
  188. package/bundled/skills-windows/app-planner/references/red-team-checklist.md +0 -40
  189. package/bundled/skills-windows/app-planner/references/rules/backend/derivation-rules.md +0 -619
  190. package/bundled/skills-windows/app-planner/references/rules/backend/fixed-rules.md +0 -285
  191. package/bundled/skills-windows/app-planner/references/rules/backend/question-bank.md +0 -249
  192. package/bundled/skills-windows/app-planner/references/rules/backend/question-manifest.json +0 -46
  193. package/bundled/skills-windows/app-planner/references/rules/backend/template.md +0 -173
  194. package/bundled/skills-windows/app-planner/references/rules/database/derivation-rules.md +0 -382
  195. package/bundled/skills-windows/app-planner/references/rules/database/fixed-rules.md +0 -211
  196. package/bundled/skills-windows/app-planner/references/rules/database/question-bank.md +0 -184
  197. package/bundled/skills-windows/app-planner/references/rules/database/question-manifest.json +0 -39
  198. package/bundled/skills-windows/app-planner/references/rules/database/template.md +0 -158
  199. package/bundled/skills-windows/app-planner/references/rules/frontend/derivation-rules.md +0 -820
  200. package/bundled/skills-windows/app-planner/references/rules/frontend/fixed-rules.md +0 -188
  201. package/bundled/skills-windows/app-planner/references/rules/frontend/question-bank.md +0 -319
  202. package/bundled/skills-windows/app-planner/references/rules/frontend/question-manifest.json +0 -51
  203. package/bundled/skills-windows/app-planner/references/rules/frontend/template.md +0 -339
  204. package/bundled/skills-windows/app-planner/references/rules/mobile/derivation-rules.md +0 -649
  205. package/bundled/skills-windows/app-planner/references/rules/mobile/fixed-rules.md +0 -290
  206. package/bundled/skills-windows/app-planner/references/rules/mobile/question-bank.md +0 -232
  207. package/bundled/skills-windows/app-planner/references/rules/mobile/question-manifest.json +0 -47
  208. package/bundled/skills-windows/app-planner/references/rules/mobile/template.md +0 -175
  209. package/bundled/skills-windows/app-planner/references/rules-configuration.md +0 -46
  210. package/bundled/skills-windows/bug-fix-workflow/SKILL.md +0 -379
  211. package/bundled/skills-windows/bug-fix-workflow/references/bug-diagnosis.md +0 -41
  212. package/bundled/skills-windows/bug-planner/SKILL.md +0 -402
  213. package/bundled/skills-windows/bug-planner/assets/bug-confirmation-template.md +0 -43
  214. package/bundled/skills-windows/bug-planner/references/critic-and-verification.md +0 -44
  215. package/bundled/skills-windows/bug-planner/references/error-recovery.md +0 -73
  216. package/bundled/skills-windows/bug-planner/references/input-formats.md +0 -53
  217. package/bundled/skills-windows/bug-planner/references/schema-validation.md +0 -25
  218. package/bundled/skills-windows/bug-planner/references/severity-rules.md +0 -16
  219. package/bundled/skills-windows/bug-planner/scripts/validate-bug-list.py +0 -322
  220. package/bundled/skills-windows/bugfix-pipeline-launcher/SKILL.md +0 -304
  221. package/bundled/skills-windows/bugfix-pipeline-launcher/references/configuration.md +0 -84
  222. package/bundled/skills-windows/feature-pipeline-launcher/SKILL.md +0 -381
  223. package/bundled/skills-windows/feature-pipeline-launcher/references/configuration.md +0 -67
  224. package/bundled/skills-windows/feature-pipeline-launcher/scripts/preflight-check.py +0 -462
  225. package/bundled/skills-windows/feature-planner/SKILL.md +0 -397
  226. package/bundled/skills-windows/feature-planner/assets/evaluation-guide.md +0 -64
  227. package/bundled/skills-windows/feature-planner/assets/planning-guide.md +0 -214
  228. package/bundled/skills-windows/feature-planner/references/browser-interaction.md +0 -59
  229. package/bundled/skills-windows/feature-planner/references/completeness-review.md +0 -57
  230. package/bundled/skills-windows/feature-planner/references/decomposition-patterns.md +0 -75
  231. package/bundled/skills-windows/feature-planner/references/error-recovery.md +0 -90
  232. package/bundled/skills-windows/feature-planner/references/incremental-feature-planning.md +0 -112
  233. package/bundled/skills-windows/feature-planner/references/new-project-planning.md +0 -85
  234. package/bundled/skills-windows/feature-planner/scripts/validate-and-generate.py +0 -1020
  235. package/bundled/skills-windows/feature-workflow/SKILL.md +0 -374
  236. package/bundled/skills-windows/feature-workflow/references/brainstorm-guide.md +0 -137
  237. package/bundled/skills-windows/prizm-kit/SKILL.md +0 -93
  238. package/bundled/skills-windows/prizmkit-code-review/SKILL.md +0 -161
  239. package/bundled/skills-windows/prizmkit-code-review/references/dev-agent-prompt.md +0 -30
  240. package/bundled/skills-windows/prizmkit-code-review/references/review-report-template.md +0 -31
  241. package/bundled/skills-windows/prizmkit-code-review/references/reviewer-agent-prompt.md +0 -66
  242. package/bundled/skills-windows/prizmkit-code-review/scripts/check_loop.py +0 -186
  243. package/bundled/skills-windows/prizmkit-committer/SKILL.md +0 -89
  244. package/bundled/skills-windows/prizmkit-deploy/SKILL.md +0 -444
  245. package/bundled/skills-windows/prizmkit-deploy/references/ci-cd-workflows.md +0 -115
  246. package/bundled/skills-windows/prizmkit-deploy/references/cloud-platform-deploy.md +0 -93
  247. package/bundled/skills-windows/prizmkit-deploy/references/data-safety-examples.md +0 -120
  248. package/bundled/skills-windows/prizmkit-deploy/references/database-setup.md +0 -46
  249. package/bundled/skills-windows/prizmkit-deploy/references/deploy-config-schema.md +0 -148
  250. package/bundled/skills-windows/prizmkit-deploy/references/deploy-history-schema.md +0 -62
  251. package/bundled/skills-windows/prizmkit-deploy/references/deployment-modes.md +0 -50
  252. package/bundled/skills-windows/prizmkit-deploy/references/direct-upload.md +0 -26
  253. package/bundled/skills-windows/prizmkit-deploy/references/dns-setup.md +0 -42
  254. package/bundled/skills-windows/prizmkit-deploy/references/docker-deploy.md +0 -31
  255. package/bundled/skills-windows/prizmkit-deploy/references/firewall-setup.md +0 -37
  256. package/bundled/skills-windows/prizmkit-deploy/references/live-validation-notes.md +0 -21
  257. package/bundled/skills-windows/prizmkit-deploy/references/nginx-blue-green.md +0 -59
  258. package/bundled/skills-windows/prizmkit-deploy/references/ssh-bootstrap-flow.md +0 -49
  259. package/bundled/skills-windows/prizmkit-deploy/references/ssh-execution-flow.md +0 -41
  260. package/bundled/skills-windows/prizmkit-deploy/references/ssh-takeover.md +0 -20
  261. package/bundled/skills-windows/prizmkit-deploy/references/ssl-setup.md +0 -56
  262. package/bundled/skills-windows/prizmkit-implement/SKILL.md +0 -71
  263. package/bundled/skills-windows/prizmkit-init/SKILL.md +0 -356
  264. package/bundled/skills-windows/prizmkit-init/assets/project-brief-template.md +0 -82
  265. package/bundled/skills-windows/prizmkit-init/references/config-schema.md +0 -70
  266. package/bundled/skills-windows/prizmkit-init/references/rules/layer-detection.md +0 -41
  267. package/bundled/skills-windows/prizmkit-init/references/tech-stack-catalog.md +0 -13
  268. package/bundled/skills-windows/prizmkit-init/references/update-supplement.md +0 -9
  269. package/bundled/skills-windows/prizmkit-plan/SKILL.md +0 -102
  270. package/bundled/skills-windows/prizmkit-plan/assets/plan-template.md +0 -115
  271. package/bundled/skills-windows/prizmkit-plan/assets/spec-template.md +0 -73
  272. package/bundled/skills-windows/prizmkit-plan/references/clarify-guide.md +0 -67
  273. package/bundled/skills-windows/prizmkit-plan/references/examples.md +0 -85
  274. package/bundled/skills-windows/prizmkit-plan/references/verification-checklist.md +0 -60
  275. package/bundled/skills-windows/prizmkit-prizm-docs/SKILL.md +0 -129
  276. package/bundled/skills-windows/prizmkit-prizm-docs/assets/prizm-docs-format.md +0 -613
  277. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-init.md +0 -45
  278. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-rebuild.md +0 -15
  279. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-status.md +0 -14
  280. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-update.md +0 -19
  281. package/bundled/skills-windows/prizmkit-prizm-docs/references/op-validate.md +0 -17
  282. package/bundled/skills-windows/prizmkit-retrospective/SKILL.md +0 -87
  283. package/bundled/skills-windows/prizmkit-retrospective/references/knowledge-injection-steps.md +0 -50
  284. package/bundled/skills-windows/prizmkit-retrospective/references/structural-sync-steps.md +0 -43
  285. package/bundled/skills-windows/prizmkit-test/SKILL.md +0 -227
  286. package/bundled/skills-windows/prizmkit-test/references/boundary-coverage-protocol.md +0 -220
  287. package/bundled/skills-windows/prizmkit-test/references/examples.md +0 -143
  288. package/bundled/skills-windows/prizmkit-test/references/service-boundary-test-catalog.md +0 -225
  289. package/bundled/skills-windows/prizmkit-test/references/test-generation-steps.md +0 -109
  290. package/bundled/skills-windows/prizmkit-test/references/test-report-template.md +0 -111
  291. package/bundled/skills-windows/prizmkit-test/scripts/validate_boundary_report.py +0 -347
  292. package/bundled/skills-windows/recovery-workflow/SKILL.md +0 -355
  293. package/bundled/skills-windows/recovery-workflow/evals/evals.json +0 -46
  294. package/bundled/skills-windows/recovery-workflow/references/detection.md +0 -58
  295. package/bundled/skills-windows/recovery-workflow/scripts/detect-recovery-state.py +0 -544
  296. package/bundled/skills-windows/refactor-pipeline-launcher/SKILL.md +0 -346
  297. package/bundled/skills-windows/refactor-pipeline-launcher/references/configuration.md +0 -72
  298. package/bundled/skills-windows/refactor-planner/SKILL.md +0 -398
  299. package/bundled/skills-windows/refactor-planner/assets/planning-guide.md +0 -292
  300. package/bundled/skills-windows/refactor-planner/references/behavior-preservation.md +0 -301
  301. package/bundled/skills-windows/refactor-planner/references/fast-path.md +0 -59
  302. package/bundled/skills-windows/refactor-planner/references/planning-phases.md +0 -135
  303. package/bundled/skills-windows/refactor-planner/references/refactor-scoping-guide.md +0 -221
  304. package/bundled/skills-windows/refactor-planner/scripts/validate-and-generate-refactor.py +0 -858
  305. package/bundled/skills-windows/refactor-workflow/SKILL.md +0 -343
  306. package/bundled/skills-windows/refactor-workflow/references/brainstorm-guide.md +0 -116
  307. package/bundled/templates/hooks/diff-prizm-docs.sh +0 -158
  308. package/bundled/templates/hooks/prizm-pre-commit.sh +0 -108
  309. package/bundled/templates/hooks/validate-prizm-docs.sh +0 -139
@@ -0,0 +1,373 @@
1
+ """Process and daemon lifecycle primitives."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import signal
7
+ import subprocess
8
+ import sys
9
+ import time
10
+ from collections.abc import Mapping, Sequence
11
+ from dataclasses import dataclass, field
12
+ from pathlib import Path
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class ProcessSpec:
17
+ """Portable process launch specification for runtime porting."""
18
+
19
+ command: tuple[str, ...]
20
+ cwd: Path
21
+ environment_overrides: Mapping[str, str] = field(default_factory=dict)
22
+ environment_unsets: tuple[str, ...] = ()
23
+ stdout_log: Path | None = None
24
+ stderr_log: Path | None = None
25
+ pid_file: Path | None = None
26
+ stdin_text: str | None = None
27
+ start_new_process_group: bool = True
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class ProcessHandle:
32
+ """Observed lifecycle state for a described or launched process."""
33
+
34
+ pid: int | None
35
+ spec: ProcessSpec
36
+ status: str
37
+ return_code: int | None = None
38
+ popen: subprocess.Popen[str] | None = field(default=None, compare=False, repr=False)
39
+
40
+
41
+ @dataclass(frozen=True)
42
+ class ProcessTerminationResult:
43
+ """Best-effort process tree termination result."""
44
+
45
+ pid: int | None
46
+ reason: str
47
+ terminated: bool
48
+ forced: bool
49
+ return_code: int | None
50
+ details: tuple[str, ...] = ()
51
+
52
+
53
+ @dataclass(frozen=True)
54
+ class ProcessRunResult:
55
+ """Completed process execution result."""
56
+
57
+ handle: ProcessHandle
58
+ stdout: str
59
+ stderr: str
60
+ return_code: int | None
61
+ timed_out: bool
62
+ termination: ProcessTerminationResult | None = None
63
+
64
+
65
+ def _creationflags_for_platform(start_new_process_group: bool) -> int:
66
+ if os.name != "nt" or not start_new_process_group:
67
+ return 0
68
+ flags = 0
69
+ flags |= getattr(subprocess, "CREATE_NEW_PROCESS_GROUP", 0)
70
+ return flags
71
+
72
+
73
+ def _preexec_fn_for_platform(start_new_process_group: bool):
74
+ if os.name == "nt" or not start_new_process_group:
75
+ return None
76
+ return os.setsid
77
+
78
+
79
+ def _process_env(overrides: Mapping[str, str], unsets: Sequence[str] = ()) -> dict[str, str]:
80
+ env = dict(os.environ)
81
+ for key in unsets:
82
+ env.pop(str(key), None)
83
+ env.update({str(key): str(value) for key, value in overrides.items()})
84
+ return env
85
+
86
+
87
+ def launch_process(
88
+ spec: ProcessSpec,
89
+ *,
90
+ stdout=subprocess.PIPE,
91
+ stderr=subprocess.PIPE,
92
+ stdin=subprocess.PIPE,
93
+ text: bool = True,
94
+ ) -> ProcessHandle:
95
+ """Launch a child process with POSIX group or Windows process flags."""
96
+ spec.cwd.mkdir(parents=True, exist_ok=True)
97
+ process = subprocess.Popen(
98
+ [str(part) for part in spec.command],
99
+ cwd=spec.cwd,
100
+ env=_process_env(spec.environment_overrides, spec.environment_unsets),
101
+ stdin=stdin,
102
+ stdout=stdout,
103
+ stderr=stderr,
104
+ text=text,
105
+ preexec_fn=_preexec_fn_for_platform(spec.start_new_process_group),
106
+ creationflags=_creationflags_for_platform(spec.start_new_process_group),
107
+ )
108
+ if spec.pid_file is not None:
109
+ spec.pid_file.parent.mkdir(parents=True, exist_ok=True)
110
+ spec.pid_file.write_text(f"{process.pid}\n", encoding="utf-8")
111
+ return ProcessHandle(pid=process.pid, spec=spec, status="running", popen=process)
112
+
113
+
114
+ def is_process_running(handle: ProcessHandle) -> bool:
115
+ """Return true when the process appears alive."""
116
+ if handle.popen is not None:
117
+ return handle.popen.poll() is None
118
+ if handle.pid is None:
119
+ return False
120
+ try:
121
+ os.kill(handle.pid, 0)
122
+ except OSError:
123
+ return False
124
+ return True
125
+
126
+
127
+ def terminate_process_tree(
128
+ handle: ProcessHandle,
129
+ reason: str,
130
+ grace_seconds: float = 10.0,
131
+ ) -> ProcessTerminationResult:
132
+ """Terminate a process tree without relying on shell runtime logic.
133
+
134
+ POSIX uses the process group created at launch. Windows uses taskkill-style
135
+ tree termination when available. Both paths are best effort and safe for
136
+ tests with short-lived fake processes.
137
+ """
138
+ pid = handle.pid
139
+ if pid is None:
140
+ return ProcessTerminationResult(pid=None, reason=reason, terminated=False, forced=False, return_code=None)
141
+
142
+ details: list[str] = []
143
+ forced = False
144
+ process = handle.popen
145
+
146
+ if os.name == "nt":
147
+ completed = subprocess.run(
148
+ ["taskkill", "/PID", str(pid), "/T", "/F"],
149
+ stdout=subprocess.PIPE,
150
+ stderr=subprocess.PIPE,
151
+ text=True,
152
+ check=False,
153
+ )
154
+ details.append(f"taskkill_exit={completed.returncode}")
155
+ forced = True
156
+ else:
157
+ try:
158
+ os.killpg(pid, signal.SIGTERM)
159
+ details.append("sigterm_process_group")
160
+ except ProcessLookupError:
161
+ pass
162
+ except OSError as exc:
163
+ details.append(f"sigterm_group_failed={type(exc).__name__}")
164
+ try:
165
+ os.kill(pid, signal.SIGTERM)
166
+ details.append("sigterm_process")
167
+ except OSError as inner:
168
+ details.append(f"sigterm_process_failed={type(inner).__name__}")
169
+
170
+ deadline = time.monotonic() + max(0.0, grace_seconds)
171
+ while process is not None and process.poll() is None and time.monotonic() < deadline:
172
+ time.sleep(0.05)
173
+ if process is not None and process.poll() is None:
174
+ forced = True
175
+ try:
176
+ os.killpg(pid, signal.SIGKILL)
177
+ details.append("sigkill_process_group")
178
+ except ProcessLookupError:
179
+ pass
180
+ except OSError as exc:
181
+ details.append(f"sigkill_group_failed={type(exc).__name__}")
182
+ try:
183
+ os.kill(pid, signal.SIGKILL)
184
+ details.append("sigkill_process")
185
+ except OSError as inner:
186
+ details.append(f"sigkill_process_failed={type(inner).__name__}")
187
+
188
+ return_code = None
189
+ if process is not None:
190
+ try:
191
+ return_code = process.wait(timeout=max(0.1, grace_seconds))
192
+ except subprocess.TimeoutExpired:
193
+ return_code = process.poll()
194
+ return ProcessTerminationResult(
195
+ pid=pid,
196
+ reason=reason,
197
+ terminated=True,
198
+ forced=forced,
199
+ return_code=return_code,
200
+ details=tuple(details),
201
+ )
202
+
203
+
204
+ def is_pid_running(pid: int | None) -> bool:
205
+ """Return true when a PID appears alive."""
206
+ if pid is None or pid <= 0:
207
+ return False
208
+ try:
209
+ os.kill(pid, 0)
210
+ except ProcessLookupError:
211
+ return False
212
+ except PermissionError:
213
+ return True
214
+ except OSError:
215
+ return False
216
+ if os.name != "nt":
217
+ try:
218
+ waited_pid, _status = os.waitpid(pid, os.WNOHANG)
219
+ except ChildProcessError:
220
+ return True
221
+ except OSError:
222
+ return True
223
+ if waited_pid == pid:
224
+ return False
225
+ return True
226
+
227
+
228
+ def terminate_pid_tree(
229
+ pid: int | None,
230
+ reason: str,
231
+ grace_seconds: float = 10.0,
232
+ ) -> ProcessTerminationResult:
233
+ """Terminate a PID-backed process tree without requiring a live Popen.
234
+
235
+ Daemon stop commands reconstruct process state from a PID file, so the
236
+ original ``subprocess.Popen`` object is not available. POSIX daemons are
237
+ launched in a process group whose id is the daemon PID; Windows uses the
238
+ same taskkill-style tree termination strategy as ``terminate_process_tree``.
239
+ """
240
+ if pid is None or pid <= 0:
241
+ return ProcessTerminationResult(pid=pid, reason=reason, terminated=False, forced=False, return_code=None)
242
+
243
+ details: list[str] = []
244
+ forced = False
245
+ if not is_pid_running(pid):
246
+ return ProcessTerminationResult(pid=pid, reason=reason, terminated=False, forced=False, return_code=None, details=("not_running",))
247
+
248
+ if os.name == "nt":
249
+ completed = subprocess.run(
250
+ ["taskkill", "/PID", str(pid), "/T", "/F"],
251
+ stdout=subprocess.PIPE,
252
+ stderr=subprocess.PIPE,
253
+ text=True,
254
+ check=False,
255
+ )
256
+ details.append(f"taskkill_exit={completed.returncode}")
257
+ return ProcessTerminationResult(
258
+ pid=pid,
259
+ reason=reason,
260
+ terminated=completed.returncode == 0,
261
+ forced=True,
262
+ return_code=None,
263
+ details=tuple(details),
264
+ )
265
+
266
+ try:
267
+ os.killpg(pid, signal.SIGTERM)
268
+ details.append("sigterm_process_group")
269
+ except ProcessLookupError:
270
+ pass
271
+ except OSError as exc:
272
+ details.append(f"sigterm_group_failed={type(exc).__name__}")
273
+ try:
274
+ os.kill(pid, signal.SIGTERM)
275
+ details.append("sigterm_process")
276
+ except OSError as inner:
277
+ details.append(f"sigterm_process_failed={type(inner).__name__}")
278
+
279
+ deadline = time.monotonic() + max(0.0, grace_seconds)
280
+ while is_pid_running(pid) and time.monotonic() < deadline:
281
+ time.sleep(0.05)
282
+
283
+ if is_pid_running(pid):
284
+ forced = True
285
+ try:
286
+ os.killpg(pid, signal.SIGKILL)
287
+ details.append("sigkill_process_group")
288
+ except ProcessLookupError:
289
+ pass
290
+ except OSError as exc:
291
+ details.append(f"sigkill_group_failed={type(exc).__name__}")
292
+ try:
293
+ os.kill(pid, signal.SIGKILL)
294
+ details.append("sigkill_process")
295
+ except OSError as inner:
296
+ details.append(f"sigkill_process_failed={type(inner).__name__}")
297
+
298
+ deadline = time.monotonic() + max(0.0, min(grace_seconds, 2.0))
299
+ while is_pid_running(pid) and time.monotonic() < deadline:
300
+ time.sleep(0.05)
301
+
302
+ return ProcessTerminationResult(
303
+ pid=pid,
304
+ reason=reason,
305
+ terminated=not is_pid_running(pid),
306
+ forced=forced,
307
+ return_code=None,
308
+ details=tuple(details),
309
+ )
310
+
311
+
312
+
313
+ def run_process_with_capture(
314
+ spec: ProcessSpec,
315
+ *,
316
+ timeout_seconds: float | None = None,
317
+ grace_seconds: float = 10.0,
318
+ ) -> ProcessRunResult:
319
+ """Run a process to completion and terminate on total timeout."""
320
+ handle = launch_process(spec)
321
+ assert handle.popen is not None
322
+ try:
323
+ stdout, stderr = handle.popen.communicate(input=spec.stdin_text, timeout=timeout_seconds)
324
+ return ProcessRunResult(
325
+ handle=ProcessHandle(
326
+ pid=handle.pid,
327
+ spec=spec,
328
+ status="completed",
329
+ return_code=handle.popen.returncode,
330
+ popen=handle.popen,
331
+ ),
332
+ stdout=stdout or "",
333
+ stderr=stderr or "",
334
+ return_code=handle.popen.returncode,
335
+ timed_out=False,
336
+ )
337
+ except subprocess.TimeoutExpired:
338
+ termination = terminate_process_tree(handle, "timeout", grace_seconds=grace_seconds)
339
+ stdout = ""
340
+ stderr = ""
341
+ if handle.popen is not None:
342
+ try:
343
+ captured = handle.popen.communicate(timeout=1)
344
+ stdout = captured[0] or ""
345
+ stderr = captured[1] or ""
346
+ except subprocess.TimeoutExpired:
347
+ pass
348
+ return ProcessRunResult(
349
+ handle=ProcessHandle(
350
+ pid=handle.pid,
351
+ spec=spec,
352
+ status="timeout",
353
+ return_code=termination.return_code,
354
+ popen=handle.popen,
355
+ ),
356
+ stdout=stdout,
357
+ stderr=stderr,
358
+ return_code=termination.return_code,
359
+ timed_out=True,
360
+ termination=termination,
361
+ )
362
+
363
+
364
+ def platform_termination_strategy() -> tuple[str, ...]:
365
+ """Expose the structural termination strategy for tests/diagnostics."""
366
+ if os.name == "nt":
367
+ return ("CREATE_NEW_PROCESS_GROUP", "taskkill /PID <pid> /T /F")
368
+ return ("setsid", "killpg(SIGTERM)", "killpg(SIGKILL)")
369
+
370
+
371
+ def describe_command(command: Sequence[str]) -> str:
372
+ """Return a deterministic command description for tests."""
373
+ return " ".join(str(part) for part in command)