agents-inc 0.162.0 → 0.164.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 (341) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{chunk-HRVPZMKK.js → chunk-2CQNPLVF.js} +35 -14
  3. package/dist/chunk-2CQNPLVF.js.map +1 -0
  4. package/dist/{chunk-VFZF7LVY.js → chunk-3WVH2CTK.js} +3 -3
  5. package/dist/{chunk-5J6DO4VW.js → chunk-4VL3CEOS.js} +3 -3
  6. package/dist/{chunk-QM3ZNOWJ.js → chunk-6MV4JOCL.js} +2 -2
  7. package/dist/{chunk-WIJM6BX6.js → chunk-7ANJQLPJ.js} +2 -2
  8. package/dist/{chunk-3JDVBHWO.js → chunk-7REKOTKG.js} +2 -2
  9. package/dist/{chunk-MI7LKLD7.js → chunk-ABAZMMG4.js} +2 -2
  10. package/dist/{chunk-XSM3IBMG.js → chunk-AOTCIUGX.js} +2 -2
  11. package/dist/{chunk-L65XGQKR.js → chunk-ARYNOWKF.js} +8 -8
  12. package/dist/{chunk-3QBOVV6A.js → chunk-AVK2HEKB.js} +5 -5
  13. package/dist/{chunk-3QBOVV6A.js.map → chunk-AVK2HEKB.js.map} +1 -1
  14. package/dist/{chunk-AQSMNUKJ.js → chunk-B3Y3QMWI.js} +4 -4
  15. package/dist/{chunk-ES7WGE32.js → chunk-B6FSLXYN.js} +3 -3
  16. package/dist/{chunk-S6GX7IJ2.js → chunk-DSL66I4N.js} +6 -6
  17. package/dist/{chunk-IMTWWA3N.js → chunk-ECURHW3T.js} +12 -12
  18. package/dist/{chunk-VEONZFTL.js → chunk-FLW25ORT.js} +3 -3
  19. package/dist/{chunk-53XPSAJ4.js → chunk-G2JJ5BO5.js} +17 -16
  20. package/dist/chunk-G2JJ5BO5.js.map +1 -0
  21. package/dist/{chunk-H2MDPOLG.js → chunk-JIERYE6B.js} +5 -5
  22. package/dist/{chunk-GFO55TMY.js → chunk-JU4ZGJ7A.js} +100 -24
  23. package/dist/chunk-JU4ZGJ7A.js.map +1 -0
  24. package/dist/{chunk-K26SBQLO.js → chunk-K5ITEA3I.js} +4 -4
  25. package/dist/{chunk-4KVJJJG2.js → chunk-LT5GXEB2.js} +6 -6
  26. package/dist/{chunk-2IMHZEIK.js → chunk-NKGYKOB7.js} +3 -3
  27. package/dist/{chunk-X6KXPRKI.js → chunk-NQXO4LR3.js} +4 -4
  28. package/dist/{chunk-ZFPQM63K.js → chunk-NTF4UXGK.js} +5 -5
  29. package/dist/{chunk-77YZFVQD.js → chunk-PHCPUQVR.js} +2 -2
  30. package/dist/{chunk-T2RPUNYP.js → chunk-Q4IRRVXK.js} +3 -3
  31. package/dist/{chunk-EN5MEPAS.js → chunk-QGUP3QJF.js} +5 -5
  32. package/dist/{chunk-MSUTHS2V.js → chunk-QZX7SYKU.js} +2 -2
  33. package/dist/{chunk-BR3TNSO3.js → chunk-RGYDFBCT.js} +4 -4
  34. package/dist/{chunk-4NAWM4OQ.js → chunk-S63LXWMC.js} +2 -2
  35. package/dist/{chunk-IV42Z63R.js → chunk-UITEKY2R.js} +19 -9
  36. package/dist/chunk-UITEKY2R.js.map +1 -0
  37. package/dist/{chunk-RMMEYCEA.js → chunk-URXIQE7I.js} +2 -2
  38. package/dist/{chunk-57YWAMNT.js → chunk-V5GLL2JB.js} +7 -7
  39. package/dist/{chunk-C53RJ7AA.js → chunk-X37UYIE3.js} +43 -41
  40. package/dist/chunk-X37UYIE3.js.map +1 -0
  41. package/dist/{chunk-J2YG7P7L.js → chunk-X4SSJZLY.js} +49 -6
  42. package/dist/chunk-X4SSJZLY.js.map +1 -0
  43. package/dist/{chunk-VEBEGZUV.js → chunk-XATLUKXK.js} +5 -5
  44. package/dist/{chunk-33ZKIYJM.js → chunk-XHPWTL4I.js} +3 -3
  45. package/dist/{chunk-UNASGGW2.js → chunk-XPDVAJDH.js} +69 -8
  46. package/dist/chunk-XPDVAJDH.js.map +1 -0
  47. package/dist/{chunk-FL2CJ5T5.js → chunk-YRS3QZP2.js} +3 -3
  48. package/dist/{chunk-FXL63LDL.js → chunk-ZVXGW2IC.js} +2 -2
  49. package/dist/commands/build/marketplace.js +7 -7
  50. package/dist/commands/build/plugins.js +7 -7
  51. package/dist/commands/compile.js +82 -30
  52. package/dist/commands/compile.js.map +1 -1
  53. package/dist/commands/doctor.js +10 -10
  54. package/dist/commands/doctor.js.map +1 -1
  55. package/dist/commands/edit.js +40 -38
  56. package/dist/commands/edit.js.map +1 -1
  57. package/dist/commands/eject.js +10 -10
  58. package/dist/commands/init.js +36 -36
  59. package/dist/commands/list.js +8 -8
  60. package/dist/commands/new/marketplace.js +7 -7
  61. package/dist/commands/search.js +10 -10
  62. package/dist/commands/share.js +8 -8
  63. package/dist/commands/uninstall.js +11 -11
  64. package/dist/commands/update.js +6 -6
  65. package/dist/components/common/removal-plan-confirm.js +2 -2
  66. package/dist/components/common/select-list.js +2 -2
  67. package/dist/components/wizard/category-grid.js +4 -4
  68. package/dist/components/wizard/checkbox-grid.js +4 -4
  69. package/dist/components/wizard/domain-selection.js +9 -9
  70. package/dist/components/wizard/run-wizard-session.js +26 -26
  71. package/dist/components/wizard/scroll-affordance.js +2 -2
  72. package/dist/components/wizard/skill-agent-summary.js +5 -5
  73. package/dist/components/wizard/source-grid.js +5 -5
  74. package/dist/components/wizard/stack-selection.js +7 -7
  75. package/dist/components/wizard/step-agents.js +8 -8
  76. package/dist/components/wizard/step-build.js +7 -7
  77. package/dist/components/wizard/step-confirm.js +9 -9
  78. package/dist/components/wizard/step-sources.js +8 -8
  79. package/dist/components/wizard/step-stack.js +8 -8
  80. package/dist/components/wizard/summary-panel.js +8 -8
  81. package/dist/components/wizard/toast.js +2 -2
  82. package/dist/components/wizard/wizard-layout.js +12 -12
  83. package/dist/components/wizard/wizard-tabs.js +2 -2
  84. package/dist/components/wizard/wizard.js +25 -25
  85. package/dist/hooks/init.js +36 -36
  86. package/dist/load-agent-defs-7IM3GBEQ.js +13 -0
  87. package/dist/recompile-project-agents-VR4NLGOU.js +17 -0
  88. package/dist/{source-loader-KAWB76OH.js → source-loader-GRBVNRAW.js} +4 -4
  89. package/dist/src/agents/_templates/agent.liquid +30 -122
  90. package/dist/src/agents/_templates/methodologies/operating-principles.liquid +27 -0
  91. package/dist/src/agents/developer/ai-developer/critical-reminders.md +9 -48
  92. package/dist/src/agents/developer/ai-developer/critical-requirements.md +29 -47
  93. package/dist/src/agents/developer/ai-developer/identity.md +31 -40
  94. package/dist/src/agents/developer/ai-developer/output.md +92 -245
  95. package/dist/src/agents/developer/ai-developer/playbook.md +116 -270
  96. package/dist/src/agents/developer/api-developer/critical-reminders.md +9 -40
  97. package/dist/src/agents/developer/api-developer/critical-requirements.md +19 -34
  98. package/dist/src/agents/developer/api-developer/identity.md +18 -33
  99. package/dist/src/agents/developer/api-developer/output.md +118 -255
  100. package/dist/src/agents/developer/api-developer/playbook.md +103 -284
  101. package/dist/src/agents/developer/cli-developer/critical-reminders.md +9 -45
  102. package/dist/src/agents/developer/cli-developer/critical-requirements.md +21 -39
  103. package/dist/src/agents/developer/cli-developer/identity.md +22 -36
  104. package/dist/src/agents/developer/cli-developer/output.md +72 -185
  105. package/dist/src/agents/developer/cli-developer/playbook.md +107 -307
  106. package/dist/src/agents/developer/web-developer/critical-reminders.md +9 -34
  107. package/dist/src/agents/developer/web-developer/critical-requirements.md +11 -30
  108. package/dist/src/agents/developer/web-developer/identity.md +15 -15
  109. package/dist/src/agents/developer/web-developer/output.md +67 -220
  110. package/dist/src/agents/developer/web-developer/playbook.md +93 -283
  111. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +6 -39
  112. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +6 -44
  113. package/dist/src/agents/meta/agent-summoner/identity.md +20 -23
  114. package/dist/src/agents/meta/agent-summoner/metadata.yaml +1 -1
  115. package/dist/src/agents/meta/agent-summoner/output.md +85 -261
  116. package/dist/src/agents/meta/agent-summoner/playbook.md +220 -1398
  117. package/dist/src/agents/meta/codex-keeper/critical-reminders.md +11 -32
  118. package/dist/src/agents/meta/codex-keeper/critical-requirements.md +32 -22
  119. package/dist/src/agents/meta/codex-keeper/identity.md +31 -32
  120. package/dist/src/agents/meta/codex-keeper/output.md +49 -335
  121. package/dist/src/agents/meta/codex-keeper/playbook.md +164 -1110
  122. package/dist/src/agents/meta/convention-keeper/critical-reminders.md +11 -26
  123. package/dist/src/agents/meta/convention-keeper/critical-requirements.md +36 -25
  124. package/dist/src/agents/meta/convention-keeper/identity.md +35 -21
  125. package/dist/src/agents/meta/convention-keeper/metadata.yaml +1 -1
  126. package/dist/src/agents/meta/convention-keeper/output.md +33 -123
  127. package/dist/src/agents/meta/convention-keeper/playbook.md +64 -144
  128. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +8 -71
  129. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +9 -73
  130. package/dist/src/agents/meta/skill-summoner/identity.md +18 -22
  131. package/dist/src/agents/meta/skill-summoner/metadata.yaml +1 -1
  132. package/dist/src/agents/meta/skill-summoner/output.md +164 -270
  133. package/dist/src/agents/meta/skill-summoner/playbook.md +150 -1398
  134. package/dist/src/agents/planning/pm/critical-requirements.md +23 -25
  135. package/dist/src/agents/planning/pm/identity.md +24 -23
  136. package/dist/src/agents/planning/pm/output.md +5 -9
  137. package/dist/src/agents/planning/pm/playbook.md +50 -140
  138. package/dist/src/agents/researcher/ai-researcher/critical-reminders.md +8 -53
  139. package/dist/src/agents/researcher/ai-researcher/critical-requirements.md +31 -26
  140. package/dist/src/agents/researcher/ai-researcher/identity.md +36 -77
  141. package/dist/src/agents/researcher/ai-researcher/output.md +44 -151
  142. package/dist/src/agents/researcher/ai-researcher/playbook.md +130 -394
  143. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +6 -38
  144. package/dist/src/agents/researcher/api-researcher/critical-requirements.md +15 -17
  145. package/dist/src/agents/researcher/api-researcher/identity.md +29 -63
  146. package/dist/src/agents/researcher/api-researcher/output.md +61 -153
  147. package/dist/src/agents/researcher/api-researcher/playbook.md +63 -140
  148. package/dist/src/agents/researcher/cli-researcher/critical-reminders.md +8 -45
  149. package/dist/src/agents/researcher/cli-researcher/critical-requirements.md +29 -24
  150. package/dist/src/agents/researcher/cli-researcher/identity.md +36 -78
  151. package/dist/src/agents/researcher/cli-researcher/output.md +22 -128
  152. package/dist/src/agents/researcher/cli-researcher/playbook.md +108 -263
  153. package/dist/src/agents/researcher/web-researcher/critical-reminders.md +5 -34
  154. package/dist/src/agents/researcher/web-researcher/critical-requirements.md +11 -16
  155. package/dist/src/agents/researcher/web-researcher/identity.md +28 -60
  156. package/dist/src/agents/researcher/web-researcher/output.md +41 -134
  157. package/dist/src/agents/researcher/web-researcher/playbook.md +48 -162
  158. package/dist/src/agents/reviewer/reviewer/critical-reminders.md +9 -22
  159. package/dist/src/agents/reviewer/reviewer/critical-requirements.md +24 -19
  160. package/dist/src/agents/reviewer/reviewer/identity.md +23 -20
  161. package/dist/src/agents/reviewer/reviewer/metadata.yaml +7 -2
  162. package/dist/src/agents/reviewer/reviewer/output.md +8 -26
  163. package/dist/src/agents/reviewer/reviewer/playbook.md +50 -91
  164. package/dist/src/agents/tester/ai-tester/critical-reminders.md +7 -40
  165. package/dist/src/agents/tester/ai-tester/critical-requirements.md +39 -31
  166. package/dist/src/agents/tester/ai-tester/identity.md +25 -40
  167. package/dist/src/agents/tester/ai-tester/output.md +8 -144
  168. package/dist/src/agents/tester/ai-tester/playbook.md +28 -40
  169. package/dist/src/agents/tester/api-tester/critical-reminders.md +8 -35
  170. package/dist/src/agents/tester/api-tester/critical-requirements.md +36 -25
  171. package/dist/src/agents/tester/api-tester/identity.md +18 -29
  172. package/dist/src/agents/tester/api-tester/metadata.yaml +1 -1
  173. package/dist/src/agents/tester/api-tester/output.md +3 -86
  174. package/dist/src/agents/tester/api-tester/playbook.md +10 -2
  175. package/dist/src/agents/tester/cli-tester/critical-reminders.md +7 -30
  176. package/dist/src/agents/tester/cli-tester/critical-requirements.md +29 -21
  177. package/dist/src/agents/tester/cli-tester/identity.md +25 -33
  178. package/dist/src/agents/tester/cli-tester/output.md +13 -105
  179. package/dist/src/agents/tester/cli-tester/playbook.md +8 -5
  180. package/dist/src/agents/tester/web-tester/critical-reminders.md +7 -25
  181. package/dist/src/agents/tester/web-tester/critical-requirements.md +25 -16
  182. package/dist/src/agents/tester/web-tester/identity.md +24 -30
  183. package/dist/src/agents/tester/web-tester/output.md +11 -116
  184. package/dist/src/agents/tester/web-tester/playbook.md +58 -221
  185. package/dist/stores/wizard-store.js +4 -4
  186. package/package.json +1 -1
  187. package/src/agents/_templates/agent.liquid +30 -122
  188. package/src/agents/_templates/methodologies/operating-principles.liquid +27 -0
  189. package/src/agents/developer/ai-developer/critical-reminders.md +9 -48
  190. package/src/agents/developer/ai-developer/critical-requirements.md +29 -47
  191. package/src/agents/developer/ai-developer/identity.md +31 -40
  192. package/src/agents/developer/ai-developer/output.md +92 -245
  193. package/src/agents/developer/ai-developer/playbook.md +116 -270
  194. package/src/agents/developer/api-developer/critical-reminders.md +9 -40
  195. package/src/agents/developer/api-developer/critical-requirements.md +19 -34
  196. package/src/agents/developer/api-developer/identity.md +18 -33
  197. package/src/agents/developer/api-developer/output.md +118 -255
  198. package/src/agents/developer/api-developer/playbook.md +103 -284
  199. package/src/agents/developer/cli-developer/critical-reminders.md +9 -45
  200. package/src/agents/developer/cli-developer/critical-requirements.md +21 -39
  201. package/src/agents/developer/cli-developer/identity.md +22 -36
  202. package/src/agents/developer/cli-developer/output.md +72 -185
  203. package/src/agents/developer/cli-developer/playbook.md +107 -307
  204. package/src/agents/developer/web-developer/critical-reminders.md +9 -34
  205. package/src/agents/developer/web-developer/critical-requirements.md +11 -30
  206. package/src/agents/developer/web-developer/identity.md +15 -15
  207. package/src/agents/developer/web-developer/output.md +67 -220
  208. package/src/agents/developer/web-developer/playbook.md +93 -283
  209. package/src/agents/meta/agent-summoner/critical-reminders.md +6 -39
  210. package/src/agents/meta/agent-summoner/critical-requirements.md +6 -44
  211. package/src/agents/meta/agent-summoner/identity.md +20 -23
  212. package/src/agents/meta/agent-summoner/metadata.yaml +1 -1
  213. package/src/agents/meta/agent-summoner/output.md +85 -261
  214. package/src/agents/meta/agent-summoner/playbook.md +220 -1398
  215. package/src/agents/meta/codex-keeper/critical-reminders.md +11 -32
  216. package/src/agents/meta/codex-keeper/critical-requirements.md +32 -22
  217. package/src/agents/meta/codex-keeper/identity.md +31 -32
  218. package/src/agents/meta/codex-keeper/output.md +49 -335
  219. package/src/agents/meta/codex-keeper/playbook.md +164 -1110
  220. package/src/agents/meta/convention-keeper/critical-reminders.md +11 -26
  221. package/src/agents/meta/convention-keeper/critical-requirements.md +36 -25
  222. package/src/agents/meta/convention-keeper/identity.md +35 -21
  223. package/src/agents/meta/convention-keeper/metadata.yaml +1 -1
  224. package/src/agents/meta/convention-keeper/output.md +33 -123
  225. package/src/agents/meta/convention-keeper/playbook.md +64 -144
  226. package/src/agents/meta/skill-summoner/critical-reminders.md +8 -71
  227. package/src/agents/meta/skill-summoner/critical-requirements.md +9 -73
  228. package/src/agents/meta/skill-summoner/identity.md +18 -22
  229. package/src/agents/meta/skill-summoner/metadata.yaml +1 -1
  230. package/src/agents/meta/skill-summoner/output.md +164 -270
  231. package/src/agents/meta/skill-summoner/playbook.md +150 -1398
  232. package/src/agents/planning/pm/critical-requirements.md +23 -25
  233. package/src/agents/planning/pm/identity.md +24 -23
  234. package/src/agents/planning/pm/output.md +5 -9
  235. package/src/agents/planning/pm/playbook.md +50 -140
  236. package/src/agents/researcher/ai-researcher/critical-reminders.md +8 -53
  237. package/src/agents/researcher/ai-researcher/critical-requirements.md +31 -26
  238. package/src/agents/researcher/ai-researcher/identity.md +36 -77
  239. package/src/agents/researcher/ai-researcher/output.md +44 -151
  240. package/src/agents/researcher/ai-researcher/playbook.md +130 -394
  241. package/src/agents/researcher/api-researcher/critical-reminders.md +6 -38
  242. package/src/agents/researcher/api-researcher/critical-requirements.md +15 -17
  243. package/src/agents/researcher/api-researcher/identity.md +29 -63
  244. package/src/agents/researcher/api-researcher/output.md +61 -153
  245. package/src/agents/researcher/api-researcher/playbook.md +63 -140
  246. package/src/agents/researcher/cli-researcher/critical-reminders.md +8 -45
  247. package/src/agents/researcher/cli-researcher/critical-requirements.md +29 -24
  248. package/src/agents/researcher/cli-researcher/identity.md +36 -78
  249. package/src/agents/researcher/cli-researcher/output.md +22 -128
  250. package/src/agents/researcher/cli-researcher/playbook.md +108 -263
  251. package/src/agents/researcher/web-researcher/critical-reminders.md +5 -34
  252. package/src/agents/researcher/web-researcher/critical-requirements.md +11 -16
  253. package/src/agents/researcher/web-researcher/identity.md +28 -60
  254. package/src/agents/researcher/web-researcher/output.md +41 -134
  255. package/src/agents/researcher/web-researcher/playbook.md +48 -162
  256. package/src/agents/reviewer/reviewer/critical-reminders.md +9 -22
  257. package/src/agents/reviewer/reviewer/critical-requirements.md +24 -19
  258. package/src/agents/reviewer/reviewer/identity.md +23 -20
  259. package/src/agents/reviewer/reviewer/metadata.yaml +7 -2
  260. package/src/agents/reviewer/reviewer/output.md +8 -26
  261. package/src/agents/reviewer/reviewer/playbook.md +50 -91
  262. package/src/agents/tester/ai-tester/critical-reminders.md +7 -40
  263. package/src/agents/tester/ai-tester/critical-requirements.md +39 -31
  264. package/src/agents/tester/ai-tester/identity.md +25 -40
  265. package/src/agents/tester/ai-tester/output.md +8 -144
  266. package/src/agents/tester/ai-tester/playbook.md +28 -40
  267. package/src/agents/tester/api-tester/critical-reminders.md +8 -35
  268. package/src/agents/tester/api-tester/critical-requirements.md +36 -25
  269. package/src/agents/tester/api-tester/identity.md +18 -29
  270. package/src/agents/tester/api-tester/metadata.yaml +1 -1
  271. package/src/agents/tester/api-tester/output.md +3 -86
  272. package/src/agents/tester/api-tester/playbook.md +10 -2
  273. package/src/agents/tester/cli-tester/critical-reminders.md +7 -30
  274. package/src/agents/tester/cli-tester/critical-requirements.md +29 -21
  275. package/src/agents/tester/cli-tester/identity.md +25 -33
  276. package/src/agents/tester/cli-tester/output.md +13 -105
  277. package/src/agents/tester/cli-tester/playbook.md +8 -5
  278. package/src/agents/tester/web-tester/critical-reminders.md +7 -25
  279. package/src/agents/tester/web-tester/critical-requirements.md +25 -16
  280. package/src/agents/tester/web-tester/identity.md +24 -30
  281. package/src/agents/tester/web-tester/output.md +11 -116
  282. package/src/agents/tester/web-tester/playbook.md +58 -221
  283. package/src/schemas/agent-frontmatter.schema.json +14 -0
  284. package/src/schemas/agent.schema.json +14 -0
  285. package/dist/chunk-53XPSAJ4.js.map +0 -1
  286. package/dist/chunk-C53RJ7AA.js.map +0 -1
  287. package/dist/chunk-GFO55TMY.js.map +0 -1
  288. package/dist/chunk-HRVPZMKK.js.map +0 -1
  289. package/dist/chunk-IV42Z63R.js.map +0 -1
  290. package/dist/chunk-J2YG7P7L.js.map +0 -1
  291. package/dist/chunk-UNASGGW2.js.map +0 -1
  292. package/dist/load-agent-defs-57YKPVQW.js +0 -13
  293. package/dist/recompile-project-agents-IQD3HRRS.js +0 -17
  294. package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +0 -135
  295. package/dist/src/agents/_templates/methodologies/context-management.liquid +0 -15
  296. package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +0 -150
  297. package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +0 -61
  298. package/dist/src/agents/_templates/methodologies/success-criteria.liquid +0 -121
  299. package/dist/src/agents/_templates/methodologies/write-verification.liquid +0 -43
  300. package/dist/src/agents/planning/pm/critical-reminders.md +0 -39
  301. package/src/agents/_templates/methodologies/anti-over-engineering.liquid +0 -135
  302. package/src/agents/_templates/methodologies/context-management.liquid +0 -15
  303. package/src/agents/_templates/methodologies/improvement-protocol.liquid +0 -150
  304. package/src/agents/_templates/methodologies/investigation-requirements.liquid +0 -61
  305. package/src/agents/_templates/methodologies/success-criteria.liquid +0 -121
  306. package/src/agents/_templates/methodologies/write-verification.liquid +0 -43
  307. package/src/agents/planning/pm/critical-reminders.md +0 -39
  308. /package/dist/{chunk-VFZF7LVY.js.map → chunk-3WVH2CTK.js.map} +0 -0
  309. /package/dist/{chunk-5J6DO4VW.js.map → chunk-4VL3CEOS.js.map} +0 -0
  310. /package/dist/{chunk-QM3ZNOWJ.js.map → chunk-6MV4JOCL.js.map} +0 -0
  311. /package/dist/{chunk-WIJM6BX6.js.map → chunk-7ANJQLPJ.js.map} +0 -0
  312. /package/dist/{chunk-3JDVBHWO.js.map → chunk-7REKOTKG.js.map} +0 -0
  313. /package/dist/{chunk-MI7LKLD7.js.map → chunk-ABAZMMG4.js.map} +0 -0
  314. /package/dist/{chunk-XSM3IBMG.js.map → chunk-AOTCIUGX.js.map} +0 -0
  315. /package/dist/{chunk-L65XGQKR.js.map → chunk-ARYNOWKF.js.map} +0 -0
  316. /package/dist/{chunk-AQSMNUKJ.js.map → chunk-B3Y3QMWI.js.map} +0 -0
  317. /package/dist/{chunk-ES7WGE32.js.map → chunk-B6FSLXYN.js.map} +0 -0
  318. /package/dist/{chunk-S6GX7IJ2.js.map → chunk-DSL66I4N.js.map} +0 -0
  319. /package/dist/{chunk-IMTWWA3N.js.map → chunk-ECURHW3T.js.map} +0 -0
  320. /package/dist/{chunk-VEONZFTL.js.map → chunk-FLW25ORT.js.map} +0 -0
  321. /package/dist/{chunk-H2MDPOLG.js.map → chunk-JIERYE6B.js.map} +0 -0
  322. /package/dist/{chunk-K26SBQLO.js.map → chunk-K5ITEA3I.js.map} +0 -0
  323. /package/dist/{chunk-4KVJJJG2.js.map → chunk-LT5GXEB2.js.map} +0 -0
  324. /package/dist/{chunk-2IMHZEIK.js.map → chunk-NKGYKOB7.js.map} +0 -0
  325. /package/dist/{chunk-X6KXPRKI.js.map → chunk-NQXO4LR3.js.map} +0 -0
  326. /package/dist/{chunk-ZFPQM63K.js.map → chunk-NTF4UXGK.js.map} +0 -0
  327. /package/dist/{chunk-77YZFVQD.js.map → chunk-PHCPUQVR.js.map} +0 -0
  328. /package/dist/{chunk-T2RPUNYP.js.map → chunk-Q4IRRVXK.js.map} +0 -0
  329. /package/dist/{chunk-EN5MEPAS.js.map → chunk-QGUP3QJF.js.map} +0 -0
  330. /package/dist/{chunk-MSUTHS2V.js.map → chunk-QZX7SYKU.js.map} +0 -0
  331. /package/dist/{chunk-BR3TNSO3.js.map → chunk-RGYDFBCT.js.map} +0 -0
  332. /package/dist/{chunk-4NAWM4OQ.js.map → chunk-S63LXWMC.js.map} +0 -0
  333. /package/dist/{chunk-RMMEYCEA.js.map → chunk-URXIQE7I.js.map} +0 -0
  334. /package/dist/{chunk-57YWAMNT.js.map → chunk-V5GLL2JB.js.map} +0 -0
  335. /package/dist/{chunk-VEBEGZUV.js.map → chunk-XATLUKXK.js.map} +0 -0
  336. /package/dist/{chunk-33ZKIYJM.js.map → chunk-XHPWTL4I.js.map} +0 -0
  337. /package/dist/{chunk-FL2CJ5T5.js.map → chunk-YRS3QZP2.js.map} +0 -0
  338. /package/dist/{chunk-FXL63LDL.js.map → chunk-ZVXGW2IC.js.map} +0 -0
  339. /package/dist/{load-agent-defs-57YKPVQW.js.map → load-agent-defs-7IM3GBEQ.js.map} +0 -0
  340. /package/dist/{recompile-project-agents-IQD3HRRS.js.map → recompile-project-agents-VR4NLGOU.js.map} +0 -0
  341. /package/dist/{source-loader-KAWB76OH.js.map → source-loader-GRBVNRAW.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  computeRowScrollTop
4
- } from "./chunk-MI7LKLD7.js";
4
+ } from "./chunk-ABAZMMG4.js";
5
5
  import {
6
6
  SCROLL_VIEWPORT
7
- } from "./chunk-IV42Z63R.js";
7
+ } from "./chunk-UITEKY2R.js";
8
8
 
9
9
  // src/cli/components/hooks/use-row-scroll.ts
10
10
  import { useRef } from "react";
@@ -24,4 +24,4 @@ function useRowScroll({
24
24
  export {
25
25
  useRowScroll
26
26
  };
27
- //# sourceMappingURL=chunk-FL2CJ5T5.js.map
27
+ //# sourceMappingURL=chunk-YRS3QZP2.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-OZXAJNLA.js";
5
5
  import {
6
6
  CLI_COLORS
7
- } from "./chunk-IV42Z63R.js";
7
+ } from "./chunk-UITEKY2R.js";
8
8
 
9
9
  // src/cli/components/common/removal-plan-confirm.tsx
10
10
  import "react";
@@ -58,4 +58,4 @@ var RemovalPlanConfirm = ({
58
58
  export {
59
59
  RemovalPlanConfirm
60
60
  };
61
- //# sourceMappingURL=chunk-FXL63LDL.js.map
61
+ //# sourceMappingURL=chunk-ZVXGW2IC.js.map
@@ -5,13 +5,13 @@ import {
5
5
  validateMarketplaceName,
6
6
  validateSkillIdNamespace,
7
7
  writeMarketplace
8
- } from "../../chunk-VEONZFTL.js";
8
+ } from "../../chunk-FLW25ORT.js";
9
9
  import {
10
10
  BaseCommand,
11
11
  EXIT_CODES
12
- } from "../../chunk-H2MDPOLG.js";
13
- import "../../chunk-2IMHZEIK.js";
14
- import "../../chunk-77YZFVQD.js";
12
+ } from "../../chunk-JIERYE6B.js";
13
+ import "../../chunk-NKGYKOB7.js";
14
+ import "../../chunk-PHCPUQVR.js";
15
15
  import {
16
16
  getErrorMessage,
17
17
  loadMarketplaceMatrix,
@@ -23,8 +23,8 @@ import {
23
23
  validateKebabCaseName,
24
24
  warn,
25
25
  writeFile
26
- } from "../../chunk-UNASGGW2.js";
27
- import "../../chunk-3QBOVV6A.js";
26
+ } from "../../chunk-XPDVAJDH.js";
27
+ import "../../chunk-AVK2HEKB.js";
28
28
  import {
29
29
  CATALOG_JSON,
30
30
  CLI_INVOKE_COMMAND,
@@ -33,7 +33,7 @@ import {
33
33
  PLUGINS_DIST_PATH,
34
34
  PLUGIN_MANIFEST_DIR,
35
35
  STANDARD_FILES
36
- } from "../../chunk-IV42Z63R.js";
36
+ } from "../../chunk-UITEKY2R.js";
37
37
  import "../../chunk-OI2H6M5I.js";
38
38
 
39
39
  // src/cli/commands/build/marketplace.ts
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  compileAllAgentPlugins,
4
4
  printAgentCompilationSummary
5
- } from "../../chunk-GFO55TMY.js";
5
+ } from "../../chunk-JU4ZGJ7A.js";
6
6
  import {
7
7
  BaseCommand
8
- } from "../../chunk-H2MDPOLG.js";
9
- import "../../chunk-2IMHZEIK.js";
10
- import "../../chunk-77YZFVQD.js";
8
+ } from "../../chunk-JIERYE6B.js";
9
+ import "../../chunk-NKGYKOB7.js";
10
+ import "../../chunk-PHCPUQVR.js";
11
11
  import {
12
12
  compileAllSkillPlugins,
13
13
  compileSkillPlugin,
@@ -16,12 +16,12 @@ import {
16
16
  readPluginManifest,
17
17
  remove,
18
18
  setVerbose
19
- } from "../../chunk-UNASGGW2.js";
20
- import "../../chunk-3QBOVV6A.js";
19
+ } from "../../chunk-XPDVAJDH.js";
20
+ import "../../chunk-AVK2HEKB.js";
21
21
  import {
22
22
  DIRS,
23
23
  PLUGINS_DIST_PATH
24
- } from "../../chunk-IV42Z63R.js";
24
+ } from "../../chunk-UITEKY2R.js";
25
25
  import "../../chunk-OI2H6M5I.js";
26
26
 
27
27
  // src/cli/commands/build/plugins.ts
@@ -2,21 +2,21 @@
2
2
  import {
3
3
  detectBothInstallations,
4
4
  reconcileTypesFromDisk
5
- } from "../chunk-C53RJ7AA.js";
5
+ } from "../chunk-X37UYIE3.js";
6
6
  import {
7
7
  compileAgents,
8
8
  discoverInstalledSkills
9
- } from "../chunk-HRVPZMKK.js";
9
+ } from "../chunk-2CQNPLVF.js";
10
10
  import {
11
11
  loadAgentDefs
12
- } from "../chunk-ES7WGE32.js";
13
- import "../chunk-GFO55TMY.js";
12
+ } from "../chunk-B6FSLXYN.js";
13
+ import "../chunk-JU4ZGJ7A.js";
14
14
  import {
15
15
  BaseCommand,
16
16
  EXIT_CODES
17
- } from "../chunk-H2MDPOLG.js";
18
- import "../chunk-2IMHZEIK.js";
19
- import "../chunk-77YZFVQD.js";
17
+ } from "../chunk-JIERYE6B.js";
18
+ import "../chunk-NKGYKOB7.js";
19
+ import "../chunk-PHCPUQVR.js";
20
20
  import {
21
21
  ConfigLoadError,
22
22
  ERROR_MESSAGES,
@@ -38,13 +38,13 @@ import {
38
38
  skillMetadataUnusableDetail,
39
39
  skillMetadataUnusableError,
40
40
  verbose
41
- } from "../chunk-UNASGGW2.js";
42
- import "../chunk-3QBOVV6A.js";
41
+ } from "../chunk-XPDVAJDH.js";
42
+ import "../chunk-AVK2HEKB.js";
43
43
  import {
44
44
  STANDARD_FILES,
45
45
  effectivelyExcludedSkillIds,
46
46
  isActiveAt
47
- } from "../chunk-IV42Z63R.js";
47
+ } from "../chunk-UITEKY2R.js";
48
48
  import "../chunk-OI2H6M5I.js";
49
49
 
50
50
  // src/cli/commands/compile.ts
@@ -210,26 +210,82 @@ var Compile = class _Compile extends BaseCommand {
210
210
  if (globalAgentCount === 0) return;
211
211
  this.log(globalScopedAgentsHint(globalAgentCount));
212
212
  }
213
+ /**
214
+ * Loads this pass's skills catalogue and returns it, seating the module-level
215
+ * singleton (`matrix` in `matrix-provider.ts`) on the way — which is what the
216
+ * RENDER needs, because `compileAgents` reaches the catalogue through
217
+ * `stacks-loader.ts`'s `statedUsageFor`/`liveCategoryOf` and those read the
218
+ * singleton directly rather than any value a caller threads through. Called
219
+ * first, before anything in the pass renders. Left unseated, the singleton stays
220
+ * at its process-start default (`BUILT_IN_MATRIX`, which never carries a local
221
+ * skill), so a locally-installed skill's stated `usageGuidance` silently falls
222
+ * back to the generic per-category placeholder — different bytes from what
223
+ * `install` last wrote, so a following `compile` rewrites every agent that
224
+ * carries one.
225
+ *
226
+ * Scoped to `pass.projectDir`, never the invoking `cwd`: a global pass must seat
227
+ * the global installation's own local skills, not the invoking directory's.
228
+ *
229
+ * `skipExtraSources: true` is NOT a divergence from the wizard's full
230
+ * multi-source load: extra-source loading only annotates each skill's
231
+ * `availableSources`/`activeSource` for wizard UI tagging — it never adds skills
232
+ * or categories to the matrix, and neither the render path nor the config-types
233
+ * writer ever reads those annotations, so the emitted output is byte-identical
234
+ * either way (pinned by the skipExtraSources parity test in
235
+ * local-installer.test.ts). Skipping avoids fetching every registered extra
236
+ * source (network on a cold cache, plus unreachable-remote warnings) on this
237
+ * offline compile path. `matrixOnly` keeps the default-source path itself
238
+ * offline too.
239
+ *
240
+ * The seated matrix is RETURNED as well as seated, and `null` on a failure, so
241
+ * the two halves can take the postures they each need. The RENDER degrades: it
242
+ * reads the singleton whatever happens, and falls back to the same
243
+ * category-placeholder behavior compile had before this seat existed. The type
244
+ * refresh ABORTS on `null` — it derives every union from the catalogue, so with
245
+ * none loaded it would narrow them to whatever the built-in catalogue happens
246
+ * to carry, dropping every marketplace-only and local category and, at global
247
+ * scope, propagating that into every registered project.
248
+ */
249
+ async seatMatrixForPass(projectDir) {
250
+ try {
251
+ const { matrix: seated } = await loadSkillsMatrixFromSource({
252
+ projectDir,
253
+ skipExtraSources: true,
254
+ matrixOnly: true
255
+ });
256
+ return seated;
257
+ } catch (error) {
258
+ this.warn(`Failed to load skills matrix for ${projectDir}: ${getErrorMessage(error)}`);
259
+ return null;
260
+ }
261
+ }
213
262
  /**
214
263
  * The documented hand-edit workflow is "edit config.ts, then run compile", and
215
264
  * the type unions in config-types.ts are derived from config.ts — so a compile
216
265
  * pass that leaves them untouched strands stale unions after a hand-edit.
217
266
  * Regenerates them from the scope's persisted config exactly as the wizard
218
267
  * write path would: standalone narrowed unions at global scope, import-and-
219
- * extend at project scope. `matrixOnly` keeps the default-source path offline.
220
- * A failed refresh downgrades to a warning — the compiled agents are already
221
- * written and remain valid; only the type unions may still be stale.
268
+ * extend at project scope. A failed refresh downgrades to a warning — the
269
+ * compiled agents are already written and remain valid; only the type unions
270
+ * may still be stale.
222
271
  *
223
- * `skipExtraSources: true` is NOT a divergence from the wizard's full
224
- * multi-source load: extra-source loading only annotates each skill's
225
- * `availableSources`/`activeSource` for wizard UI tagging — it never adds
226
- * skills or categories to the matrix, and the config-types writer never reads
227
- * those annotations, so the emitted types are byte-identical either way
228
- * (pinned by the skipExtraSources parity test in local-installer.test.ts).
229
- * Skipping avoids fetching every registered extra source (network on a cold
230
- * cache, plus unreachable-remote warnings) on this offline compile path.
272
+ * Takes the catalogue {@link seatMatrixForPass} returned rather than reading the
273
+ * singleton it seated, so this refresh cannot run against a seat that is not the
274
+ * one this pass asked for. `null` means the seat failed, and the refresh is
275
+ * skipped whole: every union here is DERIVED from the catalogue, so writing them
276
+ * without one is not a degraded answer but a wrong one — the unions narrow to
277
+ * the built-in catalogue's own categories, and `config.ts` beside them still
278
+ * keys its `stack` under the ones that just vanished, so the pair stops
279
+ * type-checking. Skipping falls under the same warning as any other failed
280
+ * refresh, for the same reason.
231
281
  */
232
- async refreshConfigTypes(pass, cwd) {
282
+ async refreshConfigTypes(pass, cwd, seatedMatrix) {
283
+ if (!seatedMatrix) {
284
+ this.warn(
285
+ configTypesRefreshFailed(`no skills catalogue could be loaded for ${pass.projectDir}`)
286
+ );
287
+ return;
288
+ }
233
289
  let report;
234
290
  try {
235
291
  const loaded = await loadProjectConfigFromDir(pass.projectDir);
@@ -239,15 +295,10 @@ var Compile = class _Compile extends BaseCommand {
239
295
  );
240
296
  return;
241
297
  }
242
- const { matrix } = await loadSkillsMatrixFromSource({
243
- projectDir: pass.projectDir,
244
- skipExtraSources: true,
245
- matrixOnly: true
246
- });
247
298
  report = await reconcileTypesFromDisk(
248
299
  pass.projectDir,
249
300
  loaded.config,
250
- { matrix, agents: pass.agents },
301
+ { matrix: seatedMatrix, agents: pass.agents },
251
302
  { currentProjectDir: cwd }
252
303
  );
253
304
  this.log(INFO_MESSAGES.CONFIG_TYPES_REFRESHED);
@@ -275,10 +326,11 @@ var Compile = class _Compile extends BaseCommand {
275
326
  this.log("");
276
327
  verbose(` Project: ${projectDir}`);
277
328
  verbose(` Agents: ${installation.agentsDir}`);
329
+ const seatedMatrix = await this.seatMatrixForPass(projectDir);
278
330
  const { allSkills, totalSkillCount } = await this.discoverAllSkills(projectDir);
279
331
  if (totalSkillCount === 0) {
280
332
  this.log(`No skills found for ${label.toLowerCase()} pass, skipping`);
281
- await this.refreshConfigTypes(params, cwd);
333
+ await this.refreshConfigTypes(params, cwd, seatedMatrix);
282
334
  return false;
283
335
  }
284
336
  await this.warnUnresolvedStackSkills(projectDir, allSkills);
@@ -319,7 +371,7 @@ var Compile = class _Compile extends BaseCommand {
319
371
  this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);
320
372
  this.handleError(error);
321
373
  }
322
- await this.refreshConfigTypes(params, cwd);
374
+ await this.refreshConfigTypes(params, cwd, seatedMatrix);
323
375
  this.log("");
324
376
  this.logSuccess(`${label} compile complete!`);
325
377
  this.log("");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport { unique } from \"remeda\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose } from \"../utils/logger\";\nimport {\n detectBothInstallations,\n type BothInstallations,\n loadAgentDefs,\n type AgentDefs,\n compileAgents,\n discoverInstalledSkills,\n type DiscoveredSkills,\n} from \"../lib/operations\";\nimport {\n ConfigLoadError,\n effectivelyExcludedSkillIds,\n isActiveAt,\n loadProjectConfig,\n loadProjectConfigFromDir,\n resolveSource,\n} from \"../lib/configuration\";\nimport { getStackSkillIds, resolveAgentConfigToSkills } from \"../lib/stacks\";\nimport { loadSkillsMatrixFromSource, type UnusableSkillMetadata } from \"../lib/loading\";\nimport { STANDARD_FILES } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport {\n ERROR_MESSAGES,\n STATUS_MESSAGES,\n INFO_MESSAGES,\n configTypesRefreshFailed,\n globalScopedAgentsHint,\n recompileSummary,\n registeredProjectUpdateSkipped,\n scopeBlockedStackAssignment,\n skillMetadataUnusableDetail,\n skillMetadataUnusableError,\n} from \"../utils/messages\";\nimport { reconcileTypesFromDisk, type GateReport } from \"../lib/config-gate/index.js\";\nimport type { Installation } from \"../lib/installation\";\nimport type { SkillScope } from \"../types/config\";\nimport type {\n AgentDefinition,\n AgentName,\n ProjectConfig,\n SkillDefinitionMap,\n SkillId,\n StackAgentConfig,\n} from \"../types\";\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. Compiles to the Claude plugin directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n ];\n\n static flags = {\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n setVerbose(flags.verbose);\n const cwd = process.cwd();\n\n const installations = await this.detectInstallations(cwd);\n await this.resolveAndLogSource(cwd);\n const agentDefs = await this.loadAgentDefsOrFail();\n await this.runCompilePasses(installations, agentDefs, cwd);\n }\n\n private async detectInstallations(cwd: string): Promise<BothInstallations> {\n let installations: BothInstallations;\n try {\n installations = await detectBothInstallations(cwd);\n } catch (error) {\n // A corrupt config (file present but unparseable) must not let compile run\n // config-less — that resurrects every deselected agent. Hard-error naming\n // the offending file before any compilation happens.\n if (error instanceof ConfigLoadError) {\n this.error(error.message, { exit: EXIT_CODES.ERROR });\n }\n throw error;\n }\n\n if (!installations.global && !installations.project) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n return installations;\n }\n\n /**\n * Names where the marketplace came from — the project's own config first, then the global\n * one, then the default. `compile` takes no `--marketplace`: it recompiles an installation\n * that already recorded which marketplace its skill references answer to, and reading\n * a different one would write agents against a catalogue config.ts does not name.\n */\n private async resolveAndLogSource(projectDir: string): Promise<void> {\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n // ABORT on an unreadable config, and unreachable with one: `detectInstallation` reads the\n // same file first and already hard-errors, at both scopes — verified by hand at both.\n // The posture is recorded anyway, because what makes it unreachable is a guard in another\n // command's private helper rather than anything visible from here.\n const sourceConfig = await resolveSource({ caller: \"stored\", projectDir });\n this.log(`Marketplace: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n }\n\n private async loadAgentDefsOrFail(): Promise<AgentDefs> {\n this.log(STATUS_MESSAGES.LOADING_AGENT_PARTIALS);\n try {\n const defs = await loadAgentDefs();\n this.log(\"Agent partials loaded\");\n verbose(` Agents: ${defs.agentSourcePaths.agentsDir}`);\n return defs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n this.handleError(error);\n }\n }\n\n private async runCompilePasses(\n installations: BothInstallations,\n agentDefs: AgentDefs,\n cwd: string,\n ): Promise<void> {\n const passes = buildCompilePasses(installations, cwd, agentDefs);\n\n let totalPassesWithSkills = 0;\n for (const pass of passes) {\n const hadSkills = await this.runCompilePass(pass, cwd);\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (totalPassesWithSkills === 0) {\n this.error(ERROR_MESSAGES.NO_SKILLS_TO_COMPILE, { exit: EXIT_CODES.ERROR });\n }\n }\n\n /**\n * Discovers what this pass compiles from, and refuses the run when any installed\n * skill's metadata.yaml exists but describes no skill — before a count is printed,\n * an agent is written or the type unions are regenerated. Skipping such a skill is\n * what the config-types pass already does; loading it anyway is what this pass\n * used to do, so a single run both loaded and skipped the same file.\n */\n private async discoverAllSkills(projectDir: string): Promise<DiscoveredSkills> {\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n const result = await discoverInstalledSkills(projectDir);\n if (result.unusableMetadata.length > 0) {\n this.refuseUnusableSkillMetadata(result.unusableMetadata);\n }\n if (result.totalSkillCount === 0) return result;\n this.log(formatDiscoveryMessage(result));\n return result;\n }\n\n /**\n * Names each offending file and its reason, then exits. The detail is LOGGED and\n * only the refusal is raised: oclif hard-wraps error text at the terminal width,\n * and a path broken across two lines is one nobody can copy.\n */\n private refuseUnusableSkillMetadata(entries: UnusableSkillMetadata[]): never {\n for (const entry of entries) {\n this.log(skillMetadataUnusableDetail(entry));\n }\n this.error(skillMetadataUnusableError(entries), { exit: EXIT_CODES.ERROR });\n }\n\n /**\n * A stack skill that is not among the discovered skills is dropped from every\n * agent that references it. The resolver only records that at verbose level, so\n * the default output would claim a successful recompile of an agent that no\n * longer matches config.ts. Name each dropped skill instead.\n */\n private async warnUnresolvedStackSkills(\n projectDir: string,\n allSkills: SkillDefinitionMap,\n ): Promise<void> {\n const loaded = await loadProjectConfig(projectDir);\n if (!loaded?.config.stack) return;\n\n const excludedIds = effectivelyExcludedSkillIds(loaded.config.skills);\n const unresolved = getStackSkillIds(loaded.config.stack).filter(\n (id) => !excludedIds.has(id) && !(id in allSkills),\n );\n\n for (const id of unresolved) {\n this.warn(\n `Skill '${id}' is configured but was not found — agents will be compiled without it.`,\n );\n }\n }\n\n /**\n * `config.ts` is the hand-editable half of the pair, so it can declare a pair the scope\n * rule forbids: a GLOBAL sub-agent whose stack carries a PROJECT-scoped skill. The\n * compile-time filter in `buildCompileAgents` drops that reference on the way to the\n * resolver and `compile` rewrites nothing in `config.ts`, so the row survives and is\n * dropped again on every future run — while the recompile summary reports a clean pass\n * over an agent that no longer carries what its own config says it does.\n *\n * The sibling of {@link warnUnresolvedStackSkills} one layer over: there the skill is\n * missing from disk, here it is present and unreachable from that sub-agent.\n */\n private async warnScopeDroppedStackPairs(projectDir: string): Promise<void> {\n const loaded = await loadProjectConfig(projectDir);\n if (!loaded?.config.stack) return;\n\n for (const [skillId, agentNames] of findScopeDroppedStackPairs(loaded.config)) {\n this.warn(scopeBlockedStackAssignment(agentNames, skillId));\n }\n }\n\n /**\n * The project pass compiled no agents, but the project config may still declare\n * global-scope agents whose stack lives in the global config. Without a pointer\n * the \"No agents to recompile\" line reads as a silent no-op after a global stack\n * change, so name the global context and the count.\n */\n private async hintGlobalScopedAgents(projectDir: string): Promise<void> {\n const loaded = await loadProjectConfigFromDir(projectDir);\n if (!loaded) return;\n\n const globalAgentCount = loaded.config.agents.filter(\n (agent) => !agent.excluded && agent.scope === \"global\",\n ).length;\n if (globalAgentCount === 0) return;\n\n this.log(globalScopedAgentsHint(globalAgentCount));\n }\n\n /**\n * The documented hand-edit workflow is \"edit config.ts, then run compile\", and\n * the type unions in config-types.ts are derived from config.ts — so a compile\n * pass that leaves them untouched strands stale unions after a hand-edit.\n * Regenerates them from the scope's persisted config exactly as the wizard\n * write path would: standalone narrowed unions at global scope, import-and-\n * extend at project scope. `matrixOnly` keeps the default-source path offline.\n * A failed refresh downgrades to a warning — the compiled agents are already\n * written and remain valid; only the type unions may still be stale.\n *\n * `skipExtraSources: true` is NOT a divergence from the wizard's full\n * multi-source load: extra-source loading only annotates each skill's\n * `availableSources`/`activeSource` for wizard UI tagging — it never adds\n * skills or categories to the matrix, and the config-types writer never reads\n * those annotations, so the emitted types are byte-identical either way\n * (pinned by the skipExtraSources parity test in local-installer.test.ts).\n * Skipping avoids fetching every registered extra source (network on a cold\n * cache, plus unreachable-remote warnings) on this offline compile path.\n */\n private async refreshConfigTypes(pass: CompilePass, cwd: string): Promise<void> {\n let report: GateReport;\n try {\n const loaded = await loadProjectConfigFromDir(pass.projectDir);\n if (!loaded) {\n verbose(\n `No config found at ${pass.projectDir} — skipping ${STANDARD_FILES.CONFIG_TYPES_TS} refresh`,\n );\n return;\n }\n\n const { matrix } = await loadSkillsMatrixFromSource({\n projectDir: pass.projectDir,\n skipExtraSources: true,\n matrixOnly: true,\n });\n // `cwd` is excluded from the fan-out, which only a global pass can perform:\n // whatever this invocation was run from is this command's own subject, so a\n // fan-out must never reach back into it.\n report = await reconcileTypesFromDisk(\n pass.projectDir,\n loaded.config,\n { matrix, agents: pass.agents },\n { currentProjectDir: cwd },\n );\n this.log(INFO_MESSAGES.CONFIG_TYPES_REFRESHED);\n } catch (error) {\n this.warn(configTypesRefreshFailed(getErrorMessage(error)));\n return;\n }\n\n this.reportPropagation(report);\n }\n\n /**\n * Renders the fan-out the refresh above performed. Kept out of the refresh's\n * catch on purpose: a project the fan-out could not reach is reported as that,\n * not as a failure to refresh the type unions — which did succeed.\n */\n private reportPropagation(report: GateReport): void {\n for (const skippedPath of report.propagated.skipped) {\n this.warn(registeredProjectUpdateSkipped(skippedPath));\n }\n this.reportPropagatedRecompile(report);\n }\n\n private async runCompilePass(params: CompilePass, cwd: string): Promise<boolean> {\n const { label, projectDir, installation, sourcePath, scopeFilter } = params;\n\n this.log(\"\");\n this.log(`Compiling ${label.toLowerCase()} agents...`);\n this.log(\"\");\n\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${installation.agentsDir}`);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills(projectDir);\n\n if (totalSkillCount === 0) {\n this.log(`No skills found for ${label.toLowerCase()} pass, skipping`);\n // The config loads independently of discovered skills: a hand-edited\n // config.ts can list skills while nothing is installed for this scope,\n // and its type unions must follow the config rather than stay stale.\n await this.refreshConfigTypes(params, cwd);\n return false;\n }\n\n await this.warnUnresolvedStackSkills(projectDir, allSkills);\n await this.warnScopeDroppedStackPairs(projectDir);\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await compileAgents({\n projectDir,\n sourcePath,\n skills: allSkills,\n pluginDir: projectDir,\n outputDir: installation.agentsDir,\n ...(scopeFilter !== undefined && { scopeFilter }),\n });\n\n const { compiled, rewritten, failed, warnings } = recompileResult;\n const summary = recompileSummary(\n rewritten.length,\n compiled.length - rewritten.length,\n `${label.toLowerCase()} agents`,\n );\n\n if (failed.length > 0) {\n this.log(`${summary} (${failed.length} failed)`);\n for (const warning of warnings) {\n this.warn(warning);\n }\n } else if (compiled.length > 0) {\n this.log(summary);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n if (label === \"Project\") {\n await this.hintGlobalScopedAgents(projectDir);\n }\n }\n\n if (compiled.length > 0) {\n verbose(` Compiled: ${compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n await this.refreshConfigTypes(params, cwd);\n\n this.log(\"\");\n this.logSuccess(`${label} compile complete!`);\n this.log(\"\");\n\n return true;\n }\n}\n\ntype CompilePass = {\n label: \"Global\" | \"Project\";\n projectDir: string;\n installation: Installation;\n sourcePath: string;\n agents: Partial<Record<AgentName, AgentDefinition>>;\n scopeFilter?: SkillScope;\n};\n\n/**\n * The single pass this invocation owns.\n *\n * A compile run inside a project is a PROJECT-scope operation and writes nothing\n * outside that project: it compiles the project's own agents and refreshes the\n * project's own type unions, and never the global install's or another\n * registered project's. Propagation is a global operation's consequence — the\n * global config is what every project's config inlines — and a project compile\n * is not one.\n *\n * The global pass is therefore reached only where no project installation is in\n * play: at the home directory (where `detectBothInstallations` returns no\n * project by construction), or in a directory that has no config of its own, so\n * the global install is the only thing there is to compile.\n *\n * `scopeFilter` still narrows the project pass whenever both installations\n * exist: the project's config inlines the global entries, so an unfiltered pass\n * would compile global-scoped agents into the project's own agents directory.\n */\nfunction buildCompilePasses(\n installations: BothInstallations,\n cwd: string,\n agentDefs: AgentDefs,\n): CompilePass[] {\n const { sourcePath, agents } = agentDefs;\n\n if (installations.project) {\n return [\n {\n label: \"Project\",\n projectDir: cwd,\n installation: installations.project,\n sourcePath,\n agents,\n ...(installations.hasBoth && { scopeFilter: \"project\" as const }),\n },\n ];\n }\n\n if (installations.global) {\n return [\n {\n label: \"Global\",\n projectDir: os.homedir(),\n installation: installations.global,\n sourcePath,\n agents,\n },\n ];\n }\n\n return [];\n}\n\n/**\n * Every project-scoped skill that a GLOBAL sub-agent's stack assigns to itself, with the\n * sub-agents that assign it — exactly the pairs `buildCompileAgents`' scope filter drops on\n * the way to the resolver.\n *\n * Grouped by skill rather than emitted per pair, so one sentence accounts for every\n * sub-agent one skill was kept away from.\n */\nfunction findScopeDroppedStackPairs(config: ProjectConfig): [SkillId, AgentName[]][] {\n const stack = config.stack ?? {};\n const globalAgentNames = config.agents\n .filter((agent) => isActiveAt(agent, \"global\"))\n .map((agent) => agent.name);\n const projectScopedIds = unique(\n config.skills.filter((skill) => isActiveAt(skill, \"project\")).map((skill) => skill.id),\n );\n\n return projectScopedIds\n .map((skillId): [SkillId, AgentName[]] => [\n skillId,\n globalAgentNames.filter((agentName) => stackAssignsSkill(stack[agentName], skillId)),\n ])\n .filter(([, agentNames]) => agentNames.length > 0);\n}\n\n/** True when this sub-agent's stack names the skill, in any of its categories. */\nfunction stackAssignsSkill(agentStack: StackAgentConfig | undefined, skillId: SkillId): boolean {\n if (!agentStack) return false;\n return resolveAgentConfigToSkills(agentStack).some((ref) => ref.id === skillId);\n}\n\nfunction formatDiscoveryMessage(result: DiscoveredSkills): string {\n const { totalSkillCount, pluginSkillCount } = result;\n const localCount = totalSkillCount - pluginSkillCount;\n\n if (pluginSkillCount > 0 && localCount > 0) {\n return `Discovered ${totalSkillCount} skills (${pluginSkillCount} from plugins, ${localCount} local)`;\n }\n\n return pluginSkillCount > 0\n ? `Discovered ${pluginSkillCount} skills from plugins`\n : `Discovered ${totalSkillCount} local skills`;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport { unique } from \"remeda\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose } from \"../utils/logger\";\nimport {\n detectBothInstallations,\n type BothInstallations,\n loadAgentDefs,\n type AgentDefs,\n compileAgents,\n discoverInstalledSkills,\n type DiscoveredSkills,\n} from \"../lib/operations\";\nimport {\n ConfigLoadError,\n effectivelyExcludedSkillIds,\n isActiveAt,\n loadProjectConfig,\n loadProjectConfigFromDir,\n resolveSource,\n} from \"../lib/configuration\";\nimport { getStackSkillIds, resolveAgentConfigToSkills } from \"../lib/stacks\";\nimport { loadSkillsMatrixFromSource, type UnusableSkillMetadata } from \"../lib/loading\";\nimport { STANDARD_FILES } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport {\n ERROR_MESSAGES,\n STATUS_MESSAGES,\n INFO_MESSAGES,\n configTypesRefreshFailed,\n globalScopedAgentsHint,\n recompileSummary,\n registeredProjectUpdateSkipped,\n scopeBlockedStackAssignment,\n skillMetadataUnusableDetail,\n skillMetadataUnusableError,\n} from \"../utils/messages\";\nimport { reconcileTypesFromDisk, type GateReport } from \"../lib/config-gate/index.js\";\nimport type { Installation } from \"../lib/installation\";\nimport type { SkillScope } from \"../types/config\";\nimport type {\n AgentDefinition,\n AgentName,\n MergedSkillsMatrix,\n ProjectConfig,\n SkillDefinitionMap,\n SkillId,\n StackAgentConfig,\n} from \"../types\";\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. Compiles to the Claude plugin directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n ];\n\n static flags = {\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n setVerbose(flags.verbose);\n const cwd = process.cwd();\n\n const installations = await this.detectInstallations(cwd);\n await this.resolveAndLogSource(cwd);\n const agentDefs = await this.loadAgentDefsOrFail();\n await this.runCompilePasses(installations, agentDefs, cwd);\n }\n\n private async detectInstallations(cwd: string): Promise<BothInstallations> {\n let installations: BothInstallations;\n try {\n installations = await detectBothInstallations(cwd);\n } catch (error) {\n // A corrupt config (file present but unparseable) must not let compile run\n // config-less — that resurrects every deselected agent. Hard-error naming\n // the offending file before any compilation happens.\n if (error instanceof ConfigLoadError) {\n this.error(error.message, { exit: EXIT_CODES.ERROR });\n }\n throw error;\n }\n\n if (!installations.global && !installations.project) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n return installations;\n }\n\n /**\n * Names where the marketplace came from — the project's own config first, then the global\n * one, then the default. `compile` takes no `--marketplace`: it recompiles an installation\n * that already recorded which marketplace its skill references answer to, and reading\n * a different one would write agents against a catalogue config.ts does not name.\n */\n private async resolveAndLogSource(projectDir: string): Promise<void> {\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n // ABORT on an unreadable config, and unreachable with one: `detectInstallation` reads the\n // same file first and already hard-errors, at both scopes — verified by hand at both.\n // The posture is recorded anyway, because what makes it unreachable is a guard in another\n // command's private helper rather than anything visible from here.\n const sourceConfig = await resolveSource({ caller: \"stored\", projectDir });\n this.log(`Marketplace: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n }\n\n private async loadAgentDefsOrFail(): Promise<AgentDefs> {\n this.log(STATUS_MESSAGES.LOADING_AGENT_PARTIALS);\n try {\n const defs = await loadAgentDefs();\n this.log(\"Agent partials loaded\");\n verbose(` Agents: ${defs.agentSourcePaths.agentsDir}`);\n return defs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n this.handleError(error);\n }\n }\n\n private async runCompilePasses(\n installations: BothInstallations,\n agentDefs: AgentDefs,\n cwd: string,\n ): Promise<void> {\n const passes = buildCompilePasses(installations, cwd, agentDefs);\n\n let totalPassesWithSkills = 0;\n for (const pass of passes) {\n const hadSkills = await this.runCompilePass(pass, cwd);\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (totalPassesWithSkills === 0) {\n this.error(ERROR_MESSAGES.NO_SKILLS_TO_COMPILE, { exit: EXIT_CODES.ERROR });\n }\n }\n\n /**\n * Discovers what this pass compiles from, and refuses the run when any installed\n * skill's metadata.yaml exists but describes no skill — before a count is printed,\n * an agent is written or the type unions are regenerated. Skipping such a skill is\n * what the config-types pass already does; loading it anyway is what this pass\n * used to do, so a single run both loaded and skipped the same file.\n */\n private async discoverAllSkills(projectDir: string): Promise<DiscoveredSkills> {\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n const result = await discoverInstalledSkills(projectDir);\n if (result.unusableMetadata.length > 0) {\n this.refuseUnusableSkillMetadata(result.unusableMetadata);\n }\n if (result.totalSkillCount === 0) return result;\n this.log(formatDiscoveryMessage(result));\n return result;\n }\n\n /**\n * Names each offending file and its reason, then exits. The detail is LOGGED and\n * only the refusal is raised: oclif hard-wraps error text at the terminal width,\n * and a path broken across two lines is one nobody can copy.\n */\n private refuseUnusableSkillMetadata(entries: UnusableSkillMetadata[]): never {\n for (const entry of entries) {\n this.log(skillMetadataUnusableDetail(entry));\n }\n this.error(skillMetadataUnusableError(entries), { exit: EXIT_CODES.ERROR });\n }\n\n /**\n * A stack skill that is not among the discovered skills is dropped from every\n * agent that references it. The resolver only records that at verbose level, so\n * the default output would claim a successful recompile of an agent that no\n * longer matches config.ts. Name each dropped skill instead.\n */\n private async warnUnresolvedStackSkills(\n projectDir: string,\n allSkills: SkillDefinitionMap,\n ): Promise<void> {\n const loaded = await loadProjectConfig(projectDir);\n if (!loaded?.config.stack) return;\n\n const excludedIds = effectivelyExcludedSkillIds(loaded.config.skills);\n const unresolved = getStackSkillIds(loaded.config.stack).filter(\n (id) => !excludedIds.has(id) && !(id in allSkills),\n );\n\n for (const id of unresolved) {\n this.warn(\n `Skill '${id}' is configured but was not found — agents will be compiled without it.`,\n );\n }\n }\n\n /**\n * `config.ts` is the hand-editable half of the pair, so it can declare a pair the scope\n * rule forbids: a GLOBAL sub-agent whose stack carries a PROJECT-scoped skill. The\n * compile-time filter in `buildCompileAgents` drops that reference on the way to the\n * resolver and `compile` rewrites nothing in `config.ts`, so the row survives and is\n * dropped again on every future run — while the recompile summary reports a clean pass\n * over an agent that no longer carries what its own config says it does.\n *\n * The sibling of {@link warnUnresolvedStackSkills} one layer over: there the skill is\n * missing from disk, here it is present and unreachable from that sub-agent.\n */\n private async warnScopeDroppedStackPairs(projectDir: string): Promise<void> {\n const loaded = await loadProjectConfig(projectDir);\n if (!loaded?.config.stack) return;\n\n for (const [skillId, agentNames] of findScopeDroppedStackPairs(loaded.config)) {\n this.warn(scopeBlockedStackAssignment(agentNames, skillId));\n }\n }\n\n /**\n * The project pass compiled no agents, but the project config may still declare\n * global-scope agents whose stack lives in the global config. Without a pointer\n * the \"No agents to recompile\" line reads as a silent no-op after a global stack\n * change, so name the global context and the count.\n */\n private async hintGlobalScopedAgents(projectDir: string): Promise<void> {\n const loaded = await loadProjectConfigFromDir(projectDir);\n if (!loaded) return;\n\n const globalAgentCount = loaded.config.agents.filter(\n (agent) => !agent.excluded && agent.scope === \"global\",\n ).length;\n if (globalAgentCount === 0) return;\n\n this.log(globalScopedAgentsHint(globalAgentCount));\n }\n\n /**\n * Loads this pass's skills catalogue and returns it, seating the module-level\n * singleton (`matrix` in `matrix-provider.ts`) on the way — which is what the\n * RENDER needs, because `compileAgents` reaches the catalogue through\n * `stacks-loader.ts`'s `statedUsageFor`/`liveCategoryOf` and those read the\n * singleton directly rather than any value a caller threads through. Called\n * first, before anything in the pass renders. Left unseated, the singleton stays\n * at its process-start default (`BUILT_IN_MATRIX`, which never carries a local\n * skill), so a locally-installed skill's stated `usageGuidance` silently falls\n * back to the generic per-category placeholder — different bytes from what\n * `install` last wrote, so a following `compile` rewrites every agent that\n * carries one.\n *\n * Scoped to `pass.projectDir`, never the invoking `cwd`: a global pass must seat\n * the global installation's own local skills, not the invoking directory's.\n *\n * `skipExtraSources: true` is NOT a divergence from the wizard's full\n * multi-source load: extra-source loading only annotates each skill's\n * `availableSources`/`activeSource` for wizard UI tagging — it never adds skills\n * or categories to the matrix, and neither the render path nor the config-types\n * writer ever reads those annotations, so the emitted output is byte-identical\n * either way (pinned by the skipExtraSources parity test in\n * local-installer.test.ts). Skipping avoids fetching every registered extra\n * source (network on a cold cache, plus unreachable-remote warnings) on this\n * offline compile path. `matrixOnly` keeps the default-source path itself\n * offline too.\n *\n * The seated matrix is RETURNED as well as seated, and `null` on a failure, so\n * the two halves can take the postures they each need. The RENDER degrades: it\n * reads the singleton whatever happens, and falls back to the same\n * category-placeholder behavior compile had before this seat existed. The type\n * refresh ABORTS on `null` — it derives every union from the catalogue, so with\n * none loaded it would narrow them to whatever the built-in catalogue happens\n * to carry, dropping every marketplace-only and local category and, at global\n * scope, propagating that into every registered project.\n */\n private async seatMatrixForPass(projectDir: string): Promise<MergedSkillsMatrix | null> {\n try {\n const { matrix: seated } = await loadSkillsMatrixFromSource({\n projectDir,\n skipExtraSources: true,\n matrixOnly: true,\n });\n return seated;\n } catch (error) {\n this.warn(`Failed to load skills matrix for ${projectDir}: ${getErrorMessage(error)}`);\n return null;\n }\n }\n\n /**\n * The documented hand-edit workflow is \"edit config.ts, then run compile\", and\n * the type unions in config-types.ts are derived from config.ts — so a compile\n * pass that leaves them untouched strands stale unions after a hand-edit.\n * Regenerates them from the scope's persisted config exactly as the wizard\n * write path would: standalone narrowed unions at global scope, import-and-\n * extend at project scope. A failed refresh downgrades to a warning — the\n * compiled agents are already written and remain valid; only the type unions\n * may still be stale.\n *\n * Takes the catalogue {@link seatMatrixForPass} returned rather than reading the\n * singleton it seated, so this refresh cannot run against a seat that is not the\n * one this pass asked for. `null` means the seat failed, and the refresh is\n * skipped whole: every union here is DERIVED from the catalogue, so writing them\n * without one is not a degraded answer but a wrong one — the unions narrow to\n * the built-in catalogue's own categories, and `config.ts` beside them still\n * keys its `stack` under the ones that just vanished, so the pair stops\n * type-checking. Skipping falls under the same warning as any other failed\n * refresh, for the same reason.\n */\n private async refreshConfigTypes(\n pass: CompilePass,\n cwd: string,\n seatedMatrix: MergedSkillsMatrix | null,\n ): Promise<void> {\n if (!seatedMatrix) {\n this.warn(\n configTypesRefreshFailed(`no skills catalogue could be loaded for ${pass.projectDir}`),\n );\n return;\n }\n\n let report: GateReport;\n try {\n const loaded = await loadProjectConfigFromDir(pass.projectDir);\n if (!loaded) {\n verbose(\n `No config found at ${pass.projectDir} — skipping ${STANDARD_FILES.CONFIG_TYPES_TS} refresh`,\n );\n return;\n }\n\n // `cwd` is excluded from the fan-out, which only a global pass can perform:\n // whatever this invocation was run from is this command's own subject, so a\n // fan-out must never reach back into it.\n report = await reconcileTypesFromDisk(\n pass.projectDir,\n loaded.config,\n { matrix: seatedMatrix, agents: pass.agents },\n { currentProjectDir: cwd },\n );\n this.log(INFO_MESSAGES.CONFIG_TYPES_REFRESHED);\n } catch (error) {\n this.warn(configTypesRefreshFailed(getErrorMessage(error)));\n return;\n }\n\n this.reportPropagation(report);\n }\n\n /**\n * Renders the fan-out the refresh above performed. Kept out of the refresh's\n * catch on purpose: a project the fan-out could not reach is reported as that,\n * not as a failure to refresh the type unions — which did succeed.\n */\n private reportPropagation(report: GateReport): void {\n for (const skippedPath of report.propagated.skipped) {\n this.warn(registeredProjectUpdateSkipped(skippedPath));\n }\n this.reportPropagatedRecompile(report);\n }\n\n private async runCompilePass(params: CompilePass, cwd: string): Promise<boolean> {\n const { label, projectDir, installation, sourcePath, scopeFilter } = params;\n\n this.log(\"\");\n this.log(`Compiling ${label.toLowerCase()} agents...`);\n this.log(\"\");\n\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${installation.agentsDir}`);\n\n // Before anything below reads the matrix — including the early return just\n // past skill discovery, which still calls refreshConfigTypes.\n const seatedMatrix = await this.seatMatrixForPass(projectDir);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills(projectDir);\n\n if (totalSkillCount === 0) {\n this.log(`No skills found for ${label.toLowerCase()} pass, skipping`);\n // The config loads independently of discovered skills: a hand-edited\n // config.ts can list skills while nothing is installed for this scope,\n // and its type unions must follow the config rather than stay stale.\n await this.refreshConfigTypes(params, cwd, seatedMatrix);\n return false;\n }\n\n await this.warnUnresolvedStackSkills(projectDir, allSkills);\n await this.warnScopeDroppedStackPairs(projectDir);\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await compileAgents({\n projectDir,\n sourcePath,\n skills: allSkills,\n pluginDir: projectDir,\n outputDir: installation.agentsDir,\n ...(scopeFilter !== undefined && { scopeFilter }),\n });\n\n const { compiled, rewritten, failed, warnings } = recompileResult;\n const summary = recompileSummary(\n rewritten.length,\n compiled.length - rewritten.length,\n `${label.toLowerCase()} agents`,\n );\n\n if (failed.length > 0) {\n this.log(`${summary} (${failed.length} failed)`);\n for (const warning of warnings) {\n this.warn(warning);\n }\n } else if (compiled.length > 0) {\n this.log(summary);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n if (label === \"Project\") {\n await this.hintGlobalScopedAgents(projectDir);\n }\n }\n\n if (compiled.length > 0) {\n verbose(` Compiled: ${compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n await this.refreshConfigTypes(params, cwd, seatedMatrix);\n\n this.log(\"\");\n this.logSuccess(`${label} compile complete!`);\n this.log(\"\");\n\n return true;\n }\n}\n\ntype CompilePass = {\n label: \"Global\" | \"Project\";\n projectDir: string;\n installation: Installation;\n sourcePath: string;\n agents: Partial<Record<AgentName, AgentDefinition>>;\n scopeFilter?: SkillScope;\n};\n\n/**\n * The single pass this invocation owns.\n *\n * A compile run inside a project is a PROJECT-scope operation and writes nothing\n * outside that project: it compiles the project's own agents and refreshes the\n * project's own type unions, and never the global install's or another\n * registered project's. Propagation is a global operation's consequence — the\n * global config is what every project's config inlines — and a project compile\n * is not one.\n *\n * The global pass is therefore reached only where no project installation is in\n * play: at the home directory (where `detectBothInstallations` returns no\n * project by construction), or in a directory that has no config of its own, so\n * the global install is the only thing there is to compile.\n *\n * `scopeFilter` still narrows the project pass whenever both installations\n * exist: the project's config inlines the global entries, so an unfiltered pass\n * would compile global-scoped agents into the project's own agents directory.\n */\nfunction buildCompilePasses(\n installations: BothInstallations,\n cwd: string,\n agentDefs: AgentDefs,\n): CompilePass[] {\n const { sourcePath, agents } = agentDefs;\n\n if (installations.project) {\n return [\n {\n label: \"Project\",\n projectDir: cwd,\n installation: installations.project,\n sourcePath,\n agents,\n ...(installations.hasBoth && { scopeFilter: \"project\" as const }),\n },\n ];\n }\n\n if (installations.global) {\n return [\n {\n label: \"Global\",\n projectDir: os.homedir(),\n installation: installations.global,\n sourcePath,\n agents,\n },\n ];\n }\n\n return [];\n}\n\n/**\n * Every project-scoped skill that a GLOBAL sub-agent's stack assigns to itself, with the\n * sub-agents that assign it — exactly the pairs `buildCompileAgents`' scope filter drops on\n * the way to the resolver.\n *\n * Grouped by skill rather than emitted per pair, so one sentence accounts for every\n * sub-agent one skill was kept away from.\n */\nfunction findScopeDroppedStackPairs(config: ProjectConfig): [SkillId, AgentName[]][] {\n const stack = config.stack ?? {};\n const globalAgentNames = config.agents\n .filter((agent) => isActiveAt(agent, \"global\"))\n .map((agent) => agent.name);\n const projectScopedIds = unique(\n config.skills.filter((skill) => isActiveAt(skill, \"project\")).map((skill) => skill.id),\n );\n\n return projectScopedIds\n .map((skillId): [SkillId, AgentName[]] => [\n skillId,\n globalAgentNames.filter((agentName) => stackAssignsSkill(stack[agentName], skillId)),\n ])\n .filter(([, agentNames]) => agentNames.length > 0);\n}\n\n/** True when this sub-agent's stack names the skill, in any of its categories. */\nfunction stackAssignsSkill(agentStack: StackAgentConfig | undefined, skillId: SkillId): boolean {\n if (!agentStack) return false;\n return resolveAgentConfigToSkills(agentStack).some((ref) => ref.id === skillId);\n}\n\nfunction formatDiscoveryMessage(result: DiscoveredSkills): string {\n const { totalSkillCount, pluginSkillCount } = result;\n const localCount = totalSkillCount - pluginSkillCount;\n\n if (pluginSkillCount > 0 && localCount > 0) {\n return `Discovered ${totalSkillCount} skills (${pluginSkillCount} from plugins, ${localCount} local)`;\n }\n\n return pluginSkillCount > 0\n ? `Discovered ${pluginSkillCount} skills from plugins`\n : `Discovered ${totalSkillCount} local skills`;\n}\n"],"mappings":"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","names":[]}
@@ -2,20 +2,20 @@
2
2
  import {
3
3
  detectProject,
4
4
  loadSource
5
- } from "../chunk-C53RJ7AA.js";
6
- import "../chunk-HRVPZMKK.js";
7
- import "../chunk-ES7WGE32.js";
5
+ } from "../chunk-X37UYIE3.js";
6
+ import "../chunk-2CQNPLVF.js";
7
+ import "../chunk-B6FSLXYN.js";
8
8
  import {
9
9
  filterExcludedEntries,
10
10
  listAgentMdFiles,
11
11
  splitAgentsByProvenance
12
- } from "../chunk-GFO55TMY.js";
12
+ } from "../chunk-JU4ZGJ7A.js";
13
13
  import {
14
14
  BaseCommand,
15
15
  EXIT_CODES
16
- } from "../chunk-H2MDPOLG.js";
17
- import "../chunk-2IMHZEIK.js";
18
- import "../chunk-77YZFVQD.js";
16
+ } from "../chunk-JIERYE6B.js";
17
+ import "../chunk-NKGYKOB7.js";
18
+ import "../chunk-PHCPUQVR.js";
19
19
  import {
20
20
  ConfigDefaultExportError,
21
21
  MarketplaceNameRefusedError,
@@ -66,10 +66,10 @@ import {
66
66
  validateProjectConfig,
67
67
  validateSkillFrontmatter,
68
68
  validateSkillMetadata
69
- } from "../chunk-UNASGGW2.js";
69
+ } from "../chunk-XPDVAJDH.js";
70
70
  import {
71
71
  matrix
72
- } from "../chunk-3QBOVV6A.js";
72
+ } from "../chunk-AVK2HEKB.js";
73
73
  import {
74
74
  CLAUDE_SRC_DIR,
75
75
  CLI_INVOKE_COMMAND,
@@ -86,7 +86,7 @@ import {
86
86
  STANDARD_FILES,
87
87
  UI_SYMBOLS,
88
88
  effectivelyExcludedSkillIds
89
- } from "../chunk-IV42Z63R.js";
89
+ } from "../chunk-UITEKY2R.js";
90
90
  import "../chunk-OI2H6M5I.js";
91
91
 
92
92
  // src/cli/commands/doctor.ts