claude-dev-env 4.3.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.agents/agents/pr-description-writer.md +2 -2
  2. package/.agents/agents/test_agent_frontmatter.py +2 -2
  3. package/.agents/agents/test_pr_description_writer_style.py +1 -3
  4. package/.agents/skills/e-code-review/SKILL.md +12 -12
  5. package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +20 -0
  6. package/.agents/skills/e-code-review/reference/fix.md +15 -17
  7. package/.agents/skills/e-code-review/reference/loop.md +35 -39
  8. package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +2 -1
  9. package/.agents/skills/e-code-review/reference/preflight-proposal.md +44 -9
  10. package/.agents/skills/e-code-review/reference/runner-selection.md +13 -14
  11. package/.agents/skills/issue-tracker/SKILL.md +5 -4
  12. package/.agents/skills/pull-request/SKILL.md +11 -13
  13. package/.agents/skills/pull-request/reference/publication-tasks.md +3 -3
  14. package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/constants.py +9 -1
  15. package/.agents/skills/pull-request/scripts/pull_request.py +33 -44
  16. package/.agents/skills/pull-request/scripts/test_github_pr_command_constants.py +9 -0
  17. package/.agents/skills/pull-request/scripts/test_pull_request.py +1 -3
  18. package/.agents/skills/skill-builder/SKILL.md +3 -196
  19. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +6 -0
  20. package/_shared/pr-loop/scripts/terminology_sweep.py +64 -19
  21. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +59 -0
  22. package/bin/install.agents-home.test.mjs +15 -13
  23. package/bin/install.mjs +28 -0
  24. package/bin/install.policy-lint.test.mjs +78 -0
  25. package/bin/install.prune.test.mjs +59 -20
  26. package/bin/install.pstack-plugin.test.mjs +114 -0
  27. package/bin/install.test.mjs +37 -0
  28. package/bin/refresh-pstack-plugin-skills.test.mjs +211 -0
  29. package/hooks/advisory/pr_done_reminder.py +342 -0
  30. package/hooks/advisory/test_pr_done_reminder.py +249 -0
  31. package/hooks/blocking/bash_post_call_dispatcher.py +53 -6
  32. package/hooks/blocking/code_rules_paired_test.py +22 -15
  33. package/hooks/blocking/test_bash_post_call_dispatcher.py +65 -4
  34. package/hooks/blocking/test_code_rules_enforcer_paired_test.py +36 -29
  35. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +4 -4
  36. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +5 -5
  37. package/hooks/blocking/test_pre_tool_use_dispatcher.py +68 -133
  38. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +20 -51
  39. package/hooks/blocking/test_precommit_code_rules_gate_native_owner.py +18 -18
  40. package/hooks/git-hooks/git_hooks_constants/staged_policy_lint.py +12 -0
  41. package/hooks/git-hooks/pre_commit.py +52 -11
  42. package/hooks/git-hooks/test_installed_policy_lint.py +159 -0
  43. package/hooks/git-hooks/test_native_policy_commit.py +87 -0
  44. package/hooks/git-hooks/test_pre_commit.py +246 -0
  45. package/hooks/hooks.json +1 -1
  46. package/hooks/hooks_constants/bash_post_call_dispatcher_constants.py +14 -1
  47. package/hooks/hooks_constants/pr_done_reminder_constants.py +98 -0
  48. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +10 -43
  49. package/hooks/hooks_constants/test_bash_post_call_dispatcher_constants.py +19 -2
  50. package/hooks/hooks_constants/test_pr_done_reminder_constants.py +40 -0
  51. package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +20 -32
  52. package/package.json +2 -2
  53. package/rules/durable-post-artifacts.md +2 -1
  54. package/rules/git-workflow.md +6 -6
  55. package/scripts/check.ps1 +0 -1
  56. package/{.agents/skills/run-claude-dev-env/driver.mjs → scripts/ci/installer-lifecycle.mjs} +3 -28
  57. package/scripts/ci/installer-lifecycle.test.mjs +26 -0
  58. package/scripts/ci/windows-installer-lifecycle.ps1 +1 -11
  59. package/scripts/dev_env_scripts_constants/shared_tree_constants.py +4 -5
  60. package/{.agents/skills/_shared/pr-loop/scripts → scripts}/durable_post_lint.py +5 -41
  61. package/{.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/durable_post_lint_constants.py → scripts/durable_post_lint_config/config/constants.py} +0 -10
  62. package/{.agents/skills/_shared/pr-loop/scripts/test_durable_post_lint_constants.py → scripts/durable_post_lint_config/config/test_constants.py} +1 -1
  63. package/scripts/policy_lint/adapter_detectors.py +13 -6
  64. package/scripts/policy_lint/adapters.py +7 -4
  65. package/scripts/policy_lint/config/constants.py +5 -0
  66. package/scripts/policy_lint/engine.py +48 -4
  67. package/scripts/policy_lint/model.py +1 -0
  68. package/scripts/policy_lint/registry.py +1 -1
  69. package/scripts/policy_lint/selection.py +2 -1
  70. package/scripts/policy_lint/selection_git.py +2 -0
  71. package/scripts/refresh_pstack_plugin_skills.mjs +200 -0
  72. package/scripts/shared_tree_paths.py +32 -3
  73. package/scripts/test_shared_tree_paths.py +33 -0
  74. package/scripts/tests/test_policy_lint_rules_archive.py +120 -0
  75. package/scripts/tests/test_policy_lint_rules_engine.py +25 -4
  76. package/scripts/tests/test_policy_lint_rules_installed_loader.py +29 -0
  77. package/scripts/tests/test_policy_lint_rules_registry.py +227 -13
  78. package/scripts/tests/test_policy_lint_selection.py +25 -2
  79. package/scripts/tests/test_policy_lint_selection_native_index.py +30 -0
  80. package/scripts/tests/test_rules.py +3 -7
  81. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +0 -1
  82. package/.agents/skills/_shared/pr-loop/AGENTS.md +0 -1
  83. package/.agents/skills/_shared/pr-loop/audit-contract.md +0 -5
  84. package/.agents/skills/_shared/pr-loop/audit-reply-template.md +0 -5
  85. package/.agents/skills/_shared/pr-loop/code-rules-gate.md +0 -5
  86. package/.agents/skills/_shared/pr-loop/fix-protocol.md +0 -5
  87. package/.agents/skills/_shared/pr-loop/gh-payloads.md +0 -5
  88. package/.agents/skills/_shared/pr-loop/portable-driver.md +0 -149
  89. package/.agents/skills/_shared/pr-loop/post-audit-thread-contract.md +0 -5
  90. package/.agents/skills/_shared/pr-loop/precatch-rubric.md +0 -5
  91. package/.agents/skills/_shared/pr-loop/preflight-proposal.contract.test.mjs +0 -119
  92. package/.agents/skills/_shared/pr-loop/preflight-proposal.md +0 -5
  93. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +0 -1
  94. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +0 -1
  95. package/.agents/skills/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -324
  96. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +0 -1
  97. package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +0 -1
  98. package/.agents/skills/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -29
  99. package/.agents/skills/_shared/pr-loop/scripts/_cli_utils.py +0 -22
  100. package/.agents/skills/_shared/pr-loop/scripts/_path_resolver.py +0 -186
  101. package/.agents/skills/_shared/pr-loop/scripts/_xml_utils.py +0 -20
  102. package/.agents/skills/_shared/pr-loop/scripts/audit_category_schema.py +0 -355
  103. package/.agents/skills/_shared/pr-loop/scripts/build_audit_prompt.py +0 -289
  104. package/.agents/skills/_shared/pr-loop/scripts/build_converge_task_list.py +0 -310
  105. package/.agents/skills/_shared/pr-loop/scripts/build_fix_prompt.py +0 -292
  106. package/.agents/skills/_shared/pr-loop/scripts/init_loop_state.py +0 -134
  107. package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +0 -1646
  108. package/.agents/skills/_shared/pr-loop/scripts/preflight_worktree.py +0 -392
  109. package/.agents/skills/_shared/pr-loop/scripts/select_converge_pacer.py +0 -215
  110. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +0 -1
  111. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -1
  112. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
  113. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +0 -37
  114. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -56
  115. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -45
  116. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -47
  117. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -157
  118. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -177
  119. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -70
  120. package/.agents/skills/_shared/pr-loop/scripts/teardown_worktrees.py +0 -172
  121. package/.agents/skills/_shared/pr-loop/scripts/test__path_resolver.py +0 -106
  122. package/.agents/skills/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -94
  123. package/.agents/skills/_shared/pr-loop/scripts/test_build_audit_prompt.py +0 -499
  124. package/.agents/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -140
  125. package/.agents/skills/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -262
  126. package/.agents/skills/_shared/pr-loop/scripts/test_init_loop_state.py +0 -71
  127. package/.agents/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -1119
  128. package/.agents/skills/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -287
  129. package/.agents/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -207
  130. package/.agents/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -59
  131. package/.agents/skills/_shared/pr-loop/scripts/test_write_handoff.py +0 -201
  132. package/.agents/skills/_shared/pr-loop/scripts/write_audit_outcomes.py +0 -182
  133. package/.agents/skills/_shared/pr-loop/scripts/write_fix_outcomes.py +0 -206
  134. package/.agents/skills/_shared/pr-loop/scripts/write_handoff.py +0 -309
  135. package/.agents/skills/_shared/pr-loop/state-schema.md +0 -5
  136. package/.agents/skills/_shared/pr-loop/worker-spawn.md +0 -5
  137. package/.agents/skills/autoconverge/.claude/CLAUDE.md +0 -1
  138. package/.agents/skills/autoconverge/AGENTS.md +0 -1
  139. package/.agents/skills/autoconverge/SKILL.md +0 -431
  140. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +0 -1
  141. package/.agents/skills/autoconverge/reference/AGENTS.md +0 -1
  142. package/.agents/skills/autoconverge/reference/closing-report.md +0 -93
  143. package/.agents/skills/autoconverge/reference/convergence-gates.md +0 -31
  144. package/.agents/skills/autoconverge/reference/convergence.md +0 -219
  145. package/.agents/skills/autoconverge/reference/copilot-findings.md +0 -51
  146. package/.agents/skills/autoconverge/reference/gotchas.md +0 -66
  147. package/.agents/skills/autoconverge/reference/headless-safety.md +0 -44
  148. package/.agents/skills/autoconverge/reference/multi-pr.md +0 -128
  149. package/.agents/skills/autoconverge/reference/self-closing-loop.md +0 -84
  150. package/.agents/skills/autoconverge/reference/stop-conditions.md +0 -127
  151. package/.agents/skills/autoconverge/test_portable_pacer_gate.py +0 -54
  152. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +0 -1
  153. package/.agents/skills/autoconverge/workflow/AGENTS.md +0 -1
  154. package/.agents/skills/autoconverge/workflow/aggregate_runs.py +0 -371
  155. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +0 -1
  156. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -1
  157. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
  158. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -250
  159. package/.agents/skills/autoconverge/workflow/converge.clean-audit.test.mjs +0 -665
  160. package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +0 -472
  161. package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +0 -64
  162. package/.agents/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -1009
  163. package/.agents/skills/autoconverge/workflow/converge.fix-progress.test.mjs +0 -107
  164. package/.agents/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -33
  165. package/.agents/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -15
  166. package/.agents/skills/autoconverge/workflow/converge.mjs +0 -3132
  167. package/.agents/skills/autoconverge/workflow/converge.p2-advance.test.mjs +0 -202
  168. package/.agents/skills/autoconverge/workflow/converge.path-aware.test.mjs +0 -47
  169. package/.agents/skills/autoconverge/workflow/converge.precatch.test.mjs +0 -152
  170. package/.agents/skills/autoconverge/workflow/converge.run-input.test.mjs +0 -116
  171. package/.agents/skills/autoconverge/workflow/converge_multi.mjs +0 -169
  172. package/.agents/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -173
  173. package/.agents/skills/autoconverge/workflow/convergence_summary.py +0 -110
  174. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -2
  175. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -2
  176. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -2
  177. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -2
  178. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -2
  179. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -2
  180. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -2
  181. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -2
  182. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -2
  183. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -266
  184. package/.agents/skills/autoconverge/workflow/render_report.py +0 -1024
  185. package/.agents/skills/autoconverge/workflow/test_aggregate_runs.py +0 -134
  186. package/.agents/skills/autoconverge/workflow/test_convergence_summary.py +0 -149
  187. package/.agents/skills/autoconverge/workflow/test_render_report.py +0 -812
  188. package/.agents/skills/hitl/SKILL.md +0 -45
  189. package/.agents/skills/pr-cleanup/SKILL.md +0 -140
  190. package/.agents/skills/pr-cleanup/reference/process-inventory.md +0 -17
  191. package/.agents/skills/pr-cleanup/reference/task-seeds.md +0 -22
  192. package/.agents/skills/pr-name-by-capability/SKILL.md +0 -73
  193. package/.agents/skills/pr-name-by-capability/reference/fetch-commands.md +0 -29
  194. package/.agents/skills/pr-name-by-capability/reference/offense-examples.md +0 -32
  195. package/.agents/skills/pr-name-by-capability/reference/report-template.md +0 -29
  196. package/.agents/skills/pr-name-by-capability/reference/rule-checklist.md +0 -38
  197. package/.agents/skills/pr-name-by-capability/reference/task-seeds.md +0 -10
  198. package/.agents/skills/pr-plain-language-cleanup/SKILL.md +0 -93
  199. package/.agents/skills/pr-refinement/SKILL.md +0 -31
  200. package/.agents/skills/pr-shared-extraction/SKILL.md +0 -177
  201. package/.agents/skills/pr-shared-extraction/reference/examples.md +0 -46
  202. package/.agents/skills/pr-shared-extraction/reference/offense-taxonomy.md +0 -100
  203. package/.agents/skills/pr-small-cl/SKILL.md +0 -52
  204. package/.agents/skills/pr-title-description/SKILL.md +0 -96
  205. package/.agents/skills/prototype/SKILL.md +0 -85
  206. package/.agents/skills/prototype/reference/honest-limitations.md +0 -23
  207. package/.agents/skills/prototype/reference/promotion-tasks.md +0 -23
  208. package/.agents/skills/prototype/scripts/build_sandbox_settings.py +0 -249
  209. package/.agents/skills/prototype/scripts/conftest.py +0 -15
  210. package/.agents/skills/prototype/scripts/launch_sandbox.py +0 -205
  211. package/.agents/skills/prototype/scripts/probe_sandbox_safety.py +0 -311
  212. package/.agents/skills/prototype/scripts/prototype_scripts_constants/__init__.py +0 -1
  213. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  214. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -41
  215. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -23
  216. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -45
  217. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -10
  218. package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +0 -275
  219. package/.agents/skills/prototype/scripts/test_launch_sandbox.py +0 -303
  220. package/.agents/skills/prototype/scripts/test_probe_sandbox_safety.py +0 -312
  221. package/.agents/skills/prototype/workflows/promotion.md +0 -25
  222. package/.agents/skills/prototype/workflows/sandbox.md +0 -35
  223. package/.agents/skills/rebase/.claude/CLAUDE.md +0 -1
  224. package/.agents/skills/rebase/AGENTS.md +0 -1
  225. package/.agents/skills/rebase/SKILL.md +0 -178
  226. package/.agents/skills/review-router/SKILL.md +0 -51
  227. package/.agents/skills/review-router/reference/route-policy.json +0 -7
  228. package/.agents/skills/review-router/reference/task-seeds.md +0 -1
  229. package/.agents/skills/review-router/scripts/conftest.py +0 -4
  230. package/.agents/skills/review-router/scripts/review_router.py +0 -50
  231. package/.agents/skills/review-router/scripts/review_router_cli.py +0 -211
  232. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +0 -1
  233. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  234. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +0 -13
  235. package/.agents/skills/review-router/scripts/test_review_router.py +0 -23
  236. package/.agents/skills/review-router/scripts/test_review_router_cli.py +0 -47
  237. package/.agents/skills/review-tier/SKILL.md +0 -56
  238. package/.agents/skills/review-tier/reference/task-seeds.md +0 -1
  239. package/.agents/skills/review-tier/reference/tier-policy.json +0 -9
  240. package/.agents/skills/review-tier/scripts/conftest.py +0 -4
  241. package/.agents/skills/review-tier/scripts/review_tier.py +0 -359
  242. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +0 -1
  243. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  244. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +0 -29
  245. package/.agents/skills/review-tier/scripts/test_generation.py +0 -159
  246. package/.agents/skills/review-tier/scripts/test_review_tier.py +0 -33
  247. package/.agents/skills/run-claude-dev-env/SKILL.md +0 -84
  248. package/.agents/skills/session-log/.claude/CLAUDE.md +0 -1
  249. package/.agents/skills/session-log/AGENTS.md +0 -1
  250. package/.agents/skills/session-log/SKILL.md +0 -170
  251. package/.agents/skills/session-log/templates/frontmatter.md +0 -40
  252. package/.agents/skills/session-tidy/.claude/CLAUDE.md +0 -1
  253. package/.agents/skills/session-tidy/AGENTS.md +0 -1
  254. package/.agents/skills/session-tidy/SKILL.md +0 -191
  255. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +0 -1
  256. package/.agents/skills/skill-builder/references/AGENTS.md +0 -1
  257. package/.agents/skills/skill-builder/references/delegation-map.md +0 -130
  258. package/.agents/skills/skill-builder/references/description-field.md +0 -111
  259. package/.agents/skills/skill-builder/references/deterministic-elements.md +0 -218
  260. package/.agents/skills/skill-builder/references/progressive-disclosure.md +0 -122
  261. package/.agents/skills/skill-builder/references/self-audit-checklist.md +0 -126
  262. package/.agents/skills/skill-builder/references/skill-modularity.md +0 -111
  263. package/.agents/skills/skill-builder/references/skill-types.md +0 -232
  264. package/.agents/skills/skill-builder/references/thariq-x-post-skills.json +0 -33
  265. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +0 -1
  266. package/.agents/skills/skill-builder/templates/AGENTS.md +0 -1
  267. package/.agents/skills/skill-builder/templates/gap-analysis.md +0 -87
  268. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +0 -1
  269. package/.agents/skills/skill-builder/workflows/AGENTS.md +0 -1
  270. package/.agents/skills/skill-builder/workflows/improve-skill.md +0 -136
  271. package/.agents/skills/skill-builder/workflows/new-skill.md +0 -179
  272. package/.agents/skills/skill-builder/workflows/polish-skill.md +0 -139
  273. package/.agents/skills/source-command-sr-loop/SKILL.md +0 -82
  274. package/.agents/skills/update/.claude/CLAUDE.md +0 -1
  275. package/.agents/skills/update/AGENTS.md +0 -1
  276. package/.agents/skills/update/SKILL.md +0 -190
  277. package/_shared/pr-loop/AGENTS.md +0 -1
  278. package/_shared/pr-loop/CLAUDE.md +0 -1
  279. package/_shared/pr-loop/audit-contract.md +0 -183
  280. package/_shared/pr-loop/audit-reply-template.md +0 -151
  281. package/_shared/pr-loop/code-rules-gate.md +0 -65
  282. package/_shared/pr-loop/fix-protocol.md +0 -60
  283. package/_shared/pr-loop/gh-payloads.md +0 -75
  284. package/_shared/pr-loop/post-audit-thread-contract.md +0 -51
  285. package/_shared/pr-loop/precatch-rubric.md +0 -66
  286. package/_shared/pr-loop/preflight-proposal.md +0 -56
  287. package/_shared/pr-loop/scripts/post_audit_thread.py +0 -1242
  288. package/_shared/pr-loop/scripts/pr_loop_shared_constants/post_audit_thread_constants.py +0 -199
  289. package/_shared/pr-loop/scripts/tests/test_post_audit_thread.py +0 -1115
  290. package/_shared/pr-loop/scripts/tests/test_post_audit_thread_constants.py +0 -129
  291. package/_shared/pr-loop/state-schema.md +0 -45
  292. package/_shared/pr-loop/worker-spawn.md +0 -189
  293. /package/{.agents/skills/_shared/pr-loop/scripts → scripts}/test_durable_post_lint.py +0 -0
@@ -1,289 +0,0 @@
1
- """Emit the complete AUDIT spawn prompt XML to stdout.
2
-
3
- Builds <context> and <scope> from CLI args; <bug_categories>,
4
- <rubric_reference>, and <constraints> come from the shared constants in
5
- skills_pr_loop_constants; <comment_posting> and <output_format> follow
6
- ``--flavor`` (agent or headless). <pr_description> carries the PR body
7
- text read from --pr-body-file, and stays empty when that argument is
8
- absent or the file cannot be read.
9
-
10
- Usage:
11
- python scripts/build_audit_prompt.py --owner jl-cmd --repo claude-dev-env --pr-number 422 --loop 1 --head-ref feat/branch --base-ref main --worktree-path <PATH> --run-temp-dir <PATH> [--flavor agent|headless]
12
- """
13
-
14
- from __future__ import annotations
15
-
16
- import argparse
17
- import sys
18
- from xml.etree.ElementTree import Element, SubElement
19
- from pathlib import Path
20
-
21
- _self_dir = Path(__file__).resolve().parent
22
- if str(_self_dir) not in sys.path:
23
- sys.path.insert(0, str(_self_dir))
24
-
25
- from _path_resolver import outcome_xml_path
26
- from _xml_utils import emit_pretty_xml
27
- from skills_pr_loop_constants.path_resolver_constants import (
28
- ALL_AUDIT_CATEGORY_ENTRIES,
29
- ALL_AUDIT_CONSTRAINT_TEXTS,
30
- ALL_AUDIT_PROMPT_FLAVORS,
31
- AUDIT_COMMENT_POSTING_AGENT_TEXT,
32
- AUDIT_COMMENT_POSTING_HEADLESS_TEXT,
33
- AUDIT_OUTPUT_FORMAT_AGENT_TEXT,
34
- AUDIT_OUTPUT_FORMAT_HEADLESS_TEMPLATE,
35
- AUDIT_PROMPT_FLAVOR_AGENT,
36
- AUDIT_PROMPT_FLAVOR_HEADLESS,
37
- AUDIT_RUBRIC_REFERENCE_TEXT,
38
- )
39
-
40
-
41
- def read_pr_body_text(pr_body_file: Path | None) -> str | None:
42
- """Read the PR description body from a file when given and readable.
43
-
44
- Args:
45
- pr_body_file: Path to a file holding the PR description body, or None.
46
-
47
- Returns:
48
- The file's text when the path is given and readable, otherwise None.
49
- """
50
- if pr_body_file is None:
51
- return None
52
- try:
53
- return pr_body_file.read_text(encoding="utf-8")
54
- except OSError:
55
- return None
56
-
57
-
58
- def _append_pr_description(root: Element, pr_body_text: str | None) -> None:
59
- """Append a <pr_description> element carrying the PR body text.
60
-
61
- Args:
62
- root: Root element the <pr_description> child is appended to.
63
- pr_body_text: PR description body text, or None when unavailable.
64
-
65
- Returns:
66
- None.
67
- """
68
- pr_description = SubElement(root, "pr_description")
69
- if pr_body_text:
70
- pr_description.text = pr_body_text
71
-
72
-
73
- def _comment_posting_text(flavor: str) -> str:
74
- """Return the <comment_posting> body for the given prompt flavor.
75
-
76
- Args:
77
- flavor: ``agent`` or ``headless`` prompt flavor.
78
-
79
- Returns:
80
- Comment-posting instruction text for that flavor.
81
- """
82
- if flavor == AUDIT_PROMPT_FLAVOR_HEADLESS:
83
- return AUDIT_COMMENT_POSTING_HEADLESS_TEXT
84
- return AUDIT_COMMENT_POSTING_AGENT_TEXT
85
-
86
-
87
- def _format_instruction_text(
88
- *,
89
- flavor: str,
90
- worktree_path: Path,
91
- pr_number: int,
92
- loop: int,
93
- ) -> str:
94
- """Return the <output_format> body for the given prompt flavor.
95
-
96
- Args:
97
- flavor: ``agent`` or ``headless`` prompt flavor.
98
- worktree_path: Path to the git worktree.
99
- pr_number: Pull request number.
100
- loop: Loop iteration number.
101
-
102
- Returns:
103
- Format-instruction text for that flavor.
104
- """
105
- if flavor == AUDIT_PROMPT_FLAVOR_HEADLESS:
106
- outcome_path = outcome_xml_path(worktree_path, pr_number, loop)
107
- return AUDIT_OUTPUT_FORMAT_HEADLESS_TEMPLATE.format(
108
- outcome_path=outcome_path.as_posix(),
109
- )
110
- return AUDIT_OUTPUT_FORMAT_AGENT_TEXT
111
-
112
-
113
- def build_audit_prompt_xml(
114
- *,
115
- owner: str,
116
- repo: str,
117
- pr_number: int,
118
- loop: int,
119
- head_ref: str,
120
- base_ref: str,
121
- worktree_path: Path,
122
- run_temp_dir: Path,
123
- pr_body_text: str | None = None,
124
- flavor: str = AUDIT_PROMPT_FLAVOR_AGENT,
125
- ) -> Element:
126
- """Build the complete AUDIT spawn prompt XML.
127
-
128
- Args:
129
- owner: GitHub repository owner.
130
- repo: GitHub repository name.
131
- pr_number: Pull request number.
132
- loop: Loop iteration number.
133
- head_ref: Head branch ref.
134
- base_ref: Base branch ref.
135
- worktree_path: Path to the git worktree.
136
- run_temp_dir: Path to the run temp directory.
137
- pr_body_text: PR description body text, or None when unavailable.
138
- flavor: Prompt flavor — ``agent`` (MCP posting) or ``headless``
139
- (outcome file, lead-owned posting).
140
-
141
- Returns:
142
- Root <spawn_prompt> element.
143
- """
144
- root = Element("spawn_prompt", {"role": "audit", "loop": str(loop)})
145
-
146
- context = SubElement(root, "context")
147
- SubElement(context, "owner").text = owner
148
- SubElement(context, "repo").text = repo
149
- SubElement(context, "pr_number").text = str(pr_number)
150
- SubElement(context, "head_ref").text = head_ref
151
- SubElement(context, "base_ref").text = base_ref
152
- SubElement(context, "worktree_path").text = worktree_path.as_posix()
153
- SubElement(context, "run_temp_dir").text = run_temp_dir.as_posix()
154
-
155
- scope = SubElement(root, "scope")
156
- scope.text = (
157
- f"Audit the full diff of {owner}/{repo}#{pr_number} "
158
- f"({head_ref} against {base_ref}) for CODE_RULES violations, "
159
- f"bugs, and anti-patterns. Work in {worktree_path.as_posix()}."
160
- )
161
-
162
- _append_pr_description(root, pr_body_text)
163
-
164
- bug_categories = SubElement(root, "bug_categories")
165
- for each_category_id, each_category_label in ALL_AUDIT_CATEGORY_ENTRIES:
166
- cat_elem = SubElement(bug_categories, "category", {"id": each_category_id})
167
- cat_elem.text = each_category_label
168
-
169
- rubric_reference = SubElement(root, "rubric_reference")
170
- rubric_reference.text = AUDIT_RUBRIC_REFERENCE_TEXT
171
-
172
- constraints = SubElement(root, "constraints")
173
- for each_constraint in ALL_AUDIT_CONSTRAINT_TEXTS:
174
- SubElement(constraints, "constraint").text = each_constraint
175
-
176
- comment_posting = SubElement(root, "comment_posting")
177
- comment_posting.text = _comment_posting_text(flavor)
178
-
179
- format_section = SubElement(root, "output_format")
180
- format_section.text = _format_instruction_text(
181
- flavor=flavor,
182
- worktree_path=worktree_path,
183
- pr_number=pr_number,
184
- loop=loop,
185
- )
186
-
187
- return root
188
-
189
-
190
- def emit_audit_prompt(
191
- *,
192
- owner: str,
193
- repo: str,
194
- pr_number: int,
195
- loop: int,
196
- head_ref: str,
197
- base_ref: str,
198
- worktree_path: Path,
199
- run_temp_dir: Path,
200
- pr_body_text: str | None = None,
201
- flavor: str = AUDIT_PROMPT_FLAVOR_AGENT,
202
- ) -> str:
203
- """Build and serialize the AUDIT spawn prompt to a pretty-printed XML string.
204
-
205
- Args:
206
- owner: GitHub repository owner.
207
- repo: GitHub repository name.
208
- pr_number: Pull request number.
209
- loop: Loop iteration number.
210
- head_ref: Head branch ref.
211
- base_ref: Base branch ref.
212
- worktree_path: Path to the git worktree.
213
- run_temp_dir: Path to the run temp directory.
214
- pr_body_text: PR description body text, or None when unavailable.
215
- flavor: Prompt flavor — ``agent`` or ``headless``.
216
-
217
- Returns:
218
- Pretty-printed XML string.
219
- """
220
- root = build_audit_prompt_xml(
221
- owner=owner,
222
- repo=repo,
223
- pr_number=pr_number,
224
- loop=loop,
225
- head_ref=head_ref,
226
- base_ref=base_ref,
227
- worktree_path=worktree_path,
228
- run_temp_dir=run_temp_dir,
229
- pr_body_text=pr_body_text,
230
- flavor=flavor,
231
- )
232
- return emit_pretty_xml(root)
233
-
234
-
235
- def parse_arguments(all_argv: list[str]) -> argparse.Namespace:
236
- """Parse command-line arguments.
237
-
238
- Args:
239
- all_argv: Command-line argument list.
240
-
241
- Returns:
242
- Parsed namespace with all required audit prompt parameters.
243
- """
244
- parser = argparse.ArgumentParser(description=__doc__)
245
- parser.add_argument("--owner", required=True)
246
- parser.add_argument("--repo", required=True)
247
- parser.add_argument("--pr-number", type=int, required=True)
248
- parser.add_argument("--loop", type=int, required=True)
249
- parser.add_argument("--head-ref", required=True)
250
- parser.add_argument("--base-ref", required=True)
251
- parser.add_argument("--worktree-path", type=Path, required=True)
252
- parser.add_argument("--run-temp-dir", type=Path, required=True)
253
- parser.add_argument("--pr-body-file", type=Path, default=None)
254
- parser.add_argument(
255
- "--flavor",
256
- choices=sorted(ALL_AUDIT_PROMPT_FLAVORS),
257
- default=AUDIT_PROMPT_FLAVOR_AGENT,
258
- )
259
- return parser.parse_args(all_argv)
260
-
261
-
262
- def main(all_arguments: list[str]) -> int:
263
- """Entry point: emit AUDIT spawn prompt XML to stdout.
264
-
265
- Args:
266
- all_arguments: Command-line arguments.
267
-
268
- Returns:
269
- 0 on success.
270
- """
271
- arguments = parse_arguments(all_arguments)
272
- xml_output = emit_audit_prompt(
273
- owner=arguments.owner,
274
- repo=arguments.repo,
275
- pr_number=arguments.pr_number,
276
- loop=arguments.loop,
277
- head_ref=arguments.head_ref,
278
- base_ref=arguments.base_ref,
279
- worktree_path=arguments.worktree_path,
280
- run_temp_dir=arguments.run_temp_dir,
281
- pr_body_text=read_pr_body_text(arguments.pr_body_file),
282
- flavor=arguments.flavor,
283
- )
284
- sys.stdout.write(xml_output)
285
- return 0
286
-
287
-
288
- if __name__ == "__main__":
289
- raise SystemExit(main(sys.argv[1:]))
@@ -1,310 +0,0 @@
1
- #!/usr/bin/env python3
2
- """``build_converge_task_list.py`` — ordered review tasks for a run.
3
-
4
- Step 1 of autoconverge / portable pr-converge: call this script. Do not invent
5
- tasks in prose. The final task is always all runnable code reviews CLEAN on
6
- the same HEAD.
7
-
8
- ::
9
-
10
- python build_converge_task_list.py \\
11
- [--bugbot-down 0|1] [--copilot-down 0|1] \\
12
- [--codex-down 0|1] [--codex-required 0|1]
13
-
14
- Stdout JSON::
15
-
16
- {
17
- "tasks": [...],
18
- "runnable_review_ids": [...],
19
- "skipped_review_ids": [...],
20
- "final_task_id": "all_runnable_reviews_clean_same_head",
21
- "done_when": "..."
22
- }
23
- """
24
-
25
- from __future__ import annotations
26
-
27
- import argparse
28
- import json
29
- import sys
30
- from pathlib import Path
31
-
32
- _self_dir = Path(__file__).resolve().parent
33
- if str(_self_dir) not in sys.path:
34
- sys.path.insert(0, str(_self_dir))
35
-
36
- from select_converge_pacer import parse_bool_flag # noqa: E402
37
- from skills_pr_loop_constants.converge_task_list_constants import ( # noqa: E402
38
- CLI_BUGBOT_DOWN_FLAG,
39
- CLI_CODEX_DOWN_FLAG,
40
- CLI_CODEX_REQUIRED_FLAG,
41
- CLI_COPILOT_DOWN_FLAG,
42
- DONE_WHEN_TEXT,
43
- EXIT_SUCCESS,
44
- EXIT_USAGE_ERROR,
45
- RESULT_KEY_DONE_WHEN,
46
- RESULT_KEY_FINAL_TASK_ID,
47
- RESULT_KEY_RUNNABLE_REVIEW_IDS,
48
- RESULT_KEY_SKIPPED_REVIEW_IDS,
49
- RESULT_KEY_TASKS,
50
- SKIP_REASON_BUGBOT_DOWN,
51
- SKIP_REASON_CODEX_DOWN,
52
- SKIP_REASON_CODEX_NOT_REQUIRED,
53
- SKIP_REASON_COPILOT_DOWN,
54
- TASK_FIELD_ID,
55
- TASK_FIELD_IS_RUNNABLE,
56
- TASK_FIELD_KIND,
57
- TASK_FIELD_SKIP_REASON,
58
- TASK_FIELD_TITLE,
59
- TASK_ID_ALL_CLEAN_SAME_HEAD,
60
- TASK_ID_BUGBOT,
61
- TASK_ID_BUGTEAM,
62
- TASK_ID_CODE_REVIEW,
63
- TASK_ID_CODEX,
64
- TASK_ID_COPILOT,
65
- TASK_KIND_FINAL,
66
- TASK_KIND_REVIEW,
67
- TASK_TITLE_ALL_CLEAN_SAME_HEAD,
68
- TASK_TITLE_BUGBOT,
69
- TASK_TITLE_BUGTEAM,
70
- TASK_TITLE_CODE_REVIEW,
71
- TASK_TITLE_CODEX,
72
- TASK_TITLE_COPILOT,
73
- )
74
-
75
-
76
- def _review_task(
77
- *,
78
- task_id: str,
79
- title: str,
80
- is_runnable: bool,
81
- skip_reason: str | None,
82
- ) -> dict[str, object]:
83
- task: dict[str, object] = {
84
- TASK_FIELD_ID: task_id,
85
- TASK_FIELD_TITLE: title,
86
- TASK_FIELD_KIND: TASK_KIND_REVIEW,
87
- TASK_FIELD_IS_RUNNABLE: is_runnable,
88
- }
89
- if skip_reason is not None:
90
- task[TASK_FIELD_SKIP_REASON] = skip_reason
91
- return task
92
-
93
-
94
- def _append_always_runnable_reviews(
95
- all_tasks: list[dict[str, object]],
96
- ) -> None:
97
- all_tasks.append(
98
- _review_task(
99
- task_id=TASK_ID_CODE_REVIEW,
100
- title=TASK_TITLE_CODE_REVIEW,
101
- is_runnable=True,
102
- skip_reason=None,
103
- )
104
- )
105
- all_tasks.append(
106
- _review_task(
107
- task_id=TASK_ID_BUGTEAM,
108
- title=TASK_TITLE_BUGTEAM,
109
- is_runnable=True,
110
- skip_reason=None,
111
- )
112
- )
113
-
114
-
115
- def _append_bugbot_task(
116
- all_tasks: list[dict[str, object]],
117
- *,
118
- is_bugbot_down: bool,
119
- ) -> None:
120
- if is_bugbot_down:
121
- all_tasks.append(
122
- _review_task(
123
- task_id=TASK_ID_BUGBOT,
124
- title=TASK_TITLE_BUGBOT,
125
- is_runnable=False,
126
- skip_reason=SKIP_REASON_BUGBOT_DOWN,
127
- )
128
- )
129
- return
130
- all_tasks.append(
131
- _review_task(
132
- task_id=TASK_ID_BUGBOT,
133
- title=TASK_TITLE_BUGBOT,
134
- is_runnable=True,
135
- skip_reason=None,
136
- )
137
- )
138
-
139
-
140
- def _append_copilot_task(
141
- all_tasks: list[dict[str, object]],
142
- *,
143
- is_copilot_down: bool,
144
- ) -> None:
145
- if is_copilot_down:
146
- all_tasks.append(
147
- _review_task(
148
- task_id=TASK_ID_COPILOT,
149
- title=TASK_TITLE_COPILOT,
150
- is_runnable=False,
151
- skip_reason=SKIP_REASON_COPILOT_DOWN,
152
- )
153
- )
154
- return
155
- all_tasks.append(
156
- _review_task(
157
- task_id=TASK_ID_COPILOT,
158
- title=TASK_TITLE_COPILOT,
159
- is_runnable=True,
160
- skip_reason=None,
161
- )
162
- )
163
-
164
-
165
- def _append_codex_task(
166
- all_tasks: list[dict[str, object]],
167
- *,
168
- is_codex_down: bool,
169
- is_codex_required: bool,
170
- ) -> None:
171
- if is_codex_down:
172
- all_tasks.append(
173
- _review_task(
174
- task_id=TASK_ID_CODEX,
175
- title=TASK_TITLE_CODEX,
176
- is_runnable=False,
177
- skip_reason=SKIP_REASON_CODEX_DOWN,
178
- )
179
- )
180
- return
181
- if not is_codex_required:
182
- all_tasks.append(
183
- _review_task(
184
- task_id=TASK_ID_CODEX,
185
- title=TASK_TITLE_CODEX,
186
- is_runnable=False,
187
- skip_reason=SKIP_REASON_CODEX_NOT_REQUIRED,
188
- )
189
- )
190
- return
191
- all_tasks.append(
192
- _review_task(
193
- task_id=TASK_ID_CODEX,
194
- title=TASK_TITLE_CODEX,
195
- is_runnable=True,
196
- skip_reason=None,
197
- )
198
- )
199
-
200
-
201
- def _append_final_task(all_tasks: list[dict[str, object]]) -> None:
202
- all_tasks.append(
203
- {
204
- TASK_FIELD_ID: TASK_ID_ALL_CLEAN_SAME_HEAD,
205
- TASK_FIELD_TITLE: TASK_TITLE_ALL_CLEAN_SAME_HEAD,
206
- TASK_FIELD_KIND: TASK_KIND_FINAL,
207
- TASK_FIELD_IS_RUNNABLE: True,
208
- }
209
- )
210
-
211
-
212
- def _partition_review_ids(
213
- all_tasks: list[dict[str, object]],
214
- ) -> tuple[list[str], list[str]]:
215
- all_runnable_review_ids = [
216
- str(each_task[TASK_FIELD_ID])
217
- for each_task in all_tasks
218
- if each_task[TASK_FIELD_KIND] == TASK_KIND_REVIEW
219
- and each_task[TASK_FIELD_IS_RUNNABLE] is True
220
- ]
221
- all_skipped_review_ids = [
222
- str(each_task[TASK_FIELD_ID])
223
- for each_task in all_tasks
224
- if each_task[TASK_FIELD_KIND] == TASK_KIND_REVIEW
225
- and each_task[TASK_FIELD_IS_RUNNABLE] is False
226
- ]
227
- return all_runnable_review_ids, all_skipped_review_ids
228
-
229
-
230
- def build_converge_task_list(
231
- *,
232
- is_bugbot_down: bool,
233
- is_copilot_down: bool,
234
- is_codex_down: bool,
235
- is_codex_required: bool,
236
- ) -> dict[str, object]:
237
- """Return the ordered task list and done criterion for one converge run.
238
-
239
- Args:
240
- is_bugbot_down: Skip Bugbot as a runnable review.
241
- is_copilot_down: Skip Copilot as a runnable review.
242
- is_codex_down: Skip Codex even when usage would require it.
243
- is_codex_required: Weekly usage / policy requires a Codex review.
244
-
245
- Returns:
246
- JSON-serializable control object with ``tasks`` and ``done_when``.
247
- """
248
- all_tasks: list[dict[str, object]] = []
249
- _append_always_runnable_reviews(all_tasks)
250
- _append_bugbot_task(all_tasks, is_bugbot_down=is_bugbot_down)
251
- _append_copilot_task(all_tasks, is_copilot_down=is_copilot_down)
252
- _append_codex_task(
253
- all_tasks,
254
- is_codex_down=is_codex_down,
255
- is_codex_required=is_codex_required,
256
- )
257
- _append_final_task(all_tasks)
258
- all_runnable_review_ids, all_skipped_review_ids = _partition_review_ids(
259
- all_tasks
260
- )
261
- return {
262
- RESULT_KEY_TASKS: all_tasks,
263
- RESULT_KEY_RUNNABLE_REVIEW_IDS: all_runnable_review_ids,
264
- RESULT_KEY_SKIPPED_REVIEW_IDS: all_skipped_review_ids,
265
- RESULT_KEY_FINAL_TASK_ID: TASK_ID_ALL_CLEAN_SAME_HEAD,
266
- RESULT_KEY_DONE_WHEN: DONE_WHEN_TEXT,
267
- }
268
-
269
-
270
- def build_argument_parser() -> argparse.ArgumentParser:
271
- """Build the CLI parser for ``build_converge_task_list``.
272
-
273
- Returns:
274
- Configured argument parser.
275
- """
276
- parser = argparse.ArgumentParser(description="build_converge_task_list")
277
- parser.add_argument(CLI_BUGBOT_DOWN_FLAG, default="0")
278
- parser.add_argument(CLI_COPILOT_DOWN_FLAG, default="0")
279
- parser.add_argument(CLI_CODEX_DOWN_FLAG, default="0")
280
- parser.add_argument(CLI_CODEX_REQUIRED_FLAG, default="0")
281
- return parser
282
-
283
-
284
- def main(all_argv: list[str]) -> int:
285
- """CLI entry: print one task-list JSON object on stdout.
286
-
287
- Args:
288
- all_argv: Argument vector without program name.
289
-
290
- Returns:
291
- Process exit code.
292
- """
293
- parser = build_argument_parser()
294
- parsed_arguments = parser.parse_args(all_argv)
295
- try:
296
- task_list_payload = build_converge_task_list(
297
- is_bugbot_down=parse_bool_flag(parsed_arguments.bugbot_down),
298
- is_copilot_down=parse_bool_flag(parsed_arguments.copilot_down),
299
- is_codex_down=parse_bool_flag(parsed_arguments.codex_down),
300
- is_codex_required=parse_bool_flag(parsed_arguments.codex_required),
301
- )
302
- except ValueError as validation_error:
303
- print(str(validation_error), file=sys.stderr)
304
- return EXIT_USAGE_ERROR
305
- print(json.dumps(task_list_payload, sort_keys=True))
306
- return EXIT_SUCCESS
307
-
308
-
309
- if __name__ == "__main__":
310
- raise SystemExit(main(sys.argv[1:]))