@iloom/cli 0.10.2 → 0.11.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 +4 -2
- package/dist/{BranchNamingService-4OP6LOH6.js → BranchNamingService-XBCO747L.js} +4 -4
- package/dist/ClaudeContextManager-SXDCWDJA.js +14 -0
- package/dist/ClaudeService-6E6MCGJE.js +13 -0
- package/dist/GitHubService-2R5GQG4K.js +12 -0
- package/dist/IssueTrackerFactory-XN6MQ4UN.js +14 -0
- package/dist/{LoomLauncher-FRECYMXS.js → LoomLauncher-5AZU2F5I.js} +15 -12
- package/dist/LoomLauncher-5AZU2F5I.js.map +1 -0
- package/dist/MetadataManager-CMQQTFLQ.js +10 -0
- package/dist/ProjectCapabilityDetector-IC6NAFGY.js +11 -0
- package/dist/{PromptTemplateManager-YOE2SIPG.js → PromptTemplateManager-T5VTLJP3.js} +3 -3
- package/dist/README.md +4 -2
- package/dist/{SettingsManager-FNKCOZMQ.js → SettingsManager-WQ5NSGAH.js} +3 -3
- package/dist/SettingsMigrationManager-S6J7OHUH.js +10 -0
- package/dist/agents/iloom-code-reviewer.md +50 -8
- package/dist/agents/iloom-issue-analyze-and-plan.md +10 -0
- package/dist/agents/iloom-issue-analyzer.md +13 -0
- package/dist/agents/iloom-issue-complexity-evaluator.md +8 -1
- package/dist/agents/iloom-issue-enhancer.md +8 -1
- package/dist/agents/iloom-issue-planner.md +5 -0
- package/dist/build-OLS6J5KZ.js +27 -0
- package/dist/{chunk-WWKOVDWC.js → chunk-3GTUXW26.js} +3 -3
- package/dist/{chunk-4FGEGQW4.js → chunk-3RXYOBME.js} +5 -5
- package/dist/{chunk-HEXKPKCK.js → chunk-5LTID2AF.js} +6 -6
- package/dist/{chunk-G5V75JD5.js → chunk-5PNZBH6V.js} +2 -2
- package/dist/{chunk-SKSYYBCU.js → chunk-5UFGO4ZT.js} +24 -3
- package/dist/{chunk-SKSYYBCU.js.map → chunk-5UFGO4ZT.js.map} +1 -1
- package/dist/{chunk-XE4BDRZD.js → chunk-6YVJVUR4.js} +3 -3
- package/dist/{chunk-RJ3VBUFK.js → chunk-7FIXNAUO.js} +36 -7
- package/dist/chunk-7FIXNAUO.js.map +1 -0
- package/dist/{chunk-QFTDZ5E3.js → chunk-7NFCGKZT.js} +3 -3
- package/dist/{chunk-433MOLAU.js → chunk-7OCGBJLR.js} +2 -2
- package/dist/{chunk-2VEWSM34.js → chunk-ABVMUNCD.js} +8 -8
- package/dist/{chunk-7JDMYTFZ.js → chunk-CV47VCMQ.js} +2 -2
- package/dist/{chunk-7VHJNVLF.js → chunk-ET6A2JR4.js} +8 -6
- package/dist/chunk-ET6A2JR4.js.map +1 -0
- package/dist/{chunk-MORRVYPT.js → chunk-G2MNSPA4.js} +2 -2
- package/dist/{chunk-RSYT7MVI.js → chunk-GMDSYLI6.js} +36 -3
- package/dist/chunk-GMDSYLI6.js.map +1 -0
- package/dist/{chunk-VT4PDUYT.js → chunk-H2SSF24U.js} +284 -209
- package/dist/chunk-H2SSF24U.js.map +1 -0
- package/dist/{chunk-LLHXQS3C.js → chunk-HLDY5S4C.js} +3 -3
- package/dist/{chunk-BYUMEDDD.js → chunk-IDCE26KD.js} +3 -3
- package/dist/{chunk-ZGM2FE2R.js → chunk-IR74O2F6.js} +221 -86
- package/dist/chunk-IR74O2F6.js.map +1 -0
- package/dist/{chunk-O7VL5N6S.js → chunk-K7R5QY6C.js} +2 -2
- package/dist/{chunk-BU53XIGY.js → chunk-KQFIGI37.js} +5 -5
- package/dist/{chunk-I5T677EA.js → chunk-LE2NOUTN.js} +3 -3
- package/dist/{chunk-KXDRI47U.js → chunk-LHDD4JHC.js} +6 -6
- package/dist/{chunk-2YZCWAVZ.js → chunk-LL6TOX3G.js} +9 -9
- package/dist/{chunk-YQ57ORTV.js → chunk-NCPZYQ4B.js} +2 -2
- package/dist/{chunk-EWJFUFPT.js → chunk-NDSGJZI2.js} +2 -2
- package/dist/{chunk-VG45TUYK.js → chunk-NH3QZYE5.js} +2 -2
- package/dist/{chunk-BFLMCE2U.js → chunk-NN5RYWXA.js} +7 -7
- package/dist/chunk-NOMQ5RFG.js +118 -0
- package/dist/chunk-NOMQ5RFG.js.map +1 -0
- package/dist/{chunk-KIK2ZFAL.js → chunk-QNHZM5ZV.js} +3 -3
- package/dist/{chunk-V3SVMFDQ.js → chunk-QR4FU53I.js} +8 -8
- package/dist/{chunk-FXDYIV3K.js → chunk-QVAA5KHK.js} +2 -2
- package/dist/{chunk-NGJZ4TOU.js → chunk-RBYTXYGD.js} +2 -2
- package/dist/{chunk-SWSJWA2S.js → chunk-RMLADZRY.js} +12 -9
- package/dist/chunk-RMLADZRY.js.map +1 -0
- package/dist/{chunk-CVCTIDDK.js → chunk-RVI6C2H5.js} +5 -5
- package/dist/{chunk-Q7POFB5Q.js → chunk-SQYHPBFP.js} +2 -2
- package/dist/{chunk-BFHDVFSK.js → chunk-TEJAGQX2.js} +64 -40
- package/dist/chunk-TEJAGQX2.js.map +1 -0
- package/dist/{chunk-QZWEJVWV.js → chunk-TZNNJLGT.js} +6 -6
- package/dist/{chunk-63QWFWH3.js → chunk-UDCI3QTS.js} +2 -2
- package/dist/{chunk-UKBAJ2QQ.js → chunk-UHIBKD73.js} +7 -7
- package/dist/{chunk-WXIM2WS7.js → chunk-V4STTBQD.js} +10 -10
- package/dist/{chunk-P4O6EH46.js → chunk-VMZG66UV.js} +5 -5
- package/dist/{chunk-C6HNNJIV.js → chunk-VNYWBHKR.js} +34 -4
- package/dist/chunk-VNYWBHKR.js.map +1 -0
- package/dist/{chunk-HYGUPUV5.js → chunk-VUUN3KE4.js} +10 -10
- package/dist/chunk-VUUN3KE4.js.map +1 -0
- package/dist/{chunk-UUEW5KWB.js → chunk-WG4MLJ6J.js} +15 -10
- package/dist/chunk-WG4MLJ6J.js.map +1 -0
- package/dist/{chunk-3F27M7ZD.js → chunk-XFQGI2E3.js} +66 -43
- package/dist/chunk-XFQGI2E3.js.map +1 -0
- package/dist/{chunk-LUKXJSRI.js → chunk-XXFSOVL3.js} +4 -4
- package/dist/{chunk-PZ5WSR5Z.js → chunk-Y3RX7LZT.js} +8 -5
- package/dist/chunk-Y3RX7LZT.js.map +1 -0
- package/dist/{chunk-KB64WNBZ.js → chunk-YRCEOQPX.js} +4 -2
- package/dist/chunk-YRCEOQPX.js.map +1 -0
- package/dist/{chunk-6MLEBAYZ.js → chunk-ZAXRQLK3.js} +2 -2
- package/dist/{claude-LN7OWVNI.js → claude-ONQTDWV3.js} +4 -4
- package/dist/{cleanup-4ZM2AJDC.js → cleanup-YOM6PQCN.js} +35 -34
- package/dist/{cleanup-4ZM2AJDC.js.map → cleanup-YOM6PQCN.js.map} +1 -1
- package/dist/cli.js +227 -152
- package/dist/cli.js.map +1 -1
- package/dist/{color-4TJ4P5EY.js → color-VQD52LOI.js} +3 -3
- package/dist/{commit-4CFLXRZ3.js → commit-DC2Q5CDY.js} +15 -15
- package/dist/{compile-7ALJHZ4N.js → compile-4NCQECKE.js} +11 -11
- package/dist/{contribute-5GKLK3BQ.js → contribute-M5UWXCAV.js} +12 -12
- package/dist/darwin-5BHWRJ7D.js +10 -0
- package/dist/{dev-server-7SMIB7OF.js → dev-server-CYRP6M73.js} +19 -19
- package/dist/{feedback-EZWF5CAL.js → feedback-BMAZGKRW.js} +16 -16
- package/dist/{git-GTLKAZRJ.js → git-BXUD6CL5.js} +6 -6
- package/dist/ignite-IO4LXVXJ.js +35 -0
- package/dist/index.d.ts +39 -65
- package/dist/index.js +634 -107
- package/dist/index.js.map +1 -1
- package/dist/{init-ZB2RITW6.js → init-CI43GJHV.js} +17 -17
- package/dist/{init-ZB2RITW6.js.map → init-CI43GJHV.js.map} +1 -1
- package/dist/{install-deps-RLSGSHH7.js → install-deps-SRTM5U7D.js} +11 -11
- package/dist/{installation-detector-MMFWLJYN.js → installation-detector-HF6QN7KP.js} +3 -3
- package/dist/{issues-4UUAQ5K6.js → issues-DMRQJH7E.js} +15 -15
- package/dist/lint-BSWRMGPZ.js +27 -0
- package/dist/linux-RYLOP2LY.js +103 -0
- package/dist/linux-RYLOP2LY.js.map +1 -0
- package/dist/mcp/chunk-PIIRD4LO.js +373 -0
- package/dist/mcp/chunk-PIIRD4LO.js.map +1 -0
- package/dist/mcp/darwin-3JFFE3W2.js +10 -0
- package/dist/mcp/issue-management-server.js +23 -127
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/mcp/linux-JBVS4R3A.js +103 -0
- package/dist/mcp/linux-JBVS4R3A.js.map +1 -0
- package/dist/mcp/tmux-RYBLEHUZ.js +156 -0
- package/dist/mcp/tmux-RYBLEHUZ.js.map +1 -0
- package/dist/mcp/wsl-4QZIQLLE.js +78 -0
- package/dist/mcp/wsl-4QZIQLLE.js.map +1 -0
- package/dist/neon-helpers-HWIYRKOW.js +11 -0
- package/dist/{open-FXWW3VI4.js → open-2Y7GSUTJ.js} +19 -19
- package/dist/{plan-D3KSN5MU.js → plan-SWFPLNJE.js} +47 -46
- package/dist/{plan-D3KSN5MU.js.map → plan-SWFPLNJE.js.map} +1 -1
- package/dist/{projects-2UOXFLNZ.js → projects-IUSUXD5D.js} +6 -6
- package/dist/{prompt-ONNPSNKM.js → prompt-7LZB4PAT.js} +3 -3
- package/dist/prompts/init-prompt.txt +56 -107
- package/dist/prompts/issue-prompt.txt +57 -11
- package/dist/prompts/pr-prompt.txt +154 -4
- package/dist/prompts/regular-prompt.txt +20 -3
- package/dist/prompts/swarm-orchestrator-prompt.txt +114 -8
- package/dist/{rebase-62FDLIH4.js → rebase-S6OHAOOF.js} +12 -12
- package/dist/{recap-OMBOKJST.js → recap-GGVCG5VH.js} +9 -9
- package/dist/{remote-IJAMOEAP.js → remote-MZTFHHTU.js} +3 -3
- package/dist/remote-MZTFHHTU.js.map +1 -0
- package/dist/{run-BBXLRIZB.js → run-ST3FR75O.js} +19 -19
- package/dist/schema/settings.schema.json +8 -49
- package/dist/{shell-RF7LTND5.js → shell-W4SBQPTE.js} +8 -8
- package/dist/{summary-YZI25KW4.js → summary-P2JCIIJO.js} +17 -17
- package/dist/test-6JH4FE2X.js +27 -0
- package/dist/{test-git-XM4TM65W.js → test-git-2KFFAQ6B.js} +6 -6
- package/dist/{test-jira-LDTOYFSD.js → test-jira-FKDKG6CD.js} +8 -8
- package/dist/{test-prefix-GBO37XCN.js → test-prefix-GP2DAX37.js} +11 -11
- package/dist/test-prefix-GP2DAX37.js.map +1 -0
- package/dist/{test-tabs-D3POYOJ5.js → test-tabs-YDWMWTVA.js} +3 -3
- package/dist/{test-webserver-NZ3JTVLL.js → test-webserver-QI3QQFZ3.js} +8 -8
- package/dist/tmux-7ZTA3BDI.js +156 -0
- package/dist/tmux-7ZTA3BDI.js.map +1 -0
- package/dist/{update-HJKDYA3F.js → update-XLW7R7FL.js} +4 -4
- package/dist/{update-notifier-LBAUOOLM.js → update-notifier-EYLAXZAA.js} +3 -3
- package/dist/update-notifier-EYLAXZAA.js.map +1 -0
- package/dist/{vscode-6XUGHJKL.js → vscode-TOGE5N67.js} +13 -13
- package/dist/{vscode-announcement-EQ2SKK3T.js → vscode-announcement-NIX7O2MG.js} +3 -3
- package/dist/wsl-Y4GUTOQ7.js +78 -0
- package/dist/wsl-Y4GUTOQ7.js.map +1 -0
- package/package.json +4 -2
- package/dist/ClaudeContextManager-ZKTUVQB2.js +0 -14
- package/dist/ClaudeService-TRWOYQ6O.js +0 -13
- package/dist/GitHubService-MEHKHUQP.js +0 -12
- package/dist/IssueTrackerFactory-NG53YX5S.js +0 -14
- package/dist/LoomLauncher-FRECYMXS.js.map +0 -1
- package/dist/MetadataManager-5QZSTKNN.js +0 -10
- package/dist/ProjectCapabilityDetector-5KSYUTBJ.js +0 -11
- package/dist/SettingsMigrationManager-LEBMJP3B.js +0 -10
- package/dist/build-VHGEMXBA.js +0 -27
- package/dist/chunk-3F27M7ZD.js.map +0 -1
- package/dist/chunk-7VHJNVLF.js.map +0 -1
- package/dist/chunk-BFHDVFSK.js.map +0 -1
- package/dist/chunk-C6HNNJIV.js.map +0 -1
- package/dist/chunk-HYGUPUV5.js.map +0 -1
- package/dist/chunk-KB64WNBZ.js.map +0 -1
- package/dist/chunk-PZ5WSR5Z.js.map +0 -1
- package/dist/chunk-RJ3VBUFK.js.map +0 -1
- package/dist/chunk-RSYT7MVI.js.map +0 -1
- package/dist/chunk-SWSJWA2S.js.map +0 -1
- package/dist/chunk-UUEW5KWB.js.map +0 -1
- package/dist/chunk-VT4PDUYT.js.map +0 -1
- package/dist/chunk-ZGM2FE2R.js.map +0 -1
- package/dist/ignite-MQETGFNA.js +0 -34
- package/dist/lint-AAN2NZWG.js +0 -27
- package/dist/neon-helpers-CQN2PB4S.js +0 -11
- package/dist/test-SGO6I5Z7.js +0 -27
- package/dist/test-prefix-GBO37XCN.js.map +0 -1
- /package/dist/{BranchNamingService-4OP6LOH6.js.map → BranchNamingService-XBCO747L.js.map} +0 -0
- /package/dist/{ClaudeContextManager-ZKTUVQB2.js.map → ClaudeContextManager-SXDCWDJA.js.map} +0 -0
- /package/dist/{ClaudeService-TRWOYQ6O.js.map → ClaudeService-6E6MCGJE.js.map} +0 -0
- /package/dist/{GitHubService-MEHKHUQP.js.map → GitHubService-2R5GQG4K.js.map} +0 -0
- /package/dist/{IssueTrackerFactory-NG53YX5S.js.map → IssueTrackerFactory-XN6MQ4UN.js.map} +0 -0
- /package/dist/{MetadataManager-5QZSTKNN.js.map → MetadataManager-CMQQTFLQ.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-5KSYUTBJ.js.map → ProjectCapabilityDetector-IC6NAFGY.js.map} +0 -0
- /package/dist/{PromptTemplateManager-YOE2SIPG.js.map → PromptTemplateManager-T5VTLJP3.js.map} +0 -0
- /package/dist/{SettingsManager-FNKCOZMQ.js.map → SettingsManager-WQ5NSGAH.js.map} +0 -0
- /package/dist/{SettingsMigrationManager-LEBMJP3B.js.map → SettingsMigrationManager-S6J7OHUH.js.map} +0 -0
- /package/dist/{build-VHGEMXBA.js.map → build-OLS6J5KZ.js.map} +0 -0
- /package/dist/{chunk-WWKOVDWC.js.map → chunk-3GTUXW26.js.map} +0 -0
- /package/dist/{chunk-4FGEGQW4.js.map → chunk-3RXYOBME.js.map} +0 -0
- /package/dist/{chunk-HEXKPKCK.js.map → chunk-5LTID2AF.js.map} +0 -0
- /package/dist/{chunk-G5V75JD5.js.map → chunk-5PNZBH6V.js.map} +0 -0
- /package/dist/{chunk-XE4BDRZD.js.map → chunk-6YVJVUR4.js.map} +0 -0
- /package/dist/{chunk-QFTDZ5E3.js.map → chunk-7NFCGKZT.js.map} +0 -0
- /package/dist/{chunk-433MOLAU.js.map → chunk-7OCGBJLR.js.map} +0 -0
- /package/dist/{chunk-2VEWSM34.js.map → chunk-ABVMUNCD.js.map} +0 -0
- /package/dist/{chunk-7JDMYTFZ.js.map → chunk-CV47VCMQ.js.map} +0 -0
- /package/dist/{chunk-MORRVYPT.js.map → chunk-G2MNSPA4.js.map} +0 -0
- /package/dist/{chunk-LLHXQS3C.js.map → chunk-HLDY5S4C.js.map} +0 -0
- /package/dist/{chunk-BYUMEDDD.js.map → chunk-IDCE26KD.js.map} +0 -0
- /package/dist/{chunk-O7VL5N6S.js.map → chunk-K7R5QY6C.js.map} +0 -0
- /package/dist/{chunk-BU53XIGY.js.map → chunk-KQFIGI37.js.map} +0 -0
- /package/dist/{chunk-I5T677EA.js.map → chunk-LE2NOUTN.js.map} +0 -0
- /package/dist/{chunk-KXDRI47U.js.map → chunk-LHDD4JHC.js.map} +0 -0
- /package/dist/{chunk-2YZCWAVZ.js.map → chunk-LL6TOX3G.js.map} +0 -0
- /package/dist/{chunk-YQ57ORTV.js.map → chunk-NCPZYQ4B.js.map} +0 -0
- /package/dist/{chunk-EWJFUFPT.js.map → chunk-NDSGJZI2.js.map} +0 -0
- /package/dist/{chunk-VG45TUYK.js.map → chunk-NH3QZYE5.js.map} +0 -0
- /package/dist/{chunk-BFLMCE2U.js.map → chunk-NN5RYWXA.js.map} +0 -0
- /package/dist/{chunk-KIK2ZFAL.js.map → chunk-QNHZM5ZV.js.map} +0 -0
- /package/dist/{chunk-V3SVMFDQ.js.map → chunk-QR4FU53I.js.map} +0 -0
- /package/dist/{chunk-FXDYIV3K.js.map → chunk-QVAA5KHK.js.map} +0 -0
- /package/dist/{chunk-NGJZ4TOU.js.map → chunk-RBYTXYGD.js.map} +0 -0
- /package/dist/{chunk-CVCTIDDK.js.map → chunk-RVI6C2H5.js.map} +0 -0
- /package/dist/{chunk-Q7POFB5Q.js.map → chunk-SQYHPBFP.js.map} +0 -0
- /package/dist/{chunk-QZWEJVWV.js.map → chunk-TZNNJLGT.js.map} +0 -0
- /package/dist/{chunk-63QWFWH3.js.map → chunk-UDCI3QTS.js.map} +0 -0
- /package/dist/{chunk-UKBAJ2QQ.js.map → chunk-UHIBKD73.js.map} +0 -0
- /package/dist/{chunk-WXIM2WS7.js.map → chunk-V4STTBQD.js.map} +0 -0
- /package/dist/{chunk-P4O6EH46.js.map → chunk-VMZG66UV.js.map} +0 -0
- /package/dist/{chunk-LUKXJSRI.js.map → chunk-XXFSOVL3.js.map} +0 -0
- /package/dist/{chunk-6MLEBAYZ.js.map → chunk-ZAXRQLK3.js.map} +0 -0
- /package/dist/{claude-LN7OWVNI.js.map → claude-ONQTDWV3.js.map} +0 -0
- /package/dist/{color-4TJ4P5EY.js.map → color-VQD52LOI.js.map} +0 -0
- /package/dist/{commit-4CFLXRZ3.js.map → commit-DC2Q5CDY.js.map} +0 -0
- /package/dist/{compile-7ALJHZ4N.js.map → compile-4NCQECKE.js.map} +0 -0
- /package/dist/{contribute-5GKLK3BQ.js.map → contribute-M5UWXCAV.js.map} +0 -0
- /package/dist/{git-GTLKAZRJ.js.map → darwin-5BHWRJ7D.js.map} +0 -0
- /package/dist/{dev-server-7SMIB7OF.js.map → dev-server-CYRP6M73.js.map} +0 -0
- /package/dist/{feedback-EZWF5CAL.js.map → feedback-BMAZGKRW.js.map} +0 -0
- /package/dist/{ignite-MQETGFNA.js.map → git-BXUD6CL5.js.map} +0 -0
- /package/dist/{installation-detector-MMFWLJYN.js.map → ignite-IO4LXVXJ.js.map} +0 -0
- /package/dist/{install-deps-RLSGSHH7.js.map → install-deps-SRTM5U7D.js.map} +0 -0
- /package/dist/{neon-helpers-CQN2PB4S.js.map → installation-detector-HF6QN7KP.js.map} +0 -0
- /package/dist/{issues-4UUAQ5K6.js.map → issues-DMRQJH7E.js.map} +0 -0
- /package/dist/{lint-AAN2NZWG.js.map → lint-BSWRMGPZ.js.map} +0 -0
- /package/dist/{prompt-ONNPSNKM.js.map → mcp/darwin-3JFFE3W2.js.map} +0 -0
- /package/dist/{remote-IJAMOEAP.js.map → neon-helpers-HWIYRKOW.js.map} +0 -0
- /package/dist/{open-FXWW3VI4.js.map → open-2Y7GSUTJ.js.map} +0 -0
- /package/dist/{projects-2UOXFLNZ.js.map → projects-IUSUXD5D.js.map} +0 -0
- /package/dist/{update-notifier-LBAUOOLM.js.map → prompt-7LZB4PAT.js.map} +0 -0
- /package/dist/{rebase-62FDLIH4.js.map → rebase-S6OHAOOF.js.map} +0 -0
- /package/dist/{recap-OMBOKJST.js.map → recap-GGVCG5VH.js.map} +0 -0
- /package/dist/{run-BBXLRIZB.js.map → run-ST3FR75O.js.map} +0 -0
- /package/dist/{shell-RF7LTND5.js.map → shell-W4SBQPTE.js.map} +0 -0
- /package/dist/{summary-YZI25KW4.js.map → summary-P2JCIIJO.js.map} +0 -0
- /package/dist/{test-SGO6I5Z7.js.map → test-6JH4FE2X.js.map} +0 -0
- /package/dist/{test-git-XM4TM65W.js.map → test-git-2KFFAQ6B.js.map} +0 -0
- /package/dist/{test-jira-LDTOYFSD.js.map → test-jira-FKDKG6CD.js.map} +0 -0
- /package/dist/{test-tabs-D3POYOJ5.js.map → test-tabs-YDWMWTVA.js.map} +0 -0
- /package/dist/{test-webserver-NZ3JTVLL.js.map → test-webserver-QI3QQFZ3.js.map} +0 -0
- /package/dist/{update-HJKDYA3F.js.map → update-XLW7R7FL.js.map} +0 -0
- /package/dist/{vscode-6XUGHJKL.js.map → vscode-TOGE5N67.js.map} +0 -0
- /package/dist/{vscode-announcement-EQ2SKK3T.js.map → vscode-announcement-NIX7O2MG.js.map} +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
buildCommandSequence,
|
|
4
|
+
logger
|
|
5
|
+
} from "./chunk-PIIRD4LO.js";
|
|
6
|
+
|
|
7
|
+
// src/utils/terminal-backends/linux.ts
|
|
8
|
+
import { execa } from "execa";
|
|
9
|
+
var TERMINAL_EMULATORS = ["gnome-terminal", "konsole", "xterm"];
|
|
10
|
+
async function detectLinuxTerminal() {
|
|
11
|
+
for (const terminal of TERMINAL_EMULATORS) {
|
|
12
|
+
try {
|
|
13
|
+
await execa("which", [terminal]);
|
|
14
|
+
return terminal;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
if (error instanceof Error && "exitCode" in error) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
var LinuxBackend = class {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.name = "linux";
|
|
27
|
+
}
|
|
28
|
+
async openSingle(options) {
|
|
29
|
+
const terminal = await this.resolveTerminal();
|
|
30
|
+
await this.openSingleWithTerminal(options, terminal);
|
|
31
|
+
}
|
|
32
|
+
async openMultiple(optionsArray) {
|
|
33
|
+
const terminal = await this.resolveTerminal();
|
|
34
|
+
for (let i = 0; i < optionsArray.length; i++) {
|
|
35
|
+
const options = optionsArray[i];
|
|
36
|
+
if (!options) {
|
|
37
|
+
throw new Error(`Terminal option at index ${i} is undefined`);
|
|
38
|
+
}
|
|
39
|
+
await this.openSingleWithTerminal(options, terminal);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async resolveTerminal() {
|
|
43
|
+
const terminal = await detectLinuxTerminal();
|
|
44
|
+
if (!terminal) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
"No supported GUI terminal emulator found. Install gnome-terminal, konsole, or xterm \u2014 or use tmux for headless environments."
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
return terminal;
|
|
50
|
+
}
|
|
51
|
+
async openSingleWithTerminal(options, terminal) {
|
|
52
|
+
if (options.backgroundColor) {
|
|
53
|
+
logger.debug(
|
|
54
|
+
"Terminal background colors are not supported via CLI on Linux terminal emulators."
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
const shellCommand = (await buildCommandSequence(options)).trim();
|
|
58
|
+
const keepAliveCommand = shellCommand ? `${shellCommand}; exec bash` : "exec bash";
|
|
59
|
+
await this.execTerminal(terminal, keepAliveCommand, options.title);
|
|
60
|
+
}
|
|
61
|
+
async execTerminal(terminal, command, title) {
|
|
62
|
+
try {
|
|
63
|
+
switch (terminal) {
|
|
64
|
+
case "gnome-terminal": {
|
|
65
|
+
const args = ["--tab"];
|
|
66
|
+
if (title) {
|
|
67
|
+
args.push("--title", title);
|
|
68
|
+
}
|
|
69
|
+
args.push("--", "bash", "-lic", command);
|
|
70
|
+
await execa("gnome-terminal", args);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "konsole": {
|
|
74
|
+
const args = ["--new-tab"];
|
|
75
|
+
if (title) {
|
|
76
|
+
args.push("-p", `tabtitle=${title}`);
|
|
77
|
+
}
|
|
78
|
+
args.push("-e", "bash", "-lic", command);
|
|
79
|
+
await execa("konsole", args);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "xterm": {
|
|
83
|
+
const args = [];
|
|
84
|
+
if (title) {
|
|
85
|
+
args.push("-title", title);
|
|
86
|
+
}
|
|
87
|
+
args.push("-e", "bash", "-lic", command);
|
|
88
|
+
await execa("xterm", args);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} catch (error) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`Failed to open ${terminal}: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
export {
|
|
100
|
+
LinuxBackend,
|
|
101
|
+
detectLinuxTerminal
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=linux-JBVS4R3A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/terminal-backends/linux.ts"],"sourcesContent":["import { execa } from 'execa'\nimport type { TerminalWindowOptions } from '../terminal.js'\nimport type { TerminalBackend } from './types.js'\nimport { buildCommandSequence } from './command-builder.js'\nimport { logger } from '../logger.js'\n\n/**\n * Supported Linux GUI terminal emulators in preference order.\n */\nconst TERMINAL_EMULATORS = ['gnome-terminal', 'konsole', 'xterm'] as const\ntype LinuxTerminal = (typeof TERMINAL_EMULATORS)[number]\n\n/**\n * Detect which GUI terminal emulator is available on the system.\n * Checks in preference order: gnome-terminal, konsole, xterm.\n * Returns null if none are found (headless environment).\n */\nexport async function detectLinuxTerminal(): Promise<LinuxTerminal | null> {\n\tfor (const terminal of TERMINAL_EMULATORS) {\n\t\ttry {\n\t\t\tawait execa('which', [terminal])\n\t\t\treturn terminal\n\t\t} catch (error) {\n\t\t\t// `which` exits with code 1 when the command is not found\n\t\t\tif (error instanceof Error && 'exitCode' in error) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\t}\n\treturn null\n}\n\n/**\n * Native Linux GUI terminal backend.\n * Supports gnome-terminal (with tabs), konsole, and xterm (fallback).\n *\n * Background colors are not controllable via CLI on most Linux terminal\n * emulators — a debug message is logged and the color is skipped.\n */\nexport class LinuxBackend implements TerminalBackend {\n\treadonly name = 'linux'\n\n\tasync openSingle(options: TerminalWindowOptions): Promise<void> {\n\t\tconst terminal = await this.resolveTerminal()\n\t\tawait this.openSingleWithTerminal(options, terminal)\n\t}\n\n\tasync openMultiple(optionsArray: TerminalWindowOptions[]): Promise<void> {\n\t\tconst terminal = await this.resolveTerminal()\n\n\t\t// gnome-terminal --tab adds a tab to the most recently focused window.\n\t\t// Opening sequentially achieves multi-tab behavior reliably without the\n\t\t// `--` option parsing issue that breaks multi-tab in a single invocation\n\t\t// (gnome-terminal's `--` terminates ALL option parsing, so subsequent\n\t\t// --tab flags would be passed to bash as arguments).\n\t\tfor (let i = 0; i < optionsArray.length; i++) {\n\t\t\tconst options = optionsArray[i]\n\t\t\tif (!options) {\n\t\t\t\tthrow new Error(`Terminal option at index ${i} is undefined`)\n\t\t\t}\n\t\t\tawait this.openSingleWithTerminal(options, terminal)\n\t\t}\n\t}\n\n\tprivate async resolveTerminal(): Promise<LinuxTerminal> {\n\t\tconst terminal = await detectLinuxTerminal()\n\t\tif (!terminal) {\n\t\t\tthrow new Error(\n\t\t\t\t'No supported GUI terminal emulator found. ' +\n\t\t\t\t'Install gnome-terminal, konsole, or xterm — or use tmux for headless environments.'\n\t\t\t)\n\t\t}\n\t\treturn terminal\n\t}\n\n\tprivate async openSingleWithTerminal(\n\t\toptions: TerminalWindowOptions,\n\t\tterminal: LinuxTerminal\n\t): Promise<void> {\n\t\tif (options.backgroundColor) {\n\t\t\tlogger.debug(\n\t\t\t\t'Terminal background colors are not supported via CLI on Linux terminal emulators.'\n\t\t\t)\n\t\t}\n\n\t\tconst shellCommand = (await buildCommandSequence(options)).trim()\n\t\tconst keepAliveCommand = shellCommand ? `${shellCommand}; exec bash` : 'exec bash'\n\n\t\tawait this.execTerminal(terminal, keepAliveCommand, options.title)\n\t}\n\n\tprivate async execTerminal(\n\t\tterminal: LinuxTerminal,\n\t\tcommand: string,\n\t\ttitle?: string\n\t): Promise<void> {\n\t\ttry {\n\t\t\tswitch (terminal) {\n\t\t\t\tcase 'gnome-terminal': {\n\t\t\t\t\tconst args = ['--tab']\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\targs.push('--title', title)\n\t\t\t\t\t}\n\t\t\t\t\targs.push('--', 'bash', '-lic', command)\n\t\t\t\t\tawait execa('gnome-terminal', args)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'konsole': {\n\t\t\t\t\tconst args = ['--new-tab']\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\targs.push('-p', `tabtitle=${title}`)\n\t\t\t\t\t}\n\t\t\t\t\targs.push('-e', 'bash', '-lic', command)\n\t\t\t\t\tawait execa('konsole', args)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'xterm': {\n\t\t\t\t\tconst args: string[] = []\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\targs.push('-title', title)\n\t\t\t\t\t}\n\t\t\t\t\targs.push('-e', 'bash', '-lic', command)\n\t\t\t\t\tawait execa('xterm', args)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to open ${terminal}: ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t\t)\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;AAAA,SAAS,aAAa;AAStB,IAAM,qBAAqB,CAAC,kBAAkB,WAAW,OAAO;AAQhE,eAAsB,sBAAqD;AAC1E,aAAW,YAAY,oBAAoB;AAC1C,QAAI;AACH,YAAM,MAAM,SAAS,CAAC,QAAQ,CAAC;AAC/B,aAAO;AAAA,IACR,SAAS,OAAO;AAEf,UAAI,iBAAiB,SAAS,cAAc,OAAO;AAClD;AAAA,MACD;AACA,YAAM;AAAA,IACP;AAAA,EACD;AACA,SAAO;AACR;AASO,IAAM,eAAN,MAA8C;AAAA,EAA9C;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,MAAM,WAAW,SAA+C;AAC/D,UAAM,WAAW,MAAM,KAAK,gBAAgB;AAC5C,UAAM,KAAK,uBAAuB,SAAS,QAAQ;AAAA,EACpD;AAAA,EAEA,MAAM,aAAa,cAAsD;AACxE,UAAM,WAAW,MAAM,KAAK,gBAAgB;AAO5C,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC7C,YAAM,UAAU,aAAa,CAAC;AAC9B,UAAI,CAAC,SAAS;AACb,cAAM,IAAI,MAAM,4BAA4B,CAAC,eAAe;AAAA,MAC7D;AACA,YAAM,KAAK,uBAAuB,SAAS,QAAQ;AAAA,IACpD;AAAA,EACD;AAAA,EAEA,MAAc,kBAA0C;AACvD,UAAM,WAAW,MAAM,oBAAoB;AAC3C,QAAI,CAAC,UAAU;AACd,YAAM,IAAI;AAAA,QACT;AAAA,MAED;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAc,uBACb,SACA,UACgB;AAChB,QAAI,QAAQ,iBAAiB;AAC5B,aAAO;AAAA,QACN;AAAA,MACD;AAAA,IACD;AAEA,UAAM,gBAAgB,MAAM,qBAAqB,OAAO,GAAG,KAAK;AAChE,UAAM,mBAAmB,eAAe,GAAG,YAAY,gBAAgB;AAEvE,UAAM,KAAK,aAAa,UAAU,kBAAkB,QAAQ,KAAK;AAAA,EAClE;AAAA,EAEA,MAAc,aACb,UACA,SACA,OACgB;AAChB,QAAI;AACH,cAAQ,UAAU;AAAA,QACjB,KAAK,kBAAkB;AACtB,gBAAM,OAAO,CAAC,OAAO;AACrB,cAAI,OAAO;AACV,iBAAK,KAAK,WAAW,KAAK;AAAA,UAC3B;AACA,eAAK,KAAK,MAAM,QAAQ,QAAQ,OAAO;AACvC,gBAAM,MAAM,kBAAkB,IAAI;AAClC;AAAA,QACD;AAAA,QACA,KAAK,WAAW;AACf,gBAAM,OAAO,CAAC,WAAW;AACzB,cAAI,OAAO;AACV,iBAAK,KAAK,MAAM,YAAY,KAAK,EAAE;AAAA,UACpC;AACA,eAAK,KAAK,MAAM,QAAQ,QAAQ,OAAO;AACvC,gBAAM,MAAM,WAAW,IAAI;AAC3B;AAAA,QACD;AAAA,QACA,KAAK,SAAS;AACb,gBAAM,OAAiB,CAAC;AACxB,cAAI,OAAO;AACV,iBAAK,KAAK,UAAU,KAAK;AAAA,UAC1B;AACA,eAAK,KAAK,MAAM,QAAQ,QAAQ,OAAO;AACvC,gBAAM,MAAM,SAAS,IAAI;AACzB;AAAA,QACD;AAAA,MACD;AAAA,IACD,SAAS,OAAO;AACf,YAAM,IAAI;AAAA,QACT,kBAAkB,QAAQ,KAAK,iBAAiB,QAAQ,MAAM,UAAU,eAAe;AAAA,MACxF;AAAA,IACD;AAAA,EACD;AACD;","names":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
buildCommandSequence,
|
|
4
|
+
logger
|
|
5
|
+
} from "./chunk-PIIRD4LO.js";
|
|
6
|
+
|
|
7
|
+
// src/utils/terminal-backends/tmux.ts
|
|
8
|
+
import { execa } from "execa";
|
|
9
|
+
async function isTmuxAvailable() {
|
|
10
|
+
try {
|
|
11
|
+
await execa("which", ["tmux"]);
|
|
12
|
+
return true;
|
|
13
|
+
} catch (error) {
|
|
14
|
+
if (error instanceof Error && "exitCode" in error) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function sanitizeSessionName(title) {
|
|
21
|
+
return title.replace(/[.:]/g, "-").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").substring(0, 64);
|
|
22
|
+
}
|
|
23
|
+
function sanitizeWindowName(title) {
|
|
24
|
+
return title.replace(/[.:]/g, "-").substring(0, 32);
|
|
25
|
+
}
|
|
26
|
+
async function sessionExists(sessionName) {
|
|
27
|
+
try {
|
|
28
|
+
await execa("tmux", ["has-session", "-t", sessionName]);
|
|
29
|
+
return true;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
if (error instanceof Error && "exitCode" in error) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
var TmuxBackend = class {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.name = "tmux";
|
|
40
|
+
}
|
|
41
|
+
async openSingle(options) {
|
|
42
|
+
const shellCommand = (await buildCommandSequence(options)).trim();
|
|
43
|
+
const command = shellCommand ? `${shellCommand}; exec bash` : "bash";
|
|
44
|
+
if (options.backgroundColor) {
|
|
45
|
+
logger.debug("Terminal background colors are not supported in tmux sessions.");
|
|
46
|
+
}
|
|
47
|
+
const sessionName = options.title ? sanitizeSessionName(`iloom-${options.title}`) : `iloom-${Date.now()}`;
|
|
48
|
+
const windowName = options.title ? sanitizeWindowName(options.title) : "main";
|
|
49
|
+
const iloomSession = await this.findIloomSession();
|
|
50
|
+
if (iloomSession) {
|
|
51
|
+
const args = ["new-window", "-t", iloomSession, "-n", windowName, "bash", "-lic", command];
|
|
52
|
+
try {
|
|
53
|
+
await execa("tmux", args);
|
|
54
|
+
logger.info(`Added tmux window "${windowName}" to session "${iloomSession}"`);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
throw new Error(
|
|
57
|
+
`Failed to add tmux window: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
const args = ["new-session", "-d", "-s", sessionName, "-n", windowName, "bash", "-lic", command];
|
|
62
|
+
try {
|
|
63
|
+
await execa("tmux", args);
|
|
64
|
+
logger.info(`Created tmux session "${sessionName}" \u2014 attach with: tmux attach -t ${sessionName}`);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
`Failed to create tmux session: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async openMultiple(optionsArray) {
|
|
73
|
+
if (optionsArray.length === 0) return;
|
|
74
|
+
const firstOptions = optionsArray[0];
|
|
75
|
+
if (!firstOptions) {
|
|
76
|
+
throw new Error("First terminal option is undefined");
|
|
77
|
+
}
|
|
78
|
+
const sessionName = firstOptions.title ? sanitizeSessionName(`iloom-${firstOptions.title}`) : `iloom-${Date.now()}`;
|
|
79
|
+
const finalSessionName = await sessionExists(sessionName) ? `${sessionName}-${Date.now()}` : sessionName;
|
|
80
|
+
if (firstOptions.backgroundColor) {
|
|
81
|
+
logger.debug("Terminal background colors are not supported in tmux sessions.");
|
|
82
|
+
}
|
|
83
|
+
const firstShellCommand = (await buildCommandSequence(firstOptions)).trim();
|
|
84
|
+
const firstCommand = firstShellCommand ? `${firstShellCommand}; exec bash` : "bash";
|
|
85
|
+
const firstName = firstOptions.title ? sanitizeWindowName(firstOptions.title) : "window-1";
|
|
86
|
+
try {
|
|
87
|
+
await execa("tmux", [
|
|
88
|
+
"new-session",
|
|
89
|
+
"-d",
|
|
90
|
+
"-s",
|
|
91
|
+
finalSessionName,
|
|
92
|
+
"-n",
|
|
93
|
+
firstName,
|
|
94
|
+
"bash",
|
|
95
|
+
"-lic",
|
|
96
|
+
firstCommand
|
|
97
|
+
]);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Failed to create tmux session: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
for (let i = 1; i < optionsArray.length; i++) {
|
|
104
|
+
const options = optionsArray[i];
|
|
105
|
+
if (!options) {
|
|
106
|
+
throw new Error(`Terminal option at index ${i} is undefined`);
|
|
107
|
+
}
|
|
108
|
+
if (options.backgroundColor) {
|
|
109
|
+
logger.debug("Terminal background colors are not supported in tmux sessions.");
|
|
110
|
+
}
|
|
111
|
+
const shellCommand = (await buildCommandSequence(options)).trim();
|
|
112
|
+
const command = shellCommand ? `${shellCommand}; exec bash` : "bash";
|
|
113
|
+
const windowName = options.title ? sanitizeWindowName(options.title) : `window-${i + 1}`;
|
|
114
|
+
try {
|
|
115
|
+
await execa("tmux", [
|
|
116
|
+
"new-window",
|
|
117
|
+
"-t",
|
|
118
|
+
finalSessionName,
|
|
119
|
+
"-n",
|
|
120
|
+
windowName,
|
|
121
|
+
"bash",
|
|
122
|
+
"-lic",
|
|
123
|
+
command
|
|
124
|
+
]);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
throw new Error(
|
|
127
|
+
`Failed to add tmux window "${windowName}": ${error instanceof Error ? error.message : "Unknown error"}`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
logger.info(
|
|
132
|
+
`Created tmux session "${finalSessionName}" with ${optionsArray.length} windows \u2014 attach with: tmux attach -t ${finalSessionName}`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Look for an existing iloom tmux session to add windows to.
|
|
137
|
+
* Returns the session name if found, null otherwise.
|
|
138
|
+
*/
|
|
139
|
+
async findIloomSession() {
|
|
140
|
+
try {
|
|
141
|
+
const result = await execa("tmux", ["list-sessions", "-F", "#{session_name}"]);
|
|
142
|
+
const sessions = result.stdout.split("\n").filter(Boolean);
|
|
143
|
+
return sessions.find((s) => s.startsWith("iloom-")) ?? null;
|
|
144
|
+
} catch (error) {
|
|
145
|
+
if (error instanceof Error && "exitCode" in error) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
export {
|
|
153
|
+
TmuxBackend,
|
|
154
|
+
isTmuxAvailable
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=tmux-RYBLEHUZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/terminal-backends/tmux.ts"],"sourcesContent":["import { execa } from 'execa'\nimport type { TerminalWindowOptions } from '../terminal.js'\nimport type { TerminalBackend } from './types.js'\nimport { buildCommandSequence } from './command-builder.js'\nimport { logger } from '../logger.js'\n\n/**\n * Check if tmux is available on the system.\n */\nexport async function isTmuxAvailable(): Promise<boolean> {\n\ttry {\n\t\tawait execa('which', ['tmux'])\n\t\treturn true\n\t} catch (error) {\n\t\t// `which` exits with code 1 when the command is not found\n\t\tif (error instanceof Error && 'exitCode' in error) {\n\t\t\treturn false\n\t\t}\n\t\tthrow error\n\t}\n}\n\n/**\n * Generate a tmux session name from an iloom window title.\n * Strips characters tmux doesn't allow in session names (dots and colons).\n */\nfunction sanitizeSessionName(title: string): string {\n\treturn title\n\t\t.replace(/[.:]/g, '-')\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/-+/g, '-')\n\t\t.replace(/^-|-$/g, '')\n\t\t.substring(0, 64)\n}\n\n/**\n * Generate a tmux window name from an iloom terminal title.\n */\nfunction sanitizeWindowName(title: string): string {\n\treturn title\n\t\t.replace(/[.:]/g, '-')\n\t\t.substring(0, 32)\n}\n\n/**\n * Check if a tmux session already exists.\n */\nasync function sessionExists(sessionName: string): Promise<boolean> {\n\ttry {\n\t\tawait execa('tmux', ['has-session', '-t', sessionName])\n\t\treturn true\n\t} catch (error) {\n\t\t// `tmux has-session` exits with code 1 when the session doesn't exist\n\t\tif (error instanceof Error && 'exitCode' in error) {\n\t\t\treturn false\n\t\t}\n\t\tthrow error\n\t}\n}\n\n/**\n * tmux backend for headless Linux environments.\n *\n * Used when no GUI terminal emulator is available (SSH sessions, Docker\n * containers, Code Server, CI environments). Creates detached tmux sessions\n * with named windows for each terminal.\n *\n * Background colors are not supported in tmux via this backend.\n */\nexport class TmuxBackend implements TerminalBackend {\n\treadonly name = 'tmux'\n\n\tasync openSingle(options: TerminalWindowOptions): Promise<void> {\n\t\tconst shellCommand = (await buildCommandSequence(options)).trim()\n\t\t// Keep the shell alive after the command exits so users can see output\n\t\t// and interact. Mirrors the `; exec bash` pattern in the Linux GUI backend.\n\t\tconst command = shellCommand ? `${shellCommand}; exec bash` : 'bash'\n\n\t\tif (options.backgroundColor) {\n\t\t\tlogger.debug('Terminal background colors are not supported in tmux sessions.')\n\t\t}\n\n\t\tconst sessionName = options.title\n\t\t\t? sanitizeSessionName(`iloom-${options.title}`)\n\t\t\t: `iloom-${Date.now()}`\n\n\t\tconst windowName = options.title\n\t\t\t? sanitizeWindowName(options.title)\n\t\t\t: 'main'\n\n\t\t// Check for an existing iloom session to add a window to\n\t\tconst iloomSession = await this.findIloomSession()\n\n\t\tif (iloomSession) {\n\t\t\t// Add a new window to the existing iloom session\n\t\t\tconst args = ['new-window', '-t', iloomSession, '-n', windowName, 'bash', '-lic', command]\n\t\t\ttry {\n\t\t\t\tawait execa('tmux', args)\n\t\t\t\tlogger.info(`Added tmux window \"${windowName}\" to session \"${iloomSession}\"`)\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to add tmux window: ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\t// Create a new detached session\n\t\t\tconst args = ['new-session', '-d', '-s', sessionName, '-n', windowName, 'bash', '-lic', command]\n\t\t\ttry {\n\t\t\t\tawait execa('tmux', args)\n\t\t\t\tlogger.info(`Created tmux session \"${sessionName}\" — attach with: tmux attach -t ${sessionName}`)\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to create tmux session: ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tasync openMultiple(optionsArray: TerminalWindowOptions[]): Promise<void> {\n\t\tif (optionsArray.length === 0) return\n\n\t\tconst firstOptions = optionsArray[0]\n\t\tif (!firstOptions) {\n\t\t\tthrow new Error('First terminal option is undefined')\n\t\t}\n\n\t\t// Derive session name from the first window's title or generate one\n\t\tconst sessionName = firstOptions.title\n\t\t\t? sanitizeSessionName(`iloom-${firstOptions.title}`)\n\t\t\t: `iloom-${Date.now()}`\n\n\t\t// Avoid collision with existing session\n\t\tconst finalSessionName = await sessionExists(sessionName)\n\t\t\t? `${sessionName}-${Date.now()}`\n\t\t\t: sessionName\n\n\t\tif (firstOptions.backgroundColor) {\n\t\t\tlogger.debug('Terminal background colors are not supported in tmux sessions.')\n\t\t}\n\n\t\t// Create the session with the first window\n\t\tconst firstShellCommand = (await buildCommandSequence(firstOptions)).trim()\n\t\tconst firstCommand = firstShellCommand ? `${firstShellCommand}; exec bash` : 'bash'\n\t\tconst firstName = firstOptions.title\n\t\t\t? sanitizeWindowName(firstOptions.title)\n\t\t\t: 'window-1'\n\n\t\ttry {\n\t\t\tawait execa('tmux', [\n\t\t\t\t'new-session', '-d', '-s', finalSessionName, '-n', firstName,\n\t\t\t\t'bash', '-lic', firstCommand,\n\t\t\t])\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to create tmux session: ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t\t)\n\t\t}\n\n\t\t// Add remaining windows\n\t\tfor (let i = 1; i < optionsArray.length; i++) {\n\t\t\tconst options = optionsArray[i]\n\t\t\tif (!options) {\n\t\t\t\tthrow new Error(`Terminal option at index ${i} is undefined`)\n\t\t\t}\n\n\t\t\tif (options.backgroundColor) {\n\t\t\t\tlogger.debug('Terminal background colors are not supported in tmux sessions.')\n\t\t\t}\n\n\t\t\tconst shellCommand = (await buildCommandSequence(options)).trim()\n\t\t\tconst command = shellCommand ? `${shellCommand}; exec bash` : 'bash'\n\t\t\tconst windowName = options.title\n\t\t\t\t? sanitizeWindowName(options.title)\n\t\t\t\t: `window-${i + 1}`\n\n\t\t\ttry {\n\t\t\t\tawait execa('tmux', [\n\t\t\t\t\t'new-window', '-t', finalSessionName, '-n', windowName,\n\t\t\t\t\t'bash', '-lic', command,\n\t\t\t\t])\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to add tmux window \"${windowName}\": ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tlogger.info(\n\t\t\t`Created tmux session \"${finalSessionName}\" with ${optionsArray.length} windows — ` +\n\t\t\t`attach with: tmux attach -t ${finalSessionName}`\n\t\t)\n\t}\n\n\t/**\n\t * Look for an existing iloom tmux session to add windows to.\n\t * Returns the session name if found, null otherwise.\n\t */\n\tprivate async findIloomSession(): Promise<string | null> {\n\t\ttry {\n\t\t\tconst result = await execa('tmux', ['list-sessions', '-F', '#{session_name}'])\n\t\t\tconst sessions = result.stdout.split('\\n').filter(Boolean)\n\t\t\treturn sessions.find(s => s.startsWith('iloom-')) ?? null\n\t\t} catch (error) {\n\t\t\t// `tmux list-sessions` exits with code 1 when no server is running\n\t\t\tif (error instanceof Error && 'exitCode' in error) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tthrow error\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
buildCommandSequence,
|
|
4
|
+
detectWSLDistro,
|
|
5
|
+
rgbToHex
|
|
6
|
+
} from "./chunk-PIIRD4LO.js";
|
|
7
|
+
|
|
8
|
+
// src/utils/terminal-backends/wsl.ts
|
|
9
|
+
import { execa } from "execa";
|
|
10
|
+
function buildTabArgs(shellCommand, options, distro) {
|
|
11
|
+
const args = ["new-tab"];
|
|
12
|
+
if (options.title) {
|
|
13
|
+
args.push("--title", options.title);
|
|
14
|
+
}
|
|
15
|
+
if (options.backgroundColor) {
|
|
16
|
+
args.push("--tabColor", rgbToHex(options.backgroundColor));
|
|
17
|
+
}
|
|
18
|
+
args.push("wsl.exe");
|
|
19
|
+
if (distro) {
|
|
20
|
+
args.push("-d", distro);
|
|
21
|
+
}
|
|
22
|
+
args.push("-e", "bash", "-lic", shellCommand);
|
|
23
|
+
return args;
|
|
24
|
+
}
|
|
25
|
+
var WSLBackend = class {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.name = "wsl";
|
|
28
|
+
}
|
|
29
|
+
async openSingle(options) {
|
|
30
|
+
const rawCommand = (await buildCommandSequence(options)).trim();
|
|
31
|
+
const shellCommand = rawCommand ? `${rawCommand}; exec bash` : "exec bash";
|
|
32
|
+
const distro = detectWSLDistro();
|
|
33
|
+
const args = buildTabArgs(shellCommand, options, distro);
|
|
34
|
+
try {
|
|
35
|
+
await execa("wt.exe", args);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
38
|
+
if (message.includes("ENOENT") || message.includes("not found")) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
"Windows Terminal (wt.exe) is not available. Install Windows Terminal from the Microsoft Store: https://aka.ms/terminal"
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`Failed to open Windows Terminal tab: ${message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async openMultiple(optionsArray) {
|
|
47
|
+
const distro = detectWSLDistro();
|
|
48
|
+
const allArgs = [];
|
|
49
|
+
for (let i = 0; i < optionsArray.length; i++) {
|
|
50
|
+
const options = optionsArray[i];
|
|
51
|
+
if (!options) {
|
|
52
|
+
throw new Error(`Terminal option at index ${i} is undefined`);
|
|
53
|
+
}
|
|
54
|
+
const rawCommand = (await buildCommandSequence(options)).trim();
|
|
55
|
+
const shellCommand = rawCommand ? `${rawCommand}; exec bash` : "exec bash";
|
|
56
|
+
const tabArgs = buildTabArgs(shellCommand, options, distro);
|
|
57
|
+
if (i > 0) {
|
|
58
|
+
allArgs.push(";");
|
|
59
|
+
}
|
|
60
|
+
allArgs.push(...tabArgs);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
await execa("wt.exe", allArgs);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
66
|
+
if (message.includes("ENOENT") || message.includes("not found")) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
"Windows Terminal (wt.exe) is not available. Install Windows Terminal from the Microsoft Store: https://aka.ms/terminal"
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Failed to open Windows Terminal tabs: ${message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
export {
|
|
76
|
+
WSLBackend
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=wsl-4QZIQLLE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/terminal-backends/wsl.ts"],"sourcesContent":["import { execa } from 'execa'\nimport type { TerminalWindowOptions } from '../terminal.js'\nimport type { TerminalBackend } from './types.js'\nimport { buildCommandSequence, rgbToHex } from './command-builder.js'\nimport { detectWSLDistro } from '../platform-detect.js'\n\n/**\n * Build wt.exe arguments for a single tab.\n *\n * Uses `wsl.exe -d <distro> -e bash -lic \"<command>\"` so the tab runs\n * inside the correct WSL distribution with the user's profile loaded.\n */\nfunction buildTabArgs(\n\tshellCommand: string,\n\toptions: TerminalWindowOptions,\n\tdistro: string | undefined\n): string[] {\n\tconst args: string[] = ['new-tab']\n\n\tif (options.title) {\n\t\targs.push('--title', options.title)\n\t}\n\n\tif (options.backgroundColor) {\n\t\targs.push('--tabColor', rgbToHex(options.backgroundColor))\n\t}\n\n\targs.push('wsl.exe')\n\n\tif (distro) {\n\t\targs.push('-d', distro)\n\t}\n\n\targs.push('-e', 'bash', '-lic', shellCommand)\n\n\treturn args\n}\n\n/**\n * WSL terminal backend — uses Windows Terminal (wt.exe) to open tabs\n * running inside the current WSL distribution.\n */\nexport class WSLBackend implements TerminalBackend {\n\treadonly name = 'wsl'\n\n\tasync openSingle(options: TerminalWindowOptions): Promise<void> {\n\t\tconst rawCommand = (await buildCommandSequence(options)).trim()\n\t\tconst shellCommand = rawCommand ? `${rawCommand}; exec bash` : 'exec bash'\n\t\tconst distro = detectWSLDistro()\n\t\tconst args = buildTabArgs(shellCommand, options, distro)\n\n\t\ttry {\n\t\t\tawait execa('wt.exe', args)\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : 'Unknown error'\n\t\t\tif (message.includes('ENOENT') || message.includes('not found')) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Windows Terminal (wt.exe) is not available. ' +\n\t\t\t\t\t'Install Windows Terminal from the Microsoft Store: https://aka.ms/terminal'\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(`Failed to open Windows Terminal tab: ${message}`)\n\t\t}\n\t}\n\n\tasync openMultiple(optionsArray: TerminalWindowOptions[]): Promise<void> {\n\t\tconst distro = detectWSLDistro()\n\n\t\t// Build combined wt.exe command with multiple new-tab subcommands\n\t\t// separated by `;` (wt.exe subcommand separator)\n\t\tconst allArgs: string[] = []\n\n\t\tfor (let i = 0; i < optionsArray.length; i++) {\n\t\t\tconst options = optionsArray[i]\n\t\t\tif (!options) {\n\t\t\t\tthrow new Error(`Terminal option at index ${i} is undefined`)\n\t\t\t}\n\n\t\t\tconst rawCommand = (await buildCommandSequence(options)).trim()\n\t\t\tconst shellCommand = rawCommand ? `${rawCommand}; exec bash` : 'exec bash'\n\t\t\tconst tabArgs = buildTabArgs(shellCommand, options, distro)\n\n\t\t\tif (i > 0) {\n\t\t\t\tallArgs.push(';')\n\t\t\t}\n\n\t\t\tallArgs.push(...tabArgs)\n\t\t}\n\n\t\ttry {\n\t\t\tawait execa('wt.exe', allArgs)\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : 'Unknown error'\n\t\t\tif (message.includes('ENOENT') || message.includes('not found')) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Windows Terminal (wt.exe) is not available. ' +\n\t\t\t\t\t'Install Windows Terminal from the Microsoft Store: https://aka.ms/terminal'\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(`Failed to open Windows Terminal tabs: ${message}`)\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa;AAYtB,SAAS,aACR,cACA,SACA,QACW;AACX,QAAM,OAAiB,CAAC,SAAS;AAEjC,MAAI,QAAQ,OAAO;AAClB,SAAK,KAAK,WAAW,QAAQ,KAAK;AAAA,EACnC;AAEA,MAAI,QAAQ,iBAAiB;AAC5B,SAAK,KAAK,cAAc,SAAS,QAAQ,eAAe,CAAC;AAAA,EAC1D;AAEA,OAAK,KAAK,SAAS;AAEnB,MAAI,QAAQ;AACX,SAAK,KAAK,MAAM,MAAM;AAAA,EACvB;AAEA,OAAK,KAAK,MAAM,QAAQ,QAAQ,YAAY;AAE5C,SAAO;AACR;AAMO,IAAM,aAAN,MAA4C;AAAA,EAA5C;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,MAAM,WAAW,SAA+C;AAC/D,UAAM,cAAc,MAAM,qBAAqB,OAAO,GAAG,KAAK;AAC9D,UAAM,eAAe,aAAa,GAAG,UAAU,gBAAgB;AAC/D,UAAM,SAAS,gBAAgB;AAC/B,UAAM,OAAO,aAAa,cAAc,SAAS,MAAM;AAEvD,QAAI;AACH,YAAM,MAAM,UAAU,IAAI;AAAA,IAC3B,SAAS,OAAO;AACf,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,UAAI,QAAQ,SAAS,QAAQ,KAAK,QAAQ,SAAS,WAAW,GAAG;AAChE,cAAM,IAAI;AAAA,UACT;AAAA,QAED;AAAA,MACD;AACA,YAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAAA,IAClE;AAAA,EACD;AAAA,EAEA,MAAM,aAAa,cAAsD;AACxE,UAAM,SAAS,gBAAgB;AAI/B,UAAM,UAAoB,CAAC;AAE3B,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC7C,YAAM,UAAU,aAAa,CAAC;AAC9B,UAAI,CAAC,SAAS;AACb,cAAM,IAAI,MAAM,4BAA4B,CAAC,eAAe;AAAA,MAC7D;AAEA,YAAM,cAAc,MAAM,qBAAqB,OAAO,GAAG,KAAK;AAC9D,YAAM,eAAe,aAAa,GAAG,UAAU,gBAAgB;AAC/D,YAAM,UAAU,aAAa,cAAc,SAAS,MAAM;AAE1D,UAAI,IAAI,GAAG;AACV,gBAAQ,KAAK,GAAG;AAAA,MACjB;AAEA,cAAQ,KAAK,GAAG,OAAO;AAAA,IACxB;AAEA,QAAI;AACH,YAAM,MAAM,UAAU,OAAO;AAAA,IAC9B,SAAS,OAAO;AACf,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,UAAI,QAAQ,SAAS,QAAQ,KAAK,QAAQ,SAAS,WAAW,GAAG;AAChE,cAAM,IAAI;AAAA,UACT;AAAA,QAED;AAAA,MACD;AACA,YAAM,IAAI,MAAM,yCAAyC,OAAO,EAAE;AAAA,IACnE;AAAA,EACD;AACD;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
createNeonProviderFromSettings
|
|
4
|
+
} from "./chunk-VMZG66UV.js";
|
|
5
|
+
import "./chunk-CV47VCMQ.js";
|
|
6
|
+
import "./chunk-ZAXRQLK3.js";
|
|
7
|
+
import "./chunk-H2SSF24U.js";
|
|
8
|
+
export {
|
|
9
|
+
createNeonProviderFromSettings
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=neon-helpers-HWIYRKOW.js.map
|
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DevServerManager
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import {
|
|
7
|
-
getWorkspacePort
|
|
8
|
-
} from "./chunk-LLHXQS3C.js";
|
|
9
|
-
import "./chunk-WWKOVDWC.js";
|
|
4
|
+
} from "./chunk-RVI6C2H5.js";
|
|
5
|
+
import "./chunk-5PNZBH6V.js";
|
|
10
6
|
import {
|
|
11
7
|
IdentifierParser
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
GitWorktreeManager
|
|
15
|
-
} from "./chunk-I5T677EA.js";
|
|
8
|
+
} from "./chunk-UDCI3QTS.js";
|
|
16
9
|
import {
|
|
17
10
|
openBrowser
|
|
18
11
|
} from "./chunk-YETJNRQM.js";
|
|
19
12
|
import {
|
|
20
|
-
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
13
|
+
getWorkspacePort
|
|
14
|
+
} from "./chunk-HLDY5S4C.js";
|
|
15
|
+
import "./chunk-3GTUXW26.js";
|
|
23
16
|
import {
|
|
24
17
|
extractSettingsOverrides
|
|
25
18
|
} from "./chunk-GYCR2LOU.js";
|
|
19
|
+
import {
|
|
20
|
+
ProjectCapabilityDetector
|
|
21
|
+
} from "./chunk-G2MNSPA4.js";
|
|
22
|
+
import "./chunk-NCPZYQ4B.js";
|
|
23
|
+
import {
|
|
24
|
+
GitWorktreeManager
|
|
25
|
+
} from "./chunk-LE2NOUTN.js";
|
|
26
26
|
import {
|
|
27
27
|
extractIssueNumber
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-3RXYOBME.js";
|
|
29
29
|
import {
|
|
30
30
|
SettingsManager
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
31
|
+
} from "./chunk-ET6A2JR4.js";
|
|
32
|
+
import "./chunk-YRCEOQPX.js";
|
|
33
|
+
import "./chunk-ZAXRQLK3.js";
|
|
34
34
|
import {
|
|
35
35
|
logger
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-H2SSF24U.js";
|
|
37
37
|
|
|
38
38
|
// src/commands/open.ts
|
|
39
39
|
import path from "path";
|
|
@@ -238,4 +238,4 @@ Make sure the project is built (run 'il start' first)`
|
|
|
238
238
|
export {
|
|
239
239
|
OpenCommand
|
|
240
240
|
};
|
|
241
|
-
//# sourceMappingURL=open-
|
|
241
|
+
//# sourceMappingURL=open-2Y7GSUTJ.js.map
|
|
@@ -1,75 +1,76 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
IgniteCommand
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-IR74O2F6.js";
|
|
5
5
|
import {
|
|
6
6
|
StartCommand,
|
|
7
7
|
launchFirstRunSetup,
|
|
8
8
|
needsFirstRunSetup
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-TEJAGQX2.js";
|
|
10
|
+
import "./chunk-XFQGI2E3.js";
|
|
11
|
+
import "./chunk-ABVMUNCD.js";
|
|
12
|
+
import "./chunk-4E7LCFUG.js";
|
|
13
|
+
import "./chunk-TZNNJLGT.js";
|
|
14
|
+
import "./chunk-NOMQ5RFG.js";
|
|
15
|
+
import {
|
|
16
|
+
generateHarnessMcpConfig,
|
|
17
|
+
generateIssueManagementMcpConfig
|
|
18
|
+
} from "./chunk-5UFGO4ZT.js";
|
|
13
19
|
import {
|
|
14
20
|
IssueManagementProviderFactory
|
|
15
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-RMLADZRY.js";
|
|
16
22
|
import "./chunk-4232AHNQ.js";
|
|
17
|
-
import "./chunk-LLHXQS3C.js";
|
|
18
|
-
import "./chunk-WWKOVDWC.js";
|
|
19
23
|
import {
|
|
20
24
|
matchIssueIdentifier
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
25
|
+
} from "./chunk-UDCI3QTS.js";
|
|
26
|
+
import "./chunk-YETJNRQM.js";
|
|
27
|
+
import "./chunk-HLDY5S4C.js";
|
|
28
|
+
import "./chunk-3GTUXW26.js";
|
|
29
|
+
import "./chunk-6YVJVUR4.js";
|
|
30
|
+
import "./chunk-GYCR2LOU.js";
|
|
31
|
+
import "./chunk-7NFCGKZT.js";
|
|
32
|
+
import "./chunk-G2MNSPA4.js";
|
|
33
|
+
import "./chunk-NCPZYQ4B.js";
|
|
34
|
+
import "./chunk-VMZG66UV.js";
|
|
23
35
|
import {
|
|
24
36
|
TelemetryService
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
37
|
+
} from "./chunk-GMDSYLI6.js";
|
|
38
|
+
import "./chunk-SQYHPBFP.js";
|
|
39
|
+
import "./chunk-VNYWBHKR.js";
|
|
40
|
+
import "./chunk-LE2NOUTN.js";
|
|
29
41
|
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
import "./chunk-
|
|
42
|
+
IssueTrackerFactory
|
|
43
|
+
} from "./chunk-UHIBKD73.js";
|
|
44
|
+
import "./chunk-5LTID2AF.js";
|
|
45
|
+
import "./chunk-LHDD4JHC.js";
|
|
46
|
+
import "./chunk-NH3QZYE5.js";
|
|
47
|
+
import {
|
|
48
|
+
isInteractiveEnvironment,
|
|
49
|
+
promptConfirmation
|
|
50
|
+
} from "./chunk-CV47VCMQ.js";
|
|
51
|
+
import "./chunk-7OCGBJLR.js";
|
|
52
|
+
import "./chunk-QVAA5KHK.js";
|
|
53
|
+
import "./chunk-KQFIGI37.js";
|
|
40
54
|
import {
|
|
41
55
|
detectClaudeCli,
|
|
42
56
|
launchClaude
|
|
43
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-Y3RX7LZT.js";
|
|
44
58
|
import {
|
|
45
59
|
PromptTemplateManager
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-QFTDZ5E3.js";
|
|
49
|
-
import "./chunk-4FGEGQW4.js";
|
|
60
|
+
} from "./chunk-WG4MLJ6J.js";
|
|
61
|
+
import "./chunk-3RXYOBME.js";
|
|
50
62
|
import {
|
|
51
63
|
PlanCommandSettingsSchema,
|
|
52
64
|
SettingsManager
|
|
53
|
-
} from "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import {
|
|
56
|
-
IssueTrackerFactory
|
|
57
|
-
} from "./chunk-UKBAJ2QQ.js";
|
|
58
|
-
import "./chunk-HEXKPKCK.js";
|
|
59
|
-
import "./chunk-KXDRI47U.js";
|
|
60
|
-
import "./chunk-VG45TUYK.js";
|
|
65
|
+
} from "./chunk-ET6A2JR4.js";
|
|
66
|
+
import "./chunk-YRCEOQPX.js";
|
|
61
67
|
import {
|
|
62
68
|
withLogger
|
|
63
|
-
} from "./chunk-
|
|
64
|
-
import {
|
|
65
|
-
isInteractiveEnvironment,
|
|
66
|
-
promptConfirmation
|
|
67
|
-
} from "./chunk-7JDMYTFZ.js";
|
|
68
|
-
import "./chunk-433MOLAU.js";
|
|
69
|
+
} from "./chunk-ZAXRQLK3.js";
|
|
69
70
|
import {
|
|
70
71
|
createStderrLogger,
|
|
71
72
|
logger
|
|
72
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-H2SSF24U.js";
|
|
73
74
|
|
|
74
75
|
// src/commands/plan.ts
|
|
75
76
|
import chalk from "chalk";
|
|
@@ -383,7 +384,7 @@ var PlanCommand = class {
|
|
|
383
384
|
);
|
|
384
385
|
if (shouldRunInit) {
|
|
385
386
|
logger.info(chalk.bold("Launching iloom init..."));
|
|
386
|
-
const { InitCommand } = await import("./init-
|
|
387
|
+
const { InitCommand } = await import("./init-CI43GJHV.js");
|
|
387
388
|
const initCommand = new InitCommand();
|
|
388
389
|
await initCommand.execute(
|
|
389
390
|
"Help the user set up a GitHub repository or Linear project for this project so they can use issue management features. When complete tell the user they can exit to continue the planning session."
|
|
@@ -718,4 +719,4 @@ ${initialMessage}`;
|
|
|
718
719
|
export {
|
|
719
720
|
PlanCommand
|
|
720
721
|
};
|
|
721
|
-
//# sourceMappingURL=plan-
|
|
722
|
+
//# sourceMappingURL=plan-SWFPLNJE.js.map
|