@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/dist/cli.js CHANGED
@@ -1,100 +1,114 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-EVPZFV3K.js";
4
+ } from "./chunk-QR4FU53I.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  ResourceCleanup
8
- } from "./chunk-RJ3VBUFK.js";
9
- import "./chunk-LUKXJSRI.js";
8
+ } from "./chunk-7FIXNAUO.js";
9
+ import "./chunk-XXFSOVL3.js";
10
10
  import {
11
11
  StartCommand,
12
12
  launchFirstRunSetup,
13
13
  needsFirstRunSetup
14
- } from "./chunk-GRISNU6G.js";
14
+ } from "./chunk-TEJAGQX2.js";
15
15
  import {
16
16
  CLIIsolationManager,
17
17
  DatabaseManager,
18
18
  EnvironmentManager,
19
19
  LoomManager
20
- } from "./chunk-ZNMPGMHY.js";
20
+ } from "./chunk-XFQGI2E3.js";
21
21
  import {
22
22
  PRManager
23
- } from "./chunk-KVHIAWVT.js";
23
+ } from "./chunk-ABVMUNCD.js";
24
+ import {
25
+ IssueEnhancementService
26
+ } from "./chunk-NN5RYWXA.js";
27
+ import {
28
+ capitalizeFirstLetter
29
+ } from "./chunk-4E7LCFUG.js";
24
30
  import {
25
31
  CommitManager,
26
32
  UserAbortedCommitError,
27
33
  ValidationRunner
28
- } from "./chunk-5RPBYK5Q.js";
34
+ } from "./chunk-VUUN3KE4.js";
29
35
  import {
30
36
  BuildRunner,
31
37
  MergeManager
32
- } from "./chunk-5FJWO4IT.js";
38
+ } from "./chunk-LL6TOX3G.js";
33
39
  import {
34
40
  assembleChildrenData
35
- } from "./chunk-QZWEJVWV.js";
41
+ } from "./chunk-TZNNJLGT.js";
42
+ import "./chunk-NOMQ5RFG.js";
43
+ import "./chunk-5UFGO4ZT.js";
36
44
  import {
37
45
  IssueManagementProviderFactory
38
- } from "./chunk-SWSJWA2S.js";
46
+ } from "./chunk-RMLADZRY.js";
39
47
  import "./chunk-4232AHNQ.js";
40
48
  import {
41
49
  ProcessManager
42
- } from "./chunk-G5V75JD5.js";
43
- import "./chunk-LLHXQS3C.js";
50
+ } from "./chunk-5PNZBH6V.js";
51
+ import {
52
+ IdentifierParser
53
+ } from "./chunk-UDCI3QTS.js";
54
+ import {
55
+ openBrowser
56
+ } from "./chunk-YETJNRQM.js";
57
+ import "./chunk-HLDY5S4C.js";
44
58
  import {
45
59
  installDependencies
46
- } from "./chunk-WWKOVDWC.js";
60
+ } from "./chunk-3GTUXW26.js";
47
61
  import {
48
- IdentifierParser
49
- } from "./chunk-63QWFWH3.js";
62
+ getIdeConfig,
63
+ getInstallHint,
64
+ isIdeAvailable
65
+ } from "./chunk-K7R5QY6C.js";
66
+ import {
67
+ ClaudeContextManager
68
+ } from "./chunk-6YVJVUR4.js";
69
+ import "./chunk-GYCR2LOU.js";
70
+ import "./chunk-7NFCGKZT.js";
71
+ import {
72
+ ProjectCapabilityDetector
73
+ } from "./chunk-G2MNSPA4.js";
74
+ import "./chunk-NCPZYQ4B.js";
50
75
  import {
51
76
  createNeonProviderFromSettings
52
- } from "./chunk-P4O6EH46.js";
77
+ } from "./chunk-VMZG66UV.js";
53
78
  import {
54
79
  ShellCompletion
55
- } from "./chunk-KIK2ZFAL.js";
80
+ } from "./chunk-QNHZM5ZV.js";
56
81
  import {
57
82
  TelemetryManager,
58
83
  TelemetryService
59
- } from "./chunk-RSYT7MVI.js";
60
- import {
61
- GitWorktreeManager
62
- } from "./chunk-I5T677EA.js";
63
- import "./chunk-Q7POFB5Q.js";
84
+ } from "./chunk-GMDSYLI6.js";
85
+ import "./chunk-SQYHPBFP.js";
64
86
  import {
65
- IssueEnhancementService
66
- } from "./chunk-KKV5WH5M.js";
87
+ AgentManager
88
+ } from "./chunk-VNYWBHKR.js";
67
89
  import {
68
- capitalizeFirstLetter
69
- } from "./chunk-4E7LCFUG.js";
70
- import "./chunk-SKSYYBCU.js";
90
+ GitWorktreeManager
91
+ } from "./chunk-LE2NOUTN.js";
71
92
  import {
72
- openBrowser
73
- } from "./chunk-YETJNRQM.js";
93
+ IssueTrackerFactory
94
+ } from "./chunk-UHIBKD73.js";
95
+ import "./chunk-5LTID2AF.js";
74
96
  import {
75
- ProjectCapabilityDetector
76
- } from "./chunk-MORRVYPT.js";
77
- import "./chunk-YQ57ORTV.js";
97
+ GitHubService
98
+ } from "./chunk-LHDD4JHC.js";
99
+ import "./chunk-NH3QZYE5.js";
78
100
  import {
79
- AgentManager
80
- } from "./chunk-C6HNNJIV.js";
101
+ promptConfirmation,
102
+ waitForKeypress
103
+ } from "./chunk-CV47VCMQ.js";
104
+ import "./chunk-7OCGBJLR.js";
81
105
  import {
82
106
  getConfiguredRepoFromSettings,
83
107
  hasMultipleRemotes
84
- } from "./chunk-FXDYIV3K.js";
85
- import {
86
- getIdeConfig,
87
- getInstallHint,
88
- isIdeAvailable
89
- } from "./chunk-O7VL5N6S.js";
90
- import {
91
- ClaudeContextManager
92
- } from "./chunk-E6KOWMKA.js";
93
- import "./chunk-S7PZA6IV.js";
94
- import "./chunk-UR5DGNUO.js";
95
- import "./chunk-UUEW5KWB.js";
96
- import "./chunk-GYCR2LOU.js";
97
- import "./chunk-QVLPWNE3.js";
108
+ } from "./chunk-QVAA5KHK.js";
109
+ import "./chunk-KQFIGI37.js";
110
+ import "./chunk-Y3RX7LZT.js";
111
+ import "./chunk-WG4MLJ6J.js";
98
112
  import {
99
113
  GitCommandError,
100
114
  executeGitCommand,
@@ -107,35 +121,22 @@ import {
107
121
  pushBranchToRemote,
108
122
  removePlaceholderCommitFromHead,
109
123
  removePlaceholderCommitFromHistory
110
- } from "./chunk-4FGEGQW4.js";
124
+ } from "./chunk-3RXYOBME.js";
111
125
  import {
112
126
  SettingsManager
113
- } from "./chunk-7VHJNVLF.js";
127
+ } from "./chunk-ET6A2JR4.js";
114
128
  import {
115
129
  MetadataManager
116
- } from "./chunk-KB64WNBZ.js";
117
- import {
118
- IssueTrackerFactory
119
- } from "./chunk-UKBAJ2QQ.js";
120
- import "./chunk-HEXKPKCK.js";
121
- import {
122
- GitHubService
123
- } from "./chunk-KXDRI47U.js";
124
- import "./chunk-VG45TUYK.js";
130
+ } from "./chunk-YRCEOQPX.js";
125
131
  import {
126
132
  getLogger,
127
133
  withLogger
128
- } from "./chunk-6MLEBAYZ.js";
129
- import {
130
- promptConfirmation,
131
- waitForKeypress
132
- } from "./chunk-7JDMYTFZ.js";
133
- import "./chunk-433MOLAU.js";
134
+ } from "./chunk-ZAXRQLK3.js";
134
135
  import {
135
136
  createStderrLogger,
136
137
  loadEnvIntoProcess,
137
138
  logger
138
- } from "./chunk-VT4PDUYT.js";
139
+ } from "./chunk-H2SSF24U.js";
139
140
 
140
141
  // src/cli.ts
141
142
  import { program, Option } from "commander";
@@ -348,7 +349,7 @@ var FinishCommand = class {
348
349
  const neonProvider = createNeonProviderFromSettings(settings);
349
350
  const databaseManager = new DatabaseManager(neonProvider, environmentManager, databaseUrlEnvVarName);
350
351
  const cliIsolationManager = new CLIIsolationManager();
351
- const { DefaultBranchNamingService } = await import("./BranchNamingService-25KSZAEM.js");
352
+ const { DefaultBranchNamingService } = await import("./BranchNamingService-XBCO747L.js");
352
353
  this.loomManager ??= new LoomManager(
353
354
  this.gitWorktreeManager,
354
355
  this.issueTracker,
@@ -525,7 +526,7 @@ var FinishCommand = class {
525
526
  if (result.type === "issue" && result.number !== void 0) {
526
527
  const worktree = await this.gitWorktreeManager.findWorktreeForIssue(result.number);
527
528
  if (worktree) {
528
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-5QZSTKNN.js");
529
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-CMQQTFLQ.js");
529
530
  const metadataManager = new MetadataManager2();
530
531
  const metadata = await metadataManager.readMetadata(worktree.path);
531
532
  const canonicalKey = (metadata == null ? void 0 : metadata.issueKey) ?? ((_a2 = metadata == null ? void 0 : metadata.issue_numbers) == null ? void 0 : _a2[0]);
@@ -555,7 +556,7 @@ var FinishCommand = class {
555
556
  autoDetected: true
556
557
  };
557
558
  }
558
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-5QZSTKNN.js");
559
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-CMQQTFLQ.js");
559
560
  const metadataManager = new MetadataManager2();
560
561
  const metadata = await metadataManager.readMetadata(process.cwd());
561
562
  const issueNumber = extractIssueNumber(currentDir);
@@ -831,7 +832,7 @@ var FinishCommand = class {
831
832
  return;
832
833
  }
833
834
  if (mergeBehavior.mode === "github-draft-pr") {
834
- const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-5QZSTKNN.js");
835
+ const { MetadataManager: MetadataManager3 } = await import("./MetadataManager-CMQQTFLQ.js");
835
836
  const metadataManager2 = new MetadataManager3();
836
837
  const metadata = await metadataManager2.readMetadata(worktree.path);
837
838
  getLogger().debug(`Draft PR mode: worktree=${worktree.path}, draftPrNumber=${(metadata == null ? void 0 : metadata.draftPrNumber) ?? "none"}`);
@@ -927,7 +928,7 @@ var FinishCommand = class {
927
928
  getLogger().debug("Skipping build verification (--skip-build flag provided)");
928
929
  }
929
930
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options);
930
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-5QZSTKNN.js");
931
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-CMQQTFLQ.js");
931
932
  const metadataManager = new MetadataManager2();
932
933
  if (!options.dryRun) {
933
934
  await metadataManager.archiveMetadata(worktree.path);
@@ -956,7 +957,7 @@ var FinishCommand = class {
956
957
  "Cannot cleanup PR with uncommitted changes. Commit or stash changes, then run again with --force to cleanup anyway."
957
958
  );
958
959
  }
959
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-5QZSTKNN.js");
960
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-CMQQTFLQ.js");
960
961
  const metadataManager = new MetadataManager2();
961
962
  if (!options.dryRun) {
962
963
  await metadataManager.archiveMetadata(worktree.path);
@@ -1104,7 +1105,7 @@ var FinishCommand = class {
1104
1105
  }
1105
1106
  finishResult.prUrl = prResult.url;
1106
1107
  await this.generateSessionSummaryIfConfigured(parsed, worktree, options, prResult.number);
1107
- const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-5QZSTKNN.js");
1108
+ const { MetadataManager: MetadataManager2 } = await import("./MetadataManager-CMQQTFLQ.js");
1108
1109
  const metadataManager = new MetadataManager2();
1109
1110
  if (!options.dryRun) {
1110
1111
  await metadataManager.archiveMetadata(worktree.path);
@@ -1512,12 +1513,12 @@ function determineLoomType(worktree) {
1512
1513
  }
1513
1514
  return "branch";
1514
1515
  }
1515
- function extractPRNumbers(path4) {
1516
- if (!path4) {
1516
+ function extractPRNumbers(path5) {
1517
+ if (!path5) {
1517
1518
  return [];
1518
1519
  }
1519
1520
  const prPathPattern = /_pr_(\d+)$/;
1520
- const match = path4.match(prPathPattern);
1521
+ const match = path5.match(prPathPattern);
1521
1522
  if (match == null ? void 0 : match[1]) {
1522
1523
  return [match[1]];
1523
1524
  }
@@ -1645,29 +1646,75 @@ function formatFinishedLoomForJson(metadata, allMetadata, finishedMetadata) {
1645
1646
 
1646
1647
  // src/cli.ts
1647
1648
  import chalk from "chalk";
1648
- import fs3 from "fs-extra";
1649
+ import fs4 from "fs-extra";
1649
1650
 
1650
1651
  // src/lib/VersionMigrationManager.ts
1652
+ import fs3 from "fs-extra";
1653
+ import path4 from "path";
1654
+ import os3 from "os";
1655
+
1656
+ // src/migrations/index.ts
1651
1657
  import fs2 from "fs-extra";
1652
1658
  import path3 from "path";
1653
1659
  import os2 from "os";
1654
1660
 
1655
- // src/migrations/index.ts
1661
+ // src/utils/gitignore.ts
1656
1662
  import fs from "fs-extra";
1657
1663
  import path2 from "path";
1658
1664
  import os from "os";
1665
+ async function resolveGlobalGitignorePath() {
1666
+ const logger2 = getLogger();
1667
+ const xdgDefault = path2.join(os.homedir(), ".config", "git", "ignore");
1668
+ try {
1669
+ const result = await executeGitCommand(["config", "--global", "--type=path", "core.excludesFile"]);
1670
+ let resolvedPath = result.trim();
1671
+ if (resolvedPath.startsWith("~")) {
1672
+ resolvedPath = resolvedPath.replace(/^~/, os.homedir());
1673
+ }
1674
+ return resolvedPath;
1675
+ } catch (error) {
1676
+ if (error instanceof GitCommandError && error.exitCode === 1) {
1677
+ return xdgDefault;
1678
+ }
1679
+ const errorMessage = error instanceof Error ? error.message : String(error);
1680
+ logger2.debug(`Unexpected error resolving global gitignore path, using XDG default: ${errorMessage}`);
1681
+ return xdgDefault;
1682
+ }
1683
+ }
1684
+ async function ensureGlobalGitignorePatterns(patterns) {
1685
+ const resolvedPath = await resolveGlobalGitignorePath();
1686
+ await fs.ensureDir(path2.dirname(resolvedPath));
1687
+ let content = "";
1688
+ try {
1689
+ content = await fs.readFile(resolvedPath, "utf-8");
1690
+ } catch (error) {
1691
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
1692
+ } else {
1693
+ throw error;
1694
+ }
1695
+ }
1696
+ const missingPatterns = patterns.filter((pattern) => !content.includes(pattern));
1697
+ if (missingPatterns.length === 0) {
1698
+ return;
1699
+ }
1700
+ const separator = content.endsWith("\n") || content === "" ? "" : "\n";
1701
+ const newContent = content + separator + "\n# Added by iloom CLI\n" + missingPatterns.join("\n") + "\n";
1702
+ await fs.writeFile(resolvedPath, newContent, "utf-8");
1703
+ }
1704
+
1705
+ // src/migrations/index.ts
1659
1706
  var migrations = [
1660
1707
  // v0.6.0 is the baseline - no migrations needed
1661
1708
  {
1662
1709
  version: "0.6.1",
1663
1710
  description: "Add global gitignore for .iloom/settings.local.json",
1664
1711
  migrate: async () => {
1665
- const globalIgnorePath = path2.join(os.homedir(), ".config", "git", "ignore");
1712
+ const globalIgnorePath = path3.join(os2.homedir(), ".config", "git", "ignore");
1666
1713
  const pattern = "**/.iloom/settings.local.json";
1667
- await fs.ensureDir(path2.dirname(globalIgnorePath));
1714
+ await fs2.ensureDir(path3.dirname(globalIgnorePath));
1668
1715
  let content = "";
1669
1716
  try {
1670
- content = await fs.readFile(globalIgnorePath, "utf-8");
1717
+ content = await fs2.readFile(globalIgnorePath, "utf-8");
1671
1718
  } catch {
1672
1719
  }
1673
1720
  if (content.includes(pattern)) {
@@ -1675,19 +1722,19 @@ var migrations = [
1675
1722
  }
1676
1723
  const separator = content.endsWith("\n") || content === "" ? "" : "\n";
1677
1724
  const newContent = content + separator + "\n# Added by iloom CLI\n" + pattern + "\n";
1678
- await fs.writeFile(globalIgnorePath, newContent, "utf-8");
1725
+ await fs2.writeFile(globalIgnorePath, newContent, "utf-8");
1679
1726
  }
1680
1727
  },
1681
1728
  {
1682
1729
  version: "0.7.1",
1683
1730
  description: "Add global gitignore for .iloom/package.iloom.local.json",
1684
1731
  migrate: async () => {
1685
- const globalIgnorePath = path2.join(os.homedir(), ".config", "git", "ignore");
1732
+ const globalIgnorePath = path3.join(os2.homedir(), ".config", "git", "ignore");
1686
1733
  const pattern = "**/.iloom/package.iloom.local.json";
1687
- await fs.ensureDir(path2.dirname(globalIgnorePath));
1734
+ await fs2.ensureDir(path3.dirname(globalIgnorePath));
1688
1735
  let content = "";
1689
1736
  try {
1690
- content = await fs.readFile(globalIgnorePath, "utf-8");
1737
+ content = await fs2.readFile(globalIgnorePath, "utf-8");
1691
1738
  } catch {
1692
1739
  }
1693
1740
  if (content.includes(pattern)) {
@@ -1695,21 +1742,21 @@ var migrations = [
1695
1742
  }
1696
1743
  const separator = content.endsWith("\n") || content === "" ? "" : "\n";
1697
1744
  const newContent = content + separator + "\n# Added by iloom CLI\n" + pattern + "\n";
1698
- await fs.writeFile(globalIgnorePath, newContent, "utf-8");
1745
+ await fs2.writeFile(globalIgnorePath, newContent, "utf-8");
1699
1746
  }
1700
1747
  },
1701
1748
  {
1702
1749
  version: "0.9.3",
1703
1750
  description: "Add global gitignore for swarm mode agent and skill files",
1704
1751
  migrate: async () => {
1705
- const globalIgnorePath = path2.join(os.homedir(), ".config", "git", "ignore");
1752
+ const globalIgnorePath = path3.join(os2.homedir(), ".config", "git", "ignore");
1706
1753
  const agentPattern = "**/.claude/agents/iloom-*";
1707
1754
  const skillPattern = "**/.claude/skills/iloom-*";
1708
1755
  const mcpConfigPathPattern = "**/.claude/iloom-swarm-mcp-config-path";
1709
- await fs.ensureDir(path2.dirname(globalIgnorePath));
1756
+ await fs2.ensureDir(path3.dirname(globalIgnorePath));
1710
1757
  let content = "";
1711
1758
  try {
1712
- content = await fs.readFile(globalIgnorePath, "utf-8");
1759
+ content = await fs2.readFile(globalIgnorePath, "utf-8");
1713
1760
  } catch {
1714
1761
  }
1715
1762
  if (content.includes(agentPattern)) {
@@ -1717,7 +1764,21 @@ var migrations = [
1717
1764
  }
1718
1765
  const separator = content.endsWith("\n") || content === "" ? "" : "\n";
1719
1766
  const newContent = content + separator + "\n# Added by iloom CLI\n" + agentPattern + "\n" + skillPattern + "\n" + mcpConfigPathPattern + "\n";
1720
- await fs.writeFile(globalIgnorePath, newContent, "utf-8");
1767
+ await fs2.writeFile(globalIgnorePath, newContent, "utf-8");
1768
+ }
1769
+ },
1770
+ {
1771
+ version: "0.10.3",
1772
+ description: "Remediate global gitignore path for custom core.excludesFile",
1773
+ migrate: async () => {
1774
+ const allIloomPatterns = [
1775
+ "**/.iloom/settings.local.json",
1776
+ "**/.iloom/package.iloom.local.json",
1777
+ "**/.claude/agents/iloom-*",
1778
+ "**/.claude/skills/iloom-*",
1779
+ "**/.claude/iloom-swarm-mcp-config-path"
1780
+ ];
1781
+ await ensureGlobalGitignorePatterns(allIloomPatterns);
1721
1782
  }
1722
1783
  }
1723
1784
  ];
@@ -1730,7 +1791,7 @@ var VersionMigrationManager = class {
1730
1791
  }
1731
1792
  // Return path to migration state file
1732
1793
  getMigrationStatePath() {
1733
- return path3.join(os2.homedir(), ".config", "iloom-ai", "migration-state.json");
1794
+ return path4.join(os3.homedir(), ".config", "iloom-ai", "migration-state.json");
1734
1795
  }
1735
1796
  // Get effective version, respecting ILOOM_VERSION_OVERRIDE env var
1736
1797
  // packageVersion is the version from package.json passed by caller
@@ -1747,7 +1808,7 @@ var VersionMigrationManager = class {
1747
1808
  async loadFullMigrationState() {
1748
1809
  const statePath = this.getMigrationStatePath();
1749
1810
  try {
1750
- const content = await fs2.readFile(statePath, "utf-8");
1811
+ const content = await fs3.readFile(statePath, "utf-8");
1751
1812
  const state = JSON.parse(content);
1752
1813
  if (typeof state.lastMigratedVersion === "string") {
1753
1814
  return state;
@@ -1770,7 +1831,7 @@ var VersionMigrationManager = class {
1770
1831
  async saveMigrationState(version, newFailures = []) {
1771
1832
  const statePath = this.getMigrationStatePath();
1772
1833
  try {
1773
- await fs2.ensureDir(path3.dirname(statePath));
1834
+ await fs3.ensureDir(path4.dirname(statePath));
1774
1835
  const existingState = await this.loadFullMigrationState();
1775
1836
  const existingFailures = existingState.failedMigrations ?? [];
1776
1837
  const allFailures = [...existingFailures];
@@ -1787,7 +1848,7 @@ var VersionMigrationManager = class {
1787
1848
  migratedAt: (/* @__PURE__ */ new Date()).toISOString(),
1788
1849
  ...allFailures.length > 0 && { failedMigrations: allFailures }
1789
1850
  };
1790
- await fs2.writeFile(statePath, JSON.stringify(state, null, 2), "utf-8");
1851
+ await fs3.writeFile(statePath, JSON.stringify(state, null, 2), "utf-8");
1791
1852
  } catch (error) {
1792
1853
  logger.warn(`[VersionMigrationManager] Failed to save migration state: ${error}`);
1793
1854
  }
@@ -1895,15 +1956,15 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
1895
1956
  process.exit(0);
1896
1957
  }
1897
1958
  try {
1898
- const { checkAndNotifyUpdate } = await import("./update-notifier-LBAUOOLM.js");
1899
- const { detectInstallationMethod } = await import("./installation-detector-MMFWLJYN.js");
1959
+ const { checkAndNotifyUpdate } = await import("./update-notifier-EYLAXZAA.js");
1960
+ const { detectInstallationMethod } = await import("./installation-detector-HF6QN7KP.js");
1900
1961
  const installMethod = detectInstallationMethod(__filename);
1901
1962
  const jsonMode = actionCommand.opts().json === true;
1902
1963
  await checkAndNotifyUpdate(packageJson.version, packageJson.name, installMethod, { suppressOutput: jsonMode });
1903
1964
  } catch {
1904
1965
  }
1905
1966
  try {
1906
- const { SettingsMigrationManager } = await import("./SettingsMigrationManager-LEBMJP3B.js");
1967
+ const { SettingsMigrationManager } = await import("./SettingsMigrationManager-S6J7OHUH.js");
1907
1968
  const migrationManager = new SettingsMigrationManager();
1908
1969
  await migrationManager.migrateSettingsIfNeeded();
1909
1970
  } catch (error) {
@@ -1926,7 +1987,7 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
1926
1987
  await validateIdeForStartCommand(actionCommand);
1927
1988
  }).hook("postAction", async (_thisCommand, actionCommand) => {
1928
1989
  try {
1929
- const { showVSCodeAnnouncementIfNeeded } = await import("./vscode-announcement-EQ2SKK3T.js");
1990
+ const { showVSCodeAnnouncementIfNeeded } = await import("./vscode-announcement-NIX7O2MG.js");
1930
1991
  const jsonMode = actionCommand.opts().json === true;
1931
1992
  if (!jsonMode) {
1932
1993
  await showVSCodeAnnouncementIfNeeded(actionCommand.name());
@@ -2055,21 +2116,21 @@ async function autoLaunchInitForMultipleRemotes() {
2055
2116
  logger.info("iloom will now launch an interactive configuration session with Claude");
2056
2117
  logger.info("to help you select which remote to use for GitHub operations.");
2057
2118
  logger.info("");
2058
- const { waitForKeypress: waitForKeypress2 } = await import("./prompt-ONNPSNKM.js");
2119
+ const { waitForKeypress: waitForKeypress2 } = await import("./prompt-7LZB4PAT.js");
2059
2120
  await waitForKeypress2("Press any key to start configuration...");
2060
2121
  logger.info("");
2061
2122
  try {
2062
- const { InitCommand } = await import("./init-32YOKXRL.js");
2123
+ const { InitCommand } = await import("./init-CI43GJHV.js");
2063
2124
  const initCommand = new InitCommand();
2064
2125
  const customInitialMessage = "Help me configure which git remote iloom should use for GitHub operations. I have multiple remotes and need to select the correct one.";
2065
2126
  await initCommand.execute(customInitialMessage);
2066
2127
  logger.info("");
2067
2128
  logger.info("Configuration complete! Continuing with your original command...");
2068
2129
  logger.info("");
2069
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-FNKCOZMQ.js");
2130
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-WQ5NSGAH.js");
2070
2131
  const settingsManager = new SettingsManager2();
2071
2132
  const settings = await settingsManager.loadSettings();
2072
- const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-IJAMOEAP.js");
2133
+ const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-MZTFHHTU.js");
2073
2134
  const multipleRemotes = await hasMultipleRemotes2();
2074
2135
  if (multipleRemotes && !((_b = (_a2 = settings.issueManagement) == null ? void 0 : _a2.github) == null ? void 0 : _b.remote)) {
2075
2136
  logger.error("Configuration incomplete: GitHub remote is still not configured.");
@@ -2087,7 +2148,9 @@ var shellCompletion = new ShellCompletion();
2087
2148
  shellCompletion.init();
2088
2149
  program.command("start").alias("new").alias("create").alias("up").description("Create isolated workspace for an issue/PR").argument("[identifier]", "Issue number, PR number, or branch name (optional - will prompt if not provided)").option("--claude", "Enable Claude integration (default: true)").option("--no-claude", "Disable Claude integration").option("--code", "Enable VSCode (default: true)").option("--no-code", "Disable VSCode").option("--dev-server", "Enable dev server in terminal (default: true)").option("--no-dev-server", "Disable dev server").option("--terminal", "Enable terminal without dev server (default: false)").option("--no-terminal", "Disable terminal").option("--child-loom", "Force create as child loom (skip prompt)").option("--no-child-loom", "Force create as independent loom (skip prompt)").option("--epic", "Create as epic loom with child issues (skip prompt; ignored if no children)").option("--no-epic", "Skip epic loom creation even if issue has children (ignored if no children)").option("--body <text>", "Body text for issue (skips AI enhancement)").option("--json", "Output result as JSON").addOption(
2089
2150
  new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"]).default("default")
2090
- ).option("--yolo", "Enable autonomous mode (shorthand for --one-shot=bypassPermissions)").action(async (identifier, options) => {
2151
+ ).option("--yolo", "Enable autonomous mode (shorthand for --one-shot=bypassPermissions)").addOption(
2152
+ new Option("--complexity <level>", "Override complexity evaluation (persists in loom metadata)").choices(["trivial", "simple", "complex"])
2153
+ ).option("--create-only", "Create workspace only (skip Claude, IDE, terminal, dev server)").action(async (identifier, options) => {
2091
2154
  if (options.yolo) {
2092
2155
  options.oneShot = "bypassPermissions";
2093
2156
  }
@@ -2099,7 +2162,7 @@ program.command("start").alias("new").alias("create").alias("up").description("C
2099
2162
  logger.error("JSON mode requires identifier argument");
2100
2163
  process.exit(1);
2101
2164
  }
2102
- const { promptInput } = await import("./prompt-ONNPSNKM.js");
2165
+ const { promptInput } = await import("./prompt-7LZB4PAT.js");
2103
2166
  finalIdentifier = await promptInput("Enter issue number, PR number (pr/123), or branch name");
2104
2167
  if (!(finalIdentifier == null ? void 0 : finalIdentifier.trim())) {
2105
2168
  logger.error("Identifier is required");
@@ -2114,6 +2177,7 @@ program.command("start").alias("new").alias("create").alias("up").description("C
2114
2177
  if (options.json && result) {
2115
2178
  console.log(JSON.stringify(result, null, 2));
2116
2179
  }
2180
+ await TelemetryService.getInstance().shutdown();
2117
2181
  process.exit(0);
2118
2182
  } catch (error) {
2119
2183
  logger.error(`Failed to start workspace: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -2148,6 +2212,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2148
2212
  const issueNumber = typeof result === "object" ? result.id : result;
2149
2213
  logger.success(`Issue #${issueNumber} created successfully`);
2150
2214
  }
2215
+ await TelemetryService.getInstance().shutdown();
2151
2216
  process.exit(0);
2152
2217
  } catch (error) {
2153
2218
  logger.error(`Failed to create issue: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -2163,7 +2228,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2163
2228
  });
2164
2229
  program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
2165
2230
  try {
2166
- const { FeedbackCommand } = await import("./feedback-G2GJFN2F.js");
2231
+ const { FeedbackCommand } = await import("./feedback-BMAZGKRW.js");
2167
2232
  const command = new FeedbackCommand();
2168
2233
  const feedbackOptions = {};
2169
2234
  if (options.body !== void 0) {
@@ -2174,6 +2239,7 @@ program.command("feedback").alias("f").description("Submit feedback/bug report t
2174
2239
  options: feedbackOptions
2175
2240
  });
2176
2241
  logger.success(`Feedback submitted as issue #${issueNumber} in iloom-cli repository`);
2242
+ await TelemetryService.getInstance().shutdown();
2177
2243
  process.exit(0);
2178
2244
  } catch (error) {
2179
2245
  logger.error(`Failed to submit feedback: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -2201,6 +2267,7 @@ program.command("enhance").description("Apply enhancement agent to existing GitH
2201
2267
  } else {
2202
2268
  logger.success(`Enhancement process completed for issue #${issueNumber}`);
2203
2269
  }
2270
+ await TelemetryService.getInstance().shutdown();
2204
2271
  process.exit(0);
2205
2272
  } catch (error) {
2206
2273
  logger.error(`Failed to enhance issue: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -2233,6 +2300,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2233
2300
  if (isAnyJsonMode && result) {
2234
2301
  console.log(options.jsonStream ? JSON.stringify(result) : JSON.stringify(result, null, 2));
2235
2302
  }
2303
+ await TelemetryService.getInstance().shutdown();
2236
2304
  process.exit(0);
2237
2305
  } catch (error) {
2238
2306
  if (isAnyJsonMode) {
@@ -2262,7 +2330,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2262
2330
  const isAnyJsonMode = options.json ?? options.jsonStream;
2263
2331
  const executeAction = async () => {
2264
2332
  try {
2265
- const { CommitCommand } = await import("./commit-FZR5XDQG.js");
2333
+ const { CommitCommand } = await import("./commit-DC2Q5CDY.js");
2266
2334
  const command = new CommitCommand();
2267
2335
  const noReview = options.review === false || options.json === true || options.jsonStream === true;
2268
2336
  const result = await command.execute({
@@ -2276,6 +2344,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2276
2344
  if (isAnyJsonMode && result) {
2277
2345
  console.log(options.jsonStream ? JSON.stringify(result) : JSON.stringify(result, null, 2));
2278
2346
  }
2347
+ await TelemetryService.getInstance().shutdown();
2279
2348
  process.exit(0);
2280
2349
  } catch (error) {
2281
2350
  if (error instanceof UserAbortedCommitError) {
@@ -2300,12 +2369,13 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2300
2369
  program.command("rebase").description("Rebase current branch on main with Claude-assisted conflict resolution").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").option("--json-stream", "Stream JSONL output; runs Claude headless for conflict resolution").action(async (options) => {
2301
2370
  const executeAction = async () => {
2302
2371
  try {
2303
- const { RebaseCommand } = await import("./rebase-6NVLX5V7.js");
2372
+ const { RebaseCommand } = await import("./rebase-S6OHAOOF.js");
2304
2373
  const command = new RebaseCommand();
2305
2374
  const result = await command.execute(options);
2306
2375
  if (options.jsonStream && result) {
2307
2376
  console.log(JSON.stringify(result));
2308
2377
  }
2378
+ await TelemetryService.getInstance().shutdown();
2309
2379
  process.exit(0);
2310
2380
  } catch (error) {
2311
2381
  if (options.jsonStream) {
@@ -2332,12 +2402,14 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2332
2402
  new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"])
2333
2403
  ).option("--yolo", "Enable autonomous mode (shorthand for --one-shot=bypassPermissions)").option("-p, --print", "Enable print/headless mode for CI/CD (uses bypassPermissions)").addOption(
2334
2404
  new Option("--output-format <format>", "Output format for Claude CLI (requires --print)").choices(["json", "stream-json", "text"])
2335
- ).option("--verbose", "Enable verbose output (requires --print)").option("--json", "Output final result as JSON object (requires --print)").option("--json-stream", "Stream JSONL output to stdout in real-time (requires --print)").option("--set <key=value>", "Override settings (repeatable, e.g., --set workflows.issue.permissionMode=bypassPermissions)").option("--skip-cleanup", "Skip automatic cleanup of child worktrees after they complete in swarm mode").action(async (options) => {
2405
+ ).option("--verbose", "Enable verbose output (requires --print)").option("--json", "Output final result as JSON object (requires --print)").option("--json-stream", "Stream JSONL output to stdout in real-time (requires --print)").option("--set <key=value>", "Override settings (repeatable, e.g., --set workflows.issue.permissionMode=bypassPermissions)").option("--skip-cleanup", "Skip automatic cleanup of child worktrees after they complete in swarm mode").addOption(
2406
+ new Option("--complexity <level>", "Override complexity evaluation (session-only)").choices(["trivial", "simple", "complex"])
2407
+ ).action(async (options) => {
2336
2408
  if (options.yolo) {
2337
2409
  options.oneShot = "bypassPermissions";
2338
2410
  }
2339
2411
  try {
2340
- const { IgniteCommand } = await import("./ignite-H2O5Y5A2.js");
2412
+ const { IgniteCommand } = await import("./ignite-IO4LXVXJ.js");
2341
2413
  const command = new IgniteCommand();
2342
2414
  if (options.json && options.jsonStream) {
2343
2415
  logger.error("--json and --json-stream are mutually exclusive");
@@ -2356,7 +2428,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2356
2428
  ...options.json && { json: true },
2357
2429
  ...options.jsonStream && { jsonStream: true }
2358
2430
  } : void 0;
2359
- await command.execute(options.oneShot, printOptions, options.skipCleanup);
2431
+ await command.execute(options.oneShot, printOptions, options.skipCleanup, void 0, options.complexity);
2360
2432
  } catch (error) {
2361
2433
  logger.error(`Failed to spin up loom: ${error instanceof Error ? error.message : "Unknown error"}`);
2362
2434
  process.exit(1);
@@ -2365,7 +2437,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2365
2437
  program.command("open").description("Open workspace in browser or run CLI tool").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
2366
2438
  try {
2367
2439
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2368
- const { OpenCommand } = await import("./open-FXWW3VI4.js");
2440
+ const { OpenCommand } = await import("./open-2Y7GSUTJ.js");
2369
2441
  const cmd = new OpenCommand();
2370
2442
  const input = identifier ? { identifier, args } : { args };
2371
2443
  await cmd.execute(input);
@@ -2377,7 +2449,7 @@ program.command("open").description("Open workspace in browser or run CLI tool")
2377
2449
  program.command("run").description("Run CLI tool or open workspace in browser").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
2378
2450
  try {
2379
2451
  const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
2380
- const { RunCommand } = await import("./run-BBXLRIZB.js");
2452
+ const { RunCommand } = await import("./run-ST3FR75O.js");
2381
2453
  const cmd = new RunCommand();
2382
2454
  const input = identifier ? { identifier, args } : { args };
2383
2455
  await cmd.execute(input);
@@ -2388,7 +2460,7 @@ program.command("run").description("Run CLI tool or open workspace in browser").
2388
2460
  });
2389
2461
  program.command("vscode").description("Install iloom VS Code extension and open workspace in VS Code").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--no-wait", "Skip keypress prompt and open immediately").action(async (identifier, options) => {
2390
2462
  try {
2391
- const { VSCodeCommand } = await import("./vscode-6XUGHJKL.js");
2463
+ const { VSCodeCommand } = await import("./vscode-TOGE5N67.js");
2392
2464
  const cmd = new VSCodeCommand();
2393
2465
  await cmd.execute({ identifier, wait: options == null ? void 0 : options.wait });
2394
2466
  } catch (error) {
@@ -2397,7 +2469,7 @@ program.command("vscode").description("Install iloom VS Code extension and open
2397
2469
  });
2398
2470
  program.command("dev-server").alias("dev").description("Start dev server for workspace (foreground)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--json", "Output as JSON").action(async (identifier, options) => {
2399
2471
  try {
2400
- const { DevServerCommand } = await import("./dev-server-7SMIB7OF.js");
2472
+ const { DevServerCommand } = await import("./dev-server-CYRP6M73.js");
2401
2473
  const cmd = new DevServerCommand();
2402
2474
  await cmd.execute({ identifier, json: options == null ? void 0 : options.json });
2403
2475
  } catch (error) {
@@ -2407,7 +2479,7 @@ program.command("dev-server").alias("dev").description("Start dev server for wor
2407
2479
  });
2408
2480
  program.command("shell").alias("terminal").description("Open interactive shell with workspace environment").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2409
2481
  try {
2410
- const { ShellCommand } = await import("./shell-RF7LTND5.js");
2482
+ const { ShellCommand } = await import("./shell-W4SBQPTE.js");
2411
2483
  const cmd = new ShellCommand();
2412
2484
  await cmd.execute({ identifier });
2413
2485
  } catch (error) {
@@ -2417,7 +2489,7 @@ program.command("shell").alias("terminal").description("Open interactive shell w
2417
2489
  });
2418
2490
  program.command("build").description("Run the build script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2419
2491
  try {
2420
- const { BuildCommand } = await import("./build-VHGEMXBA.js");
2492
+ const { BuildCommand } = await import("./build-OLS6J5KZ.js");
2421
2493
  const cmd = new BuildCommand();
2422
2494
  await cmd.execute(identifier ? { identifier } : {});
2423
2495
  } catch (error) {
@@ -2427,7 +2499,7 @@ program.command("build").description("Run the build script").argument("[identifi
2427
2499
  });
2428
2500
  program.command("lint").description("Run the lint script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2429
2501
  try {
2430
- const { LintCommand } = await import("./lint-AAN2NZWG.js");
2502
+ const { LintCommand } = await import("./lint-BSWRMGPZ.js");
2431
2503
  const cmd = new LintCommand();
2432
2504
  await cmd.execute(identifier ? { identifier } : {});
2433
2505
  } catch (error) {
@@ -2437,7 +2509,7 @@ program.command("lint").description("Run the lint script").argument("[identifier
2437
2509
  });
2438
2510
  program.command("test").description("Run the test script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2439
2511
  try {
2440
- const { TestCommand } = await import("./test-SGO6I5Z7.js");
2512
+ const { TestCommand } = await import("./test-6JH4FE2X.js");
2441
2513
  const cmd = new TestCommand();
2442
2514
  await cmd.execute(identifier ? { identifier } : {});
2443
2515
  } catch (error) {
@@ -2447,7 +2519,7 @@ program.command("test").description("Run the test script").argument("[identifier
2447
2519
  });
2448
2520
  program.command("compile").alias("typecheck").description("Run the compile or typecheck script (prefers compile if both exist)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
2449
2521
  try {
2450
- const { CompileCommand } = await import("./compile-7ALJHZ4N.js");
2522
+ const { CompileCommand } = await import("./compile-4NCQECKE.js");
2451
2523
  const cmd = new CompileCommand();
2452
2524
  await cmd.execute(identifier ? { identifier } : {});
2453
2525
  } catch (error) {
@@ -2455,10 +2527,23 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2455
2527
  process.exit(1);
2456
2528
  }
2457
2529
  });
2530
+ program.command("install-deps").description("Install dependencies for a workspace").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--no-frozen", "Allow lockfile updates (default: frozen/locked)").action(async (identifier, options) => {
2531
+ try {
2532
+ const { InstallDepsCommand } = await import("./install-deps-SRTM5U7D.js");
2533
+ const cmd = new InstallDepsCommand();
2534
+ const input = {};
2535
+ if (identifier) input.identifier = identifier;
2536
+ if ((options == null ? void 0 : options.frozen) === false) input.frozen = false;
2537
+ await cmd.execute(input);
2538
+ } catch (error) {
2539
+ logger.error(`Install failed: ${error instanceof Error ? error.message : "Unknown error"}`);
2540
+ process.exit(1);
2541
+ }
2542
+ });
2458
2543
  program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").option("--archive", "Archive metadata instead of deleting (preserves loom in il list --finished)").option("--defer <ms>", "Wait specified milliseconds before cleanup", parseInt).action(async (identifier, options) => {
2459
2544
  const executeAction = async () => {
2460
2545
  try {
2461
- const { CleanupCommand } = await import("./cleanup-6PVAC4NI.js");
2546
+ const { CleanupCommand } = await import("./cleanup-YOM6PQCN.js");
2462
2547
  const command = new CleanupCommand();
2463
2548
  const input = {
2464
2549
  options: options ?? {}
@@ -2470,6 +2555,7 @@ program.command("cleanup").alias("remove").alias("clean").description("Remove wo
2470
2555
  if ((options == null ? void 0 : options.json) && result) {
2471
2556
  console.log(JSON.stringify(result, null, 2));
2472
2557
  }
2558
+ await TelemetryService.getInstance().shutdown();
2473
2559
  process.exit(0);
2474
2560
  } catch (error) {
2475
2561
  if (options == null ? void 0 : options.json) {
@@ -2533,7 +2619,7 @@ program.command("list").description("Show active workspaces").option("--json", "
2533
2619
  if (!loom.worktreePath) {
2534
2620
  continue;
2535
2621
  }
2536
- const pathExists = await fs3.pathExists(loom.worktreePath);
2622
+ const pathExists = await fs4.pathExists(loom.worktreePath);
2537
2623
  if (!pathExists) {
2538
2624
  continue;
2539
2625
  }
@@ -2807,7 +2893,7 @@ program.command("list").description("Show active workspaces").option("--json", "
2807
2893
  });
2808
2894
  program.command("projects").description("List configured iloom projects").option("--json", "Output as JSON (default behavior)").action(async (options) => {
2809
2895
  try {
2810
- const { ProjectsCommand } = await import("./projects-2UOXFLNZ.js");
2896
+ const { ProjectsCommand } = await import("./projects-IUSUXD5D.js");
2811
2897
  const command = new ProjectsCommand();
2812
2898
  const result = await command.execute(options);
2813
2899
  console.log(JSON.stringify(result, null, 2));
@@ -2818,7 +2904,7 @@ program.command("projects").description("List configured iloom projects").option
2818
2904
  });
2819
2905
  program.command("issues").description("List project issues from configured issue tracker").argument("[project-path]", "Path to project root (auto-detected if omitted)").option("--json", "Output as JSON (default behavior)").option("--limit <n>", "Max issues to return", "100").option("--sprint <name>", 'Jira only: filter by sprint name (e.g., "Sprint 17") or "current" for active sprint').option("--mine", "Show only issues and PRs assigned to me").action(async (projectPath, options) => {
2820
2906
  try {
2821
- const { IssuesCommand } = await import("./issues-4UUAQ5K6.js");
2907
+ const { IssuesCommand } = await import("./issues-DMRQJH7E.js");
2822
2908
  const command = new IssuesCommand();
2823
2909
  const parsedLimit = parseInt((options == null ? void 0 : options.limit) ?? "100", 10);
2824
2910
  const limit = Number.isNaN(parsedLimit) || parsedLimit <= 0 ? 100 : parsedLimit;
@@ -2836,7 +2922,7 @@ program.command("issues").description("List project issues from configured issue
2836
2922
  });
2837
2923
  program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').addOption(new Option("--accept-defaults").hideHelp()).action(async (prompt, options) => {
2838
2924
  try {
2839
- const { InitCommand } = await import("./init-32YOKXRL.js");
2925
+ const { InitCommand } = await import("./init-CI43GJHV.js");
2840
2926
  const command = new InitCommand();
2841
2927
  const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
2842
2928
  const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
@@ -2850,7 +2936,7 @@ program.command("plan").description("Launch interactive planning session with Ar
2850
2936
  new Option("--output-format <format>", "Output format for Claude CLI (requires --print)").choices(["json", "stream-json", "text"])
2851
2937
  ).option("--verbose", "Enable verbose output (requires --print)").option("--json", "Output final result as JSON object (requires --print)").option("--json-stream", "Stream JSONL output to stdout in real-time (requires --print)").option("--auto-swarm", "Enable auto-swarm: plan, start epic, and spin automatically").action(async (prompt, options) => {
2852
2938
  try {
2853
- const { PlanCommand } = await import("./plan-RQ5FPIGF.js");
2939
+ const { PlanCommand } = await import("./plan-SWFPLNJE.js");
2854
2940
  const command = new PlanCommand();
2855
2941
  if ((options == null ? void 0 : options.json) && (options == null ? void 0 : options.jsonStream)) {
2856
2942
  logger.error("--json and --json-stream are mutually exclusive");
@@ -2877,7 +2963,7 @@ program.command("plan").description("Launch interactive planning session with Ar
2877
2963
  });
2878
2964
  program.command("contribute").description("Set up local development environment for contributing to a GitHub project").argument("[repository]", "GitHub repository (owner/repo, github.com/owner/repo, or full URL). Defaults to iloom-ai/iloom-cli").action(async (repository) => {
2879
2965
  try {
2880
- const { ContributeCommand } = await import("./contribute-5GKLK3BQ.js");
2966
+ const { ContributeCommand } = await import("./contribute-M5UWXCAV.js");
2881
2967
  const command = new ContributeCommand();
2882
2968
  await command.execute(repository);
2883
2969
  } catch (error) {
@@ -2887,7 +2973,7 @@ program.command("contribute").description("Set up local development environment
2887
2973
  });
2888
2974
  program.command("update").description("Update iloom-cli to the latest version").option("--dry-run", "Show what would be done without actually updating").action(async (options) => {
2889
2975
  try {
2890
- const { UpdateCommand } = await import("./update-HJKDYA3F.js");
2976
+ const { UpdateCommand } = await import("./update-XLW7R7FL.js");
2891
2977
  const command = new UpdateCommand();
2892
2978
  await command.execute(options);
2893
2979
  } catch (error) {
@@ -2897,8 +2983,8 @@ program.command("update").description("Update iloom-cli to the latest version").
2897
2983
  });
2898
2984
  program.command("test-github").description("Test GitHub integration (Issue #3)").argument("<identifier>", "Issue number or PR number").option("--no-claude", "Skip Claude for branch name generation").action(async (identifier, options) => {
2899
2985
  try {
2900
- const { GitHubService: GitHubService2 } = await import("./GitHubService-MEHKHUQP.js");
2901
- const { DefaultBranchNamingService } = await import("./BranchNamingService-25KSZAEM.js");
2986
+ const { GitHubService: GitHubService2 } = await import("./GitHubService-2R5GQG4K.js");
2987
+ const { DefaultBranchNamingService } = await import("./BranchNamingService-XBCO747L.js");
2902
2988
  logger.info("Testing GitHub Integration\n");
2903
2989
  const service = new GitHubService2();
2904
2990
  const branchNaming = new DefaultBranchNamingService({ useClaude: options.claude !== false });
@@ -2956,10 +3042,10 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
2956
3042
  });
2957
3043
  program.command("test-claude").description("Test Claude integration (Issue #10)").option("--detect", "Test Claude CLI detection").option("--version", "Get Claude CLI version").option("--branch <title>", "Test branch name generation with given title").option("--issue <number>", "Issue number for branch generation", "123").option("--launch <prompt>", "Launch Claude with a prompt (headless)").option("--interactive", "Launch Claude interactively (requires --launch)").option("--template <name>", "Test template loading").action(async (options) => {
2958
3044
  try {
2959
- const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-7GGEWVEM.js");
2960
- const { PromptTemplateManager } = await import("./PromptTemplateManager-YOE2SIPG.js");
2961
- const { ClaudeService } = await import("./ClaudeService-7KM5NA5Z.js");
2962
- const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-66GR4BGM.js");
3045
+ const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-ONQTDWV3.js");
3046
+ const { PromptTemplateManager } = await import("./PromptTemplateManager-T5VTLJP3.js");
3047
+ const { ClaudeService } = await import("./ClaudeService-6E6MCGJE.js");
3048
+ const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-SXDCWDJA.js");
2963
3049
  logger.info("Testing Claude Integration\n");
2964
3050
  if (options.detect) {
2965
3051
  logger.info("Detecting Claude CLI...");
@@ -3094,7 +3180,7 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
3094
3180
  });
3095
3181
  program.command("test-webserver").description("Test if a web server is running on a workspace port").argument("<issue-number>", "Issue number (port will be calculated as 3000 + issue number)", parseInt).option("--kill", "Kill the web server if detected").action(async (issueNumber, options) => {
3096
3182
  try {
3097
- const { TestWebserverCommand } = await import("./test-webserver-NZ3JTVLL.js");
3183
+ const { TestWebserverCommand } = await import("./test-webserver-QI3QQFZ3.js");
3098
3184
  const command = new TestWebserverCommand();
3099
3185
  await command.execute({ issueNumber, options });
3100
3186
  } catch (error) {
@@ -3107,7 +3193,7 @@ program.command("test-webserver").description("Test if a web server is running o
3107
3193
  });
3108
3194
  program.command("test-git").description("Test Git integration - findMainWorktreePath() function (reads .iloom/settings.json)").action(async () => {
3109
3195
  try {
3110
- const { TestGitCommand } = await import("./test-git-XM4TM65W.js");
3196
+ const { TestGitCommand } = await import("./test-git-2KFFAQ6B.js");
3111
3197
  const command = new TestGitCommand();
3112
3198
  await command.execute();
3113
3199
  } catch (error) {
@@ -3120,7 +3206,7 @@ program.command("test-git").description("Test Git integration - findMainWorktree
3120
3206
  });
3121
3207
  program.command("test-tabs").description("Test iTerm2 dual tab functionality - opens two tabs with test commands").action(async () => {
3122
3208
  try {
3123
- const { TestTabsCommand } = await import("./test-tabs-D3POYOJ5.js");
3209
+ const { TestTabsCommand } = await import("./test-tabs-YDWMWTVA.js");
3124
3210
  const command = new TestTabsCommand();
3125
3211
  await command.execute();
3126
3212
  } catch (error) {
@@ -3131,9 +3217,9 @@ program.command("test-tabs").description("Test iTerm2 dual tab functionality - o
3131
3217
  process.exit(1);
3132
3218
  }
3133
3219
  });
3134
- program.command("test-prefix").description("Test worktree prefix configuration - preview worktree paths (reads .iloom/settings.json)").action(async () => {
3220
+ program.command("test-prefix").description("[DEPRECATED] Test worktree prefix configuration - preview worktree paths").action(async () => {
3135
3221
  try {
3136
- const { TestPrefixCommand } = await import("./test-prefix-GBO37XCN.js");
3222
+ const { TestPrefixCommand } = await import("./test-prefix-GP2DAX37.js");
3137
3223
  const command = new TestPrefixCommand();
3138
3224
  await command.execute();
3139
3225
  } catch (error) {
@@ -3147,12 +3233,13 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3147
3233
  program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
3148
3234
  const executeAction = async () => {
3149
3235
  try {
3150
- const { SummaryCommand } = await import("./summary-WTQZ7XG2.js");
3236
+ const { SummaryCommand } = await import("./summary-P2JCIIJO.js");
3151
3237
  const command = new SummaryCommand();
3152
3238
  const result = await command.execute({ identifier, options });
3153
3239
  if (options.json && result) {
3154
3240
  console.log(JSON.stringify(result, null, 2));
3155
3241
  }
3242
+ await TelemetryService.getInstance().shutdown();
3156
3243
  process.exit(0);
3157
3244
  } catch (error) {
3158
3245
  if (options.json) {
@@ -3176,12 +3263,13 @@ program.command("summary").description("Generate Claude session summary for a lo
3176
3263
  program.command("recap").description("Get recap for a loom (defaults to current directory)").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--json", "Output as JSON with filePath for file watching").action(async (identifier, options) => {
3177
3264
  const executeAction = async () => {
3178
3265
  try {
3179
- const { RecapCommand } = await import("./recap-OMBOKJST.js");
3266
+ const { RecapCommand } = await import("./recap-GGVCG5VH.js");
3180
3267
  const command = new RecapCommand();
3181
3268
  const result = await command.execute({ identifier, json: options.json });
3182
3269
  if (options.json && result) {
3183
3270
  console.log(JSON.stringify(result, null, 2));
3184
3271
  }
3272
+ await TelemetryService.getInstance().shutdown();
3185
3273
  process.exit(0);
3186
3274
  } catch (error) {
3187
3275
  if (options.json) {
@@ -3205,7 +3293,7 @@ program.command("recap").description("Get recap for a loom (defaults to current
3205
3293
  var testJiraCommand = program.command("test-jira").description("Test Jira integration methods against a real Jira instance");
3206
3294
  testJiraCommand.command("child-issue").description("Create a test child issue under a parent").argument("<parentKey>", "Parent issue key (e.g., PROJ-123)").action(async (parentKey) => {
3207
3295
  try {
3208
- const { TestJiraCommand } = await import("./test-jira-LDTOYFSD.js");
3296
+ const { TestJiraCommand } = await import("./test-jira-FKDKG6CD.js");
3209
3297
  await new TestJiraCommand().createChildIssue(parentKey);
3210
3298
  } catch (error) {
3211
3299
  logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -3214,7 +3302,7 @@ testJiraCommand.command("child-issue").description("Create a test child issue un
3214
3302
  });
3215
3303
  testJiraCommand.command("create-dep").description('Create a "Blocks" dependency between two issues').argument("<blockingKey>", "Issue key that blocks (e.g., PROJ-100)").argument("<blockedKey>", "Issue key being blocked (e.g., PROJ-200)").action(async (blockingKey, blockedKey) => {
3216
3304
  try {
3217
- const { TestJiraCommand } = await import("./test-jira-LDTOYFSD.js");
3305
+ const { TestJiraCommand } = await import("./test-jira-FKDKG6CD.js");
3218
3306
  await new TestJiraCommand().createDependency(blockingKey, blockedKey);
3219
3307
  } catch (error) {
3220
3308
  logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -3223,7 +3311,7 @@ testJiraCommand.command("create-dep").description('Create a "Blocks" dependency
3223
3311
  });
3224
3312
  testJiraCommand.command("get-deps").description("Fetch and print dependencies for an issue").argument("<issueKey>", "Issue key (e.g., PROJ-123)").action(async (issueKey) => {
3225
3313
  try {
3226
- const { TestJiraCommand } = await import("./test-jira-LDTOYFSD.js");
3314
+ const { TestJiraCommand } = await import("./test-jira-FKDKG6CD.js");
3227
3315
  await new TestJiraCommand().getDependencies(issueKey);
3228
3316
  } catch (error) {
3229
3317
  logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -3232,7 +3320,7 @@ testJiraCommand.command("get-deps").description("Fetch and print dependencies fo
3232
3320
  });
3233
3321
  testJiraCommand.command("remove-dep").description('Remove a "Blocks" dependency between two issues').argument("<blockingKey>", "Issue key that blocks (e.g., PROJ-100)").argument("<blockedKey>", "Issue key being blocked (e.g., PROJ-200)").action(async (blockingKey, blockedKey) => {
3234
3322
  try {
3235
- const { TestJiraCommand } = await import("./test-jira-LDTOYFSD.js");
3323
+ const { TestJiraCommand } = await import("./test-jira-FKDKG6CD.js");
3236
3324
  await new TestJiraCommand().removeDependency(blockingKey, blockedKey);
3237
3325
  } catch (error) {
3238
3326
  logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -3241,7 +3329,7 @@ testJiraCommand.command("remove-dep").description('Remove a "Blocks" dependency
3241
3329
  });
3242
3330
  testJiraCommand.command("get-children").description("List child issues of a parent").argument("<issueKey>", "Parent issue key (e.g., PROJ-123)").action(async (issueKey) => {
3243
3331
  try {
3244
- const { TestJiraCommand } = await import("./test-jira-LDTOYFSD.js");
3332
+ const { TestJiraCommand } = await import("./test-jira-FKDKG6CD.js");
3245
3333
  await new TestJiraCommand().getChildIssues(issueKey);
3246
3334
  } catch (error) {
3247
3335
  logger.error(`Failed: ${error instanceof Error ? error.message : "Unknown error"}`);
@@ -3251,8 +3339,8 @@ testJiraCommand.command("get-children").description("List child issues of a pare
3251
3339
  program.command("test-neon").description("Test Neon integration and debug configuration").action(async () => {
3252
3340
  var _a2;
3253
3341
  try {
3254
- const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-FNKCOZMQ.js");
3255
- const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-CQN2PB4S.js");
3342
+ const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-WQ5NSGAH.js");
3343
+ const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-HWIYRKOW.js");
3256
3344
  logger.info("Testing Neon Integration\n");
3257
3345
  logger.info("1. Settings Configuration:");
3258
3346
  const settingsManager = new SettingsManager2();