claude-dev-env 2.15.1 → 2.16.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 (656) hide show
  1. package/.agents/agents/.claude/CLAUDE.md +1 -0
  2. package/{agents → .agents/agents}/AGENTS.md +2 -2
  3. package/{agents → .agents/agents}/test_agent_frontmatter.py +1 -1
  4. package/.agents/skills/.claude/CLAUDE.md +1 -0
  5. package/{skills → .agents/skills}/AGENTS.md +2 -2
  6. package/.agents/skills/_shared/.claude/CLAUDE.md +1 -0
  7. package/{skills → .agents/skills}/_shared/AGENTS.md +2 -2
  8. package/.agents/skills/_shared/advisor/.claude/CLAUDE.md +1 -0
  9. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +1 -0
  10. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +1 -0
  11. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +1 -0
  12. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +1 -0
  13. package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +6 -1
  14. package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_audit_prompt.py +9 -3
  15. package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_audit_outcomes.py +1 -1
  16. package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_fix_outcomes.py +1 -1
  17. package/.agents/skills/anthropic-plan/.claude/CLAUDE.md +1 -0
  18. package/{skills → .agents/skills}/anthropic-plan/AGENTS.md +1 -1
  19. package/.agents/skills/anthropic-plan/scripts/.claude/CLAUDE.md +1 -0
  20. package/.agents/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +1 -0
  21. package/.agents/skills/anthropic-plan/templates/.claude/CLAUDE.md +1 -0
  22. package/{skills → .agents/skills}/anthropic-plan/test_skill_contract.py +4 -4
  23. package/.agents/skills/anthropic-plan/workflow/.claude/CLAUDE.md +1 -0
  24. package/.agents/skills/auditing-claude-config/.claude/CLAUDE.md +1 -0
  25. package/.agents/skills/autoconverge/.claude/CLAUDE.md +1 -0
  26. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +1 -0
  27. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +1 -0
  28. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +1 -0
  29. package/.agents/skills/bugteam/.claude/CLAUDE.md +1 -0
  30. package/.agents/skills/bugteam/reference/.claude/CLAUDE.md +1 -0
  31. package/.agents/skills/bugteam/reference/obstacles/.claude/CLAUDE.md +1 -0
  32. package/.agents/skills/bugteam/scripts/.claude/CLAUDE.md +1 -0
  33. package/{skills → .agents/skills}/bugteam/scripts/bugteam_code_rules_gate.py +11 -1
  34. package/{skills → .agents/skills}/bugteam/scripts/bugteam_fix_hookspath.py +11 -1
  35. package/{skills → .agents/skills}/bugteam/scripts/bugteam_preflight.py +11 -1
  36. package/.agents/skills/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +1 -0
  37. package/{skills → .agents/skills}/bugteam/scripts/reflow_skill_md.py +3 -3
  38. package/.agents/skills/codex-review/.claude/CLAUDE.md +1 -0
  39. package/.agents/skills/codex-review/reference/.claude/CLAUDE.md +1 -0
  40. package/.agents/skills/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
  41. package/{skills → .agents/skills}/codex-review/scripts/codex_usage_probe.py +11 -1
  42. package/{skills → .agents/skills}/codex-review/scripts/run_codex_review.py +11 -1
  43. package/{skills → .agents/skills}/codex-review/test_skill_scaffold.py +4 -4
  44. package/.agents/skills/copilot-review/.claude/CLAUDE.md +1 -0
  45. package/{skills → .agents/skills}/e-code-review/reference/effort-evaluation.md +1 -1
  46. package/.agents/skills/everything-search/.claude/CLAUDE.md +1 -0
  47. package/.agents/skills/fresh-branch/.claude/CLAUDE.md +1 -0
  48. package/.agents/skills/grok-spawn/.claude/CLAUDE.md +1 -0
  49. package/{skills → .agents/skills}/grokify/evals/README.md +1 -1
  50. package/.agents/skills/pr-converge/.claude/CLAUDE.md +1 -0
  51. package/.agents/skills/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
  52. package/{skills → .agents/skills}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
  53. package/{skills → .agents/skills}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
  54. package/.agents/skills/pr-converge/reference/.claude/CLAUDE.md +1 -0
  55. package/.agents/skills/pr-converge/reference/obstacles/.claude/CLAUDE.md +1 -0
  56. package/.agents/skills/pr-converge/scripts/.claude/CLAUDE.md +1 -0
  57. package/{skills → .agents/skills}/pr-converge/scripts/_pr_converge_path_setup.py +17 -2
  58. package/.agents/skills/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
  59. package/{skills → .agents/skills}/pr-converge/scripts/reflow_skill_md.py +2 -2
  60. package/{skills → .agents/skills}/pr-converge/scripts/test__pr_converge_path_setup.py +7 -4
  61. package/.agents/skills/pr-converge/workflows/.claude/CLAUDE.md +1 -0
  62. package/{skills → .agents/skills}/prototype/scripts/test_probe_sandbox_safety.py +1 -1
  63. package/.agents/skills/rebase/.claude/CLAUDE.md +1 -0
  64. package/.agents/skills/recall/.claude/CLAUDE.md +1 -0
  65. package/.agents/skills/remember/.claude/CLAUDE.md +1 -0
  66. package/.agents/skills/run-claude-dev-env/SKILL.md +84 -0
  67. package/.agents/skills/run-claude-dev-env/driver.mjs +239 -0
  68. package/.agents/skills/session-log/.claude/CLAUDE.md +1 -0
  69. package/.agents/skills/session-tidy/.claude/CLAUDE.md +1 -0
  70. package/.agents/skills/skill-builder/.claude/CLAUDE.md +1 -0
  71. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +1 -0
  72. package/{skills → .agents/skills}/skill-builder/references/deterministic-elements.md +1 -1
  73. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +1 -0
  74. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +1 -0
  75. package/{skills → .agents/skills}/split-pr/reference/proposal-format.md +1 -1
  76. package/.agents/skills/task-build/.claude/CLAUDE.md +1 -0
  77. package/.agents/skills/update/.claude/CLAUDE.md +1 -0
  78. package/.claude/CLAUDE.md +1 -0
  79. package/_shared/advisor/reference/sol-rung.md +1 -1
  80. package/_shared/advisor/scripts/tests/test_codex_sol_advisor.py +1 -1
  81. package/_shared/pr-loop/code-rules-gate.md +1 -1
  82. package/bin/AGENTS.md +17 -12
  83. package/bin/ever-shipped-skills.mjs +5 -2
  84. package/bin/install-constants.mjs +31 -6
  85. package/bin/install-plan.mjs +6 -1
  86. package/bin/install.agents-home.test.mjs +186 -0
  87. package/bin/install.mjs +85 -15
  88. package/bin/install.plan.test.mjs +1 -0
  89. package/bin/install.profile-root.test.mjs +53 -0
  90. package/bin/install.test.mjs +9 -0
  91. package/bin/publish-directory-pointer.mjs +175 -0
  92. package/bin/publish-directory-pointer.test.mjs +129 -0
  93. package/bin/resolve-install-root.mjs +59 -4
  94. package/bin/resolve-package-managed-directory.mjs +29 -0
  95. package/bin/resolve-package-managed-directory.test.mjs +97 -0
  96. package/hooks/blocking/hedging_language_blocker.py +1 -0
  97. package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +10 -6
  98. package/hooks/blocking/test_code_rules_command_dispatch.py +1 -1
  99. package/hooks/blocking/test_code_rules_enforcer_magic_slice_bounds.py +1 -1
  100. package/hooks/blocking/test_code_rules_enforcer_split_annotations_length.py +1 -1
  101. package/hooks/blocking/test_code_rules_js_conventions.py +1 -1
  102. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +1 -1
  103. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +1 -1
  104. package/hooks/blocking/test_code_rules_js_sibling_return_object_key_drift.py +1 -1
  105. package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +1 -1
  106. package/hooks/blocking/test_fable_spawn_gate.py +1 -1
  107. package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +1 -1
  108. package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +9 -0
  109. package/installable-surfaces.manifest.json +2 -3
  110. package/package.json +4 -5
  111. package/scripts/active_capability_references.py +38 -8
  112. package/scripts/claude_chain_usage.py +2 -0
  113. package/scripts/codex_compat_watcher.py +1 -1
  114. package/scripts/dev_env_scripts_constants/active_capability_constants.py +5 -2
  115. package/scripts/dev_env_scripts_constants/claude_chain_usage_constants.py +4 -1
  116. package/scripts/test_verify_installable_package.py +2 -1
  117. package/scripts/tests/test_codex_compat_watcher.py +5 -5
  118. package/CLAUDE.md +0 -1
  119. package/agents/CLAUDE.md +0 -1
  120. package/skills/CLAUDE.md +0 -1
  121. package/skills/_shared/CLAUDE.md +0 -1
  122. package/skills/_shared/advisor/CLAUDE.md +0 -1
  123. package/skills/_shared/pr-loop/CLAUDE.md +0 -1
  124. package/skills/_shared/pr-loop/prompts/CLAUDE.md +0 -1
  125. package/skills/_shared/pr-loop/scripts/CLAUDE.md +0 -1
  126. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +0 -1
  127. package/skills/anthropic-plan/CLAUDE.md +0 -1
  128. package/skills/anthropic-plan/scripts/CLAUDE.md +0 -1
  129. package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/CLAUDE.md +0 -1
  130. package/skills/anthropic-plan/templates/CLAUDE.md +0 -1
  131. package/skills/anthropic-plan/workflow/CLAUDE.md +0 -1
  132. package/skills/auditing-claude-config/CLAUDE.md +0 -1
  133. package/skills/autoconverge/CLAUDE.md +0 -1
  134. package/skills/autoconverge/reference/CLAUDE.md +0 -1
  135. package/skills/autoconverge/workflow/CLAUDE.md +0 -1
  136. package/skills/autoconverge/workflow/autoconverge_report_constants/CLAUDE.md +0 -1
  137. package/skills/bugteam/CLAUDE.md +0 -1
  138. package/skills/bugteam/reference/CLAUDE.md +0 -1
  139. package/skills/bugteam/reference/obstacles/CLAUDE.md +0 -1
  140. package/skills/bugteam/scripts/CLAUDE.md +0 -1
  141. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
  142. package/skills/codex-review/CLAUDE.md +0 -1
  143. package/skills/codex-review/reference/CLAUDE.md +0 -1
  144. package/skills/codex-review/scripts/codex_review_scripts_constants/CLAUDE.md +0 -1
  145. package/skills/copilot-review/CLAUDE.md +0 -1
  146. package/skills/everything-search/CLAUDE.md +0 -1
  147. package/skills/fresh-branch/CLAUDE.md +0 -1
  148. package/skills/grok-spawn/CLAUDE.md +0 -1
  149. package/skills/pr-converge/CLAUDE.md +0 -1
  150. package/skills/pr-converge/pr_converge_skill_constants/CLAUDE.md +0 -1
  151. package/skills/pr-converge/reference/CLAUDE.md +0 -1
  152. package/skills/pr-converge/reference/obstacles/CLAUDE.md +0 -1
  153. package/skills/pr-converge/scripts/CLAUDE.md +0 -1
  154. package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +0 -1
  155. package/skills/pr-converge/workflows/CLAUDE.md +0 -1
  156. package/skills/rebase/CLAUDE.md +0 -1
  157. package/skills/recall/CLAUDE.md +0 -1
  158. package/skills/remember/CLAUDE.md +0 -1
  159. package/skills/session-log/CLAUDE.md +0 -1
  160. package/skills/session-tidy/CLAUDE.md +0 -1
  161. package/skills/skill-builder/CLAUDE.md +0 -1
  162. package/skills/skill-builder/references/CLAUDE.md +0 -1
  163. package/skills/skill-builder/templates/CLAUDE.md +0 -1
  164. package/skills/skill-builder/workflows/CLAUDE.md +0 -1
  165. package/skills/task-build/CLAUDE.md +0 -1
  166. package/skills/update/CLAUDE.md +0 -1
  167. /package/{agents → .agents/agents}/clean-coder.md +0 -0
  168. /package/{agents → .agents/agents}/code-quality-agent.md +0 -0
  169. /package/{agents → .agents/agents}/git-commit-crafter.md +0 -0
  170. /package/{agents → .agents/agents}/issue-tracker.md +0 -0
  171. /package/{agents → .agents/agents}/plan-packet-validator.md +0 -0
  172. /package/{agents → .agents/agents}/pr-description-writer.md +0 -0
  173. /package/{agents → .agents/agents}/session-advisor.md +0 -0
  174. /package/{agents → .agents/agents}/skill-writer-agent.md +0 -0
  175. /package/{skills → .agents/skills}/_shared/advisor/AGENTS.md +0 -0
  176. /package/{skills → .agents/skills}/_shared/advisor/advisor-protocol.md +0 -0
  177. /package/{skills → .agents/skills}/_shared/advisor/scripts/README.md +0 -0
  178. /package/{skills → .agents/skills}/_shared/end-of-run-gotcha-recommendations.md +0 -0
  179. /package/{skills → .agents/skills}/_shared/pr-loop/AGENTS.md +0 -0
  180. /package/{skills → .agents/skills}/_shared/pr-loop/audit-contract.md +0 -0
  181. /package/{skills → .agents/skills}/_shared/pr-loop/audit-reply-template.md +0 -0
  182. /package/{skills → .agents/skills}/_shared/pr-loop/code-rules-gate.md +0 -0
  183. /package/{skills → .agents/skills}/_shared/pr-loop/fix-protocol.md +0 -0
  184. /package/{skills → .agents/skills}/_shared/pr-loop/gh-payloads.md +0 -0
  185. /package/{skills → .agents/skills}/_shared/pr-loop/portable-driver.md +0 -0
  186. /package/{skills → .agents/skills}/_shared/pr-loop/post-audit-thread-contract.md +0 -0
  187. /package/{skills → .agents/skills}/_shared/pr-loop/precatch-rubric.md +0 -0
  188. /package/{skills → .agents/skills}/_shared/pr-loop/prompts/AGENTS.md +0 -0
  189. /package/{skills → .agents/skills}/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -0
  190. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/AGENTS.md +0 -0
  191. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -0
  192. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_cli_utils.py +0 -0
  193. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_path_resolver.py +0 -0
  194. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_xml_utils.py +0 -0
  195. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/audit_category_schema.py +0 -0
  196. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_audit_prompt.py +0 -0
  197. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_converge_task_list.py +0 -0
  198. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_fix_prompt.py +0 -0
  199. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/init_loop_state.py +0 -0
  200. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/portable_converge_driver.py +0 -0
  201. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/preflight_worktree.py +0 -0
  202. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/select_converge_pacer.py +0 -0
  203. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -0
  204. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
  205. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -0
  206. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -0
  207. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -0
  208. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -0
  209. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -0
  210. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -0
  211. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/teardown_worktrees.py +0 -0
  212. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test__path_resolver.py +0 -0
  213. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -0
  214. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -0
  215. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -0
  216. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_init_loop_state.py +0 -0
  217. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -0
  218. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -0
  219. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -0
  220. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -0
  221. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_write_handoff.py +0 -0
  222. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_handoff.py +0 -0
  223. /package/{skills → .agents/skills}/_shared/pr-loop/state-schema.md +0 -0
  224. /package/{skills → .agents/skills}/_shared/pr-loop/worker-spawn.md +0 -0
  225. /package/{skills → .agents/skills}/anthropic-plan/SKILL.md +0 -0
  226. /package/{skills → .agents/skills}/anthropic-plan/scripts/AGENTS.md +0 -0
  227. /package/{skills → .agents/skills}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
  228. /package/{skills → .agents/skills}/anthropic-plan/scripts/anthropic_plan_scripts_constants/__init__.py +0 -0
  229. /package/{skills → .agents/skills}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
  230. /package/{skills → .agents/skills}/anthropic-plan/scripts/test_validate_packet.py +0 -0
  231. /package/{skills → .agents/skills}/anthropic-plan/scripts/validate_packet.py +0 -0
  232. /package/{skills → .agents/skills}/anthropic-plan/templates/AGENTS.md +0 -0
  233. /package/{skills → .agents/skills}/anthropic-plan/templates/README.md +0 -0
  234. /package/{skills → .agents/skills}/anthropic-plan/templates/build-prompt.md +0 -0
  235. /package/{skills → .agents/skills}/anthropic-plan/templates/reuse-audit.md +0 -0
  236. /package/{skills → .agents/skills}/anthropic-plan/templates/source-map.md +0 -0
  237. /package/{skills → .agents/skills}/anthropic-plan/templates/visual-plan.template.html +0 -0
  238. /package/{skills → .agents/skills}/anthropic-plan/workflow/AGENTS.md +0 -0
  239. /package/{skills → .agents/skills}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
  240. /package/{skills → .agents/skills}/anthropic-plan/workflow/plan-packet.mjs +0 -0
  241. /package/{skills → .agents/skills}/auditing-claude-config/AGENTS.md +0 -0
  242. /package/{skills → .agents/skills}/auditing-claude-config/SKILL.md +0 -0
  243. /package/{skills → .agents/skills}/auditing-claude-config/reference/probe-hook.md +0 -0
  244. /package/{skills → .agents/skills}/autoconverge/AGENTS.md +0 -0
  245. /package/{skills → .agents/skills}/autoconverge/SKILL.md +0 -0
  246. /package/{skills → .agents/skills}/autoconverge/reference/AGENTS.md +0 -0
  247. /package/{skills → .agents/skills}/autoconverge/reference/closing-report.md +0 -0
  248. /package/{skills → .agents/skills}/autoconverge/reference/convergence.md +0 -0
  249. /package/{skills → .agents/skills}/autoconverge/reference/copilot-findings.md +0 -0
  250. /package/{skills → .agents/skills}/autoconverge/reference/gotchas.md +0 -0
  251. /package/{skills → .agents/skills}/autoconverge/reference/headless-safety.md +0 -0
  252. /package/{skills → .agents/skills}/autoconverge/reference/multi-pr.md +0 -0
  253. /package/{skills → .agents/skills}/autoconverge/reference/self-closing-loop.md +0 -0
  254. /package/{skills → .agents/skills}/autoconverge/reference/stop-conditions.md +0 -0
  255. /package/{skills → .agents/skills}/autoconverge/test_portable_pacer_gate.py +0 -0
  256. /package/{skills → .agents/skills}/autoconverge/workflow/AGENTS.md +0 -0
  257. /package/{skills → .agents/skills}/autoconverge/workflow/aggregate_runs.py +0 -0
  258. /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -0
  259. /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
  260. /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -0
  261. /package/{skills → .agents/skills}/autoconverge/workflow/converge.clean-audit.test.mjs +0 -0
  262. /package/{skills → .agents/skills}/autoconverge/workflow/converge.codex-gate.test.mjs +0 -0
  263. /package/{skills → .agents/skills}/autoconverge/workflow/converge.contract.test.mjs +0 -0
  264. /package/{skills → .agents/skills}/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -0
  265. /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-progress.test.mjs +0 -0
  266. /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -0
  267. /package/{skills → .agents/skills}/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -0
  268. /package/{skills → .agents/skills}/autoconverge/workflow/converge.mjs +0 -0
  269. /package/{skills → .agents/skills}/autoconverge/workflow/converge.p2-advance.test.mjs +0 -0
  270. /package/{skills → .agents/skills}/autoconverge/workflow/converge.path-aware.test.mjs +0 -0
  271. /package/{skills → .agents/skills}/autoconverge/workflow/converge.precatch.test.mjs +0 -0
  272. /package/{skills → .agents/skills}/autoconverge/workflow/converge.run-input.test.mjs +0 -0
  273. /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.mjs +0 -0
  274. /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -0
  275. /package/{skills → .agents/skills}/autoconverge/workflow/convergence_summary.py +0 -0
  276. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -0
  277. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -0
  278. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -0
  279. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -0
  280. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -0
  281. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -0
  282. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -0
  283. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -0
  284. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -0
  285. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -0
  286. /package/{skills → .agents/skills}/autoconverge/workflow/render_report.py +0 -0
  287. /package/{skills → .agents/skills}/autoconverge/workflow/test_aggregate_runs.py +0 -0
  288. /package/{skills → .agents/skills}/autoconverge/workflow/test_convergence_summary.py +0 -0
  289. /package/{skills → .agents/skills}/autoconverge/workflow/test_render_report.py +0 -0
  290. /package/{skills → .agents/skills}/beat-sheet/SKILL.md +0 -0
  291. /package/{skills → .agents/skills}/beat-sheet/reference/visual-beats.md +0 -0
  292. /package/{skills → .agents/skills}/bugteam/AGENTS.md +0 -0
  293. /package/{skills → .agents/skills}/bugteam/CONSTRAINTS.md +0 -0
  294. /package/{skills → .agents/skills}/bugteam/EXAMPLES.md +0 -0
  295. /package/{skills → .agents/skills}/bugteam/PROMPTS.md +0 -0
  296. /package/{skills → .agents/skills}/bugteam/SKILL.md +0 -0
  297. /package/{skills → .agents/skills}/bugteam/reference/AGENTS.md +0 -0
  298. /package/{skills → .agents/skills}/bugteam/reference/README.md +0 -0
  299. /package/{skills → .agents/skills}/bugteam/reference/audit-and-teammates.md +0 -0
  300. /package/{skills → .agents/skills}/bugteam/reference/copilot-gap-analysis.md +0 -0
  301. /package/{skills → .agents/skills}/bugteam/reference/design-rationale.md +0 -0
  302. /package/{skills → .agents/skills}/bugteam/reference/github-pr-reviews.md +0 -0
  303. /package/{skills → .agents/skills}/bugteam/reference/obstacles/AGENTS.md +0 -0
  304. /package/{skills → .agents/skills}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
  305. /package/{skills → .agents/skills}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
  306. /package/{skills → .agents/skills}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
  307. /package/{skills → .agents/skills}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
  308. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
  309. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
  310. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
  311. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-git-push.md +0 -0
  312. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
  313. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
  314. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
  315. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-read-files.md +0 -0
  316. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
  317. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
  318. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
  319. /package/{skills → .agents/skills}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
  320. /package/{skills → .agents/skills}/bugteam/reference/team-setup.md +0 -0
  321. /package/{skills → .agents/skills}/bugteam/scripts/AGENTS.md +0 -0
  322. /package/{skills → .agents/skills}/bugteam/scripts/README.md +0 -0
  323. /package/{skills → .agents/skills}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
  324. /package/{skills → .agents/skills}/bugteam/scripts/bugteam_scripts_constants/__init__.py +0 -0
  325. /package/{skills → .agents/skills}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
  326. /package/{skills → .agents/skills}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
  327. /package/{skills → .agents/skills}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
  328. /package/{skills → .agents/skills}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
  329. /package/{skills → .agents/skills}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
  330. /package/{skills → .agents/skills}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
  331. /package/{skills → .agents/skills}/bugteam/scripts/test_bugteam_preflight.py +0 -0
  332. /package/{skills → .agents/skills}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
  333. /package/{skills → .agents/skills}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
  334. /package/{skills → .agents/skills}/bugteam/scripts/windows_safe_rmtree.py +0 -0
  335. /package/{skills → .agents/skills}/bugteam/sources.md +0 -0
  336. /package/{skills → .agents/skills}/bugteam/test_skill_additions.py +0 -0
  337. /package/{skills → .agents/skills}/closeout/SKILL.md +0 -0
  338. /package/{skills → .agents/skills}/closeout/reference/handoff-prompt-template.md +0 -0
  339. /package/{skills → .agents/skills}/closeout/reference/pii-redaction-checklist.md +0 -0
  340. /package/{skills → .agents/skills}/codex-review/AGENTS.md +0 -0
  341. /package/{skills → .agents/skills}/codex-review/SKILL.md +0 -0
  342. /package/{skills → .agents/skills}/codex-review/reference/AGENTS.md +0 -0
  343. /package/{skills → .agents/skills}/codex-review/reference/cli-contract.md +0 -0
  344. /package/{skills → .agents/skills}/codex-review/reference/loop-integration.md +0 -0
  345. /package/{skills → .agents/skills}/codex-review/scripts/codex_down_classifier.py +0 -0
  346. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
  347. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
  348. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
  349. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
  350. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
  351. /package/{skills → .agents/skills}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
  352. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
  353. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
  354. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
  355. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
  356. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
  357. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
  358. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
  359. /package/{skills → .agents/skills}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
  360. /package/{skills → .agents/skills}/codex-review/scripts/parse_codex_findings.py +0 -0
  361. /package/{skills → .agents/skills}/codex-review/scripts/test_codex_down_classifier.py +0 -0
  362. /package/{skills → .agents/skills}/codex-review/scripts/test_codex_usage_probe.py +0 -0
  363. /package/{skills → .agents/skills}/codex-review/scripts/test_parse_codex_findings.py +0 -0
  364. /package/{skills → .agents/skills}/codex-review/scripts/test_run_codex_review.py +0 -0
  365. /package/{skills → .agents/skills}/comments/SKILL.md +0 -0
  366. /package/{skills → .agents/skills}/condensing-instructions/SKILL.md +0 -0
  367. /package/{skills → .agents/skills}/copilot-finding-triage/SKILL.md +0 -0
  368. /package/{skills → .agents/skills}/copilot-finding-triage/reference/tier-rubric.md +0 -0
  369. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/conftest.py +0 -0
  370. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/copilot_finding_triage_constants/__init__.py +0 -0
  371. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/__init__.py +0 -0
  372. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
  373. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
  374. /package/{skills → .agents/skills}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
  375. /package/{skills → .agents/skills}/copilot-finding-triage/templates/notification.md +0 -0
  376. /package/{skills → .agents/skills}/copilot-review/AGENTS.md +0 -0
  377. /package/{skills → .agents/skills}/copilot-review/SKILL.md +0 -0
  378. /package/{skills → .agents/skills}/copilot-review/templates/subagent-prompt.md +0 -0
  379. /package/{skills → .agents/skills}/descriptions/SKILL.md +0 -0
  380. /package/{skills → .agents/skills}/e-code-review/SKILL.md +0 -0
  381. /package/{skills → .agents/skills}/e-code-review/reference/fix.md +0 -0
  382. /package/{skills → .agents/skills}/e-code-review/reference/loop.md +0 -0
  383. /package/{skills → .agents/skills}/e-code-review/reference/low.md +0 -0
  384. /package/{skills → .agents/skills}/e-code-review/reference/medium.md +0 -0
  385. /package/{skills → .agents/skills}/e-code-review/reference/runner-selection.md +0 -0
  386. /package/{skills → .agents/skills}/e-code-review/reference/xhigh.md +0 -0
  387. /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/__init__.py +0 -0
  388. /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/effort_constants.py +0 -0
  389. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/__init__.py +0 -0
  390. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/finding_pipeline_constants.py +0 -0
  391. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/grok_code_review_constants.py +0 -0
  392. /package/{skills → .agents/skills}/e-code-review/scripts/effort_defaults_evidence.json +0 -0
  393. /package/{skills → .agents/skills}/e-code-review/scripts/effort_evaluation.py +0 -0
  394. /package/{skills → .agents/skills}/e-code-review/scripts/finding_pipeline.py +0 -0
  395. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/demanding.json +0 -0
  396. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/easy.json +0 -0
  397. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/medium.json +0 -0
  398. /package/{skills → .agents/skills}/e-code-review/scripts/grok_code_review.py +0 -0
  399. /package/{skills → .agents/skills}/e-code-review/scripts/test_effort_evaluation.py +0 -0
  400. /package/{skills → .agents/skills}/e-code-review/scripts/test_finding_pipeline.py +0 -0
  401. /package/{skills → .agents/skills}/e-code-review/scripts/test_grok_code_review.py +0 -0
  402. /package/{skills → .agents/skills}/e-simplify/SKILL.md +0 -0
  403. /package/{skills → .agents/skills}/emergencies/SKILL.md +0 -0
  404. /package/{skills → .agents/skills}/everything-search/AGENTS.md +0 -0
  405. /package/{skills → .agents/skills}/everything-search/SKILL.md +0 -0
  406. /package/{skills → .agents/skills}/fresh-branch/AGENTS.md +0 -0
  407. /package/{skills → .agents/skills}/fresh-branch/SKILL.md +0 -0
  408. /package/{skills → .agents/skills}/fresh-branch/scripts/create_fresh_branch.py +0 -0
  409. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_git_commands.py +0 -0
  410. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/__init__.py +0 -0
  411. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +0 -0
  412. /package/{skills → .agents/skills}/fresh-branch/scripts/pytest.ini +0 -0
  413. /package/{skills → .agents/skills}/fresh-branch/scripts/test_create_fresh_branch.py +0 -0
  414. /package/{skills → .agents/skills}/fresh-branch/scripts/test_fresh_branch_git_commands.py +0 -0
  415. /package/{skills → .agents/skills}/grok-spawn/AGENTS.md +0 -0
  416. /package/{skills → .agents/skills}/grok-spawn/SKILL.md +0 -0
  417. /package/{skills → .agents/skills}/grok-spawn/reference/flag-profiles.md +0 -0
  418. /package/{skills → .agents/skills}/grok-spawn/reference/worker-briefs.md +0 -0
  419. /package/{skills → .agents/skills}/grokify/SKILL.md +0 -0
  420. /package/{skills → .agents/skills}/grokify/capability-claims.test.mjs +0 -0
  421. /package/{skills → .agents/skills}/grokify/evals/parse-payload.test.mjs +0 -0
  422. /package/{skills → .agents/skills}/grokify/evals/run-capability-evals.mjs +0 -0
  423. /package/{skills → .agents/skills}/grokify/templates/handoff-template.md +0 -0
  424. /package/{skills → .agents/skills}/issue-tracker/SKILL.md +0 -0
  425. /package/{skills → .agents/skills}/issue-tracker/reference/epic-and-sub-issue-model.md +0 -0
  426. /package/{skills → .agents/skills}/issue-tracker/reference/handoff-schema.md +0 -0
  427. /package/{skills → .agents/skills}/issue-tracker/reference/operation-matrix.md +0 -0
  428. /package/{skills → .agents/skills}/orchestrator/SKILL.md +0 -0
  429. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate.py +0 -0
  430. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/__init__.py +0 -0
  431. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/__init__.py +0 -0
  432. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/constants.py +0 -0
  433. /package/{skills → .agents/skills}/orchestrator/scripts/test_status_gate.py +0 -0
  434. /package/{skills → .agents/skills}/orchestrator-refresh/SKILL.md +0 -0
  435. /package/{skills → .agents/skills}/plan-to-pr/SKILL.md +0 -0
  436. /package/{skills → .agents/skills}/plan-to-pr/reference/final-validation-tasks.md +0 -0
  437. /package/{skills → .agents/skills}/plan-to-pr/reference/model-routing.md +0 -0
  438. /package/{skills → .agents/skills}/plan-to-pr/reference/packet-contract.md +0 -0
  439. /package/{skills → .agents/skills}/plan-to-pr/reference/packet-schema.json +0 -0
  440. /package/{skills → .agents/skills}/plan-to-pr/reference/process-inventory.md +0 -0
  441. /package/{skills → .agents/skills}/plan-to-pr/reference/review-loop.md +0 -0
  442. /package/{skills → .agents/skills}/plan-to-pr/reference/run-record.schema.json +0 -0
  443. /package/{skills → .agents/skills}/plan-to-pr/reference/self-audit-tasks.md +0 -0
  444. /package/{skills → .agents/skills}/plan-to-pr/reference/task-seeds.md +0 -0
  445. /package/{skills → .agents/skills}/plan-to-pr/reference/task-ticket.md +0 -0
  446. /package/{skills → .agents/skills}/plan-to-pr/scripts/config/__init__.py +0 -0
  447. /package/{skills → .agents/skills}/plan-to-pr/scripts/config/constants.py +0 -0
  448. /package/{skills → .agents/skills}/plan-to-pr/scripts/create_packet.py +0 -0
  449. /package/{skills → .agents/skills}/plan-to-pr/scripts/load_skill_constants.py +0 -0
  450. /package/{skills → .agents/skills}/plan-to-pr/scripts/test_create_packet.py +0 -0
  451. /package/{skills → .agents/skills}/plan-to-pr/scripts/test_validate_packet.py +0 -0
  452. /package/{skills → .agents/skills}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
  453. /package/{skills → .agents/skills}/plan-to-pr/scripts/test_validate_run.py +0 -0
  454. /package/{skills → .agents/skills}/plan-to-pr/scripts/validate_packet.py +0 -0
  455. /package/{skills → .agents/skills}/plan-to-pr/scripts/validate_protocol.py +0 -0
  456. /package/{skills → .agents/skills}/plan-to-pr/scripts/validate_run.py +0 -0
  457. /package/{skills → .agents/skills}/plan-to-pr/test_skill_contract.py +0 -0
  458. /package/{skills → .agents/skills}/plan-to-pr/test_task_ticket_contract.py +0 -0
  459. /package/{skills → .agents/skills}/pr-converge/AGENTS.md +0 -0
  460. /package/{skills → .agents/skills}/pr-converge/SKILL.md +0 -0
  461. /package/{skills → .agents/skills}/pr-converge/pr_converge_skill_constants/__init__.py +0 -0
  462. /package/{skills → .agents/skills}/pr-converge/reference/AGENTS.md +0 -0
  463. /package/{skills → .agents/skills}/pr-converge/reference/convergence-gates.md +0 -0
  464. /package/{skills → .agents/skills}/pr-converge/reference/examples.md +0 -0
  465. /package/{skills → .agents/skills}/pr-converge/reference/fix-protocol.md +0 -0
  466. /package/{skills → .agents/skills}/pr-converge/reference/ground-rules.md +0 -0
  467. /package/{skills → .agents/skills}/pr-converge/reference/multi-pr-orchestration.md +0 -0
  468. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/AGENTS.md +0 -0
  469. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
  470. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
  471. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-push.md +0 -0
  472. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
  473. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
  474. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
  475. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
  476. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
  477. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
  478. /package/{skills → .agents/skills}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
  479. /package/{skills → .agents/skills}/pr-converge/reference/per-tick.md +0 -0
  480. /package/{skills → .agents/skills}/pr-converge/reference/progress-checklist.md +0 -0
  481. /package/{skills → .agents/skills}/pr-converge/reference/state-schema.md +0 -0
  482. /package/{skills → .agents/skills}/pr-converge/reference/stop-conditions.md +0 -0
  483. /package/{skills → .agents/skills}/pr-converge/scripts/AGENTS.md +0 -0
  484. /package/{skills → .agents/skills}/pr-converge/scripts/README.md +0 -0
  485. /package/{skills → .agents/skills}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
  486. /package/{skills → .agents/skills}/pr-converge/scripts/check_bugbot_ci.py +0 -0
  487. /package/{skills → .agents/skills}/pr-converge/scripts/check_convergence.py +0 -0
  488. /package/{skills → .agents/skills}/pr-converge/scripts/check_convergence_availability.py +0 -0
  489. /package/{skills → .agents/skills}/pr-converge/scripts/check_convergence_gates.py +0 -0
  490. /package/{skills → .agents/skills}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
  491. /package/{skills → .agents/skills}/pr-converge/scripts/check_pending_reviews.py +0 -0
  492. /package/{skills → .agents/skills}/pr-converge/scripts/conftest.py +0 -0
  493. /package/{skills → .agents/skills}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
  494. /package/{skills → .agents/skills}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
  495. /package/{skills → .agents/skills}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
  496. /package/{skills → .agents/skills}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
  497. /package/{skills → .agents/skills}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
  498. /package/{skills → .agents/skills}/pr-converge/scripts/post_fix_reply.py +0 -0
  499. /package/{skills → .agents/skills}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
  500. /package/{skills → .agents/skills}/pr-converge/scripts/pr_converge_scripts_constants/__init__.py +0 -0
  501. /package/{skills → .agents/skills}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
  502. /package/{skills → .agents/skills}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
  503. /package/{skills → .agents/skills}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
  504. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
  505. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence.py +0 -0
  506. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
  507. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
  508. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
  509. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
  510. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
  511. /package/{skills → .agents/skills}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
  512. /package/{skills → .agents/skills}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
  513. /package/{skills → .agents/skills}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
  514. /package/{skills → .agents/skills}/pr-converge/test_portable_pacer_gate.py +0 -0
  515. /package/{skills → .agents/skills}/pr-converge/test_step5_host_branch.py +0 -0
  516. /package/{skills → .agents/skills}/pr-converge/workflows/AGENTS.md +0 -0
  517. /package/{skills → .agents/skills}/pr-converge/workflows/schedule-wakeup-loop.md +0 -0
  518. /package/{skills → .agents/skills}/pr-fix-protocol/SKILL.md +0 -0
  519. /package/{skills → .agents/skills}/pr-loop-cloud-transport/SKILL.md +0 -0
  520. /package/{skills → .agents/skills}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
  521. /package/{skills → .agents/skills}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
  522. /package/{skills → .agents/skills}/pr-loop-lifecycle/SKILL.md +0 -0
  523. /package/{skills → .agents/skills}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
  524. /package/{skills → .agents/skills}/privacy-hygiene/SKILL.md +0 -0
  525. /package/{skills → .agents/skills}/privacy-hygiene/reference/sweep-procedure.md +0 -0
  526. /package/{skills → .agents/skills}/prototype/SKILL.md +0 -0
  527. /package/{skills → .agents/skills}/prototype/reference/honest-limitations.md +0 -0
  528. /package/{skills → .agents/skills}/prototype/reference/promotion-tasks.md +0 -0
  529. /package/{skills → .agents/skills}/prototype/scripts/build_sandbox_settings.py +0 -0
  530. /package/{skills → .agents/skills}/prototype/scripts/conftest.py +0 -0
  531. /package/{skills → .agents/skills}/prototype/scripts/launch_sandbox.py +0 -0
  532. /package/{skills → .agents/skills}/prototype/scripts/probe_sandbox_safety.py +0 -0
  533. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/__init__.py +0 -0
  534. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  535. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -0
  536. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -0
  537. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -0
  538. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -0
  539. /package/{skills → .agents/skills}/prototype/scripts/test_build_sandbox_settings.py +0 -0
  540. /package/{skills → .agents/skills}/prototype/scripts/test_launch_sandbox.py +0 -0
  541. /package/{skills → .agents/skills}/prototype/workflows/promotion.md +0 -0
  542. /package/{skills → .agents/skills}/prototype/workflows/sandbox.md +0 -0
  543. /package/{skills → .agents/skills}/rebase/AGENTS.md +0 -0
  544. /package/{skills → .agents/skills}/rebase/SKILL.md +0 -0
  545. /package/{skills → .agents/skills}/recall/AGENTS.md +0 -0
  546. /package/{skills → .agents/skills}/recall/SKILL.md +0 -0
  547. /package/{skills → .agents/skills}/release-notes-html/SKILL.md +0 -0
  548. /package/{skills → .agents/skills}/remember/AGENTS.md +0 -0
  549. /package/{skills → .agents/skills}/remember/SKILL.md +0 -0
  550. /package/{skills → .agents/skills}/reviewer-gates/SKILL.md +0 -0
  551. /package/{skills → .agents/skills}/reviews/SKILL.md +0 -0
  552. /package/{skills → .agents/skills}/session-log/AGENTS.md +0 -0
  553. /package/{skills → .agents/skills}/session-log/SKILL.md +0 -0
  554. /package/{skills → .agents/skills}/session-log/templates/frontmatter.md +0 -0
  555. /package/{skills → .agents/skills}/session-tidy/AGENTS.md +0 -0
  556. /package/{skills → .agents/skills}/session-tidy/SKILL.md +0 -0
  557. /package/{skills → .agents/skills}/show/SKILL.md +0 -0
  558. /package/{skills → .agents/skills}/show/references/accessibility.md +0 -0
  559. /package/{skills → .agents/skills}/show/references/art.md +0 -0
  560. /package/{skills → .agents/skills}/show/references/charts.md +0 -0
  561. /package/{skills → .agents/skills}/show/references/core-design.md +0 -0
  562. /package/{skills → .agents/skills}/show/references/erds.md +0 -0
  563. /package/{skills → .agents/skills}/show/references/flowcharts.md +0 -0
  564. /package/{skills → .agents/skills}/show/references/host-and-html.md +0 -0
  565. /package/{skills → .agents/skills}/show/references/illustrative-diagrams.md +0 -0
  566. /package/{skills → .agents/skills}/show/references/interaction.md +0 -0
  567. /package/{skills → .agents/skills}/show/references/mockups.md +0 -0
  568. /package/{skills → .agents/skills}/show/references/quality-gates.md +0 -0
  569. /package/{skills → .agents/skills}/show/references/structural-diagrams.md +0 -0
  570. /package/{skills → .agents/skills}/show/references/subject-inventory.md +0 -0
  571. /package/{skills → .agents/skills}/show/references/svg-contract.md +0 -0
  572. /package/{skills → .agents/skills}/show/routing.yaml +0 -0
  573. /package/{skills → .agents/skills}/show/samples/pr1262-v2.svg +0 -0
  574. /package/{skills → .agents/skills}/show/scripts/README.md +0 -0
  575. /package/{skills → .agents/skills}/show/scripts/validate-artifact.py +0 -0
  576. /package/{skills → .agents/skills}/show/scripts/validate-package.py +0 -0
  577. /package/{skills → .agents/skills}/show/templates/html-widget.html +0 -0
  578. /package/{skills → .agents/skills}/show/templates/svg-base.svg +0 -0
  579. /package/{skills → .agents/skills}/show/tests/fixtures/css-var.svg +0 -0
  580. /package/{skills → .agents/skills}/show/tests/fixtures/dead-ref.svg +0 -0
  581. /package/{skills → .agents/skills}/show/tests/fixtures/filled-glyph.svg +0 -0
  582. /package/{skills → .agents/skills}/show/tests/fixtures/inherited-fill.svg +0 -0
  583. /package/{skills → .agents/skills}/show/tests/fixtures/invalid.svg +0 -0
  584. /package/{skills → .agents/skills}/show/tests/fixtures/large-canvas.svg +0 -0
  585. /package/{skills → .agents/skills}/show/tests/fixtures/unfilled-connector.svg +0 -0
  586. /package/{skills → .agents/skills}/show/tests/fixtures/valid.html +0 -0
  587. /package/{skills → .agents/skills}/show/tests/test_validate-artifact.py +0 -0
  588. /package/{skills → .agents/skills}/show/tests/test_validators.py +0 -0
  589. /package/{skills → .agents/skills}/show/workflows/create-visual.md +0 -0
  590. /package/{skills → .agents/skills}/show/workflows/review-visual.md +0 -0
  591. /package/{skills → .agents/skills}/skill-builder/AGENTS.md +0 -0
  592. /package/{skills → .agents/skills}/skill-builder/SKILL.md +0 -0
  593. /package/{skills → .agents/skills}/skill-builder/references/AGENTS.md +0 -0
  594. /package/{skills → .agents/skills}/skill-builder/references/delegation-map.md +0 -0
  595. /package/{skills → .agents/skills}/skill-builder/references/description-field.md +0 -0
  596. /package/{skills → .agents/skills}/skill-builder/references/progressive-disclosure.md +0 -0
  597. /package/{skills → .agents/skills}/skill-builder/references/self-audit-checklist.md +0 -0
  598. /package/{skills → .agents/skills}/skill-builder/references/skill-modularity.md +0 -0
  599. /package/{skills → .agents/skills}/skill-builder/references/skill-types.md +0 -0
  600. /package/{skills → .agents/skills}/skill-builder/references/thariq-x-post-skills.json +0 -0
  601. /package/{skills → .agents/skills}/skill-builder/templates/AGENTS.md +0 -0
  602. /package/{skills → .agents/skills}/skill-builder/templates/gap-analysis.md +0 -0
  603. /package/{skills → .agents/skills}/skill-builder/workflows/AGENTS.md +0 -0
  604. /package/{skills → .agents/skills}/skill-builder/workflows/improve-skill.md +0 -0
  605. /package/{skills → .agents/skills}/skill-builder/workflows/new-skill.md +0 -0
  606. /package/{skills → .agents/skills}/skill-builder/workflows/polish-skill.md +0 -0
  607. /package/{skills → .agents/skills}/small-cl/SKILL.md +0 -0
  608. /package/{skills → .agents/skills}/split-pr/SKILL.md +0 -0
  609. /package/{skills → .agents/skills}/split-pr/reference/path-layers.md +0 -0
  610. /package/{skills → .agents/skills}/split-pr/reference/split-further-loop.md +0 -0
  611. /package/{skills → .agents/skills}/split-pr/reference/splitting-principles.md +0 -0
  612. /package/{skills → .agents/skills}/split-pr/scripts/analyze_pr.py +0 -0
  613. /package/{skills → .agents/skills}/split-pr/scripts/categorize_files.py +0 -0
  614. /package/{skills → .agents/skills}/split-pr/scripts/config/__init__.py +0 -0
  615. /package/{skills → .agents/skills}/split-pr/scripts/config/dependency_constants.py +0 -0
  616. /package/{skills → .agents/skills}/split-pr/scripts/config/git_operations_constants.py +0 -0
  617. /package/{skills → .agents/skills}/split-pr/scripts/config/packing_constants.py +0 -0
  618. /package/{skills → .agents/skills}/split-pr/scripts/config/plan_constants.py +0 -0
  619. /package/{skills → .agents/skills}/split-pr/scripts/config/split_pr_constants.py +0 -0
  620. /package/{skills → .agents/skills}/split-pr/scripts/execute_split_slices.py +0 -0
  621. /package/{skills → .agents/skills}/split-pr/scripts/pack_files_into_slices.py +0 -0
  622. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
  623. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_git_operations.py +0 -0
  624. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_layer_order.py +0 -0
  625. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_paginate.py +0 -0
  626. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_process_runner.py +0 -0
  627. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_script_types.py +0 -0
  628. /package/{skills → .agents/skills}/split-pr/scripts/split_pr_title.py +0 -0
  629. /package/{skills → .agents/skills}/split-pr/scripts/test_analyze_pr.py +0 -0
  630. /package/{skills → .agents/skills}/split-pr/scripts/test_categorize_files.py +0 -0
  631. /package/{skills → .agents/skills}/split-pr/scripts/test_categorize_files_packing.py +0 -0
  632. /package/{skills → .agents/skills}/split-pr/scripts/test_execute_split_slices.py +0 -0
  633. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
  634. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
  635. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
  636. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_paginate.py +0 -0
  637. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_script_types.py +0 -0
  638. /package/{skills → .agents/skills}/split-pr/scripts/test_split_pr_title.py +0 -0
  639. /package/{skills → .agents/skills}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
  640. /package/{skills → .agents/skills}/split-pr/scripts/test_verify_plan.py +0 -0
  641. /package/{skills → .agents/skills}/split-pr/scripts/test_verify_plan_contract.py +0 -0
  642. /package/{skills → .agents/skills}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
  643. /package/{skills → .agents/skills}/split-pr/scripts/verify_dependency_graph.py +0 -0
  644. /package/{skills → .agents/skills}/split-pr/scripts/verify_plan.py +0 -0
  645. /package/{skills → .agents/skills}/task-build/AGENTS.md +0 -0
  646. /package/{skills → .agents/skills}/task-build/SKILL.md +0 -0
  647. /package/{skills → .agents/skills}/task-build/reference/tool-routing.md +0 -0
  648. /package/{skills → .agents/skills}/team-advisor/SKILL.md +0 -0
  649. /package/{skills → .agents/skills}/team-advisor/reference/advisor-docs-review.md +0 -0
  650. /package/{skills → .agents/skills}/update/AGENTS.md +0 -0
  651. /package/{skills → .agents/skills}/update/SKILL.md +0 -0
  652. /package/{skills → .agents/skills}/usage-pause/SKILL.md +0 -0
  653. /package/{skills → .agents/skills}/usage-pause/scripts/resolve_usage_window.py +0 -0
  654. /package/{skills → .agents/skills}/usage-pause/scripts/test_resolve_usage_window.py +0 -0
  655. /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/__init__.py +0 -0
  656. /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/resolve_usage_window_constants.py +0 -0
@@ -0,0 +1,186 @@
1
+ /**
2
+ * End-to-end install layout: skills and agents live under the agents home,
3
+ * and the Claude lookup paths are directory pointers to that home.
4
+ */
5
+
6
+ import { test } from 'node:test';
7
+ import { strict as assert } from 'node:assert';
8
+ import { execFileSync } from 'node:child_process';
9
+ import {
10
+ existsSync,
11
+ lstatSync,
12
+ mkdirSync,
13
+ mkdtempSync,
14
+ readFileSync,
15
+ realpathSync,
16
+ rmSync,
17
+ writeFileSync,
18
+ } from 'node:fs';
19
+ import { tmpdir } from 'node:os';
20
+ import { dirname, join } from 'node:path';
21
+ import { fileURLToPath } from 'node:url';
22
+ import { CONTENT_DIRECTORIES } from './install.mjs';
23
+ import {
24
+ MANAGED_AGENTS_DIRECTORY_NAME,
25
+ MANAGED_SKILLS_DIRECTORY_NAME,
26
+ } from './install-constants.mjs';
27
+ import { isDirectoryPointerTo } from './publish-directory-pointer.mjs';
28
+
29
+ const THIS_DIRECTORY = dirname(fileURLToPath(import.meta.url));
30
+ const INSTALLER_PATH = join(THIS_DIRECTORY, 'install.mjs');
31
+ const PACKAGE_DIRECTORY = dirname(THIS_DIRECTORY);
32
+ const SHIPPED_SKILL_NAME = 'privacy-hygiene';
33
+ const SHIPPED_AGENT_FILE_NAME = 'clean-coder.md';
34
+ const PERSONAL_SKILL_NAME = 'my-notes';
35
+
36
+ /**
37
+ * @param {string} homeDirectory
38
+ * @param {string[]} extraArguments
39
+ * @returns {string}
40
+ */
41
+ function runInstaller(homeDirectory, extraArguments) {
42
+ return execFileSync('node', [INSTALLER_PATH, ...extraArguments], {
43
+ cwd: PACKAGE_DIRECTORY,
44
+ encoding: 'utf8',
45
+ env: {
46
+ ...process.env,
47
+ HOME: homeDirectory,
48
+ USERPROFILE: homeDirectory,
49
+ GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
50
+ CODEX_HOME: join(homeDirectory, '.codex'),
51
+ },
52
+ });
53
+ }
54
+
55
+ test('CONTENT_DIRECTORIES omits agents because that tree installs to the agents home', () => {
56
+ assert.equal(CONTENT_DIRECTORIES.includes(MANAGED_AGENTS_DIRECTORY_NAME), false);
57
+ });
58
+
59
+ test('a full install writes skills and agents under .agents and points .claude at them', () => {
60
+ const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-home-'));
61
+ const claudeHome = join(homeDirectory, '.claude');
62
+ const agentsHome = join(homeDirectory, '.agents');
63
+ const skillsInstallDirectory = join(agentsHome, MANAGED_SKILLS_DIRECTORY_NAME);
64
+ const agentsInstallDirectory = join(agentsHome, MANAGED_AGENTS_DIRECTORY_NAME);
65
+ const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
66
+ const agentsLookupDirectory = join(claudeHome, MANAGED_AGENTS_DIRECTORY_NAME);
67
+ try {
68
+ runInstaller(homeDirectory, []);
69
+
70
+ const canonicalSkillFile = join(
71
+ skillsInstallDirectory, SHIPPED_SKILL_NAME, 'SKILL.md',
72
+ );
73
+ const lookupSkillFile = join(
74
+ skillsLookupDirectory, SHIPPED_SKILL_NAME, 'SKILL.md',
75
+ );
76
+ const canonicalAgentFile = join(agentsInstallDirectory, SHIPPED_AGENT_FILE_NAME);
77
+ const lookupAgentFile = join(agentsLookupDirectory, SHIPPED_AGENT_FILE_NAME);
78
+
79
+ assert.equal(existsSync(canonicalSkillFile), true, 'skill file lives under .agents/skills');
80
+ assert.equal(existsSync(canonicalAgentFile), true, 'agent file lives under .agents/agents');
81
+ assert.equal(lstatSync(skillsLookupDirectory).isSymbolicLink(), true);
82
+ assert.equal(lstatSync(agentsLookupDirectory).isSymbolicLink(), true);
83
+ assert.equal(
84
+ isDirectoryPointerTo(skillsLookupDirectory, skillsInstallDirectory),
85
+ true,
86
+ );
87
+ assert.equal(
88
+ isDirectoryPointerTo(agentsLookupDirectory, agentsInstallDirectory),
89
+ true,
90
+ );
91
+ assert.equal(
92
+ readFileSync(lookupSkillFile, 'utf8'),
93
+ readFileSync(canonicalSkillFile, 'utf8'),
94
+ );
95
+ assert.equal(realpathSync(lookupSkillFile), realpathSync(canonicalSkillFile));
96
+ assert.equal(
97
+ readFileSync(lookupAgentFile, 'utf8'),
98
+ readFileSync(canonicalAgentFile, 'utf8'),
99
+ );
100
+ assert.equal(realpathSync(lookupAgentFile), realpathSync(canonicalAgentFile));
101
+ assert.equal(
102
+ lstatSync(skillsInstallDirectory).isSymbolicLink(),
103
+ false,
104
+ 'the agents-home skills directory is a real directory',
105
+ );
106
+ assert.equal(
107
+ lstatSync(agentsInstallDirectory).isSymbolicLink(),
108
+ false,
109
+ 'the agents-home agents directory is a real directory',
110
+ );
111
+ } finally {
112
+ rmSync(homeDirectory, { recursive: true, force: true });
113
+ }
114
+ });
115
+
116
+ test('a real skills directory from an older install lands in .agents and stays readable through the pointer', () => {
117
+ const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-relocate-'));
118
+ const claudeHome = join(homeDirectory, '.claude');
119
+ const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
120
+ const personalSkillFile = join(
121
+ skillsLookupDirectory, PERSONAL_SKILL_NAME, 'notes.md',
122
+ );
123
+ try {
124
+ mkdirSync(join(skillsLookupDirectory, PERSONAL_SKILL_NAME), { recursive: true });
125
+ writeFileSync(personalSkillFile, 'keep this personal skill\n');
126
+
127
+ runInstaller(homeDirectory, []);
128
+
129
+ const canonicalPersonalFile = join(
130
+ homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
131
+ PERSONAL_SKILL_NAME, 'notes.md',
132
+ );
133
+ assert.equal(lstatSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME)).isSymbolicLink(), true);
134
+ assert.equal(existsSync(canonicalPersonalFile), true);
135
+ assert.equal(
136
+ readFileSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md'), 'utf8'),
137
+ 'keep this personal skill\n',
138
+ );
139
+ assert.equal(
140
+ realpathSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md')),
141
+ realpathSync(canonicalPersonalFile),
142
+ );
143
+ } finally {
144
+ rmSync(homeDirectory, { recursive: true, force: true });
145
+ }
146
+ });
147
+
148
+ test('uninstall removes managed skill files from the agents home and leaves a personal skill reachable through the pointer', () => {
149
+ const homeDirectory = mkdtempSync(join(tmpdir(), 'cdev-agents-uninstall-'));
150
+ const claudeHome = join(homeDirectory, '.claude');
151
+ const skillsLookupDirectory = join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME);
152
+ try {
153
+ mkdirSync(join(skillsLookupDirectory, PERSONAL_SKILL_NAME), { recursive: true });
154
+ writeFileSync(
155
+ join(skillsLookupDirectory, PERSONAL_SKILL_NAME, 'notes.md'),
156
+ 'keep this personal skill\n',
157
+ );
158
+ runInstaller(homeDirectory, []);
159
+ runInstaller(homeDirectory, ['--uninstall']);
160
+
161
+ const shippedSkillFile = join(
162
+ homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
163
+ SHIPPED_SKILL_NAME, 'SKILL.md',
164
+ );
165
+ const personalSkillFile = join(
166
+ homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME,
167
+ PERSONAL_SKILL_NAME, 'notes.md',
168
+ );
169
+ assert.equal(existsSync(shippedSkillFile), false);
170
+ assert.equal(existsSync(personalSkillFile), true);
171
+ assert.equal(
172
+ isDirectoryPointerTo(
173
+ join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME),
174
+ join(homeDirectory, '.agents', MANAGED_SKILLS_DIRECTORY_NAME),
175
+ ),
176
+ true,
177
+ 'the lookup pointer stays so a personal skill remains discoverable',
178
+ );
179
+ assert.equal(
180
+ readFileSync(join(claudeHome, MANAGED_SKILLS_DIRECTORY_NAME, PERSONAL_SKILL_NAME, 'notes.md'), 'utf8'),
181
+ 'keep this personal skill\n',
182
+ );
183
+ } finally {
184
+ rmSync(homeDirectory, { recursive: true, force: true });
185
+ }
186
+ });
package/bin/install.mjs CHANGED
@@ -20,6 +20,7 @@ import {
20
20
  SKIPPED_SOURCE_FILE_EXTENSIONS,
21
21
  RUN_BACKUP_DIRECTORY_NAME_PATTERN,
22
22
  MANAGED_SKILLS_DIRECTORY_NAME,
23
+ MANAGED_AGENTS_DIRECTORY_NAME,
23
24
  MANAGED_HOOKS_DIRECTORY_NAME,
24
25
  SETTINGS_FILE_NAME,
25
26
  CODEX_RULES_PACKAGE_DIRECTORY_NAME,
@@ -31,6 +32,12 @@ import {
31
32
  parseExplicitTargetFromArgv,
32
33
  isAllowedInstallDestination,
33
34
  } from './resolve-install-root.mjs';
35
+ import {
36
+ resolvePackageManagedDirectory,
37
+ } from './resolve-package-managed-directory.mjs';
38
+ import {
39
+ ensureDirectoryPointer,
40
+ } from './publish-directory-pointer.mjs';
34
41
  import {
35
42
  parseInstallTargetSelectionFromArgv,
36
43
  resolveInstallTargets,
@@ -67,6 +74,7 @@ const INSTALL_ROOT_RESOLUTION = resolveInstallRoot({
67
74
  })(),
68
75
  });
69
76
  const CLAUDE_HOME = INSTALL_ROOT_RESOLUTION.managedRoot;
77
+ const AGENTS_HOME = INSTALL_ROOT_RESOLUTION.agentsHome;
70
78
  const MANIFEST_FILE = INSTALL_ROOT_RESOLUTION.manifestFilePath;
71
79
  const MYPY_INI_INSTALL_PATH = INSTALL_ROOT_RESOLUTION.mypyIniInstallPath;
72
80
  const PACKAGE_NAME = 'claude-dev-env';
@@ -92,18 +100,21 @@ const INSTALL_TARGET_IDENTITY = (() => {
92
100
  }
93
101
  })();
94
102
 
95
- export const CONTENT_DIRECTORIES = ['rules', 'docs', 'commands', 'agents', 'system-prompts', 'scripts', '_shared', 'audit-rubrics'];
103
+ export const CONTENT_DIRECTORIES = ['rules', 'docs', 'commands', 'system-prompts', 'scripts', '_shared', 'audit-rubrics'];
96
104
 
97
105
  /**
98
- * Every top-level directory under ~/.claude the installer writes into: the
99
- * content directories plus the two it fills through their own copy loops. The
100
- * uninstall purge walks this list to find the root a recorded file belongs to and
101
- * to drop a managed directory the purge empties, and the full-install stale-file
102
- * prune walks it to give each root its own diff.
106
+ * Every top-level lookup directory the installer writes into under ~/.claude:
107
+ * the content directories plus skills, agents, and hooks. Skills and agents
108
+ * live under the agents home; `~/.claude/skills` and `~/.claude/agents` are
109
+ * directory pointers to that home. The uninstall purge walks this list to find
110
+ * the root a recorded file belongs to and to drop a managed directory the purge
111
+ * empties, and the full-install stale-file prune walks it to give each root its
112
+ * own diff.
103
113
  */
104
114
  export const MANAGED_TOP_LEVEL_DIRECTORY_NAMES = [
105
115
  ...CONTENT_DIRECTORIES,
106
116
  MANAGED_SKILLS_DIRECTORY_NAME,
117
+ MANAGED_AGENTS_DIRECTORY_NAME,
107
118
  MANAGED_HOOKS_DIRECTORY_NAME,
108
119
  ];
109
120
 
@@ -249,7 +260,10 @@ function discoverDependencyGroups() {
249
260
  description: dependencyPackageJson.description || dependencyName,
250
261
  packageRoot: dependencyRoot,
251
262
  };
252
- const skillsDirectory = join(dependencyRoot, MANAGED_SKILLS_DIRECTORY_NAME);
263
+ const skillsDirectory = resolvePackageManagedDirectory(
264
+ dependencyRoot,
265
+ MANAGED_SKILLS_DIRECTORY_NAME,
266
+ );
253
267
  if (existsSync(skillsDirectory)) {
254
268
  group.skills = readdirSync(skillsDirectory, { withFileTypes: true })
255
269
  .filter(entry => entry.isDirectory())
@@ -752,6 +766,10 @@ function owningManagedRoot(installedFilePath) {
752
766
  const managedRoot = join(CLAUDE_HOME, directoryName);
753
767
  if (isInsideDirectory(resolvedPath, managedRoot)) return managedRoot;
754
768
  }
769
+ for (const directoryName of [MANAGED_SKILLS_DIRECTORY_NAME, MANAGED_AGENTS_DIRECTORY_NAME]) {
770
+ const agentsRoot = join(AGENTS_HOME, directoryName);
771
+ if (isInsideDirectory(resolvedPath, agentsRoot)) return agentsRoot;
772
+ }
755
773
  const codexRulesDirectory = INSTALL_ROOT_RESOLUTION.codexRulesInstallDirectory;
756
774
  if (isInsideDirectory(resolvedPath, codexRulesDirectory)) return codexRulesDirectory;
757
775
  const cursorInstallDirectory = INSTALL_ROOT_RESOLUTION.cursorInstallDirectory;
@@ -759,6 +777,25 @@ function owningManagedRoot(installedFilePath) {
759
777
  return null;
760
778
  }
761
779
 
780
+ /**
781
+ * Publish `~/.claude/skills` and `~/.claude/agents` as directory pointers to
782
+ * the agents home.
783
+ *
784
+ * Skills and agents live under `~/.agents` (or the per-root agents home).
785
+ * Claude Code discovers them at the lookup paths under the managed Claude root,
786
+ * so those two paths are pointers. A real directory from an older install at a
787
+ * lookup path is merged into the agents home before the pointer is written.
788
+ *
789
+ * @returns {string[]} The two lookup paths this run published.
790
+ */
791
+ function publishSkillAndAgentLookupPointers() {
792
+ const skillsPointer = INSTALL_ROOT_RESOLUTION.skillsLookupDirectory;
793
+ const agentsPointer = INSTALL_ROOT_RESOLUTION.agentsLookupDirectory;
794
+ ensureDirectoryPointer(skillsPointer, INSTALL_ROOT_RESOLUTION.skillsInstallDirectory);
795
+ ensureDirectoryPointer(agentsPointer, INSTALL_ROOT_RESOLUTION.agentsInstallDirectory);
796
+ return [skillsPointer, agentsPointer];
797
+ }
798
+
762
799
  /**
763
800
  * Report whether a path the prior manifest recorded is still a plain file this
764
801
  * run may move.
@@ -1974,6 +2011,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
1974
2011
  console.log(`\nInstalling ${PACKAGE_NAME} (${groupLabel})...\n`);
1975
2012
  console.log(` Python: ${pythonCommand}`);
1976
2013
  mkdirSync(CLAUDE_HOME, { recursive: true });
2014
+ const publishedPointerPaths = publishSkillAndAgentLookupPointers();
1977
2015
 
1978
2016
  const activeGroups = selectedGroups
1979
2017
  ? selectedGroups.map(groupName => ({ groupName, ...INSTALL_GROUPS[groupName] }))
@@ -2047,6 +2085,27 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2047
2085
  }
2048
2086
  }
2049
2087
  }
2088
+ const shouldCopyAgents = !allowedDirectories
2089
+ || allowedDirectories.has(MANAGED_AGENTS_DIRECTORY_NAME);
2090
+ if (shouldCopyAgents) {
2091
+ for (const sourceRoot of allSourceRoots) {
2092
+ const agentsSource = resolvePackageManagedDirectory(
2093
+ sourceRoot,
2094
+ MANAGED_AGENTS_DIRECTORY_NAME,
2095
+ );
2096
+ if (!existsSync(agentsSource)) continue;
2097
+ const agentsDestination = INSTALL_ROOT_RESOLUTION.agentsLookupDirectory;
2098
+ const stats = copyTree(agentsSource, agentsDestination);
2099
+ if (!summary[MANAGED_AGENTS_DIRECTORY_NAME]) {
2100
+ summary[MANAGED_AGENTS_DIRECTORY_NAME] = stats;
2101
+ } else {
2102
+ summary[MANAGED_AGENTS_DIRECTORY_NAME].created += stats.created;
2103
+ summary[MANAGED_AGENTS_DIRECTORY_NAME].updated += stats.updated;
2104
+ summary[MANAGED_AGENTS_DIRECTORY_NAME].paths.push(...stats.paths);
2105
+ }
2106
+ allInstalledFiles.push(...stats.paths);
2107
+ }
2108
+ }
2050
2109
  const shouldInstallCodexRules = !selectedGroups
2051
2110
  || activeGroups.some((eachGroup) => eachGroup.includeCodexRules);
2052
2111
  if (shouldInstallCodexRules) {
@@ -2077,7 +2136,10 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2077
2136
  const installedSkillNames = new Set();
2078
2137
  const copiedSkillNames = new Set();
2079
2138
  for (const sourceRoot of allSourceRoots) {
2080
- const skillsSource = join(sourceRoot, MANAGED_SKILLS_DIRECTORY_NAME);
2139
+ const skillsSource = resolvePackageManagedDirectory(
2140
+ sourceRoot,
2141
+ MANAGED_SKILLS_DIRECTORY_NAME,
2142
+ );
2081
2143
  if (!existsSync(skillsSource)) continue;
2082
2144
  const skillDirs = readdirSync(skillsSource, { withFileTypes: true }).filter(entry => entry.isDirectory());
2083
2145
  for (const skillDir of skillDirs) {
@@ -2096,7 +2158,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2096
2158
  }
2097
2159
  summary.skills = { created: skillsCreated, updated: skillsUpdated, pruned: 0, paths: skillPaths };
2098
2160
  allInstalledFiles.push(...skillPaths);
2099
- syncWrittenPaths(allInstalledFiles);
2161
+ syncWrittenPaths([...allInstalledFiles, ...publishedPointerPaths]);
2100
2162
  throwIfFault(FAULT_PHASES.AFTER_FILE_STAGING);
2101
2163
  throwIfFault(FAULT_PHASES.BEFORE_DURABLE_PROMOTION);
2102
2164
  const shouldInstallAnyHooks = shouldInstallAllHooks || (allowedHookFiles && allowedHookFiles.size > 0);
@@ -2131,7 +2193,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2131
2193
  console.log(` Hook files: ${totalHooksCreated} new, ${totalHooksUpdated} updated`);
2132
2194
  summary.hookGroups = totalHookGroups;
2133
2195
  console.log(` Hook groups: ${totalHookGroups} merged into settings.json`);
2134
- syncWrittenPaths(allInstalledFiles);
2196
+ syncWrittenPaths([...allInstalledFiles, ...publishedPointerPaths]);
2135
2197
  throwIfFault(FAULT_PHASES.AFTER_SETTINGS_WRITE);
2136
2198
 
2137
2199
  console.warn(
@@ -2153,7 +2215,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2153
2215
  console.warn(` Git hooks: ${gitHookInstallationResult.hooksPathConfigurationResult.reason}`);
2154
2216
  }
2155
2217
  console.log(` Git hook shims: ${gitHookInstallationResult.createdShimPaths.length} files (pre-commit, pre-push, post-commit)`);
2156
- syncWrittenPaths(allInstalledFiles);
2218
+ syncWrittenPaths([...allInstalledFiles, ...publishedPointerPaths]);
2157
2219
  throwIfFault(FAULT_PHASES.AFTER_GIT_CONFIG);
2158
2220
  throwIfFault(FAULT_PHASES.AFTER_LINK_PUBLICATION);
2159
2221
 
@@ -2173,7 +2235,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2173
2235
  console.warn(` ${mypyIniInstallResult.expectedLine}`);
2174
2236
  }
2175
2237
  } else {
2176
- syncWrittenPaths(allInstalledFiles);
2238
+ syncWrittenPaths([...allInstalledFiles, ...publishedPointerPaths]);
2177
2239
  throwIfFault(FAULT_PHASES.AFTER_SETTINGS_WRITE);
2178
2240
  throwIfFault(FAULT_PHASES.AFTER_GIT_CONFIG);
2179
2241
  throwIfFault(FAULT_PHASES.AFTER_LINK_PUBLICATION);
@@ -2192,7 +2254,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2192
2254
  );
2193
2255
  }
2194
2256
 
2195
- const claudeHubSource = join(PACKAGE_ROOT, 'CLAUDE.md');
2257
+ const claudeHubSource = join(PACKAGE_ROOT, '.claude', 'CLAUDE.md');
2196
2258
  if (existsSync(claudeHubSource)) {
2197
2259
  const claudeHubDest = join(CLAUDE_HOME, 'CLAUDE.md');
2198
2260
  const backupPath = backupHubBeforeOverwrite(claudeHubDest, claudeHubSource, 'CLAUDE.md');
@@ -2258,7 +2320,7 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2258
2320
  ? { deny: managedPermissionDenyEntries }
2259
2321
  : null,
2260
2322
  );
2261
- syncWrittenPaths([...allInstalledFiles, MANIFEST_FILE, plan.settingsPath]);
2323
+ syncWrittenPaths([...allInstalledFiles, MANIFEST_FILE, plan.settingsPath, ...publishedPointerPaths]);
2262
2324
  throwIfFault(FAULT_PHASES.AFTER_MANIFEST_WRITE);
2263
2325
  console.log(`\nInstalled ${PACKAGE_NAME}:`);
2264
2326
  for (const directory of CONTENT_DIRECTORIES) {
@@ -2275,6 +2337,10 @@ function executeInstallPlanMutations(plan, transactionHelpers) {
2275
2337
  const { created } = summary.cursorRules;
2276
2338
  console.log(` cursor-rules: ${created} generated files`);
2277
2339
  }
2340
+ if (summary[MANAGED_AGENTS_DIRECTORY_NAME]) {
2341
+ const { created, updated } = summary[MANAGED_AGENTS_DIRECTORY_NAME];
2342
+ console.log(` ${MANAGED_AGENTS_DIRECTORY_NAME}: ${created + updated} files (${created} new, ${updated} updated)`);
2343
+ }
2278
2344
  if (summary.skills) {
2279
2345
  const { created, updated, pruned } = summary.skills;
2280
2346
  const staleClause = pruned > 0 ? `, ${pruned} stale moved aside` : '';
@@ -2405,7 +2471,7 @@ function executeUninstallPlan(plan, helpers = {}) {
2405
2471
  }
2406
2472
  if (plan.skippedFiles.length > 0) {
2407
2473
  console.warn(
2408
- ` ${plan.skippedFiles.length} manifest record(s) skipped — each names a path outside ${CLAUDE_HOME}, outside ${MYPY_INI_INSTALL_PATH}, outside ${INSTALL_ROOT_RESOLUTION.codexRulesInstallDirectory}, and outside ${INSTALL_ROOT_RESOLUTION.cursorInstallDirectory}`,
2474
+ ` ${plan.skippedFiles.length} manifest record(s) skipped — each names a path outside ${CLAUDE_HOME}, outside ${MYPY_INI_INSTALL_PATH}, outside ${INSTALL_ROOT_RESOLUTION.codexRulesInstallDirectory}, outside ${INSTALL_ROOT_RESOLUTION.cursorInstallDirectory}, and outside ${AGENTS_HOME}`,
2409
2475
  );
2410
2476
  }
2411
2477
  throwIfFault(FAULT_PHASES.AFTER_FILE_STAGING);
@@ -2453,6 +2519,9 @@ function executeUninstallPlan(plan, helpers = {}) {
2453
2519
  }
2454
2520
  } catch { /* leave non-empty dirs */ }
2455
2521
  }
2522
+ removeEmptyDirectoryTree(INSTALL_ROOT_RESOLUTION.skillsInstallDirectory);
2523
+ removeEmptyDirectoryTree(INSTALL_ROOT_RESOLUTION.agentsInstallDirectory);
2524
+ removeEmptyDirectoryTree(AGENTS_HOME);
2456
2525
  console.log(`\nRemoved ${removed} files.\n`);
2457
2526
  return removed;
2458
2527
  }
@@ -2571,6 +2640,7 @@ Examples:
2571
2640
  npx ${PACKAGE_NAME} --profiles editor,mel --only core
2572
2641
 
2573
2642
  Install location: ~/.claude/ by default; CLAUDE_CONFIG_DIR or --target selects another managed root.
2643
+ Skills and agents live under ~/.agents (sibling of ~/.claude). ~/.claude/skills and ~/.claude/agents are directory pointers to that home.
2574
2644
  Named profiles resolve under LLM_SETTINGS_PROFILES_ROOT or ~/.claude-profiles/<directoryName>.
2575
2645
  Codex exec-policy files copy into ~/.codex/rules, or CODEX_HOME/rules when CODEX_HOME is set.
2576
2646
  Cursor rule files generate into ~/.cursor/rules as stem-named mdc files, one per Claude rule.
@@ -180,6 +180,7 @@ test('update plan marks purge and lists E2 mutation kinds; journal omits hooks',
180
180
  assert.equal(plan.shouldPurgeBeforeReinstall, true);
181
181
  const allMutations = describeInstallMutations(plan);
182
182
  assert.ok(allMutations.includes('purge_managed_installation'));
183
+ assert.ok(allMutations.includes('publish_directory_pointers'));
183
184
  assert.ok(allMutations.includes('merge_hooks_settings'));
184
185
  assert.ok(allMutations.includes('write_manifest'));
185
186
  assert.ok(Object.isFrozen(allMutations));
@@ -11,11 +11,13 @@ import { fileURLToPath } from 'node:url';
11
11
  import { CODEX_RULES_SHIPPED_FILE_NAME } from './install-constants.mjs';
12
12
  import {
13
13
  resolveInstallRoot,
14
+ resolveAgentsHome,
14
15
  isPathWithinManagedRoot,
15
16
  isAllowedInstallDestination,
16
17
  parseExplicitTargetFromArgv,
17
18
  CLAUDE_CONFIG_DIR_ENVIRONMENT_VARIABLE,
18
19
  DEFAULT_CLAUDE_DIRECTORY_NAME,
20
+ DEFAULT_AGENTS_DIRECTORY_NAME,
19
21
  } from './resolve-install-root.mjs';
20
22
 
21
23
  const BIN_DIRECTORY = fileURLToPath(new URL('.', import.meta.url));
@@ -30,6 +32,23 @@ test('default target remains join(homeDirectory, .claude)', () => {
30
32
  });
31
33
  assert.equal(resolution.managedRoot, resolve(join(homeDirectory, DEFAULT_CLAUDE_DIRECTORY_NAME)));
32
34
  assert.equal(resolution.source, 'default-home');
35
+ assert.equal(resolution.agentsHome, resolve(join(homeDirectory, DEFAULT_AGENTS_DIRECTORY_NAME)));
36
+ assert.equal(
37
+ resolution.skillsInstallDirectory,
38
+ join(resolution.agentsHome, 'skills'),
39
+ );
40
+ assert.equal(
41
+ resolution.skillsLookupDirectory,
42
+ join(resolution.managedRoot, 'skills'),
43
+ );
44
+ assert.equal(
45
+ resolution.agentsInstallDirectory,
46
+ join(resolution.agentsHome, 'agents'),
47
+ );
48
+ assert.equal(
49
+ resolution.agentsLookupDirectory,
50
+ join(resolution.managedRoot, 'agents'),
51
+ );
33
52
  });
34
53
 
35
54
  test('CLAUDE_CONFIG_DIR selects the profile root over the home default', () => {
@@ -98,6 +117,20 @@ test('declared external mypy.ini is allowed; unrelated external paths are not',
98
117
  ),
99
118
  true,
100
119
  );
120
+ assert.equal(
121
+ isAllowedInstallDestination(
122
+ join(resolution.skillsInstallDirectory, 'privacy-hygiene', 'SKILL.md'),
123
+ resolution,
124
+ ),
125
+ true,
126
+ );
127
+ assert.equal(
128
+ isAllowedInstallDestination(
129
+ join(resolution.agentsInstallDirectory, 'clean-coder.md'),
130
+ resolution,
131
+ ),
132
+ true,
133
+ );
101
134
  });
102
135
 
103
136
  test('parseExplicitTargetFromArgv reads --target and --target=', () => {
@@ -143,7 +176,27 @@ test('installer destinations for disposable main, profile-a, and profile-b stay
143
176
  isAllowedInstallDestination(resolution.mypyIniInstallPath, resolution),
144
177
  true,
145
178
  );
179
+ assert.equal(
180
+ isAllowedInstallDestination(
181
+ join(resolution.skillsInstallDirectory, 'fixture-skill', 'SKILL.md'),
182
+ resolution,
183
+ ),
184
+ true,
185
+ `${eachProfileId}: skills install directory is an allowed destination`,
186
+ );
187
+ assert.equal(
188
+ resolution.agentsHome,
189
+ resolveAgentsHome(profileRoot),
190
+ );
191
+ assert.notEqual(
192
+ resolution.agentsHome,
193
+ resolve(join(homeDirectory, DEFAULT_AGENTS_DIRECTORY_NAME)),
194
+ `${eachProfileId}: a profile root keeps its own agents home`,
195
+ );
146
196
  }
197
+ const profileAHome = resolveAgentsHome(join(runRoot, 'profile-a'));
198
+ const profileBHome = resolveAgentsHome(join(runRoot, 'profile-b'));
199
+ assert.notEqual(profileAHome, profileBHome);
147
200
  } finally {
148
201
  rmSync(runRoot, { recursive: true, force: true });
149
202
  }
@@ -176,6 +176,15 @@ test('CONTENT_DIRECTORIES includes _shared so installer copies _shared/pr-loop/
176
176
  });
177
177
 
178
178
 
179
+ test('CONTENT_DIRECTORIES omits agents because that tree installs to the agents home', () => {
180
+ assert.equal(
181
+ CONTENT_DIRECTORIES.includes('agents'),
182
+ false,
183
+ 'agents copies into ~/.agents/agents; ~/.claude/agents is the lookup pointer',
184
+ );
185
+ });
186
+
187
+
179
188
  test('core includeDirectories ships _shared and scripts for advisor protocol and CLI fallback', () => {
180
189
  assert.ok(
181
190
  CORE_INCLUDE_DIRECTORIES.includes('_shared'),