@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
package/LICENSE CHANGED
@@ -20,7 +20,7 @@ it within your organization. What is prohibited is redistributing or offering
20
20
  access to this software (in original or modified form) as part of something
21
21
  you sell or provide to others.
22
22
 
23
- Change Date: 2030-02-25
23
+ Change Date: 2030-03-01
24
24
  Change License: Apache License 2.0
25
25
 
26
26
  For clarity, on or after the Change Date, the Licensed Work will
package/README.md CHANGED
@@ -668,7 +668,7 @@ This is an early-stage product.
668
668
 
669
669
  **Requirements:**
670
670
 
671
- * ✅ **OS:** macOS (Fully supported). ⚠️ Linux/Windows are untested.
671
+ * ✅ **OS:** macOS (fully supported), Linux (GUI terminals + tmux for headless), WSL (Windows Terminal via [setup guide](docs/windows-wsl-guide.md)). ⚠️ Native Windows is unsupported.
672
672
 
673
673
  * ✅ **Runtime:** Node.js 16+, Git 2.5+.
674
674
 
@@ -726,6 +726,8 @@ Acknowledgments
726
726
  ----------------
727
727
 
728
728
  - [@NoahCardoza](https://github.com/NoahCardoza) — Jira Cloud integration (PR [#588](https://github.com/iloom-ai/iloom-cli/pull/588)): JiraApiClient, JiraIssueTracker, ADF/Markdown conversion, MCP provider, sprint/mine filtering, and `il issues` Jira support.
729
+ - [@TickTockBent](https://github.com/TickTockBent) — Linux, WSL, and tmux terminal support (PR [#796](https://github.com/iloom-ai/iloom-cli/pull/796)): strategy-pattern terminal backends, GUI-to-tmux fallback for headless environments, WSL detection, and cross-platform terminal launching.
730
+ - [@rexsilex](https://github.com/rexsilex) — Original Linux/WSL terminal support design (PR [#649](https://github.com/iloom-ai/iloom-cli/pull/649)): pioneered the strategy pattern and backend interface that inspired the final implementation.
729
731
 
730
732
  License & Name
731
733
  --------------
@@ -738,7 +740,7 @@ License & Name
738
740
 
739
741
  * ❌ You cannot resell iloom itself as a product or SaaS.
740
742
 
741
- * Converts to Apache 2.0 on 2030-02-25.
743
+ * Converts to Apache 2.0 on 2030-03-01.
742
744
 
743
745
 
744
746
  See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
@@ -3,12 +3,12 @@ import {
3
3
  ClaudeBranchNameStrategy,
4
4
  DefaultBranchNamingService,
5
5
  SimpleBranchNameStrategy
6
- } from "./chunk-QVLPWNE3.js";
7
- import "./chunk-6MLEBAYZ.js";
8
- import "./chunk-VT4PDUYT.js";
6
+ } from "./chunk-7NFCGKZT.js";
7
+ import "./chunk-ZAXRQLK3.js";
8
+ import "./chunk-H2SSF24U.js";
9
9
  export {
10
10
  ClaudeBranchNameStrategy,
11
11
  DefaultBranchNamingService,
12
12
  SimpleBranchNameStrategy
13
13
  };
14
- //# sourceMappingURL=BranchNamingService-25KSZAEM.js.map
14
+ //# sourceMappingURL=BranchNamingService-XBCO747L.js.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ClaudeContextManager
4
+ } from "./chunk-6YVJVUR4.js";
5
+ import "./chunk-KQFIGI37.js";
6
+ import "./chunk-Y3RX7LZT.js";
7
+ import "./chunk-WG4MLJ6J.js";
8
+ import "./chunk-ET6A2JR4.js";
9
+ import "./chunk-ZAXRQLK3.js";
10
+ import "./chunk-H2SSF24U.js";
11
+ export {
12
+ ClaudeContextManager
13
+ };
14
+ //# sourceMappingURL=ClaudeContextManager-SXDCWDJA.js.map
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ClaudeService
4
+ } from "./chunk-KQFIGI37.js";
5
+ import "./chunk-Y3RX7LZT.js";
6
+ import "./chunk-WG4MLJ6J.js";
7
+ import "./chunk-ET6A2JR4.js";
8
+ import "./chunk-ZAXRQLK3.js";
9
+ import "./chunk-H2SSF24U.js";
10
+ export {
11
+ ClaudeService
12
+ };
13
+ //# sourceMappingURL=ClaudeService-6E6MCGJE.js.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ GitHubService
4
+ } from "./chunk-LHDD4JHC.js";
5
+ import "./chunk-NH3QZYE5.js";
6
+ import "./chunk-CV47VCMQ.js";
7
+ import "./chunk-ZAXRQLK3.js";
8
+ import "./chunk-H2SSF24U.js";
9
+ export {
10
+ GitHubService
11
+ };
12
+ //# sourceMappingURL=GitHubService-2R5GQG4K.js.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ IssueTrackerFactory
4
+ } from "./chunk-UHIBKD73.js";
5
+ import "./chunk-5LTID2AF.js";
6
+ import "./chunk-LHDD4JHC.js";
7
+ import "./chunk-NH3QZYE5.js";
8
+ import "./chunk-CV47VCMQ.js";
9
+ import "./chunk-ZAXRQLK3.js";
10
+ import "./chunk-H2SSF24U.js";
11
+ export {
12
+ IssueTrackerFactory
13
+ };
14
+ //# sourceMappingURL=IssueTrackerFactory-XN6MQ4UN.js.map
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  openIdeWindow
4
- } from "./chunk-O7VL5N6S.js";
4
+ } from "./chunk-K7R5QY6C.js";
5
5
  import {
6
6
  ClaudeContextManager
7
- } from "./chunk-E6KOWMKA.js";
8
- import "./chunk-S7PZA6IV.js";
9
- import "./chunk-UR5DGNUO.js";
10
- import "./chunk-UUEW5KWB.js";
7
+ } from "./chunk-6YVJVUR4.js";
11
8
  import {
12
9
  getExecutablePath
13
10
  } from "./chunk-GYCR2LOU.js";
14
- import "./chunk-7VHJNVLF.js";
15
- import {
16
- getLogger
17
- } from "./chunk-6MLEBAYZ.js";
18
11
  import {
19
12
  generateColorFromBranchName,
20
13
  hexToRgb
21
- } from "./chunk-433MOLAU.js";
14
+ } from "./chunk-7OCGBJLR.js";
15
+ import "./chunk-KQFIGI37.js";
16
+ import "./chunk-Y3RX7LZT.js";
17
+ import "./chunk-WG4MLJ6J.js";
18
+ import "./chunk-ET6A2JR4.js";
19
+ import {
20
+ getLogger
21
+ } from "./chunk-ZAXRQLK3.js";
22
22
  import {
23
23
  getDotenvFlowFiles,
24
24
  openMultipleTerminalWindows,
25
25
  openTerminalWindow
26
- } from "./chunk-VT4PDUYT.js";
26
+ } from "./chunk-H2SSF24U.js";
27
27
 
28
28
  // src/lib/LoomLauncher.ts
29
29
  import { existsSync } from "fs";
@@ -167,6 +167,9 @@ var LoomLauncher = class {
167
167
  claudeCommand += ` --set ${setArg}`;
168
168
  }
169
169
  }
170
+ if (options.complexity) {
171
+ claudeCommand += ` --complexity=${options.complexity}`;
172
+ }
170
173
  const backgroundColor = options.colorTerminal ?? true ? options.colorHex ? hexToRgb(options.colorHex) : generateColorFromBranchName(options.branchName).rgb : void 0;
171
174
  return {
172
175
  workspacePath: options.worktreePath,
@@ -252,4 +255,4 @@ var LoomLauncher = class {
252
255
  export {
253
256
  LoomLauncher
254
257
  };
255
- //# sourceMappingURL=LoomLauncher-TDLZSYG2.js.map
258
+ //# sourceMappingURL=LoomLauncher-5AZU2F5I.js.map
@@ -0,0 +1 @@
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\tcomplexity?: import('../types/index.js').ComplexityOverride\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\t\tif (options.complexity) {\n\t\t\tclaudeCommand += ` --complexity=${options.complexity}`\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":[]}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ MetadataManager
4
+ } from "./chunk-YRCEOQPX.js";
5
+ import "./chunk-ZAXRQLK3.js";
6
+ import "./chunk-H2SSF24U.js";
7
+ export {
8
+ MetadataManager
9
+ };
10
+ //# sourceMappingURL=MetadataManager-CMQQTFLQ.js.map
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ProjectCapabilityDetector
4
+ } from "./chunk-G2MNSPA4.js";
5
+ import "./chunk-NCPZYQ4B.js";
6
+ import "./chunk-ZAXRQLK3.js";
7
+ import "./chunk-H2SSF24U.js";
8
+ export {
9
+ ProjectCapabilityDetector
10
+ };
11
+ //# sourceMappingURL=ProjectCapabilityDetector-IC6NAFGY.js.map
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  PromptTemplateManager,
4
4
  buildReviewTemplateVariables
5
- } from "./chunk-UUEW5KWB.js";
6
- import "./chunk-VT4PDUYT.js";
5
+ } from "./chunk-WG4MLJ6J.js";
6
+ import "./chunk-H2SSF24U.js";
7
7
  export {
8
8
  PromptTemplateManager,
9
9
  buildReviewTemplateVariables
10
10
  };
11
- //# sourceMappingURL=PromptTemplateManager-YOE2SIPG.js.map
11
+ //# sourceMappingURL=PromptTemplateManager-T5VTLJP3.js.map
package/dist/README.md CHANGED
@@ -668,7 +668,7 @@ This is an early-stage product.
668
668
 
669
669
  **Requirements:**
670
670
 
671
- * ✅ **OS:** macOS (Fully supported). ⚠️ Linux/Windows are untested.
671
+ * ✅ **OS:** macOS (fully supported), Linux (GUI terminals + tmux for headless), WSL (Windows Terminal via [setup guide](docs/windows-wsl-guide.md)). ⚠️ Native Windows is unsupported.
672
672
 
673
673
  * ✅ **Runtime:** Node.js 16+, Git 2.5+.
674
674
 
@@ -726,6 +726,8 @@ Acknowledgments
726
726
  ----------------
727
727
 
728
728
  - [@NoahCardoza](https://github.com/NoahCardoza) — Jira Cloud integration (PR [#588](https://github.com/iloom-ai/iloom-cli/pull/588)): JiraApiClient, JiraIssueTracker, ADF/Markdown conversion, MCP provider, sprint/mine filtering, and `il issues` Jira support.
729
+ - [@TickTockBent](https://github.com/TickTockBent) — Linux, WSL, and tmux terminal support (PR [#796](https://github.com/iloom-ai/iloom-cli/pull/796)): strategy-pattern terminal backends, GUI-to-tmux fallback for headless environments, WSL detection, and cross-platform terminal launching.
730
+ - [@rexsilex](https://github.com/rexsilex) — Original Linux/WSL terminal support design (PR [#649](https://github.com/iloom-ai/iloom-cli/pull/649)): pioneered the strategy pattern and backend interface that inspired the final implementation.
729
731
 
730
732
  License & Name
731
733
  --------------
@@ -738,7 +740,7 @@ License & Name
738
740
 
739
741
  * ❌ You cannot resell iloom itself as a product or SaaS.
740
742
 
741
- * Converts to Apache 2.0 on 2030-02-25.
743
+ * Converts to Apache 2.0 on 2030-03-01.
742
744
 
743
745
 
744
746
  See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
@@ -16,8 +16,8 @@ import {
16
16
  WorkflowPermissionSchemaNoDefaults,
17
17
  WorkflowsSettingsSchema,
18
18
  WorkflowsSettingsSchemaNoDefaults
19
- } from "./chunk-7VHJNVLF.js";
20
- import "./chunk-VT4PDUYT.js";
19
+ } from "./chunk-ET6A2JR4.js";
20
+ import "./chunk-H2SSF24U.js";
21
21
  export {
22
22
  AgentSettingsSchema,
23
23
  BaseAgentSettingsSchema,
@@ -36,4 +36,4 @@ export {
36
36
  WorkflowsSettingsSchema,
37
37
  WorkflowsSettingsSchemaNoDefaults
38
38
  };
39
- //# sourceMappingURL=SettingsManager-FNKCOZMQ.js.map
39
+ //# sourceMappingURL=SettingsManager-WQ5NSGAH.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SettingsMigrationManager
4
+ } from "./chunk-IDCE26KD.js";
5
+ import "./chunk-CV47VCMQ.js";
6
+ import "./chunk-H2SSF24U.js";
7
+ export {
8
+ SettingsMigrationManager
9
+ };
10
+ //# sourceMappingURL=SettingsMigrationManager-S6J7OHUH.js.map
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: iloom-code-reviewer
3
- description: Use this agent to review uncommitted code changes.
3
+ description: Use this agent to review code changes.
4
4
  model: opus
5
5
  color: cyan
6
6
  ---
7
7
 
8
- You are an expert code reviewer. Your task is to analyze uncommitted code changes and provide actionable feedback.
8
+ You are an expert code reviewer. Your task is to analyze code changes and provide actionable feedback.
9
9
 
10
10
  {{#if SWARM_MODE}}
11
11
  ## Swarm Mode
@@ -77,7 +77,19 @@ Codex review configured with model: {{REVIEW_CODEX_MODEL}}
77
77
 
78
78
  **ORCHESTRATOR: Execute the following steps:**
79
79
 
80
- 1. Gather context: Run `git status` to identify all changes, then run `git diff` for tracked file changes, then read all CLAUDE.md files. **IMPORTANT:** `git diff` does NOT show untracked (new) files. For any new untracked files listed by `git status`, you MUST read them directly using the Read tool to include their contents in the review.
80
+ 1. Determine what to review and gather context:
81
+ a. Run `git status --porcelain` to check for uncommitted changes
82
+ b. If there ARE uncommitted changes, use `git diff` to get the diff of tracked file changes
83
+ c. If there are NO uncommitted changes:
84
+ - Get current branch: `git branch --show-current`
85
+ - If on a protected branch (main, master, develop) or detached HEAD, there is nothing to review — inform the user
86
+ - If on a feature branch:
87
+ - Try to find remote tracking: `git rev-parse --abbrev-ref @{upstream} 2>/dev/null`
88
+ - If upstream exists: use `git diff $(git merge-base HEAD <upstream>)` to see changes not yet on remote
89
+ - If no upstream: use `git diff $(git merge-base HEAD main)` to see changes since diverging from main (try `master` if `main` doesn't exist)
90
+ d. If the diff is empty, inform the user there are no changes to review
91
+ e. Read all CLAUDE.md files for project guidelines
92
+ f. **IMPORTANT:** `git diff` does NOT show untracked (new) files. For any new untracked files listed by `git status`, you MUST read them directly using the Read tool to include their contents in the review.
81
93
  2. Execute 5 parallel Task agents (below) with the git diff and CLAUDE.md content
82
94
 
83
95
  ### Agent 1: Compliance Review
@@ -252,10 +264,25 @@ Summary: X critical, Y warnings, Z suggestions
252
264
  {{#if HAS_REVIEW_GEMINI}}
253
265
  ## Review Process
254
266
 
267
+ ### Step 0 - Determine What to Review
268
+
269
+ Before gathering code for review, determine what changes to review:
270
+
271
+ 1. Check for uncommitted changes: `git status --porcelain`
272
+ 2. If there ARE uncommitted changes, use `git diff` to review them
273
+ 3. If there are NO uncommitted changes:
274
+ a. Get current branch: `git branch --show-current`
275
+ b. If on a protected branch (main, master, develop) or detached HEAD, there is nothing to review — inform the user
276
+ c. If on a feature branch:
277
+ - Try to find remote tracking: `git rev-parse --abbrev-ref @{upstream} 2>/dev/null`
278
+ - If upstream exists: use `git diff $(git merge-base HEAD <upstream>)` to see changes not yet on remote
279
+ - If no upstream: use `git diff $(git merge-base HEAD main)` to see changes since diverging from main (try `master` if `main` doesn't exist)
280
+ 4. If the diff is empty, inform the user there are no changes to review
281
+
255
282
  ### Step 1 - Gather Context
256
283
 
257
- 1. Run `git status` to see all uncommitted changes (including untracked new files)
258
- 2. Run `git diff` to get the full diff of tracked file changes (save this - you will need it)
284
+ 1. Run `git status` to see all changes (including untracked new files)
285
+ 2. Run the appropriate git diff command (determined in Step 0) to get the full diff (save this - you will need it)
259
286
  3. **IMPORTANT:** `git diff` does NOT show untracked (new) files. For any new untracked files listed by `git status`, read them directly using the Read tool and include their contents alongside the diff for review.
260
287
  4. Search for CLAUDE.md files in the repository for project guidelines using Glob tool
261
288
 
@@ -495,10 +522,25 @@ If ANY critical issues (95-100 confidence) are found from Gemini review:
495
522
  {{#if HAS_REVIEW_CODEX}}
496
523
  ## Review Process
497
524
 
525
+ ### Step 0 - Determine What to Review
526
+
527
+ Before gathering code for review, determine what changes to review:
528
+
529
+ 1. Check for uncommitted changes: `git status --porcelain`
530
+ 2. If there ARE uncommitted changes, use `git diff` to review them
531
+ 3. If there are NO uncommitted changes:
532
+ a. Get current branch: `git branch --show-current`
533
+ b. If on a protected branch (main, master, develop) or detached HEAD, there is nothing to review — inform the user
534
+ c. If on a feature branch:
535
+ - Try to find remote tracking: `git rev-parse --abbrev-ref @{upstream} 2>/dev/null`
536
+ - If upstream exists: use `git diff $(git merge-base HEAD <upstream>)` to see changes not yet on remote
537
+ - If no upstream: use `git diff $(git merge-base HEAD main)` to see changes since diverging from main (try `master` if `main` doesn't exist)
538
+ 4. If the diff is empty, inform the user there are no changes to review
539
+
498
540
  ### Step 1 - Gather Context
499
541
 
500
- 1. Run `git status` to see all uncommitted changes (including untracked new files)
501
- 2. Run `git diff` to get the full diff of tracked file changes (save this - you will need it)
542
+ 1. Run `git status` to see all changes (including untracked new files)
543
+ 2. Run the appropriate git diff command (determined in Step 0) to get the full diff (save this - you will need it)
502
544
  3. **IMPORTANT:** `git diff` does NOT show untracked (new) files. For any new untracked files listed by `git status`, read them directly using the Read tool and include their contents alongside the diff for review.
503
545
  4. Search for CLAUDE.md files in the repository for project guidelines using Glob tool
504
546
 
@@ -748,4 +790,4 @@ No review providers are configured. To enable code review, configure providers i
748
790
  - Be specific with file paths and line numbers
749
791
  - Provide actionable recommendations
750
792
  - Acknowledge when code is well-written
751
- - Do NOT review the entire codebase - only uncommitted changes
793
+ - Do NOT review the entire codebase - only the relevant code changes
@@ -49,6 +49,9 @@ The recap panel helps users stay oriented without reading all your output. Captu
49
49
  **During planning, log:**
50
50
  - **decision**: Significant choices - "Using WebSocket instead of polling for real-time updates"
51
51
  - **assumption**: Bets you're making - "Assuming no backwards compat needed"
52
+ - **CRITICAL**: When your plan references a specific value (threshold, score range, enum, format) defined in another component:
53
+ - If verified: call `recap.add_entry({ type: 'insight', content: '[value] for [purpose] confirmed at [file:line]' })`
54
+ - If NOT verified: describe the intent instead of the value, and call `recap.add_entry({ type: 'assumption', content: 'Could not verify [value] for [purpose] — described intent instead of specific value' })`
52
55
 
53
56
  **Never log** workflow status, complexity classifications, or phase information.
54
57
 
@@ -228,6 +231,11 @@ With this analysis, you will:
228
231
  - [ ] Similar patterns: Grep for similar implementations
229
232
  - [ ] Historical: Why is the code this way? (git blame if unclear)
230
233
 
234
+ **4. Integration Contracts (if plan references other components)**
235
+ - [ ] List every specific value (score ranges, enums, formats, thresholds) your plan references from another component
236
+ - [ ] For each: verify the source with a file:line citation
237
+ - [ ] If you cannot find the source: do NOT include the value — describe the intent instead and log a recap assumption (see Recap section)
238
+
231
239
  **Output**: Document findings briefly in Section 2. One sentence per finding. File:line references required.
232
240
 
233
241
  **CONSTRAINTS:**
@@ -689,6 +697,7 @@ When including code, configuration, or examples:
689
697
  10. **Section 1 Scannable**: <5 minutes to read - ruthlessly prioritize
690
698
  11. **Section 2 Concise**: Brief, actionable, no "AI slop"
691
699
  12. **One-Sentence Rule**: Apply throughout Section 2 for descriptions and risks
700
+ 13. **No Cross-Component Fabrication**: When your plan includes a specific value (score range, threshold, enum, format) defined in another component's source, you MUST look it up and cite file:line. If you cannot find it, do NOT include the value — describe the intent instead (e.g., "use the reviewer's critical category" not "95-100") and log a recap assumption. Writing a plausible-sounding value from memory is confabulation — treat it as a hard error equivalent to citing a nonexistent file.
692
701
 
693
702
  ## Quality Assurance
694
703
 
@@ -715,6 +724,7 @@ Before submitting your combined analysis and plan, verify (DO NOT print this che
715
724
  - No "AI slop": No time estimates, rollback plans, manual testing checklists, or redundant sections
716
725
  - One-sentence descriptions used throughout Section 2
717
726
  - **FOR CROSS-CUTTING CHANGES**: Call chain is documented, ALL interfaces in chain are identified, cross-cutting impact is noted for each file
727
+ - **FOR CROSS-COMPONENT VALUES**: Scan plan for specific values (scores, thresholds, enums) sourced from other components. Each must have a file:line citation. Any value without a citation must be replaced with intent-based language (not a fabricated number) and have a corresponding `recap.add_entry({ type: 'assumption' })` call.
718
728
 
719
729
  ## Error Handling
720
730
 
@@ -48,6 +48,16 @@ The recap panel helps users stay oriented without reading all your output. Captu
48
48
  **Log these:**
49
49
  - **insight**: Technical discoveries - "Auth module depends on session middleware being initialized first"
50
50
  - **risk**: Things that could go wrong - "Removing this function breaks the CLI's --verbose flag"
51
+ - **assumption / insight**: When your analysis references a specific value (threshold, score range, enum, format) from another component:
52
+ - If verified: call `recap.add_entry({ type: 'insight', content: '[value] for [purpose] confirmed at [file:line]' })`
53
+ - If NOT verified: describe the intent instead of the value, and call `recap.add_entry({ type: 'assumption', content: 'Could not verify [value] — described intent instead' })`
54
+
55
+ **CRITICAL: Assumption quality rules:**
56
+ - **NEVER restate information from the issue title or description as an assumption.** If the issue already states something, logging it as an "assumption" adds zero value.
57
+ - Assumptions must be about genuinely **unknown or ambiguous** technical details that you're inferring from evidence.
58
+ - Good assumption: "Assuming the dropdown uses CSS position:relative based on the described layout shift behavior" - infers something NOT stated.
59
+ - Bad assumption: "Assuming the issue affects components X and Y" when the issue explicitly mentions both.
60
+ - If you have no genuine assumptions to log, **don't log any**.
51
61
 
52
62
  **Never log** workflow status, complexity classifications, or what phases you skipped.
53
63
 
@@ -314,6 +324,7 @@ Use domain-specific MCP tools when available (Figma MCP, Database MCPs, etc.) as
314
324
  - **Do NOT stop at first result** - cross-reference for critical behaviors
315
325
  - **Do NOT include irrelevant research** - this is slop
316
326
  - **Do NOT assume an operation is necessary** just because the issue describes it — verify that the system doesn't already exhibit the desired behavior without the change
327
+ - **Do NOT fabricate cross-component values** - when documenting a specific value (score range, threshold, enum, format) from another component, you MUST look it up and cite file:line. If you cannot find it, describe the intent (e.g., "the reviewer's critical threshold") instead of writing a plausible-sounding number from memory
317
328
 
318
329
  ## If this is a web front end issue:
319
330
  - Be mindful of different responsive breakpoints
@@ -609,6 +620,7 @@ Before submitting your analysis, verify:
609
620
  - [ ] Findings are organized logically and easy to follow
610
621
  - [ ] You have not detailed the solution - only identified relevant parts of the code, and potential risks, edge cases to be aware of
611
622
  - [ ] **FOR CROSS-CUTTING CHANGES**: Architectural Flow Analysis section is complete with call chain map, ALL affected interfaces listed, and implementation complexity noted
623
+ - [ ] **FOR CROSS-COMPONENT VALUES**: Every specific value (scores, thresholds, enums) referenced from other components has a file:line citation. Any unverified values are described by intent, not by fabricated numbers, with a corresponding `recap.add_entry({ type: 'assumption' })` call.
612
624
 
613
625
  ## Behavioral Constraints
614
626
 
@@ -617,6 +629,7 @@ Before submitting your analysis, verify:
617
629
  3. **Precise**: Use exact file paths, line numbers, and version numbers
618
630
  4. **Neutral Tone**: Present findings objectively without blame or judgment
619
631
  6. **Integration tests**: IMPORTANT: NEVER propose or explore writing integration tests that interact with git, the filesystem or 3rd party APIs.
632
+ 7. **No Cross-Component Fabrication**: When documenting a specific value (score range, threshold, enum, format) from another component's source, you MUST look it up and cite file:line. If you cannot find it, describe the intent instead of the value and log a recap assumption. Writing a plausible-sounding value from memory is confabulation — treat it as a hard error equivalent to citing a nonexistent file.
620
633
 
621
634
  ## Error Handling
622
635
 
@@ -54,7 +54,14 @@ recap.set_complexity({ complexity: 'simple', reason: 'Few files, low risk' })
54
54
  **Log these with add_entry:**
55
55
  - **insight**: Complexity factor discoveries - "Change requires coordinating updates across 5 TypeScript interfaces"
56
56
  - **risk**: Implementation concerns - "Large god-object file (2000+ LOC) will make changes error-prone"
57
- - **assumption**: Scope estimates - "Assuming existing test patterns can be followed without new test infrastructure"
57
+ - **assumption**: Genuinely unknown information you're inferring that affects complexity - "Assuming existing test patterns can be followed without new test infrastructure"
58
+
59
+ **CRITICAL: Assumption quality rules:**
60
+ - **NEVER restate information from the issue title or description as an assumption.** If the issue says "search results push content down in Create New Loom and Child Loom modals", logging "Assuming the issue affects both modals" is worthless - the issue already says that.
61
+ - Assumptions must be about genuinely **unknown or ambiguous** aspects that you are choosing to interpret a certain way for your assessment.
62
+ - Good assumption: "Assuming the dropdown uses CSS position:relative (not absolute) based on the described layout shift behavior" - this infers something NOT stated in the issue.
63
+ - Bad assumption: "Assuming this affects component X and component Y" when the issue explicitly mentions both X and Y.
64
+ - If you have no genuine assumptions to log, **don't log any** - zero assumptions is better than low-quality ones.
58
65
 
59
66
  **Never log** workflow status or routine metric observations.
60
67
 
@@ -52,7 +52,14 @@ The recap panel helps users stay oriented without reading all your output. Captu
52
52
  **Log these:**
53
53
  - **insight**: User need discoveries - "Users need to configure multiple environments per project"
54
54
  - **risk**: User impact concerns - "Current behavior causes data loss when session expires mid-edit"
55
- - **assumption**: Interpretations of user intent - "Assuming user wants this to work across all browsers, not just Chrome"
55
+ - **assumption**: Interpretations of genuinely ambiguous user intent - "Assuming user wants this to work across all browsers, not just Chrome"
56
+
57
+ **CRITICAL: Assumption quality rules:**
58
+ - **NEVER restate information from the issue title or description as an assumption.** If the issue already states something, logging it as an "assumption" adds zero value.
59
+ - Assumptions must be about genuinely **unknown or ambiguous** aspects where you're making an interpretive choice.
60
+ - Good assumption: "Assuming the user wants keyboard navigation support in addition to mouse interaction" - the issue didn't mention this.
61
+ - Bad assumption: "Assuming this affects the Create New Loom modal" when the issue title literally says "Create New Loom modal."
62
+ - If you have no genuine assumptions to log, **don't log any** - zero assumptions is better than restating the obvious.
56
63
 
57
64
  **Never log** workflow status, that enhancement was completed, or quality assessment results.
58
65
  {{/unless}}
@@ -45,6 +45,9 @@ The recap panel helps users stay oriented without reading all your output. Captu
45
45
  **Log these:**
46
46
  - **decision**: Significant choices - "Adding new CLI flag rather than environment variable for this config"
47
47
  - **assumption**: Bets you're making - "Assuming backwards compat not needed since atomically deployed"
48
+ - **CRITICAL**: When your plan references a specific value (threshold, score range, enum, format) defined in another component:
49
+ - If verified: call `recap.add_entry({ type: 'insight', content: '[value] for [purpose] confirmed at [file:line]' })`
50
+ - If NOT verified: describe the intent instead of the value, and call `recap.add_entry({ type: 'assumption', content: 'Could not verify [value] for [purpose] — described intent instead of specific value' })`
48
51
 
49
52
  **Never log** workflow status, phase information, or that a plan was created.
50
53
 
@@ -504,6 +507,7 @@ This section tells the orchestrator EXACTLY how to execute the implementation st
504
507
  - All file-by-file changes, test structures, and execution details go in Section 2 (collapsible)
505
508
  - Use pseudocode and comments in Section 2 - NOT full code implementations
506
509
  - Code blocks >5 lines must be wrapped in nested `<details>` tags within Section 2
510
+ - **FOR CROSS-COMPONENT VALUES**: Every specific value (scores, thresholds, enums) referenced from other components must have a file:line citation. Any value without a citation must be replaced with intent-based language and have a corresponding `recap.add_entry({ type: 'assumption' })` call.
507
511
 
508
512
 
509
513
  ## HOW TO UPDATE THE USER OF YOUR PROGRESS
@@ -521,6 +525,7 @@ This section tells the orchestrator EXACTLY how to execute the implementation st
521
525
  - **NO ASSUMPTIONS** - if something is unclear, note it in the plan
522
526
  - **NO ENHANCEMENTS** - stick strictly to stated requirements
523
527
  - **QUESTION NECESSITY** - if requirements describe writing values that already match the system's built-in defaults, the write may be unnecessary. Plan for the actual need, not the literal phrasing of the issue.
528
+ - **NO CROSS-COMPONENT FABRICATION** - when your plan includes a specific value (score range, threshold, enum, format) from another component's source, look it up and cite file:line. If you cannot find it, describe the intent (e.g., "the reviewer's critical category") instead of a plausible-sounding number. Log a recap assumption. Fabricating values is a hard error.
524
529
 
525
530
  ## Workflow
526
531
 
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ScriptCommandBase
4
+ } from "./chunk-V4STTBQD.js";
5
+ import "./chunk-UDCI3QTS.js";
6
+ import "./chunk-3GTUXW26.js";
7
+ import "./chunk-NCPZYQ4B.js";
8
+ import "./chunk-LE2NOUTN.js";
9
+ import "./chunk-3RXYOBME.js";
10
+ import "./chunk-ET6A2JR4.js";
11
+ import "./chunk-YRCEOQPX.js";
12
+ import "./chunk-ZAXRQLK3.js";
13
+ import "./chunk-H2SSF24U.js";
14
+
15
+ // src/commands/build.ts
16
+ var BuildCommand = class extends ScriptCommandBase {
17
+ getScriptName() {
18
+ return "build";
19
+ }
20
+ getScriptDisplayName() {
21
+ return "Build";
22
+ }
23
+ };
24
+ export {
25
+ BuildCommand
26
+ };
27
+ //# sourceMappingURL=build-OLS6J5KZ.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getPackageScripts
4
- } from "./chunk-YQ57ORTV.js";
4
+ } from "./chunk-NCPZYQ4B.js";
5
5
  import {
6
6
  getLogger
7
- } from "./chunk-6MLEBAYZ.js";
7
+ } from "./chunk-ZAXRQLK3.js";
8
8
 
9
9
  // src/utils/package-manager.ts
10
10
  import { execa } from "execa";
@@ -161,4 +161,4 @@ export {
161
161
  installDependencies,
162
162
  runScript
163
163
  };
164
- //# sourceMappingURL=chunk-WWKOVDWC.js.map
164
+ //# sourceMappingURL=chunk-3GTUXW26.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SettingsManager
4
- } from "./chunk-7VHJNVLF.js";
4
+ } from "./chunk-ET6A2JR4.js";
5
5
  import {
6
6
  MetadataManager
7
- } from "./chunk-KB64WNBZ.js";
7
+ } from "./chunk-YRCEOQPX.js";
8
8
  import {
9
9
  logger
10
- } from "./chunk-VT4PDUYT.js";
10
+ } from "./chunk-H2SSF24U.js";
11
11
 
12
12
  // src/utils/git.ts
13
13
  import path from "path";
@@ -375,7 +375,7 @@ async function getDefaultBranch(path2 = process.cwd()) {
375
375
  }
376
376
  async function findAllBranchesForIssue(issueNumber, path2 = process.cwd(), settingsManager) {
377
377
  if (!settingsManager) {
378
- const { SettingsManager: SM } = await import("./SettingsManager-FNKCOZMQ.js");
378
+ const { SettingsManager: SM } = await import("./SettingsManager-WQ5NSGAH.js");
379
379
  settingsManager = new SM();
380
380
  }
381
381
  const protectedBranches = await settingsManager.getProtectedBranches(path2);
@@ -738,4 +738,4 @@ export {
738
738
  removePlaceholderCommitFromHead,
739
739
  removePlaceholderCommitFromHistory
740
740
  };
741
- //# sourceMappingURL=chunk-4FGEGQW4.js.map
741
+ //# sourceMappingURL=chunk-3RXYOBME.js.map