@iloom/cli 0.11.1 → 0.13.0-beta.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 (290) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +170 -15
  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-RRGREEZQ.js +14 -0
  7. package/dist/ClaudeService-LEPW6QAC.js +13 -0
  8. package/dist/GitHubService-UTAYZXL3.js +12 -0
  9. package/dist/IssueTrackerFactory-KE2BDCLC.js +15 -0
  10. package/dist/{LoomLauncher-5AZU2F5I.js → LoomLauncher-GKQMR5E6.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 +170 -15
  15. package/dist/{SettingsManager-WQ5NSGAH.js → SettingsManager-KQU7OX7G.js} +15 -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-V3KADFMO.js +27 -0
  28. package/dist/{chunk-XXFSOVL3.js → chunk-3XEXT35Z.js} +4 -4
  29. package/dist/{chunk-YRCEOQPX.js → chunk-4JZEQBWV.js} +4 -3
  30. package/dist/chunk-4JZEQBWV.js.map +1 -0
  31. package/dist/{chunk-LE2NOUTN.js → chunk-4VQXMEEP.js} +3 -3
  32. package/dist/{chunk-G2MNSPA4.js → chunk-772N5WCA.js} +2 -2
  33. package/dist/{chunk-WG4MLJ6J.js → chunk-7RCUWU3I.js} +2 -2
  34. package/dist/chunk-7RCUWU3I.js.map +1 -0
  35. package/dist/{chunk-NOMQ5RFG.js → chunk-7UBEHQTP.js} +2 -2
  36. package/dist/{chunk-7NFCGKZT.js → chunk-AQUSMNBF.js} +3 -3
  37. package/dist/{chunk-IDCE26KD.js → chunk-AUYSAMXV.js} +3 -3
  38. package/dist/chunk-AYLC633W.js +406 -0
  39. package/dist/chunk-AYLC633W.js.map +1 -0
  40. package/dist/{chunk-QVAA5KHK.js → chunk-BZ7KTXPB.js} +16 -8
  41. package/dist/chunk-BZ7KTXPB.js.map +1 -0
  42. package/dist/{chunk-K7R5QY6C.js → chunk-CE676WCN.js} +2 -2
  43. package/dist/{chunk-5UFGO4ZT.js → chunk-CQHHEW2M.js} +6 -3
  44. package/dist/chunk-CQHHEW2M.js.map +1 -0
  45. package/dist/{chunk-LHDD4JHC.js → chunk-D4Q7T5KD.js} +4 -4
  46. package/dist/{chunk-RBYTXYGD.js → chunk-D75KSI3V.js} +2 -2
  47. package/dist/{chunk-Y3RX7LZT.js → chunk-DDHWZNGL.js} +18 -12
  48. package/dist/chunk-DDHWZNGL.js.map +1 -0
  49. package/dist/{chunk-5LTID2AF.js → chunk-DMSL5BAP.js} +35 -6
  50. package/dist/{chunk-5LTID2AF.js.map → chunk-DMSL5BAP.js.map} +1 -1
  51. package/dist/{chunk-SQYHPBFP.js → chunk-EGNUOALL.js} +2 -2
  52. package/dist/{chunk-ZAXRQLK3.js → chunk-FTYWGQFM.js} +2 -2
  53. package/dist/{chunk-5PNZBH6V.js → chunk-H3T3EPF3.js} +2 -2
  54. package/dist/{chunk-VNYWBHKR.js → chunk-JD3K2344.js} +3 -3
  55. package/dist/{chunk-6YVJVUR4.js → chunk-JDN4SPV3.js} +3 -3
  56. package/dist/{chunk-NCPZYQ4B.js → chunk-K3QGG4O2.js} +2 -2
  57. package/dist/{chunk-ABVMUNCD.js → chunk-KQSV7FOG.js} +64 -10
  58. package/dist/chunk-KQSV7FOG.js.map +1 -0
  59. package/dist/{chunk-NH3QZYE5.js → chunk-KV4NU3RP.js} +2 -2
  60. package/dist/{chunk-NDSGJZI2.js → chunk-LOAYWTJJ.js} +2 -2
  61. package/dist/{chunk-GMDSYLI6.js → chunk-MY2Q3FJ3.js} +2 -2
  62. package/dist/{chunk-CV47VCMQ.js → chunk-NPVA65KS.js} +2 -2
  63. package/dist/{chunk-RMLADZRY.js → chunk-NTDY5AMO.js} +5 -5
  64. package/dist/{chunk-UHIBKD73.js → chunk-NUUFP53X.js} +13 -32
  65. package/dist/{chunk-UHIBKD73.js.map → chunk-NUUFP53X.js.map} +1 -1
  66. package/dist/{chunk-7OCGBJLR.js → chunk-OIVFHJOA.js} +2 -2
  67. package/dist/chunk-P5MXXHXQ.js +284 -0
  68. package/dist/chunk-P5MXXHXQ.js.map +1 -0
  69. package/dist/{chunk-TEJAGQX2.js → chunk-PD75ZCFT.js} +35 -35
  70. package/dist/chunk-PD75ZCFT.js.map +1 -0
  71. package/dist/{chunk-NN5RYWXA.js → chunk-PH65MFQM.js} +6 -6
  72. package/dist/{chunk-LL6TOX3G.js → chunk-Q7VXHJP6.js} +10 -10
  73. package/dist/chunk-Q7VXHJP6.js.map +1 -0
  74. package/dist/chunk-QC65IOV3.js +304 -0
  75. package/dist/chunk-QC65IOV3.js.map +1 -0
  76. package/dist/{chunk-V4STTBQD.js → chunk-QED2WB2D.js} +9 -9
  77. package/dist/{chunk-3RXYOBME.js → chunk-QNPJXO53.js} +5 -5
  78. package/dist/{chunk-3RXYOBME.js.map → chunk-QNPJXO53.js.map} +1 -1
  79. package/dist/chunk-QQULYI2S.js +696 -0
  80. package/dist/chunk-QQULYI2S.js.map +1 -0
  81. package/dist/{chunk-QNHZM5ZV.js → chunk-QXGM32TO.js} +3 -3
  82. package/dist/{chunk-TZNNJLGT.js → chunk-RFCAPHL5.js} +6 -6
  83. package/dist/{chunk-7FIXNAUO.js → chunk-SA446KA2.js} +66 -43
  84. package/dist/chunk-SA446KA2.js.map +1 -0
  85. package/dist/{chunk-UDCI3QTS.js → chunk-SN4S5CWL.js} +2 -2
  86. package/dist/{chunk-VUUN3KE4.js → chunk-TAEVA4QR.js} +8 -8
  87. package/dist/chunk-TAEVA4QR.js.map +1 -0
  88. package/dist/{chunk-IR74O2F6.js → chunk-TN2D2RX7.js} +253 -174
  89. package/dist/chunk-TN2D2RX7.js.map +1 -0
  90. package/dist/{chunk-3GTUXW26.js → chunk-VIQOQ463.js} +19 -3
  91. package/dist/chunk-VIQOQ463.js.map +1 -0
  92. package/dist/{chunk-H2SSF24U.js → chunk-VRPPI6GU.js} +17 -6
  93. package/dist/{chunk-H2SSF24U.js.map → chunk-VRPPI6GU.js.map} +1 -1
  94. package/dist/{chunk-XFQGI2E3.js → chunk-VVQQIG64.js} +58 -53
  95. package/dist/chunk-VVQQIG64.js.map +1 -0
  96. package/dist/{chunk-YETJNRQM.js → chunk-WEBMMJKL.js} +2 -1
  97. package/dist/{chunk-ET6A2JR4.js → chunk-WGUGB54H.js} +120 -18
  98. package/dist/chunk-WGUGB54H.js.map +1 -0
  99. package/dist/{chunk-QR4FU53I.js → chunk-X5DRLONY.js} +22 -12
  100. package/dist/chunk-X5DRLONY.js.map +1 -0
  101. package/dist/{chunk-KQFIGI37.js → chunk-XCP2WDYA.js} +7 -7
  102. package/dist/{chunk-VMZG66UV.js → chunk-YUOVWWJX.js} +312 -7
  103. package/dist/chunk-YUOVWWJX.js.map +1 -0
  104. package/dist/{chunk-HLDY5S4C.js → chunk-ZUIFO7B4.js} +3 -3
  105. package/dist/{claude-ONQTDWV3.js → claude-ACL7G4CF.js} +4 -4
  106. package/dist/{cleanup-YOM6PQCN.js → cleanup-RJKLI47I.js} +40 -37
  107. package/dist/cleanup-RJKLI47I.js.map +1 -0
  108. package/dist/cli.js +322 -169
  109. package/dist/cli.js.map +1 -1
  110. package/dist/{color-VQD52LOI.js → color-AC6F2QE7.js} +3 -3
  111. package/dist/{commit-DC2Q5CDY.js → commit-SUHRUMDE.js} +15 -15
  112. package/dist/{compile-4NCQECKE.js → compile-2MD346PO.js} +11 -11
  113. package/dist/{contribute-M5UWXCAV.js → contribute-P4BMRY7C.js} +11 -11
  114. package/dist/{contribute-M5UWXCAV.js.map → contribute-P4BMRY7C.js.map} +1 -1
  115. package/dist/{mcp/darwin-3JFFE3W2.js → darwin-5K3I4FTH.js} +2 -2
  116. package/dist/database-helpers-PRDFNDRO.js +11 -0
  117. package/dist/{dev-server-CYRP6M73.js → dev-server-ZNTLWOL5.js} +35 -21
  118. package/dist/dev-server-ZNTLWOL5.js.map +1 -0
  119. package/dist/{feedback-BMAZGKRW.js → feedback-Q6WG2WX4.js} +17 -17
  120. package/dist/{git-BXUD6CL5.js → git-TX2IEMB3.js} +6 -6
  121. package/dist/ignite-P644W2PK.js +35 -0
  122. package/dist/index.d.ts +236 -18
  123. package/dist/index.js +180 -63
  124. package/dist/index.js.map +1 -1
  125. package/dist/{init-CI43GJHV.js → init-5HFY7JG6.js} +18 -18
  126. package/dist/{install-deps-SRTM5U7D.js → install-deps-J4ALTM27.js} +11 -11
  127. package/dist/{installation-detector-HF6QN7KP.js → installation-detector-PYAZ2O6U.js} +3 -3
  128. package/dist/{issues-DMRQJH7E.js → issues-LZMIF22U.js} +69 -56
  129. package/dist/issues-LZMIF22U.js.map +1 -0
  130. package/dist/lint-XIXKU22H.js +27 -0
  131. package/dist/{linux-RYLOP2LY.js → linux-WUGRYCJY.js} +2 -2
  132. package/dist/mcp/{chunk-PIIRD4LO.js → chunk-4HZMW2V3.js} +1 -1
  133. package/dist/mcp/{chunk-PIIRD4LO.js.map → chunk-4HZMW2V3.js.map} +1 -1
  134. package/dist/{darwin-5BHWRJ7D.js → mcp/darwin-U25WIGH6.js} +2 -2
  135. package/dist/mcp/issue-management-server.js +908 -20
  136. package/dist/mcp/issue-management-server.js.map +1 -1
  137. package/dist/mcp/{linux-JBVS4R3A.js → linux-5BXVBGSY.js} +2 -2
  138. package/dist/mcp/recap-server.js +24 -22
  139. package/dist/mcp/recap-server.js.map +1 -1
  140. package/dist/mcp/{tmux-RYBLEHUZ.js → tmux-CU26ZTNM.js} +2 -2
  141. package/dist/mcp/{wsl-4QZIQLLE.js → wsl-KI25UDOF.js} +2 -2
  142. package/dist/{open-2Y7GSUTJ.js → open-KUO35JIJ.js} +36 -21
  143. package/dist/open-KUO35JIJ.js.map +1 -0
  144. package/dist/{plan-SWFPLNJE.js → plan-7CF56OIR.js} +47 -43
  145. package/dist/{plan-SWFPLNJE.js.map → plan-7CF56OIR.js.map} +1 -1
  146. package/dist/{projects-IUSUXD5D.js → projects-L5AHUBGA.js} +6 -6
  147. package/dist/{prompt-7LZB4PAT.js → prompt-FUU5NMJQ.js} +3 -3
  148. package/dist/prompt-FUU5NMJQ.js.map +1 -0
  149. package/dist/prompts/init-prompt.txt +184 -23
  150. package/dist/prompts/issue-prompt.txt +94 -158
  151. package/dist/prompts/plan-prompt.txt +55 -0
  152. package/dist/prompts/regular-prompt.txt +1 -1
  153. package/dist/prompts/swarm-orchestrator-prompt.txt +78 -21
  154. package/dist/{rebase-S6OHAOOF.js → rebase-MAMWPA2L.js} +12 -12
  155. package/dist/{recap-GGVCG5VH.js → recap-IDBO3KM5.js} +9 -9
  156. package/dist/{remote-MZTFHHTU.js → remote-RO4LZKT2.js} +3 -3
  157. package/dist/remote-RO4LZKT2.js.map +1 -0
  158. package/dist/{run-ST3FR75O.js → run-RGZHCQ6M.js} +36 -21
  159. package/dist/run-RGZHCQ6M.js.map +1 -0
  160. package/dist/schema/settings.schema.json +171 -11
  161. package/dist/{shell-W4SBQPTE.js → shell-7ADCDFIV.js} +8 -8
  162. package/dist/{summary-P2JCIIJO.js → summary-7J2HORFD.js} +21 -19
  163. package/dist/summary-7J2HORFD.js.map +1 -0
  164. package/dist/test-SRB7EWU6.js +27 -0
  165. package/dist/{test-git-2KFFAQ6B.js → test-git-G7ATVIXG.js} +6 -6
  166. package/dist/{test-jira-FKDKG6CD.js → test-jira-Q2HPA522.js} +8 -8
  167. package/dist/{test-prefix-GP2DAX37.js → test-prefix-JMDGXR5A.js} +6 -6
  168. package/dist/{test-tabs-YDWMWTVA.js → test-tabs-NGPTFD5T.js} +2 -2
  169. package/dist/{test-webserver-QI3QQFZ3.js → test-webserver-GZFVXBGD.js} +8 -8
  170. package/dist/{tmux-7ZTA3BDI.js → tmux-6LRFH3DM.js} +2 -2
  171. package/dist/{update-XLW7R7FL.js → update-AD3GE5C4.js} +4 -4
  172. package/dist/{update-notifier-EYLAXZAA.js → update-notifier-VYDTDMSJ.js} +3 -3
  173. package/dist/update-notifier-VYDTDMSJ.js.map +1 -0
  174. package/dist/{vscode-TOGE5N67.js → vscode-3I7ISHUU.js} +12 -12
  175. package/dist/{vscode-announcement-NIX7O2MG.js → vscode-announcement-AL3EHORH.js} +3 -3
  176. package/dist/{wsl-Y4GUTOQ7.js → wsl-4VMVT2PO.js} +2 -2
  177. package/package.json +1 -1
  178. package/dist/ClaudeContextManager-SXDCWDJA.js +0 -14
  179. package/dist/ClaudeService-6E6MCGJE.js +0 -13
  180. package/dist/GitHubService-2R5GQG4K.js +0 -12
  181. package/dist/IssueTrackerFactory-XN6MQ4UN.js +0 -14
  182. package/dist/MetadataManager-CMQQTFLQ.js +0 -10
  183. package/dist/ProjectCapabilityDetector-IC6NAFGY.js +0 -11
  184. package/dist/SettingsMigrationManager-S6J7OHUH.js +0 -10
  185. package/dist/build-OLS6J5KZ.js +0 -27
  186. package/dist/chunk-3GTUXW26.js.map +0 -1
  187. package/dist/chunk-5UFGO4ZT.js.map +0 -1
  188. package/dist/chunk-7FIXNAUO.js.map +0 -1
  189. package/dist/chunk-ABVMUNCD.js.map +0 -1
  190. package/dist/chunk-ET6A2JR4.js.map +0 -1
  191. package/dist/chunk-IR74O2F6.js.map +0 -1
  192. package/dist/chunk-LL6TOX3G.js.map +0 -1
  193. package/dist/chunk-QR4FU53I.js.map +0 -1
  194. package/dist/chunk-QVAA5KHK.js.map +0 -1
  195. package/dist/chunk-RVI6C2H5.js +0 -220
  196. package/dist/chunk-RVI6C2H5.js.map +0 -1
  197. package/dist/chunk-TEJAGQX2.js.map +0 -1
  198. package/dist/chunk-VMZG66UV.js.map +0 -1
  199. package/dist/chunk-VUUN3KE4.js.map +0 -1
  200. package/dist/chunk-WG4MLJ6J.js.map +0 -1
  201. package/dist/chunk-XFQGI2E3.js.map +0 -1
  202. package/dist/chunk-Y3RX7LZT.js.map +0 -1
  203. package/dist/chunk-YRCEOQPX.js.map +0 -1
  204. package/dist/cleanup-YOM6PQCN.js.map +0 -1
  205. package/dist/dev-server-CYRP6M73.js.map +0 -1
  206. package/dist/ignite-IO4LXVXJ.js +0 -35
  207. package/dist/issues-DMRQJH7E.js.map +0 -1
  208. package/dist/lint-BSWRMGPZ.js +0 -27
  209. package/dist/neon-helpers-HWIYRKOW.js +0 -11
  210. package/dist/open-2Y7GSUTJ.js.map +0 -1
  211. package/dist/run-ST3FR75O.js.map +0 -1
  212. package/dist/summary-P2JCIIJO.js.map +0 -1
  213. package/dist/test-6JH4FE2X.js +0 -27
  214. /package/dist/{BranchNamingService-XBCO747L.js.map → BitBucketApiClient-J2ZSCS5N.js.map} +0 -0
  215. /package/dist/{ClaudeContextManager-SXDCWDJA.js.map → BitBucketVCSProvider-5X64IXXW.js.map} +0 -0
  216. /package/dist/{ClaudeService-6E6MCGJE.js.map → BranchNamingService-MEK2WZUD.js.map} +0 -0
  217. /package/dist/{GitHubService-2R5GQG4K.js.map → ClaudeContextManager-RRGREEZQ.js.map} +0 -0
  218. /package/dist/{IssueTrackerFactory-XN6MQ4UN.js.map → ClaudeService-LEPW6QAC.js.map} +0 -0
  219. /package/dist/{MetadataManager-CMQQTFLQ.js.map → GitHubService-UTAYZXL3.js.map} +0 -0
  220. /package/dist/{ProjectCapabilityDetector-IC6NAFGY.js.map → IssueTrackerFactory-KE2BDCLC.js.map} +0 -0
  221. /package/dist/{LoomLauncher-5AZU2F5I.js.map → LoomLauncher-GKQMR5E6.js.map} +0 -0
  222. /package/dist/{PromptTemplateManager-T5VTLJP3.js.map → MetadataManager-V4LSJ2PB.js.map} +0 -0
  223. /package/dist/{SettingsManager-WQ5NSGAH.js.map → ProjectCapabilityDetector-I4J66WKF.js.map} +0 -0
  224. /package/dist/{SettingsMigrationManager-S6J7OHUH.js.map → PromptTemplateManager-I75WKXM4.js.map} +0 -0
  225. /package/dist/{claude-ONQTDWV3.js.map → SettingsManager-KQU7OX7G.js.map} +0 -0
  226. /package/dist/{color-VQD52LOI.js.map → SettingsMigrationManager-ZPARZ5KH.js.map} +0 -0
  227. /package/dist/{darwin-5BHWRJ7D.js.map → browser-VZY7F2DF.js.map} +0 -0
  228. /package/dist/{build-OLS6J5KZ.js.map → build-V3KADFMO.js.map} +0 -0
  229. /package/dist/{chunk-XXFSOVL3.js.map → chunk-3XEXT35Z.js.map} +0 -0
  230. /package/dist/{chunk-LE2NOUTN.js.map → chunk-4VQXMEEP.js.map} +0 -0
  231. /package/dist/{chunk-G2MNSPA4.js.map → chunk-772N5WCA.js.map} +0 -0
  232. /package/dist/{chunk-NOMQ5RFG.js.map → chunk-7UBEHQTP.js.map} +0 -0
  233. /package/dist/{chunk-7NFCGKZT.js.map → chunk-AQUSMNBF.js.map} +0 -0
  234. /package/dist/{chunk-IDCE26KD.js.map → chunk-AUYSAMXV.js.map} +0 -0
  235. /package/dist/{chunk-K7R5QY6C.js.map → chunk-CE676WCN.js.map} +0 -0
  236. /package/dist/{chunk-LHDD4JHC.js.map → chunk-D4Q7T5KD.js.map} +0 -0
  237. /package/dist/{chunk-RBYTXYGD.js.map → chunk-D75KSI3V.js.map} +0 -0
  238. /package/dist/{chunk-SQYHPBFP.js.map → chunk-EGNUOALL.js.map} +0 -0
  239. /package/dist/{chunk-ZAXRQLK3.js.map → chunk-FTYWGQFM.js.map} +0 -0
  240. /package/dist/{chunk-5PNZBH6V.js.map → chunk-H3T3EPF3.js.map} +0 -0
  241. /package/dist/{chunk-VNYWBHKR.js.map → chunk-JD3K2344.js.map} +0 -0
  242. /package/dist/{chunk-6YVJVUR4.js.map → chunk-JDN4SPV3.js.map} +0 -0
  243. /package/dist/{chunk-NCPZYQ4B.js.map → chunk-K3QGG4O2.js.map} +0 -0
  244. /package/dist/{chunk-NH3QZYE5.js.map → chunk-KV4NU3RP.js.map} +0 -0
  245. /package/dist/{chunk-NDSGJZI2.js.map → chunk-LOAYWTJJ.js.map} +0 -0
  246. /package/dist/{chunk-GMDSYLI6.js.map → chunk-MY2Q3FJ3.js.map} +0 -0
  247. /package/dist/{chunk-CV47VCMQ.js.map → chunk-NPVA65KS.js.map} +0 -0
  248. /package/dist/{chunk-RMLADZRY.js.map → chunk-NTDY5AMO.js.map} +0 -0
  249. /package/dist/{chunk-7OCGBJLR.js.map → chunk-OIVFHJOA.js.map} +0 -0
  250. /package/dist/{chunk-NN5RYWXA.js.map → chunk-PH65MFQM.js.map} +0 -0
  251. /package/dist/{chunk-V4STTBQD.js.map → chunk-QED2WB2D.js.map} +0 -0
  252. /package/dist/{chunk-QNHZM5ZV.js.map → chunk-QXGM32TO.js.map} +0 -0
  253. /package/dist/{chunk-TZNNJLGT.js.map → chunk-RFCAPHL5.js.map} +0 -0
  254. /package/dist/{chunk-UDCI3QTS.js.map → chunk-SN4S5CWL.js.map} +0 -0
  255. /package/dist/{chunk-YETJNRQM.js.map → chunk-WEBMMJKL.js.map} +0 -0
  256. /package/dist/{chunk-KQFIGI37.js.map → chunk-XCP2WDYA.js.map} +0 -0
  257. /package/dist/{chunk-HLDY5S4C.js.map → chunk-ZUIFO7B4.js.map} +0 -0
  258. /package/dist/{git-BXUD6CL5.js.map → claude-ACL7G4CF.js.map} +0 -0
  259. /package/dist/{ignite-IO4LXVXJ.js.map → color-AC6F2QE7.js.map} +0 -0
  260. /package/dist/{commit-DC2Q5CDY.js.map → commit-SUHRUMDE.js.map} +0 -0
  261. /package/dist/{compile-4NCQECKE.js.map → compile-2MD346PO.js.map} +0 -0
  262. /package/dist/{installation-detector-HF6QN7KP.js.map → darwin-5K3I4FTH.js.map} +0 -0
  263. /package/dist/{mcp/darwin-3JFFE3W2.js.map → database-helpers-PRDFNDRO.js.map} +0 -0
  264. /package/dist/{feedback-BMAZGKRW.js.map → feedback-Q6WG2WX4.js.map} +0 -0
  265. /package/dist/{neon-helpers-HWIYRKOW.js.map → git-TX2IEMB3.js.map} +0 -0
  266. /package/dist/{prompt-7LZB4PAT.js.map → ignite-P644W2PK.js.map} +0 -0
  267. /package/dist/{init-CI43GJHV.js.map → init-5HFY7JG6.js.map} +0 -0
  268. /package/dist/{install-deps-SRTM5U7D.js.map → install-deps-J4ALTM27.js.map} +0 -0
  269. /package/dist/{remote-MZTFHHTU.js.map → installation-detector-PYAZ2O6U.js.map} +0 -0
  270. /package/dist/{lint-BSWRMGPZ.js.map → lint-XIXKU22H.js.map} +0 -0
  271. /package/dist/{linux-RYLOP2LY.js.map → linux-WUGRYCJY.js.map} +0 -0
  272. /package/dist/{update-notifier-EYLAXZAA.js.map → mcp/darwin-U25WIGH6.js.map} +0 -0
  273. /package/dist/mcp/{linux-JBVS4R3A.js.map → linux-5BXVBGSY.js.map} +0 -0
  274. /package/dist/mcp/{tmux-RYBLEHUZ.js.map → tmux-CU26ZTNM.js.map} +0 -0
  275. /package/dist/mcp/{wsl-4QZIQLLE.js.map → wsl-KI25UDOF.js.map} +0 -0
  276. /package/dist/{projects-IUSUXD5D.js.map → projects-L5AHUBGA.js.map} +0 -0
  277. /package/dist/{rebase-S6OHAOOF.js.map → rebase-MAMWPA2L.js.map} +0 -0
  278. /package/dist/{recap-GGVCG5VH.js.map → recap-IDBO3KM5.js.map} +0 -0
  279. /package/dist/{shell-W4SBQPTE.js.map → shell-7ADCDFIV.js.map} +0 -0
  280. /package/dist/{test-6JH4FE2X.js.map → test-SRB7EWU6.js.map} +0 -0
  281. /package/dist/{test-git-2KFFAQ6B.js.map → test-git-G7ATVIXG.js.map} +0 -0
  282. /package/dist/{test-jira-FKDKG6CD.js.map → test-jira-Q2HPA522.js.map} +0 -0
  283. /package/dist/{test-prefix-GP2DAX37.js.map → test-prefix-JMDGXR5A.js.map} +0 -0
  284. /package/dist/{test-tabs-YDWMWTVA.js.map → test-tabs-NGPTFD5T.js.map} +0 -0
  285. /package/dist/{test-webserver-QI3QQFZ3.js.map → test-webserver-GZFVXBGD.js.map} +0 -0
  286. /package/dist/{tmux-7ZTA3BDI.js.map → tmux-6LRFH3DM.js.map} +0 -0
  287. /package/dist/{update-XLW7R7FL.js.map → update-AD3GE5C4.js.map} +0 -0
  288. /package/dist/{vscode-TOGE5N67.js.map → vscode-3I7ISHUU.js.map} +0 -0
  289. /package/dist/{vscode-announcement-NIX7O2MG.js.map → vscode-announcement-AL3EHORH.js.map} +0 -0
  290. /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,
@@ -1006,10 +1008,13 @@ __export(SettingsManager_exports, {
1006
1008
  SettingsManager: () => SettingsManager,
1007
1009
  SpinAgentSettingsSchema: () => SpinAgentSettingsSchema,
1008
1010
  SummarySettingsSchema: () => SummarySettingsSchema,
1011
+ SupabaseSettingsSchema: () => SupabaseSettingsSchema,
1009
1012
  WorkflowPermissionSchema: () => WorkflowPermissionSchema,
1010
1013
  WorkflowPermissionSchemaNoDefaults: () => WorkflowPermissionSchemaNoDefaults,
1011
1014
  WorkflowsSettingsSchema: () => WorkflowsSettingsSchema,
1012
- WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults
1015
+ WorkflowsSettingsSchemaNoDefaults: () => WorkflowsSettingsSchemaNoDefaults,
1016
+ mergeModeValues: () => mergeModeValues,
1017
+ redactSensitiveFields: () => redactSensitiveFields
1013
1018
  });
1014
1019
  import { readFile } from "fs/promises";
1015
1020
  import path2 from "path";
@@ -1020,7 +1025,7 @@ function redactSensitiveFields(obj) {
1020
1025
  if (obj === null || obj === void 0) return obj;
1021
1026
  if (typeof obj !== "object") return obj;
1022
1027
  if (Array.isArray(obj)) return obj.map(redactSensitiveFields);
1023
- const sensitiveKeys = ["apitoken", "token", "secret", "password"];
1028
+ const sensitiveKeys = ["apitoken", "token", "secret", "password", "credential"];
1024
1029
  const result = {};
1025
1030
  for (const [key, value] of Object.entries(obj)) {
1026
1031
  const lowerKey = key.toLowerCase();
@@ -1034,11 +1039,16 @@ function redactSensitiveFields(obj) {
1034
1039
  }
1035
1040
  return result;
1036
1041
  }
1037
- var BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, NeonSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
1042
+ var mergeModeValues, mergeModeTransform, BaseAgentSettingsSchema, AgentSettingsSchema, SpinAgentSettingsSchema, PlanCommandSettingsSchema, SummarySettingsSchema, WorkflowPermissionSchema, WorkflowPermissionSchemaNoDefaults, WorkflowsSettingsSchema, WorkflowsSettingsSchemaNoDefaults, CapabilitiesSettingsSchema, CapabilitiesSettingsSchemaNoDefaults, DevServerSettingsSchema, DevServerSettingsSchemaNoDefaults, NeonSettingsSchema, SupabaseSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, IloomSettingsSchemaNoDefaults, SettingsManager;
1038
1043
  var init_SettingsManager = __esm({
1039
1044
  "src/lib/SettingsManager.ts"() {
1040
1045
  "use strict";
1041
1046
  init_logger();
1047
+ mergeModeValues = ["local", "pr", "draft-pr", "github-pr", "github-draft-pr", "bitbucket-pr"];
1048
+ mergeModeTransform = (val) => {
1049
+ const map = { "github-pr": "pr", "github-draft-pr": "draft-pr", "bitbucket-pr": "pr" };
1050
+ return map[val] ?? val;
1051
+ };
1042
1052
  BaseAgentSettingsSchema = z.object({
1043
1053
  model: z.enum(["sonnet", "opus", "haiku"]).optional().describe("Claude model shorthand: sonnet, opus, or haiku"),
1044
1054
  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 +1060,7 @@ var init_SettingsManager = __esm({
1050
1060
  review: z.boolean().optional().describe("Whether artifacts from this agent should be reviewed before posting (defaults to false)"),
1051
1061
  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
1062
  });
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
- });
1063
+ AgentSettingsSchema = BaseAgentSettingsSchema;
1056
1064
  SpinAgentSettingsSchema = z.object({
1057
1065
  model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for spin orchestrator"),
1058
1066
  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 +1069,8 @@ var init_SettingsManager = __esm({
1061
1069
  PlanCommandSettingsSchema = z.object({
1062
1070
  model: z.enum(["sonnet", "opus", "haiku"]).default("opus").describe("Claude model shorthand for plan command"),
1063
1071
  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)")
1072
+ reviewer: z.enum(["claude", "gemini", "codex", "none"]).default("none").describe("AI provider for reviewing the plan (none to skip review)"),
1073
+ waveVerification: z.boolean().default(true).describe("When enabled, the planner generates verification child issues between dependency waves to catch integration issues early.")
1065
1074
  });
1066
1075
  SummarySettingsSchema = z.object({
1067
1076
  model: z.enum(["sonnet", "opus", "haiku"]).default("sonnet").describe("Claude model shorthand for session summary generation")
@@ -1096,7 +1105,12 @@ var init_SettingsManager = __esm({
1096
1105
  }).optional();
1097
1106
  CapabilitiesSettingsSchema = z.object({
1098
1107
  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)")
1108
+ 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)"),
1109
+ devServer: z.enum(["process", "docker"]).default("process").describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
1110
+ dockerFile: z.string().default("./Dockerfile").describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
1111
+ 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)"),
1112
+ dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
1113
+ dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
1100
1114
  }).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
1115
  database: z.object({
1102
1116
  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,19 +1118,71 @@ var init_SettingsManager = __esm({
1104
1118
  }).optional();
1105
1119
  CapabilitiesSettingsSchemaNoDefaults = z.object({
1106
1120
  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)")
1121
+ 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)"),
1122
+ devServer: z.enum(["process", "docker"]).optional().describe('Dev server mode: "process" runs natively, "docker" runs inside a Docker container with port mapping'),
1123
+ dockerFile: z.string().optional().describe('Path to Dockerfile relative to worktree root (only used when devServer is "docker")'),
1124
+ 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)"),
1125
+ dockerBuildArgs: z.record(z.string()).optional().describe('Build arguments to pass to docker build (e.g., {"NODE_ENV": "development"})'),
1126
+ dockerRunArgs: z.array(z.string()).optional().describe('Additional arguments for docker run (e.g., ["-v", "./src:/app/src"] for volume mounts)')
1108
1127
  }).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
1128
  database: z.object({
1110
1129
  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
1130
  }).optional()
1112
1131
  }).optional();
1132
+ DevServerSettingsSchema = z.object({
1133
+ mode: z.enum(["docker"]).default("docker").describe('Dev server mode. Currently only "docker" is supported.'),
1134
+ docker: z.object({
1135
+ dockerFile: z.string().default("./Dockerfile").refine(
1136
+ (val) => {
1137
+ if (path2.isAbsolute(val)) return false;
1138
+ const normalized = path2.normalize(val);
1139
+ if (normalized.startsWith("..")) return false;
1140
+ return true;
1141
+ },
1142
+ {
1143
+ message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
1144
+ }
1145
+ ).describe("Path to Dockerfile relative to worktree root"),
1146
+ 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)"),
1147
+ buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
1148
+ runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
1149
+ }).optional()
1150
+ });
1151
+ DevServerSettingsSchemaNoDefaults = z.object({
1152
+ mode: z.enum(["docker"]).optional().describe('Dev server mode. Currently only "docker" is supported.'),
1153
+ docker: z.object({
1154
+ dockerFile: z.string().optional().refine(
1155
+ (val) => {
1156
+ if (val === void 0) return true;
1157
+ if (path2.isAbsolute(val)) return false;
1158
+ const normalized = path2.normalize(val);
1159
+ if (normalized.startsWith("..")) return false;
1160
+ return true;
1161
+ },
1162
+ {
1163
+ message: 'dockerFile must be a relative path that does not traverse outside the project root (no leading "/" and no "../" escaping)'
1164
+ }
1165
+ ).describe("Path to Dockerfile relative to worktree root"),
1166
+ 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)"),
1167
+ buildArgs: z.record(z.string(), z.string()).optional().describe("Build arguments to pass to docker build"),
1168
+ runArgs: z.array(z.string()).optional().describe("Additional arguments for docker run")
1169
+ }).optional()
1170
+ });
1113
1171
  NeonSettingsSchema = z.object({
1114
1172
  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
1173
  parentBranch: z.string().min(1).describe("Branch from which new database branches are created")
1116
1174
  });
1175
+ SupabaseSettingsSchema = z.object({
1176
+ projectRef: z.string().min(1).describe('Supabase project reference ID (e.g., "abcdefghijklmnop")'),
1177
+ parentBranch: z.string().min(1).optional().describe("Reserved for future use. Supabase currently always branches from the default branch."),
1178
+ withData: z.boolean().optional().describe("Whether to include data when creating a new branch (defaults to true)")
1179
+ });
1117
1180
  DatabaseProvidersSettingsSchema = z.object({
1118
1181
  neon: NeonSettingsSchema.optional().describe(
1119
1182
  "Neon database configuration. Requires Neon CLI installed and authenticated for database branching."
1183
+ ),
1184
+ supabase: SupabaseSettingsSchema.optional().describe(
1185
+ "Supabase database configuration. Requires Supabase CLI installed and authenticated for database branching."
1120
1186
  )
1121
1187
  }).optional();
1122
1188
  IloomSettingsSchema = z.object({
@@ -1161,6 +1227,7 @@ var init_SettingsManager = __esm({
1161
1227
  "Session summary generation configuration. Model defaults to sonnet when not configured."
1162
1228
  ),
1163
1229
  capabilities: CapabilitiesSettingsSchema.describe("Project capability configurations"),
1230
+ devServer: DevServerSettingsSchema.optional().describe("Docker-based dev server configuration"),
1164
1231
  databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
1165
1232
  issueManagement: z.object({
1166
1233
  // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
@@ -1185,17 +1252,28 @@ var init_SettingsManager = __esm({
1185
1252
  doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
1186
1253
  }).optional()
1187
1254
  }).optional().describe("Issue management configuration"),
1255
+ versionControl: z.object({
1256
+ provider: z.enum(["github", "bitbucket"]).optional().default("github").describe("Version control provider (github, bitbucket)"),
1257
+ bitbucket: z.object({
1258
+ username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
1259
+ 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)"),
1260
+ workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
1261
+ repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
1262
+ 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.")
1263
+ }).optional()
1264
+ }).optional().describe("Version control provider configuration"),
1188
1265
  mergeBehavior: z.object({
1189
1266
  // 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"),
1267
+ mode: z.enum(mergeModeValues).default("local").transform(mergeModeTransform),
1191
1268
  remote: z.string().optional(),
1192
1269
  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."
1270
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
1194
1271
  ),
1272
+ prTitlePrefix: z.boolean().default(false).optional().describe('Prefix PR titles with the issue number (e.g., "QLH-123: Title"). Default: false'),
1195
1273
  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."
1274
+ "Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
1197
1275
  )
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)"),
1276
+ }).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
1199
1277
  ide: z.object({
1200
1278
  // SYNC: If this default changes, update displayDefaultsBox() in src/utils/first-run-setup.ts
1201
1279
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).default("vscode").describe(
@@ -1257,12 +1335,14 @@ var init_SettingsManager = __esm({
1257
1335
  plan: z.object({
1258
1336
  model: z.enum(["sonnet", "opus", "haiku"]).optional(),
1259
1337
  planner: z.enum(["claude", "gemini", "codex"]).optional(),
1260
- reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional()
1338
+ reviewer: z.enum(["claude", "gemini", "codex", "none"]).optional(),
1339
+ waveVerification: z.boolean().optional()
1261
1340
  }).optional().describe("Plan command configuration"),
1262
1341
  summary: z.object({
1263
1342
  model: z.enum(["sonnet", "opus", "haiku"]).optional()
1264
1343
  }).optional().describe("Session summary generation configuration"),
1265
1344
  capabilities: CapabilitiesSettingsSchemaNoDefaults.describe("Project capability configurations"),
1345
+ devServer: DevServerSettingsSchemaNoDefaults.optional().describe("Docker-based dev server configuration"),
1266
1346
  databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
1267
1347
  issueManagement: z.object({
1268
1348
  provider: z.enum(["github", "linear", "jira"]).optional().describe("Issue tracker provider (github, linear, jira)"),
@@ -1286,16 +1366,27 @@ var init_SettingsManager = __esm({
1286
1366
  doneStatuses: z.array(z.string()).optional().default(["Done"]).describe('Status names to exclude from issue lists (e.g., ["Done", "Closed", "Verify"])')
1287
1367
  }).optional()
1288
1368
  }).optional().describe("Issue management configuration"),
1369
+ versionControl: z.object({
1370
+ provider: z.enum(["github", "bitbucket"]).optional().describe("Version control provider (github, bitbucket)"),
1371
+ bitbucket: z.object({
1372
+ username: z.string().min(1, "BitBucket username cannot be empty").describe("BitBucket username"),
1373
+ 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)"),
1374
+ workspace: z.string().optional().describe("BitBucket workspace (optional, auto-detected from git remote if not provided)"),
1375
+ repoSlug: z.string().optional().describe("BitBucket repository slug (optional, auto-detected from git remote if not provided)"),
1376
+ 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.")
1377
+ }).optional()
1378
+ }).optional().describe("Version control provider configuration"),
1289
1379
  mergeBehavior: z.object({
1290
- mode: z.enum(["local", "github-pr", "github-draft-pr"]).optional(),
1380
+ mode: z.enum(mergeModeValues).transform(mergeModeTransform).optional(),
1291
1381
  remote: z.string().optional(),
1292
1382
  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."
1383
+ "Auto-commit and push after code review in draft PR mode. Defaults to true when mode is draft-pr."
1294
1384
  ),
1385
+ prTitlePrefix: z.boolean().optional(),
1295
1386
  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."
1387
+ "Open the PR in the default browser after finishing in pr or draft-pr mode. Use --no-browser flag to override."
1297
1388
  )
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)"),
1389
+ }).optional().describe("Merge behavior configuration: local (merge locally), pr (create PR), or draft-pr (create draft PR at start, mark ready on finish)"),
1299
1390
  ide: z.object({
1300
1391
  type: z.enum(["vscode", "cursor", "webstorm", "sublime", "intellij", "windsurf", "antigravity"]).optional().describe(
1301
1392
  "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 +1658,17 @@ ${errorMessages.join("\n")}`
1567
1658
  var _a;
1568
1659
  return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.reviewer) ?? "none";
1569
1660
  }
1661
+ /**
1662
+ * Get the plan command waveVerification setting with default applied
1663
+ * Default is true (verification tasks are generated)
1664
+ *
1665
+ * @param settings - Pre-loaded settings object
1666
+ * @returns Whether wave verification is enabled
1667
+ */
1668
+ getPlanWaveVerification(settings) {
1669
+ var _a;
1670
+ return ((_a = settings == null ? void 0 : settings.plan) == null ? void 0 : _a.waveVerification) !== false;
1671
+ }
1570
1672
  /**
1571
1673
  * Get the session summary model with default applied
1572
1674
  * Default is defined in SummarySettingsSchema
@@ -1850,7 +1952,8 @@ var MetadataManager = class {
1850
1952
  parentLoom: data.parentLoom ?? null,
1851
1953
  childIssues: data.childIssues ?? [],
1852
1954
  dependencyMap: data.dependencyMap ?? {},
1853
- mcpConfigPath: data.mcpConfigPath ?? null
1955
+ mcpConfigPath: data.mcpConfigPath ?? null,
1956
+ swarmTeamName: data.swarmTeamName ?? null
1854
1957
  };
1855
1958
  }
1856
1959
  /**
@@ -4710,7 +4813,7 @@ var JiraApiClient = class {
4710
4813
  };
4711
4814
 
4712
4815
  // src/lib/providers/jira/JiraIssueTracker.ts
4713
- var JiraIssueTracker = class {
4816
+ var JiraIssueTracker = class _JiraIssueTracker {
4714
4817
  constructor(config, options) {
4715
4818
  this.providerName = "jira";
4716
4819
  this.supportsPullRequests = false;
@@ -4722,6 +4825,36 @@ var JiraIssueTracker = class {
4722
4825
  });
4723
4826
  this.prompter = (options == null ? void 0 : options.prompter) ?? promptConfirmation;
4724
4827
  }
4828
+ /**
4829
+ * Create a JiraIssueTracker from IloomSettings
4830
+ * Extracts and validates Jira config from settings
4831
+ */
4832
+ static fromSettings(settings) {
4833
+ var _a;
4834
+ const jiraSettings = (_a = settings.issueManagement) == null ? void 0 : _a.jira;
4835
+ if (!(jiraSettings == null ? void 0 : jiraSettings.host)) {
4836
+ throw new Error("Jira host is required. Configure issueManagement.jira.host in .iloom/settings.json");
4837
+ }
4838
+ if (!(jiraSettings == null ? void 0 : jiraSettings.username)) {
4839
+ throw new Error("Jira username is required. Configure issueManagement.jira.username in .iloom/settings.json");
4840
+ }
4841
+ if (!(jiraSettings == null ? void 0 : jiraSettings.apiToken)) {
4842
+ throw new Error("Jira API token is required. Configure issueManagement.jira.apiToken in .iloom/settings.local.json");
4843
+ }
4844
+ if (!(jiraSettings == null ? void 0 : jiraSettings.projectKey)) {
4845
+ throw new Error("Jira project key is required. Configure issueManagement.jira.projectKey in .iloom/settings.json");
4846
+ }
4847
+ const config = {
4848
+ host: jiraSettings.host,
4849
+ username: jiraSettings.username,
4850
+ apiToken: jiraSettings.apiToken,
4851
+ projectKey: jiraSettings.projectKey
4852
+ };
4853
+ if (jiraSettings.transitionMappings) {
4854
+ config.transitionMappings = jiraSettings.transitionMappings;
4855
+ }
4856
+ return new _JiraIssueTracker(config);
4857
+ }
4725
4858
  /**
4726
4859
  * Normalize identifier to canonical uppercase form
4727
4860
  * Jira issue keys are case-sensitive in the API (must be uppercase)
@@ -5030,6 +5163,7 @@ ${entity.assignees.length > 0 ? `Assignees: ${entity.assignees.join(", ")}` : ""
5030
5163
  };
5031
5164
 
5032
5165
  // src/lib/IssueTrackerFactory.ts
5166
+ init_SettingsManager();
5033
5167
  var IssueTrackerFactory = class {
5034
5168
  /**
5035
5169
  * Create an IssueTracker instance based on settings configuration
@@ -5040,10 +5174,10 @@ var IssueTrackerFactory = class {
5040
5174
  * @throws Error if provider type is not supported
5041
5175
  */
5042
5176
  static create(settings) {
5043
- var _a, _b, _c;
5177
+ var _a, _b;
5044
5178
  const provider = ((_a = settings.issueManagement) == null ? void 0 : _a.provider) ?? "github";
5045
5179
  getLogger().debug(`IssueTrackerFactory: Creating tracker for provider "${provider}"`);
5046
- getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(settings.issueManagement, null, 2));
5180
+ getLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(redactSensitiveFields(settings.issueManagement), null, 2));
5047
5181
  switch (provider) {
5048
5182
  case "github":
5049
5183
  getLogger().debug("IssueTrackerFactory: Creating GitHubService");
@@ -5060,34 +5194,12 @@ var IssueTrackerFactory = class {
5060
5194
  if (linearSettings == null ? void 0 : linearSettings.apiToken) {
5061
5195
  linearConfig.apiToken = linearSettings.apiToken;
5062
5196
  }
5063
- getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(linearConfig, null, 2));
5197
+ getLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(redactSensitiveFields(linearConfig), null, 2));
5064
5198
  return new LinearService(linearConfig);
5065
5199
  }
5066
5200
  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);
5201
+ getLogger().debug(`IssueTrackerFactory: Creating JiraIssueTracker from settings`);
5202
+ return JiraIssueTracker.fromSettings(settings);
5091
5203
  }
5092
5204
  default:
5093
5205
  throw new Error(`Unsupported issue tracker provider: ${provider}`);
@@ -5386,15 +5498,14 @@ var DatabaseManager = class {
5386
5498
  return null;
5387
5499
  }
5388
5500
  if (!await this.provider.isCliAvailable()) {
5389
- getLogger().warn("Skipping database branch creation: Neon CLI not available");
5390
- getLogger().warn("Install with: npm install -g neonctl");
5501
+ getLogger().warn(`Skipping database branch creation: ${this.provider.displayName} CLI not available`);
5502
+ getLogger().warn(`Install with: ${this.provider.installHint}`);
5391
5503
  return null;
5392
5504
  }
5393
5505
  try {
5394
5506
  const isAuth = await this.provider.isAuthenticated(cwd);
5395
5507
  if (!isAuth) {
5396
- getLogger().warn("Skipping database branch creation: Not authenticated with Neon CLI");
5397
- getLogger().warn("Run: neon auth");
5508
+ getLogger().warn(`Skipping database branch creation: Not authenticated with ${this.provider.displayName} CLI`);
5398
5509
  return null;
5399
5510
  }
5400
5511
  } catch (error) {
@@ -5442,24 +5553,24 @@ var DatabaseManager = class {
5442
5553
  };
5443
5554
  }
5444
5555
  if (!await this.provider.isCliAvailable()) {
5445
- getLogger().info("Skipping database branch deletion: CLI tool not available");
5556
+ getLogger().info(`Skipping database branch deletion: ${this.provider.displayName} CLI not available. Install with: ${this.provider.installHint}`);
5446
5557
  return {
5447
5558
  success: false,
5448
5559
  deleted: false,
5449
5560
  notFound: true,
5450
- error: "CLI tool not available",
5561
+ error: `${this.provider.displayName} CLI not available`,
5451
5562
  branchName
5452
5563
  };
5453
5564
  }
5454
5565
  try {
5455
5566
  const isAuth = await this.provider.isAuthenticated(cwd);
5456
5567
  if (!isAuth) {
5457
- getLogger().warn("Skipping database branch deletion: Not authenticated with DB Provider");
5568
+ getLogger().warn(`Skipping database branch deletion: Not authenticated with ${this.provider.displayName}`);
5458
5569
  return {
5459
5570
  success: false,
5460
5571
  deleted: false,
5461
5572
  notFound: false,
5462
- error: "Not authenticated with DB Provider",
5573
+ error: `Not authenticated with ${this.provider.displayName}`,
5463
5574
  branchName
5464
5575
  };
5465
5576
  }
@@ -5600,7 +5711,7 @@ function parseJsonStreamOutput(output) {
5600
5711
  }
5601
5712
  }
5602
5713
  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;
5714
+ const { model, permissionMode, addDir, headless = false, appendSystemPrompt, appendSystemPromptFile, mcpConfig, allowedTools, disallowedTools, agents, pluginDir, sessionId, noSessionPersistence, outputFormat, verbose, jsonMode, passthroughStdout, env: extraEnv, signal } = options;
5604
5715
  const log = getLogger();
5605
5716
  const args = [];
5606
5717
  if (headless) {
@@ -5624,6 +5735,9 @@ async function launchClaude(prompt, options = {}) {
5624
5735
  if (appendSystemPrompt) {
5625
5736
  args.push("--append-system-prompt", appendSystemPrompt);
5626
5737
  }
5738
+ if (appendSystemPromptFile) {
5739
+ args.push("--append-system-prompt-file", appendSystemPromptFile);
5740
+ }
5627
5741
  if (mcpConfig && mcpConfig.length > 0) {
5628
5742
  for (const config of mcpConfig) {
5629
5743
  args.push("--mcp-config", JSON.stringify(config));
@@ -5644,6 +5758,10 @@ async function launchClaude(prompt, options = {}) {
5644
5758
  if (sessionId) {
5645
5759
  args.push("--session-id", sessionId);
5646
5760
  }
5761
+ const isDebugMode = logger.isDebugEnabled();
5762
+ if (isDebugMode) {
5763
+ args.push("--debug");
5764
+ }
5647
5765
  if (noSessionPersistence && headless) {
5648
5766
  args.push("--no-session-persistence");
5649
5767
  }
@@ -5679,7 +5797,6 @@ async function launchClaude(prompt, options = {}) {
5679
5797
  return;
5680
5798
  }
5681
5799
  if (headless) {
5682
- const isDebugMode = logger.isDebugEnabled();
5683
5800
  const execaOptions = {
5684
5801
  input: prompt,
5685
5802
  timeout: 0,
@@ -5813,14 +5930,14 @@ async function launchClaude(prompt, options = {}) {
5813
5930
  resumeArgs.push("--resume", extractedSessionId);
5814
5931
  try {
5815
5932
  if (headless) {
5816
- const isDebugMode = logger.isDebugEnabled();
5933
+ const isDebugMode2 = logger.isDebugEnabled();
5817
5934
  const execaOptions = {
5818
5935
  input: prompt,
5819
5936
  timeout: 0,
5820
5937
  ...addDir && { cwd: addDir },
5821
- verbose: isDebugMode,
5938
+ verbose: isDebugMode2,
5822
5939
  env: claudeEnv,
5823
- ...isDebugMode && { stdio: ["pipe", "pipe", "pipe"] }
5940
+ ...isDebugMode2 && { stdio: ["pipe", "pipe", "pipe"] }
5824
5941
  };
5825
5942
  const subprocess = execa8("claude", resumeArgs, execaOptions);
5826
5943
  const isJsonStreamFormat = resumeArgs.includes("--output-format") && resumeArgs.includes("stream-json");
@@ -5835,7 +5952,7 @@ async function launchClaude(prompt, options = {}) {
5835
5952
  if (jsonMode === "stream") {
5836
5953
  process.stdout.write(text);
5837
5954
  } else if (jsonMode === "json") {
5838
- } else if (isDebugMode) {
5955
+ } else if (isDebugMode2) {
5839
5956
  log.stdout.write(text);
5840
5957
  } else {
5841
5958
  if (isFirstProgress) {
@@ -5850,12 +5967,12 @@ async function launchClaude(prompt, options = {}) {
5850
5967
  const result = await subprocess;
5851
5968
  if (isStreaming) {
5852
5969
  const rawOutput = outputBuffer.trim();
5853
- if (!isDebugMode && !jsonMode) {
5970
+ if (!isDebugMode2 && !jsonMode) {
5854
5971
  log.stdout.write("\n");
5855
5972
  }
5856
5973
  return isJsonStreamFormat ? parseJsonStreamOutput(rawOutput) : rawOutput;
5857
5974
  } else {
5858
- if (isDebugMode) {
5975
+ if (isDebugMode2) {
5859
5976
  log.stdout.write(result.stdout);
5860
5977
  if (result.stdout && !result.stdout.endsWith("\n")) {
5861
5978
  log.stdout.write("\n");