@iloom/cli 0.11.1 → 0.13.0-beta.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 (290) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +170 -15
  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-RRGREEZQ.js +14 -0
  7. package/dist/ClaudeService-LEPW6QAC.js +13 -0
  8. package/dist/GitHubService-UTAYZXL3.js +12 -0
  9. package/dist/IssueTrackerFactory-KE2BDCLC.js +15 -0
  10. package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-GKQMR5E6.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 +170 -15
  15. package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-KQU7OX7G.js} +15 -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-V3KADFMO.js +27 -0
  28. package/dist/{chunk-XXFSOVL3.js → chunk-3XEXT35Z.js} +4 -4
  29. package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
  30. package/dist/chunk-4JZEQBWV.js.map +1 -0
  31. package/dist/{chunk-LE2NOUTN.js → chunk-4VQXMEEP.js} +3 -3
  32. package/dist/{chunk-G2MNSPA4.js → chunk-772N5WCA.js} +2 -2
  33. package/dist/{chunk-WG4MLJ6J.js → chunk-7RCUWU3I.js} +2 -2
  34. package/dist/chunk-7RCUWU3I.js.map +1 -0
  35. package/dist/{chunk-NOMQ5RFG.js → chunk-7UBEHQTP.js} +2 -2
  36. package/dist/{chunk-7NFCGKZT.js → chunk-AQUSMNBF.js} +3 -3
  37. package/dist/{chunk-IDCE26KD.js → chunk-AUYSAMXV.js} +3 -3
  38. package/dist/chunk-AYLC633W.js +406 -0
  39. package/dist/chunk-AYLC633W.js.map +1 -0
  40. package/dist/{chunk-QVAA5KHK.js → chunk-BZ7KTXPB.js} +16 -8
  41. package/dist/chunk-BZ7KTXPB.js.map +1 -0
  42. package/dist/{chunk-K7R5QY6C.js → chunk-CE676WCN.js} +2 -2
  43. package/dist/{chunk-5UFGO4ZT.js → chunk-CQHHEW2M.js} +6 -3
  44. package/dist/chunk-CQHHEW2M.js.map +1 -0
  45. package/dist/{chunk-LHDD4JHC.js → chunk-D4Q7T5KD.js} +4 -4
  46. package/dist/{chunk-RBYTXYGD.js → chunk-D75KSI3V.js} +2 -2
  47. package/dist/{chunk-Y3RX7LZT.js → chunk-DDHWZNGL.js} +18 -12
  48. package/dist/chunk-DDHWZNGL.js.map +1 -0
  49. package/dist/{chunk-5LTID2AF.js → chunk-DMSL5BAP.js} +35 -6
  50. package/dist/{chunk-5LTID2AF.js.map → chunk-DMSL5BAP.js.map} +1 -1
  51. package/dist/{chunk-SQYHPBFP.js → chunk-EGNUOALL.js} +2 -2
  52. package/dist/{chunk-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
  53. package/dist/{chunk-5PNZBH6V.js → chunk-H3T3EPF3.js} +2 -2
  54. package/dist/{chunk-VNYWBHKR.js → chunk-JD3K2344.js} +3 -3
  55. package/dist/{chunk-6YVJVUR4.js → chunk-JDN4SPV3.js} +3 -3
  56. package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
  57. package/dist/{chunk-ABVMUNCD.js → chunk-KQSV7FOG.js} +64 -10
  58. package/dist/chunk-KQSV7FOG.js.map +1 -0
  59. package/dist/{chunk-NH3QZYE5.js → chunk-KV4NU3RP.js} +2 -2
  60. package/dist/{chunk-NDSGJZI2.js → chunk-LOAYWTJJ.js} +2 -2
  61. package/dist/{chunk-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
  62. package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
  63. package/dist/{chunk-RMLADZRY.js → chunk-NTDY5AMO.js} +5 -5
  64. package/dist/{chunk-UHIBKD73.js → chunk-NUUFP53X.js} +13 -32
  65. package/dist/{chunk-UHIBKD73.js.map → chunk-NUUFP53X.js.map} +1 -1
  66. package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
  67. package/dist/chunk-P5MXXHXQ.js +284 -0
  68. package/dist/chunk-P5MXXHXQ.js.map +1 -0
  69. package/dist/{chunk-TEJAGQX2.js → chunk-PD75ZCFT.js} +35 -35
  70. package/dist/chunk-PD75ZCFT.js.map +1 -0
  71. package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
  72. package/dist/{chunk-LL6TOX3G.js → chunk-Q7VXHJP6.js} +10 -10
  73. package/dist/chunk-Q7VXHJP6.js.map +1 -0
  74. package/dist/chunk-QC65IOV3.js +304 -0
  75. package/dist/chunk-QC65IOV3.js.map +1 -0
  76. package/dist/{chunk-V4STTBQD.js → chunk-QED2WB2D.js} +9 -9
  77. package/dist/{chunk-3RXYOBME.js → chunk-QNPJXO53.js} +5 -5
  78. package/dist/{chunk-3RXYOBME.js.map → chunk-QNPJXO53.js.map} +1 -1
  79. package/dist/chunk-QQULYI2S.js +696 -0
  80. package/dist/chunk-QQULYI2S.js.map +1 -0
  81. package/dist/{chunk-QNHZM5ZV.js → chunk-QXGM32TO.js} +3 -3
  82. package/dist/{chunk-TZNNJLGT.js → chunk-RFCAPHL5.js} +6 -6
  83. package/dist/{chunk-7FIXNAUO.js → chunk-SA446KA2.js} +66 -43
  84. package/dist/chunk-SA446KA2.js.map +1 -0
  85. package/dist/{chunk-UDCI3QTS.js → chunk-SN4S5CWL.js} +2 -2
  86. package/dist/{chunk-VUUN3KE4.js → chunk-TAEVA4QR.js} +8 -8
  87. package/dist/chunk-TAEVA4QR.js.map +1 -0
  88. package/dist/{chunk-IR74O2F6.js → chunk-TN2D2RX7.js} +253 -174
  89. package/dist/chunk-TN2D2RX7.js.map +1 -0
  90. package/dist/{chunk-3GTUXW26.js → chunk-VIQOQ463.js} +19 -3
  91. package/dist/chunk-VIQOQ463.js.map +1 -0
  92. package/dist/{chunk-H2SSF24U.js → chunk-VRPPI6GU.js} +17 -6
  93. package/dist/{chunk-H2SSF24U.js.map → chunk-VRPPI6GU.js.map} +1 -1
  94. package/dist/{chunk-XFQGI2E3.js → chunk-VVQQIG64.js} +58 -53
  95. package/dist/chunk-VVQQIG64.js.map +1 -0
  96. package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
  97. package/dist/{chunk-ET6A2JR4.js → chunk-WGUGB54H.js} +120 -18
  98. package/dist/chunk-WGUGB54H.js.map +1 -0
  99. package/dist/{chunk-QR4FU53I.js → chunk-X5DRLONY.js} +22 -12
  100. package/dist/chunk-X5DRLONY.js.map +1 -0
  101. package/dist/{chunk-KQFIGI37.js → chunk-XCP2WDYA.js} +7 -7
  102. package/dist/{chunk-VMZG66UV.js → chunk-YUOVWWJX.js} +312 -7
  103. package/dist/chunk-YUOVWWJX.js.map +1 -0
  104. package/dist/{chunk-HLDY5S4C.js → chunk-ZUIFO7B4.js} +3 -3
  105. package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
  106. package/dist/{cleanup-YOM6PQCN.js → cleanup-RJKLI47I.js} +40 -37
  107. package/dist/cleanup-RJKLI47I.js.map +1 -0
  108. package/dist/cli.js +322 -169
  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-SUHRUMDE.js} +15 -15
  112. package/dist/{compile-4NCQECKE.js → compile-2MD346PO.js} +11 -11
  113. package/dist/{contribute-M5UWXCAV.js → contribute-P4BMRY7C.js} +11 -11
  114. package/dist/{contribute-M5UWXCAV.js.map → contribute-P4BMRY7C.js.map} +1 -1
  115. package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
  116. package/dist/database-helpers-PRDFNDRO.js +11 -0
  117. package/dist/{dev-server-CYRP6M73.js → dev-server-ZNTLWOL5.js} +35 -21
  118. package/dist/dev-server-ZNTLWOL5.js.map +1 -0
  119. package/dist/{feedback-BMAZGKRW.js → feedback-Q6WG2WX4.js} +17 -17
  120. package/dist/{git-BXUD6CL5.js → git-TX2IEMB3.js} +6 -6
  121. package/dist/ignite-P644W2PK.js +35 -0
  122. package/dist/index.d.ts +236 -18
  123. package/dist/index.js +180 -63
  124. package/dist/index.js.map +1 -1
  125. package/dist/{init-CI43GJHV.js → init-5HFY7JG6.js} +18 -18
  126. package/dist/{install-deps-SRTM5U7D.js → install-deps-J4ALTM27.js} +11 -11
  127. package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
  128. package/dist/{issues-DMRQJH7E.js → issues-LZMIF22U.js} +69 -56
  129. package/dist/issues-LZMIF22U.js.map +1 -0
  130. package/dist/lint-XIXKU22H.js +27 -0
  131. package/dist/{linux-RYLOP2LY.js → linux-WUGRYCJY.js} +2 -2
  132. package/dist/mcp/{chunk-PIIRD4LO.js → chunk-4HZMW2V3.js} +1 -1
  133. package/dist/mcp/{chunk-PIIRD4LO.js.map → chunk-4HZMW2V3.js.map} +1 -1
  134. package/dist/{darwin-5BHWRJ7D.js → mcp/darwin-U25WIGH6.js} +2 -2
  135. package/dist/mcp/issue-management-server.js +908 -20
  136. package/dist/mcp/issue-management-server.js.map +1 -1
  137. package/dist/mcp/{linux-JBVS4R3A.js → linux-5BXVBGSY.js} +2 -2
  138. package/dist/mcp/recap-server.js +24 -22
  139. package/dist/mcp/recap-server.js.map +1 -1
  140. package/dist/mcp/{tmux-RYBLEHUZ.js → tmux-CU26ZTNM.js} +2 -2
  141. package/dist/mcp/{wsl-4QZIQLLE.js → wsl-KI25UDOF.js} +2 -2
  142. package/dist/{open-2Y7GSUTJ.js → open-KUO35JIJ.js} +36 -21
  143. package/dist/open-KUO35JIJ.js.map +1 -0
  144. package/dist/{plan-SWFPLNJE.js → plan-7CF56OIR.js} +47 -43
  145. package/dist/{plan-SWFPLNJE.js.map → plan-7CF56OIR.js.map} +1 -1
  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 +184 -23
  150. package/dist/prompts/issue-prompt.txt +94 -158
  151. package/dist/prompts/plan-prompt.txt +55 -0
  152. package/dist/prompts/regular-prompt.txt +1 -1
  153. package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
  154. package/dist/{rebase-S6OHAOOF.js → rebase-MAMWPA2L.js} +12 -12
  155. package/dist/{recap-GGVCG5VH.js → recap-IDBO3KM5.js} +9 -9
  156. package/dist/{remote-MZTFHHTU.js → remote-RO4LZKT2.js} +3 -3
  157. package/dist/remote-RO4LZKT2.js.map +1 -0
  158. package/dist/{run-ST3FR75O.js → run-RGZHCQ6M.js} +36 -21
  159. package/dist/run-RGZHCQ6M.js.map +1 -0
  160. package/dist/schema/settings.schema.json +171 -11
  161. package/dist/{shell-W4SBQPTE.js → shell-7ADCDFIV.js} +8 -8
  162. package/dist/{summary-P2JCIIJO.js → summary-7J2HORFD.js} +21 -19
  163. package/dist/summary-7J2HORFD.js.map +1 -0
  164. package/dist/test-SRB7EWU6.js +27 -0
  165. package/dist/{test-git-2KFFAQ6B.js → test-git-G7ATVIXG.js} +6 -6
  166. package/dist/{test-jira-FKDKG6CD.js → test-jira-Q2HPA522.js} +8 -8
  167. package/dist/{test-prefix-GP2DAX37.js → test-prefix-JMDGXR5A.js} +6 -6
  168. package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
  169. package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-GZFVXBGD.js} +8 -8
  170. package/dist/{tmux-7ZTA3BDI.js → tmux-6LRFH3DM.js} +2 -2
  171. package/dist/{update-XLW7R7FL.js → update-AD3GE5C4.js} +4 -4
  172. package/dist/{update-notifier-EYLAXZAA.js → update-notifier-VYDTDMSJ.js} +3 -3
  173. package/dist/update-notifier-VYDTDMSJ.js.map +1 -0
  174. package/dist/{vscode-TOGE5N67.js → vscode-3I7ISHUU.js} +12 -12
  175. package/dist/{vscode-announcement-NIX7O2MG.js → vscode-announcement-AL3EHORH.js} +3 -3
  176. package/dist/{wsl-Y4GUTOQ7.js → wsl-4VMVT2PO.js} +2 -2
  177. package/package.json +1 -1
  178. package/dist/ClaudeContextManager-SXDCWDJA.js +0 -14
  179. package/dist/ClaudeService-6E6MCGJE.js +0 -13
  180. package/dist/GitHubService-2R5GQG4K.js +0 -12
  181. package/dist/IssueTrackerFactory-XN6MQ4UN.js +0 -14
  182. package/dist/MetadataManager-CMQQTFLQ.js +0 -10
  183. package/dist/ProjectCapabilityDetector-IC6NAFGY.js +0 -11
  184. package/dist/SettingsMigrationManager-S6J7OHUH.js +0 -10
  185. package/dist/build-OLS6J5KZ.js +0 -27
  186. package/dist/chunk-3GTUXW26.js.map +0 -1
  187. package/dist/chunk-5UFGO4ZT.js.map +0 -1
  188. package/dist/chunk-7FIXNAUO.js.map +0 -1
  189. package/dist/chunk-ABVMUNCD.js.map +0 -1
  190. package/dist/chunk-ET6A2JR4.js.map +0 -1
  191. package/dist/chunk-IR74O2F6.js.map +0 -1
  192. package/dist/chunk-LL6TOX3G.js.map +0 -1
  193. package/dist/chunk-QR4FU53I.js.map +0 -1
  194. package/dist/chunk-QVAA5KHK.js.map +0 -1
  195. package/dist/chunk-RVI6C2H5.js +0 -220
  196. package/dist/chunk-RVI6C2H5.js.map +0 -1
  197. package/dist/chunk-TEJAGQX2.js.map +0 -1
  198. package/dist/chunk-VMZG66UV.js.map +0 -1
  199. package/dist/chunk-VUUN3KE4.js.map +0 -1
  200. package/dist/chunk-WG4MLJ6J.js.map +0 -1
  201. package/dist/chunk-XFQGI2E3.js.map +0 -1
  202. package/dist/chunk-Y3RX7LZT.js.map +0 -1
  203. package/dist/chunk-YRCEOQPX.js.map +0 -1
  204. package/dist/cleanup-YOM6PQCN.js.map +0 -1
  205. package/dist/dev-server-CYRP6M73.js.map +0 -1
  206. package/dist/ignite-IO4LXVXJ.js +0 -35
  207. package/dist/issues-DMRQJH7E.js.map +0 -1
  208. package/dist/lint-BSWRMGPZ.js +0 -27
  209. package/dist/neon-helpers-HWIYRKOW.js +0 -11
  210. package/dist/open-2Y7GSUTJ.js.map +0 -1
  211. package/dist/run-ST3FR75O.js.map +0 -1
  212. package/dist/summary-P2JCIIJO.js.map +0 -1
  213. package/dist/test-6JH4FE2X.js +0 -27
  214. /package/dist/{BranchNamingService-XBCO747L.js.map → BitBucketApiClient-J2ZSCS5N.js.map} +0 -0
  215. /package/dist/{ClaudeContextManager-SXDCWDJA.js.map → BitBucketVCSProvider-5X64IXXW.js.map} +0 -0
  216. /package/dist/{ClaudeService-6E6MCGJE.js.map → BranchNamingService-MEK2WZUD.js.map} +0 -0
  217. /package/dist/{GitHubService-2R5GQG4K.js.map → ClaudeContextManager-RRGREEZQ.js.map} +0 -0
  218. /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-LEPW6QAC.js.map} +0 -0
  219. /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
  220. /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-KE2BDCLC.js.map} +0 -0
  221. /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-GKQMR5E6.js.map} +0 -0
  222. /package/dist/{PromptTemplateManager-T5VTLJP3.js.map → MetadataManager-V4LSJ2PB.js.map} +0 -0
  223. /package/dist/{SettingsManager-WQ5NSGAH.js.map → ProjectCapabilityDetector-I4J66WKF.js.map} +0 -0
  224. /package/dist/{SettingsMigrationManager-S6J7OHUH.js.map → PromptTemplateManager-I75WKXM4.js.map} +0 -0
  225. /package/dist/{claude-ONQTDWV3.js.map → SettingsManager-KQU7OX7G.js.map} +0 -0
  226. /package/dist/{color-VQD52LOI.js.map → SettingsMigrationManager-ZPARZ5KH.js.map} +0 -0
  227. /package/dist/{darwin-5BHWRJ7D.js.map → browser-VZY7F2DF.js.map} +0 -0
  228. /package/dist/{build-OLS6J5KZ.js.map → build-V3KADFMO.js.map} +0 -0
  229. /package/dist/{chunk-XXFSOVL3.js.map → chunk-3XEXT35Z.js.map} +0 -0
  230. /package/dist/{chunk-LE2NOUTN.js.map → chunk-4VQXMEEP.js.map} +0 -0
  231. /package/dist/{chunk-G2MNSPA4.js.map → chunk-772N5WCA.js.map} +0 -0
  232. /package/dist/{chunk-NOMQ5RFG.js.map → chunk-7UBEHQTP.js.map} +0 -0
  233. /package/dist/{chunk-7NFCGKZT.js.map → chunk-AQUSMNBF.js.map} +0 -0
  234. /package/dist/{chunk-IDCE26KD.js.map → chunk-AUYSAMXV.js.map} +0 -0
  235. /package/dist/{chunk-K7R5QY6C.js.map → chunk-CE676WCN.js.map} +0 -0
  236. /package/dist/{chunk-LHDD4JHC.js.map → chunk-D4Q7T5KD.js.map} +0 -0
  237. /package/dist/{chunk-RBYTXYGD.js.map → chunk-D75KSI3V.js.map} +0 -0
  238. /package/dist/{chunk-SQYHPBFP.js.map → chunk-EGNUOALL.js.map} +0 -0
  239. /package/dist/{chunk-ZAXRQLK3.js.map → chunk-FTYWGQFM.js.map} +0 -0
  240. /package/dist/{chunk-5PNZBH6V.js.map → chunk-H3T3EPF3.js.map} +0 -0
  241. /package/dist/{chunk-VNYWBHKR.js.map → chunk-JD3K2344.js.map} +0 -0
  242. /package/dist/{chunk-6YVJVUR4.js.map → chunk-JDN4SPV3.js.map} +0 -0
  243. /package/dist/{chunk-NCPZYQ4B.js.map → chunk-K3QGG4O2.js.map} +0 -0
  244. /package/dist/{chunk-NH3QZYE5.js.map → chunk-KV4NU3RP.js.map} +0 -0
  245. /package/dist/{chunk-NDSGJZI2.js.map → chunk-LOAYWTJJ.js.map} +0 -0
  246. /package/dist/{chunk-GMDSYLI6.js.map → chunk-MY2Q3FJ3.js.map} +0 -0
  247. /package/dist/{chunk-CV47VCMQ.js.map → chunk-NPVA65KS.js.map} +0 -0
  248. /package/dist/{chunk-RMLADZRY.js.map → chunk-NTDY5AMO.js.map} +0 -0
  249. /package/dist/{chunk-7OCGBJLR.js.map → chunk-OIVFHJOA.js.map} +0 -0
  250. /package/dist/{chunk-NN5RYWXA.js.map → chunk-PH65MFQM.js.map} +0 -0
  251. /package/dist/{chunk-V4STTBQD.js.map → chunk-QED2WB2D.js.map} +0 -0
  252. /package/dist/{chunk-QNHZM5ZV.js.map → chunk-QXGM32TO.js.map} +0 -0
  253. /package/dist/{chunk-TZNNJLGT.js.map → chunk-RFCAPHL5.js.map} +0 -0
  254. /package/dist/{chunk-UDCI3QTS.js.map → chunk-SN4S5CWL.js.map} +0 -0
  255. /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
  256. /package/dist/{chunk-KQFIGI37.js.map → chunk-XCP2WDYA.js.map} +0 -0
  257. /package/dist/{chunk-HLDY5S4C.js.map → chunk-ZUIFO7B4.js.map} +0 -0
  258. /package/dist/{git-BXUD6CL5.js.map → claude-ACL7G4CF.js.map} +0 -0
  259. /package/dist/{ignite-IO4LXVXJ.js.map → color-AC6F2QE7.js.map} +0 -0
  260. /package/dist/{commit-DC2Q5CDY.js.map → commit-SUHRUMDE.js.map} +0 -0
  261. /package/dist/{compile-4NCQECKE.js.map → compile-2MD346PO.js.map} +0 -0
  262. /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
  263. /package/dist/{mcp/darwin-3JFFE3W2.js.map → database-helpers-PRDFNDRO.js.map} +0 -0
  264. /package/dist/{feedback-BMAZGKRW.js.map → feedback-Q6WG2WX4.js.map} +0 -0
  265. /package/dist/{neon-helpers-HWIYRKOW.js.map → git-TX2IEMB3.js.map} +0 -0
  266. /package/dist/{prompt-7LZB4PAT.js.map → ignite-P644W2PK.js.map} +0 -0
  267. /package/dist/{init-CI43GJHV.js.map → init-5HFY7JG6.js.map} +0 -0
  268. /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-J4ALTM27.js.map} +0 -0
  269. /package/dist/{remote-MZTFHHTU.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
  270. /package/dist/{lint-BSWRMGPZ.js.map → lint-XIXKU22H.js.map} +0 -0
  271. /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
  272. /package/dist/{update-notifier-EYLAXZAA.js.map → mcp/darwin-U25WIGH6.js.map} +0 -0
  273. /package/dist/mcp/{linux-JBVS4R3A.js.map → linux-5BXVBGSY.js.map} +0 -0
  274. /package/dist/mcp/{tmux-RYBLEHUZ.js.map → tmux-CU26ZTNM.js.map} +0 -0
  275. /package/dist/mcp/{wsl-4QZIQLLE.js.map → wsl-KI25UDOF.js.map} +0 -0
  276. /package/dist/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
  277. /package/dist/{rebase-S6OHAOOF.js.map → rebase-MAMWPA2L.js.map} +0 -0
  278. /package/dist/{recap-GGVCG5VH.js.map → recap-IDBO3KM5.js.map} +0 -0
  279. /package/dist/{shell-W4SBQPTE.js.map → shell-7ADCDFIV.js.map} +0 -0
  280. /package/dist/{test-6JH4FE2X.js.map → test-SRB7EWU6.js.map} +0 -0
  281. /package/dist/{test-git-2KFFAQ6B.js.map → test-git-G7ATVIXG.js.map} +0 -0
  282. /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-Q2HPA522.js.map} +0 -0
  283. /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-JMDGXR5A.js.map} +0 -0
  284. /package/dist/{test-tabs-YDWMWTVA.js.map → test-tabs-NGPTFD5T.js.map} +0 -0
  285. /package/dist/{test-webserver-QI3QQFZ3.js.map → test-webserver-GZFVXBGD.js.map} +0 -0
  286. /package/dist/{tmux-7ZTA3BDI.js.map → tmux-6LRFH3DM.js.map} +0 -0
  287. /package/dist/{update-XLW7R7FL.js.map → update-AD3GE5C4.js.map} +0 -0
  288. /package/dist/{vscode-TOGE5N67.js.map → vscode-3I7ISHUU.js.map} +0 -0
  289. /package/dist/{vscode-announcement-NIX7O2MG.js.map → vscode-announcement-AL3EHORH.js.map} +0 -0
  290. /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-RFCAPHL5.js";
6
6
  import {
7
7
  preAcceptClaudeTrust
8
- } from "./chunk-NOMQ5RFG.js";
8
+ } from "./chunk-7UBEHQTP.js";
9
+ import {
10
+ getWorkspacePort
11
+ } from "./chunk-ZUIFO7B4.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-JD3K2344.js";
20
29
  import {
21
- getWorkspacePort
22
- } from "./chunk-HLDY5S4C.js";
30
+ IssueManagementProviderFactory
31
+ } from "./chunk-NTDY5AMO.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-4VQXMEEP.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-NUUFP53X.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-QNPJXO53.js";
58
58
  import {
59
59
  SettingsManager
60
- } from "./chunk-ET6A2JR4.js";
60
+ } from "./chunk-WGUGB54H.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
+ *
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.
423
429
  *
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.
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
@@ -745,7 +786,7 @@ var IgniteCommand = class {
745
786
  * Internal execution method (separated for withLogger wrapping)
746
787
  */
747
788
  async executeInternal(oneShot, skipCleanup, workspacePath, complexity) {
748
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
789
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
749
790
  process.env.ILOOM = "1";
750
791
  try {
751
792
  await this.validateNotMainWorktree(workspacePath);
@@ -800,16 +841,18 @@ var IgniteCommand = class {
800
841
  }
801
842
  try {
802
843
  const hasNeon = !!((_e = (_d = this.settings) == null ? void 0 : _d.databaseProviders) == null ? void 0 : _e.neon);
844
+ const hasSupabase = !!((_g = (_f = this.settings) == null ? void 0 : _f.databaseProviders) == null ? void 0 : _g.supabase);
803
845
  const language = await detectProjectLanguage(context.workspacePath);
804
846
  TelemetryService.getInstance().track("session.started", {
805
847
  has_neon: hasNeon,
848
+ has_supabase: hasSupabase,
806
849
  language
807
850
  });
808
851
  } catch (error) {
809
852
  logger.debug(`Telemetry session.started tracking failed: ${error instanceof Error ? error.message : error}`);
810
853
  }
811
- if (((_f = metadata == null ? void 0 : metadata.capabilities) == null ? void 0 : _f.includes("web")) && context.branchName) {
812
- const basePort = ((_i = (_h = (_g = this.settings) == null ? void 0 : _g.capabilities) == null ? void 0 : _h.web) == null ? void 0 : _i.basePort) ?? 3e3;
854
+ if (((_h = metadata == null ? void 0 : metadata.capabilities) == null ? void 0 : _h.includes("web")) && context.branchName) {
855
+ const basePort = ((_k = (_j = (_i = this.settings) == null ? void 0 : _i.capabilities) == null ? void 0 : _j.web) == null ? void 0 : _k.basePort) ?? 3e3;
813
856
  context.port = await getWorkspacePort({
814
857
  basePort,
815
858
  worktreePath: context.workspacePath,
@@ -817,7 +860,7 @@ var IgniteCommand = class {
817
860
  });
818
861
  logger.info(`\u{1F310} Development server port: ${context.port}`);
819
862
  }
820
- const isEpicLoom = metadata && metadata.issue_numbers.length > 0 && ((((_j = metadata.childIssues) == null ? void 0 : _j.length) ?? 0) > 0 || metadata.issueType === "epic");
863
+ const isEpicLoom = metadata && metadata.issue_numbers.length > 0 && ((((_l = metadata.childIssues) == null ? void 0 : _l.length) ?? 0) > 0 || metadata.issueType === "epic");
821
864
  if (isEpicLoom && this.settings) {
822
865
  await this.fetchAndStoreEpicChildData(metadataManager, metadata, context.workspacePath, this.settings);
823
866
  }
@@ -857,7 +900,7 @@ var IgniteCommand = class {
857
900
  throw new Error("No session ID found in loom metadata. This loom may need to be recreated with `il start`.");
858
901
  }
859
902
  logger.debug("Using session ID from metadata", { sessionId });
860
- const isHeadless = ((_k = this.printOptions) == null ? void 0 : _k.print) ?? false;
903
+ const isHeadless = ((_m = this.printOptions) == null ? void 0 : _m.print) ?? false;
861
904
  const claudeOptions = {
862
905
  headless: isHeadless,
863
906
  addDir: context.workspacePath,
@@ -873,16 +916,16 @@ var IgniteCommand = class {
873
916
  if (permissionMode !== void 0 && permissionMode !== "default") {
874
917
  claudeOptions.permissionMode = permissionMode;
875
918
  }
876
- if (((_l = this.printOptions) == null ? void 0 : _l.outputFormat) !== void 0) {
919
+ if (((_n = this.printOptions) == null ? void 0 : _n.outputFormat) !== void 0) {
877
920
  claudeOptions.outputFormat = this.printOptions.outputFormat;
878
921
  }
879
- if (((_m = this.printOptions) == null ? void 0 : _m.verbose) !== void 0) {
922
+ if (((_o = this.printOptions) == null ? void 0 : _o.verbose) !== void 0) {
880
923
  claudeOptions.verbose = this.printOptions.verbose;
881
924
  }
882
- if ((_n = this.printOptions) == null ? void 0 : _n.json) {
925
+ if ((_p = this.printOptions) == null ? void 0 : _p.json) {
883
926
  claudeOptions.jsonMode = "json";
884
927
  claudeOptions.outputFormat = "stream-json";
885
- } else if ((_o = this.printOptions) == null ? void 0 : _o.jsonStream) {
928
+ } else if ((_q = this.printOptions) == null ? void 0 : _q.jsonStream) {
886
929
  claudeOptions.jsonMode = "stream";
887
930
  claudeOptions.outputFormat = "stream-json";
888
931
  }
@@ -946,7 +989,7 @@ var IgniteCommand = class {
946
989
  }
947
990
  let agents;
948
991
  try {
949
- if (((_p = this.settings) == null ? void 0 : _p.agents) && Object.keys(this.settings.agents).length > 0) {
992
+ if (((_r = this.settings) == null ? void 0 : _r.agents) && Object.keys(this.settings.agents).length > 0) {
950
993
  logger.debug("Loaded project settings", {
951
994
  agentOverrides: Object.keys(this.settings.agents)
952
995
  });
@@ -991,17 +1034,15 @@ var IgniteCommand = class {
991
1034
  systemInstructions,
992
1035
  context.workspacePath
993
1036
  );
994
- const effectiveUserPrompt = systemPromptConfig.initialPromptOverride ?? userPrompt;
995
- const claudeResult = await launchClaude(effectiveUserPrompt, {
1037
+ const claudeResult = await launchClaude(userPrompt, {
996
1038
  ...claudeOptions,
997
- ...systemPromptConfig.appendSystemPrompt && { appendSystemPrompt: systemPromptConfig.appendSystemPrompt },
998
- ...systemPromptConfig.pluginDir && { pluginDir: systemPromptConfig.pluginDir },
1039
+ appendSystemPromptFile: systemPromptConfig.appendSystemPromptFile,
999
1040
  ...mcpConfig && { mcpConfig },
1000
1041
  ...allowedTools && { allowedTools },
1001
1042
  ...disallowedTools && { disallowedTools },
1002
1043
  ...agents && { agents }
1003
1044
  });
1004
- if ((_q = this.printOptions) == null ? void 0 : _q.json) {
1045
+ if ((_s = this.printOptions) == null ? void 0 : _s.json) {
1005
1046
  console.log(JSON.stringify({
1006
1047
  success: true,
1007
1048
  output: claudeResult ?? ""
@@ -1012,7 +1053,7 @@ var IgniteCommand = class {
1012
1053
  }
1013
1054
  } catch (error) {
1014
1055
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
1015
- if ((_r = this.printOptions) == null ? void 0 : _r.json) {
1056
+ if ((_t = this.printOptions) == null ? void 0 : _t.json) {
1016
1057
  console.log(JSON.stringify({
1017
1058
  success: false,
1018
1059
  error: errorMessage
@@ -1316,6 +1357,9 @@ var IgniteCommand = class {
1316
1357
  const finishedMetadata = await metadataManager.listFinishedMetadata();
1317
1358
  const finishedByIssueNumber = /* @__PURE__ */ new Map();
1318
1359
  for (const meta of finishedMetadata) {
1360
+ if (meta.projectPath && meta.projectPath !== mainWorktreePath) {
1361
+ continue;
1362
+ }
1319
1363
  for (const issueNum of meta.issue_numbers) {
1320
1364
  if (!finishedByIssueNumber.has(issueNum)) {
1321
1365
  finishedByIssueNumber.set(issueNum, meta);
@@ -1341,33 +1385,65 @@ var IgniteCommand = class {
1341
1385
  logger.info(`Skipping child ${skipped.number} (state: ${skipped.state})`);
1342
1386
  }
1343
1387
  }
1344
- const swarmResult = await swarmSetup.setupSwarm(
1345
- epicIssueNumber,
1388
+ await swarmSetup.setupSwarm(
1346
1389
  epicBranch,
1347
- epicWorktreePath,
1348
- pendingChildIssues,
1349
- mainWorktreePath,
1350
- providerName,
1351
- settings
1390
+ epicWorktreePath
1352
1391
  );
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) => {
1392
+ const childIssuesData = pendingChildIssues.map((ci) => {
1356
1393
  const rawId = ci.number.replace(/^#/, "");
1357
- const wt = worktreeMap.get(rawId);
1394
+ const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
1395
+ const branchName = `issue/${safeId}`;
1396
+ const worktreePath = generateWorktreePath(branchName, mainWorktreePath);
1358
1397
  return {
1359
1398
  number: rawId,
1360
1399
  title: ci.title,
1361
1400
  body: ci.body,
1362
- worktreePath: (wt == null ? void 0 : wt.worktreePath) ?? "",
1363
- branchName: (wt == null ? void 0 : wt.branch) ?? ""
1401
+ worktreePath,
1402
+ branchName
1364
1403
  };
1365
1404
  });
1405
+ for (const child of childIssuesData) {
1406
+ try {
1407
+ await metadataManager.writeMetadata(child.worktreePath, {
1408
+ description: child.title,
1409
+ branchName: child.branchName,
1410
+ worktreePath: child.worktreePath,
1411
+ issueType: "issue",
1412
+ issue_numbers: [child.number],
1413
+ pr_numbers: [],
1414
+ issueTracker: metadata.issueTracker ?? "github",
1415
+ colorHex: "#808080",
1416
+ sessionId: "",
1417
+ projectPath: mainWorktreePath,
1418
+ issueUrls: {},
1419
+ prUrls: {},
1420
+ capabilities: [],
1421
+ state: "pending",
1422
+ parentLoom: {
1423
+ type: "epic",
1424
+ identifier: epicIssueNumber,
1425
+ branchName: epicBranch,
1426
+ worktreePath: epicWorktreePath
1427
+ }
1428
+ });
1429
+ const recapFilePath = resolveRecapFilePath(child.worktreePath);
1430
+ await writeRecapFile(recapFilePath, { goal: child.title });
1431
+ } catch (error) {
1432
+ logger.warn(`Failed to pre-create metadata/recap for child #${child.number}: ${error instanceof Error ? error.message : "Unknown error"}`);
1433
+ }
1434
+ }
1366
1435
  const epicMetadataPath = metadataManager.getMetadataFilePath(epicWorktreePath);
1367
1436
  const issuePrefix = providerName === "github" ? "#" : "";
1368
1437
  const postSwarmReview = ((_a = settings.spin) == null ? void 0 : _a.postSwarmReview) !== false;
1438
+ let swarmTeamName = metadata.swarmTeamName;
1439
+ if (!swarmTeamName) {
1440
+ const projectSlug = path5.basename(mainWorktreePath).replace(/[^a-zA-Z0-9_-]/g, "-");
1441
+ swarmTeamName = `swarm-${projectSlug}-${epicIssueNumber}-${Date.now()}`;
1442
+ await metadataManager.updateMetadata(epicWorktreePath, { swarmTeamName });
1443
+ }
1369
1444
  const variables = {
1370
1445
  EPIC_ISSUE_NUMBER: epicIssueNumber,
1446
+ SWARM_TEAM_NAME: swarmTeamName,
1371
1447
  EPIC_WORKTREE_PATH: epicWorktreePath,
1372
1448
  EPIC_METADATA_PATH: epicMetadataPath,
1373
1449
  CHILD_ISSUES: JSON.stringify(childIssuesData, null, 2),
@@ -1414,7 +1490,7 @@ var IgniteCommand = class {
1414
1490
  logger.info(` Model: ${model ?? "default"}`);
1415
1491
  logger.info(` Permission mode: bypassPermissions`);
1416
1492
  logger.info(` Agent teams: enabled`);
1417
- logger.info(` Child worktrees: ${successfulWorktrees.length}`);
1493
+ logger.info(` Pending child issues: ${pendingChildIssues.length}`);
1418
1494
  let agents;
1419
1495
  try {
1420
1496
  const loadedAgents = await this.agentManager.loadAgents(
@@ -1434,7 +1510,7 @@ var IgniteCommand = class {
1434
1510
  const swarmStartTime = Date.now();
1435
1511
  try {
1436
1512
  TelemetryService.getInstance().track("swarm.started", {
1437
- child_count: successfulWorktrees.length,
1513
+ child_count: pendingChildIssues.length,
1438
1514
  tracker: providerName
1439
1515
  });
1440
1516
  } catch (error) {
@@ -1444,7 +1520,7 @@ var IgniteCommand = class {
1444
1520
  orchestratorPrompt,
1445
1521
  epicWorktreePath
1446
1522
  );
1447
- const effectiveSwarmPrompt = orchestratorPromptConfig.initialPromptOverride ?? `You are the swarm orchestrator for epic #${epicIssueNumber}. Begin by reading your system prompt instructions and executing the workflow.`;
1523
+ const swarmUserPrompt = `You are the swarm orchestrator for epic #${epicIssueNumber}. Begin by reading your system prompt instructions and executing the workflow.`;
1448
1524
  process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
1449
1525
  process.env.ILOOM_SWARM = "1";
1450
1526
  process.env.ENABLE_TOOL_SEARCH = "auto:30";
@@ -1452,14 +1528,13 @@ var IgniteCommand = class {
1452
1528
  process.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY = "1";
1453
1529
  process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1";
1454
1530
  process.env.CLAUDE_CODE_EFFORT_LEVEL = "medium";
1455
- await launchClaude(effectiveSwarmPrompt, {
1531
+ await launchClaude(swarmUserPrompt, {
1456
1532
  model,
1457
1533
  permissionMode: "bypassPermissions",
1458
1534
  addDir: epicWorktreePath,
1459
1535
  headless: false,
1460
1536
  ...metadata.sessionId && { sessionId: metadata.sessionId },
1461
- ...orchestratorPromptConfig.appendSystemPrompt && { appendSystemPrompt: orchestratorPromptConfig.appendSystemPrompt },
1462
- ...orchestratorPromptConfig.pluginDir && { pluginDir: orchestratorPromptConfig.pluginDir },
1537
+ appendSystemPromptFile: orchestratorPromptConfig.appendSystemPromptFile,
1463
1538
  mcpConfig: mcpConfigs,
1464
1539
  allowedTools,
1465
1540
  ...agents && { agents }
@@ -1468,8 +1543,12 @@ var IgniteCommand = class {
1468
1543
  const swarmEndTime = Date.now();
1469
1544
  let succeeded = 0;
1470
1545
  let failed = 0;
1471
- for (const child of successfulWorktrees) {
1472
- const childMeta = await metadataManager.readMetadata(child.worktreePath);
1546
+ for (const child of pendingChildIssues) {
1547
+ const rawId = child.number.replace(/^#/, "");
1548
+ const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
1549
+ const childBranch = `issue/${safeId}`;
1550
+ const childWorktreePath = generateWorktreePath(childBranch, mainWorktreePath);
1551
+ const childMeta = await metadataManager.readMetadata(childWorktreePath);
1473
1552
  const isSuccess = (childMeta == null ? void 0 : childMeta.state) === "done";
1474
1553
  if (isSuccess) {
1475
1554
  succeeded++;
@@ -1485,7 +1564,7 @@ var IgniteCommand = class {
1485
1564
  });
1486
1565
  }
1487
1566
  TelemetryService.getInstance().track("swarm.completed", {
1488
- total_children: successfulWorktrees.length,
1567
+ total_children: pendingChildIssues.length,
1489
1568
  succeeded,
1490
1569
  failed,
1491
1570
  duration_minutes: Math.round((swarmEndTime - swarmStartTime) / 6e4)
@@ -1557,4 +1636,4 @@ export {
1557
1636
  WorktreeValidationError,
1558
1637
  IgniteCommand
1559
1638
  };
1560
- //# sourceMappingURL=chunk-IR74O2F6.js.map
1639
+ //# sourceMappingURL=chunk-TN2D2RX7.js.map