@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/cli.js
CHANGED
|
@@ -1,114 +1,118 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SessionSummaryService
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-X5DRLONY.js";
|
|
5
5
|
import "./chunk-NXMDEL3F.js";
|
|
6
6
|
import {
|
|
7
7
|
ResourceCleanup
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SA446KA2.js";
|
|
9
|
+
import "./chunk-3XEXT35Z.js";
|
|
10
10
|
import {
|
|
11
11
|
StartCommand,
|
|
12
12
|
launchFirstRunSetup,
|
|
13
13
|
needsFirstRunSetup
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PD75ZCFT.js";
|
|
15
15
|
import {
|
|
16
16
|
CLIIsolationManager,
|
|
17
17
|
DatabaseManager,
|
|
18
18
|
EnvironmentManager,
|
|
19
19
|
LoomManager
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-VVQQIG64.js";
|
|
21
21
|
import {
|
|
22
|
-
PRManager
|
|
23
|
-
|
|
22
|
+
PRManager,
|
|
23
|
+
VCSProviderFactory
|
|
24
|
+
} from "./chunk-KQSV7FOG.js";
|
|
25
|
+
import {
|
|
26
|
+
BuildRunner,
|
|
27
|
+
MergeManager
|
|
28
|
+
} from "./chunk-Q7VXHJP6.js";
|
|
29
|
+
import {
|
|
30
|
+
assembleChildrenData
|
|
31
|
+
} from "./chunk-RFCAPHL5.js";
|
|
32
|
+
import "./chunk-7UBEHQTP.js";
|
|
33
|
+
import "./chunk-AYLC633W.js";
|
|
34
|
+
import {
|
|
35
|
+
ProcessManager
|
|
36
|
+
} from "./chunk-H3T3EPF3.js";
|
|
37
|
+
import "./chunk-ZUIFO7B4.js";
|
|
38
|
+
import {
|
|
39
|
+
IdentifierParser
|
|
40
|
+
} from "./chunk-SN4S5CWL.js";
|
|
41
|
+
import {
|
|
42
|
+
createDatabaseProviderFromSettings
|
|
43
|
+
} from "./chunk-YUOVWWJX.js";
|
|
44
|
+
import {
|
|
45
|
+
ShellCompletion
|
|
46
|
+
} from "./chunk-QXGM32TO.js";
|
|
47
|
+
import {
|
|
48
|
+
TelemetryManager,
|
|
49
|
+
TelemetryService
|
|
50
|
+
} from "./chunk-MY2Q3FJ3.js";
|
|
51
|
+
import "./chunk-EGNUOALL.js";
|
|
24
52
|
import {
|
|
25
53
|
IssueEnhancementService
|
|
26
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-PH65MFQM.js";
|
|
27
55
|
import {
|
|
28
56
|
capitalizeFirstLetter
|
|
29
57
|
} from "./chunk-4E7LCFUG.js";
|
|
58
|
+
import "./chunk-CQHHEW2M.js";
|
|
59
|
+
import {
|
|
60
|
+
AgentManager
|
|
61
|
+
} from "./chunk-JD3K2344.js";
|
|
30
62
|
import {
|
|
31
63
|
CommitManager,
|
|
32
64
|
UserAbortedCommitError,
|
|
33
65
|
ValidationRunner
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import {
|
|
36
|
-
BuildRunner,
|
|
37
|
-
MergeManager
|
|
38
|
-
} from "./chunk-LL6TOX3G.js";
|
|
39
|
-
import {
|
|
40
|
-
assembleChildrenData
|
|
41
|
-
} from "./chunk-TZNNJLGT.js";
|
|
42
|
-
import "./chunk-NOMQ5RFG.js";
|
|
43
|
-
import "./chunk-5UFGO4ZT.js";
|
|
66
|
+
} from "./chunk-TAEVA4QR.js";
|
|
44
67
|
import {
|
|
45
68
|
IssueManagementProviderFactory
|
|
46
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-NTDY5AMO.js";
|
|
47
70
|
import "./chunk-4232AHNQ.js";
|
|
48
71
|
import {
|
|
49
|
-
|
|
50
|
-
} from "./chunk-
|
|
72
|
+
installDependencies
|
|
73
|
+
} from "./chunk-VIQOQ463.js";
|
|
51
74
|
import {
|
|
52
|
-
|
|
53
|
-
} from "./chunk-
|
|
75
|
+
GitWorktreeManager
|
|
76
|
+
} from "./chunk-4VQXMEEP.js";
|
|
54
77
|
import {
|
|
55
78
|
openBrowser
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import "./chunk-HLDY5S4C.js";
|
|
58
|
-
import {
|
|
59
|
-
installDependencies
|
|
60
|
-
} from "./chunk-3GTUXW26.js";
|
|
79
|
+
} from "./chunk-WEBMMJKL.js";
|
|
61
80
|
import {
|
|
62
81
|
getIdeConfig,
|
|
63
82
|
getInstallHint,
|
|
64
83
|
isIdeAvailable
|
|
65
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-CE676WCN.js";
|
|
66
85
|
import {
|
|
67
86
|
ClaudeContextManager
|
|
68
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-JDN4SPV3.js";
|
|
88
|
+
import "./chunk-XCP2WDYA.js";
|
|
89
|
+
import "./chunk-7RCUWU3I.js";
|
|
69
90
|
import "./chunk-GYCR2LOU.js";
|
|
70
|
-
import "./chunk-
|
|
91
|
+
import "./chunk-AQUSMNBF.js";
|
|
71
92
|
import {
|
|
72
93
|
ProjectCapabilityDetector
|
|
73
|
-
} from "./chunk-
|
|
74
|
-
import "./chunk-
|
|
75
|
-
import {
|
|
76
|
-
createNeonProviderFromSettings
|
|
77
|
-
} from "./chunk-VMZG66UV.js";
|
|
78
|
-
import {
|
|
79
|
-
ShellCompletion
|
|
80
|
-
} from "./chunk-QNHZM5ZV.js";
|
|
81
|
-
import {
|
|
82
|
-
TelemetryManager,
|
|
83
|
-
TelemetryService
|
|
84
|
-
} from "./chunk-GMDSYLI6.js";
|
|
85
|
-
import "./chunk-SQYHPBFP.js";
|
|
86
|
-
import {
|
|
87
|
-
AgentManager
|
|
88
|
-
} from "./chunk-VNYWBHKR.js";
|
|
89
|
-
import {
|
|
90
|
-
GitWorktreeManager
|
|
91
|
-
} from "./chunk-LE2NOUTN.js";
|
|
94
|
+
} from "./chunk-772N5WCA.js";
|
|
95
|
+
import "./chunk-K3QGG4O2.js";
|
|
92
96
|
import {
|
|
93
97
|
IssueTrackerFactory
|
|
94
|
-
} from "./chunk-
|
|
95
|
-
import "./chunk-
|
|
98
|
+
} from "./chunk-NUUFP53X.js";
|
|
99
|
+
import "./chunk-DMSL5BAP.js";
|
|
96
100
|
import {
|
|
97
101
|
GitHubService
|
|
98
|
-
} from "./chunk-
|
|
99
|
-
import "./chunk-
|
|
102
|
+
} from "./chunk-D4Q7T5KD.js";
|
|
103
|
+
import "./chunk-KV4NU3RP.js";
|
|
100
104
|
import {
|
|
101
105
|
promptConfirmation,
|
|
102
106
|
waitForKeypress
|
|
103
|
-
} from "./chunk-
|
|
104
|
-
import "./chunk-
|
|
107
|
+
} from "./chunk-NPVA65KS.js";
|
|
108
|
+
import "./chunk-QC65IOV3.js";
|
|
109
|
+
import "./chunk-P5MXXHXQ.js";
|
|
105
110
|
import {
|
|
106
111
|
getConfiguredRepoFromSettings,
|
|
107
112
|
hasMultipleRemotes
|
|
108
|
-
} from "./chunk-
|
|
109
|
-
import "./chunk-
|
|
110
|
-
import "./chunk-
|
|
111
|
-
import "./chunk-WG4MLJ6J.js";
|
|
113
|
+
} from "./chunk-BZ7KTXPB.js";
|
|
114
|
+
import "./chunk-OIVFHJOA.js";
|
|
115
|
+
import "./chunk-DDHWZNGL.js";
|
|
112
116
|
import {
|
|
113
117
|
GitCommandError,
|
|
114
118
|
executeGitCommand,
|
|
@@ -121,22 +125,22 @@ import {
|
|
|
121
125
|
pushBranchToRemote,
|
|
122
126
|
removePlaceholderCommitFromHead,
|
|
123
127
|
removePlaceholderCommitFromHistory
|
|
124
|
-
} from "./chunk-
|
|
128
|
+
} from "./chunk-QNPJXO53.js";
|
|
125
129
|
import {
|
|
126
130
|
SettingsManager
|
|
127
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-WGUGB54H.js";
|
|
128
132
|
import {
|
|
129
133
|
MetadataManager
|
|
130
|
-
} from "./chunk-
|
|
134
|
+
} from "./chunk-4JZEQBWV.js";
|
|
131
135
|
import {
|
|
132
136
|
getLogger,
|
|
133
137
|
withLogger
|
|
134
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-FTYWGQFM.js";
|
|
135
139
|
import {
|
|
136
140
|
createStderrLogger,
|
|
137
141
|
loadEnvIntoProcess,
|
|
138
142
|
logger
|
|
139
|
-
} from "./chunk-
|
|
143
|
+
} from "./chunk-VRPPI6GU.js";
|
|
140
144
|
|
|
141
145
|
// src/cli.ts
|
|
142
146
|
import { program, Option } from "commander";
|
|
@@ -346,10 +350,10 @@ var FinishCommand = class {
|
|
|
346
350
|
const settings = await this.settingsManager.loadSettings();
|
|
347
351
|
const databaseUrlEnvVarName = ((_b = (_a2 = settings.capabilities) == null ? void 0 : _a2.database) == null ? void 0 : _b.databaseUrlEnvVarName) ?? "DATABASE_URL";
|
|
348
352
|
const environmentManager = new EnvironmentManager();
|
|
349
|
-
const
|
|
350
|
-
const databaseManager = new DatabaseManager(
|
|
353
|
+
const databaseProvider = createDatabaseProviderFromSettings(settings);
|
|
354
|
+
const databaseManager = new DatabaseManager(databaseProvider, environmentManager, databaseUrlEnvVarName);
|
|
351
355
|
const cliIsolationManager = new CLIIsolationManager();
|
|
352
|
-
const { DefaultBranchNamingService } = await import("./BranchNamingService-
|
|
356
|
+
const { DefaultBranchNamingService } = await import("./BranchNamingService-MEK2WZUD.js");
|
|
353
357
|
this.loomManager ??= new LoomManager(
|
|
354
358
|
this.gitWorktreeManager,
|
|
355
359
|
this.issueTracker,
|
|
@@ -407,7 +411,7 @@ var FinishCommand = class {
|
|
|
407
411
|
* Main entry point for finish command
|
|
408
412
|
*/
|
|
409
413
|
async execute(input) {
|
|
410
|
-
var _a2, _b, _c
|
|
414
|
+
var _a2, _b, _c;
|
|
411
415
|
process.env.ILOOM = "1";
|
|
412
416
|
const isJsonMode = input.options.json === true || input.options.jsonStream === true;
|
|
413
417
|
const result = {
|
|
@@ -419,13 +423,16 @@ var FinishCommand = class {
|
|
|
419
423
|
};
|
|
420
424
|
if (isJsonMode) {
|
|
421
425
|
const settings2 = await this.settingsManager.loadSettings();
|
|
422
|
-
|
|
423
|
-
|
|
426
|
+
const jsonModeCheckMode = (_a2 = settings2.mergeBehavior) == null ? void 0 : _a2.mode;
|
|
427
|
+
if ((jsonModeCheckMode === "pr" || jsonModeCheckMode === "draft-pr") && input.options.cleanup === void 0) {
|
|
428
|
+
throw new Error('JSON mode with "pr"/"draft-pr" workflow requires --cleanup or --no-cleanup flag. Use: il finish --json --cleanup <identifier>');
|
|
424
429
|
}
|
|
425
430
|
}
|
|
426
431
|
const settings = await this.settingsManager.loadSettings();
|
|
427
432
|
let repo;
|
|
428
|
-
const
|
|
433
|
+
const rawRepoMode = (_b = settings.mergeBehavior) == null ? void 0 : _b.mode;
|
|
434
|
+
const isPRMode = rawRepoMode === "pr" || rawRepoMode === "draft-pr" || rawRepoMode === "github-pr" || rawRepoMode === "github-draft-pr" || rawRepoMode === "bitbucket-pr";
|
|
435
|
+
const needsRepo = isPRMode && VCSProviderFactory.create(settings) === null || this.issueTracker.providerName === "github";
|
|
429
436
|
if (needsRepo && await hasMultipleRemotes()) {
|
|
430
437
|
repo = await getConfiguredRepoFromSettings(settings);
|
|
431
438
|
getLogger().info(`Using GitHub repository: ${repo}`);
|
|
@@ -463,8 +470,16 @@ var FinishCommand = class {
|
|
|
463
470
|
result.success = true;
|
|
464
471
|
try {
|
|
465
472
|
const durationMinutes = preFinishCreatedAt ? Math.round((Date.now() - new Date(preFinishCreatedAt).getTime()) / 6e4) : 0;
|
|
473
|
+
const telemetryModeMap = {
|
|
474
|
+
"local": "local",
|
|
475
|
+
"pr": "pr",
|
|
476
|
+
"draft-pr": "draft-pr",
|
|
477
|
+
"github-pr": "pr",
|
|
478
|
+
"github-draft-pr": "draft-pr",
|
|
479
|
+
"bitbucket-pr": "pr"
|
|
480
|
+
};
|
|
466
481
|
TelemetryService.getInstance().track("loom.finished", {
|
|
467
|
-
merge_behavior: ((
|
|
482
|
+
merge_behavior: telemetryModeMap[((_c = settings.mergeBehavior) == null ? void 0 : _c.mode) ?? "local"] ?? "local",
|
|
468
483
|
duration_minutes: isNaN(durationMinutes) ? 0 : durationMinutes
|
|
469
484
|
});
|
|
470
485
|
} catch (error) {
|
|
@@ -526,7 +541,7 @@ var FinishCommand = class {
|
|
|
526
541
|
if (result.type === "issue" && result.number !== void 0) {
|
|
527
542
|
const worktree = await this.gitWorktreeManager.findWorktreeForIssue(result.number);
|
|
528
543
|
if (worktree) {
|
|
529
|
-
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-
|
|
544
|
+
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-V4LSJ2PB.js");
|
|
530
545
|
const metadataManager = new MetadataManager2();
|
|
531
546
|
const metadata = await metadataManager.readMetadata(worktree.path);
|
|
532
547
|
const canonicalKey = (metadata == null ? void 0 : metadata.issueKey) ?? ((_a2 = metadata == null ? void 0 : metadata.issue_numbers) == null ? void 0 : _a2[0]);
|
|
@@ -556,7 +571,7 @@ var FinishCommand = class {
|
|
|
556
571
|
autoDetected: true
|
|
557
572
|
};
|
|
558
573
|
}
|
|
559
|
-
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-
|
|
574
|
+
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-V4LSJ2PB.js");
|
|
560
575
|
const metadataManager = new MetadataManager2();
|
|
561
576
|
const metadata = await metadataManager.readMetadata(process.cwd());
|
|
562
577
|
const issueNumber = extractIssueNumber(currentDir);
|
|
@@ -827,18 +842,25 @@ var FinishCommand = class {
|
|
|
827
842
|
}
|
|
828
843
|
const settings = await this.settingsManager.loadSettings(worktree.path);
|
|
829
844
|
const mergeBehavior = settings.mergeBehavior ?? { mode: "local" };
|
|
830
|
-
|
|
831
|
-
|
|
845
|
+
const rawMode = mergeBehavior.mode;
|
|
846
|
+
const mergeMode = rawMode === "github-pr" || rawMode === "bitbucket-pr" ? "pr" : rawMode === "github-draft-pr" ? "draft-pr" : rawMode;
|
|
847
|
+
const vcsProvider = VCSProviderFactory.create(settings);
|
|
848
|
+
if (mergeMode === "pr") {
|
|
849
|
+
await this.executeVCSPRWorkflow(parsed, options, worktree, settings, vcsProvider, result);
|
|
832
850
|
return;
|
|
833
851
|
}
|
|
834
|
-
if (
|
|
835
|
-
|
|
836
|
-
|
|
852
|
+
if (mergeMode === "draft-pr") {
|
|
853
|
+
if (vcsProvider !== null && !vcsProvider.supportsDraftPRs) {
|
|
854
|
+
getLogger().warn(`${vcsProvider.providerName} does not support draft PRs. Creating a regular PR instead.`);
|
|
855
|
+
await this.executeVCSPRWorkflow(parsed, options, worktree, settings, vcsProvider, result);
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
const metadataManager2 = new MetadataManager();
|
|
837
859
|
const metadata = await metadataManager2.readMetadata(worktree.path);
|
|
838
860
|
getLogger().debug(`Draft PR mode: worktree=${worktree.path}, draftPrNumber=${(metadata == null ? void 0 : metadata.draftPrNumber) ?? "none"}`);
|
|
839
861
|
if (!(metadata == null ? void 0 : metadata.draftPrNumber)) {
|
|
840
862
|
getLogger().warn("No draft PR found in metadata, creating new PR...");
|
|
841
|
-
await this.
|
|
863
|
+
await this.executeVCSPRWorkflow(parsed, options, worktree, settings, vcsProvider, result);
|
|
842
864
|
return;
|
|
843
865
|
}
|
|
844
866
|
const isHeadPlaceholder = await isPlaceholderCommit(worktree.path);
|
|
@@ -928,8 +950,7 @@ var FinishCommand = class {
|
|
|
928
950
|
getLogger().debug("Skipping build verification (--skip-build flag provided)");
|
|
929
951
|
}
|
|
930
952
|
await this.generateSessionSummaryIfConfigured(parsed, worktree, options);
|
|
931
|
-
const
|
|
932
|
-
const metadataManager = new MetadataManager2();
|
|
953
|
+
const metadataManager = new MetadataManager();
|
|
933
954
|
if (!options.dryRun) {
|
|
934
955
|
await metadataManager.archiveMetadata(worktree.path);
|
|
935
956
|
}
|
|
@@ -957,7 +978,7 @@ var FinishCommand = class {
|
|
|
957
978
|
"Cannot cleanup PR with uncommitted changes. Commit or stash changes, then run again with --force to cleanup anyway."
|
|
958
979
|
);
|
|
959
980
|
}
|
|
960
|
-
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-
|
|
981
|
+
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-V4LSJ2PB.js");
|
|
961
982
|
const metadataManager = new MetadataManager2();
|
|
962
983
|
if (!options.dryRun) {
|
|
963
984
|
await metadataManager.archiveMetadata(worktree.path);
|
|
@@ -1033,11 +1054,16 @@ var FinishCommand = class {
|
|
|
1033
1054
|
}
|
|
1034
1055
|
}
|
|
1035
1056
|
/**
|
|
1036
|
-
* Execute
|
|
1057
|
+
* Execute unified VCS PR workflow (pr/draft-pr merge mode)
|
|
1058
|
+
* Routes to the appropriate VCS provider or falls back to the legacy GitHub PRManager path.
|
|
1059
|
+
*
|
|
1060
|
+
* If vcsProvider is null (GitHub/legacy), uses PRManager.createOrOpenPR.
|
|
1061
|
+
* If vcsProvider is non-null, delegates to VersionControlProvider.createPR.
|
|
1062
|
+
*
|
|
1037
1063
|
* Validates → Commits → Pushes → Creates PR → Prompts for cleanup
|
|
1038
1064
|
*/
|
|
1039
|
-
async
|
|
1040
|
-
var _a2;
|
|
1065
|
+
async executeVCSPRWorkflow(parsed, options, worktree, settings, vcsProvider, finishResult) {
|
|
1066
|
+
var _a2, _b;
|
|
1041
1067
|
if (options.dryRun) {
|
|
1042
1068
|
getLogger().info("[DRY RUN] Would push branch to origin");
|
|
1043
1069
|
} else {
|
|
@@ -1056,6 +1082,63 @@ var FinishCommand = class {
|
|
|
1056
1082
|
}
|
|
1057
1083
|
}
|
|
1058
1084
|
const baseBranch = await getMergeTargetBranch(worktree.path);
|
|
1085
|
+
if (vcsProvider !== null) {
|
|
1086
|
+
if (options.dryRun) {
|
|
1087
|
+
getLogger().info(`[DRY RUN] Would create ${vcsProvider.providerName} PR`);
|
|
1088
|
+
getLogger().info(` Title: ${prTitle}`);
|
|
1089
|
+
getLogger().info(` Base: ${baseBranch}`);
|
|
1090
|
+
finishResult.operations.push({
|
|
1091
|
+
type: "pr-creation",
|
|
1092
|
+
message: `Would create ${vcsProvider.providerName} PR (dry-run)`,
|
|
1093
|
+
success: true
|
|
1094
|
+
});
|
|
1095
|
+
return;
|
|
1096
|
+
}
|
|
1097
|
+
const existingPR = await vcsProvider.checkForExistingPR(worktree.branch, worktree.path);
|
|
1098
|
+
if (existingPR) {
|
|
1099
|
+
getLogger().success(`Existing pull request: ${existingPR.url}`);
|
|
1100
|
+
finishResult.prUrl = existingPR.url;
|
|
1101
|
+
finishResult.operations.push({
|
|
1102
|
+
type: "pr-creation",
|
|
1103
|
+
message: "Found existing pull request",
|
|
1104
|
+
success: true
|
|
1105
|
+
});
|
|
1106
|
+
await this.generateSessionSummaryIfConfigured(parsed, worktree, options, existingPR.number);
|
|
1107
|
+
} else {
|
|
1108
|
+
const prBody = await prManager.generatePRBody(
|
|
1109
|
+
parsed.type === "issue" ? parsed.number : void 0,
|
|
1110
|
+
worktree.path
|
|
1111
|
+
);
|
|
1112
|
+
const prResult = await vcsProvider.createPR(
|
|
1113
|
+
worktree.branch,
|
|
1114
|
+
prTitle,
|
|
1115
|
+
prBody,
|
|
1116
|
+
baseBranch,
|
|
1117
|
+
worktree.path
|
|
1118
|
+
);
|
|
1119
|
+
getLogger().success(`Pull request created: ${prResult.url}`);
|
|
1120
|
+
finishResult.prUrl = prResult.url;
|
|
1121
|
+
finishResult.operations.push({
|
|
1122
|
+
type: "pr-creation",
|
|
1123
|
+
message: "Pull request created",
|
|
1124
|
+
success: true
|
|
1125
|
+
});
|
|
1126
|
+
await this.generateSessionSummaryIfConfigured(parsed, worktree, options, prResult.number);
|
|
1127
|
+
}
|
|
1128
|
+
const shouldOpenBrowser = !options.noBrowser && !options.json && ((_a2 = settings.mergeBehavior) == null ? void 0 : _a2.openBrowserOnFinish) !== false;
|
|
1129
|
+
if (shouldOpenBrowser && finishResult.prUrl) {
|
|
1130
|
+
try {
|
|
1131
|
+
const { openBrowser: openBrowser2 } = await import("./browser-VZY7F2DF.js");
|
|
1132
|
+
await openBrowser2(finishResult.prUrl);
|
|
1133
|
+
} catch {
|
|
1134
|
+
getLogger().debug("Could not open browser");
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
const metadataManager = new MetadataManager();
|
|
1138
|
+
await metadataManager.archiveMetadata(worktree.path);
|
|
1139
|
+
await this.handlePRCleanupPrompt(parsed, options, worktree, finishResult);
|
|
1140
|
+
return;
|
|
1141
|
+
}
|
|
1059
1142
|
if (options.dryRun) {
|
|
1060
1143
|
getLogger().info("[DRY RUN] Would create GitHub PR");
|
|
1061
1144
|
getLogger().info(` Title: ${prTitle}`);
|
|
@@ -1066,7 +1149,7 @@ var FinishCommand = class {
|
|
|
1066
1149
|
success: true
|
|
1067
1150
|
});
|
|
1068
1151
|
} else {
|
|
1069
|
-
const openInBrowser = !options.noBrowser && !options.json && ((
|
|
1152
|
+
const openInBrowser = !options.noBrowser && !options.json && ((_b = settings.mergeBehavior) == null ? void 0 : _b.openBrowserOnFinish) !== false;
|
|
1070
1153
|
const prResult = await prManager.createOrOpenPR(
|
|
1071
1154
|
worktree.branch,
|
|
1072
1155
|
prTitle,
|
|
@@ -1105,7 +1188,7 @@ var FinishCommand = class {
|
|
|
1105
1188
|
}
|
|
1106
1189
|
finishResult.prUrl = prResult.url;
|
|
1107
1190
|
await this.generateSessionSummaryIfConfigured(parsed, worktree, options, prResult.number);
|
|
1108
|
-
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-
|
|
1191
|
+
const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-V4LSJ2PB.js");
|
|
1109
1192
|
const metadataManager = new MetadataManager2();
|
|
1110
1193
|
if (!options.dryRun) {
|
|
1111
1194
|
await metadataManager.archiveMetadata(worktree.path);
|
|
@@ -1956,15 +2039,15 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
|
|
|
1956
2039
|
process.exit(0);
|
|
1957
2040
|
}
|
|
1958
2041
|
try {
|
|
1959
|
-
const { checkAndNotifyUpdate } = await import("./update-notifier-
|
|
1960
|
-
const { detectInstallationMethod } = await import("./installation-detector-
|
|
2042
|
+
const { checkAndNotifyUpdate } = await import("./update-notifier-VYDTDMSJ.js");
|
|
2043
|
+
const { detectInstallationMethod } = await import("./installation-detector-PYAZ2O6U.js");
|
|
1961
2044
|
const installMethod = detectInstallationMethod(__filename);
|
|
1962
2045
|
const jsonMode = actionCommand.opts().json === true;
|
|
1963
2046
|
await checkAndNotifyUpdate(packageJson.version, packageJson.name, installMethod, { suppressOutput: jsonMode });
|
|
1964
2047
|
} catch {
|
|
1965
2048
|
}
|
|
1966
2049
|
try {
|
|
1967
|
-
const { SettingsMigrationManager } = await import("./SettingsMigrationManager-
|
|
2050
|
+
const { SettingsMigrationManager } = await import("./SettingsMigrationManager-ZPARZ5KH.js");
|
|
1968
2051
|
const migrationManager = new SettingsMigrationManager();
|
|
1969
2052
|
await migrationManager.migrateSettingsIfNeeded();
|
|
1970
2053
|
} catch (error) {
|
|
@@ -1987,7 +2070,7 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
|
|
|
1987
2070
|
await validateIdeForStartCommand(actionCommand);
|
|
1988
2071
|
}).hook("postAction", async (_thisCommand, actionCommand) => {
|
|
1989
2072
|
try {
|
|
1990
|
-
const { showVSCodeAnnouncementIfNeeded } = await import("./vscode-announcement-
|
|
2073
|
+
const { showVSCodeAnnouncementIfNeeded } = await import("./vscode-announcement-AL3EHORH.js");
|
|
1991
2074
|
const jsonMode = actionCommand.opts().json === true;
|
|
1992
2075
|
if (!jsonMode) {
|
|
1993
2076
|
await showVSCodeAnnouncementIfNeeded(actionCommand.name());
|
|
@@ -2038,14 +2121,16 @@ async function validateGhCliForCommand(command) {
|
|
|
2038
2121
|
const settings = await settingsManager.loadSettings();
|
|
2039
2122
|
const provider = IssueTrackerFactory.getProviderName(settings);
|
|
2040
2123
|
const mergeBehaviorMode = (_a2 = settings.mergeBehavior) == null ? void 0 : _a2.mode;
|
|
2041
|
-
|
|
2124
|
+
const isPrMode = mergeBehaviorMode === "pr" || mergeBehaviorMode === "draft-pr";
|
|
2125
|
+
const vcsProvider = VCSProviderFactory.create(settings);
|
|
2126
|
+
needsGhCli = provider === "github" || isPrMode && vcsProvider === null;
|
|
2042
2127
|
} catch {
|
|
2043
2128
|
needsGhCli = true;
|
|
2044
2129
|
}
|
|
2045
2130
|
}
|
|
2046
2131
|
if (!ghAvailable) {
|
|
2047
2132
|
if (needsGhCli) {
|
|
2048
|
-
const errorMessage = alwaysRequireGh.includes(commandName) ? `The "${commandName}" command requires GitHub CLI (gh) to be installed.` : `GitHub CLI (gh) is required when using GitHub as the issue tracker or "
|
|
2133
|
+
const errorMessage = alwaysRequireGh.includes(commandName) ? `The "${commandName}" command requires GitHub CLI (gh) to be installed.` : `GitHub CLI (gh) is required when using GitHub as the issue tracker or "pr"/"draft-pr" merge mode with GitHub.`;
|
|
2049
2134
|
logger.error(errorMessage);
|
|
2050
2135
|
logger.info("");
|
|
2051
2136
|
logger.info("To install GitHub CLI:");
|
|
@@ -2061,10 +2146,11 @@ async function validateGhCliForCommand(command) {
|
|
|
2061
2146
|
const settings = await settingsManager.loadSettings();
|
|
2062
2147
|
const provider = IssueTrackerFactory.getProviderName(settings);
|
|
2063
2148
|
const mergeBehaviorMode = (_b = settings.mergeBehavior) == null ? void 0 : _b.mode;
|
|
2064
|
-
|
|
2149
|
+
const isPrMode = mergeBehaviorMode === "pr" || mergeBehaviorMode === "draft-pr";
|
|
2150
|
+
if (provider === "github" || isPrMode) {
|
|
2065
2151
|
logger.warn("GitHub CLI (gh) is not installed.");
|
|
2066
2152
|
logger.warn(
|
|
2067
|
-
|
|
2153
|
+
"Some features may not work correctly with your current configuration (GitHub provider or PR merge mode)."
|
|
2068
2154
|
);
|
|
2069
2155
|
logger.info("To install: brew install gh (macOS) or see https://github.com/cli/cli#installation");
|
|
2070
2156
|
logger.info("");
|
|
@@ -2116,21 +2202,21 @@ async function autoLaunchInitForMultipleRemotes() {
|
|
|
2116
2202
|
logger.info("iloom will now launch an interactive configuration session with Claude");
|
|
2117
2203
|
logger.info("to help you select which remote to use for GitHub operations.");
|
|
2118
2204
|
logger.info("");
|
|
2119
|
-
const { waitForKeypress: waitForKeypress2 } = await import("./prompt-
|
|
2205
|
+
const { waitForKeypress: waitForKeypress2 } = await import("./prompt-FUU5NMJQ.js");
|
|
2120
2206
|
await waitForKeypress2("Press any key to start configuration...");
|
|
2121
2207
|
logger.info("");
|
|
2122
2208
|
try {
|
|
2123
|
-
const { InitCommand } = await import("./init-
|
|
2209
|
+
const { InitCommand } = await import("./init-5HFY7JG6.js");
|
|
2124
2210
|
const initCommand = new InitCommand();
|
|
2125
2211
|
const customInitialMessage = "Help me configure which git remote iloom should use for GitHub operations. I have multiple remotes and need to select the correct one.";
|
|
2126
2212
|
await initCommand.execute(customInitialMessage);
|
|
2127
2213
|
logger.info("");
|
|
2128
2214
|
logger.info("Configuration complete! Continuing with your original command...");
|
|
2129
2215
|
logger.info("");
|
|
2130
|
-
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-
|
|
2216
|
+
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-KQU7OX7G.js");
|
|
2131
2217
|
const settingsManager = new SettingsManager2();
|
|
2132
2218
|
const settings = await settingsManager.loadSettings();
|
|
2133
|
-
const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-
|
|
2219
|
+
const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-RO4LZKT2.js");
|
|
2134
2220
|
const multipleRemotes = await hasMultipleRemotes2();
|
|
2135
2221
|
if (multipleRemotes && !((_b = (_a2 = settings.issueManagement) == null ? void 0 : _a2.github) == null ? void 0 : _b.remote)) {
|
|
2136
2222
|
logger.error("Configuration incomplete: GitHub remote is still not configured.");
|
|
@@ -2162,7 +2248,7 @@ program.command("start").alias("new").alias("create").alias("up").description("C
|
|
|
2162
2248
|
logger.error("JSON mode requires identifier argument");
|
|
2163
2249
|
process.exit(1);
|
|
2164
2250
|
}
|
|
2165
|
-
const { promptInput } = await import("./prompt-
|
|
2251
|
+
const { promptInput } = await import("./prompt-FUU5NMJQ.js");
|
|
2166
2252
|
finalIdentifier = await promptInput("Enter issue number, PR number (pr/123), or branch name");
|
|
2167
2253
|
if (!(finalIdentifier == null ? void 0 : finalIdentifier.trim())) {
|
|
2168
2254
|
logger.error("Identifier is required");
|
|
@@ -2228,7 +2314,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
|
|
|
2228
2314
|
});
|
|
2229
2315
|
program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
|
|
2230
2316
|
try {
|
|
2231
|
-
const { FeedbackCommand } = await import("./feedback-
|
|
2317
|
+
const { FeedbackCommand } = await import("./feedback-Q6WG2WX4.js");
|
|
2232
2318
|
const command = new FeedbackCommand();
|
|
2233
2319
|
const feedbackOptions = {};
|
|
2234
2320
|
if (options.body !== void 0) {
|
|
@@ -2281,7 +2367,7 @@ program.command("enhance").description("Apply enhancement agent to existing GitH
|
|
|
2281
2367
|
await executeAction();
|
|
2282
2368
|
}
|
|
2283
2369
|
});
|
|
2284
|
-
program.command("finish").alias("dn").description("Merge work and cleanup workspace").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").option("--pr <number>", "Treat input as PR number", parseFloat).option("--skip-build", "Skip post-merge build verification").option("--no-browser", "Skip opening PR in browser (
|
|
2370
|
+
program.command("finish").alias("dn").description("Merge work and cleanup workspace").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").option("--pr <number>", "Treat input as PR number", parseFloat).option("--skip-build", "Skip post-merge build verification").option("--skip-to-pr", "Skip rebase/validation/commit, go directly to PR creation (debug)").option("--no-browser", "Skip opening PR in browser (pr and draft-pr modes)").option("--cleanup", "Clean up worktree after finishing (default in local mode)").option("--no-cleanup", "Keep worktree after finishing").option("--review", "Review commit message before committing (default: auto-commit without review)").option("--json", "Output result as JSON").option("--json-stream", "Stream JSONL output; runs Claude headless for conflict resolution").action(async (identifier, options) => {
|
|
2285
2371
|
if (options.browser === false) {
|
|
2286
2372
|
options.noBrowser = true;
|
|
2287
2373
|
}
|
|
@@ -2330,7 +2416,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
|
|
|
2330
2416
|
const isAnyJsonMode = options.json ?? options.jsonStream;
|
|
2331
2417
|
const executeAction = async () => {
|
|
2332
2418
|
try {
|
|
2333
|
-
const { CommitCommand } = await import("./commit-
|
|
2419
|
+
const { CommitCommand } = await import("./commit-SUHRUMDE.js");
|
|
2334
2420
|
const command = new CommitCommand();
|
|
2335
2421
|
const noReview = options.review === false || options.json === true || options.jsonStream === true;
|
|
2336
2422
|
const result = await command.execute({
|
|
@@ -2369,7 +2455,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
|
|
|
2369
2455
|
program.command("rebase").description("Rebase current branch on main with Claude-assisted conflict resolution").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").option("--json-stream", "Stream JSONL output; runs Claude headless for conflict resolution").action(async (options) => {
|
|
2370
2456
|
const executeAction = async () => {
|
|
2371
2457
|
try {
|
|
2372
|
-
const { RebaseCommand } = await import("./rebase-
|
|
2458
|
+
const { RebaseCommand } = await import("./rebase-MAMWPA2L.js");
|
|
2373
2459
|
const command = new RebaseCommand();
|
|
2374
2460
|
const result = await command.execute(options);
|
|
2375
2461
|
if (options.jsonStream && result) {
|
|
@@ -2409,7 +2495,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
|
|
|
2409
2495
|
options.oneShot = "bypassPermissions";
|
|
2410
2496
|
}
|
|
2411
2497
|
try {
|
|
2412
|
-
const { IgniteCommand } = await import("./ignite-
|
|
2498
|
+
const { IgniteCommand } = await import("./ignite-P644W2PK.js");
|
|
2413
2499
|
const command = new IgniteCommand();
|
|
2414
2500
|
if (options.json && options.jsonStream) {
|
|
2415
2501
|
logger.error("--json and --json-stream are mutually exclusive");
|
|
@@ -2437,7 +2523,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
|
|
|
2437
2523
|
program.command("open").description("Open workspace in browser or run CLI tool").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
|
|
2438
2524
|
try {
|
|
2439
2525
|
const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
|
|
2440
|
-
const { OpenCommand } = await import("./open-
|
|
2526
|
+
const { OpenCommand } = await import("./open-KUO35JIJ.js");
|
|
2441
2527
|
const cmd = new OpenCommand();
|
|
2442
2528
|
const input = identifier ? { identifier, args } : { args };
|
|
2443
2529
|
await cmd.execute(input);
|
|
@@ -2449,7 +2535,7 @@ program.command("open").description("Open workspace in browser or run CLI tool")
|
|
|
2449
2535
|
program.command("run").description("Run CLI tool or open workspace in browser").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
|
|
2450
2536
|
try {
|
|
2451
2537
|
const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
|
|
2452
|
-
const { RunCommand } = await import("./run-
|
|
2538
|
+
const { RunCommand } = await import("./run-RGZHCQ6M.js");
|
|
2453
2539
|
const cmd = new RunCommand();
|
|
2454
2540
|
const input = identifier ? { identifier, args } : { args };
|
|
2455
2541
|
await cmd.execute(input);
|
|
@@ -2460,7 +2546,7 @@ program.command("run").description("Run CLI tool or open workspace in browser").
|
|
|
2460
2546
|
});
|
|
2461
2547
|
program.command("vscode").description("Install iloom VS Code extension and open workspace in VS Code").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--no-wait", "Skip keypress prompt and open immediately").action(async (identifier, options) => {
|
|
2462
2548
|
try {
|
|
2463
|
-
const { VSCodeCommand } = await import("./vscode-
|
|
2549
|
+
const { VSCodeCommand } = await import("./vscode-3I7ISHUU.js");
|
|
2464
2550
|
const cmd = new VSCodeCommand();
|
|
2465
2551
|
await cmd.execute({ identifier, wait: options == null ? void 0 : options.wait });
|
|
2466
2552
|
} catch (error) {
|
|
@@ -2469,7 +2555,7 @@ program.command("vscode").description("Install iloom VS Code extension and open
|
|
|
2469
2555
|
});
|
|
2470
2556
|
program.command("dev-server").alias("dev").description("Start dev server for workspace (foreground)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--json", "Output as JSON").action(async (identifier, options) => {
|
|
2471
2557
|
try {
|
|
2472
|
-
const { DevServerCommand } = await import("./dev-server-
|
|
2558
|
+
const { DevServerCommand } = await import("./dev-server-ZNTLWOL5.js");
|
|
2473
2559
|
const cmd = new DevServerCommand();
|
|
2474
2560
|
await cmd.execute({ identifier, json: options == null ? void 0 : options.json });
|
|
2475
2561
|
} catch (error) {
|
|
@@ -2479,7 +2565,7 @@ program.command("dev-server").alias("dev").description("Start dev server for wor
|
|
|
2479
2565
|
});
|
|
2480
2566
|
program.command("shell").alias("terminal").description("Open interactive shell with workspace environment").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
2481
2567
|
try {
|
|
2482
|
-
const { ShellCommand } = await import("./shell-
|
|
2568
|
+
const { ShellCommand } = await import("./shell-7ADCDFIV.js");
|
|
2483
2569
|
const cmd = new ShellCommand();
|
|
2484
2570
|
await cmd.execute({ identifier });
|
|
2485
2571
|
} catch (error) {
|
|
@@ -2489,7 +2575,7 @@ program.command("shell").alias("terminal").description("Open interactive shell w
|
|
|
2489
2575
|
});
|
|
2490
2576
|
program.command("build").description("Run the build script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
2491
2577
|
try {
|
|
2492
|
-
const { BuildCommand } = await import("./build-
|
|
2578
|
+
const { BuildCommand } = await import("./build-V3KADFMO.js");
|
|
2493
2579
|
const cmd = new BuildCommand();
|
|
2494
2580
|
await cmd.execute(identifier ? { identifier } : {});
|
|
2495
2581
|
} catch (error) {
|
|
@@ -2499,7 +2585,7 @@ program.command("build").description("Run the build script").argument("[identifi
|
|
|
2499
2585
|
});
|
|
2500
2586
|
program.command("lint").description("Run the lint script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
2501
2587
|
try {
|
|
2502
|
-
const { LintCommand } = await import("./lint-
|
|
2588
|
+
const { LintCommand } = await import("./lint-XIXKU22H.js");
|
|
2503
2589
|
const cmd = new LintCommand();
|
|
2504
2590
|
await cmd.execute(identifier ? { identifier } : {});
|
|
2505
2591
|
} catch (error) {
|
|
@@ -2509,7 +2595,7 @@ program.command("lint").description("Run the lint script").argument("[identifier
|
|
|
2509
2595
|
});
|
|
2510
2596
|
program.command("test").description("Run the test script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
2511
2597
|
try {
|
|
2512
|
-
const { TestCommand } = await import("./test-
|
|
2598
|
+
const { TestCommand } = await import("./test-SRB7EWU6.js");
|
|
2513
2599
|
const cmd = new TestCommand();
|
|
2514
2600
|
await cmd.execute(identifier ? { identifier } : {});
|
|
2515
2601
|
} catch (error) {
|
|
@@ -2519,7 +2605,7 @@ program.command("test").description("Run the test script").argument("[identifier
|
|
|
2519
2605
|
});
|
|
2520
2606
|
program.command("compile").alias("typecheck").description("Run the compile or typecheck script (prefers compile if both exist)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
2521
2607
|
try {
|
|
2522
|
-
const { CompileCommand } = await import("./compile-
|
|
2608
|
+
const { CompileCommand } = await import("./compile-2MD346PO.js");
|
|
2523
2609
|
const cmd = new CompileCommand();
|
|
2524
2610
|
await cmd.execute(identifier ? { identifier } : {});
|
|
2525
2611
|
} catch (error) {
|
|
@@ -2529,7 +2615,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
|
|
|
2529
2615
|
});
|
|
2530
2616
|
program.command("install-deps").description("Install dependencies for a workspace").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--no-frozen", "Allow lockfile updates (default: frozen/locked)").action(async (identifier, options) => {
|
|
2531
2617
|
try {
|
|
2532
|
-
const { InstallDepsCommand } = await import("./install-deps-
|
|
2618
|
+
const { InstallDepsCommand } = await import("./install-deps-J4ALTM27.js");
|
|
2533
2619
|
const cmd = new InstallDepsCommand();
|
|
2534
2620
|
const input = {};
|
|
2535
2621
|
if (identifier) input.identifier = identifier;
|
|
@@ -2543,7 +2629,7 @@ program.command("install-deps").description("Install dependencies for a workspac
|
|
|
2543
2629
|
program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").option("--archive", "Archive metadata instead of deleting (preserves loom in il list --finished)").option("--defer <ms>", "Wait specified milliseconds before cleanup", parseInt).action(async (identifier, options) => {
|
|
2544
2630
|
const executeAction = async () => {
|
|
2545
2631
|
try {
|
|
2546
|
-
const { CleanupCommand } = await import("./cleanup-
|
|
2632
|
+
const { CleanupCommand } = await import("./cleanup-RJKLI47I.js");
|
|
2547
2633
|
const command = new CleanupCommand();
|
|
2548
2634
|
const input = {
|
|
2549
2635
|
options: options ?? {}
|
|
@@ -2893,7 +2979,7 @@ program.command("list").description("Show active workspaces").option("--json", "
|
|
|
2893
2979
|
});
|
|
2894
2980
|
program.command("projects").description("List configured iloom projects").option("--json", "Output as JSON (default behavior)").action(async (options) => {
|
|
2895
2981
|
try {
|
|
2896
|
-
const { ProjectsCommand } = await import("./projects-
|
|
2982
|
+
const { ProjectsCommand } = await import("./projects-L5AHUBGA.js");
|
|
2897
2983
|
const command = new ProjectsCommand();
|
|
2898
2984
|
const result = await command.execute(options);
|
|
2899
2985
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -2904,7 +2990,7 @@ program.command("projects").description("List configured iloom projects").option
|
|
|
2904
2990
|
});
|
|
2905
2991
|
program.command("issues").description("List project issues from configured issue tracker").argument("[project-path]", "Path to project root (auto-detected if omitted)").option("--json", "Output as JSON (default behavior)").option("--limit <n>", "Max issues to return", "100").option("--sprint <name>", 'Jira only: filter by sprint name (e.g., "Sprint 17") or "current" for active sprint').option("--mine", "Show only issues and PRs assigned to me").action(async (projectPath, options) => {
|
|
2906
2992
|
try {
|
|
2907
|
-
const { IssuesCommand } = await import("./issues-
|
|
2993
|
+
const { IssuesCommand } = await import("./issues-LZMIF22U.js");
|
|
2908
2994
|
const command = new IssuesCommand();
|
|
2909
2995
|
const parsedLimit = parseInt((options == null ? void 0 : options.limit) ?? "100", 10);
|
|
2910
2996
|
const limit = Number.isNaN(parsedLimit) || parsedLimit <= 0 ? 100 : parsedLimit;
|
|
@@ -2922,7 +3008,7 @@ program.command("issues").description("List project issues from configured issue
|
|
|
2922
3008
|
});
|
|
2923
3009
|
program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').addOption(new Option("--accept-defaults").hideHelp()).action(async (prompt, options) => {
|
|
2924
3010
|
try {
|
|
2925
|
-
const { InitCommand } = await import("./init-
|
|
3011
|
+
const { InitCommand } = await import("./init-5HFY7JG6.js");
|
|
2926
3012
|
const command = new InitCommand();
|
|
2927
3013
|
const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
|
|
2928
3014
|
const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
|
|
@@ -2936,7 +3022,7 @@ program.command("plan").description("Launch interactive planning session with Ar
|
|
|
2936
3022
|
new Option("--output-format <format>", "Output format for Claude CLI (requires --print)").choices(["json", "stream-json", "text"])
|
|
2937
3023
|
).option("--verbose", "Enable verbose output (requires --print)").option("--json", "Output final result as JSON object (requires --print)").option("--json-stream", "Stream JSONL output to stdout in real-time (requires --print)").option("--auto-swarm", "Enable auto-swarm: plan, start epic, and spin automatically").action(async (prompt, options) => {
|
|
2938
3024
|
try {
|
|
2939
|
-
const { PlanCommand } = await import("./plan-
|
|
3025
|
+
const { PlanCommand } = await import("./plan-7CF56OIR.js");
|
|
2940
3026
|
const command = new PlanCommand();
|
|
2941
3027
|
if ((options == null ? void 0 : options.json) && (options == null ? void 0 : options.jsonStream)) {
|
|
2942
3028
|
logger.error("--json and --json-stream are mutually exclusive");
|
|
@@ -2963,7 +3049,7 @@ program.command("plan").description("Launch interactive planning session with Ar
|
|
|
2963
3049
|
});
|
|
2964
3050
|
program.command("contribute").description("Set up local development environment for contributing to a GitHub project").argument("[repository]", "GitHub repository (owner/repo, github.com/owner/repo, or full URL). Defaults to iloom-ai/iloom-cli").action(async (repository) => {
|
|
2965
3051
|
try {
|
|
2966
|
-
const { ContributeCommand } = await import("./contribute-
|
|
3052
|
+
const { ContributeCommand } = await import("./contribute-P4BMRY7C.js");
|
|
2967
3053
|
const command = new ContributeCommand();
|
|
2968
3054
|
await command.execute(repository);
|
|
2969
3055
|
} catch (error) {
|
|
@@ -2973,7 +3059,7 @@ program.command("contribute").description("Set up local development environment
|
|
|
2973
3059
|
});
|
|
2974
3060
|
program.command("update").description("Update iloom-cli to the latest version").option("--dry-run", "Show what would be done without actually updating").action(async (options) => {
|
|
2975
3061
|
try {
|
|
2976
|
-
const { UpdateCommand } = await import("./update-
|
|
3062
|
+
const { UpdateCommand } = await import("./update-AD3GE5C4.js");
|
|
2977
3063
|
const command = new UpdateCommand();
|
|
2978
3064
|
await command.execute(options);
|
|
2979
3065
|
} catch (error) {
|
|
@@ -2983,8 +3069,8 @@ program.command("update").description("Update iloom-cli to the latest version").
|
|
|
2983
3069
|
});
|
|
2984
3070
|
program.command("test-github").description("Test GitHub integration (Issue #3)").argument("<identifier>", "Issue number or PR number").option("--no-claude", "Skip Claude for branch name generation").action(async (identifier, options) => {
|
|
2985
3071
|
try {
|
|
2986
|
-
const { GitHubService: GitHubService2 } = await import("./GitHubService-
|
|
2987
|
-
const { DefaultBranchNamingService } = await import("./BranchNamingService-
|
|
3072
|
+
const { GitHubService: GitHubService2 } = await import("./GitHubService-UTAYZXL3.js");
|
|
3073
|
+
const { DefaultBranchNamingService } = await import("./BranchNamingService-MEK2WZUD.js");
|
|
2988
3074
|
logger.info("Testing GitHub Integration\n");
|
|
2989
3075
|
const service = new GitHubService2();
|
|
2990
3076
|
const branchNaming = new DefaultBranchNamingService({ useClaude: options.claude !== false });
|
|
@@ -3042,10 +3128,10 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
|
|
|
3042
3128
|
});
|
|
3043
3129
|
program.command("test-claude").description("Test Claude integration (Issue #10)").option("--detect", "Test Claude CLI detection").option("--version", "Get Claude CLI version").option("--branch <title>", "Test branch name generation with given title").option("--issue <number>", "Issue number for branch generation", "123").option("--launch <prompt>", "Launch Claude with a prompt (headless)").option("--interactive", "Launch Claude interactively (requires --launch)").option("--template <name>", "Test template loading").action(async (options) => {
|
|
3044
3130
|
try {
|
|
3045
|
-
const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-
|
|
3046
|
-
const { PromptTemplateManager } = await import("./PromptTemplateManager-
|
|
3047
|
-
const { ClaudeService } = await import("./ClaudeService-
|
|
3048
|
-
const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-
|
|
3131
|
+
const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-ACL7G4CF.js");
|
|
3132
|
+
const { PromptTemplateManager } = await import("./PromptTemplateManager-I75WKXM4.js");
|
|
3133
|
+
const { ClaudeService } = await import("./ClaudeService-LEPW6QAC.js");
|
|
3134
|
+
const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-RRGREEZQ.js");
|
|
3049
3135
|
logger.info("Testing Claude Integration\n");
|
|
3050
3136
|
if (options.detect) {
|
|
3051
3137
|
logger.info("Detecting Claude CLI...");
|
|
@@ -3180,7 +3266,7 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
|
|
|
3180
3266
|
});
|
|
3181
3267
|
program.command("test-webserver").description("Test if a web server is running on a workspace port").argument("<issue-number>", "Issue number (port will be calculated as 3000 + issue number)", parseInt).option("--kill", "Kill the web server if detected").action(async (issueNumber, options) => {
|
|
3182
3268
|
try {
|
|
3183
|
-
const { TestWebserverCommand } = await import("./test-webserver-
|
|
3269
|
+
const { TestWebserverCommand } = await import("./test-webserver-GZFVXBGD.js");
|
|
3184
3270
|
const command = new TestWebserverCommand();
|
|
3185
3271
|
await command.execute({ issueNumber, options });
|
|
3186
3272
|
} catch (error) {
|
|
@@ -3193,7 +3279,7 @@ program.command("test-webserver").description("Test if a web server is running o
|
|
|
3193
3279
|
});
|
|
3194
3280
|
program.command("test-git").description("Test Git integration - findMainWorktreePath() function (reads .iloom/settings.json)").action(async () => {
|
|
3195
3281
|
try {
|
|
3196
|
-
const { TestGitCommand } = await import("./test-git-
|
|
3282
|
+
const { TestGitCommand } = await import("./test-git-G7ATVIXG.js");
|
|
3197
3283
|
const command = new TestGitCommand();
|
|
3198
3284
|
await command.execute();
|
|
3199
3285
|
} catch (error) {
|
|
@@ -3206,7 +3292,7 @@ program.command("test-git").description("Test Git integration - findMainWorktree
|
|
|
3206
3292
|
});
|
|
3207
3293
|
program.command("test-tabs").description("Test iTerm2 dual tab functionality - opens two tabs with test commands").action(async () => {
|
|
3208
3294
|
try {
|
|
3209
|
-
const { TestTabsCommand } = await import("./test-tabs-
|
|
3295
|
+
const { TestTabsCommand } = await import("./test-tabs-NGPTFD5T.js");
|
|
3210
3296
|
const command = new TestTabsCommand();
|
|
3211
3297
|
await command.execute();
|
|
3212
3298
|
} catch (error) {
|
|
@@ -3219,7 +3305,7 @@ program.command("test-tabs").description("Test iTerm2 dual tab functionality - o
|
|
|
3219
3305
|
});
|
|
3220
3306
|
program.command("test-prefix").description("[DEPRECATED] Test worktree prefix configuration - preview worktree paths").action(async () => {
|
|
3221
3307
|
try {
|
|
3222
|
-
const { TestPrefixCommand } = await import("./test-prefix-
|
|
3308
|
+
const { TestPrefixCommand } = await import("./test-prefix-JMDGXR5A.js");
|
|
3223
3309
|
const command = new TestPrefixCommand();
|
|
3224
3310
|
await command.execute();
|
|
3225
3311
|
} catch (error) {
|
|
@@ -3233,7 +3319,7 @@ program.command("test-prefix").description("[DEPRECATED] Test worktree prefix co
|
|
|
3233
3319
|
program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
|
|
3234
3320
|
const executeAction = async () => {
|
|
3235
3321
|
try {
|
|
3236
|
-
const { SummaryCommand } = await import("./summary-
|
|
3322
|
+
const { SummaryCommand } = await import("./summary-7J2HORFD.js");
|
|
3237
3323
|
const command = new SummaryCommand();
|
|
3238
3324
|
const result = await command.execute({ identifier, options });
|
|
3239
3325
|
if (options.json && result) {
|
|
@@ -3263,7 +3349,7 @@ program.command("summary").description("Generate Claude session summary for a lo
|
|
|
3263
3349
|
program.command("recap").description("Get recap for a loom (defaults to current directory)").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--json", "Output as JSON with filePath for file watching").action(async (identifier, options) => {
|
|
3264
3350
|
const executeAction = async () => {
|
|
3265
3351
|
try {
|
|
3266
|
-
const { RecapCommand } = await import("./recap-
|
|
3352
|
+
const { RecapCommand } = await import("./recap-IDBO3KM5.js");
|
|
3267
3353
|
const command = new RecapCommand();
|
|
3268
3354
|
const result = await command.execute({ identifier, json: options.json });
|
|
3269
3355
|
if (options.json && result) {
|
|
@@ -3293,7 +3379,7 @@ program.command("recap").description("Get recap for a loom (defaults to current
|
|
|
3293
3379
|
var testJiraCommand = program.command("test-jira").description("Test Jira integration methods against a real Jira instance");
|
|
3294
3380
|
testJiraCommand.command("child-issue").description("Create a test child issue under a parent").argument("<parentKey>", "Parent issue key (e.g., PROJ-123)").action(async (parentKey) => {
|
|
3295
3381
|
try {
|
|
3296
|
-
const { TestJiraCommand } = await import("./test-jira-
|
|
3382
|
+
const { TestJiraCommand } = await import("./test-jira-Q2HPA522.js");
|
|
3297
3383
|
await new TestJiraCommand().createChildIssue(parentKey);
|
|
3298
3384
|
} catch (error) {
|
|
3299
3385
|
logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
@@ -3302,7 +3388,7 @@ testJiraCommand.command("child-issue").description("Create a test child issue un
|
|
|
3302
3388
|
});
|
|
3303
3389
|
testJiraCommand.command("create-dep").description('Create a "Blocks" dependency between two issues').argument("<blockingKey>", "Issue key that blocks (e.g., PROJ-100)").argument("<blockedKey>", "Issue key being blocked (e.g., PROJ-200)").action(async (blockingKey, blockedKey) => {
|
|
3304
3390
|
try {
|
|
3305
|
-
const { TestJiraCommand } = await import("./test-jira-
|
|
3391
|
+
const { TestJiraCommand } = await import("./test-jira-Q2HPA522.js");
|
|
3306
3392
|
await new TestJiraCommand().createDependency(blockingKey, blockedKey);
|
|
3307
3393
|
} catch (error) {
|
|
3308
3394
|
logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
@@ -3311,7 +3397,7 @@ testJiraCommand.command("create-dep").description('Create a "Blocks" dependency
|
|
|
3311
3397
|
});
|
|
3312
3398
|
testJiraCommand.command("get-deps").description("Fetch and print dependencies for an issue").argument("<issueKey>", "Issue key (e.g., PROJ-123)").action(async (issueKey) => {
|
|
3313
3399
|
try {
|
|
3314
|
-
const { TestJiraCommand } = await import("./test-jira-
|
|
3400
|
+
const { TestJiraCommand } = await import("./test-jira-Q2HPA522.js");
|
|
3315
3401
|
await new TestJiraCommand().getDependencies(issueKey);
|
|
3316
3402
|
} catch (error) {
|
|
3317
3403
|
logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
@@ -3320,7 +3406,7 @@ testJiraCommand.command("get-deps").description("Fetch and print dependencies fo
|
|
|
3320
3406
|
});
|
|
3321
3407
|
testJiraCommand.command("remove-dep").description('Remove a "Blocks" dependency between two issues').argument("<blockingKey>", "Issue key that blocks (e.g., PROJ-100)").argument("<blockedKey>", "Issue key being blocked (e.g., PROJ-200)").action(async (blockingKey, blockedKey) => {
|
|
3322
3408
|
try {
|
|
3323
|
-
const { TestJiraCommand } = await import("./test-jira-
|
|
3409
|
+
const { TestJiraCommand } = await import("./test-jira-Q2HPA522.js");
|
|
3324
3410
|
await new TestJiraCommand().removeDependency(blockingKey, blockedKey);
|
|
3325
3411
|
} catch (error) {
|
|
3326
3412
|
logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
@@ -3329,51 +3415,54 @@ testJiraCommand.command("remove-dep").description('Remove a "Blocks" dependency
|
|
|
3329
3415
|
});
|
|
3330
3416
|
testJiraCommand.command("get-children").description("List child issues of a parent").argument("<issueKey>", "Parent issue key (e.g., PROJ-123)").action(async (issueKey) => {
|
|
3331
3417
|
try {
|
|
3332
|
-
const { TestJiraCommand } = await import("./test-jira-
|
|
3418
|
+
const { TestJiraCommand } = await import("./test-jira-Q2HPA522.js");
|
|
3333
3419
|
await new TestJiraCommand().getChildIssues(issueKey);
|
|
3334
3420
|
} catch (error) {
|
|
3335
3421
|
logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3336
3422
|
process.exit(1);
|
|
3337
3423
|
}
|
|
3338
3424
|
});
|
|
3339
|
-
program.command("test-
|
|
3340
|
-
var _a2;
|
|
3425
|
+
program.command("test-db").description("Test database provider integration and debug configuration").action(async () => {
|
|
3341
3426
|
try {
|
|
3342
|
-
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-
|
|
3343
|
-
const {
|
|
3344
|
-
logger.info("Testing
|
|
3427
|
+
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-KQU7OX7G.js");
|
|
3428
|
+
const { createDatabaseProviderFromSettings: createDatabaseProviderFromSettings2 } = await import("./database-helpers-PRDFNDRO.js");
|
|
3429
|
+
logger.info("Testing Database Provider Integration\n");
|
|
3345
3430
|
logger.info("1. Settings Configuration:");
|
|
3346
3431
|
const settingsManager = new SettingsManager2();
|
|
3347
3432
|
const settings = await settingsManager.loadSettings();
|
|
3348
|
-
|
|
3349
|
-
logger.info(` projectId: ${(neonConfig == null ? void 0 : neonConfig.projectId) ?? "(not configured)"}`);
|
|
3350
|
-
logger.info(` parentBranch: ${(neonConfig == null ? void 0 : neonConfig.parentBranch) ?? "(not configured)"}`);
|
|
3351
|
-
logger.info("\n2. Creating NeonProvider...");
|
|
3433
|
+
logger.info("\n2. Creating database provider...");
|
|
3352
3434
|
try {
|
|
3353
|
-
const
|
|
3354
|
-
logger.
|
|
3355
|
-
|
|
3356
|
-
|
|
3435
|
+
const provider = createDatabaseProviderFromSettings2(settings);
|
|
3436
|
+
logger.info(` Provider: ${provider.displayName}`);
|
|
3437
|
+
const isConfigured = provider.isConfigured();
|
|
3438
|
+
if (isConfigured) {
|
|
3439
|
+
logger.success(` ${provider.displayName} is configured`);
|
|
3440
|
+
} else {
|
|
3441
|
+
logger.warn(` ${provider.displayName} is not configured`);
|
|
3442
|
+
}
|
|
3443
|
+
logger.info(`
|
|
3444
|
+
3. Testing ${provider.displayName} CLI availability...`);
|
|
3445
|
+
const isAvailable = await provider.isCliAvailable();
|
|
3357
3446
|
if (isAvailable) {
|
|
3358
|
-
logger.success(
|
|
3447
|
+
logger.success(` ${provider.displayName} CLI is available`);
|
|
3359
3448
|
} else {
|
|
3360
|
-
logger.error(
|
|
3361
|
-
logger.info(
|
|
3449
|
+
logger.error(` ${provider.displayName} CLI not found`);
|
|
3450
|
+
logger.info(` Install with: ${provider.installHint}`);
|
|
3362
3451
|
return;
|
|
3363
3452
|
}
|
|
3364
|
-
logger.info(
|
|
3365
|
-
|
|
3453
|
+
logger.info(`
|
|
3454
|
+
4. Testing ${provider.displayName} CLI authentication...`);
|
|
3455
|
+
const isAuthenticated = await provider.isAuthenticated();
|
|
3366
3456
|
if (isAuthenticated) {
|
|
3367
|
-
logger.success(
|
|
3457
|
+
logger.success(` ${provider.displayName} CLI is authenticated`);
|
|
3368
3458
|
} else {
|
|
3369
|
-
logger.error(
|
|
3370
|
-
logger.info(" Run: neon auth");
|
|
3459
|
+
logger.error(` ${provider.displayName} CLI not authenticated`);
|
|
3371
3460
|
return;
|
|
3372
3461
|
}
|
|
3373
|
-
if (
|
|
3462
|
+
if (isConfigured) {
|
|
3374
3463
|
logger.info("\n5. Testing branch listing...");
|
|
3375
3464
|
try {
|
|
3376
|
-
const branches = await
|
|
3465
|
+
const branches = await provider.listBranches();
|
|
3377
3466
|
logger.success(` Found ${branches.length} branches:`);
|
|
3378
3467
|
for (const branch of branches.slice(0, 5)) {
|
|
3379
3468
|
logger.info(` - ${branch}`);
|
|
@@ -3385,17 +3474,18 @@ program.command("test-neon").description("Test Neon integration and debug config
|
|
|
3385
3474
|
logger.error(` Failed to list branches: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3386
3475
|
}
|
|
3387
3476
|
} else {
|
|
3388
|
-
logger.warn(
|
|
3477
|
+
logger.warn(`
|
|
3478
|
+
5. Skipping branch listing (${provider.displayName} not configured in settings)`);
|
|
3389
3479
|
}
|
|
3390
3480
|
} catch (error) {
|
|
3391
|
-
logger.error(` Failed to create
|
|
3481
|
+
logger.error(` Failed to create database provider: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3392
3482
|
if (error instanceof Error && error.message.includes("not configured")) {
|
|
3393
|
-
logger.info("\n This is expected if
|
|
3394
|
-
logger.info(" Configure databaseProviders
|
|
3483
|
+
logger.info("\n This is expected if no database provider is configured.");
|
|
3484
|
+
logger.info(" Configure databaseProviders in .iloom/settings.json to test fully.");
|
|
3395
3485
|
}
|
|
3396
3486
|
}
|
|
3397
3487
|
logger.info("\n" + "=".repeat(50));
|
|
3398
|
-
logger.success("
|
|
3488
|
+
logger.success("Database provider integration test complete!");
|
|
3399
3489
|
} catch (error) {
|
|
3400
3490
|
logger.error(`Test failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3401
3491
|
if (error instanceof Error && error.stack) {
|
|
@@ -3435,6 +3525,69 @@ program.command("help").description("Display help information").argument("[comma
|
|
|
3435
3525
|
}
|
|
3436
3526
|
process.exit(0);
|
|
3437
3527
|
});
|
|
3528
|
+
if (process.env.ILOOM_DEBUG === "true") {
|
|
3529
|
+
const debugCommand = program.command("debug").description("Debug tools (only available in debug mode)");
|
|
3530
|
+
const bitbucketDebugCommand = debugCommand.command("bitbucket").description("BitBucket debug tools");
|
|
3531
|
+
bitbucketDebugCommand.command("resolve-reviewer-ids").description("Resolve configured reviewer usernames to BitBucket account IDs").action(async () => {
|
|
3532
|
+
var _a2;
|
|
3533
|
+
try {
|
|
3534
|
+
const settingsManager = new SettingsManager();
|
|
3535
|
+
const settings = await settingsManager.loadSettings();
|
|
3536
|
+
const bitbucketConfig = (_a2 = settings.versionControl) == null ? void 0 : _a2.bitbucket;
|
|
3537
|
+
if (!bitbucketConfig) {
|
|
3538
|
+
logger.error("BitBucket configuration not found in settings");
|
|
3539
|
+
logger.info("Configure versionControl.bitbucket in .iloom/settings.json");
|
|
3540
|
+
process.exit(1);
|
|
3541
|
+
}
|
|
3542
|
+
if (!bitbucketConfig.username) {
|
|
3543
|
+
logger.error("BitBucket username not configured");
|
|
3544
|
+
logger.info("Configure versionControl.bitbucket.username in .iloom/settings.json");
|
|
3545
|
+
process.exit(1);
|
|
3546
|
+
}
|
|
3547
|
+
if (!bitbucketConfig.apiToken) {
|
|
3548
|
+
logger.error("BitBucket API token not configured");
|
|
3549
|
+
logger.info("Configure versionControl.bitbucket.apiToken in .iloom/settings.local.json");
|
|
3550
|
+
process.exit(1);
|
|
3551
|
+
}
|
|
3552
|
+
const reviewers = bitbucketConfig.reviewers ?? [];
|
|
3553
|
+
if (reviewers.length === 0) {
|
|
3554
|
+
logger.warn("No reviewers configured in settings");
|
|
3555
|
+
logger.info("Configure versionControl.bitbucket.reviewers in .iloom/settings.json");
|
|
3556
|
+
console.log(JSON.stringify({}, null, 2));
|
|
3557
|
+
process.exit(0);
|
|
3558
|
+
}
|
|
3559
|
+
let workspace = bitbucketConfig.workspace;
|
|
3560
|
+
if (!workspace) {
|
|
3561
|
+
const { parseGitRemotes } = await import("./remote-RO4LZKT2.js");
|
|
3562
|
+
const remotes = await parseGitRemotes();
|
|
3563
|
+
const bitbucketRemote = remotes.find((r) => r.url.includes("bitbucket.org"));
|
|
3564
|
+
if (!bitbucketRemote) {
|
|
3565
|
+
logger.error("Could not auto-detect BitBucket workspace from git remote");
|
|
3566
|
+
logger.info("Configure versionControl.bitbucket.workspace in .iloom/settings.json");
|
|
3567
|
+
process.exit(1);
|
|
3568
|
+
}
|
|
3569
|
+
workspace = bitbucketRemote.owner;
|
|
3570
|
+
}
|
|
3571
|
+
const resolvedWorkspace = workspace;
|
|
3572
|
+
const { BitBucketApiClient } = await import("./BitBucketApiClient-J2ZSCS5N.js");
|
|
3573
|
+
const apiClient = new BitBucketApiClient({
|
|
3574
|
+
username: bitbucketConfig.username,
|
|
3575
|
+
apiToken: bitbucketConfig.apiToken,
|
|
3576
|
+
workspace: resolvedWorkspace
|
|
3577
|
+
});
|
|
3578
|
+
const resolvedMap = await apiClient.findUsersByUsername(resolvedWorkspace, reviewers);
|
|
3579
|
+
const result = {};
|
|
3580
|
+
for (const [username, accountId] of resolvedMap) {
|
|
3581
|
+
result[username] = accountId;
|
|
3582
|
+
}
|
|
3583
|
+
console.log(JSON.stringify(result, null, 2));
|
|
3584
|
+
process.exit(0);
|
|
3585
|
+
} catch (error) {
|
|
3586
|
+
logger.error(`Failed to resolve reviewer IDs: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3587
|
+
process.exit(1);
|
|
3588
|
+
}
|
|
3589
|
+
});
|
|
3590
|
+
}
|
|
3438
3591
|
var isRunDirectly = process.argv[1] && (() => {
|
|
3439
3592
|
try {
|
|
3440
3593
|
const scriptPath = realpathSync2(process.argv[1]);
|