@iloom/cli 0.11.1 → 0.12.1

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 (289) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +153 -13
  3. package/dist/BitBucketApiClient-J2ZSCS5N.js +10 -0
  4. package/dist/BitBucketVCSProvider-5X64IXXW.js +12 -0
  5. package/dist/{BranchNamingService-XBCO747L.js → BranchNamingService-MEK2WZUD.js} +4 -4
  6. package/dist/ClaudeContextManager-IENAE2CP.js +14 -0
  7. package/dist/ClaudeService-YIJCZUUB.js +13 -0
  8. package/dist/GitHubService-UTAYZXL3.js +12 -0
  9. package/dist/IssueTrackerFactory-2OI7YIN6.js +15 -0
  10. package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-3TSFW7QP.js} +10 -10
  11. package/dist/MetadataManager-V4LSJ2PB.js +10 -0
  12. package/dist/ProjectCapabilityDetector-I4J66WKF.js +11 -0
  13. package/dist/{PromptTemplateManager-T5VTLJP3.js → PromptTemplateManager-I75WKXM4.js} +3 -3
  14. package/dist/README.md +153 -13
  15. package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-BMQCAXPP.js} +13 -5
  16. package/dist/SettingsMigrationManager-ZPARZ5KH.js +10 -0
  17. package/dist/agents/iloom-code-reviewer.md +2 -1
  18. package/dist/agents/iloom-framework-detector.md +0 -1
  19. package/dist/agents/iloom-issue-analyze-and-plan.md +4 -1
  20. package/dist/agents/iloom-issue-analyzer.md +4 -1
  21. package/dist/agents/iloom-issue-complexity-evaluator.md +4 -1
  22. package/dist/agents/iloom-issue-enhancer.md +4 -1
  23. package/dist/agents/iloom-issue-implementer.md +5 -2
  24. package/dist/agents/iloom-issue-planner.md +4 -1
  25. package/dist/agents/iloom-wave-verifier.md +186 -0
  26. package/dist/browser-VZY7F2DF.js +10 -0
  27. package/dist/build-DMWSIME6.js +27 -0
  28. package/dist/{chunk-UHIBKD73.js → chunk-35CBWAJL.js} +13 -32
  29. package/dist/{chunk-UHIBKD73.js.map → chunk-35CBWAJL.js.map} +1 -1
  30. package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
  31. package/dist/chunk-4JZEQBWV.js.map +1 -0
  32. package/dist/{chunk-ET6A2JR4.js → chunk-653XBU3L.js} +111 -18
  33. package/dist/chunk-653XBU3L.js.map +1 -0
  34. package/dist/{chunk-G2MNSPA4.js → chunk-772N5WCA.js} +2 -2
  35. package/dist/{chunk-WG4MLJ6J.js → chunk-7RCUWU3I.js} +2 -2
  36. package/dist/chunk-7RCUWU3I.js.map +1 -0
  37. package/dist/{chunk-NOMQ5RFG.js → chunk-7UBEHQTP.js} +2 -2
  38. package/dist/{chunk-7NFCGKZT.js → chunk-AQUSMNBF.js} +3 -3
  39. package/dist/{chunk-IDCE26KD.js → chunk-AUYSAMXV.js} +3 -3
  40. package/dist/chunk-AYLC633W.js +406 -0
  41. package/dist/chunk-AYLC633W.js.map +1 -0
  42. package/dist/{chunk-HLDY5S4C.js → chunk-BFF27W3S.js} +3 -3
  43. package/dist/{chunk-QVAA5KHK.js → chunk-BZ7KTXPB.js} +16 -8
  44. package/dist/chunk-BZ7KTXPB.js.map +1 -0
  45. package/dist/{chunk-K7R5QY6C.js → chunk-CE676WCN.js} +2 -2
  46. package/dist/{chunk-5UFGO4ZT.js → chunk-CQHHEW2M.js} +6 -3
  47. package/dist/chunk-CQHHEW2M.js.map +1 -0
  48. package/dist/{chunk-LHDD4JHC.js → chunk-D4Q7T5KD.js} +4 -4
  49. package/dist/{chunk-RBYTXYGD.js → chunk-D75KSI3V.js} +2 -2
  50. package/dist/{chunk-Y3RX7LZT.js → chunk-DDHWZNGL.js} +18 -12
  51. package/dist/chunk-DDHWZNGL.js.map +1 -0
  52. package/dist/{chunk-5LTID2AF.js → chunk-DMSL5BAP.js} +35 -6
  53. package/dist/{chunk-5LTID2AF.js.map → chunk-DMSL5BAP.js.map} +1 -1
  54. package/dist/{chunk-TEJAGQX2.js → chunk-DY6MUWQW.js} +36 -36
  55. package/dist/chunk-DY6MUWQW.js.map +1 -0
  56. package/dist/{chunk-SQYHPBFP.js → chunk-EGNUOALL.js} +2 -2
  57. package/dist/{chunk-LL6TOX3G.js → chunk-EQIII6GI.js} +10 -10
  58. package/dist/chunk-EQIII6GI.js.map +1 -0
  59. package/dist/{chunk-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
  60. package/dist/{chunk-LE2NOUTN.js → chunk-FV4KXBGO.js} +3 -3
  61. package/dist/{chunk-XFQGI2E3.js → chunk-GWJWECZB.js} +51 -45
  62. package/dist/chunk-GWJWECZB.js.map +1 -0
  63. package/dist/{chunk-QNHZM5ZV.js → chunk-HIGWKLQR.js} +3 -3
  64. package/dist/{chunk-VMZG66UV.js → chunk-HKEXRZMU.js} +3 -3
  65. package/dist/{chunk-V4STTBQD.js → chunk-IHSA7VGI.js} +9 -9
  66. package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
  67. package/dist/{chunk-QR4FU53I.js → chunk-KCZSUJUR.js} +22 -12
  68. package/dist/chunk-KCZSUJUR.js.map +1 -0
  69. package/dist/{chunk-NH3QZYE5.js → chunk-KV4NU3RP.js} +2 -2
  70. package/dist/{chunk-NDSGJZI2.js → chunk-LOAYWTJJ.js} +2 -2
  71. package/dist/{chunk-ABVMUNCD.js → chunk-M3FBM4T3.js} +64 -10
  72. package/dist/chunk-M3FBM4T3.js.map +1 -0
  73. package/dist/{chunk-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
  74. package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
  75. package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
  76. package/dist/{chunk-7FIXNAUO.js → chunk-OKB2NEDQ.js} +66 -43
  77. package/dist/chunk-OKB2NEDQ.js.map +1 -0
  78. package/dist/{chunk-3RXYOBME.js → chunk-OPQC4OWM.js} +5 -5
  79. package/dist/{chunk-3RXYOBME.js.map → chunk-OPQC4OWM.js.map} +1 -1
  80. package/dist/chunk-P5MXXHXQ.js +284 -0
  81. package/dist/chunk-P5MXXHXQ.js.map +1 -0
  82. package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
  83. package/dist/{chunk-TZNNJLGT.js → chunk-PMB6TYV4.js} +6 -6
  84. package/dist/chunk-QC65IOV3.js +304 -0
  85. package/dist/chunk-QC65IOV3.js.map +1 -0
  86. package/dist/{chunk-6YVJVUR4.js → chunk-QF2DROQR.js} +3 -3
  87. package/dist/{chunk-XXFSOVL3.js → chunk-QFDM23CO.js} +4 -4
  88. package/dist/{chunk-RMLADZRY.js → chunk-R7DGN73N.js} +5 -5
  89. package/dist/{chunk-IR74O2F6.js → chunk-UVXB6O24.js} +245 -187
  90. package/dist/chunk-UVXB6O24.js.map +1 -0
  91. package/dist/{chunk-5PNZBH6V.js → chunk-V5IYLWRA.js} +2 -2
  92. package/dist/{chunk-KQFIGI37.js → chunk-VA6CWUAE.js} +7 -7
  93. package/dist/{chunk-3GTUXW26.js → chunk-VIQOQ463.js} +19 -3
  94. package/dist/chunk-VIQOQ463.js.map +1 -0
  95. package/dist/{chunk-H2SSF24U.js → chunk-VRPPI6GU.js} +17 -6
  96. package/dist/{chunk-H2SSF24U.js.map → chunk-VRPPI6GU.js.map} +1 -1
  97. package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
  98. package/dist/{chunk-VUUN3KE4.js → chunk-XVCGPTEQ.js} +8 -8
  99. package/dist/chunk-XVCGPTEQ.js.map +1 -0
  100. package/dist/{chunk-VNYWBHKR.js → chunk-Y2MVSEJK.js} +33 -3
  101. package/dist/chunk-Y2MVSEJK.js.map +1 -0
  102. package/dist/chunk-YWNF5755.js +696 -0
  103. package/dist/chunk-YWNF5755.js.map +1 -0
  104. package/dist/{chunk-UDCI3QTS.js → chunk-ZM2AYHMO.js} +2 -2
  105. package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
  106. package/dist/{cleanup-YOM6PQCN.js → cleanup-RLBLNQZN.js} +37 -34
  107. package/dist/{cleanup-YOM6PQCN.js.map → cleanup-RLBLNQZN.js.map} +1 -1
  108. package/dist/cli.js +290 -141
  109. package/dist/cli.js.map +1 -1
  110. package/dist/{color-VQD52LOI.js → color-AC6F2QE7.js} +3 -3
  111. package/dist/{commit-DC2Q5CDY.js → commit-RILBXFWO.js} +15 -15
  112. package/dist/{compile-4NCQECKE.js → compile-QEL5724K.js} +11 -11
  113. package/dist/{contribute-M5UWXCAV.js → contribute-EHWLYOMZ.js} +11 -11
  114. package/dist/{contribute-M5UWXCAV.js.map → contribute-EHWLYOMZ.js.map} +1 -1
  115. package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
  116. package/dist/{dev-server-CYRP6M73.js → dev-server-2WSWZXJG.js} +35 -21
  117. package/dist/dev-server-2WSWZXJG.js.map +1 -0
  118. package/dist/{feedback-BMAZGKRW.js → feedback-RFWGB4I5.js} +17 -17
  119. package/dist/{git-BXUD6CL5.js → git-I3PO6FY7.js} +6 -6
  120. package/dist/ignite-X2NNTNUN.js +35 -0
  121. package/dist/index.d.ts +200 -16
  122. package/dist/index.js +164 -55
  123. package/dist/index.js.map +1 -1
  124. package/dist/{init-CI43GJHV.js → init-LWU2M53W.js} +18 -18
  125. package/dist/{install-deps-SRTM5U7D.js → install-deps-HXP2TM7G.js} +11 -11
  126. package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
  127. package/dist/{issues-DMRQJH7E.js → issues-SUFQJY6O.js} +69 -56
  128. package/dist/issues-SUFQJY6O.js.map +1 -0
  129. package/dist/lint-FDZC77GL.js +27 -0
  130. package/dist/{linux-RYLOP2LY.js → linux-WUGRYCJY.js} +2 -2
  131. package/dist/mcp/{chunk-PIIRD4LO.js → chunk-4HZMW2V3.js} +1 -1
  132. package/dist/mcp/{chunk-PIIRD4LO.js.map → chunk-4HZMW2V3.js.map} +1 -1
  133. package/dist/{darwin-5BHWRJ7D.js → mcp/darwin-U25WIGH6.js} +2 -2
  134. package/dist/mcp/issue-management-server.js +900 -20
  135. package/dist/mcp/issue-management-server.js.map +1 -1
  136. package/dist/mcp/{linux-JBVS4R3A.js → linux-5BXVBGSY.js} +2 -2
  137. package/dist/mcp/recap-server.js +24 -22
  138. package/dist/mcp/recap-server.js.map +1 -1
  139. package/dist/mcp/{tmux-RYBLEHUZ.js → tmux-CU26ZTNM.js} +2 -2
  140. package/dist/mcp/{wsl-4QZIQLLE.js → wsl-KI25UDOF.js} +2 -2
  141. package/dist/neon-helpers-LCZAN4U4.js +11 -0
  142. package/dist/{open-2Y7GSUTJ.js → open-US4XACLW.js} +36 -21
  143. package/dist/open-US4XACLW.js.map +1 -0
  144. package/dist/{plan-SWFPLNJE.js → plan-5S6355GF.js} +68 -75
  145. package/dist/plan-5S6355GF.js.map +1 -0
  146. package/dist/{projects-IUSUXD5D.js → projects-L5AHUBGA.js} +6 -6
  147. package/dist/{prompt-7LZB4PAT.js → prompt-FUU5NMJQ.js} +3 -3
  148. package/dist/prompt-FUU5NMJQ.js.map +1 -0
  149. package/dist/prompts/init-prompt.txt +160 -23
  150. package/dist/prompts/issue-prompt.txt +93 -157
  151. package/dist/prompts/plan-prompt.txt +86 -6
  152. package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
  153. package/dist/{rebase-S6OHAOOF.js → rebase-JA3RW2XO.js} +12 -12
  154. package/dist/{recap-GGVCG5VH.js → recap-5TO42HN2.js} +9 -9
  155. package/dist/{remote-MZTFHHTU.js → remote-RO4LZKT2.js} +3 -3
  156. package/dist/remote-RO4LZKT2.js.map +1 -0
  157. package/dist/{run-ST3FR75O.js → run-KKCRBRLW.js} +36 -21
  158. package/dist/run-KKCRBRLW.js.map +1 -0
  159. package/dist/schema/settings.schema.json +147 -11
  160. package/dist/{shell-W4SBQPTE.js → shell-GAB2FCXH.js} +8 -8
  161. package/dist/{summary-P2JCIIJO.js → summary-P7QE3TNW.js} +21 -19
  162. package/dist/summary-P7QE3TNW.js.map +1 -0
  163. package/dist/test-6LFB5WOO.js +27 -0
  164. package/dist/{test-git-2KFFAQ6B.js → test-git-PYJOYSED.js} +6 -6
  165. package/dist/{test-jira-FKDKG6CD.js → test-jira-SM7IU5HW.js} +8 -8
  166. package/dist/{test-prefix-GP2DAX37.js → test-prefix-HIRZBXTM.js} +6 -6
  167. package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
  168. package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-43PVP2JL.js} +8 -8
  169. package/dist/{tmux-7ZTA3BDI.js → tmux-6LRFH3DM.js} +2 -2
  170. package/dist/{update-XLW7R7FL.js → update-AD3GE5C4.js} +4 -4
  171. package/dist/{update-notifier-EYLAXZAA.js → update-notifier-VYDTDMSJ.js} +3 -3
  172. package/dist/update-notifier-VYDTDMSJ.js.map +1 -0
  173. package/dist/{vscode-TOGE5N67.js → vscode-HXIXRZ3A.js} +12 -12
  174. package/dist/{vscode-announcement-NIX7O2MG.js → vscode-announcement-AL3EHORH.js} +3 -3
  175. package/dist/{wsl-Y4GUTOQ7.js → wsl-4VMVT2PO.js} +2 -2
  176. package/package.json +1 -1
  177. package/dist/ClaudeContextManager-SXDCWDJA.js +0 -14
  178. package/dist/ClaudeService-6E6MCGJE.js +0 -13
  179. package/dist/GitHubService-2R5GQG4K.js +0 -12
  180. package/dist/IssueTrackerFactory-XN6MQ4UN.js +0 -14
  181. package/dist/MetadataManager-CMQQTFLQ.js +0 -10
  182. package/dist/ProjectCapabilityDetector-IC6NAFGY.js +0 -11
  183. package/dist/SettingsMigrationManager-S6J7OHUH.js +0 -10
  184. package/dist/build-OLS6J5KZ.js +0 -27
  185. package/dist/chunk-3GTUXW26.js.map +0 -1
  186. package/dist/chunk-5UFGO4ZT.js.map +0 -1
  187. package/dist/chunk-7FIXNAUO.js.map +0 -1
  188. package/dist/chunk-ABVMUNCD.js.map +0 -1
  189. package/dist/chunk-ET6A2JR4.js.map +0 -1
  190. package/dist/chunk-IR74O2F6.js.map +0 -1
  191. package/dist/chunk-LL6TOX3G.js.map +0 -1
  192. package/dist/chunk-QR4FU53I.js.map +0 -1
  193. package/dist/chunk-QVAA5KHK.js.map +0 -1
  194. package/dist/chunk-RVI6C2H5.js +0 -220
  195. package/dist/chunk-RVI6C2H5.js.map +0 -1
  196. package/dist/chunk-TEJAGQX2.js.map +0 -1
  197. package/dist/chunk-VNYWBHKR.js.map +0 -1
  198. package/dist/chunk-VUUN3KE4.js.map +0 -1
  199. package/dist/chunk-WG4MLJ6J.js.map +0 -1
  200. package/dist/chunk-XFQGI2E3.js.map +0 -1
  201. package/dist/chunk-Y3RX7LZT.js.map +0 -1
  202. package/dist/chunk-YRCEOQPX.js.map +0 -1
  203. package/dist/dev-server-CYRP6M73.js.map +0 -1
  204. package/dist/ignite-IO4LXVXJ.js +0 -35
  205. package/dist/issues-DMRQJH7E.js.map +0 -1
  206. package/dist/lint-BSWRMGPZ.js +0 -27
  207. package/dist/neon-helpers-HWIYRKOW.js +0 -11
  208. package/dist/open-2Y7GSUTJ.js.map +0 -1
  209. package/dist/plan-SWFPLNJE.js.map +0 -1
  210. package/dist/run-ST3FR75O.js.map +0 -1
  211. package/dist/summary-P2JCIIJO.js.map +0 -1
  212. package/dist/test-6JH4FE2X.js +0 -27
  213. /package/dist/{BranchNamingService-XBCO747L.js.map → BitBucketApiClient-J2ZSCS5N.js.map} +0 -0
  214. /package/dist/{ClaudeContextManager-SXDCWDJA.js.map → BitBucketVCSProvider-5X64IXXW.js.map} +0 -0
  215. /package/dist/{ClaudeService-6E6MCGJE.js.map → BranchNamingService-MEK2WZUD.js.map} +0 -0
  216. /package/dist/{GitHubService-2R5GQG4K.js.map → ClaudeContextManager-IENAE2CP.js.map} +0 -0
  217. /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-YIJCZUUB.js.map} +0 -0
  218. /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
  219. /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-2OI7YIN6.js.map} +0 -0
  220. /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-3TSFW7QP.js.map} +0 -0
  221. /package/dist/{PromptTemplateManager-T5VTLJP3.js.map → MetadataManager-V4LSJ2PB.js.map} +0 -0
  222. /package/dist/{SettingsManager-WQ5NSGAH.js.map → ProjectCapabilityDetector-I4J66WKF.js.map} +0 -0
  223. /package/dist/{SettingsMigrationManager-S6J7OHUH.js.map → PromptTemplateManager-I75WKXM4.js.map} +0 -0
  224. /package/dist/{claude-ONQTDWV3.js.map → SettingsManager-BMQCAXPP.js.map} +0 -0
  225. /package/dist/{color-VQD52LOI.js.map → SettingsMigrationManager-ZPARZ5KH.js.map} +0 -0
  226. /package/dist/{darwin-5BHWRJ7D.js.map → browser-VZY7F2DF.js.map} +0 -0
  227. /package/dist/{build-OLS6J5KZ.js.map → build-DMWSIME6.js.map} +0 -0
  228. /package/dist/{chunk-G2MNSPA4.js.map → chunk-772N5WCA.js.map} +0 -0
  229. /package/dist/{chunk-NOMQ5RFG.js.map → chunk-7UBEHQTP.js.map} +0 -0
  230. /package/dist/{chunk-7NFCGKZT.js.map → chunk-AQUSMNBF.js.map} +0 -0
  231. /package/dist/{chunk-IDCE26KD.js.map → chunk-AUYSAMXV.js.map} +0 -0
  232. /package/dist/{chunk-HLDY5S4C.js.map → chunk-BFF27W3S.js.map} +0 -0
  233. /package/dist/{chunk-K7R5QY6C.js.map → chunk-CE676WCN.js.map} +0 -0
  234. /package/dist/{chunk-LHDD4JHC.js.map → chunk-D4Q7T5KD.js.map} +0 -0
  235. /package/dist/{chunk-RBYTXYGD.js.map → chunk-D75KSI3V.js.map} +0 -0
  236. /package/dist/{chunk-SQYHPBFP.js.map → chunk-EGNUOALL.js.map} +0 -0
  237. /package/dist/{chunk-ZAXRQLK3.js.map → chunk-FTYWGQFM.js.map} +0 -0
  238. /package/dist/{chunk-LE2NOUTN.js.map → chunk-FV4KXBGO.js.map} +0 -0
  239. /package/dist/{chunk-QNHZM5ZV.js.map → chunk-HIGWKLQR.js.map} +0 -0
  240. /package/dist/{chunk-VMZG66UV.js.map → chunk-HKEXRZMU.js.map} +0 -0
  241. /package/dist/{chunk-V4STTBQD.js.map → chunk-IHSA7VGI.js.map} +0 -0
  242. /package/dist/{chunk-NCPZYQ4B.js.map → chunk-K3QGG4O2.js.map} +0 -0
  243. /package/dist/{chunk-NH3QZYE5.js.map → chunk-KV4NU3RP.js.map} +0 -0
  244. /package/dist/{chunk-NDSGJZI2.js.map → chunk-LOAYWTJJ.js.map} +0 -0
  245. /package/dist/{chunk-GMDSYLI6.js.map → chunk-MY2Q3FJ3.js.map} +0 -0
  246. /package/dist/{chunk-CV47VCMQ.js.map → chunk-NPVA65KS.js.map} +0 -0
  247. /package/dist/{chunk-7OCGBJLR.js.map → chunk-OIVFHJOA.js.map} +0 -0
  248. /package/dist/{chunk-NN5RYWXA.js.map → chunk-PH65MFQM.js.map} +0 -0
  249. /package/dist/{chunk-TZNNJLGT.js.map → chunk-PMB6TYV4.js.map} +0 -0
  250. /package/dist/{chunk-6YVJVUR4.js.map → chunk-QF2DROQR.js.map} +0 -0
  251. /package/dist/{chunk-XXFSOVL3.js.map → chunk-QFDM23CO.js.map} +0 -0
  252. /package/dist/{chunk-RMLADZRY.js.map → chunk-R7DGN73N.js.map} +0 -0
  253. /package/dist/{chunk-5PNZBH6V.js.map → chunk-V5IYLWRA.js.map} +0 -0
  254. /package/dist/{chunk-KQFIGI37.js.map → chunk-VA6CWUAE.js.map} +0 -0
  255. /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
  256. /package/dist/{chunk-UDCI3QTS.js.map → chunk-ZM2AYHMO.js.map} +0 -0
  257. /package/dist/{git-BXUD6CL5.js.map → claude-ACL7G4CF.js.map} +0 -0
  258. /package/dist/{ignite-IO4LXVXJ.js.map → color-AC6F2QE7.js.map} +0 -0
  259. /package/dist/{commit-DC2Q5CDY.js.map → commit-RILBXFWO.js.map} +0 -0
  260. /package/dist/{compile-4NCQECKE.js.map → compile-QEL5724K.js.map} +0 -0
  261. /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
  262. /package/dist/{feedback-BMAZGKRW.js.map → feedback-RFWGB4I5.js.map} +0 -0
  263. /package/dist/{mcp/darwin-3JFFE3W2.js.map → git-I3PO6FY7.js.map} +0 -0
  264. /package/dist/{neon-helpers-HWIYRKOW.js.map → ignite-X2NNTNUN.js.map} +0 -0
  265. /package/dist/{init-CI43GJHV.js.map → init-LWU2M53W.js.map} +0 -0
  266. /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-HXP2TM7G.js.map} +0 -0
  267. /package/dist/{prompt-7LZB4PAT.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
  268. /package/dist/{lint-BSWRMGPZ.js.map → lint-FDZC77GL.js.map} +0 -0
  269. /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
  270. /package/dist/{remote-MZTFHHTU.js.map → mcp/darwin-U25WIGH6.js.map} +0 -0
  271. /package/dist/mcp/{linux-JBVS4R3A.js.map → linux-5BXVBGSY.js.map} +0 -0
  272. /package/dist/mcp/{tmux-RYBLEHUZ.js.map → tmux-CU26ZTNM.js.map} +0 -0
  273. /package/dist/mcp/{wsl-4QZIQLLE.js.map → wsl-KI25UDOF.js.map} +0 -0
  274. /package/dist/{update-notifier-EYLAXZAA.js.map → neon-helpers-LCZAN4U4.js.map} +0 -0
  275. /package/dist/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
  276. /package/dist/{rebase-S6OHAOOF.js.map → rebase-JA3RW2XO.js.map} +0 -0
  277. /package/dist/{recap-GGVCG5VH.js.map → recap-5TO42HN2.js.map} +0 -0
  278. /package/dist/{shell-W4SBQPTE.js.map → shell-GAB2FCXH.js.map} +0 -0
  279. /package/dist/{test-6JH4FE2X.js.map → test-6LFB5WOO.js.map} +0 -0
  280. /package/dist/{test-git-2KFFAQ6B.js.map → test-git-PYJOYSED.js.map} +0 -0
  281. /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-SM7IU5HW.js.map} +0 -0
  282. /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-HIRZBXTM.js.map} +0 -0
  283. /package/dist/{test-tabs-YDWMWTVA.js.map → test-tabs-NGPTFD5T.js.map} +0 -0
  284. /package/dist/{test-webserver-QI3QQFZ3.js.map → test-webserver-43PVP2JL.js.map} +0 -0
  285. /package/dist/{tmux-7ZTA3BDI.js.map → tmux-6LRFH3DM.js.map} +0 -0
  286. /package/dist/{update-XLW7R7FL.js.map → update-AD3GE5C4.js.map} +0 -0
  287. /package/dist/{vscode-TOGE5N67.js.map → vscode-HXIXRZ3A.js.map} +0 -0
  288. /package/dist/{vscode-announcement-NIX7O2MG.js.map → vscode-announcement-AL3EHORH.js.map} +0 -0
  289. /package/dist/{wsl-Y4GUTOQ7.js.map → wsl-4VMVT2PO.js.map} +0 -0
@@ -2,10 +2,19 @@
2
2
  import {
3
3
  buildDependencyMap,
4
4
  fetchChildIssueDetails
5
- } from "./chunk-TZNNJLGT.js";
5
+ } from "./chunk-PMB6TYV4.js";
6
6
  import {
7
7
  preAcceptClaudeTrust
8
- } from "./chunk-NOMQ5RFG.js";
8
+ } from "./chunk-7UBEHQTP.js";
9
+ import {
10
+ getWorkspacePort
11
+ } from "./chunk-BFF27W3S.js";
12
+ import {
13
+ TelemetryService
14
+ } from "./chunk-MY2Q3FJ3.js";
15
+ import {
16
+ FirstRunManager
17
+ } from "./chunk-EGNUOALL.js";
9
18
  import {
10
19
  generateAndWriteMcpConfigFile,
11
20
  generateIssueManagementMcpConfig,
@@ -13,62 +22,53 @@ import {
13
22
  readRecapFile,
14
23
  resolveRecapFilePath,
15
24
  writeRecapFile
16
- } from "./chunk-5UFGO4ZT.js";
25
+ } from "./chunk-CQHHEW2M.js";
17
26
  import {
18
- IssueManagementProviderFactory
19
- } from "./chunk-RMLADZRY.js";
27
+ AgentManager
28
+ } from "./chunk-Y2MVSEJK.js";
20
29
  import {
21
- getWorkspacePort
22
- } from "./chunk-HLDY5S4C.js";
30
+ IssueManagementProviderFactory
31
+ } from "./chunk-R7DGN73N.js";
23
32
  import {
24
33
  installDependencies
25
- } from "./chunk-3GTUXW26.js";
26
- import {
27
- extractSettingsOverrides
28
- } from "./chunk-GYCR2LOU.js";
29
- import {
30
- TelemetryService
31
- } from "./chunk-GMDSYLI6.js";
34
+ } from "./chunk-VIQOQ463.js";
32
35
  import {
33
- FirstRunManager
34
- } from "./chunk-SQYHPBFP.js";
36
+ GitWorktreeManager
37
+ } from "./chunk-FV4KXBGO.js";
35
38
  import {
36
- AgentManager
37
- } from "./chunk-VNYWBHKR.js";
39
+ PromptTemplateManager,
40
+ buildReviewTemplateVariables
41
+ } from "./chunk-7RCUWU3I.js";
38
42
  import {
39
- GitWorktreeManager
40
- } from "./chunk-LE2NOUTN.js";
43
+ extractSettingsOverrides
44
+ } from "./chunk-GYCR2LOU.js";
41
45
  import {
42
46
  IssueTrackerFactory
43
- } from "./chunk-UHIBKD73.js";
47
+ } from "./chunk-35CBWAJL.js";
44
48
  import {
45
49
  launchClaude
46
- } from "./chunk-Y3RX7LZT.js";
47
- import {
48
- PromptTemplateManager,
49
- buildReviewTemplateVariables
50
- } from "./chunk-WG4MLJ6J.js";
50
+ } from "./chunk-DDHWZNGL.js";
51
51
  import {
52
52
  extractIssueNumber,
53
53
  findMainWorktreePathWithSettings,
54
54
  generateWorktreePath,
55
55
  getWorktreeRoot,
56
56
  isValidGitRepo
57
- } from "./chunk-3RXYOBME.js";
57
+ } from "./chunk-OPQC4OWM.js";
58
58
  import {
59
59
  SettingsManager
60
- } from "./chunk-ET6A2JR4.js";
60
+ } from "./chunk-653XBU3L.js";
61
61
  import {
62
62
  MetadataManager
63
- } from "./chunk-YRCEOQPX.js";
63
+ } from "./chunk-4JZEQBWV.js";
64
64
  import {
65
65
  getLogger,
66
66
  withLogger
67
- } from "./chunk-ZAXRQLK3.js";
67
+ } from "./chunk-FTYWGQFM.js";
68
68
  import {
69
69
  createStderrLogger,
70
70
  logger
71
- } from "./chunk-H2SSF24U.js";
71
+ } from "./chunk-VRPPI6GU.js";
72
72
 
73
73
  // src/commands/ignite.ts
74
74
  import path5 from "path";
@@ -419,20 +419,27 @@ var SwarmSetupService = class {
419
419
  }));
420
420
  }
421
421
  /**
422
- * Render swarm-mode agent templates to the epic worktree's .claude/agents/ directory.
422
+ * Render swarm-mode agent templates as custom agent files AND thin skill wrappers.
423
423
  *
424
- * Phase agent files are written WITHOUT frontmatter (prompt body only) because they are
425
- * loaded via `--append-system-prompt-file` which does not parse YAML frontmatter.
426
- * Model and tools metadata is extracted from the agent config and returned separately
427
- * for use as CLI flags in `claude -p` commands.
424
+ * For each phase agent, two files are written:
425
+ * 1. Agent file at `.claude/agents/iloom-swarm-<phase>.md` - contains frontmatter
426
+ * (name, description, model) and the full agent prompt as body.
427
+ * 2. Thin skill wrapper at `.claude/skills/iloom-swarm-<phase>/SKILL.md` - contains
428
+ * frontmatter with `agent: iloom-swarm-<phase>` and a minimal body.
429
+ *
430
+ * Skills are auto-discovered by Claude Code and invoked via /skill-name syntax.
431
+ * The agent file carries the real prompt; the skill just delegates to it.
428
432
  */
429
433
  async renderSwarmAgents(epicWorktreePath) {
430
434
  var _a, _b;
435
+ const claudeSkillsDir = path2.join(epicWorktreePath, ".claude", "skills");
431
436
  const claudeAgentsDir = path2.join(epicWorktreePath, ".claude", "agents");
437
+ await fs2.ensureDir(claudeSkillsDir);
432
438
  await fs2.ensureDir(claudeAgentsDir);
433
439
  const settings = await this.settingsManager.loadSettings();
434
440
  const templateVariables = {
435
- SWARM_MODE: true
441
+ SWARM_MODE: true,
442
+ EPIC_WORKTREE_PATH: epicWorktreePath
436
443
  };
437
444
  const agents = await this.agentManager.loadAgents(settings, templateVariables);
438
445
  const defaultSwarmModels = {
@@ -452,22 +459,49 @@ var SwarmSetupService = class {
452
459
  agents[agentName] = { ...agentConfig, model: defaultSwarmModels[agentName] };
453
460
  }
454
461
  }
455
- const renderedFiles = [];
456
- const metadata = {};
462
+ const renderedSkills = [];
463
+ const renderedAgents = [];
464
+ const standaloneAgents = /* @__PURE__ */ new Set(["iloom-wave-verifier"]);
457
465
  for (const [agentName, agentConfig] of Object.entries(agents)) {
458
- const swarmFileName = agentName.startsWith("iloom-") ? `iloom-swarm-${agentName.slice("iloom-".length)}.md` : `iloom-swarm-${agentName}.md`;
459
- const agentKey = swarmFileName.replace(".md", "");
460
- metadata[agentKey] = {
461
- model: agentConfig.model,
462
- ...agentConfig.tools && { tools: agentConfig.tools }
463
- };
464
- const outputPath = path2.join(claudeAgentsDir, swarmFileName);
465
- await fs2.writeFile(outputPath, agentConfig.prompt + "\n", "utf-8");
466
- renderedFiles.push(swarmFileName);
467
- getLogger().debug(`Rendered swarm agent: ${swarmFileName}`);
466
+ if (standaloneAgents.has(agentName)) {
467
+ continue;
468
+ }
469
+ const swarmName = agentName.startsWith("iloom-") ? `iloom-swarm-${agentName.slice("iloom-".length)}` : `iloom-swarm-${agentName}`;
470
+ const agentFrontmatter = [
471
+ "---",
472
+ `name: ${swarmName}`,
473
+ `description: ${agentConfig.description}`,
474
+ `model: ${agentConfig.model}`,
475
+ "---"
476
+ ].join("\n");
477
+ const agentContent = `${agentFrontmatter}
478
+
479
+ ${agentConfig.prompt}
480
+ `;
481
+ await fs2.writeFile(path2.join(claudeAgentsDir, `${swarmName}.md`), agentContent, "utf-8");
482
+ renderedAgents.push(swarmName);
483
+ getLogger().debug(`Rendered swarm agent: ${swarmName}`);
484
+ const skillDir = path2.join(claudeSkillsDir, swarmName);
485
+ await fs2.ensureDir(skillDir);
486
+ const skillFrontmatter = [
487
+ "---",
488
+ `name: ${swarmName}`,
489
+ `description: ${agentConfig.description}`,
490
+ `model: ${agentConfig.model}`,
491
+ "context: fork",
492
+ `agent: ${swarmName}`,
493
+ "---"
494
+ ].join("\n");
495
+ const skillContent = `${skillFrontmatter}
496
+
497
+ Proceed via your system prompt.
498
+ `;
499
+ await fs2.writeFile(path2.join(skillDir, "SKILL.md"), skillContent, "utf-8");
500
+ renderedSkills.push(swarmName);
501
+ getLogger().debug(`Rendered swarm skill wrapper: ${swarmName}`);
468
502
  }
469
- getLogger().success(`Rendered ${renderedFiles.length} swarm agents to ${claudeAgentsDir}`);
470
- return { renderedFiles, metadata };
503
+ getLogger().success(`Rendered ${renderedAgents.length} swarm agents and ${renderedSkills.length} skill wrappers`);
504
+ return { renderedSkills, renderedAgents };
471
505
  }
472
506
  /**
473
507
  * Render the swarm worker agent file to the epic worktree's .claude/agents/ directory.
@@ -481,8 +515,8 @@ var SwarmSetupService = class {
481
515
  * The agent file is shared across all children. Issue-specific context (number, title,
482
516
  * worktree path, body) is provided per-child via the Task prompt from the orchestrator.
483
517
  */
484
- async renderSwarmWorkerAgent(epicWorktreePath, agentMetadata) {
485
- var _a, _b, _c, _d, _e;
518
+ async renderSwarmWorkerAgent(epicWorktreePath) {
519
+ var _a, _b, _c;
486
520
  const agentsDir = path2.join(epicWorktreePath, ".claude", "agents");
487
521
  const agentOutputPath = path2.join(agentsDir, "iloom-swarm-worker.md");
488
522
  await fs2.ensureDir(agentsDir);
@@ -490,20 +524,16 @@ var SwarmSetupService = class {
490
524
  const settings = await this.settingsManager.loadSettings();
491
525
  const providerType = ((_a = settings == null ? void 0 : settings.issueManagement) == null ? void 0 : _a.provider) ?? "github";
492
526
  const issuePrefix = IssueManagementProviderFactory.create(providerType, settings ?? void 0).issuePrefix;
493
- const subAgentTimeoutMinutes = ((_c = (_b = settings == null ? void 0 : settings.agents) == null ? void 0 : _b["iloom-swarm-worker"]) == null ? void 0 : _c.subAgentTimeout) ?? 10;
494
- const subAgentTimeoutMs = subAgentTimeoutMinutes * 60 * 1e3;
495
527
  const variables = {
496
528
  SWARM_MODE: true,
497
529
  ONE_SHOT_MODE: true,
498
530
  COMPLEXITY_OVERRIDE: "simple",
499
531
  EPIC_WORKTREE_PATH: epicWorktreePath,
500
532
  ISSUE_PREFIX: issuePrefix,
501
- SWARM_SUB_AGENT_TIMEOUT_MS: subAgentTimeoutMs,
502
- ...agentMetadata && { SWARM_AGENT_METADATA: JSON.stringify(agentMetadata) },
503
533
  ...buildReviewTemplateVariables(true, settings == null ? void 0 : settings.agents)
504
534
  };
505
535
  const agentBody = await this.templateManager.getPrompt("issue", variables);
506
- const workerModel = ((_e = (_d = settings == null ? void 0 : settings.agents) == null ? void 0 : _d["iloom-swarm-worker"]) == null ? void 0 : _e.model) ?? "opus";
536
+ const workerModel = ((_c = (_b = settings == null ? void 0 : settings.agents) == null ? void 0 : _b["iloom-swarm-worker"]) == null ? void 0 : _c.model) ?? "sonnet";
507
537
  const frontmatter = [
508
538
  "---",
509
539
  "name: iloom-swarm-worker",
@@ -526,64 +556,108 @@ ${agentBody}
526
556
  }
527
557
  }
528
558
  /**
529
- * Copy .claude/agents/ from the epic worktree to each child worktree.
559
+ * Render the wave verifier agent file to the epic worktree's .claude/agents/ directory.
530
560
  *
531
- * Child workers need local access to agent files (used via --append-system-prompt-file).
532
- * Without this copy, child worktrees lack the rendered agent files since they only
533
- * exist in the epic worktree after renderSwarmAgents/renderSwarmWorkerAgent.
561
+ * This creates an agent file at `.claude/agents/iloom-swarm-wave-verifier.md` WITH frontmatter,
562
+ * making it available as a custom agent type via `subagent_type: "iloom-swarm-wave-verifier"`.
563
+ * Unlike phase agents (which are appended as system prompts), the wave verifier is a standalone
564
+ * agent that the orchestrator spawns directly for verification child issues.
534
565
  */
535
- async copyAgentsToChildWorktrees(epicWorktreePath, childWorktrees) {
536
- const sourceDir = path2.join(epicWorktreePath, ".claude", "agents");
537
- if (!await fs2.pathExists(sourceDir)) {
538
- getLogger().warn("No .claude/agents/ directory in epic worktree to copy");
566
+ async renderSwarmWaveVerifierAgent(epicWorktreePath) {
567
+ var _a, _b;
568
+ const agentsDir = path2.join(epicWorktreePath, ".claude", "agents");
569
+ const agentOutputPath = path2.join(agentsDir, "iloom-swarm-wave-verifier.md");
570
+ await fs2.ensureDir(agentsDir);
571
+ try {
572
+ const settings = await this.settingsManager.loadSettings();
573
+ const templateVariables = {
574
+ SWARM_MODE: true,
575
+ EPIC_WORKTREE_PATH: epicWorktreePath
576
+ };
577
+ const agents = await this.agentManager.loadAgents(settings, templateVariables, ["iloom-wave-verifier.md"]);
578
+ const verifierConfig = agents["iloom-wave-verifier"];
579
+ if (!verifierConfig) {
580
+ getLogger().debug("No wave verifier agent template found \u2014 skipping");
581
+ return false;
582
+ }
583
+ const verifierModel = ((_b = (_a = settings == null ? void 0 : settings.agents) == null ? void 0 : _a["iloom-wave-verifier"]) == null ? void 0 : _b.model) ?? verifierConfig.model ?? "sonnet";
584
+ const frontmatter = [
585
+ "---",
586
+ "name: iloom-swarm-wave-verifier",
587
+ `description: ${verifierConfig.description ?? "Wave verification agent that checks must-have criteria after each swarm wave."}`,
588
+ `model: ${verifierModel}`,
589
+ ...verifierConfig.tools ? [`tools: ${verifierConfig.tools.join(", ")}`] : [],
590
+ "---"
591
+ ].join("\n");
592
+ const content = `${frontmatter}
593
+
594
+ ${verifierConfig.prompt}
595
+ `;
596
+ await fs2.writeFile(agentOutputPath, content, "utf-8");
597
+ getLogger().success(`Rendered wave verifier agent to ${agentOutputPath}`);
598
+ return true;
599
+ } catch (error) {
600
+ getLogger().warn(
601
+ `Failed to render wave verifier agent: ${error instanceof Error ? error.message : "Unknown error"}`
602
+ );
603
+ return false;
604
+ }
605
+ }
606
+ /**
607
+ * Copy .claude/agents/ and .claude/skills/ from the epic worktree to each child worktree.
608
+ *
609
+ * Child workers need local access to agent files (used as custom agent types) and
610
+ * skill files (invoked via /skill-name). Without this copy, child worktrees lack
611
+ * the rendered files since they only exist in the epic worktree after rendering.
612
+ */
613
+ async copyAgentsAndSkillsToChildWorktrees(epicWorktreePath, childWorktrees) {
614
+ const agentsSourceDir = path2.join(epicWorktreePath, ".claude", "agents");
615
+ const skillsSourceDir = path2.join(epicWorktreePath, ".claude", "skills");
616
+ const agentsExist = await fs2.pathExists(agentsSourceDir);
617
+ const skillsExist = await fs2.pathExists(skillsSourceDir);
618
+ if (!agentsExist && !skillsExist) {
619
+ getLogger().warn("No .claude/agents/ or .claude/skills/ directory in epic worktree to copy");
539
620
  return;
540
621
  }
541
622
  const successfulChildren = childWorktrees.filter((c) => c.success);
542
623
  await Promise.all(successfulChildren.map(async (child) => {
543
624
  try {
544
- const targetDir = path2.join(child.worktreePath, ".claude", "agents");
545
- await fs2.copy(sourceDir, targetDir, { overwrite: true });
546
- getLogger().debug(`Copied .claude/agents/ to ${child.worktreePath}`);
625
+ if (agentsExist) {
626
+ const targetAgentsDir = path2.join(child.worktreePath, ".claude", "agents");
627
+ await fs2.copy(agentsSourceDir, targetAgentsDir, { overwrite: true });
628
+ getLogger().debug(`Copied .claude/agents/ to ${child.worktreePath}`);
629
+ }
630
+ if (skillsExist) {
631
+ const targetSkillsDir = path2.join(child.worktreePath, ".claude", "skills");
632
+ await fs2.copy(skillsSourceDir, targetSkillsDir, { overwrite: true });
633
+ getLogger().debug(`Copied .claude/skills/ to ${child.worktreePath}`);
634
+ }
547
635
  } catch (error) {
548
636
  getLogger().warn(
549
- `Failed to copy agents to child worktree ${child.issueId}: ${error instanceof Error ? error.message : "Unknown error"}`
637
+ `Failed to copy agents/skills to child worktree ${child.issueId}: ${error instanceof Error ? error.message : "Unknown error"}`
550
638
  );
551
639
  }
552
640
  }));
553
- getLogger().success(`Copied agents to ${successfulChildren.length} child worktrees`);
641
+ getLogger().success(`Copied agents and skills to ${successfulChildren.length} child worktrees`);
554
642
  }
555
643
  /**
556
- * Run the full swarm setup: child worktrees, agents, and worker agent.
644
+ * Run the full swarm setup: render agents, worker agent, and wave verifier.
557
645
  *
558
646
  * The epic worktree already exists (created by `il start`).
647
+ * Child worktrees are created on-the-fly by the orchestrator as issues become unblocked.
559
648
  */
560
- async setupSwarm(epicIssueNumber, epicBranch, epicWorktreePath, childIssues, mainWorktreePath, issueTrackerName, settings) {
561
- const childWorktrees = await this.createChildWorktrees(
562
- childIssues,
563
- epicBranch,
564
- epicWorktreePath,
565
- mainWorktreePath,
566
- epicIssueNumber,
567
- issueTrackerName,
568
- settings
569
- );
570
- const { renderedFiles: agentsRendered, metadata: agentMetadata } = await this.renderSwarmAgents(epicWorktreePath);
571
- const workerAgentRendered = await this.renderSwarmWorkerAgent(
572
- epicWorktreePath,
573
- agentMetadata
574
- );
575
- await this.copyAgentsToChildWorktrees(epicWorktreePath, childWorktrees);
576
- const successCount = childWorktrees.filter((c) => c.success).length;
577
- const failCount = childWorktrees.filter((c) => !c.success).length;
578
- getLogger().success(
579
- `Swarm setup complete: ${successCount} child worktrees` + (failCount > 0 ? ` (${failCount} failed)` : "")
580
- );
649
+ async setupSwarm(epicBranch, epicWorktreePath) {
650
+ const { renderedSkills: skillsRendered, renderedAgents } = await this.renderSwarmAgents(epicWorktreePath);
651
+ const workerAgentRendered = await this.renderSwarmWorkerAgent(epicWorktreePath);
652
+ const verifierAgentRendered = await this.renderSwarmWaveVerifierAgent(epicWorktreePath);
653
+ getLogger().success("Swarm setup complete: agents and skills rendered");
581
654
  return {
582
655
  epicWorktreePath,
583
656
  epicBranch,
584
- childWorktrees,
585
- agentsRendered,
586
- workerAgentRendered
657
+ skillsRendered,
658
+ renderedAgents,
659
+ workerAgentRendered,
660
+ verifierAgentRendered
587
661
  };
588
662
  }
589
663
  };
@@ -635,47 +709,14 @@ async function detectProjectLanguage(projectPath) {
635
709
 
636
710
  // src/utils/system-prompt-writer.ts
637
711
  import path4 from "path";
712
+ import os2 from "os";
713
+ import crypto from "crypto";
638
714
  import fs4 from "fs-extra";
639
- async function prepareSystemPromptForPlatform(systemPrompt, workspacePath, platform = process.platform) {
640
- if (platform === "darwin" || platform === "linux") {
641
- return { appendSystemPrompt: systemPrompt };
642
- }
643
- const claudeDir = path4.join(workspacePath, ".claude");
644
- const promptFilePath = path4.join(claudeDir, "iloom-system-prompt.md");
645
- const pluginDir = path4.join(claudeDir, "iloom-plugin");
646
- await fs4.ensureDir(claudeDir);
715
+ async function prepareSystemPromptForPlatform(systemPrompt, workspacePath) {
716
+ const hash = crypto.createHash("sha256").update(workspacePath).digest("hex").slice(0, 12);
717
+ const promptFilePath = path4.join(os2.tmpdir(), `iloom-system-prompt-${hash}.md`);
647
718
  await fs4.writeFile(promptFilePath, systemPrompt, "utf-8");
648
- await createSessionStartPlugin(pluginDir, promptFilePath);
649
- return {
650
- pluginDir,
651
- initialPromptOverride: "/clear"
652
- };
653
- }
654
- async function createSessionStartPlugin(pluginDir, promptFilePath) {
655
- await fs4.ensureDir(pluginDir);
656
- const runnerScript = `process.stdout.write(require('fs').readFileSync(${JSON.stringify(promptFilePath)}, 'utf-8'));`;
657
- await fs4.writeFile(path4.join(pluginDir, "runner.js"), runnerScript, "utf-8");
658
- const portableRunnerPath = path4.join(pluginDir, "runner.js").replace(/\\/g, "/");
659
- const hooksConfig = {
660
- hooks: {
661
- SessionStart: [
662
- {
663
- matcher: "*",
664
- hooks: [
665
- {
666
- type: "command",
667
- command: `node "${portableRunnerPath}"`
668
- }
669
- ]
670
- }
671
- ]
672
- }
673
- };
674
- await fs4.writeFile(
675
- path4.join(pluginDir, "hooks.json"),
676
- JSON.stringify(hooksConfig, null, 2),
677
- "utf-8"
678
- );
719
+ return { appendSystemPromptFile: promptFilePath };
679
720
  }
680
721
 
681
722
  // src/commands/ignite.ts
@@ -951,26 +992,12 @@ var IgniteCommand = class {
951
992
  agentOverrides: Object.keys(this.settings.agents)
952
993
  });
953
994
  }
954
- const loadedAgents = await this.agentManager.loadAgents(
995
+ agents = await this.agentManager.loadAndPrepare(
955
996
  this.settings,
956
997
  variables,
957
- ["*.md", "!iloom-framework-detector.md"]
998
+ ["*.md", "!iloom-framework-detector.md"],
999
+ path5.join(context.workspacePath, ".claude", "agents")
958
1000
  );
959
- if (process.platform === "darwin") {
960
- agents = this.agentManager.formatForCli(loadedAgents);
961
- logger.debug("Loaded agent configurations for CLI", {
962
- agentCount: Object.keys(agents).length,
963
- agentNames: Object.keys(agents)
964
- });
965
- } else {
966
- const agentsDir = path5.join(context.workspacePath, ".claude", "agents");
967
- const rendered = await this.agentManager.renderAgentsToDisk(loadedAgents, agentsDir);
968
- logger.debug("Rendered agent files to disk for auto-discovery", {
969
- agentCount: rendered.length,
970
- agentNames: rendered,
971
- targetDir: agentsDir
972
- });
973
- }
974
1001
  } catch (error) {
975
1002
  logger.warn(`Failed to load agents: ${error instanceof Error ? error.message : "Unknown error"}`);
976
1003
  }
@@ -991,11 +1018,9 @@ var IgniteCommand = class {
991
1018
  systemInstructions,
992
1019
  context.workspacePath
993
1020
  );
994
- const effectiveUserPrompt = systemPromptConfig.initialPromptOverride ?? userPrompt;
995
- const claudeResult = await launchClaude(effectiveUserPrompt, {
1021
+ const claudeResult = await launchClaude(userPrompt, {
996
1022
  ...claudeOptions,
997
- ...systemPromptConfig.appendSystemPrompt && { appendSystemPrompt: systemPromptConfig.appendSystemPrompt },
998
- ...systemPromptConfig.pluginDir && { pluginDir: systemPromptConfig.pluginDir },
1023
+ appendSystemPromptFile: systemPromptConfig.appendSystemPromptFile,
999
1024
  ...mcpConfig && { mcpConfig },
1000
1025
  ...allowedTools && { allowedTools },
1001
1026
  ...disallowedTools && { disallowedTools },
@@ -1316,6 +1341,9 @@ var IgniteCommand = class {
1316
1341
  const finishedMetadata = await metadataManager.listFinishedMetadata();
1317
1342
  const finishedByIssueNumber = /* @__PURE__ */ new Map();
1318
1343
  for (const meta of finishedMetadata) {
1344
+ if (meta.projectPath && meta.projectPath !== mainWorktreePath) {
1345
+ continue;
1346
+ }
1319
1347
  for (const issueNum of meta.issue_numbers) {
1320
1348
  if (!finishedByIssueNumber.has(issueNum)) {
1321
1349
  finishedByIssueNumber.set(issueNum, meta);
@@ -1341,33 +1369,65 @@ var IgniteCommand = class {
1341
1369
  logger.info(`Skipping child ${skipped.number} (state: ${skipped.state})`);
1342
1370
  }
1343
1371
  }
1344
- const swarmResult = await swarmSetup.setupSwarm(
1345
- epicIssueNumber,
1372
+ await swarmSetup.setupSwarm(
1346
1373
  epicBranch,
1347
- epicWorktreePath,
1348
- pendingChildIssues,
1349
- mainWorktreePath,
1350
- providerName,
1351
- settings
1374
+ epicWorktreePath
1352
1375
  );
1353
- const successfulWorktrees = swarmResult.childWorktrees.filter((c) => c.success);
1354
- const worktreeMap = new Map(successfulWorktrees.map((cw) => [cw.issueId, cw]));
1355
- const childIssuesData = pendingChildIssues.filter((ci) => worktreeMap.has(ci.number.replace(/^#/, ""))).map((ci) => {
1376
+ const childIssuesData = pendingChildIssues.map((ci) => {
1356
1377
  const rawId = ci.number.replace(/^#/, "");
1357
- const wt = worktreeMap.get(rawId);
1378
+ const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
1379
+ const branchName = `issue/${safeId}`;
1380
+ const worktreePath = generateWorktreePath(branchName, mainWorktreePath);
1358
1381
  return {
1359
1382
  number: rawId,
1360
1383
  title: ci.title,
1361
1384
  body: ci.body,
1362
- worktreePath: (wt == null ? void 0 : wt.worktreePath) ?? "",
1363
- branchName: (wt == null ? void 0 : wt.branch) ?? ""
1385
+ worktreePath,
1386
+ branchName
1364
1387
  };
1365
1388
  });
1389
+ for (const child of childIssuesData) {
1390
+ try {
1391
+ await metadataManager.writeMetadata(child.worktreePath, {
1392
+ description: child.title,
1393
+ branchName: child.branchName,
1394
+ worktreePath: child.worktreePath,
1395
+ issueType: "issue",
1396
+ issue_numbers: [child.number],
1397
+ pr_numbers: [],
1398
+ issueTracker: metadata.issueTracker ?? "github",
1399
+ colorHex: "#808080",
1400
+ sessionId: "",
1401
+ projectPath: mainWorktreePath,
1402
+ issueUrls: {},
1403
+ prUrls: {},
1404
+ capabilities: [],
1405
+ state: "pending",
1406
+ parentLoom: {
1407
+ type: "epic",
1408
+ identifier: epicIssueNumber,
1409
+ branchName: epicBranch,
1410
+ worktreePath: epicWorktreePath
1411
+ }
1412
+ });
1413
+ const recapFilePath = resolveRecapFilePath(child.worktreePath);
1414
+ await writeRecapFile(recapFilePath, { goal: child.title });
1415
+ } catch (error) {
1416
+ logger.warn(`Failed to pre-create metadata/recap for child #${child.number}: ${error instanceof Error ? error.message : "Unknown error"}`);
1417
+ }
1418
+ }
1366
1419
  const epicMetadataPath = metadataManager.getMetadataFilePath(epicWorktreePath);
1367
1420
  const issuePrefix = providerName === "github" ? "#" : "";
1368
1421
  const postSwarmReview = ((_a = settings.spin) == null ? void 0 : _a.postSwarmReview) !== false;
1422
+ let swarmTeamName = metadata.swarmTeamName;
1423
+ if (!swarmTeamName) {
1424
+ const projectSlug = path5.basename(mainWorktreePath).replace(/[^a-zA-Z0-9_-]/g, "-");
1425
+ swarmTeamName = `swarm-${projectSlug}-${epicIssueNumber}-${Date.now()}`;
1426
+ await metadataManager.updateMetadata(epicWorktreePath, { swarmTeamName });
1427
+ }
1369
1428
  const variables = {
1370
1429
  EPIC_ISSUE_NUMBER: epicIssueNumber,
1430
+ SWARM_TEAM_NAME: swarmTeamName,
1371
1431
  EPIC_WORKTREE_PATH: epicWorktreePath,
1372
1432
  EPIC_METADATA_PATH: epicMetadataPath,
1373
1433
  CHILD_ISSUES: JSON.stringify(childIssuesData, null, 2),
@@ -1414,27 +1474,22 @@ var IgniteCommand = class {
1414
1474
  logger.info(` Model: ${model ?? "default"}`);
1415
1475
  logger.info(` Permission mode: bypassPermissions`);
1416
1476
  logger.info(` Agent teams: enabled`);
1417
- logger.info(` Child worktrees: ${successfulWorktrees.length}`);
1477
+ logger.info(` Pending child issues: ${pendingChildIssues.length}`);
1418
1478
  let agents;
1419
1479
  try {
1420
- const loadedAgents = await this.agentManager.loadAgents(
1480
+ agents = await this.agentManager.loadAndPrepare(
1421
1481
  settings,
1422
1482
  variables,
1423
- ["*.md", "!iloom-framework-detector.md"]
1483
+ ["*.md", "!iloom-framework-detector.md"],
1484
+ path5.join(epicWorktreePath, ".claude", "agents")
1424
1485
  );
1425
- if (process.platform === "darwin") {
1426
- agents = this.agentManager.formatForCli(loadedAgents);
1427
- } else {
1428
- const agentsDir = path5.join(epicWorktreePath, ".claude", "agents");
1429
- await this.agentManager.renderAgentsToDisk(loadedAgents, agentsDir);
1430
- }
1431
1486
  } catch (error) {
1432
1487
  logger.warn(`Failed to load agents: ${error instanceof Error ? error.message : "Unknown error"}`);
1433
1488
  }
1434
1489
  const swarmStartTime = Date.now();
1435
1490
  try {
1436
1491
  TelemetryService.getInstance().track("swarm.started", {
1437
- child_count: successfulWorktrees.length,
1492
+ child_count: pendingChildIssues.length,
1438
1493
  tracker: providerName
1439
1494
  });
1440
1495
  } catch (error) {
@@ -1444,7 +1499,7 @@ var IgniteCommand = class {
1444
1499
  orchestratorPrompt,
1445
1500
  epicWorktreePath
1446
1501
  );
1447
- const effectiveSwarmPrompt = orchestratorPromptConfig.initialPromptOverride ?? `You are the swarm orchestrator for epic #${epicIssueNumber}. Begin by reading your system prompt instructions and executing the workflow.`;
1502
+ const swarmUserPrompt = `You are the swarm orchestrator for epic #${epicIssueNumber}. Begin by reading your system prompt instructions and executing the workflow.`;
1448
1503
  process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
1449
1504
  process.env.ILOOM_SWARM = "1";
1450
1505
  process.env.ENABLE_TOOL_SEARCH = "auto:30";
@@ -1452,14 +1507,13 @@ var IgniteCommand = class {
1452
1507
  process.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY = "1";
1453
1508
  process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1";
1454
1509
  process.env.CLAUDE_CODE_EFFORT_LEVEL = "medium";
1455
- await launchClaude(effectiveSwarmPrompt, {
1510
+ await launchClaude(swarmUserPrompt, {
1456
1511
  model,
1457
1512
  permissionMode: "bypassPermissions",
1458
1513
  addDir: epicWorktreePath,
1459
1514
  headless: false,
1460
1515
  ...metadata.sessionId && { sessionId: metadata.sessionId },
1461
- ...orchestratorPromptConfig.appendSystemPrompt && { appendSystemPrompt: orchestratorPromptConfig.appendSystemPrompt },
1462
- ...orchestratorPromptConfig.pluginDir && { pluginDir: orchestratorPromptConfig.pluginDir },
1516
+ appendSystemPromptFile: orchestratorPromptConfig.appendSystemPromptFile,
1463
1517
  mcpConfig: mcpConfigs,
1464
1518
  allowedTools,
1465
1519
  ...agents && { agents }
@@ -1468,8 +1522,12 @@ var IgniteCommand = class {
1468
1522
  const swarmEndTime = Date.now();
1469
1523
  let succeeded = 0;
1470
1524
  let failed = 0;
1471
- for (const child of successfulWorktrees) {
1472
- const childMeta = await metadataManager.readMetadata(child.worktreePath);
1525
+ for (const child of pendingChildIssues) {
1526
+ const rawId = child.number.replace(/^#/, "");
1527
+ const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
1528
+ const childBranch = `issue/${safeId}`;
1529
+ const childWorktreePath = generateWorktreePath(childBranch, mainWorktreePath);
1530
+ const childMeta = await metadataManager.readMetadata(childWorktreePath);
1473
1531
  const isSuccess = (childMeta == null ? void 0 : childMeta.state) === "done";
1474
1532
  if (isSuccess) {
1475
1533
  succeeded++;
@@ -1485,7 +1543,7 @@ var IgniteCommand = class {
1485
1543
  });
1486
1544
  }
1487
1545
  TelemetryService.getInstance().track("swarm.completed", {
1488
- total_children: successfulWorktrees.length,
1546
+ total_children: pendingChildIssues.length,
1489
1547
  succeeded,
1490
1548
  failed,
1491
1549
  duration_minutes: Math.round((swarmEndTime - swarmStartTime) / 6e4)
@@ -1557,4 +1615,4 @@ export {
1557
1615
  WorktreeValidationError,
1558
1616
  IgniteCommand
1559
1617
  };
1560
- //# sourceMappingURL=chunk-IR74O2F6.js.map
1618
+ //# sourceMappingURL=chunk-UVXB6O24.js.map