@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
package/dist/index.js
CHANGED
|
@@ -999,6 +999,8 @@ __export(SettingsManager_exports, {
|
|
|
999
999
|
CapabilitiesSettingsSchema: () => CapabilitiesSettingsSchema,
|
|
1000
1000
|
CapabilitiesSettingsSchemaNoDefaults: () => CapabilitiesSettingsSchemaNoDefaults,
|
|
1001
1001
|
DatabaseProvidersSettingsSchema: () => DatabaseProvidersSettingsSchema,
|
|
1002
|
+
DevServerSettingsSchema: () => DevServerSettingsSchema,
|
|
1003
|
+
DevServerSettingsSchemaNoDefaults: () => DevServerSettingsSchemaNoDefaults,
|
|
1002
1004
|
IloomSettingsSchema: () => IloomSettingsSchema,
|
|
1003
1005
|
IloomSettingsSchemaNoDefaults: () => IloomSettingsSchemaNoDefaults,
|
|
1004
1006
|
NeonSettingsSchema: () => NeonSettingsSchema,
|
|
@@ -1006,10 +1008,13 @@ __export(SettingsManager_exports, {
|
|
|
1006
1008
|
SettingsManager: () => SettingsManager,
|
|
1007
1009
|
SpinAgentSettingsSchema: () => SpinAgentSettingsSchema,
|
|
1008
1010
|
SummarySettingsSchema: () => SummarySettingsSchema,
|
|
1011
|
+
SupabaseSettingsSchema: () => SupabaseSettingsSchema,
|
|
1009
1012
|
WorkflowPermissionSchema: () => WorkflowPermissionSchema,
|
|
1010
1013
|
WorkflowPermissionSchemaNoDefaults: () => WorkflowPermissionSchemaNoDefaults,
|
|
1011
1014
|
WorkflowsSettingsSchema: () => WorkflowsSettingsSchema,
|
|
1012
|
-
WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults
|
|
1015
|
+
WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults,
|
|
1016
|
+
mergeModeValues: () => mergeModeValues,
|
|
1017
|
+
redactSensitiveFields: () => redactSensitiveFields
|
|
1013
1018
|
});
|
|
1014
1019
|
import { readFile } from "fs/promises";
|
|
1015
1020
|
import path2 from "path";
|
|
@@ -1020,7 +1025,7 @@ function redactSensitiveFields(obj) {
|
|
|
1020
1025
|
if (obj === null || obj === void 0) return obj;
|
|
1021
1026
|
if (typeof obj !== "object") return obj;
|
|
1022
1027
|
if (Array.isArray(obj)) return obj.map(redactSensitiveFields);
|
|
1023
|
-
const sensitiveKeys = ["apitoken", "token", "secret", "password"];
|
|
1028
|
+
const sensitiveKeys = ["apitoken", "token", "secret", "password", "credential"];
|
|
1024
1029
|
const result = {};
|
|
1025
1030
|
for (const [key, value] of Object.entries(obj)) {
|
|
1026
1031
|
const lowerKey = key.toLowerCase();
|
|
@@ -1034,11 +1039,16 @@ function redactSensitiveFields(obj) {
|
|
|
1034
1039
|
}
|
|
1035
1040
|
return result;
|
|
1036
1041
|
}
|
|
1037
|
-
var BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, NeonSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
|
|
1042
|
+
var mergeModeValues, mergeModeTransform, BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, DevServerSettingsSchema, DevServerSettingsSchemaNoDefaults, NeonSettingsSchema, SupabaseSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
|
|
1038
1043
|
var init_SettingsManager = __esm({
|
|
1039
1044
|
"src/lib/SettingsManager.ts"() {
|
|
1040
1045
|
"use strict";
|
|
1041
1046
|
init_logger();
|
|
1047
|
+
mergeModeValues = ["local", "pr", "draft-pr", "github-pr", "github-draft-pr", "bitbucket-pr"];
|
|
1048
|
+
mergeModeTransform = (val) => {
|
|
1049
|
+
const map = { "github-pr": "pr", "github-draft-pr": "draft-pr", "bitbucket-pr": "pr" };
|
|
1050
|
+
return map[val] ?? val;
|
|
1051
|
+
};
|
|
1042
1052
|
BaseAgentSettingsSchema = z.object({
|
|
1043
1053
|
model: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Claude model shorthand: sonnet, opus, or haiku"),
|
|
1044
1054
|
swarmModel: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."),
|
|
@@ -1050,9 +1060,7 @@ var init_SettingsManager = __esm({
|
|
|
1050
1060
|
review: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed before posting (defaults to false)"),
|
|
1051
1061
|
swarmReview: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed in swarm mode. Defaults to false if not set (review is off in swarm mode for speed and cost unless explicitly enabled).")
|
|
1052
1062
|
});
|
|
1053
|
-
AgentSettingsSchema = BaseAgentSettingsSchema
|
|
1054
|
-
subAgentTimeout: z.number().min(1, "Sub-agent timeout must be at least 1 minute").max(120, "Sub-agent timeout cannot exceed 120 minutes").default(10).describe("Timeout in minutes for sub-agent claude -p invocations in swarm mode. Applies to each phase agent (evaluator, analyzer, planner, implementer) when invoked via the Bash tool. Default: 10 minutes. Only meaningful under the iloom-swarm-worker agent entry.")
|
|
1055
|
-
});
|
|
1063
|
+
AgentSettingsSchema = BaseAgentSettingsSchema;
|
|
1056
1064
|
SpinAgentSettingsSchema = z.object({
|
|
1057
1065
|
model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for spin orchestrator"),
|
|
1058
1066
|
swarmModel: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Model for the spin orchestrator when running in swarm mode. Overrides spin.model for swarm workflows."),
|
|
@@ -1061,7 +1069,8 @@ var init_SettingsManager = __esm({
|
|
|
1061
1069
|
PlanCommandSettingsSchema = z.object({
|
|
1062
1070
|
model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for plan command"),
|
|
1063
1071
|
planner: z.enum(["claude", "gemini", "codex"]).default("claude").describe("AI provider for creating the plan"),
|
|
1064
|
-
reviewer: z.enum(["claude", "gemini", "codex", "none"]).default("none").describe("AI provider for reviewing the plan (none to skip review)")
|
|
1072
|
+
reviewer: z.enum(["claude", "gemini", "codex", "none"]).default("none").describe("AI provider for reviewing the plan (none to skip review)"),
|
|
1073
|
+
waveVerification: z.boolean().default(true).describe("When enabled, the planner generates verification child issues between dependency waves to catch integration issues early.")
|
|
1065
1074
|
});
|
|
1066
1075
|
SummarySettingsSchema = z.object({
|
|
1067
1076
|
model: z.enum(["sonnet", "opus", "haiku"]).default("sonnet").describe("Claude model shorthand for session summary generation")
|
|
@@ -1096,7 +1105,12 @@ var init_SettingsManager = __esm({
|
|
|
1096
1105
|
}).optional();
|
|
1097
1106
|
CapabilitiesSettingsSchema = z.object({
|
|
1098
1107
|
web: z.object({
|
|
1099
|
-
basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)")
|
|
1108
|
+
basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)"),
|
|
1109
|
+
devServer: z.enum(["process", "docker"]).default("process").describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
|
|
1110
|
+
dockerFile: z.string().default("./Dockerfile").describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
|
|
1111
|
+
containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
|
|
1112
|
+
dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
|
|
1113
|
+
dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
|
|
1100
1114
|
}).optional().describe('Web dev server settings. To declare a project as a web project, add "web" to the capabilities array in .iloom/package.iloom.json or .iloom/package.iloom.local.json.'),
|
|
1101
1115
|
database: z.object({
|
|
1102
1116
|
databaseUrlEnvVarName: z.string().min(1, "Database URL variable name cannot be empty").regex(/^[A-Z_][A-Z0-9_]*$/, "Must be valid env var name (uppercase, underscores)").optional().default("DATABASE_URL").describe("Name of environment variable for database connection URL")
|
|
@@ -1104,19 +1118,71 @@ var init_SettingsManager = __esm({
|
|
|
1104
1118
|
}).optional();
|
|
1105
1119
|
CapabilitiesSettingsSchemaNoDefaults = z.object({
|
|
1106
1120
|
web: z.object({
|
|
1107
|
-
basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)")
|
|
1121
|
+
basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)"),
|
|
1122
|
+
devServer: z.enum(["process", "docker"]).optional().describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
|
|
1123
|
+
dockerFile: z.string().optional().describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
|
|
1124
|
+
containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
|
|
1125
|
+
dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
|
|
1126
|
+
dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
|
|
1108
1127
|
}).optional().describe('Web dev server settings. To declare a project as a web project, add "web" to the capabilities array in .iloom/package.iloom.json or .iloom/package.iloom.local.json.'),
|
|
1109
1128
|
database: z.object({
|
|
1110
1129
|
databaseUrlEnvVarName: z.string().min(1, "Database URL variable name cannot be empty").regex(/^[A-Z_][A-Z0-9_]*$/, "Must be valid env var name (uppercase, underscores)").optional().describe("Name of environment variable for database connection URL")
|
|
1111
1130
|
}).optional()
|
|
1112
1131
|
}).optional();
|
|
1132
|
+
DevServerSettingsSchema = z.object({
|
|
1133
|
+
mode: z.enum(["docker"]).default("docker").describe('Dev server mode. Currently only "docker" is supported.'),
|
|
1134
|
+
docker: z.object({
|
|
1135
|
+
dockerFile: z.string().default("./Dockerfile").refine(
|
|
1136
|
+
(val) => {
|
|
1137
|
+
if (path2.isAbsolute(val)) return false;
|
|
1138
|
+
const normalized = path2.normalize(val);
|
|
1139
|
+
if (normalized.startsWith("..")) return false;
|
|
1140
|
+
return true;
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
|
|
1144
|
+
}
|
|
1145
|
+
).describe("Path to Dockerfile relative to worktree root"),
|
|
1146
|
+
containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
|
|
1147
|
+
buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
|
|
1148
|
+
runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
|
|
1149
|
+
}).optional()
|
|
1150
|
+
});
|
|
1151
|
+
DevServerSettingsSchemaNoDefaults = z.object({
|
|
1152
|
+
mode: z.enum(["docker"]).optional().describe('Dev server mode. Currently only "docker" is supported.'),
|
|
1153
|
+
docker: z.object({
|
|
1154
|
+
dockerFile: z.string().optional().refine(
|
|
1155
|
+
(val) => {
|
|
1156
|
+
if (val === void 0) return true;
|
|
1157
|
+
if (path2.isAbsolute(val)) return false;
|
|
1158
|
+
const normalized = path2.normalize(val);
|
|
1159
|
+
if (normalized.startsWith("..")) return false;
|
|
1160
|
+
return true;
|
|
1161
|
+
},
|
|
1162
|
+
{
|
|
1163
|
+
message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
|
|
1164
|
+
}
|
|
1165
|
+
).describe("Path to Dockerfile relative to worktree root"),
|
|
1166
|
+
containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
|
|
1167
|
+
buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
|
|
1168
|
+
runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
|
|
1169
|
+
}).optional()
|
|
1170
|
+
});
|
|
1113
1171
|
NeonSettingsSchema = z.object({
|
|
1114
1172
|
projectId: z.string().min(1).regex(/^[a-zA-Z0-9-]+$/, "Neon project ID must contain only letters, numbers, and hyphens").describe('Neon project ID found in your project URL (e.g., "fantastic-fox-3566354")'),
|
|
1115
1173
|
parentBranch: z.string().min(1).describe("Branch from which new database branches are created")
|
|
1116
1174
|
});
|
|
1175
|
+
SupabaseSettingsSchema = z.object({
|
|
1176
|
+
projectRef: z.string().min(1).describe('Supabase project reference ID (e.g., "abcdefghijklmnop")'),
|
|
1177
|
+
parentBranch: z.string().min(1).optional().describe("Reserved for future use. Supabase currently always branches from the default branch."),
|
|
1178
|
+
withData: z.boolean().optional().describe("Whether to include data when creating a new branch (defaults to true)")
|
|
1179
|
+
});
|
|
1117
1180
|
DatabaseProvidersSettingsSchema = z.object({
|
|
1118
1181
|
neon: NeonSettingsSchema.optional().describe(
|
|
1119
1182
|
"Neon database configuration. Requires Neon CLI installed and authenticated for database branching."
|
|
1183
|
+
),
|
|
1184
|
+
supabase: SupabaseSettingsSchema.optional().describe(
|
|
1185
|
+
"Supabase database configuration. Requires Supabase CLI installed and authenticated for database branching."
|
|
1120
1186
|
)
|
|
1121
1187
|
}).optional();
|
|
1122
1188
|
IloomSettingsSchema = z.object({
|
|
@@ -1161,6 +1227,7 @@ var init_SettingsManager = __esm({
|
|
|
1161
1227
|
"Session summary generation configuration. Model defaults to sonnet when not configured."
|
|
1162
1228
|
),
|
|
1163
1229
|
capabilities: CapabilitiesSettingsSchema.describe("Project capability configurations"),
|
|
1230
|
+
devServer: DevServerSettingsSchema.optional().describe("Docker-based dev server configuration"),
|
|
1164
1231
|
databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
|
|
1165
1232
|
issueManagement: z.object({
|
|
1166
1233
|
// SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
|
|
@@ -1185,17 +1252,28 @@ var init_SettingsManager = __esm({
|
|
|
1185
1252
|
doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
|
|
1186
1253
|
}).optional()
|
|
1187
1254
|
}).optional().describe("Issue management configuration"),
|
|
1255
|
+
versionControl: z.object({
|
|
1256
|
+
provider: z.enum(["github", "bitbucket"]).optional().default("github").describe("Version control provider (github, bitbucket)"),
|
|
1257
|
+
bitbucket: z.object({
|
|
1258
|
+
username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
|
|
1259
|
+
apiToken: z.string().optional().describe("BitBucket API token. SECURITY: Store in settings.local.json only, never commit to source control. Generate at: https://bitbucket.org/account/settings/app-passwords/ (Note: App passwords deprecated Sep 2025, use API tokens)"),
|
|
1260
|
+
workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
|
|
1261
|
+
repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
|
|
1262
|
+
reviewers: z.array(z.string().describe("Reviewer username")).optional().describe("List of usernames to add as PR reviewers. Usernames are resolved to Bitbucket account IDs at PR creation time.")
|
|
1263
|
+
}).optional()
|
|
1264
|
+
}).optional().describe("Version control provider configuration"),
|
|
1188
1265
|
mergeBehavior: z.object({
|
|
1189
1266
|
// SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
|
|
1190
|
-
mode: z.enum(
|
|
1267
|
+
mode: z.enum(mergeModeValues).default("local").transform(mergeModeTransform),
|
|
1191
1268
|
remote: z.string().optional(),
|
|
1192
1269
|
autoCommitPush: z.boolean().optional().describe(
|
|
1193
|
-
"Auto-commit and push after code review in draft PR mode. Defaults to true when mode is
|
|
1270
|
+
"Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
|
|
1194
1271
|
),
|
|
1272
|
+
prTitlePrefix: z.boolean().default(false).optional().describe('Prefix PR titles with the issue number (e.g., "QLH-123: Title"). Default: false'),
|
|
1195
1273
|
openBrowserOnFinish: z.boolean().default(true).describe(
|
|
1196
|
-
"Open the PR in the default browser after finishing in
|
|
1274
|
+
"Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
|
|
1197
1275
|
)
|
|
1198
|
-
}).optional().describe("Merge behavior configuration: local (merge locally),
|
|
1276
|
+
}).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
|
|
1199
1277
|
ide: z.object({
|
|
1200
1278
|
// SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
|
|
1201
1279
|
type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).default("vscode").describe(
|
|
@@ -1257,12 +1335,14 @@ var init_SettingsManager = __esm({
|
|
|
1257
1335
|
plan: z.object({
|
|
1258
1336
|
model: z.enum(["sonnet", "opus", "haiku"]).optional(),
|
|
1259
1337
|
planner: z.enum(["claude", "gemini", "codex"]).optional(),
|
|
1260
|
-
reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional()
|
|
1338
|
+
reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional(),
|
|
1339
|
+
waveVerification: z.boolean().optional()
|
|
1261
1340
|
}).optional().describe("Plan command configuration"),
|
|
1262
1341
|
summary: z.object({
|
|
1263
1342
|
model: z.enum(["sonnet", "opus", "haiku"]).optional()
|
|
1264
1343
|
}).optional().describe("Session summary generation configuration"),
|
|
1265
1344
|
capabilities: CapabilitiesSettingsSchemaNoDefaults.describe("Project capability configurations"),
|
|
1345
|
+
devServer: DevServerSettingsSchemaNoDefaults.optional().describe("Docker-based dev server configuration"),
|
|
1266
1346
|
databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
|
|
1267
1347
|
issueManagement: z.object({
|
|
1268
1348
|
provider: z.enum(["github", "linear", "jira"]).optional().describe("Issue tracker provider (github, linear, jira)"),
|
|
@@ -1286,16 +1366,27 @@ var init_SettingsManager = __esm({
|
|
|
1286
1366
|
doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
|
|
1287
1367
|
}).optional()
|
|
1288
1368
|
}).optional().describe("Issue management configuration"),
|
|
1369
|
+
versionControl: z.object({
|
|
1370
|
+
provider: z.enum(["github", "bitbucket"]).optional().describe("Version control provider (github, bitbucket)"),
|
|
1371
|
+
bitbucket: z.object({
|
|
1372
|
+
username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
|
|
1373
|
+
apiToken: z.string().optional().describe("BitBucket API token. SECURITY: Store in settings.local.json only, never commit to source control. Generate at: https://bitbucket.org/account/settings/app-passwords/ (Note: App passwords deprecated Sep 2025, use API tokens)"),
|
|
1374
|
+
workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
|
|
1375
|
+
repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
|
|
1376
|
+
reviewers: z.array(z.string().describe("Reviewer username")).optional().describe("List of usernames to add as PR reviewers. Usernames are resolved to Bitbucket account IDs at PR creation time.")
|
|
1377
|
+
}).optional()
|
|
1378
|
+
}).optional().describe("Version control provider configuration"),
|
|
1289
1379
|
mergeBehavior: z.object({
|
|
1290
|
-
mode: z.enum(
|
|
1380
|
+
mode: z.enum(mergeModeValues).transform(mergeModeTransform).optional(),
|
|
1291
1381
|
remote: z.string().optional(),
|
|
1292
1382
|
autoCommitPush: z.boolean().optional().describe(
|
|
1293
|
-
"Auto-commit and push after code review in draft PR mode. Defaults to true when mode is
|
|
1383
|
+
"Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
|
|
1294
1384
|
),
|
|
1385
|
+
prTitlePrefix: z.boolean().optional(),
|
|
1295
1386
|
openBrowserOnFinish: z.boolean().optional().describe(
|
|
1296
|
-
"Open the PR in the default browser after finishing in
|
|
1387
|
+
"Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
|
|
1297
1388
|
)
|
|
1298
|
-
}).optional().describe("Merge behavior configuration: local (merge locally),
|
|
1389
|
+
}).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
|
|
1299
1390
|
ide: z.object({
|
|
1300
1391
|
type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).optional().describe(
|
|
1301
1392
|
"IDE to launch when starting a loom. Options: vscode (Visual Studio Code), cursor (Cursor AI editor), webstorm (JetBrains WebStorm), sublime (Sublime Text), intellij (JetBrains IntelliJ IDEA), windsurf (Windsurf editor), antigravity (Antigravity IDE)."
|
|
@@ -1567,6 +1658,17 @@ ${errorMessages.join("\n")}`
|
|
|
1567
1658
|
var _a;
|
|
1568
1659
|
return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.reviewer) ?? "none";
|
|
1569
1660
|
}
|
|
1661
|
+
/**
|
|
1662
|
+
* Get the plan command waveVerification setting with default applied
|
|
1663
|
+
* Default is true (verification tasks are generated)
|
|
1664
|
+
*
|
|
1665
|
+
* @param settings - Pre-loaded settings object
|
|
1666
|
+
* @returns Whether wave verification is enabled
|
|
1667
|
+
*/
|
|
1668
|
+
getPlanWaveVerification(settings) {
|
|
1669
|
+
var _a;
|
|
1670
|
+
return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.waveVerification) !== false;
|
|
1671
|
+
}
|
|
1570
1672
|
/**
|
|
1571
1673
|
* Get the session summary model with default applied
|
|
1572
1674
|
* Default is defined in SummarySettingsSchema
|
|
@@ -1850,7 +1952,8 @@ var MetadataManager = class {
|
|
|
1850
1952
|
parentLoom: data.parentLoom ?? null,
|
|
1851
1953
|
childIssues: data.childIssues ?? [],
|
|
1852
1954
|
dependencyMap: data.dependencyMap ?? {},
|
|
1853
|
-
mcpConfigPath: data.mcpConfigPath ?? null
|
|
1955
|
+
mcpConfigPath: data.mcpConfigPath ?? null,
|
|
1956
|
+
swarmTeamName: data.swarmTeamName ?? null
|
|
1854
1957
|
};
|
|
1855
1958
|
}
|
|
1856
1959
|
/**
|
|
@@ -4710,7 +4813,7 @@ var JiraApiClient = class {
|
|
|
4710
4813
|
};
|
|
4711
4814
|
|
|
4712
4815
|
// src/lib/providers/jira/JiraIssueTracker.ts
|
|
4713
|
-
var JiraIssueTracker = class {
|
|
4816
|
+
var JiraIssueTracker = class _JiraIssueTracker {
|
|
4714
4817
|
constructor(config, options) {
|
|
4715
4818
|
this.providerName = "jira";
|
|
4716
4819
|
this.supportsPullRequests = false;
|
|
@@ -4722,6 +4825,36 @@ var JiraIssueTracker = class {
|
|
|
4722
4825
|
});
|
|
4723
4826
|
this.prompter = (options == null ? void 0 : options.prompter) ?? promptConfirmation;
|
|
4724
4827
|
}
|
|
4828
|
+
/**
|
|
4829
|
+
* Create a JiraIssueTracker from IloomSettings
|
|
4830
|
+
* Extracts and validates Jira config from settings
|
|
4831
|
+
*/
|
|
4832
|
+
static fromSettings(settings) {
|
|
4833
|
+
var _a;
|
|
4834
|
+
const jiraSettings = (_a = settings.issueManagement) == null ? void 0 : _a.jira;
|
|
4835
|
+
if (!(jiraSettings == null ? void 0 : jiraSettings.host)) {
|
|
4836
|
+
throw new Error("Jira host is required. Configure issueManagement.jira.host in .iloom/settings.json");
|
|
4837
|
+
}
|
|
4838
|
+
if (!(jiraSettings == null ? void 0 : jiraSettings.username)) {
|
|
4839
|
+
throw new Error("Jira username is required. Configure issueManagement.jira.username in .iloom/settings.json");
|
|
4840
|
+
}
|
|
4841
|
+
if (!(jiraSettings == null ? void 0 : jiraSettings.apiToken)) {
|
|
4842
|
+
throw new Error("Jira API token is required. Configure issueManagement.jira.apiToken in .iloom/settings.local.json");
|
|
4843
|
+
}
|
|
4844
|
+
if (!(jiraSettings == null ? void 0 : jiraSettings.projectKey)) {
|
|
4845
|
+
throw new Error("Jira project key is required. Configure issueManagement.jira.projectKey in .iloom/settings.json");
|
|
4846
|
+
}
|
|
4847
|
+
const config = {
|
|
4848
|
+
host: jiraSettings.host,
|
|
4849
|
+
username: jiraSettings.username,
|
|
4850
|
+
apiToken: jiraSettings.apiToken,
|
|
4851
|
+
projectKey: jiraSettings.projectKey
|
|
4852
|
+
};
|
|
4853
|
+
if (jiraSettings.transitionMappings) {
|
|
4854
|
+
config.transitionMappings = jiraSettings.transitionMappings;
|
|
4855
|
+
}
|
|
4856
|
+
return new _JiraIssueTracker(config);
|
|
4857
|
+
}
|
|
4725
4858
|
/**
|
|
4726
4859
|
* Normalize identifier to canonical uppercase form
|
|
4727
4860
|
* Jira issue keys are case-sensitive in the API (must be uppercase)
|
|
@@ -5030,6 +5163,7 @@ ${entity.assignees.length > 0 ? `Assignees: ${entity.assignees.join(", ")}` : ""
|
|
|
5030
5163
|
};
|
|
5031
5164
|
|
|
5032
5165
|
// src/lib/IssueTrackerFactory.ts
|
|
5166
|
+
init_SettingsManager();
|
|
5033
5167
|
var IssueTrackerFactory = class {
|
|
5034
5168
|
/**
|
|
5035
5169
|
* Create an IssueTracker instance based on settings configuration
|
|
@@ -5040,10 +5174,10 @@ var IssueTrackerFactory = class {
|
|
|
5040
5174
|
* @throws Error if provider type is not supported
|
|
5041
5175
|
*/
|
|
5042
5176
|
static create(settings) {
|
|
5043
|
-
var _a, _b
|
|
5177
|
+
var _a, _b;
|
|
5044
5178
|
const provider = ((_a = settings.issueManagement) == null ? void 0 : _a.provider) ?? "github";
|
|
5045
5179
|
getLogger().debug(`IssueTrackerFactory: Creating tracker for provider "${provider}"`);
|
|
5046
|
-
getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(settings.issueManagement, null, 2));
|
|
5180
|
+
getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(redactSensitiveFields(settings.issueManagement), null, 2));
|
|
5047
5181
|
switch (provider) {
|
|
5048
5182
|
case "github":
|
|
5049
5183
|
getLogger().debug("IssueTrackerFactory: Creating GitHubService");
|
|
@@ -5060,34 +5194,12 @@ var IssueTrackerFactory = class {
|
|
|
5060
5194
|
if (linearSettings == null ? void 0 : linearSettings.apiToken) {
|
|
5061
5195
|
linearConfig.apiToken = linearSettings.apiToken;
|
|
5062
5196
|
}
|
|
5063
|
-
getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(linearConfig, null, 2));
|
|
5197
|
+
getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(redactSensitiveFields(linearConfig), null, 2));
|
|
5064
5198
|
return new LinearService(linearConfig);
|
|
5065
5199
|
}
|
|
5066
5200
|
case "jira": {
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
throw new Error("Jira host is required. Configure issueManagement.jira.host in .iloom/settings.json");
|
|
5070
|
-
}
|
|
5071
|
-
if (!(jiraSettings == null ? void 0 : jiraSettings.username)) {
|
|
5072
|
-
throw new Error("Jira username is required. Configure issueManagement.jira.username in .iloom/settings.json");
|
|
5073
|
-
}
|
|
5074
|
-
if (!(jiraSettings == null ? void 0 : jiraSettings.apiToken)) {
|
|
5075
|
-
throw new Error("Jira API token is required. Configure issueManagement.jira.apiToken in .iloom/settings.local.json");
|
|
5076
|
-
}
|
|
5077
|
-
if (!(jiraSettings == null ? void 0 : jiraSettings.projectKey)) {
|
|
5078
|
-
throw new Error("Jira project key is required. Configure issueManagement.jira.projectKey in .iloom/settings.json");
|
|
5079
|
-
}
|
|
5080
|
-
const jiraConfig = {
|
|
5081
|
-
host: jiraSettings.host,
|
|
5082
|
-
username: jiraSettings.username,
|
|
5083
|
-
apiToken: jiraSettings.apiToken,
|
|
5084
|
-
projectKey: jiraSettings.projectKey
|
|
5085
|
-
};
|
|
5086
|
-
if (jiraSettings.transitionMappings) {
|
|
5087
|
-
jiraConfig.transitionMappings = jiraSettings.transitionMappings;
|
|
5088
|
-
}
|
|
5089
|
-
getLogger().debug(`IssueTrackerFactory: Creating JiraIssueTracker for host: ${jiraSettings.host}`);
|
|
5090
|
-
return new JiraIssueTracker(jiraConfig);
|
|
5201
|
+
getLogger().debug(`IssueTrackerFactory: Creating JiraIssueTracker from settings`);
|
|
5202
|
+
return JiraIssueTracker.fromSettings(settings);
|
|
5091
5203
|
}
|
|
5092
5204
|
default:
|
|
5093
5205
|
throw new Error(`Unsupported issue tracker provider: ${provider}`);
|
|
@@ -5386,15 +5498,14 @@ var DatabaseManager = class {
|
|
|
5386
5498
|
return null;
|
|
5387
5499
|
}
|
|
5388
5500
|
if (!await this.provider.isCliAvailable()) {
|
|
5389
|
-
getLogger().warn(
|
|
5390
|
-
getLogger().warn(
|
|
5501
|
+
getLogger().warn(`Skipping database branch creation: ${this.provider.displayName} CLI not available`);
|
|
5502
|
+
getLogger().warn(`Install with: ${this.provider.installHint}`);
|
|
5391
5503
|
return null;
|
|
5392
5504
|
}
|
|
5393
5505
|
try {
|
|
5394
5506
|
const isAuth = await this.provider.isAuthenticated(cwd);
|
|
5395
5507
|
if (!isAuth) {
|
|
5396
|
-
getLogger().warn(
|
|
5397
|
-
getLogger().warn("Run: neon auth");
|
|
5508
|
+
getLogger().warn(`Skipping database branch creation: Not authenticated with ${this.provider.displayName} CLI`);
|
|
5398
5509
|
return null;
|
|
5399
5510
|
}
|
|
5400
5511
|
} catch (error) {
|
|
@@ -5442,24 +5553,24 @@ var DatabaseManager = class {
|
|
|
5442
5553
|
};
|
|
5443
5554
|
}
|
|
5444
5555
|
if (!await this.provider.isCliAvailable()) {
|
|
5445
|
-
getLogger().info(
|
|
5556
|
+
getLogger().info(`Skipping database branch deletion: ${this.provider.displayName} CLI not available. Install with: ${this.provider.installHint}`);
|
|
5446
5557
|
return {
|
|
5447
5558
|
success: false,
|
|
5448
5559
|
deleted: false,
|
|
5449
5560
|
notFound: true,
|
|
5450
|
-
error:
|
|
5561
|
+
error: `${this.provider.displayName} CLI not available`,
|
|
5451
5562
|
branchName
|
|
5452
5563
|
};
|
|
5453
5564
|
}
|
|
5454
5565
|
try {
|
|
5455
5566
|
const isAuth = await this.provider.isAuthenticated(cwd);
|
|
5456
5567
|
if (!isAuth) {
|
|
5457
|
-
getLogger().warn(
|
|
5568
|
+
getLogger().warn(`Skipping database branch deletion: Not authenticated with ${this.provider.displayName}`);
|
|
5458
5569
|
return {
|
|
5459
5570
|
success: false,
|
|
5460
5571
|
deleted: false,
|
|
5461
5572
|
notFound: false,
|
|
5462
|
-
error:
|
|
5573
|
+
error: `Not authenticated with ${this.provider.displayName}`,
|
|
5463
5574
|
branchName
|
|
5464
5575
|
};
|
|
5465
5576
|
}
|
|
@@ -5600,7 +5711,7 @@ function parseJsonStreamOutput(output) {
|
|
|
5600
5711
|
}
|
|
5601
5712
|
}
|
|
5602
5713
|
async function launchClaude(prompt, options = {}) {
|
|
5603
|
-
const { model, permissionMode, addDir, headless = false, appendSystemPrompt, mcpConfig, allowedTools, disallowedTools, agents, pluginDir, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode, passthroughStdout, env: extraEnv, signal } = options;
|
|
5714
|
+
const { model, permissionMode, addDir, headless = false, appendSystemPrompt, appendSystemPromptFile, mcpConfig, allowedTools, disallowedTools, agents, pluginDir, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode, passthroughStdout, env: extraEnv, signal } = options;
|
|
5604
5715
|
const log = getLogger();
|
|
5605
5716
|
const args = [];
|
|
5606
5717
|
if (headless) {
|
|
@@ -5624,6 +5735,9 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5624
5735
|
if (appendSystemPrompt) {
|
|
5625
5736
|
args.push("--append-system-prompt", appendSystemPrompt);
|
|
5626
5737
|
}
|
|
5738
|
+
if (appendSystemPromptFile) {
|
|
5739
|
+
args.push("--append-system-prompt-file", appendSystemPromptFile);
|
|
5740
|
+
}
|
|
5627
5741
|
if (mcpConfig && mcpConfig.length > 0) {
|
|
5628
5742
|
for (const config of mcpConfig) {
|
|
5629
5743
|
args.push("--mcp-config", JSON.stringify(config));
|
|
@@ -5644,6 +5758,10 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5644
5758
|
if (sessionId) {
|
|
5645
5759
|
args.push("--session-id", sessionId);
|
|
5646
5760
|
}
|
|
5761
|
+
const isDebugMode = logger.isDebugEnabled();
|
|
5762
|
+
if (isDebugMode) {
|
|
5763
|
+
args.push("--debug");
|
|
5764
|
+
}
|
|
5647
5765
|
if (noSessionPersistence && headless) {
|
|
5648
5766
|
args.push("--no-session-persistence");
|
|
5649
5767
|
}
|
|
@@ -5679,7 +5797,6 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5679
5797
|
return;
|
|
5680
5798
|
}
|
|
5681
5799
|
if (headless) {
|
|
5682
|
-
const isDebugMode = logger.isDebugEnabled();
|
|
5683
5800
|
const execaOptions = {
|
|
5684
5801
|
input: prompt,
|
|
5685
5802
|
timeout: 0,
|
|
@@ -5813,14 +5930,14 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5813
5930
|
resumeArgs.push("--resume", extractedSessionId);
|
|
5814
5931
|
try {
|
|
5815
5932
|
if (headless) {
|
|
5816
|
-
const
|
|
5933
|
+
const isDebugMode2 = logger.isDebugEnabled();
|
|
5817
5934
|
const execaOptions = {
|
|
5818
5935
|
input: prompt,
|
|
5819
5936
|
timeout: 0,
|
|
5820
5937
|
...addDir && { cwd: addDir },
|
|
5821
|
-
verbose:
|
|
5938
|
+
verbose: isDebugMode2,
|
|
5822
5939
|
env: claudeEnv,
|
|
5823
|
-
...
|
|
5940
|
+
...isDebugMode2 && { stdio: ["pipe", "pipe", "pipe"] }
|
|
5824
5941
|
};
|
|
5825
5942
|
const subprocess = execa8("claude", resumeArgs, execaOptions);
|
|
5826
5943
|
const isJsonStreamFormat = resumeArgs.includes("--output-format") && resumeArgs.includes("stream-json");
|
|
@@ -5835,7 +5952,7 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5835
5952
|
if (jsonMode === "stream") {
|
|
5836
5953
|
process.stdout.write(text);
|
|
5837
5954
|
} else if (jsonMode === "json") {
|
|
5838
|
-
} else if (
|
|
5955
|
+
} else if (isDebugMode2) {
|
|
5839
5956
|
log.stdout.write(text);
|
|
5840
5957
|
} else {
|
|
5841
5958
|
if (isFirstProgress) {
|
|
@@ -5850,12 +5967,12 @@ async function launchClaude(prompt, options = {}) {
|
|
|
5850
5967
|
const result = await subprocess;
|
|
5851
5968
|
if (isStreaming) {
|
|
5852
5969
|
const rawOutput = outputBuffer.trim();
|
|
5853
|
-
if (!
|
|
5970
|
+
if (!isDebugMode2 && !jsonMode) {
|
|
5854
5971
|
log.stdout.write("\n");
|
|
5855
5972
|
}
|
|
5856
5973
|
return isJsonStreamFormat ? parseJsonStreamOutput(rawOutput) : rawOutput;
|
|
5857
5974
|
} else {
|
|
5858
|
-
if (
|
|
5975
|
+
if (isDebugMode2) {
|
|
5859
5976
|
log.stdout.write(result.stdout);
|
|
5860
5977
|
if (result.stdout && !result.stdout.endsWith("\n")) {
|
|
5861
5978
|
log.stdout.write("\n");
|