@iloom/cli 0.10.1 → 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.
Files changed (262) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -2
  3. package/dist/{BranchNamingService-25KSZAEM.js → BranchNamingService-XBCO747L.js} +4 -4
  4. package/dist/ClaudeContextManager-SXDCWDJA.js +14 -0
  5. package/dist/ClaudeService-6E6MCGJE.js +13 -0
  6. package/dist/GitHubService-2R5GQG4K.js +12 -0
  7. package/dist/IssueTrackerFactory-XN6MQ4UN.js +14 -0
  8. package/dist/{LoomLauncher-TDLZSYG2.js → LoomLauncher-5AZU2F5I.js} +15 -12
  9. package/dist/LoomLauncher-5AZU2F5I.js.map +1 -0
  10. package/dist/MetadataManager-CMQQTFLQ.js +10 -0
  11. package/dist/ProjectCapabilityDetector-IC6NAFGY.js +11 -0
  12. package/dist/{PromptTemplateManager-YOE2SIPG.js → PromptTemplateManager-T5VTLJP3.js} +3 -3
  13. package/dist/README.md +4 -2
  14. package/dist/{SettingsManager-FNKCOZMQ.js → SettingsManager-WQ5NSGAH.js} +3 -3
  15. package/dist/SettingsMigrationManager-S6J7OHUH.js +10 -0
  16. package/dist/agents/iloom-code-reviewer.md +50 -8
  17. package/dist/agents/iloom-issue-analyze-and-plan.md +10 -0
  18. package/dist/agents/iloom-issue-analyzer.md +13 -0
  19. package/dist/agents/iloom-issue-complexity-evaluator.md +8 -1
  20. package/dist/agents/iloom-issue-enhancer.md +8 -1
  21. package/dist/agents/iloom-issue-planner.md +5 -0
  22. package/dist/build-OLS6J5KZ.js +27 -0
  23. package/dist/{chunk-WWKOVDWC.js → chunk-3GTUXW26.js} +3 -3
  24. package/dist/{chunk-4FGEGQW4.js → chunk-3RXYOBME.js} +5 -5
  25. package/dist/{chunk-HEXKPKCK.js → chunk-5LTID2AF.js} +6 -6
  26. package/dist/{chunk-G5V75JD5.js → chunk-5PNZBH6V.js} +2 -2
  27. package/dist/{chunk-SKSYYBCU.js → chunk-5UFGO4ZT.js} +24 -3
  28. package/dist/{chunk-SKSYYBCU.js.map → chunk-5UFGO4ZT.js.map} +1 -1
  29. package/dist/{chunk-E6KOWMKA.js → chunk-6YVJVUR4.js} +3 -3
  30. package/dist/{chunk-RJ3VBUFK.js → chunk-7FIXNAUO.js} +36 -7
  31. package/dist/chunk-7FIXNAUO.js.map +1 -0
  32. package/dist/{chunk-QVLPWNE3.js → chunk-7NFCGKZT.js} +3 -3
  33. package/dist/{chunk-433MOLAU.js → chunk-7OCGBJLR.js} +2 -2
  34. package/dist/{chunk-KVHIAWVT.js → chunk-ABVMUNCD.js} +8 -8
  35. package/dist/{chunk-7JDMYTFZ.js → chunk-CV47VCMQ.js} +2 -2
  36. package/dist/{chunk-7VHJNVLF.js → chunk-ET6A2JR4.js} +8 -6
  37. package/dist/chunk-ET6A2JR4.js.map +1 -0
  38. package/dist/{chunk-MORRVYPT.js → chunk-G2MNSPA4.js} +2 -2
  39. package/dist/{chunk-RSYT7MVI.js → chunk-GMDSYLI6.js} +36 -3
  40. package/dist/chunk-GMDSYLI6.js.map +1 -0
  41. package/dist/{chunk-VT4PDUYT.js → chunk-H2SSF24U.js} +284 -209
  42. package/dist/chunk-H2SSF24U.js.map +1 -0
  43. package/dist/{chunk-LLHXQS3C.js → chunk-HLDY5S4C.js} +3 -3
  44. package/dist/{chunk-BYUMEDDD.js → chunk-IDCE26KD.js} +3 -3
  45. package/dist/{chunk-OTGH2HRS.js → chunk-IR74O2F6.js} +221 -88
  46. package/dist/chunk-IR74O2F6.js.map +1 -0
  47. package/dist/{chunk-O7VL5N6S.js → chunk-K7R5QY6C.js} +2 -2
  48. package/dist/{chunk-S7PZA6IV.js → chunk-KQFIGI37.js} +5 -5
  49. package/dist/{chunk-I5T677EA.js → chunk-LE2NOUTN.js} +3 -3
  50. package/dist/{chunk-KXDRI47U.js → chunk-LHDD4JHC.js} +6 -6
  51. package/dist/{chunk-5FJWO4IT.js → chunk-LL6TOX3G.js} +9 -9
  52. package/dist/{chunk-YQ57ORTV.js → chunk-NCPZYQ4B.js} +2 -2
  53. package/dist/{chunk-EWJFUFPT.js → chunk-NDSGJZI2.js} +2 -2
  54. package/dist/{chunk-VG45TUYK.js → chunk-NH3QZYE5.js} +2 -2
  55. package/dist/{chunk-KKV5WH5M.js → chunk-NN5RYWXA.js} +7 -7
  56. package/dist/chunk-NOMQ5RFG.js +118 -0
  57. package/dist/chunk-NOMQ5RFG.js.map +1 -0
  58. package/dist/{chunk-KIK2ZFAL.js → chunk-QNHZM5ZV.js} +3 -3
  59. package/dist/{chunk-EVPZFV3K.js → chunk-QR4FU53I.js} +8 -8
  60. package/dist/{chunk-FXDYIV3K.js → chunk-QVAA5KHK.js} +2 -2
  61. package/dist/{chunk-NGJZ4TOU.js → chunk-RBYTXYGD.js} +2 -2
  62. package/dist/{chunk-SWSJWA2S.js → chunk-RMLADZRY.js} +12 -9
  63. package/dist/chunk-RMLADZRY.js.map +1 -0
  64. package/dist/{chunk-CVCTIDDK.js → chunk-RVI6C2H5.js} +5 -5
  65. package/dist/{chunk-Q7POFB5Q.js → chunk-SQYHPBFP.js} +2 -2
  66. package/dist/{chunk-GRISNU6G.js → chunk-TEJAGQX2.js} +64 -40
  67. package/dist/chunk-TEJAGQX2.js.map +1 -0
  68. package/dist/{chunk-QZWEJVWV.js → chunk-TZNNJLGT.js} +6 -6
  69. package/dist/{chunk-63QWFWH3.js → chunk-UDCI3QTS.js} +2 -2
  70. package/dist/{chunk-UKBAJ2QQ.js → chunk-UHIBKD73.js} +7 -7
  71. package/dist/{chunk-WXIM2WS7.js → chunk-V4STTBQD.js} +10 -10
  72. package/dist/{chunk-P4O6EH46.js → chunk-VMZG66UV.js} +5 -5
  73. package/dist/{chunk-C6HNNJIV.js → chunk-VNYWBHKR.js} +34 -4
  74. package/dist/chunk-VNYWBHKR.js.map +1 -0
  75. package/dist/{chunk-5RPBYK5Q.js → chunk-VUUN3KE4.js} +10 -10
  76. package/dist/chunk-VUUN3KE4.js.map +1 -0
  77. package/dist/{chunk-UUEW5KWB.js → chunk-WG4MLJ6J.js} +15 -10
  78. package/dist/chunk-WG4MLJ6J.js.map +1 -0
  79. package/dist/{chunk-ZNMPGMHY.js → chunk-XFQGI2E3.js} +66 -43
  80. package/dist/chunk-XFQGI2E3.js.map +1 -0
  81. package/dist/{chunk-LUKXJSRI.js → chunk-XXFSOVL3.js} +4 -4
  82. package/dist/{chunk-UR5DGNUO.js → chunk-Y3RX7LZT.js} +11 -8
  83. package/dist/chunk-Y3RX7LZT.js.map +1 -0
  84. package/dist/{chunk-KB64WNBZ.js → chunk-YRCEOQPX.js} +4 -2
  85. package/dist/chunk-YRCEOQPX.js.map +1 -0
  86. package/dist/{chunk-6MLEBAYZ.js → chunk-ZAXRQLK3.js} +2 -2
  87. package/dist/{claude-7GGEWVEM.js → claude-ONQTDWV3.js} +4 -4
  88. package/dist/{cleanup-6PVAC4NI.js → cleanup-YOM6PQCN.js} +35 -34
  89. package/dist/{cleanup-6PVAC4NI.js.map → cleanup-YOM6PQCN.js.map} +1 -1
  90. package/dist/cli.js +235 -147
  91. package/dist/cli.js.map +1 -1
  92. package/dist/{color-4TJ4P5EY.js → color-VQD52LOI.js} +3 -3
  93. package/dist/{commit-FZR5XDQG.js → commit-DC2Q5CDY.js} +15 -15
  94. package/dist/{compile-7ALJHZ4N.js → compile-4NCQECKE.js} +11 -11
  95. package/dist/{contribute-5GKLK3BQ.js → contribute-M5UWXCAV.js} +12 -12
  96. package/dist/darwin-5BHWRJ7D.js +10 -0
  97. package/dist/{dev-server-7SMIB7OF.js → dev-server-CYRP6M73.js} +19 -19
  98. package/dist/{feedback-G2GJFN2F.js → feedback-BMAZGKRW.js} +16 -16
  99. package/dist/{git-GTLKAZRJ.js → git-BXUD6CL5.js} +6 -6
  100. package/dist/ignite-IO4LXVXJ.js +35 -0
  101. package/dist/index.d.ts +39 -65
  102. package/dist/index.js +637 -110
  103. package/dist/index.js.map +1 -1
  104. package/dist/{init-32YOKXRL.js → init-CI43GJHV.js} +17 -17
  105. package/dist/{init-32YOKXRL.js.map → init-CI43GJHV.js.map} +1 -1
  106. package/dist/install-deps-SRTM5U7D.js +43 -0
  107. package/dist/install-deps-SRTM5U7D.js.map +1 -0
  108. package/dist/{installation-detector-MMFWLJYN.js → installation-detector-HF6QN7KP.js} +3 -3
  109. package/dist/{issues-4UUAQ5K6.js → issues-DMRQJH7E.js} +15 -15
  110. package/dist/lint-BSWRMGPZ.js +27 -0
  111. package/dist/linux-RYLOP2LY.js +103 -0
  112. package/dist/linux-RYLOP2LY.js.map +1 -0
  113. package/dist/mcp/chunk-PIIRD4LO.js +373 -0
  114. package/dist/mcp/chunk-PIIRD4LO.js.map +1 -0
  115. package/dist/mcp/darwin-3JFFE3W2.js +10 -0
  116. package/dist/mcp/issue-management-server.js +23 -127
  117. package/dist/mcp/issue-management-server.js.map +1 -1
  118. package/dist/mcp/linux-JBVS4R3A.js +103 -0
  119. package/dist/mcp/linux-JBVS4R3A.js.map +1 -0
  120. package/dist/mcp/tmux-RYBLEHUZ.js +156 -0
  121. package/dist/mcp/tmux-RYBLEHUZ.js.map +1 -0
  122. package/dist/mcp/wsl-4QZIQLLE.js +78 -0
  123. package/dist/mcp/wsl-4QZIQLLE.js.map +1 -0
  124. package/dist/neon-helpers-HWIYRKOW.js +11 -0
  125. package/dist/{open-FXWW3VI4.js → open-2Y7GSUTJ.js} +19 -19
  126. package/dist/{plan-RQ5FPIGF.js → plan-SWFPLNJE.js} +47 -46
  127. package/dist/{plan-RQ5FPIGF.js.map → plan-SWFPLNJE.js.map} +1 -1
  128. package/dist/{projects-2UOXFLNZ.js → projects-IUSUXD5D.js} +6 -6
  129. package/dist/{prompt-ONNPSNKM.js → prompt-7LZB4PAT.js} +3 -3
  130. package/dist/prompts/init-prompt.txt +56 -107
  131. package/dist/prompts/issue-prompt.txt +57 -11
  132. package/dist/prompts/pr-prompt.txt +154 -4
  133. package/dist/prompts/regular-prompt.txt +20 -3
  134. package/dist/prompts/swarm-orchestrator-prompt.txt +134 -14
  135. package/dist/{rebase-6NVLX5V7.js → rebase-S6OHAOOF.js} +12 -12
  136. package/dist/{recap-OMBOKJST.js → recap-GGVCG5VH.js} +9 -9
  137. package/dist/{remote-IJAMOEAP.js → remote-MZTFHHTU.js} +3 -3
  138. package/dist/remote-MZTFHHTU.js.map +1 -0
  139. package/dist/{run-BBXLRIZB.js → run-ST3FR75O.js} +19 -19
  140. package/dist/schema/settings.schema.json +8 -49
  141. package/dist/{shell-RF7LTND5.js → shell-W4SBQPTE.js} +8 -8
  142. package/dist/{summary-WTQZ7XG2.js → summary-P2JCIIJO.js} +17 -17
  143. package/dist/test-6JH4FE2X.js +27 -0
  144. package/dist/{test-git-XM4TM65W.js → test-git-2KFFAQ6B.js} +6 -6
  145. package/dist/{test-jira-LDTOYFSD.js → test-jira-FKDKG6CD.js} +8 -8
  146. package/dist/{test-prefix-GBO37XCN.js → test-prefix-GP2DAX37.js} +11 -11
  147. package/dist/test-prefix-GP2DAX37.js.map +1 -0
  148. package/dist/{test-tabs-D3POYOJ5.js → test-tabs-YDWMWTVA.js} +3 -3
  149. package/dist/{test-webserver-NZ3JTVLL.js → test-webserver-QI3QQFZ3.js} +8 -8
  150. package/dist/tmux-7ZTA3BDI.js +156 -0
  151. package/dist/tmux-7ZTA3BDI.js.map +1 -0
  152. package/dist/{update-HJKDYA3F.js → update-XLW7R7FL.js} +4 -4
  153. package/dist/{update-notifier-LBAUOOLM.js → update-notifier-EYLAXZAA.js} +3 -3
  154. package/dist/update-notifier-EYLAXZAA.js.map +1 -0
  155. package/dist/{vscode-6XUGHJKL.js → vscode-TOGE5N67.js} +13 -13
  156. package/dist/{vscode-announcement-EQ2SKK3T.js → vscode-announcement-NIX7O2MG.js} +3 -3
  157. package/dist/wsl-Y4GUTOQ7.js +78 -0
  158. package/dist/wsl-Y4GUTOQ7.js.map +1 -0
  159. package/package.json +4 -2
  160. package/dist/ClaudeContextManager-66GR4BGM.js +0 -14
  161. package/dist/ClaudeService-7KM5NA5Z.js +0 -13
  162. package/dist/GitHubService-MEHKHUQP.js +0 -12
  163. package/dist/IssueTrackerFactory-NG53YX5S.js +0 -14
  164. package/dist/LoomLauncher-TDLZSYG2.js.map +0 -1
  165. package/dist/MetadataManager-5QZSTKNN.js +0 -10
  166. package/dist/ProjectCapabilityDetector-5KSYUTBJ.js +0 -11
  167. package/dist/SettingsMigrationManager-LEBMJP3B.js +0 -10
  168. package/dist/build-VHGEMXBA.js +0 -27
  169. package/dist/chunk-5RPBYK5Q.js.map +0 -1
  170. package/dist/chunk-7VHJNVLF.js.map +0 -1
  171. package/dist/chunk-C6HNNJIV.js.map +0 -1
  172. package/dist/chunk-GRISNU6G.js.map +0 -1
  173. package/dist/chunk-KB64WNBZ.js.map +0 -1
  174. package/dist/chunk-OTGH2HRS.js.map +0 -1
  175. package/dist/chunk-RJ3VBUFK.js.map +0 -1
  176. package/dist/chunk-RSYT7MVI.js.map +0 -1
  177. package/dist/chunk-SWSJWA2S.js.map +0 -1
  178. package/dist/chunk-UR5DGNUO.js.map +0 -1
  179. package/dist/chunk-UUEW5KWB.js.map +0 -1
  180. package/dist/chunk-VT4PDUYT.js.map +0 -1
  181. package/dist/chunk-ZNMPGMHY.js.map +0 -1
  182. package/dist/ignite-H2O5Y5A2.js +0 -34
  183. package/dist/lint-AAN2NZWG.js +0 -27
  184. package/dist/neon-helpers-CQN2PB4S.js +0 -11
  185. package/dist/test-SGO6I5Z7.js +0 -27
  186. package/dist/test-prefix-GBO37XCN.js.map +0 -1
  187. /package/dist/{BranchNamingService-25KSZAEM.js.map → BranchNamingService-XBCO747L.js.map} +0 -0
  188. /package/dist/{ClaudeContextManager-66GR4BGM.js.map → ClaudeContextManager-SXDCWDJA.js.map} +0 -0
  189. /package/dist/{ClaudeService-7KM5NA5Z.js.map → ClaudeService-6E6MCGJE.js.map} +0 -0
  190. /package/dist/{GitHubService-MEHKHUQP.js.map → GitHubService-2R5GQG4K.js.map} +0 -0
  191. /package/dist/{IssueTrackerFactory-NG53YX5S.js.map → IssueTrackerFactory-XN6MQ4UN.js.map} +0 -0
  192. /package/dist/{MetadataManager-5QZSTKNN.js.map → MetadataManager-CMQQTFLQ.js.map} +0 -0
  193. /package/dist/{ProjectCapabilityDetector-5KSYUTBJ.js.map → ProjectCapabilityDetector-IC6NAFGY.js.map} +0 -0
  194. /package/dist/{PromptTemplateManager-YOE2SIPG.js.map → PromptTemplateManager-T5VTLJP3.js.map} +0 -0
  195. /package/dist/{SettingsManager-FNKCOZMQ.js.map → SettingsManager-WQ5NSGAH.js.map} +0 -0
  196. /package/dist/{SettingsMigrationManager-LEBMJP3B.js.map → SettingsMigrationManager-S6J7OHUH.js.map} +0 -0
  197. /package/dist/{build-VHGEMXBA.js.map → build-OLS6J5KZ.js.map} +0 -0
  198. /package/dist/{chunk-WWKOVDWC.js.map → chunk-3GTUXW26.js.map} +0 -0
  199. /package/dist/{chunk-4FGEGQW4.js.map → chunk-3RXYOBME.js.map} +0 -0
  200. /package/dist/{chunk-HEXKPKCK.js.map → chunk-5LTID2AF.js.map} +0 -0
  201. /package/dist/{chunk-G5V75JD5.js.map → chunk-5PNZBH6V.js.map} +0 -0
  202. /package/dist/{chunk-E6KOWMKA.js.map → chunk-6YVJVUR4.js.map} +0 -0
  203. /package/dist/{chunk-QVLPWNE3.js.map → chunk-7NFCGKZT.js.map} +0 -0
  204. /package/dist/{chunk-433MOLAU.js.map → chunk-7OCGBJLR.js.map} +0 -0
  205. /package/dist/{chunk-KVHIAWVT.js.map → chunk-ABVMUNCD.js.map} +0 -0
  206. /package/dist/{chunk-7JDMYTFZ.js.map → chunk-CV47VCMQ.js.map} +0 -0
  207. /package/dist/{chunk-MORRVYPT.js.map → chunk-G2MNSPA4.js.map} +0 -0
  208. /package/dist/{chunk-LLHXQS3C.js.map → chunk-HLDY5S4C.js.map} +0 -0
  209. /package/dist/{chunk-BYUMEDDD.js.map → chunk-IDCE26KD.js.map} +0 -0
  210. /package/dist/{chunk-O7VL5N6S.js.map → chunk-K7R5QY6C.js.map} +0 -0
  211. /package/dist/{chunk-S7PZA6IV.js.map → chunk-KQFIGI37.js.map} +0 -0
  212. /package/dist/{chunk-I5T677EA.js.map → chunk-LE2NOUTN.js.map} +0 -0
  213. /package/dist/{chunk-KXDRI47U.js.map → chunk-LHDD4JHC.js.map} +0 -0
  214. /package/dist/{chunk-5FJWO4IT.js.map → chunk-LL6TOX3G.js.map} +0 -0
  215. /package/dist/{chunk-YQ57ORTV.js.map → chunk-NCPZYQ4B.js.map} +0 -0
  216. /package/dist/{chunk-EWJFUFPT.js.map → chunk-NDSGJZI2.js.map} +0 -0
  217. /package/dist/{chunk-VG45TUYK.js.map → chunk-NH3QZYE5.js.map} +0 -0
  218. /package/dist/{chunk-KKV5WH5M.js.map → chunk-NN5RYWXA.js.map} +0 -0
  219. /package/dist/{chunk-KIK2ZFAL.js.map → chunk-QNHZM5ZV.js.map} +0 -0
  220. /package/dist/{chunk-EVPZFV3K.js.map → chunk-QR4FU53I.js.map} +0 -0
  221. /package/dist/{chunk-FXDYIV3K.js.map → chunk-QVAA5KHK.js.map} +0 -0
  222. /package/dist/{chunk-NGJZ4TOU.js.map → chunk-RBYTXYGD.js.map} +0 -0
  223. /package/dist/{chunk-CVCTIDDK.js.map → chunk-RVI6C2H5.js.map} +0 -0
  224. /package/dist/{chunk-Q7POFB5Q.js.map → chunk-SQYHPBFP.js.map} +0 -0
  225. /package/dist/{chunk-QZWEJVWV.js.map → chunk-TZNNJLGT.js.map} +0 -0
  226. /package/dist/{chunk-63QWFWH3.js.map → chunk-UDCI3QTS.js.map} +0 -0
  227. /package/dist/{chunk-UKBAJ2QQ.js.map → chunk-UHIBKD73.js.map} +0 -0
  228. /package/dist/{chunk-WXIM2WS7.js.map → chunk-V4STTBQD.js.map} +0 -0
  229. /package/dist/{chunk-P4O6EH46.js.map → chunk-VMZG66UV.js.map} +0 -0
  230. /package/dist/{chunk-LUKXJSRI.js.map → chunk-XXFSOVL3.js.map} +0 -0
  231. /package/dist/{chunk-6MLEBAYZ.js.map → chunk-ZAXRQLK3.js.map} +0 -0
  232. /package/dist/{claude-7GGEWVEM.js.map → claude-ONQTDWV3.js.map} +0 -0
  233. /package/dist/{color-4TJ4P5EY.js.map → color-VQD52LOI.js.map} +0 -0
  234. /package/dist/{commit-FZR5XDQG.js.map → commit-DC2Q5CDY.js.map} +0 -0
  235. /package/dist/{compile-7ALJHZ4N.js.map → compile-4NCQECKE.js.map} +0 -0
  236. /package/dist/{contribute-5GKLK3BQ.js.map → contribute-M5UWXCAV.js.map} +0 -0
  237. /package/dist/{git-GTLKAZRJ.js.map → darwin-5BHWRJ7D.js.map} +0 -0
  238. /package/dist/{dev-server-7SMIB7OF.js.map → dev-server-CYRP6M73.js.map} +0 -0
  239. /package/dist/{feedback-G2GJFN2F.js.map → feedback-BMAZGKRW.js.map} +0 -0
  240. /package/dist/{ignite-H2O5Y5A2.js.map → git-BXUD6CL5.js.map} +0 -0
  241. /package/dist/{installation-detector-MMFWLJYN.js.map → ignite-IO4LXVXJ.js.map} +0 -0
  242. /package/dist/{neon-helpers-CQN2PB4S.js.map → installation-detector-HF6QN7KP.js.map} +0 -0
  243. /package/dist/{issues-4UUAQ5K6.js.map → issues-DMRQJH7E.js.map} +0 -0
  244. /package/dist/{lint-AAN2NZWG.js.map → lint-BSWRMGPZ.js.map} +0 -0
  245. /package/dist/{prompt-ONNPSNKM.js.map → mcp/darwin-3JFFE3W2.js.map} +0 -0
  246. /package/dist/{remote-IJAMOEAP.js.map → neon-helpers-HWIYRKOW.js.map} +0 -0
  247. /package/dist/{open-FXWW3VI4.js.map → open-2Y7GSUTJ.js.map} +0 -0
  248. /package/dist/{projects-2UOXFLNZ.js.map → projects-IUSUXD5D.js.map} +0 -0
  249. /package/dist/{update-notifier-LBAUOOLM.js.map → prompt-7LZB4PAT.js.map} +0 -0
  250. /package/dist/{rebase-6NVLX5V7.js.map → rebase-S6OHAOOF.js.map} +0 -0
  251. /package/dist/{recap-OMBOKJST.js.map → recap-GGVCG5VH.js.map} +0 -0
  252. /package/dist/{run-BBXLRIZB.js.map → run-ST3FR75O.js.map} +0 -0
  253. /package/dist/{shell-RF7LTND5.js.map → shell-W4SBQPTE.js.map} +0 -0
  254. /package/dist/{summary-WTQZ7XG2.js.map → summary-P2JCIIJO.js.map} +0 -0
  255. /package/dist/{test-SGO6I5Z7.js.map → test-6JH4FE2X.js.map} +0 -0
  256. /package/dist/{test-git-XM4TM65W.js.map → test-git-2KFFAQ6B.js.map} +0 -0
  257. /package/dist/{test-jira-LDTOYFSD.js.map → test-jira-FKDKG6CD.js.map} +0 -0
  258. /package/dist/{test-tabs-D3POYOJ5.js.map → test-tabs-YDWMWTVA.js.map} +0 -0
  259. /package/dist/{test-webserver-NZ3JTVLL.js.map → test-webserver-QI3QQFZ3.js.map} +0 -0
  260. /package/dist/{update-HJKDYA3F.js.map → update-XLW7R7FL.js.map} +0 -0
  261. /package/dist/{vscode-6XUGHJKL.js.map → vscode-TOGE5N67.js.map} +0 -0
  262. /package/dist/{vscode-announcement-EQ2SKK3T.js.map → vscode-announcement-NIX7O2MG.js.map} +0 -0
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateWorktreePath
4
- } from "./chunk-4FGEGQW4.js";
4
+ } from "./chunk-3RXYOBME.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-7VHJNVLF.js";
8
- import "./chunk-KB64WNBZ.js";
9
- import "./chunk-6MLEBAYZ.js";
7
+ } from "./chunk-ET6A2JR4.js";
8
+ import "./chunk-YRCEOQPX.js";
9
+ import "./chunk-ZAXRQLK3.js";
10
10
  import {
11
11
  logger
12
- } from "./chunk-VT4PDUYT.js";
12
+ } from "./chunk-H2SSF24U.js";
13
13
 
14
14
  // src/commands/test-prefix.ts
15
15
  var TestPrefixCommand = class {
@@ -22,7 +22,7 @@ var TestPrefixCommand = class {
22
22
  */
23
23
  async execute() {
24
24
  try {
25
- logger.info("\u{1F9EA} Testing Worktree Prefix Configuration\n");
25
+ logger.info("Testing Worktree Prefix Configuration\n");
26
26
  const rootDir = process.cwd();
27
27
  logger.info(`Repository: ${rootDir}`);
28
28
  const settings = await this.settingsManager.loadSettings();
@@ -34,7 +34,7 @@ var TestPrefixCommand = class {
34
34
  logger.info(`Prefix: "${settings.worktreePrefix}"`);
35
35
  }
36
36
  logger.info("");
37
- logger.info("\u{1F4CD} Example Worktree Paths:\n");
37
+ logger.info("Example Worktree Paths:\n");
38
38
  const examples = [
39
39
  { branch: "issue-123", label: "Issue Branch", options: {} },
40
40
  { branch: "issue-456", label: "Issue Branch", options: { isPR: true, prNumber: 456 } },
@@ -42,17 +42,17 @@ var TestPrefixCommand = class {
42
42
  ];
43
43
  for (const example of examples) {
44
44
  const options = settings.worktreePrefix !== void 0 ? { ...example.options, prefix: settings.worktreePrefix } : example.options;
45
- const path = generateWorktreePath(
45
+ const worktreePath = generateWorktreePath(
46
46
  example.branch,
47
47
  rootDir,
48
48
  options
49
49
  );
50
50
  const suffix = example.options.isPR ? " (PR)" : "";
51
51
  logger.info(` ${example.label}${suffix}: ${example.branch}`);
52
- logger.success(` \u2192 ${path}`);
52
+ logger.success(` -> ${worktreePath}`);
53
53
  logger.info("");
54
54
  }
55
- logger.info("\u{1F4A1} Tip: Edit .iloom/settings.json to change the worktreePrefix\n");
55
+ logger.info("Tip: Edit .iloom/settings.json to change the worktreePrefix\n");
56
56
  logger.success("Test completed!");
57
57
  } catch (error) {
58
58
  if (error instanceof Error) {
@@ -67,4 +67,4 @@ var TestPrefixCommand = class {
67
67
  export {
68
68
  TestPrefixCommand
69
69
  };
70
- //# sourceMappingURL=test-prefix-GBO37XCN.js.map
70
+ //# sourceMappingURL=test-prefix-GP2DAX37.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/test-prefix.ts"],"sourcesContent":["import { logger } from '../utils/logger.js'\nimport { generateWorktreePath } from '../utils/git.js'\nimport { SettingsManager } from '../lib/SettingsManager.js'\n\n/**\n * Input structure for TestPrefixCommand.execute()\n */\nexport interface TestPrefixCommandInput {\n options: Record<string, never>\n}\n\n/**\n * Test command to preview worktree paths based on configured prefix\n * Demonstrates how different branch names will be resolved with current settings\n */\nexport class TestPrefixCommand {\n private readonly settingsManager: SettingsManager\n\n constructor(settingsManager?: SettingsManager) {\n this.settingsManager = settingsManager ?? new SettingsManager()\n }\n\n /**\n * Main entry point for the test-prefix command\n * Shows example worktree paths for different scenarios\n */\n public async execute(): Promise<void> {\n try {\n logger.info('Testing Worktree Prefix Configuration\\n')\n\n // Display the current working directory\n const rootDir = process.cwd()\n logger.info(`Repository: ${rootDir}`)\n\n // Load settings from .iloom/settings.json\n const settings = await this.settingsManager.loadSettings()\n\n // Display configured prefix\n if (settings.worktreePrefix === undefined) {\n logger.info('Prefix: <default> (will calculate from repo name)')\n } else if (settings.worktreePrefix === '') {\n logger.info('Prefix: \"\" (no prefix mode)')\n } else {\n logger.info(`Prefix: \"${settings.worktreePrefix}\"`)\n }\n\n logger.info('')\n logger.info('Example Worktree Paths:\\n')\n\n // Test examples\n const examples = [\n { branch: 'issue-123', label: 'Issue Branch', options: {} },\n { branch: 'issue-456', label: 'Issue Branch', options: { isPR: true, prNumber: 456 } },\n { branch: 'feature-auth', label: 'Regular Branch', options: {} },\n ]\n\n for (const example of examples) {\n const options = settings.worktreePrefix !== undefined\n ? { ...example.options, prefix: settings.worktreePrefix }\n : example.options\n\n const worktreePath = generateWorktreePath(\n example.branch,\n rootDir,\n options\n )\n\n const suffix = example.options.isPR ? ' (PR)' : ''\n logger.info(` ${example.label}${suffix}: ${example.branch}`)\n logger.success(` -> ${worktreePath}`)\n logger.info('')\n }\n\n logger.info('Tip: Edit .iloom/settings.json to change the worktreePrefix\\n')\n logger.success('Test completed!')\n\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`Test failed: ${error.message}`)\n } else {\n logger.error('Test failed with unknown error')\n }\n throw error\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAeO,IAAM,oBAAN,MAAwB;AAAA,EAG7B,YAAY,iBAAmC;AAC7C,SAAK,kBAAkB,mBAAmB,IAAI,gBAAgB;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAyB;AACpC,QAAI;AACF,aAAO,KAAK,yCAAyC;AAGrD,YAAM,UAAU,QAAQ,IAAI;AAC5B,aAAO,KAAK,eAAe,OAAO,EAAE;AAGpC,YAAM,WAAW,MAAM,KAAK,gBAAgB,aAAa;AAGzD,UAAI,SAAS,mBAAmB,QAAW;AACzC,eAAO,KAAK,mDAAmD;AAAA,MACjE,WAAW,SAAS,mBAAmB,IAAI;AACzC,eAAO,KAAK,6BAA6B;AAAA,MAC3C,OAAO;AACL,eAAO,KAAK,YAAY,SAAS,cAAc,GAAG;AAAA,MACpD;AAEA,aAAO,KAAK,EAAE;AACd,aAAO,KAAK,2BAA2B;AAGvC,YAAM,WAAW;AAAA,QACf,EAAE,QAAQ,aAAa,OAAO,gBAAgB,SAAS,CAAC,EAAE;AAAA,QAC1D,EAAE,QAAQ,aAAa,OAAO,gBAAgB,SAAS,EAAE,MAAM,MAAM,UAAU,IAAI,EAAE;AAAA,QACrF,EAAE,QAAQ,gBAAgB,OAAO,kBAAkB,SAAS,CAAC,EAAE;AAAA,MACjE;AAEA,iBAAW,WAAW,UAAU;AAC9B,cAAM,UAAU,SAAS,mBAAmB,SACxC,EAAE,GAAG,QAAQ,SAAS,QAAQ,SAAS,eAAe,IACtD,QAAQ;AAEZ,cAAM,eAAe;AAAA,UACnB,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAEA,cAAM,SAAS,QAAQ,QAAQ,OAAO,UAAU;AAChD,eAAO,KAAK,KAAK,QAAQ,KAAK,GAAG,MAAM,KAAK,QAAQ,MAAM,EAAE;AAC5D,eAAO,QAAQ,QAAQ,YAAY,EAAE;AACrC,eAAO,KAAK,EAAE;AAAA,MAChB;AAEA,aAAO,KAAK,+DAA+D;AAC3E,aAAO,QAAQ,iBAAiB;AAAA,IAElC,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,eAAO,MAAM,gBAAgB,MAAM,OAAO,EAAE;AAAA,MAC9C,OAAO;AACL,eAAO,MAAM,gCAAgC;AAAA,MAC/C;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- detectITerm2,
3
+ detectITerm22 as detectITerm2,
4
4
  logger,
5
5
  openMultipleTerminalWindows
6
- } from "./chunk-VT4PDUYT.js";
6
+ } from "./chunk-H2SSF24U.js";
7
7
 
8
8
  // src/commands/test-tabs.ts
9
9
  var TestTabsCommand = class {
@@ -64,4 +64,4 @@ var TestTabsCommand = class {
64
64
  export {
65
65
  TestTabsCommand
66
66
  };
67
- //# sourceMappingURL=test-tabs-D3POYOJ5.js.map
67
+ //# sourceMappingURL=test-tabs-YDWMWTVA.js.map
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ProcessManager
4
- } from "./chunk-G5V75JD5.js";
5
- import "./chunk-LLHXQS3C.js";
6
- import "./chunk-4FGEGQW4.js";
4
+ } from "./chunk-5PNZBH6V.js";
5
+ import "./chunk-HLDY5S4C.js";
6
+ import "./chunk-3RXYOBME.js";
7
7
  import {
8
8
  SettingsManager
9
- } from "./chunk-7VHJNVLF.js";
10
- import "./chunk-KB64WNBZ.js";
11
- import "./chunk-6MLEBAYZ.js";
9
+ } from "./chunk-ET6A2JR4.js";
10
+ import "./chunk-YRCEOQPX.js";
11
+ import "./chunk-ZAXRQLK3.js";
12
12
  import {
13
13
  logger
14
- } from "./chunk-VT4PDUYT.js";
14
+ } from "./chunk-H2SSF24U.js";
15
15
 
16
16
  // src/commands/test-webserver.ts
17
17
  var TestWebserverCommand = class {
@@ -81,4 +81,4 @@ var TestWebserverCommand = class {
81
81
  export {
82
82
  TestWebserverCommand
83
83
  };
84
- //# sourceMappingURL=test-webserver-NZ3JTVLL.js.map
84
+ //# sourceMappingURL=test-webserver-QI3QQFZ3.js.map
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ buildCommandSequence,
4
+ logger
5
+ } from "./chunk-H2SSF24U.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-7ZTA3BDI.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":[]}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  UpdateNotifier
4
- } from "./chunk-NGJZ4TOU.js";
4
+ } from "./chunk-RBYTXYGD.js";
5
5
  import {
6
6
  detectInstallationMethod
7
- } from "./chunk-EWJFUFPT.js";
7
+ } from "./chunk-NDSGJZI2.js";
8
8
  import {
9
9
  logger
10
- } from "./chunk-VT4PDUYT.js";
10
+ } from "./chunk-H2SSF24U.js";
11
11
 
12
12
  // src/commands/update.ts
13
13
  import { spawn } from "child_process";
@@ -82,4 +82,4 @@ var UpdateCommand = class {
82
82
  export {
83
83
  UpdateCommand
84
84
  };
85
- //# sourceMappingURL=update-HJKDYA3F.js.map
85
+ //# sourceMappingURL=update-XLW7R7FL.js.map
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  UpdateNotifier,
4
4
  checkAndNotifyUpdate
5
- } from "./chunk-NGJZ4TOU.js";
6
- import "./chunk-VT4PDUYT.js";
5
+ } from "./chunk-RBYTXYGD.js";
6
+ import "./chunk-H2SSF24U.js";
7
7
  export {
8
8
  UpdateNotifier,
9
9
  checkAndNotifyUpdate
10
10
  };
11
- //# sourceMappingURL=update-notifier-LBAUOOLM.js.map
11
+ //# sourceMappingURL=update-notifier-EYLAXZAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IdentifierParser
4
- } from "./chunk-63QWFWH3.js";
5
- import {
6
- GitWorktreeManager
7
- } from "./chunk-I5T677EA.js";
4
+ } from "./chunk-UDCI3QTS.js";
8
5
  import {
9
6
  getInstallHint,
10
7
  isIdeAvailable
11
- } from "./chunk-O7VL5N6S.js";
8
+ } from "./chunk-K7R5QY6C.js";
12
9
  import {
13
- extractIssueNumber
14
- } from "./chunk-4FGEGQW4.js";
15
- import "./chunk-7VHJNVLF.js";
16
- import "./chunk-KB64WNBZ.js";
17
- import "./chunk-6MLEBAYZ.js";
10
+ GitWorktreeManager
11
+ } from "./chunk-LE2NOUTN.js";
18
12
  import {
19
13
  waitForKeypress
20
- } from "./chunk-7JDMYTFZ.js";
14
+ } from "./chunk-CV47VCMQ.js";
15
+ import {
16
+ extractIssueNumber
17
+ } from "./chunk-3RXYOBME.js";
18
+ import "./chunk-ET6A2JR4.js";
19
+ import "./chunk-YRCEOQPX.js";
20
+ import "./chunk-ZAXRQLK3.js";
21
21
  import {
22
22
  logger
23
- } from "./chunk-VT4PDUYT.js";
23
+ } from "./chunk-H2SSF24U.js";
24
24
 
25
25
  // src/commands/vscode.ts
26
26
  import path from "path";
@@ -161,4 +161,4 @@ var VSCodeCommand = class {
161
161
  export {
162
162
  VSCodeCommand
163
163
  };
164
- //# sourceMappingURL=vscode-6XUGHJKL.js.map
164
+ //# sourceMappingURL=vscode-TOGE5N67.js.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  FirstRunManager
4
- } from "./chunk-Q7POFB5Q.js";
5
- import "./chunk-VT4PDUYT.js";
4
+ } from "./chunk-SQYHPBFP.js";
5
+ import "./chunk-H2SSF24U.js";
6
6
 
7
7
  // src/utils/vscode-announcement.ts
8
8
  import chalk from "chalk";
@@ -43,4 +43,4 @@ function displayAnnouncementBox() {
43
43
  export {
44
44
  showVSCodeAnnouncementIfNeeded
45
45
  };
46
- //# sourceMappingURL=vscode-announcement-EQ2SKK3T.js.map
46
+ //# sourceMappingURL=vscode-announcement-NIX7O2MG.js.map
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ buildCommandSequence,
4
+ detectWSLDistro,
5
+ rgbToHex
6
+ } from "./chunk-H2SSF24U.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-Y4GUTOQ7.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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iloom/cli",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Control plane for maintaining alignment between you and Claude Code as you work across multiple issues using isolated environments, visible context, and multi-agent workflows to scale understanding, not just output",
5
5
  "keywords": [
6
6
  "ai",
@@ -81,8 +81,9 @@
81
81
  "jsonc-parser": "^3.3.1",
82
82
  "omelette": "^0.4.17",
83
83
  "ora": "^7.0.1",
84
- "string-width": "^6.1.0",
85
84
  "posthog-node": "^4.0.0",
85
+ "proper-lockfile": "^4.1.2",
86
+ "string-width": "^6.1.0",
86
87
  "uuid": "^11.1.0",
87
88
  "zod": "^3.23.8"
88
89
  },
@@ -93,6 +94,7 @@
93
94
  "@types/handlebars": "^4.1.0",
94
95
  "@types/inquirer": "^9.0.7",
95
96
  "@types/node": "^20.8.10",
97
+ "@types/proper-lockfile": "^4.1.4",
96
98
  "@types/uuid": "^10.0.0",
97
99
  "@typescript-eslint/eslint-plugin": "^8.43.0",
98
100
  "@typescript-eslint/parser": "^8.43.0",
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ClaudeContextManager
4
- } from "./chunk-E6KOWMKA.js";
5
- import "./chunk-S7PZA6IV.js";
6
- import "./chunk-UR5DGNUO.js";
7
- import "./chunk-UUEW5KWB.js";
8
- import "./chunk-7VHJNVLF.js";
9
- import "./chunk-6MLEBAYZ.js";
10
- import "./chunk-VT4PDUYT.js";
11
- export {
12
- ClaudeContextManager
13
- };
14
- //# sourceMappingURL=ClaudeContextManager-66GR4BGM.js.map
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ClaudeService
4
- } from "./chunk-S7PZA6IV.js";
5
- import "./chunk-UR5DGNUO.js";
6
- import "./chunk-UUEW5KWB.js";
7
- import "./chunk-7VHJNVLF.js";
8
- import "./chunk-6MLEBAYZ.js";
9
- import "./chunk-VT4PDUYT.js";
10
- export {
11
- ClaudeService
12
- };
13
- //# sourceMappingURL=ClaudeService-7KM5NA5Z.js.map
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- GitHubService
4
- } from "./chunk-KXDRI47U.js";
5
- import "./chunk-VG45TUYK.js";
6
- import "./chunk-6MLEBAYZ.js";
7
- import "./chunk-7JDMYTFZ.js";
8
- import "./chunk-VT4PDUYT.js";
9
- export {
10
- GitHubService
11
- };
12
- //# sourceMappingURL=GitHubService-MEHKHUQP.js.map
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- IssueTrackerFactory
4
- } from "./chunk-UKBAJ2QQ.js";
5
- import "./chunk-HEXKPKCK.js";
6
- import "./chunk-KXDRI47U.js";
7
- import "./chunk-VG45TUYK.js";
8
- import "./chunk-6MLEBAYZ.js";
9
- import "./chunk-7JDMYTFZ.js";
10
- import "./chunk-VT4PDUYT.js";
11
- export {
12
- IssueTrackerFactory
13
- };
14
- //# sourceMappingURL=IssueTrackerFactory-NG53YX5S.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/LoomLauncher.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { openTerminalWindow, openMultipleTerminalWindows } from '../utils/terminal.js'\nimport type { TerminalWindowOptions } from '../utils/terminal.js'\nimport { openIdeWindow } from '../utils/ide.js'\nimport { generateColorFromBranchName, hexToRgb } from '../utils/color.js'\nimport { getLogger } from '../utils/logger-context.js'\nimport { ClaudeContextManager } from './ClaudeContextManager.js'\nimport type { SettingsManager } from './SettingsManager.js'\nimport type { Capability } from '../types/loom.js'\nimport { getDotenvFlowFiles } from '../utils/env.js'\nimport { getExecutablePath } from '../utils/cli-overrides.js'\n\nexport interface LaunchLoomOptions {\n\tenableClaude: boolean\n\tenableCode: boolean\n\tenableDevServer: boolean\n\tenableTerminal: boolean\n\tworktreePath: string\n\tbranchName: string\n\tport?: number\n\tcapabilities: Capability[]\n\tworkflowType: 'issue' | 'pr' | 'regular'\n\tidentifier: string | number\n\ttitle?: string\n\toneShot?: import('../types/index.js').OneShotMode\n\tsetArguments?: string[] // Raw --set arguments to forward\n\texecutablePath?: string // Executable path to use for spin command\n\tsourceEnvOnStart?: boolean // defaults to false if undefined\n\tcolorTerminal?: boolean // defaults to true if undefined\n\tcolorHex?: string // Pre-calculated hex color from metadata, avoids recalculation\n}\n\n/**\n * LoomLauncher orchestrates opening loom components\n */\nexport class LoomLauncher {\n\tprivate claudeContext: ClaudeContextManager\n\tprivate settings?: SettingsManager\n\n\tconstructor(claudeContext?: ClaudeContextManager, settings?: SettingsManager) {\n\t\tthis.claudeContext = claudeContext ?? new ClaudeContextManager()\n\t\tif (settings !== undefined) {\n\t\t\tthis.settings = settings\n\t\t}\n\t}\n\n\t/**\n\t * Launch loom components based on individual flags\n\t */\n\tasync launchLoom(options: LaunchLoomOptions): Promise<void> {\n\t\tconst { enableClaude, enableCode, enableDevServer, enableTerminal } = options\n\n\t\tgetLogger().debug(`Launching loom components: Claude=${enableClaude}, Code=${enableCode}, DevServer=${enableDevServer}, Terminal=${enableTerminal}`)\n\n\t\tconst launchPromises: Promise<void>[] = []\n\n\t\t// Launch VSCode if enabled\n\t\tif (enableCode) {\n\t\t\tgetLogger().debug('Launching VSCode')\n\t\t\tlaunchPromises.push(this.launchVSCode(options))\n\t\t}\n\n\t\t// Build array of terminals to launch\n\t\tconst terminalsToLaunch: Array<{\n\t\t\ttype: 'claude' | 'devServer' | 'terminal'\n\t\t\toptions: TerminalWindowOptions\n\t\t}> = []\n\n\t\tif (enableDevServer) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'devServer',\n\t\t\t\toptions: this.buildDevServerTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableTerminal) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'terminal',\n\t\t\t\toptions: this.buildStandaloneTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableClaude) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'claude',\n\t\t\t\toptions: await this.buildClaudeTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\t// Launch terminals based on count\n\t\tif (terminalsToLaunch.length > 1) {\n\t\t\t// Multiple terminals - launch as tabs in single window\n\t\t\tgetLogger().debug(`Launching ${terminalsToLaunch.length} terminals in single window`)\n\t\t\tlaunchPromises.push(this.launchMultipleTerminals(terminalsToLaunch, options))\n\t\t} else if (terminalsToLaunch.length === 1) {\n\t\t\t// Single terminal - launch standalone\n\t\t\tconst terminal = terminalsToLaunch[0]\n\t\t\tif (!terminal) {\n\t\t\t\tthrow new Error('Terminal configuration is undefined')\n\t\t\t}\n\t\t\tconst terminalType = terminal.type\n\t\t\tgetLogger().debug(`Launching single ${terminalType} terminal`)\n\n\t\t\tif (terminalType === 'claude') {\n\t\t\t\tlaunchPromises.push(this.launchClaudeTerminal(options))\n\t\t\t} else if (terminalType === 'devServer') {\n\t\t\t\tlaunchPromises.push(this.launchDevServerTerminal(options))\n\t\t\t} else {\n\t\t\t\tlaunchPromises.push(this.launchStandaloneTerminal(options))\n\t\t\t}\n\t\t}\n\n\t\t// Wait for all components to launch\n\t\tawait Promise.all(launchPromises)\n\n\t\tgetLogger().success('loom launched successfully')\n\t}\n\n\t/**\n\t * Launch IDE (VSCode or configured alternative)\n\t */\n\tprivate async launchVSCode(options: LaunchLoomOptions): Promise<void> {\n\t\tconst ideConfig = await this.settings?.loadSettings().then((s) => s.ide)\n\t\tawait openIdeWindow(options.worktreePath, ideConfig)\n\t\tgetLogger().info('IDE opened')\n\t}\n\n\t/**\n\t * Launch Claude terminal\n\t */\n\tprivate async launchClaudeTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\tawait this.claudeContext.launchWithContext({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\ttype: options.workflowType,\n\t\t\tidentifier: options.identifier,\n\t\t\tbranchName: options.branchName,\n\t\t\t...(options.title && { title: options.title }),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t\toneShot: options.oneShot ?? 'default',\n\t\t\t...(options.setArguments && { setArguments: options.setArguments }),\n\t\t\t...(options.executablePath && { executablePath: options.executablePath }),\n\t\t})\n\t\tgetLogger().info('Claude terminal opened')\n\t}\n\n\t/**\n\t * Launch dev server terminal\n\t * Runs `il dev-server [identifier]` which handles env loading internally\n\t */\n\tprivate async launchDevServerTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\t// Build dev-server command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst devServerIdentifier = String(options.identifier)\n\t\tconst devServerCommand = `${executable} dev-server ${devServerIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\t// il dev-server handles env loading internally, so no includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Dev server terminal opened')\n\t}\n\n\t/**\n\t * Launch standalone terminal running `il shell <identifier>`\n\t */\n\tprivate async launchStandaloneTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\t// Build shell command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Standalone terminal opened')\n\t}\n\n\t/**\n\t * Build terminal options for Claude\n\t */\n\tprivate async buildClaudeTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): Promise<TerminalWindowOptions> {\n\t\tconst hasEnvFile = this.hasAnyEnvFiles(options.worktreePath)\n\t\tconst claudeTitle = `Claude - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\tconst executable = options.executablePath ?? 'iloom'\n\t\tlet claudeCommand = `${executable} spin`\n\t\tif (options.oneShot !== undefined && options.oneShot !== 'default') {\n\t\t\tclaudeCommand += ` --one-shot=${options.oneShot}`\n\t\t}\n\t\tif (options.setArguments && options.setArguments.length > 0) {\n\t\t\tfor (const setArg of options.setArguments) {\n\t\t\t\tclaudeCommand += ` --set ${setArg}`\n\t\t\t}\n\t\t}\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: claudeCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: claudeTitle,\n\t\t\tincludeEnvSetup: (options.sourceEnvOnStart ?? false) && hasEnvFile,\n\t\t\t...(options.port !== undefined && { port: options.port, includePortExport: true }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for dev server\n\t * Uses `il dev-server [identifier]` which handles env loading internally\n\t */\n\tprivate buildDevServerTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): TerminalWindowOptions {\n\t\t// Build dev-server command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst devServerIdentifier = String(options.identifier)\n\t\tconst devServerCommand = `${executable} dev-server ${devServerIdentifier}`\n\n\t\tconst devServerTitle = `Dev Server - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: devServerTitle,\n\t\t\t// il dev-server handles env loading internally\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for standalone terminal\n\t * Runs `il shell <identifier>` which handles env loading internally\n\t */\n\tprivate buildStandaloneTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): TerminalWindowOptions {\n\t\tconst terminalTitle = `Terminal - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Build shell command with identifier\n\t\t// Use the same executable path pattern as buildClaudeTerminalOptions\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: terminalTitle,\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Launch multiple terminals (2+) as tabs in single window\n\t */\n\tprivate async launchMultipleTerminals(\n\t\tterminals: Array<{ type: string; options: TerminalWindowOptions }>,\n\t\t_options: LaunchLoomOptions\n\t): Promise<void> {\n\t\tconst terminalOptions = terminals.map((t) => t.options)\n\n\t\tawait openMultipleTerminalWindows(terminalOptions)\n\n\t\tconst terminalTypes = terminals.map((t) => t.type).join(' + ')\n\t\tgetLogger().info(`Multiple terminals opened: ${terminalTypes}`)\n\t}\n\n\t/**\n\t * Check if any dotenv-flow files exist in the workspace\n\t * Checks all files: .env, .env.local, .env.{NODE_ENV}, .env.{NODE_ENV}.local\n\t */\n\tprivate hasAnyEnvFiles(workspacePath: string): boolean {\n\t\tconst envFiles = getDotenvFlowFiles()\n\t\treturn envFiles.some(file => existsSync(join(workspacePath, file)))\n\t}\n\n\t/**\n\t * Format identifier for terminal tab titles\n\t */\n\tprivate formatIdentifier(workflowType: 'issue' | 'pr' | 'regular', identifier: string | number): string {\n\t\tif (workflowType === 'issue') {\n\t\t\treturn `Issue #${identifier}`\n\t\t} else if (workflowType === 'pr') {\n\t\t\treturn `PR #${identifier}`\n\t\t} else {\n\t\t\treturn `Branch: ${identifier}`\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- MetadataManager
4
- } from "./chunk-KB64WNBZ.js";
5
- import "./chunk-6MLEBAYZ.js";
6
- import "./chunk-VT4PDUYT.js";
7
- export {
8
- MetadataManager
9
- };
10
- //# sourceMappingURL=MetadataManager-5QZSTKNN.js.map