@iloom/cli 0.11.1 → 0.12.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.
- package/LICENSE +1 -1
- package/README.md +153 -13
- package/dist/BitBucketApiClient-J2ZSCS5N.js +10 -0
- package/dist/BitBucketVCSProvider-5X64IXXW.js +12 -0
- package/dist/{BranchNamingService-XBCO747L.js → BranchNamingService-MEK2WZUD.js} +4 -4
- package/dist/ClaudeContextManager-IENAE2CP.js +14 -0
- package/dist/ClaudeService-YIJCZUUB.js +13 -0
- package/dist/GitHubService-UTAYZXL3.js +12 -0
- package/dist/IssueTrackerFactory-2OI7YIN6.js +15 -0
- package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-3TSFW7QP.js} +10 -10
- package/dist/MetadataManager-V4LSJ2PB.js +10 -0
- package/dist/ProjectCapabilityDetector-I4J66WKF.js +11 -0
- package/dist/{PromptTemplateManager-T5VTLJP3.js → PromptTemplateManager-I75WKXM4.js} +3 -3
- package/dist/README.md +153 -13
- package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-BMQCAXPP.js} +13 -5
- package/dist/SettingsMigrationManager-ZPARZ5KH.js +10 -0
- package/dist/agents/iloom-code-reviewer.md +2 -1
- package/dist/agents/iloom-framework-detector.md +0 -1
- package/dist/agents/iloom-issue-analyze-and-plan.md +4 -1
- package/dist/agents/iloom-issue-analyzer.md +4 -1
- package/dist/agents/iloom-issue-complexity-evaluator.md +4 -1
- package/dist/agents/iloom-issue-enhancer.md +4 -1
- package/dist/agents/iloom-issue-implementer.md +5 -2
- package/dist/agents/iloom-issue-planner.md +4 -1
- package/dist/agents/iloom-wave-verifier.md +186 -0
- package/dist/browser-VZY7F2DF.js +10 -0
- package/dist/build-DMWSIME6.js +27 -0
- package/dist/{chunk-UHIBKD73.js → chunk-35CBWAJL.js} +13 -32
- package/dist/{chunk-UHIBKD73.js.map → chunk-35CBWAJL.js.map} +1 -1
- package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
- package/dist/chunk-4JZEQBWV.js.map +1 -0
- package/dist/{chunk-ET6A2JR4.js → chunk-653XBU3L.js} +111 -18
- package/dist/chunk-653XBU3L.js.map +1 -0
- package/dist/{chunk-G2MNSPA4.js → chunk-772N5WCA.js} +2 -2
- package/dist/{chunk-WG4MLJ6J.js → chunk-7RCUWU3I.js} +2 -2
- package/dist/chunk-7RCUWU3I.js.map +1 -0
- package/dist/{chunk-NOMQ5RFG.js → chunk-7UBEHQTP.js} +2 -2
- package/dist/{chunk-7NFCGKZT.js → chunk-AQUSMNBF.js} +3 -3
- package/dist/{chunk-IDCE26KD.js → chunk-AUYSAMXV.js} +3 -3
- package/dist/chunk-AYLC633W.js +406 -0
- package/dist/chunk-AYLC633W.js.map +1 -0
- package/dist/{chunk-HLDY5S4C.js → chunk-BFF27W3S.js} +3 -3
- package/dist/{chunk-QVAA5KHK.js → chunk-BZ7KTXPB.js} +16 -8
- package/dist/chunk-BZ7KTXPB.js.map +1 -0
- package/dist/{chunk-K7R5QY6C.js → chunk-CE676WCN.js} +2 -2
- package/dist/{chunk-5UFGO4ZT.js → chunk-CQHHEW2M.js} +6 -3
- package/dist/chunk-CQHHEW2M.js.map +1 -0
- package/dist/{chunk-LHDD4JHC.js → chunk-D4Q7T5KD.js} +4 -4
- package/dist/{chunk-RBYTXYGD.js → chunk-D75KSI3V.js} +2 -2
- package/dist/{chunk-Y3RX7LZT.js → chunk-DDHWZNGL.js} +18 -12
- package/dist/chunk-DDHWZNGL.js.map +1 -0
- package/dist/{chunk-5LTID2AF.js → chunk-DMSL5BAP.js} +35 -6
- package/dist/{chunk-5LTID2AF.js.map → chunk-DMSL5BAP.js.map} +1 -1
- package/dist/{chunk-SQYHPBFP.js → chunk-EGNUOALL.js} +2 -2
- package/dist/{chunk-LL6TOX3G.js → chunk-EQIII6GI.js} +10 -10
- package/dist/chunk-EQIII6GI.js.map +1 -0
- package/dist/{chunk-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
- package/dist/{chunk-LE2NOUTN.js → chunk-FV4KXBGO.js} +3 -3
- package/dist/{chunk-XFQGI2E3.js → chunk-GWJWECZB.js} +51 -45
- package/dist/chunk-GWJWECZB.js.map +1 -0
- package/dist/{chunk-QNHZM5ZV.js → chunk-HIGWKLQR.js} +3 -3
- package/dist/{chunk-VMZG66UV.js → chunk-HKEXRZMU.js} +3 -3
- package/dist/{chunk-V4STTBQD.js → chunk-IHSA7VGI.js} +9 -9
- package/dist/{chunk-TEJAGQX2.js → chunk-IS46GQRA.js} +33 -33
- package/dist/{chunk-VNYWBHKR.js → chunk-JD3K2344.js} +3 -3
- package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
- package/dist/{chunk-QR4FU53I.js → chunk-KCZSUJUR.js} +22 -12
- package/dist/chunk-KCZSUJUR.js.map +1 -0
- package/dist/{chunk-NH3QZYE5.js → chunk-KV4NU3RP.js} +2 -2
- package/dist/{chunk-NDSGJZI2.js → chunk-LOAYWTJJ.js} +2 -2
- package/dist/{chunk-ABVMUNCD.js → chunk-M3FBM4T3.js} +64 -10
- package/dist/chunk-M3FBM4T3.js.map +1 -0
- package/dist/{chunk-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
- package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
- package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
- package/dist/{chunk-7FIXNAUO.js → chunk-OKB2NEDQ.js} +66 -43
- package/dist/chunk-OKB2NEDQ.js.map +1 -0
- package/dist/{chunk-3RXYOBME.js → chunk-OPQC4OWM.js} +5 -5
- package/dist/{chunk-3RXYOBME.js.map → chunk-OPQC4OWM.js.map} +1 -1
- package/dist/chunk-P5MXXHXQ.js +284 -0
- package/dist/chunk-P5MXXHXQ.js.map +1 -0
- package/dist/{chunk-IR74O2F6.js → chunk-PDG74IJT.js} +239 -162
- package/dist/chunk-PDG74IJT.js.map +1 -0
- package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
- package/dist/{chunk-TZNNJLGT.js → chunk-PMB6TYV4.js} +6 -6
- package/dist/chunk-QC65IOV3.js +304 -0
- package/dist/chunk-QC65IOV3.js.map +1 -0
- package/dist/{chunk-6YVJVUR4.js → chunk-QF2DROQR.js} +3 -3
- package/dist/{chunk-XXFSOVL3.js → chunk-QFDM23CO.js} +4 -4
- package/dist/{chunk-RMLADZRY.js → chunk-R7DGN73N.js} +5 -5
- package/dist/{chunk-5PNZBH6V.js → chunk-V5IYLWRA.js} +2 -2
- package/dist/{chunk-KQFIGI37.js → chunk-VA6CWUAE.js} +7 -7
- package/dist/{chunk-3GTUXW26.js → chunk-VIQOQ463.js} +19 -3
- package/dist/chunk-VIQOQ463.js.map +1 -0
- package/dist/{chunk-H2SSF24U.js → chunk-VRPPI6GU.js} +17 -6
- package/dist/{chunk-H2SSF24U.js.map → chunk-VRPPI6GU.js.map} +1 -1
- package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
- package/dist/{chunk-VUUN3KE4.js → chunk-XVCGPTEQ.js} +8 -8
- package/dist/chunk-XVCGPTEQ.js.map +1 -0
- package/dist/chunk-YWNF5755.js +696 -0
- package/dist/chunk-YWNF5755.js.map +1 -0
- package/dist/{chunk-UDCI3QTS.js → chunk-ZM2AYHMO.js} +2 -2
- package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
- package/dist/{cleanup-YOM6PQCN.js → cleanup-RLBLNQZN.js} +37 -34
- package/dist/{cleanup-YOM6PQCN.js.map → cleanup-RLBLNQZN.js.map} +1 -1
- package/dist/cli.js +290 -141
- package/dist/cli.js.map +1 -1
- package/dist/{color-VQD52LOI.js → color-AC6F2QE7.js} +3 -3
- package/dist/{commit-DC2Q5CDY.js → commit-RILBXFWO.js} +15 -15
- package/dist/{compile-4NCQECKE.js → compile-QEL5724K.js} +11 -11
- package/dist/{contribute-M5UWXCAV.js → contribute-EHWLYOMZ.js} +11 -11
- package/dist/{contribute-M5UWXCAV.js.map → contribute-EHWLYOMZ.js.map} +1 -1
- package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
- package/dist/{dev-server-CYRP6M73.js → dev-server-2WSWZXJG.js} +35 -21
- package/dist/dev-server-2WSWZXJG.js.map +1 -0
- package/dist/{feedback-BMAZGKRW.js → feedback-I6ZEHEUB.js} +17 -17
- package/dist/{git-BXUD6CL5.js → git-I3PO6FY7.js} +6 -6
- package/dist/ignite-XZFYRVRJ.js +35 -0
- package/dist/index.d.ts +200 -16
- package/dist/index.js +164 -55
- package/dist/index.js.map +1 -1
- package/dist/{init-CI43GJHV.js → init-A6WRP77L.js} +18 -18
- package/dist/{install-deps-SRTM5U7D.js → install-deps-HXP2TM7G.js} +11 -11
- package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
- package/dist/{issues-DMRQJH7E.js → issues-SUFQJY6O.js} +69 -56
- package/dist/issues-SUFQJY6O.js.map +1 -0
- package/dist/lint-FDZC77GL.js +27 -0
- package/dist/{linux-RYLOP2LY.js → linux-WUGRYCJY.js} +2 -2
- package/dist/mcp/{chunk-PIIRD4LO.js → chunk-4HZMW2V3.js} +1 -1
- package/dist/mcp/{chunk-PIIRD4LO.js.map → chunk-4HZMW2V3.js.map} +1 -1
- package/dist/{darwin-5BHWRJ7D.js → mcp/darwin-U25WIGH6.js} +2 -2
- package/dist/mcp/issue-management-server.js +900 -20
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/mcp/{linux-JBVS4R3A.js → linux-5BXVBGSY.js} +2 -2
- package/dist/mcp/recap-server.js +24 -22
- package/dist/mcp/recap-server.js.map +1 -1
- package/dist/mcp/{tmux-RYBLEHUZ.js → tmux-CU26ZTNM.js} +2 -2
- package/dist/mcp/{wsl-4QZIQLLE.js → wsl-KI25UDOF.js} +2 -2
- package/dist/neon-helpers-LCZAN4U4.js +11 -0
- package/dist/{open-2Y7GSUTJ.js → open-US4XACLW.js} +36 -21
- package/dist/open-US4XACLW.js.map +1 -0
- package/dist/{plan-SWFPLNJE.js → plan-PL3ZB32J.js} +47 -43
- package/dist/{plan-SWFPLNJE.js.map → plan-PL3ZB32J.js.map} +1 -1
- package/dist/{projects-IUSUXD5D.js → projects-L5AHUBGA.js} +6 -6
- package/dist/{prompt-7LZB4PAT.js → prompt-FUU5NMJQ.js} +3 -3
- package/dist/prompt-FUU5NMJQ.js.map +1 -0
- package/dist/prompts/init-prompt.txt +160 -23
- package/dist/prompts/issue-prompt.txt +93 -157
- package/dist/prompts/plan-prompt.txt +55 -0
- package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
- package/dist/{rebase-S6OHAOOF.js → rebase-JA3RW2XO.js} +12 -12
- package/dist/{recap-GGVCG5VH.js → recap-5TO42HN2.js} +9 -9
- package/dist/{remote-MZTFHHTU.js → remote-RO4LZKT2.js} +3 -3
- package/dist/remote-RO4LZKT2.js.map +1 -0
- package/dist/{run-ST3FR75O.js → run-KKCRBRLW.js} +36 -21
- package/dist/run-KKCRBRLW.js.map +1 -0
- package/dist/schema/settings.schema.json +147 -11
- package/dist/{shell-W4SBQPTE.js → shell-GAB2FCXH.js} +8 -8
- package/dist/{summary-P2JCIIJO.js → summary-P7QE3TNW.js} +21 -19
- package/dist/summary-P7QE3TNW.js.map +1 -0
- package/dist/test-6LFB5WOO.js +27 -0
- package/dist/{test-git-2KFFAQ6B.js → test-git-PYJOYSED.js} +6 -6
- package/dist/{test-jira-FKDKG6CD.js → test-jira-SM7IU5HW.js} +8 -8
- package/dist/{test-prefix-GP2DAX37.js → test-prefix-HIRZBXTM.js} +6 -6
- package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
- package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-43PVP2JL.js} +8 -8
- package/dist/{tmux-7ZTA3BDI.js → tmux-6LRFH3DM.js} +2 -2
- package/dist/{update-XLW7R7FL.js → update-AD3GE5C4.js} +4 -4
- package/dist/{update-notifier-EYLAXZAA.js → update-notifier-VYDTDMSJ.js} +3 -3
- package/dist/update-notifier-VYDTDMSJ.js.map +1 -0
- package/dist/{vscode-TOGE5N67.js → vscode-HXIXRZ3A.js} +12 -12
- package/dist/{vscode-announcement-NIX7O2MG.js → vscode-announcement-AL3EHORH.js} +3 -3
- package/dist/{wsl-Y4GUTOQ7.js → wsl-4VMVT2PO.js} +2 -2
- package/package.json +1 -1
- package/dist/ClaudeContextManager-SXDCWDJA.js +0 -14
- package/dist/ClaudeService-6E6MCGJE.js +0 -13
- package/dist/GitHubService-2R5GQG4K.js +0 -12
- package/dist/IssueTrackerFactory-XN6MQ4UN.js +0 -14
- package/dist/MetadataManager-CMQQTFLQ.js +0 -10
- package/dist/ProjectCapabilityDetector-IC6NAFGY.js +0 -11
- package/dist/SettingsMigrationManager-S6J7OHUH.js +0 -10
- package/dist/build-OLS6J5KZ.js +0 -27
- package/dist/chunk-3GTUXW26.js.map +0 -1
- package/dist/chunk-5UFGO4ZT.js.map +0 -1
- package/dist/chunk-7FIXNAUO.js.map +0 -1
- package/dist/chunk-ABVMUNCD.js.map +0 -1
- package/dist/chunk-ET6A2JR4.js.map +0 -1
- package/dist/chunk-IR74O2F6.js.map +0 -1
- package/dist/chunk-LL6TOX3G.js.map +0 -1
- package/dist/chunk-QR4FU53I.js.map +0 -1
- package/dist/chunk-QVAA5KHK.js.map +0 -1
- package/dist/chunk-RVI6C2H5.js +0 -220
- package/dist/chunk-RVI6C2H5.js.map +0 -1
- package/dist/chunk-VUUN3KE4.js.map +0 -1
- package/dist/chunk-WG4MLJ6J.js.map +0 -1
- package/dist/chunk-XFQGI2E3.js.map +0 -1
- package/dist/chunk-Y3RX7LZT.js.map +0 -1
- package/dist/chunk-YRCEOQPX.js.map +0 -1
- package/dist/dev-server-CYRP6M73.js.map +0 -1
- package/dist/ignite-IO4LXVXJ.js +0 -35
- package/dist/issues-DMRQJH7E.js.map +0 -1
- package/dist/lint-BSWRMGPZ.js +0 -27
- package/dist/neon-helpers-HWIYRKOW.js +0 -11
- package/dist/open-2Y7GSUTJ.js.map +0 -1
- package/dist/run-ST3FR75O.js.map +0 -1
- package/dist/summary-P2JCIIJO.js.map +0 -1
- package/dist/test-6JH4FE2X.js +0 -27
- /package/dist/{BranchNamingService-XBCO747L.js.map → BitBucketApiClient-J2ZSCS5N.js.map} +0 -0
- /package/dist/{ClaudeContextManager-SXDCWDJA.js.map → BitBucketVCSProvider-5X64IXXW.js.map} +0 -0
- /package/dist/{ClaudeService-6E6MCGJE.js.map → BranchNamingService-MEK2WZUD.js.map} +0 -0
- /package/dist/{GitHubService-2R5GQG4K.js.map → ClaudeContextManager-IENAE2CP.js.map} +0 -0
- /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-YIJCZUUB.js.map} +0 -0
- /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-2OI7YIN6.js.map} +0 -0
- /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-3TSFW7QP.js.map} +0 -0
- /package/dist/{PromptTemplateManager-T5VTLJP3.js.map → MetadataManager-V4LSJ2PB.js.map} +0 -0
- /package/dist/{SettingsManager-WQ5NSGAH.js.map → ProjectCapabilityDetector-I4J66WKF.js.map} +0 -0
- /package/dist/{SettingsMigrationManager-S6J7OHUH.js.map → PromptTemplateManager-I75WKXM4.js.map} +0 -0
- /package/dist/{claude-ONQTDWV3.js.map → SettingsManager-BMQCAXPP.js.map} +0 -0
- /package/dist/{color-VQD52LOI.js.map → SettingsMigrationManager-ZPARZ5KH.js.map} +0 -0
- /package/dist/{darwin-5BHWRJ7D.js.map → browser-VZY7F2DF.js.map} +0 -0
- /package/dist/{build-OLS6J5KZ.js.map → build-DMWSIME6.js.map} +0 -0
- /package/dist/{chunk-G2MNSPA4.js.map → chunk-772N5WCA.js.map} +0 -0
- /package/dist/{chunk-NOMQ5RFG.js.map → chunk-7UBEHQTP.js.map} +0 -0
- /package/dist/{chunk-7NFCGKZT.js.map → chunk-AQUSMNBF.js.map} +0 -0
- /package/dist/{chunk-IDCE26KD.js.map → chunk-AUYSAMXV.js.map} +0 -0
- /package/dist/{chunk-HLDY5S4C.js.map → chunk-BFF27W3S.js.map} +0 -0
- /package/dist/{chunk-K7R5QY6C.js.map → chunk-CE676WCN.js.map} +0 -0
- /package/dist/{chunk-LHDD4JHC.js.map → chunk-D4Q7T5KD.js.map} +0 -0
- /package/dist/{chunk-RBYTXYGD.js.map → chunk-D75KSI3V.js.map} +0 -0
- /package/dist/{chunk-SQYHPBFP.js.map → chunk-EGNUOALL.js.map} +0 -0
- /package/dist/{chunk-ZAXRQLK3.js.map → chunk-FTYWGQFM.js.map} +0 -0
- /package/dist/{chunk-LE2NOUTN.js.map → chunk-FV4KXBGO.js.map} +0 -0
- /package/dist/{chunk-QNHZM5ZV.js.map → chunk-HIGWKLQR.js.map} +0 -0
- /package/dist/{chunk-VMZG66UV.js.map → chunk-HKEXRZMU.js.map} +0 -0
- /package/dist/{chunk-V4STTBQD.js.map → chunk-IHSA7VGI.js.map} +0 -0
- /package/dist/{chunk-TEJAGQX2.js.map → chunk-IS46GQRA.js.map} +0 -0
- /package/dist/{chunk-VNYWBHKR.js.map → chunk-JD3K2344.js.map} +0 -0
- /package/dist/{chunk-NCPZYQ4B.js.map → chunk-K3QGG4O2.js.map} +0 -0
- /package/dist/{chunk-NH3QZYE5.js.map → chunk-KV4NU3RP.js.map} +0 -0
- /package/dist/{chunk-NDSGJZI2.js.map → chunk-LOAYWTJJ.js.map} +0 -0
- /package/dist/{chunk-GMDSYLI6.js.map → chunk-MY2Q3FJ3.js.map} +0 -0
- /package/dist/{chunk-CV47VCMQ.js.map → chunk-NPVA65KS.js.map} +0 -0
- /package/dist/{chunk-7OCGBJLR.js.map → chunk-OIVFHJOA.js.map} +0 -0
- /package/dist/{chunk-NN5RYWXA.js.map → chunk-PH65MFQM.js.map} +0 -0
- /package/dist/{chunk-TZNNJLGT.js.map → chunk-PMB6TYV4.js.map} +0 -0
- /package/dist/{chunk-6YVJVUR4.js.map → chunk-QF2DROQR.js.map} +0 -0
- /package/dist/{chunk-XXFSOVL3.js.map → chunk-QFDM23CO.js.map} +0 -0
- /package/dist/{chunk-RMLADZRY.js.map → chunk-R7DGN73N.js.map} +0 -0
- /package/dist/{chunk-5PNZBH6V.js.map → chunk-V5IYLWRA.js.map} +0 -0
- /package/dist/{chunk-KQFIGI37.js.map → chunk-VA6CWUAE.js.map} +0 -0
- /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
- /package/dist/{chunk-UDCI3QTS.js.map → chunk-ZM2AYHMO.js.map} +0 -0
- /package/dist/{git-BXUD6CL5.js.map → claude-ACL7G4CF.js.map} +0 -0
- /package/dist/{ignite-IO4LXVXJ.js.map → color-AC6F2QE7.js.map} +0 -0
- /package/dist/{commit-DC2Q5CDY.js.map → commit-RILBXFWO.js.map} +0 -0
- /package/dist/{compile-4NCQECKE.js.map → compile-QEL5724K.js.map} +0 -0
- /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
- /package/dist/{feedback-BMAZGKRW.js.map → feedback-I6ZEHEUB.js.map} +0 -0
- /package/dist/{mcp/darwin-3JFFE3W2.js.map → git-I3PO6FY7.js.map} +0 -0
- /package/dist/{neon-helpers-HWIYRKOW.js.map → ignite-XZFYRVRJ.js.map} +0 -0
- /package/dist/{init-CI43GJHV.js.map → init-A6WRP77L.js.map} +0 -0
- /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-HXP2TM7G.js.map} +0 -0
- /package/dist/{prompt-7LZB4PAT.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
- /package/dist/{lint-BSWRMGPZ.js.map → lint-FDZC77GL.js.map} +0 -0
- /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
- /package/dist/{remote-MZTFHHTU.js.map → mcp/darwin-U25WIGH6.js.map} +0 -0
- /package/dist/mcp/{linux-JBVS4R3A.js.map → linux-5BXVBGSY.js.map} +0 -0
- /package/dist/mcp/{tmux-RYBLEHUZ.js.map → tmux-CU26ZTNM.js.map} +0 -0
- /package/dist/mcp/{wsl-4QZIQLLE.js.map → wsl-KI25UDOF.js.map} +0 -0
- /package/dist/{update-notifier-EYLAXZAA.js.map → neon-helpers-LCZAN4U4.js.map} +0 -0
- /package/dist/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
- /package/dist/{rebase-S6OHAOOF.js.map → rebase-JA3RW2XO.js.map} +0 -0
- /package/dist/{recap-GGVCG5VH.js.map → recap-5TO42HN2.js.map} +0 -0
- /package/dist/{shell-W4SBQPTE.js.map → shell-GAB2FCXH.js.map} +0 -0
- /package/dist/{test-6JH4FE2X.js.map → test-6LFB5WOO.js.map} +0 -0
- /package/dist/{test-git-2KFFAQ6B.js.map → test-git-PYJOYSED.js.map} +0 -0
- /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-SM7IU5HW.js.map} +0 -0
- /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-HIRZBXTM.js.map} +0 -0
- /package/dist/{test-tabs-YDWMWTVA.js.map → test-tabs-NGPTFD5T.js.map} +0 -0
- /package/dist/{test-webserver-QI3QQFZ3.js.map → test-webserver-43PVP2JL.js.map} +0 -0
- /package/dist/{tmux-7ZTA3BDI.js.map → tmux-6LRFH3DM.js.map} +0 -0
- /package/dist/{update-XLW7R7FL.js.map → update-AD3GE5C4.js.map} +0 -0
- /package/dist/{vscode-TOGE5N67.js.map → vscode-HXIXRZ3A.js.map} +0 -0
- /package/dist/{vscode-announcement-NIX7O2MG.js.map → vscode-announcement-AL3EHORH.js.map} +0 -0
- /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-
|
|
5
|
+
} from "./chunk-PMB6TYV4.js";
|
|
6
6
|
import {
|
|
7
7
|
preAcceptClaudeTrust
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
25
|
+
} from "./chunk-CQHHEW2M.js";
|
|
17
26
|
import {
|
|
18
|
-
|
|
19
|
-
} from "./chunk-
|
|
27
|
+
AgentManager
|
|
28
|
+
} from "./chunk-JD3K2344.js";
|
|
20
29
|
import {
|
|
21
|
-
|
|
22
|
-
} from "./chunk-
|
|
30
|
+
IssueManagementProviderFactory
|
|
31
|
+
} from "./chunk-R7DGN73N.js";
|
|
23
32
|
import {
|
|
24
33
|
installDependencies
|
|
25
|
-
} from "./chunk-
|
|
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
|
-
|
|
34
|
-
} from "./chunk-
|
|
36
|
+
GitWorktreeManager
|
|
37
|
+
} from "./chunk-FV4KXBGO.js";
|
|
35
38
|
import {
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
PromptTemplateManager,
|
|
40
|
+
buildReviewTemplateVariables
|
|
41
|
+
} from "./chunk-7RCUWU3I.js";
|
|
38
42
|
import {
|
|
39
|
-
|
|
40
|
-
} from "./chunk-
|
|
43
|
+
extractSettingsOverrides
|
|
44
|
+
} from "./chunk-GYCR2LOU.js";
|
|
41
45
|
import {
|
|
42
46
|
IssueTrackerFactory
|
|
43
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-35CBWAJL.js";
|
|
44
48
|
import {
|
|
45
49
|
launchClaude
|
|
46
|
-
} from "./chunk-
|
|
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-
|
|
57
|
+
} from "./chunk-OPQC4OWM.js";
|
|
58
58
|
import {
|
|
59
59
|
SettingsManager
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-653XBU3L.js";
|
|
61
61
|
import {
|
|
62
62
|
MetadataManager
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-4JZEQBWV.js";
|
|
64
64
|
import {
|
|
65
65
|
getLogger,
|
|
66
66
|
withLogger
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-FTYWGQFM.js";
|
|
68
68
|
import {
|
|
69
69
|
createStderrLogger,
|
|
70
70
|
logger
|
|
71
|
-
} from "./chunk-
|
|
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
|
|
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
|
-
*
|
|
425
|
-
*
|
|
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
|
|
456
|
-
const
|
|
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
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
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 ${
|
|
470
|
-
return {
|
|
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
|
|
485
|
-
var _a, _b, _c
|
|
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 = ((
|
|
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
|
-
*
|
|
559
|
+
* Render the wave verifier agent file to the epic worktree's .claude/agents/ directory.
|
|
530
560
|
*
|
|
531
|
-
*
|
|
532
|
-
*
|
|
533
|
-
*
|
|
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
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
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
|
-
|
|
545
|
-
|
|
546
|
-
|
|
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:
|
|
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(
|
|
561
|
-
const
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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
|
-
|
|
585
|
-
|
|
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
|
|
640
|
-
|
|
641
|
-
|
|
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
|
-
|
|
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
|
|
@@ -991,11 +1032,9 @@ var IgniteCommand = class {
|
|
|
991
1032
|
systemInstructions,
|
|
992
1033
|
context.workspacePath
|
|
993
1034
|
);
|
|
994
|
-
const
|
|
995
|
-
const claudeResult = await launchClaude(effectiveUserPrompt, {
|
|
1035
|
+
const claudeResult = await launchClaude(userPrompt, {
|
|
996
1036
|
...claudeOptions,
|
|
997
|
-
|
|
998
|
-
...systemPromptConfig.pluginDir && { pluginDir: systemPromptConfig.pluginDir },
|
|
1037
|
+
appendSystemPromptFile: systemPromptConfig.appendSystemPromptFile,
|
|
999
1038
|
...mcpConfig && { mcpConfig },
|
|
1000
1039
|
...allowedTools && { allowedTools },
|
|
1001
1040
|
...disallowedTools && { disallowedTools },
|
|
@@ -1316,6 +1355,9 @@ var IgniteCommand = class {
|
|
|
1316
1355
|
const finishedMetadata = await metadataManager.listFinishedMetadata();
|
|
1317
1356
|
const finishedByIssueNumber = /* @__PURE__ */ new Map();
|
|
1318
1357
|
for (const meta of finishedMetadata) {
|
|
1358
|
+
if (meta.projectPath && meta.projectPath !== mainWorktreePath) {
|
|
1359
|
+
continue;
|
|
1360
|
+
}
|
|
1319
1361
|
for (const issueNum of meta.issue_numbers) {
|
|
1320
1362
|
if (!finishedByIssueNumber.has(issueNum)) {
|
|
1321
1363
|
finishedByIssueNumber.set(issueNum, meta);
|
|
@@ -1341,33 +1383,65 @@ var IgniteCommand = class {
|
|
|
1341
1383
|
logger.info(`Skipping child ${skipped.number} (state: ${skipped.state})`);
|
|
1342
1384
|
}
|
|
1343
1385
|
}
|
|
1344
|
-
|
|
1345
|
-
epicIssueNumber,
|
|
1386
|
+
await swarmSetup.setupSwarm(
|
|
1346
1387
|
epicBranch,
|
|
1347
|
-
epicWorktreePath
|
|
1348
|
-
pendingChildIssues,
|
|
1349
|
-
mainWorktreePath,
|
|
1350
|
-
providerName,
|
|
1351
|
-
settings
|
|
1388
|
+
epicWorktreePath
|
|
1352
1389
|
);
|
|
1353
|
-
const
|
|
1354
|
-
const worktreeMap = new Map(successfulWorktrees.map((cw) => [cw.issueId, cw]));
|
|
1355
|
-
const childIssuesData = pendingChildIssues.filter((ci) => worktreeMap.has(ci.number.replace(/^#/, ""))).map((ci) => {
|
|
1390
|
+
const childIssuesData = pendingChildIssues.map((ci) => {
|
|
1356
1391
|
const rawId = ci.number.replace(/^#/, "");
|
|
1357
|
-
const
|
|
1392
|
+
const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
|
|
1393
|
+
const branchName = `issue/${safeId}`;
|
|
1394
|
+
const worktreePath = generateWorktreePath(branchName, mainWorktreePath);
|
|
1358
1395
|
return {
|
|
1359
1396
|
number: rawId,
|
|
1360
1397
|
title: ci.title,
|
|
1361
1398
|
body: ci.body,
|
|
1362
|
-
worktreePath
|
|
1363
|
-
branchName
|
|
1399
|
+
worktreePath,
|
|
1400
|
+
branchName
|
|
1364
1401
|
};
|
|
1365
1402
|
});
|
|
1403
|
+
for (const child of childIssuesData) {
|
|
1404
|
+
try {
|
|
1405
|
+
await metadataManager.writeMetadata(child.worktreePath, {
|
|
1406
|
+
description: child.title,
|
|
1407
|
+
branchName: child.branchName,
|
|
1408
|
+
worktreePath: child.worktreePath,
|
|
1409
|
+
issueType: "issue",
|
|
1410
|
+
issue_numbers: [child.number],
|
|
1411
|
+
pr_numbers: [],
|
|
1412
|
+
issueTracker: metadata.issueTracker ?? "github",
|
|
1413
|
+
colorHex: "#808080",
|
|
1414
|
+
sessionId: "",
|
|
1415
|
+
projectPath: mainWorktreePath,
|
|
1416
|
+
issueUrls: {},
|
|
1417
|
+
prUrls: {},
|
|
1418
|
+
capabilities: [],
|
|
1419
|
+
state: "pending",
|
|
1420
|
+
parentLoom: {
|
|
1421
|
+
type: "epic",
|
|
1422
|
+
identifier: epicIssueNumber,
|
|
1423
|
+
branchName: epicBranch,
|
|
1424
|
+
worktreePath: epicWorktreePath
|
|
1425
|
+
}
|
|
1426
|
+
});
|
|
1427
|
+
const recapFilePath = resolveRecapFilePath(child.worktreePath);
|
|
1428
|
+
await writeRecapFile(recapFilePath, { goal: child.title });
|
|
1429
|
+
} catch (error) {
|
|
1430
|
+
logger.warn(`Failed to pre-create metadata/recap for child #${child.number}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1366
1433
|
const epicMetadataPath = metadataManager.getMetadataFilePath(epicWorktreePath);
|
|
1367
1434
|
const issuePrefix = providerName === "github" ? "#" : "";
|
|
1368
1435
|
const postSwarmReview = ((_a = settings.spin) == null ? void 0 : _a.postSwarmReview) !== false;
|
|
1436
|
+
let swarmTeamName = metadata.swarmTeamName;
|
|
1437
|
+
if (!swarmTeamName) {
|
|
1438
|
+
const projectSlug = path5.basename(mainWorktreePath).replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
1439
|
+
swarmTeamName = `swarm-${projectSlug}-${epicIssueNumber}-${Date.now()}`;
|
|
1440
|
+
await metadataManager.updateMetadata(epicWorktreePath, { swarmTeamName });
|
|
1441
|
+
}
|
|
1369
1442
|
const variables = {
|
|
1370
1443
|
EPIC_ISSUE_NUMBER: epicIssueNumber,
|
|
1444
|
+
SWARM_TEAM_NAME: swarmTeamName,
|
|
1371
1445
|
EPIC_WORKTREE_PATH: epicWorktreePath,
|
|
1372
1446
|
EPIC_METADATA_PATH: epicMetadataPath,
|
|
1373
1447
|
CHILD_ISSUES: JSON.stringify(childIssuesData, null, 2),
|
|
@@ -1414,7 +1488,7 @@ var IgniteCommand = class {
|
|
|
1414
1488
|
logger.info(` Model: ${model ?? "default"}`);
|
|
1415
1489
|
logger.info(` Permission mode: bypassPermissions`);
|
|
1416
1490
|
logger.info(` Agent teams: enabled`);
|
|
1417
|
-
logger.info(`
|
|
1491
|
+
logger.info(` Pending child issues: ${pendingChildIssues.length}`);
|
|
1418
1492
|
let agents;
|
|
1419
1493
|
try {
|
|
1420
1494
|
const loadedAgents = await this.agentManager.loadAgents(
|
|
@@ -1434,7 +1508,7 @@ var IgniteCommand = class {
|
|
|
1434
1508
|
const swarmStartTime = Date.now();
|
|
1435
1509
|
try {
|
|
1436
1510
|
TelemetryService.getInstance().track("swarm.started", {
|
|
1437
|
-
child_count:
|
|
1511
|
+
child_count: pendingChildIssues.length,
|
|
1438
1512
|
tracker: providerName
|
|
1439
1513
|
});
|
|
1440
1514
|
} catch (error) {
|
|
@@ -1444,7 +1518,7 @@ var IgniteCommand = class {
|
|
|
1444
1518
|
orchestratorPrompt,
|
|
1445
1519
|
epicWorktreePath
|
|
1446
1520
|
);
|
|
1447
|
-
const
|
|
1521
|
+
const swarmUserPrompt = `You are the swarm orchestrator for epic #${epicIssueNumber}. Begin by reading your system prompt instructions and executing the workflow.`;
|
|
1448
1522
|
process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
|
|
1449
1523
|
process.env.ILOOM_SWARM = "1";
|
|
1450
1524
|
process.env.ENABLE_TOOL_SEARCH = "auto:30";
|
|
@@ -1452,14 +1526,13 @@ var IgniteCommand = class {
|
|
|
1452
1526
|
process.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY = "1";
|
|
1453
1527
|
process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1";
|
|
1454
1528
|
process.env.CLAUDE_CODE_EFFORT_LEVEL = "medium";
|
|
1455
|
-
await launchClaude(
|
|
1529
|
+
await launchClaude(swarmUserPrompt, {
|
|
1456
1530
|
model,
|
|
1457
1531
|
permissionMode: "bypassPermissions",
|
|
1458
1532
|
addDir: epicWorktreePath,
|
|
1459
1533
|
headless: false,
|
|
1460
1534
|
...metadata.sessionId && { sessionId: metadata.sessionId },
|
|
1461
|
-
|
|
1462
|
-
...orchestratorPromptConfig.pluginDir && { pluginDir: orchestratorPromptConfig.pluginDir },
|
|
1535
|
+
appendSystemPromptFile: orchestratorPromptConfig.appendSystemPromptFile,
|
|
1463
1536
|
mcpConfig: mcpConfigs,
|
|
1464
1537
|
allowedTools,
|
|
1465
1538
|
...agents && { agents }
|
|
@@ -1468,8 +1541,12 @@ var IgniteCommand = class {
|
|
|
1468
1541
|
const swarmEndTime = Date.now();
|
|
1469
1542
|
let succeeded = 0;
|
|
1470
1543
|
let failed = 0;
|
|
1471
|
-
for (const child of
|
|
1472
|
-
const
|
|
1544
|
+
for (const child of pendingChildIssues) {
|
|
1545
|
+
const rawId = child.number.replace(/^#/, "");
|
|
1546
|
+
const safeId = rawId.replace(/[^a-zA-Z0-9-_]/g, "-");
|
|
1547
|
+
const childBranch = `issue/${safeId}`;
|
|
1548
|
+
const childWorktreePath = generateWorktreePath(childBranch, mainWorktreePath);
|
|
1549
|
+
const childMeta = await metadataManager.readMetadata(childWorktreePath);
|
|
1473
1550
|
const isSuccess = (childMeta == null ? void 0 : childMeta.state) === "done";
|
|
1474
1551
|
if (isSuccess) {
|
|
1475
1552
|
succeeded++;
|
|
@@ -1485,7 +1562,7 @@ var IgniteCommand = class {
|
|
|
1485
1562
|
});
|
|
1486
1563
|
}
|
|
1487
1564
|
TelemetryService.getInstance().track("swarm.completed", {
|
|
1488
|
-
total_children:
|
|
1565
|
+
total_children: pendingChildIssues.length,
|
|
1489
1566
|
succeeded,
|
|
1490
1567
|
failed,
|
|
1491
1568
|
duration_minutes: Math.round((swarmEndTime - swarmStartTime) / 6e4)
|
|
@@ -1557,4 +1634,4 @@ export {
|
|
|
1557
1634
|
WorktreeValidationError,
|
|
1558
1635
|
IgniteCommand
|
|
1559
1636
|
};
|
|
1560
|
-
//# sourceMappingURL=chunk-
|
|
1637
|
+
//# sourceMappingURL=chunk-PDG74IJT.js.map
|