@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.
- package/LICENSE +1 -1
- package/README.md +170 -15
- 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-RRGREEZQ.js +14 -0
- package/dist/ClaudeService-LEPW6QAC.js +13 -0
- package/dist/GitHubService-UTAYZXL3.js +12 -0
- package/dist/IssueTrackerFactory-KE2BDCLC.js +15 -0
- package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-GKQMR5E6.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 +170 -15
- package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-KQU7OX7G.js} +15 -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-V3KADFMO.js +27 -0
- package/dist/{chunk-XXFSOVL3.js → chunk-3XEXT35Z.js} +4 -4
- package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
- package/dist/chunk-4JZEQBWV.js.map +1 -0
- package/dist/{chunk-LE2NOUTN.js → chunk-4VQXMEEP.js} +3 -3
- 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-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-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
- package/dist/{chunk-5PNZBH6V.js → chunk-H3T3EPF3.js} +2 -2
- package/dist/{chunk-VNYWBHKR.js → chunk-JD3K2344.js} +3 -3
- package/dist/{chunk-6YVJVUR4.js → chunk-JDN4SPV3.js} +3 -3
- package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
- package/dist/{chunk-ABVMUNCD.js → chunk-KQSV7FOG.js} +64 -10
- package/dist/chunk-KQSV7FOG.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-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
- package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
- package/dist/{chunk-RMLADZRY.js → chunk-NTDY5AMO.js} +5 -5
- package/dist/{chunk-UHIBKD73.js → chunk-NUUFP53X.js} +13 -32
- package/dist/{chunk-UHIBKD73.js.map → chunk-NUUFP53X.js.map} +1 -1
- package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
- package/dist/chunk-P5MXXHXQ.js +284 -0
- package/dist/chunk-P5MXXHXQ.js.map +1 -0
- package/dist/{chunk-TEJAGQX2.js → chunk-PD75ZCFT.js} +35 -35
- package/dist/chunk-PD75ZCFT.js.map +1 -0
- package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
- package/dist/{chunk-LL6TOX3G.js → chunk-Q7VXHJP6.js} +10 -10
- package/dist/chunk-Q7VXHJP6.js.map +1 -0
- package/dist/chunk-QC65IOV3.js +304 -0
- package/dist/chunk-QC65IOV3.js.map +1 -0
- package/dist/{chunk-V4STTBQD.js → chunk-QED2WB2D.js} +9 -9
- package/dist/{chunk-3RXYOBME.js → chunk-QNPJXO53.js} +5 -5
- package/dist/{chunk-3RXYOBME.js.map → chunk-QNPJXO53.js.map} +1 -1
- package/dist/chunk-QQULYI2S.js +696 -0
- package/dist/chunk-QQULYI2S.js.map +1 -0
- package/dist/{chunk-QNHZM5ZV.js → chunk-QXGM32TO.js} +3 -3
- package/dist/{chunk-TZNNJLGT.js → chunk-RFCAPHL5.js} +6 -6
- package/dist/{chunk-7FIXNAUO.js → chunk-SA446KA2.js} +66 -43
- package/dist/chunk-SA446KA2.js.map +1 -0
- package/dist/{chunk-UDCI3QTS.js → chunk-SN4S5CWL.js} +2 -2
- package/dist/{chunk-VUUN3KE4.js → chunk-TAEVA4QR.js} +8 -8
- package/dist/chunk-TAEVA4QR.js.map +1 -0
- package/dist/{chunk-IR74O2F6.js → chunk-TN2D2RX7.js} +253 -174
- package/dist/chunk-TN2D2RX7.js.map +1 -0
- 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-XFQGI2E3.js → chunk-VVQQIG64.js} +58 -53
- package/dist/chunk-VVQQIG64.js.map +1 -0
- package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
- package/dist/{chunk-ET6A2JR4.js → chunk-WGUGB54H.js} +120 -18
- package/dist/chunk-WGUGB54H.js.map +1 -0
- package/dist/{chunk-QR4FU53I.js → chunk-X5DRLONY.js} +22 -12
- package/dist/chunk-X5DRLONY.js.map +1 -0
- package/dist/{chunk-KQFIGI37.js → chunk-XCP2WDYA.js} +7 -7
- package/dist/{chunk-VMZG66UV.js → chunk-YUOVWWJX.js} +312 -7
- package/dist/chunk-YUOVWWJX.js.map +1 -0
- package/dist/{chunk-HLDY5S4C.js → chunk-ZUIFO7B4.js} +3 -3
- package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
- package/dist/{cleanup-YOM6PQCN.js → cleanup-RJKLI47I.js} +40 -37
- package/dist/cleanup-RJKLI47I.js.map +1 -0
- package/dist/cli.js +322 -169
- package/dist/cli.js.map +1 -1
- package/dist/{color-VQD52LOI.js → color-AC6F2QE7.js} +3 -3
- package/dist/{commit-DC2Q5CDY.js → commit-SUHRUMDE.js} +15 -15
- package/dist/{compile-4NCQECKE.js → compile-2MD346PO.js} +11 -11
- package/dist/{contribute-M5UWXCAV.js → contribute-P4BMRY7C.js} +11 -11
- package/dist/{contribute-M5UWXCAV.js.map → contribute-P4BMRY7C.js.map} +1 -1
- package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
- package/dist/database-helpers-PRDFNDRO.js +11 -0
- package/dist/{dev-server-CYRP6M73.js → dev-server-ZNTLWOL5.js} +35 -21
- package/dist/dev-server-ZNTLWOL5.js.map +1 -0
- package/dist/{feedback-BMAZGKRW.js → feedback-Q6WG2WX4.js} +17 -17
- package/dist/{git-BXUD6CL5.js → git-TX2IEMB3.js} +6 -6
- package/dist/ignite-P644W2PK.js +35 -0
- package/dist/index.d.ts +236 -18
- package/dist/index.js +180 -63
- package/dist/index.js.map +1 -1
- package/dist/{init-CI43GJHV.js → init-5HFY7JG6.js} +18 -18
- package/dist/{install-deps-SRTM5U7D.js → install-deps-J4ALTM27.js} +11 -11
- package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
- package/dist/{issues-DMRQJH7E.js → issues-LZMIF22U.js} +69 -56
- package/dist/issues-LZMIF22U.js.map +1 -0
- package/dist/lint-XIXKU22H.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 +908 -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/{open-2Y7GSUTJ.js → open-KUO35JIJ.js} +36 -21
- package/dist/open-KUO35JIJ.js.map +1 -0
- package/dist/{plan-SWFPLNJE.js → plan-7CF56OIR.js} +47 -43
- package/dist/{plan-SWFPLNJE.js.map → plan-7CF56OIR.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 +184 -23
- package/dist/prompts/issue-prompt.txt +94 -158
- package/dist/prompts/plan-prompt.txt +55 -0
- package/dist/prompts/regular-prompt.txt +1 -1
- package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
- package/dist/{rebase-S6OHAOOF.js → rebase-MAMWPA2L.js} +12 -12
- package/dist/{recap-GGVCG5VH.js → recap-IDBO3KM5.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-RGZHCQ6M.js} +36 -21
- package/dist/run-RGZHCQ6M.js.map +1 -0
- package/dist/schema/settings.schema.json +171 -11
- package/dist/{shell-W4SBQPTE.js → shell-7ADCDFIV.js} +8 -8
- package/dist/{summary-P2JCIIJO.js → summary-7J2HORFD.js} +21 -19
- package/dist/summary-7J2HORFD.js.map +1 -0
- package/dist/test-SRB7EWU6.js +27 -0
- package/dist/{test-git-2KFFAQ6B.js → test-git-G7ATVIXG.js} +6 -6
- package/dist/{test-jira-FKDKG6CD.js → test-jira-Q2HPA522.js} +8 -8
- package/dist/{test-prefix-GP2DAX37.js → test-prefix-JMDGXR5A.js} +6 -6
- package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
- package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-GZFVXBGD.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-3I7ISHUU.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-TEJAGQX2.js.map +0 -1
- package/dist/chunk-VMZG66UV.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/cleanup-YOM6PQCN.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-RRGREEZQ.js.map} +0 -0
- /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-LEPW6QAC.js.map} +0 -0
- /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-KE2BDCLC.js.map} +0 -0
- /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-GKQMR5E6.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-KQU7OX7G.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-V3KADFMO.js.map} +0 -0
- /package/dist/{chunk-XXFSOVL3.js.map → chunk-3XEXT35Z.js.map} +0 -0
- /package/dist/{chunk-LE2NOUTN.js.map → chunk-4VQXMEEP.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-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-5PNZBH6V.js.map → chunk-H3T3EPF3.js.map} +0 -0
- /package/dist/{chunk-VNYWBHKR.js.map → chunk-JD3K2344.js.map} +0 -0
- /package/dist/{chunk-6YVJVUR4.js.map → chunk-JDN4SPV3.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-RMLADZRY.js.map → chunk-NTDY5AMO.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-V4STTBQD.js.map → chunk-QED2WB2D.js.map} +0 -0
- /package/dist/{chunk-QNHZM5ZV.js.map → chunk-QXGM32TO.js.map} +0 -0
- /package/dist/{chunk-TZNNJLGT.js.map → chunk-RFCAPHL5.js.map} +0 -0
- /package/dist/{chunk-UDCI3QTS.js.map → chunk-SN4S5CWL.js.map} +0 -0
- /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
- /package/dist/{chunk-KQFIGI37.js.map → chunk-XCP2WDYA.js.map} +0 -0
- /package/dist/{chunk-HLDY5S4C.js.map → chunk-ZUIFO7B4.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-SUHRUMDE.js.map} +0 -0
- /package/dist/{compile-4NCQECKE.js.map → compile-2MD346PO.js.map} +0 -0
- /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
- /package/dist/{mcp/darwin-3JFFE3W2.js.map → database-helpers-PRDFNDRO.js.map} +0 -0
- /package/dist/{feedback-BMAZGKRW.js.map → feedback-Q6WG2WX4.js.map} +0 -0
- /package/dist/{neon-helpers-HWIYRKOW.js.map → git-TX2IEMB3.js.map} +0 -0
- /package/dist/{prompt-7LZB4PAT.js.map → ignite-P644W2PK.js.map} +0 -0
- /package/dist/{init-CI43GJHV.js.map → init-5HFY7JG6.js.map} +0 -0
- /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-J4ALTM27.js.map} +0 -0
- /package/dist/{remote-MZTFHHTU.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
- /package/dist/{lint-BSWRMGPZ.js.map → lint-XIXKU22H.js.map} +0 -0
- /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
- /package/dist/{update-notifier-EYLAXZAA.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/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
- /package/dist/{rebase-S6OHAOOF.js.map → rebase-MAMWPA2L.js.map} +0 -0
- /package/dist/{recap-GGVCG5VH.js.map → recap-IDBO3KM5.js.map} +0 -0
- /package/dist/{shell-W4SBQPTE.js.map → shell-7ADCDFIV.js.map} +0 -0
- /package/dist/{test-6JH4FE2X.js.map → test-SRB7EWU6.js.map} +0 -0
- /package/dist/{test-git-2KFFAQ6B.js.map → test-git-G7ATVIXG.js.map} +0 -0
- /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-Q2HPA522.js.map} +0 -0
- /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-JMDGXR5A.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-GZFVXBGD.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-3I7ISHUU.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-RFCAPHL5.js";
|
|
6
6
|
import {
|
|
7
7
|
preAcceptClaudeTrust
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
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-NTDY5AMO.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-4VQXMEEP.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-NUUFP53X.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-QNPJXO53.js";
|
|
58
58
|
import {
|
|
59
59
|
SettingsManager
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-WGUGB54H.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
|
|
@@ -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 (((
|
|
812
|
-
const basePort = ((
|
|
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 && ((((
|
|
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 = ((
|
|
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 (((
|
|
919
|
+
if (((_n = this.printOptions) == null ? void 0 : _n.outputFormat) !== void 0) {
|
|
877
920
|
claudeOptions.outputFormat = this.printOptions.outputFormat;
|
|
878
921
|
}
|
|
879
|
-
if (((
|
|
922
|
+
if (((_o = this.printOptions) == null ? void 0 : _o.verbose) !== void 0) {
|
|
880
923
|
claudeOptions.verbose = this.printOptions.verbose;
|
|
881
924
|
}
|
|
882
|
-
if ((
|
|
925
|
+
if ((_p = this.printOptions) == null ? void 0 : _p.json) {
|
|
883
926
|
claudeOptions.jsonMode = "json";
|
|
884
927
|
claudeOptions.outputFormat = "stream-json";
|
|
885
|
-
} else if ((
|
|
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 (((
|
|
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
|
|
995
|
-
const claudeResult = await launchClaude(effectiveUserPrompt, {
|
|
1037
|
+
const claudeResult = await launchClaude(userPrompt, {
|
|
996
1038
|
...claudeOptions,
|
|
997
|
-
|
|
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 ((
|
|
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 ((
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
1363
|
-
branchName
|
|
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(`
|
|
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:
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
|
1472
|
-
const
|
|
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:
|
|
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-
|
|
1639
|
+
//# sourceMappingURL=chunk-TN2D2RX7.js.map
|