@iloom/cli 0.11.1 → 0.12.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 (286) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +153 -13
  3. package/dist/BitBucketApiClient-J2ZSCS5N.js +10 -0
  4. package/dist/BitBucketVCSProvider-5X64IXXW.js +12 -0
  5. package/dist/{BranchNamingService-XBCO747L.js → BranchNamingService-MEK2WZUD.js} +4 -4
  6. package/dist/ClaudeContextManager-IENAE2CP.js +14 -0
  7. package/dist/ClaudeService-YIJCZUUB.js +13 -0
  8. package/dist/GitHubService-UTAYZXL3.js +12 -0
  9. package/dist/IssueTrackerFactory-2OI7YIN6.js +15 -0
  10. package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-3TSFW7QP.js} +10 -10
  11. package/dist/MetadataManager-V4LSJ2PB.js +10 -0
  12. package/dist/ProjectCapabilityDetector-I4J66WKF.js +11 -0
  13. package/dist/{PromptTemplateManager-T5VTLJP3.js → PromptTemplateManager-I75WKXM4.js} +3 -3
  14. package/dist/README.md +153 -13
  15. package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-BMQCAXPP.js} +13 -5
  16. package/dist/SettingsMigrationManager-ZPARZ5KH.js +10 -0
  17. package/dist/agents/iloom-code-reviewer.md +2 -1
  18. package/dist/agents/iloom-framework-detector.md +0 -1
  19. package/dist/agents/iloom-issue-analyze-and-plan.md +4 -1
  20. package/dist/agents/iloom-issue-analyzer.md +4 -1
  21. package/dist/agents/iloom-issue-complexity-evaluator.md +4 -1
  22. package/dist/agents/iloom-issue-enhancer.md +4 -1
  23. package/dist/agents/iloom-issue-implementer.md +5 -2
  24. package/dist/agents/iloom-issue-planner.md +4 -1
  25. package/dist/agents/iloom-wave-verifier.md +186 -0
  26. package/dist/browser-VZY7F2DF.js +10 -0
  27. package/dist/build-DMWSIME6.js +27 -0
  28. package/dist/{chunk-UHIBKD73.js → chunk-35CBWAJL.js} +13 -32
  29. package/dist/{chunk-UHIBKD73.js.map → chunk-35CBWAJL.js.map} +1 -1
  30. package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
  31. package/dist/chunk-4JZEQBWV.js.map +1 -0
  32. package/dist/{chunk-ET6A2JR4.js → chunk-653XBU3L.js} +111 -18
  33. package/dist/chunk-653XBU3L.js.map +1 -0
  34. package/dist/{chunk-G2MNSPA4.js → chunk-772N5WCA.js} +2 -2
  35. package/dist/{chunk-WG4MLJ6J.js → chunk-7RCUWU3I.js} +2 -2
  36. package/dist/chunk-7RCUWU3I.js.map +1 -0
  37. package/dist/{chunk-NOMQ5RFG.js → chunk-7UBEHQTP.js} +2 -2
  38. package/dist/{chunk-7NFCGKZT.js → chunk-AQUSMNBF.js} +3 -3
  39. package/dist/{chunk-IDCE26KD.js → chunk-AUYSAMXV.js} +3 -3
  40. package/dist/chunk-AYLC633W.js +406 -0
  41. package/dist/chunk-AYLC633W.js.map +1 -0
  42. package/dist/{chunk-HLDY5S4C.js → chunk-BFF27W3S.js} +3 -3
  43. package/dist/{chunk-QVAA5KHK.js → chunk-BZ7KTXPB.js} +16 -8
  44. package/dist/chunk-BZ7KTXPB.js.map +1 -0
  45. package/dist/{chunk-K7R5QY6C.js → chunk-CE676WCN.js} +2 -2
  46. package/dist/{chunk-5UFGO4ZT.js → chunk-CQHHEW2M.js} +6 -3
  47. package/dist/chunk-CQHHEW2M.js.map +1 -0
  48. package/dist/{chunk-LHDD4JHC.js → chunk-D4Q7T5KD.js} +4 -4
  49. package/dist/{chunk-RBYTXYGD.js → chunk-D75KSI3V.js} +2 -2
  50. package/dist/{chunk-Y3RX7LZT.js → chunk-DDHWZNGL.js} +18 -12
  51. package/dist/chunk-DDHWZNGL.js.map +1 -0
  52. package/dist/{chunk-5LTID2AF.js → chunk-DMSL5BAP.js} +35 -6
  53. package/dist/{chunk-5LTID2AF.js.map → chunk-DMSL5BAP.js.map} +1 -1
  54. package/dist/{chunk-SQYHPBFP.js → chunk-EGNUOALL.js} +2 -2
  55. package/dist/{chunk-LL6TOX3G.js → chunk-EQIII6GI.js} +10 -10
  56. package/dist/chunk-EQIII6GI.js.map +1 -0
  57. package/dist/{chunk-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
  58. package/dist/{chunk-LE2NOUTN.js → chunk-FV4KXBGO.js} +3 -3
  59. package/dist/{chunk-XFQGI2E3.js → chunk-GWJWECZB.js} +51 -45
  60. package/dist/chunk-GWJWECZB.js.map +1 -0
  61. package/dist/{chunk-QNHZM5ZV.js → chunk-HIGWKLQR.js} +3 -3
  62. package/dist/{chunk-VMZG66UV.js → chunk-HKEXRZMU.js} +3 -3
  63. package/dist/{chunk-V4STTBQD.js → chunk-IHSA7VGI.js} +9 -9
  64. package/dist/{chunk-TEJAGQX2.js → chunk-IS46GQRA.js} +33 -33
  65. package/dist/{chunk-VNYWBHKR.js → chunk-JD3K2344.js} +3 -3
  66. package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
  67. package/dist/{chunk-QR4FU53I.js → chunk-KCZSUJUR.js} +22 -12
  68. package/dist/chunk-KCZSUJUR.js.map +1 -0
  69. package/dist/{chunk-NH3QZYE5.js → chunk-KV4NU3RP.js} +2 -2
  70. package/dist/{chunk-NDSGJZI2.js → chunk-LOAYWTJJ.js} +2 -2
  71. package/dist/{chunk-ABVMUNCD.js → chunk-M3FBM4T3.js} +64 -10
  72. package/dist/chunk-M3FBM4T3.js.map +1 -0
  73. package/dist/{chunk-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
  74. package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
  75. package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
  76. package/dist/{chunk-7FIXNAUO.js → chunk-OKB2NEDQ.js} +66 -43
  77. package/dist/chunk-OKB2NEDQ.js.map +1 -0
  78. package/dist/{chunk-3RXYOBME.js → chunk-OPQC4OWM.js} +5 -5
  79. package/dist/{chunk-3RXYOBME.js.map → chunk-OPQC4OWM.js.map} +1 -1
  80. package/dist/chunk-P5MXXHXQ.js +284 -0
  81. package/dist/chunk-P5MXXHXQ.js.map +1 -0
  82. package/dist/{chunk-IR74O2F6.js → chunk-PDG74IJT.js} +239 -162
  83. package/dist/chunk-PDG74IJT.js.map +1 -0
  84. package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
  85. package/dist/{chunk-TZNNJLGT.js → chunk-PMB6TYV4.js} +6 -6
  86. package/dist/chunk-QC65IOV3.js +304 -0
  87. package/dist/chunk-QC65IOV3.js.map +1 -0
  88. package/dist/{chunk-6YVJVUR4.js → chunk-QF2DROQR.js} +3 -3
  89. package/dist/{chunk-XXFSOVL3.js → chunk-QFDM23CO.js} +4 -4
  90. package/dist/{chunk-RMLADZRY.js → chunk-R7DGN73N.js} +5 -5
  91. package/dist/{chunk-5PNZBH6V.js → chunk-V5IYLWRA.js} +2 -2
  92. package/dist/{chunk-KQFIGI37.js → chunk-VA6CWUAE.js} +7 -7
  93. package/dist/{chunk-3GTUXW26.js → chunk-VIQOQ463.js} +19 -3
  94. package/dist/chunk-VIQOQ463.js.map +1 -0
  95. package/dist/{chunk-H2SSF24U.js → chunk-VRPPI6GU.js} +17 -6
  96. package/dist/{chunk-H2SSF24U.js.map → chunk-VRPPI6GU.js.map} +1 -1
  97. package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
  98. package/dist/{chunk-VUUN3KE4.js → chunk-XVCGPTEQ.js} +8 -8
  99. package/dist/chunk-XVCGPTEQ.js.map +1 -0
  100. package/dist/chunk-YWNF5755.js +696 -0
  101. package/dist/chunk-YWNF5755.js.map +1 -0
  102. package/dist/{chunk-UDCI3QTS.js → chunk-ZM2AYHMO.js} +2 -2
  103. package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
  104. package/dist/{cleanup-YOM6PQCN.js → cleanup-RLBLNQZN.js} +37 -34
  105. package/dist/{cleanup-YOM6PQCN.js.map → cleanup-RLBLNQZN.js.map} +1 -1
  106. package/dist/cli.js +290 -141
  107. package/dist/cli.js.map +1 -1
  108. package/dist/{color-VQD52LOI.js → color-AC6F2QE7.js} +3 -3
  109. package/dist/{commit-DC2Q5CDY.js → commit-RILBXFWO.js} +15 -15
  110. package/dist/{compile-4NCQECKE.js → compile-QEL5724K.js} +11 -11
  111. package/dist/{contribute-M5UWXCAV.js → contribute-EHWLYOMZ.js} +11 -11
  112. package/dist/{contribute-M5UWXCAV.js.map → contribute-EHWLYOMZ.js.map} +1 -1
  113. package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
  114. package/dist/{dev-server-CYRP6M73.js → dev-server-2WSWZXJG.js} +35 -21
  115. package/dist/dev-server-2WSWZXJG.js.map +1 -0
  116. package/dist/{feedback-BMAZGKRW.js → feedback-I6ZEHEUB.js} +17 -17
  117. package/dist/{git-BXUD6CL5.js → git-I3PO6FY7.js} +6 -6
  118. package/dist/ignite-XZFYRVRJ.js +35 -0
  119. package/dist/index.d.ts +200 -16
  120. package/dist/index.js +164 -55
  121. package/dist/index.js.map +1 -1
  122. package/dist/{init-CI43GJHV.js → init-A6WRP77L.js} +18 -18
  123. package/dist/{install-deps-SRTM5U7D.js → install-deps-HXP2TM7G.js} +11 -11
  124. package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
  125. package/dist/{issues-DMRQJH7E.js → issues-SUFQJY6O.js} +69 -56
  126. package/dist/issues-SUFQJY6O.js.map +1 -0
  127. package/dist/lint-FDZC77GL.js +27 -0
  128. package/dist/{linux-RYLOP2LY.js → linux-WUGRYCJY.js} +2 -2
  129. package/dist/mcp/{chunk-PIIRD4LO.js → chunk-4HZMW2V3.js} +1 -1
  130. package/dist/mcp/{chunk-PIIRD4LO.js.map → chunk-4HZMW2V3.js.map} +1 -1
  131. package/dist/{darwin-5BHWRJ7D.js → mcp/darwin-U25WIGH6.js} +2 -2
  132. package/dist/mcp/issue-management-server.js +900 -20
  133. package/dist/mcp/issue-management-server.js.map +1 -1
  134. package/dist/mcp/{linux-JBVS4R3A.js → linux-5BXVBGSY.js} +2 -2
  135. package/dist/mcp/recap-server.js +24 -22
  136. package/dist/mcp/recap-server.js.map +1 -1
  137. package/dist/mcp/{tmux-RYBLEHUZ.js → tmux-CU26ZTNM.js} +2 -2
  138. package/dist/mcp/{wsl-4QZIQLLE.js → wsl-KI25UDOF.js} +2 -2
  139. package/dist/neon-helpers-LCZAN4U4.js +11 -0
  140. package/dist/{open-2Y7GSUTJ.js → open-US4XACLW.js} +36 -21
  141. package/dist/open-US4XACLW.js.map +1 -0
  142. package/dist/{plan-SWFPLNJE.js → plan-PL3ZB32J.js} +47 -43
  143. package/dist/{plan-SWFPLNJE.js.map → plan-PL3ZB32J.js.map} +1 -1
  144. package/dist/{projects-IUSUXD5D.js → projects-L5AHUBGA.js} +6 -6
  145. package/dist/{prompt-7LZB4PAT.js → prompt-FUU5NMJQ.js} +3 -3
  146. package/dist/prompt-FUU5NMJQ.js.map +1 -0
  147. package/dist/prompts/init-prompt.txt +160 -23
  148. package/dist/prompts/issue-prompt.txt +93 -157
  149. package/dist/prompts/plan-prompt.txt +55 -0
  150. package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
  151. package/dist/{rebase-S6OHAOOF.js → rebase-JA3RW2XO.js} +12 -12
  152. package/dist/{recap-GGVCG5VH.js → recap-5TO42HN2.js} +9 -9
  153. package/dist/{remote-MZTFHHTU.js → remote-RO4LZKT2.js} +3 -3
  154. package/dist/remote-RO4LZKT2.js.map +1 -0
  155. package/dist/{run-ST3FR75O.js → run-KKCRBRLW.js} +36 -21
  156. package/dist/run-KKCRBRLW.js.map +1 -0
  157. package/dist/schema/settings.schema.json +147 -11
  158. package/dist/{shell-W4SBQPTE.js → shell-GAB2FCXH.js} +8 -8
  159. package/dist/{summary-P2JCIIJO.js → summary-P7QE3TNW.js} +21 -19
  160. package/dist/summary-P7QE3TNW.js.map +1 -0
  161. package/dist/test-6LFB5WOO.js +27 -0
  162. package/dist/{test-git-2KFFAQ6B.js → test-git-PYJOYSED.js} +6 -6
  163. package/dist/{test-jira-FKDKG6CD.js → test-jira-SM7IU5HW.js} +8 -8
  164. package/dist/{test-prefix-GP2DAX37.js → test-prefix-HIRZBXTM.js} +6 -6
  165. package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
  166. package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-43PVP2JL.js} +8 -8
  167. package/dist/{tmux-7ZTA3BDI.js → tmux-6LRFH3DM.js} +2 -2
  168. package/dist/{update-XLW7R7FL.js → update-AD3GE5C4.js} +4 -4
  169. package/dist/{update-notifier-EYLAXZAA.js → update-notifier-VYDTDMSJ.js} +3 -3
  170. package/dist/update-notifier-VYDTDMSJ.js.map +1 -0
  171. package/dist/{vscode-TOGE5N67.js → vscode-HXIXRZ3A.js} +12 -12
  172. package/dist/{vscode-announcement-NIX7O2MG.js → vscode-announcement-AL3EHORH.js} +3 -3
  173. package/dist/{wsl-Y4GUTOQ7.js → wsl-4VMVT2PO.js} +2 -2
  174. package/package.json +1 -1
  175. package/dist/ClaudeContextManager-SXDCWDJA.js +0 -14
  176. package/dist/ClaudeService-6E6MCGJE.js +0 -13
  177. package/dist/GitHubService-2R5GQG4K.js +0 -12
  178. package/dist/IssueTrackerFactory-XN6MQ4UN.js +0 -14
  179. package/dist/MetadataManager-CMQQTFLQ.js +0 -10
  180. package/dist/ProjectCapabilityDetector-IC6NAFGY.js +0 -11
  181. package/dist/SettingsMigrationManager-S6J7OHUH.js +0 -10
  182. package/dist/build-OLS6J5KZ.js +0 -27
  183. package/dist/chunk-3GTUXW26.js.map +0 -1
  184. package/dist/chunk-5UFGO4ZT.js.map +0 -1
  185. package/dist/chunk-7FIXNAUO.js.map +0 -1
  186. package/dist/chunk-ABVMUNCD.js.map +0 -1
  187. package/dist/chunk-ET6A2JR4.js.map +0 -1
  188. package/dist/chunk-IR74O2F6.js.map +0 -1
  189. package/dist/chunk-LL6TOX3G.js.map +0 -1
  190. package/dist/chunk-QR4FU53I.js.map +0 -1
  191. package/dist/chunk-QVAA5KHK.js.map +0 -1
  192. package/dist/chunk-RVI6C2H5.js +0 -220
  193. package/dist/chunk-RVI6C2H5.js.map +0 -1
  194. package/dist/chunk-VUUN3KE4.js.map +0 -1
  195. package/dist/chunk-WG4MLJ6J.js.map +0 -1
  196. package/dist/chunk-XFQGI2E3.js.map +0 -1
  197. package/dist/chunk-Y3RX7LZT.js.map +0 -1
  198. package/dist/chunk-YRCEOQPX.js.map +0 -1
  199. package/dist/dev-server-CYRP6M73.js.map +0 -1
  200. package/dist/ignite-IO4LXVXJ.js +0 -35
  201. package/dist/issues-DMRQJH7E.js.map +0 -1
  202. package/dist/lint-BSWRMGPZ.js +0 -27
  203. package/dist/neon-helpers-HWIYRKOW.js +0 -11
  204. package/dist/open-2Y7GSUTJ.js.map +0 -1
  205. package/dist/run-ST3FR75O.js.map +0 -1
  206. package/dist/summary-P2JCIIJO.js.map +0 -1
  207. package/dist/test-6JH4FE2X.js +0 -27
  208. /package/dist/{BranchNamingService-XBCO747L.js.map → BitBucketApiClient-J2ZSCS5N.js.map} +0 -0
  209. /package/dist/{ClaudeContextManager-SXDCWDJA.js.map → BitBucketVCSProvider-5X64IXXW.js.map} +0 -0
  210. /package/dist/{ClaudeService-6E6MCGJE.js.map → BranchNamingService-MEK2WZUD.js.map} +0 -0
  211. /package/dist/{GitHubService-2R5GQG4K.js.map → ClaudeContextManager-IENAE2CP.js.map} +0 -0
  212. /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-YIJCZUUB.js.map} +0 -0
  213. /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
  214. /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-2OI7YIN6.js.map} +0 -0
  215. /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-3TSFW7QP.js.map} +0 -0
  216. /package/dist/{PromptTemplateManager-T5VTLJP3.js.map → MetadataManager-V4LSJ2PB.js.map} +0 -0
  217. /package/dist/{SettingsManager-WQ5NSGAH.js.map → ProjectCapabilityDetector-I4J66WKF.js.map} +0 -0
  218. /package/dist/{SettingsMigrationManager-S6J7OHUH.js.map → PromptTemplateManager-I75WKXM4.js.map} +0 -0
  219. /package/dist/{claude-ONQTDWV3.js.map → SettingsManager-BMQCAXPP.js.map} +0 -0
  220. /package/dist/{color-VQD52LOI.js.map → SettingsMigrationManager-ZPARZ5KH.js.map} +0 -0
  221. /package/dist/{darwin-5BHWRJ7D.js.map → browser-VZY7F2DF.js.map} +0 -0
  222. /package/dist/{build-OLS6J5KZ.js.map → build-DMWSIME6.js.map} +0 -0
  223. /package/dist/{chunk-G2MNSPA4.js.map → chunk-772N5WCA.js.map} +0 -0
  224. /package/dist/{chunk-NOMQ5RFG.js.map → chunk-7UBEHQTP.js.map} +0 -0
  225. /package/dist/{chunk-7NFCGKZT.js.map → chunk-AQUSMNBF.js.map} +0 -0
  226. /package/dist/{chunk-IDCE26KD.js.map → chunk-AUYSAMXV.js.map} +0 -0
  227. /package/dist/{chunk-HLDY5S4C.js.map → chunk-BFF27W3S.js.map} +0 -0
  228. /package/dist/{chunk-K7R5QY6C.js.map → chunk-CE676WCN.js.map} +0 -0
  229. /package/dist/{chunk-LHDD4JHC.js.map → chunk-D4Q7T5KD.js.map} +0 -0
  230. /package/dist/{chunk-RBYTXYGD.js.map → chunk-D75KSI3V.js.map} +0 -0
  231. /package/dist/{chunk-SQYHPBFP.js.map → chunk-EGNUOALL.js.map} +0 -0
  232. /package/dist/{chunk-ZAXRQLK3.js.map → chunk-FTYWGQFM.js.map} +0 -0
  233. /package/dist/{chunk-LE2NOUTN.js.map → chunk-FV4KXBGO.js.map} +0 -0
  234. /package/dist/{chunk-QNHZM5ZV.js.map → chunk-HIGWKLQR.js.map} +0 -0
  235. /package/dist/{chunk-VMZG66UV.js.map → chunk-HKEXRZMU.js.map} +0 -0
  236. /package/dist/{chunk-V4STTBQD.js.map → chunk-IHSA7VGI.js.map} +0 -0
  237. /package/dist/{chunk-TEJAGQX2.js.map → chunk-IS46GQRA.js.map} +0 -0
  238. /package/dist/{chunk-VNYWBHKR.js.map → chunk-JD3K2344.js.map} +0 -0
  239. /package/dist/{chunk-NCPZYQ4B.js.map → chunk-K3QGG4O2.js.map} +0 -0
  240. /package/dist/{chunk-NH3QZYE5.js.map → chunk-KV4NU3RP.js.map} +0 -0
  241. /package/dist/{chunk-NDSGJZI2.js.map → chunk-LOAYWTJJ.js.map} +0 -0
  242. /package/dist/{chunk-GMDSYLI6.js.map → chunk-MY2Q3FJ3.js.map} +0 -0
  243. /package/dist/{chunk-CV47VCMQ.js.map → chunk-NPVA65KS.js.map} +0 -0
  244. /package/dist/{chunk-7OCGBJLR.js.map → chunk-OIVFHJOA.js.map} +0 -0
  245. /package/dist/{chunk-NN5RYWXA.js.map → chunk-PH65MFQM.js.map} +0 -0
  246. /package/dist/{chunk-TZNNJLGT.js.map → chunk-PMB6TYV4.js.map} +0 -0
  247. /package/dist/{chunk-6YVJVUR4.js.map → chunk-QF2DROQR.js.map} +0 -0
  248. /package/dist/{chunk-XXFSOVL3.js.map → chunk-QFDM23CO.js.map} +0 -0
  249. /package/dist/{chunk-RMLADZRY.js.map → chunk-R7DGN73N.js.map} +0 -0
  250. /package/dist/{chunk-5PNZBH6V.js.map → chunk-V5IYLWRA.js.map} +0 -0
  251. /package/dist/{chunk-KQFIGI37.js.map → chunk-VA6CWUAE.js.map} +0 -0
  252. /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
  253. /package/dist/{chunk-UDCI3QTS.js.map → chunk-ZM2AYHMO.js.map} +0 -0
  254. /package/dist/{git-BXUD6CL5.js.map → claude-ACL7G4CF.js.map} +0 -0
  255. /package/dist/{ignite-IO4LXVXJ.js.map → color-AC6F2QE7.js.map} +0 -0
  256. /package/dist/{commit-DC2Q5CDY.js.map → commit-RILBXFWO.js.map} +0 -0
  257. /package/dist/{compile-4NCQECKE.js.map → compile-QEL5724K.js.map} +0 -0
  258. /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
  259. /package/dist/{feedback-BMAZGKRW.js.map → feedback-I6ZEHEUB.js.map} +0 -0
  260. /package/dist/{mcp/darwin-3JFFE3W2.js.map → git-I3PO6FY7.js.map} +0 -0
  261. /package/dist/{neon-helpers-HWIYRKOW.js.map → ignite-XZFYRVRJ.js.map} +0 -0
  262. /package/dist/{init-CI43GJHV.js.map → init-A6WRP77L.js.map} +0 -0
  263. /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-HXP2TM7G.js.map} +0 -0
  264. /package/dist/{prompt-7LZB4PAT.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
  265. /package/dist/{lint-BSWRMGPZ.js.map → lint-FDZC77GL.js.map} +0 -0
  266. /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
  267. /package/dist/{remote-MZTFHHTU.js.map → mcp/darwin-U25WIGH6.js.map} +0 -0
  268. /package/dist/mcp/{linux-JBVS4R3A.js.map → linux-5BXVBGSY.js.map} +0 -0
  269. /package/dist/mcp/{tmux-RYBLEHUZ.js.map → tmux-CU26ZTNM.js.map} +0 -0
  270. /package/dist/mcp/{wsl-4QZIQLLE.js.map → wsl-KI25UDOF.js.map} +0 -0
  271. /package/dist/{update-notifier-EYLAXZAA.js.map → neon-helpers-LCZAN4U4.js.map} +0 -0
  272. /package/dist/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
  273. /package/dist/{rebase-S6OHAOOF.js.map → rebase-JA3RW2XO.js.map} +0 -0
  274. /package/dist/{recap-GGVCG5VH.js.map → recap-5TO42HN2.js.map} +0 -0
  275. /package/dist/{shell-W4SBQPTE.js.map → shell-GAB2FCXH.js.map} +0 -0
  276. /package/dist/{test-6JH4FE2X.js.map → test-6LFB5WOO.js.map} +0 -0
  277. /package/dist/{test-git-2KFFAQ6B.js.map → test-git-PYJOYSED.js.map} +0 -0
  278. /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-SM7IU5HW.js.map} +0 -0
  279. /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-HIRZBXTM.js.map} +0 -0
  280. /package/dist/{test-tabs-YDWMWTVA.js.map → test-tabs-NGPTFD5T.js.map} +0 -0
  281. /package/dist/{test-webserver-QI3QQFZ3.js.map → test-webserver-43PVP2JL.js.map} +0 -0
  282. /package/dist/{tmux-7ZTA3BDI.js.map → tmux-6LRFH3DM.js.map} +0 -0
  283. /package/dist/{update-XLW7R7FL.js.map → update-AD3GE5C4.js.map} +0 -0
  284. /package/dist/{vscode-TOGE5N67.js.map → vscode-HXIXRZ3A.js.map} +0 -0
  285. /package/dist/{vscode-announcement-NIX7O2MG.js.map → vscode-announcement-AL3EHORH.js.map} +0 -0
  286. /package/dist/{wsl-Y4GUTOQ7.js.map → wsl-4VMVT2PO.js.map} +0 -0
package/dist/index.js CHANGED
@@ -999,6 +999,8 @@ __export(SettingsManager_exports, {
999
999
  CapabilitiesSettingsSchema: () => CapabilitiesSettingsSchema,
1000
1000
  CapabilitiesSettingsSchemaNoDefaults: () => CapabilitiesSettingsSchemaNoDefaults,
1001
1001
  DatabaseProvidersSettingsSchema: () => DatabaseProvidersSettingsSchema,
1002
+ DevServerSettingsSchema: () => DevServerSettingsSchema,
1003
+ DevServerSettingsSchemaNoDefaults: () => DevServerSettingsSchemaNoDefaults,
1002
1004
  IloomSettingsSchema: () => IloomSettingsSchema,
1003
1005
  IloomSettingsSchemaNoDefaults: () => IloomSettingsSchemaNoDefaults,
1004
1006
  NeonSettingsSchema: () => NeonSettingsSchema,
@@ -1009,7 +1011,9 @@ __export(SettingsManager_exports, {
1009
1011
  WorkflowPermissionSchema: () => WorkflowPermissionSchema,
1010
1012
  WorkflowPermissionSchemaNoDefaults: () => WorkflowPermissionSchemaNoDefaults,
1011
1013
  WorkflowsSettingsSchema: () => WorkflowsSettingsSchema,
1012
- WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults
1014
+ WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults,
1015
+ mergeModeValues: () => mergeModeValues,
1016
+ redactSensitiveFields: () => redactSensitiveFields
1013
1017
  });
1014
1018
  import { readFile } from "fs/promises";
1015
1019
  import path2 from "path";
@@ -1020,7 +1024,7 @@ function redactSensitiveFields(obj) {
1020
1024
  if (obj === null || obj === void 0) return obj;
1021
1025
  if (typeof obj !== "object") return obj;
1022
1026
  if (Array.isArray(obj)) return obj.map(redactSensitiveFields);
1023
- const sensitiveKeys = ["apitoken", "token", "secret", "password"];
1027
+ const sensitiveKeys = ["apitoken", "token", "secret", "password", "credential"];
1024
1028
  const result = {};
1025
1029
  for (const [key, value] of Object.entries(obj)) {
1026
1030
  const lowerKey = key.toLowerCase();
@@ -1034,11 +1038,16 @@ function redactSensitiveFields(obj) {
1034
1038
  }
1035
1039
  return result;
1036
1040
  }
1037
- var BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, NeonSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
1041
+ var mergeModeValues, mergeModeTransform, BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, DevServerSettingsSchema, DevServerSettingsSchemaNoDefaults, NeonSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
1038
1042
  var init_SettingsManager = __esm({
1039
1043
  "src/lib/SettingsManager.ts"() {
1040
1044
  "use strict";
1041
1045
  init_logger();
1046
+ mergeModeValues = ["local", "pr", "draft-pr", "github-pr", "github-draft-pr", "bitbucket-pr"];
1047
+ mergeModeTransform = (val) => {
1048
+ const map = { "github-pr": "pr", "github-draft-pr": "draft-pr", "bitbucket-pr": "pr" };
1049
+ return map[val] ?? val;
1050
+ };
1042
1051
  BaseAgentSettingsSchema = z.object({
1043
1052
  model: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Claude model shorthand: sonnet, opus, or haiku"),
1044
1053
  swarmModel: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Model to use for this agent in swarm mode. Overrides the base model when running inside swarm workers."),
@@ -1050,9 +1059,7 @@ var init_SettingsManager = __esm({
1050
1059
  review: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed before posting (defaults to false)"),
1051
1060
  swarmReview: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed in swarm mode. Defaults to false if not set (review is off in swarm mode for speed and cost unless explicitly enabled).")
1052
1061
  });
1053
- AgentSettingsSchema = BaseAgentSettingsSchema.extend({
1054
- subAgentTimeout: z.number().min(1, "Sub-agent timeout must be at least 1 minute").max(120, "Sub-agent timeout cannot exceed 120 minutes").default(10).describe("Timeout in minutes for sub-agent claude -p invocations in swarm mode. Applies to each phase agent (evaluator, analyzer, planner, implementer) when invoked via the Bash tool. Default: 10 minutes. Only meaningful under the iloom-swarm-worker agent entry.")
1055
- });
1062
+ AgentSettingsSchema = BaseAgentSettingsSchema;
1056
1063
  SpinAgentSettingsSchema = z.object({
1057
1064
  model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for spin orchestrator"),
1058
1065
  swarmModel: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Model for the spin orchestrator when running in swarm mode. Overrides spin.model for swarm workflows."),
@@ -1061,7 +1068,8 @@ var init_SettingsManager = __esm({
1061
1068
  PlanCommandSettingsSchema = z.object({
1062
1069
  model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for plan command"),
1063
1070
  planner: z.enum(["claude", "gemini", "codex"]).default("claude").describe("AI provider for creating the plan"),
1064
- reviewer: z.enum(["claude", "gemini", "codex", "none"]).default("none").describe("AI provider for reviewing the plan (none to skip review)")
1071
+ reviewer: z.enum(["claude", "gemini", "codex", "none"]).default("none").describe("AI provider for reviewing the plan (none to skip review)"),
1072
+ waveVerification: z.boolean().default(true).describe("When enabled, the planner generates verification child issues between dependency waves to catch integration issues early.")
1065
1073
  });
1066
1074
  SummarySettingsSchema = z.object({
1067
1075
  model: z.enum(["sonnet", "opus", "haiku"]).default("sonnet").describe("Claude model shorthand for session summary generation")
@@ -1096,7 +1104,12 @@ var init_SettingsManager = __esm({
1096
1104
  }).optional();
1097
1105
  CapabilitiesSettingsSchema = z.object({
1098
1106
  web: z.object({
1099
- basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)")
1107
+ basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)"),
1108
+ devServer: z.enum(["process", "docker"]).default("process").describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
1109
+ dockerFile: z.string().default("./Dockerfile").describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
1110
+ containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
1111
+ dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
1112
+ dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
1100
1113
  }).optional().describe('Web dev server settings. To declare a project as a web project, add "web" to the capabilities array in .iloom/package.iloom.json or .iloom/package.iloom.local.json.'),
1101
1114
  database: z.object({
1102
1115
  databaseUrlEnvVarName: z.string().min(1, "Database URL variable name cannot be empty").regex(/^[A-Z_][A-Z0-9_]*$/, "Must be valid env var name (uppercase, underscores)").optional().default("DATABASE_URL").describe("Name of environment variable for database connection URL")
@@ -1104,12 +1117,56 @@ var init_SettingsManager = __esm({
1104
1117
  }).optional();
1105
1118
  CapabilitiesSettingsSchemaNoDefaults = z.object({
1106
1119
  web: z.object({
1107
- basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)")
1120
+ basePort: z.number().min(1, "Base port must be >= 1").max(65535, "Base port must be <= 65535").optional().describe("Base port for web workspace port calculations (default: 3000)"),
1121
+ devServer: z.enum(["process", "docker"]).optional().describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
1122
+ dockerFile: z.string().optional().describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
1123
+ containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
1124
+ dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
1125
+ dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
1108
1126
  }).optional().describe('Web dev server settings. To declare a project as a web project, add "web" to the capabilities array in .iloom/package.iloom.json or .iloom/package.iloom.local.json.'),
1109
1127
  database: z.object({
1110
1128
  databaseUrlEnvVarName: z.string().min(1, "Database URL variable name cannot be empty").regex(/^[A-Z_][A-Z0-9_]*$/, "Must be valid env var name (uppercase, underscores)").optional().describe("Name of environment variable for database connection URL")
1111
1129
  }).optional()
1112
1130
  }).optional();
1131
+ DevServerSettingsSchema = z.object({
1132
+ mode: z.enum(["docker"]).default("docker").describe('Dev server mode. Currently only "docker" is supported.'),
1133
+ docker: z.object({
1134
+ dockerFile: z.string().default("./Dockerfile").refine(
1135
+ (val) => {
1136
+ if (path2.isAbsolute(val)) return false;
1137
+ const normalized = path2.normalize(val);
1138
+ if (normalized.startsWith("..")) return false;
1139
+ return true;
1140
+ },
1141
+ {
1142
+ message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
1143
+ }
1144
+ ).describe("Path to Dockerfile relative to worktree root"),
1145
+ containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
1146
+ buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
1147
+ runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
1148
+ }).optional()
1149
+ });
1150
+ DevServerSettingsSchemaNoDefaults = z.object({
1151
+ mode: z.enum(["docker"]).optional().describe('Dev server mode. Currently only "docker" is supported.'),
1152
+ docker: z.object({
1153
+ dockerFile: z.string().optional().refine(
1154
+ (val) => {
1155
+ if (val === void 0) return true;
1156
+ if (path2.isAbsolute(val)) return false;
1157
+ const normalized = path2.normalize(val);
1158
+ if (normalized.startsWith("..")) return false;
1159
+ return true;
1160
+ },
1161
+ {
1162
+ message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
1163
+ }
1164
+ ).describe("Path to Dockerfile relative to worktree root"),
1165
+ containerPort: z.number().min(1, "Container port must be >= 1").max(65535, "Container port must be <= 65535").optional().describe("Port the app runs on inside the Docker container (auto-detected from EXPOSE directive if not set)"),
1166
+ buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
1167
+ runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
1168
+ }).optional()
1169
+ });
1113
1170
  NeonSettingsSchema = z.object({
1114
1171
  projectId: z.string().min(1).regex(/^[a-zA-Z0-9-]+$/, "Neon project ID must contain only letters, numbers, and hyphens").describe('Neon project ID found in your project URL (e.g., "fantastic-fox-3566354")'),
1115
1172
  parentBranch: z.string().min(1).describe("Branch from which new database branches are created")
@@ -1161,6 +1218,7 @@ var init_SettingsManager = __esm({
1161
1218
  "Session summary generation configuration. Model defaults to sonnet when not configured."
1162
1219
  ),
1163
1220
  capabilities: CapabilitiesSettingsSchema.describe("Project capability configurations"),
1221
+ devServer: DevServerSettingsSchema.optional().describe("Docker-based dev server configuration"),
1164
1222
  databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
1165
1223
  issueManagement: z.object({
1166
1224
  // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
@@ -1185,17 +1243,28 @@ var init_SettingsManager = __esm({
1185
1243
  doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
1186
1244
  }).optional()
1187
1245
  }).optional().describe("Issue management configuration"),
1246
+ versionControl: z.object({
1247
+ provider: z.enum(["github", "bitbucket"]).optional().default("github").describe("Version control provider (github, bitbucket)"),
1248
+ bitbucket: z.object({
1249
+ username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
1250
+ apiToken: z.string().optional().describe("BitBucket API token. SECURITY: Store in settings.local.json only, never commit to source control. Generate at: https://bitbucket.org/account/settings/app-passwords/ (Note: App passwords deprecated Sep 2025, use API tokens)"),
1251
+ workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
1252
+ repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
1253
+ reviewers: z.array(z.string().describe("Reviewer username")).optional().describe("List of usernames to add as PR reviewers. Usernames are resolved to Bitbucket account IDs at PR creation time.")
1254
+ }).optional()
1255
+ }).optional().describe("Version control provider configuration"),
1188
1256
  mergeBehavior: z.object({
1189
1257
  // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
1190
- mode: z.enum(["local", "github-pr", "github-draft-pr"]).default("local"),
1258
+ mode: z.enum(mergeModeValues).default("local").transform(mergeModeTransform),
1191
1259
  remote: z.string().optional(),
1192
1260
  autoCommitPush: z.boolean().optional().describe(
1193
- "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is github-draft-pr."
1261
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
1194
1262
  ),
1263
+ prTitlePrefix: z.boolean().default(false).optional().describe('Prefix PR titles with the issue number (e.g., "QLH-123: Title"). Default: false'),
1195
1264
  openBrowserOnFinish: z.boolean().default(true).describe(
1196
- "Open the PR in the default browser after finishing in github-pr or github-draft-pr mode. Use --no-browser flag to override."
1265
+ "Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
1197
1266
  )
1198
- }).optional().describe("Merge behavior configuration: local (merge locally), github-pr (create PR), or github-draft-pr (create draft PR at start, mark ready on finish)"),
1267
+ }).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
1199
1268
  ide: z.object({
1200
1269
  // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
1201
1270
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).default("vscode").describe(
@@ -1257,12 +1326,14 @@ var init_SettingsManager = __esm({
1257
1326
  plan: z.object({
1258
1327
  model: z.enum(["sonnet", "opus", "haiku"]).optional(),
1259
1328
  planner: z.enum(["claude", "gemini", "codex"]).optional(),
1260
- reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional()
1329
+ reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional(),
1330
+ waveVerification: z.boolean().optional()
1261
1331
  }).optional().describe("Plan command configuration"),
1262
1332
  summary: z.object({
1263
1333
  model: z.enum(["sonnet", "opus", "haiku"]).optional()
1264
1334
  }).optional().describe("Session summary generation configuration"),
1265
1335
  capabilities: CapabilitiesSettingsSchemaNoDefaults.describe("Project capability configurations"),
1336
+ devServer: DevServerSettingsSchemaNoDefaults.optional().describe("Docker-based dev server configuration"),
1266
1337
  databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
1267
1338
  issueManagement: z.object({
1268
1339
  provider: z.enum(["github", "linear", "jira"]).optional().describe("Issue tracker provider (github, linear, jira)"),
@@ -1286,16 +1357,27 @@ var init_SettingsManager = __esm({
1286
1357
  doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
1287
1358
  }).optional()
1288
1359
  }).optional().describe("Issue management configuration"),
1360
+ versionControl: z.object({
1361
+ provider: z.enum(["github", "bitbucket"]).optional().describe("Version control provider (github, bitbucket)"),
1362
+ bitbucket: z.object({
1363
+ username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
1364
+ apiToken: z.string().optional().describe("BitBucket API token. SECURITY: Store in settings.local.json only, never commit to source control. Generate at: https://bitbucket.org/account/settings/app-passwords/ (Note: App passwords deprecated Sep 2025, use API tokens)"),
1365
+ workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
1366
+ repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
1367
+ reviewers: z.array(z.string().describe("Reviewer username")).optional().describe("List of usernames to add as PR reviewers. Usernames are resolved to Bitbucket account IDs at PR creation time.")
1368
+ }).optional()
1369
+ }).optional().describe("Version control provider configuration"),
1289
1370
  mergeBehavior: z.object({
1290
- mode: z.enum(["local", "github-pr", "github-draft-pr"]).optional(),
1371
+ mode: z.enum(mergeModeValues).transform(mergeModeTransform).optional(),
1291
1372
  remote: z.string().optional(),
1292
1373
  autoCommitPush: z.boolean().optional().describe(
1293
- "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is github-draft-pr."
1374
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
1294
1375
  ),
1376
+ prTitlePrefix: z.boolean().optional(),
1295
1377
  openBrowserOnFinish: z.boolean().optional().describe(
1296
- "Open the PR in the default browser after finishing in github-pr or github-draft-pr mode. Use --no-browser flag to override."
1378
+ "Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
1297
1379
  )
1298
- }).optional().describe("Merge behavior configuration: local (merge locally), github-pr (create PR), or github-draft-pr (create draft PR at start, mark ready on finish)"),
1380
+ }).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
1299
1381
  ide: z.object({
1300
1382
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).optional().describe(
1301
1383
  "IDE to launch when starting a loom. Options: vscode (Visual Studio Code), cursor (Cursor AI editor), webstorm (JetBrains WebStorm), sublime (Sublime Text), intellij (JetBrains IntelliJ IDEA), windsurf (Windsurf editor), antigravity (Antigravity IDE)."
@@ -1567,6 +1649,17 @@ ${errorMessages.join("\n")}`
1567
1649
  var _a;
1568
1650
  return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.reviewer) ?? "none";
1569
1651
  }
1652
+ /**
1653
+ * Get the plan command waveVerification setting with default applied
1654
+ * Default is true (verification tasks are generated)
1655
+ *
1656
+ * @param settings - Pre-loaded settings object
1657
+ * @returns Whether wave verification is enabled
1658
+ */
1659
+ getPlanWaveVerification(settings) {
1660
+ var _a;
1661
+ return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.waveVerification) !== false;
1662
+ }
1570
1663
  /**
1571
1664
  * Get the session summary model with default applied
1572
1665
  * Default is defined in SummarySettingsSchema
@@ -1850,7 +1943,8 @@ var MetadataManager = class {
1850
1943
  parentLoom: data.parentLoom ?? null,
1851
1944
  childIssues: data.childIssues ?? [],
1852
1945
  dependencyMap: data.dependencyMap ?? {},
1853
- mcpConfigPath: data.mcpConfigPath ?? null
1946
+ mcpConfigPath: data.mcpConfigPath ?? null,
1947
+ swarmTeamName: data.swarmTeamName ?? null
1854
1948
  };
1855
1949
  }
1856
1950
  /**
@@ -4710,7 +4804,7 @@ var JiraApiClient = class {
4710
4804
  };
4711
4805
 
4712
4806
  // src/lib/providers/jira/JiraIssueTracker.ts
4713
- var JiraIssueTracker = class {
4807
+ var JiraIssueTracker = class _JiraIssueTracker {
4714
4808
  constructor(config, options) {
4715
4809
  this.providerName = "jira";
4716
4810
  this.supportsPullRequests = false;
@@ -4722,6 +4816,36 @@ var JiraIssueTracker = class {
4722
4816
  });
4723
4817
  this.prompter = (options == null ? void 0 : options.prompter) ?? promptConfirmation;
4724
4818
  }
4819
+ /**
4820
+ * Create a JiraIssueTracker from IloomSettings
4821
+ * Extracts and validates Jira config from settings
4822
+ */
4823
+ static fromSettings(settings) {
4824
+ var _a;
4825
+ const jiraSettings = (_a = settings.issueManagement) == null ? void 0 : _a.jira;
4826
+ if (!(jiraSettings == null ? void 0 : jiraSettings.host)) {
4827
+ throw new Error("Jira host is required. Configure issueManagement.jira.host in .iloom/settings.json");
4828
+ }
4829
+ if (!(jiraSettings == null ? void 0 : jiraSettings.username)) {
4830
+ throw new Error("Jira username is required. Configure issueManagement.jira.username in .iloom/settings.json");
4831
+ }
4832
+ if (!(jiraSettings == null ? void 0 : jiraSettings.apiToken)) {
4833
+ throw new Error("Jira API token is required. Configure issueManagement.jira.apiToken in .iloom/settings.local.json");
4834
+ }
4835
+ if (!(jiraSettings == null ? void 0 : jiraSettings.projectKey)) {
4836
+ throw new Error("Jira project key is required. Configure issueManagement.jira.projectKey in .iloom/settings.json");
4837
+ }
4838
+ const config = {
4839
+ host: jiraSettings.host,
4840
+ username: jiraSettings.username,
4841
+ apiToken: jiraSettings.apiToken,
4842
+ projectKey: jiraSettings.projectKey
4843
+ };
4844
+ if (jiraSettings.transitionMappings) {
4845
+ config.transitionMappings = jiraSettings.transitionMappings;
4846
+ }
4847
+ return new _JiraIssueTracker(config);
4848
+ }
4725
4849
  /**
4726
4850
  * Normalize identifier to canonical uppercase form
4727
4851
  * Jira issue keys are case-sensitive in the API (must be uppercase)
@@ -5030,6 +5154,7 @@ ${entity.assignees.length > 0 ? `Assignees: ${entity.assignees.join(", ")}` : ""
5030
5154
  };
5031
5155
 
5032
5156
  // src/lib/IssueTrackerFactory.ts
5157
+ init_SettingsManager();
5033
5158
  var IssueTrackerFactory = class {
5034
5159
  /**
5035
5160
  * Create an IssueTracker instance based on settings configuration
@@ -5040,10 +5165,10 @@ var IssueTrackerFactory = class {
5040
5165
  * @throws Error if provider type is not supported
5041
5166
  */
5042
5167
  static create(settings) {
5043
- var _a, _b, _c;
5168
+ var _a, _b;
5044
5169
  const provider = ((_a = settings.issueManagement) == null ? void 0 : _a.provider) ?? "github";
5045
5170
  getLogger().debug(`IssueTrackerFactory: Creating tracker for provider "${provider}"`);
5046
- getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(settings.issueManagement, null, 2));
5171
+ getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(redactSensitiveFields(settings.issueManagement), null, 2));
5047
5172
  switch (provider) {
5048
5173
  case "github":
5049
5174
  getLogger().debug("IssueTrackerFactory: Creating GitHubService");
@@ -5060,34 +5185,12 @@ var IssueTrackerFactory = class {
5060
5185
  if (linearSettings == null ? void 0 : linearSettings.apiToken) {
5061
5186
  linearConfig.apiToken = linearSettings.apiToken;
5062
5187
  }
5063
- getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(linearConfig, null, 2));
5188
+ getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(redactSensitiveFields(linearConfig), null, 2));
5064
5189
  return new LinearService(linearConfig);
5065
5190
  }
5066
5191
  case "jira": {
5067
- const jiraSettings = (_c = settings.issueManagement) == null ? void 0 : _c.jira;
5068
- if (!(jiraSettings == null ? void 0 : jiraSettings.host)) {
5069
- throw new Error("Jira host is required. Configure issueManagement.jira.host in .iloom/settings.json");
5070
- }
5071
- if (!(jiraSettings == null ? void 0 : jiraSettings.username)) {
5072
- throw new Error("Jira username is required. Configure issueManagement.jira.username in .iloom/settings.json");
5073
- }
5074
- if (!(jiraSettings == null ? void 0 : jiraSettings.apiToken)) {
5075
- throw new Error("Jira API token is required. Configure issueManagement.jira.apiToken in .iloom/settings.local.json");
5076
- }
5077
- if (!(jiraSettings == null ? void 0 : jiraSettings.projectKey)) {
5078
- throw new Error("Jira project key is required. Configure issueManagement.jira.projectKey in .iloom/settings.json");
5079
- }
5080
- const jiraConfig = {
5081
- host: jiraSettings.host,
5082
- username: jiraSettings.username,
5083
- apiToken: jiraSettings.apiToken,
5084
- projectKey: jiraSettings.projectKey
5085
- };
5086
- if (jiraSettings.transitionMappings) {
5087
- jiraConfig.transitionMappings = jiraSettings.transitionMappings;
5088
- }
5089
- getLogger().debug(`IssueTrackerFactory: Creating JiraIssueTracker for host: ${jiraSettings.host}`);
5090
- return new JiraIssueTracker(jiraConfig);
5192
+ getLogger().debug(`IssueTrackerFactory: Creating JiraIssueTracker from settings`);
5193
+ return JiraIssueTracker.fromSettings(settings);
5091
5194
  }
5092
5195
  default:
5093
5196
  throw new Error(`Unsupported issue tracker provider: ${provider}`);
@@ -5600,7 +5703,7 @@ function parseJsonStreamOutput(output) {
5600
5703
  }
5601
5704
  }
5602
5705
  async function launchClaude(prompt, options = {}) {
5603
- const { model, permissionMode, addDir, headless = false, appendSystemPrompt, mcpConfig, allowedTools, disallowedTools, agents, pluginDir, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode, passthroughStdout, env: extraEnv, signal } = options;
5706
+ const { model, permissionMode, addDir, headless = false, appendSystemPrompt, appendSystemPromptFile, mcpConfig, allowedTools, disallowedTools, agents, pluginDir, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode, passthroughStdout, env: extraEnv, signal } = options;
5604
5707
  const log = getLogger();
5605
5708
  const args = [];
5606
5709
  if (headless) {
@@ -5624,6 +5727,9 @@ async function launchClaude(prompt, options = {}) {
5624
5727
  if (appendSystemPrompt) {
5625
5728
  args.push("--append-system-prompt", appendSystemPrompt);
5626
5729
  }
5730
+ if (appendSystemPromptFile) {
5731
+ args.push("--append-system-prompt-file", appendSystemPromptFile);
5732
+ }
5627
5733
  if (mcpConfig && mcpConfig.length > 0) {
5628
5734
  for (const config of mcpConfig) {
5629
5735
  args.push("--mcp-config", JSON.stringify(config));
@@ -5644,6 +5750,10 @@ async function launchClaude(prompt, options = {}) {
5644
5750
  if (sessionId) {
5645
5751
  args.push("--session-id", sessionId);
5646
5752
  }
5753
+ const isDebugMode = logger.isDebugEnabled();
5754
+ if (isDebugMode) {
5755
+ args.push("--debug");
5756
+ }
5647
5757
  if (noSessionPersistence && headless) {
5648
5758
  args.push("--no-session-persistence");
5649
5759
  }
@@ -5679,7 +5789,6 @@ async function launchClaude(prompt, options = {}) {
5679
5789
  return;
5680
5790
  }
5681
5791
  if (headless) {
5682
- const isDebugMode = logger.isDebugEnabled();
5683
5792
  const execaOptions = {
5684
5793
  input: prompt,
5685
5794
  timeout: 0,
@@ -5813,14 +5922,14 @@ async function launchClaude(prompt, options = {}) {
5813
5922
  resumeArgs.push("--resume", extractedSessionId);
5814
5923
  try {
5815
5924
  if (headless) {
5816
- const isDebugMode = logger.isDebugEnabled();
5925
+ const isDebugMode2 = logger.isDebugEnabled();
5817
5926
  const execaOptions = {
5818
5927
  input: prompt,
5819
5928
  timeout: 0,
5820
5929
  ...addDir && { cwd: addDir },
5821
- verbose: isDebugMode,
5930
+ verbose: isDebugMode2,
5822
5931
  env: claudeEnv,
5823
- ...isDebugMode && { stdio: ["pipe", "pipe", "pipe"] }
5932
+ ...isDebugMode2 && { stdio: ["pipe", "pipe", "pipe"] }
5824
5933
  };
5825
5934
  const subprocess = execa8("claude", resumeArgs, execaOptions);
5826
5935
  const isJsonStreamFormat = resumeArgs.includes("--output-format") && resumeArgs.includes("stream-json");
@@ -5835,7 +5944,7 @@ async function launchClaude(prompt, options = {}) {
5835
5944
  if (jsonMode === "stream") {
5836
5945
  process.stdout.write(text);
5837
5946
  } else if (jsonMode === "json") {
5838
- } else if (isDebugMode) {
5947
+ } else if (isDebugMode2) {
5839
5948
  log.stdout.write(text);
5840
5949
  } else {
5841
5950
  if (isFirstProgress) {
@@ -5850,12 +5959,12 @@ async function launchClaude(prompt, options = {}) {
5850
5959
  const result = await subprocess;
5851
5960
  if (isStreaming) {
5852
5961
  const rawOutput = outputBuffer.trim();
5853
- if (!isDebugMode && !jsonMode) {
5962
+ if (!isDebugMode2 && !jsonMode) {
5854
5963
  log.stdout.write("\n");
5855
5964
  }
5856
5965
  return isJsonStreamFormat ? parseJsonStreamOutput(rawOutput) : rawOutput;
5857
5966
  } else {
5858
- if (isDebugMode) {
5967
+ if (isDebugMode2) {
5859
5968
  log.stdout.write(result.stdout);
5860
5969
  if (result.stdout && !result.stdout.endsWith("\n")) {
5861
5970
  log.stdout.write("\n");