@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
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ PromptTemplateManager
4
+ } from "./chunk-7RCUWU3I.js";
2
5
  import {
3
6
  detectClaudeCli,
4
7
  launchClaude,
5
8
  launchClaudeInNewTerminalWindow
6
- } from "./chunk-Y3RX7LZT.js";
7
- import {
8
- PromptTemplateManager
9
- } from "./chunk-WG4MLJ6J.js";
9
+ } from "./chunk-DDHWZNGL.js";
10
10
  import {
11
11
  SettingsManager
12
- } from "./chunk-ET6A2JR4.js";
12
+ } from "./chunk-WGUGB54H.js";
13
13
  import {
14
14
  logger
15
- } from "./chunk-H2SSF24U.js";
15
+ } from "./chunk-VRPPI6GU.js";
16
16
 
17
17
  // src/lib/ClaudeService.ts
18
18
  var ClaudeService = class {
@@ -121,4 +121,4 @@ var ClaudeService = class {
121
121
  export {
122
122
  ClaudeService
123
123
  };
124
- //# sourceMappingURL=chunk-KQFIGI37.js.map
124
+ //# sourceMappingURL=chunk-XCP2WDYA.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  promptConfirmation
4
- } from "./chunk-CV47VCMQ.js";
4
+ } from "./chunk-NPVA65KS.js";
5
5
  import {
6
6
  getLogger
7
- } from "./chunk-ZAXRQLK3.js";
7
+ } from "./chunk-FTYWGQFM.js";
8
8
 
9
9
  // src/lib/providers/NeonProvider.ts
10
10
  import { execa } from "execa";
@@ -32,6 +32,8 @@ function validateNeonConfig(config) {
32
32
  var NeonProvider = class {
33
33
  constructor(config) {
34
34
  this.config = config;
35
+ this.displayName = "Neon";
36
+ this.installHint = "npm install -g neonctl";
35
37
  this._isConfigured = false;
36
38
  getLogger().debug("NeonProvider initialized with config:", {
37
39
  projectId: config.projectId,
@@ -432,10 +434,313 @@ var NeonProvider = class {
432
434
  }
433
435
  };
434
436
 
435
- // src/utils/neon-helpers.ts
436
- function createNeonProviderFromSettings(settings) {
437
- var _a;
437
+ // src/lib/providers/SupabaseProvider.ts
438
+ import { execa as execa2 } from "execa";
439
+ function validateSupabaseConfig(config) {
440
+ if (!config.projectRef) {
441
+ return {
442
+ valid: false,
443
+ error: "Supabase projectRef is required. Configure in .iloom/settings.json under databaseProviders.supabase"
444
+ };
445
+ }
446
+ if (!/^[a-zA-Z0-9-]+$/.test(config.projectRef)) {
447
+ return {
448
+ valid: false,
449
+ error: "Supabase projectRef contains invalid characters"
450
+ };
451
+ }
452
+ return { valid: true };
453
+ }
454
+ var SupabaseProvider = class {
455
+ constructor(config) {
456
+ this.config = config;
457
+ this._isConfigured = false;
458
+ this.displayName = "Supabase CLI";
459
+ this.installHint = "Install with: npm install -g supabase";
460
+ getLogger().debug("SupabaseProvider initialized with config:", {
461
+ projectRef: config.projectRef,
462
+ parentBranch: config.parentBranch,
463
+ withData: config.withData,
464
+ hasProjectRef: !!config.projectRef,
465
+ hasParentBranch: !!config.parentBranch
466
+ });
467
+ const validation = validateSupabaseConfig(config);
468
+ if (!validation.valid) {
469
+ getLogger().debug(`SupabaseProvider not configured: ${validation.error}`);
470
+ getLogger().debug("Supabase database branching will not be used");
471
+ this._isConfigured = false;
472
+ } else {
473
+ this._isConfigured = true;
474
+ }
475
+ if (config.parentBranch) {
476
+ getLogger().debug(
477
+ `parentBranch '${config.parentBranch}' is stored but Supabase currently always branches from the default branch`
478
+ );
479
+ }
480
+ }
481
+ /**
482
+ * Check if provider is properly configured
483
+ * Returns true if projectRef and parentBranch are valid in settings
484
+ */
485
+ isConfigured() {
486
+ return this._isConfigured;
487
+ }
488
+ /**
489
+ * Execute a Supabase CLI command and return stdout
490
+ * Throws an error if the command fails
491
+ *
492
+ * @param args - Command arguments to pass to supabase CLI
493
+ * @param cwd - Optional working directory to run the command from (defaults to current directory)
494
+ */
495
+ async executeSupabaseCommand(args, cwd, timeout = 3e4) {
496
+ if (!this._isConfigured) {
497
+ throw new Error(
498
+ "SupabaseProvider is not configured. Check databaseProviders.supabase configuration in .iloom/settings.json"
499
+ );
500
+ }
501
+ const command = `supabase ${args.join(" ")}`;
502
+ getLogger().debug(`Executing Supabase CLI command: ${command}`);
503
+ getLogger().debug(`Project ref being used: ${this.config.projectRef}`);
504
+ if (cwd) {
505
+ getLogger().debug(`Working directory: ${cwd}`);
506
+ }
507
+ const result = await execa2("supabase", args, {
508
+ timeout,
509
+ encoding: "utf8",
510
+ stdio: "pipe",
511
+ ...cwd && { cwd }
512
+ });
513
+ return result.stdout;
514
+ }
515
+ /**
516
+ * Check if supabase CLI is available
517
+ */
518
+ async isCliAvailable() {
519
+ try {
520
+ await execa2("supabase", ["--version"], {
521
+ timeout: 5e3,
522
+ stdio: "pipe"
523
+ });
524
+ return true;
525
+ } catch (error) {
526
+ const errorCode = error.code;
527
+ if (errorCode === "ENOENT" || errorCode === "EACCES") {
528
+ return false;
529
+ }
530
+ return true;
531
+ }
532
+ }
533
+ /**
534
+ * Check if user is authenticated with Supabase CLI
535
+ *
536
+ * @param cwd - Optional working directory to run the command from (prevents issues with deleted directories)
537
+ * @throws Error if authentication check fails for reasons other than not being authenticated
538
+ */
539
+ async isAuthenticated(cwd) {
540
+ var _a;
541
+ const cliAvailable = await this.isCliAvailable();
542
+ if (!cliAvailable) {
543
+ return false;
544
+ }
545
+ try {
546
+ await execa2("supabase", ["projects", "list"], {
547
+ timeout: 1e4,
548
+ stdio: "pipe",
549
+ ...cwd && { cwd }
550
+ });
551
+ return true;
552
+ } catch (error) {
553
+ const execaError = error;
554
+ const stderr = ((_a = execaError.stderr) == null ? void 0 : _a.trim()) ?? "";
555
+ const isAuthError = stderr.toLowerCase().includes("not authenticated") || stderr.toLowerCase().includes("not logged in") || stderr.toLowerCase().includes("authentication required") || stderr.toLowerCase().includes("login required") || stderr.toLowerCase().includes("access token not provided") || stderr.toLowerCase().includes("you need to be logged in");
556
+ if (isAuthError) {
557
+ return false;
558
+ }
559
+ throw error;
560
+ }
561
+ }
562
+ /**
563
+ * Sanitize branch name for Supabase (replace slashes with hyphens)
564
+ * Supabase uses hyphens as separator (not underscores like Neon)
565
+ */
566
+ sanitizeBranchName(branchName) {
567
+ let sanitized = branchName.replace(/\//g, "-").replace(/[^a-zA-Z0-9_-]/g, "").replace(/^-+/, "");
568
+ return sanitized || "unnamed-branch";
569
+ }
570
+ /**
571
+ * List all branches in the Supabase project
572
+ *
573
+ * @param cwd - Optional working directory to run commands from
574
+ */
575
+ async listBranches(cwd) {
576
+ const output = await this.executeSupabaseCommand(
577
+ ["branches", "list", "--project-ref", this.config.projectRef, "-o", "json"],
578
+ cwd
579
+ );
580
+ let jsonString = output;
581
+ const firstBracket = output.indexOf("[");
582
+ if (firstBracket > 0) {
583
+ jsonString = output.slice(firstBracket);
584
+ }
585
+ let branches;
586
+ try {
587
+ branches = JSON.parse(jsonString);
588
+ } catch (parseError) {
589
+ throw new Error(
590
+ `Failed to parse Supabase branch list as JSON: ${parseError instanceof Error ? parseError.message : String(parseError)}`
591
+ );
592
+ }
593
+ return branches.map((branch) => branch.name);
594
+ }
595
+ /**
596
+ * Check if a branch exists
597
+ * Uses `supabase branches get` for a direct lookup (more efficient than listing all)
598
+ *
599
+ * @param name - Branch name to check
600
+ * @param cwd - Optional working directory to run commands from
601
+ */
602
+ async branchExists(name, cwd) {
603
+ var _a, _b;
604
+ const sanitizedName = this.sanitizeBranchName(name);
605
+ try {
606
+ await this.executeSupabaseCommand(
607
+ ["branches", "get", sanitizedName, "--project-ref", this.config.projectRef],
608
+ cwd
609
+ );
610
+ return true;
611
+ } catch (error) {
612
+ const execaError = error;
613
+ const stderr = ((_a = execaError.stderr) == null ? void 0 : _a.toLowerCase()) ?? "";
614
+ const stdout = ((_b = execaError.stdout) == null ? void 0 : _b.toLowerCase()) ?? "";
615
+ const message = (error instanceof Error ? error.message : String(error)).toLowerCase();
616
+ const isNotFound = stderr.includes("not found") || stderr.includes("does not exist") || stderr.includes("no branch") || stdout.includes("not found") || message.includes("not found") || message.includes("does not exist");
617
+ if (isNotFound) {
618
+ return false;
619
+ }
620
+ throw error;
621
+ }
622
+ }
623
+ /**
624
+ * Get connection string for a specific branch
625
+ * Parses POSTGRES_URL_NON_POOLING from `supabase branches get <name> -o env` output
626
+ * Connection strings are never logged at info level or above (security)
627
+ *
628
+ * @param branch - Branch name to get connection string for
629
+ * @param cwd - Optional working directory to run commands from
630
+ */
631
+ async getConnectionString(branch, cwd) {
632
+ const sanitizedBranch = this.sanitizeBranchName(branch);
633
+ const output = await this.executeSupabaseCommand(
634
+ ["branches", "get", sanitizedBranch, "--project-ref", this.config.projectRef, "-o", "env"],
635
+ cwd
636
+ );
637
+ const match = output.match(/^POSTGRES_URL_NON_POOLING=(.+)$/m);
638
+ if (!(match == null ? void 0 : match[1])) {
639
+ throw new Error(
640
+ `Could not find POSTGRES_URL_NON_POOLING in branch '${branch}' environment output`
641
+ );
642
+ }
643
+ const connectionString = match[1].trim();
644
+ getLogger().debug(`Connection string retrieved for branch '${branch}'`);
645
+ return connectionString;
646
+ }
647
+ /**
648
+ * Create a new database branch
649
+ * Returns connection string for the branch
650
+ *
651
+ * Note: Supabase preview branches always branch from the production database.
652
+ * The fromBranch parameter is accepted for interface compatibility but ignored.
653
+ *
654
+ * @param name - Name for the new branch
655
+ * @param fromBranch - Accepted for interface compatibility but ignored (Supabase always branches from production)
656
+ * @param cwd - Optional working directory to run commands from
657
+ */
658
+ async createBranch(name, fromBranch, cwd) {
659
+ void fromBranch;
660
+ const sanitizedName = this.sanitizeBranchName(name);
661
+ getLogger().info("Creating Supabase database branch...");
662
+ getLogger().info(` New branch: ${sanitizedName}`);
663
+ const args = [
664
+ "branches",
665
+ "create",
666
+ sanitizedName,
667
+ "--project-ref",
668
+ this.config.projectRef
669
+ ];
670
+ if (this.config.withData !== false) {
671
+ args.push("--with-data");
672
+ }
673
+ await this.executeSupabaseCommand(args, cwd, 3e5);
674
+ getLogger().success("Database branch created successfully");
675
+ getLogger().info("Getting connection string for new database branch...");
676
+ const connectionString = await this.getConnectionString(sanitizedName, cwd);
677
+ return connectionString;
678
+ }
679
+ /**
680
+ * Delete a database branch
681
+ *
682
+ * @param name - Name of the branch to delete
683
+ * @param isPreview - Accepted but ignored (Neon-specific concept for Vercel preview databases)
684
+ * @param cwd - Optional working directory to run commands from (prevents issues with deleted directories)
685
+ */
686
+ async deleteBranch(name, isPreview = false, cwd) {
687
+ void isPreview;
688
+ const sanitizedName = this.sanitizeBranchName(name);
689
+ getLogger().info(`Checking for Supabase database branch: ${sanitizedName}`);
690
+ try {
691
+ const exists = await this.branchExists(sanitizedName, cwd);
692
+ if (!exists) {
693
+ getLogger().info(`No database branch found for '${name}'`);
694
+ return {
695
+ success: true,
696
+ deleted: false,
697
+ notFound: true,
698
+ branchName: sanitizedName
699
+ };
700
+ }
701
+ getLogger().info(`Deleting Supabase database branch: ${sanitizedName}`);
702
+ await this.executeSupabaseCommand(
703
+ ["branches", "delete", sanitizedName, "--project-ref", this.config.projectRef],
704
+ cwd
705
+ );
706
+ getLogger().success("Database branch deleted successfully");
707
+ return {
708
+ success: true,
709
+ deleted: true,
710
+ notFound: false,
711
+ branchName: sanitizedName
712
+ };
713
+ } catch (error) {
714
+ const errorMessage = error instanceof Error ? error.message : String(error);
715
+ getLogger().error(`Failed to delete database branch: ${errorMessage}`);
716
+ return {
717
+ success: false,
718
+ deleted: false,
719
+ notFound: false,
720
+ error: errorMessage,
721
+ branchName: sanitizedName
722
+ };
723
+ }
724
+ }
725
+ };
726
+
727
+ // src/utils/database-helpers.ts
728
+ function createDatabaseProviderFromSettings(settings) {
729
+ var _a, _b;
438
730
  const neonConfig = (_a = settings.databaseProviders) == null ? void 0 : _a.neon;
731
+ const supabaseConfig = (_b = settings.databaseProviders) == null ? void 0 : _b.supabase;
732
+ if (neonConfig && supabaseConfig) {
733
+ throw new Error(
734
+ "Cannot configure both Neon and Supabase database providers simultaneously. Remove one from databaseProviders in .iloom/settings.json."
735
+ );
736
+ }
737
+ if (supabaseConfig) {
738
+ return new SupabaseProvider({
739
+ projectRef: supabaseConfig.projectRef,
740
+ ...supabaseConfig.parentBranch && { parentBranch: supabaseConfig.parentBranch },
741
+ ...supabaseConfig.withData !== void 0 && { withData: supabaseConfig.withData }
742
+ });
743
+ }
439
744
  return new NeonProvider({
440
745
  projectId: (neonConfig == null ? void 0 : neonConfig.projectId) ?? "",
441
746
  parentBranch: (neonConfig == null ? void 0 : neonConfig.parentBranch) ?? ""
@@ -443,6 +748,6 @@ function createNeonProviderFromSettings(settings) {
443
748
  }
444
749
 
445
750
  export {
446
- createNeonProviderFromSettings
751
+ createDatabaseProviderFromSettings
447
752
  };
448
- //# sourceMappingURL=chunk-VMZG66UV.js.map
753
+ //# sourceMappingURL=chunk-YUOVWWJX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/providers/NeonProvider.ts","../src/lib/providers/SupabaseProvider.ts","../src/utils/database-helpers.ts"],"sourcesContent":["import { execa, type ExecaError } from 'execa'\nimport type { DatabaseProvider } from '../../types/index.js'\nimport { getLogger } from '../../utils/logger-context.js'\nimport { promptConfirmation } from '../../utils/prompt.js'\n\ninterface NeonBranch {\n name: string\n id: string\n [key: string]: unknown\n}\n\nexport interface NeonConfig {\n projectId: string\n parentBranch: string\n}\n\n/**\n * Validate Neon configuration\n * Checks that required configuration values are present\n */\nexport function validateNeonConfig(config: {\n projectId?: string\n parentBranch?: string\n}): { valid: boolean; error?: string } {\n if (!config.projectId) {\n return {\n valid: false,\n error: 'Neon projectId is required. Configure in .iloom/settings.json under databaseProviders.neon',\n }\n }\n\n if (!config.parentBranch) {\n return {\n valid: false,\n error: 'Neon parentBranch is required. Configure in .iloom/settings.json under databaseProviders.neon',\n }\n }\n\n // Basic validation for project ID format (should start with appropriate prefix)\n if (!/^[a-zA-Z0-9-]+$/.test(config.projectId)) {\n return {\n valid: false,\n error: 'Neon projectId contains invalid characters',\n }\n }\n\n return { valid: true }\n}\n\n/**\n * Neon database provider implementation\n * Ports functionality from bash/utils/neon-utils.sh\n */\nexport class NeonProvider implements DatabaseProvider {\n readonly displayName = 'Neon'\n readonly installHint = 'npm install -g neonctl'\n private _isConfigured: boolean = false\n\n constructor(private config: NeonConfig) {\n getLogger().debug('NeonProvider initialized with config:', {\n projectId: config.projectId,\n parentBranch: config.parentBranch,\n hasProjectId: !!config.projectId,\n hasParentBranch: !!config.parentBranch,\n })\n\n // Validate config but don't throw - just mark as not configured\n // This allows the provider to be instantiated even when Neon is not being used\n const validation = validateNeonConfig(config)\n if (!validation.valid) {\n getLogger().debug(`NeonProvider not configured: ${validation.error}`)\n getLogger().debug('Neon database branching will not be used')\n this._isConfigured = false\n } else {\n this._isConfigured = true\n }\n }\n\n /**\n * Check if provider is properly configured\n * Returns true if projectId and parentBranch are valid in settings\n */\n isConfigured(): boolean {\n return this._isConfigured\n }\n\n /**\n * Execute a Neon CLI command and return stdout\n * Throws an error if the command fails\n *\n * @param args - Command arguments to pass to neon CLI\n * @param cwd - Optional working directory to run the command from (defaults to current directory)\n */\n private async executeNeonCommand(args: string[], cwd?: string): Promise<string> {\n // Check if provider is properly configured\n if (!this._isConfigured) {\n throw new Error('NeonProvider is not configured. Check databaseProviders.neon configuration in .iloom/settings.json')\n }\n\n // Log the exact command being executed for debugging\n const command = `neon ${args.join(' ')}`\n getLogger().debug(`Executing Neon CLI command: ${command}`)\n getLogger().debug(`Project ID being used: ${this.config.projectId}`)\n if (cwd) {\n getLogger().debug(`Working directory: ${cwd}`)\n }\n\n const result = await execa('neon', args, {\n timeout: 30000,\n encoding: 'utf8',\n stdio: 'pipe',\n ...(cwd && { cwd }),\n })\n return result.stdout\n }\n\n /**\n * Check if neon CLI is available\n * Ports: check_neon_cli() from bash/utils/neon-utils.sh:18-23\n */\n async isCliAvailable(): Promise<boolean> {\n try {\n await execa('command', ['-v', 'neon'], {\n timeout: 5000,\n shell: true,\n })\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Check if user is authenticated with Neon CLI\n * Ports: check_neon_auth() from bash/utils/neon-utils.sh:25-36\n *\n * @param cwd - Optional working directory to run the command from (prevents issues with deleted directories)\n * @throws Error if authentication check fails for reasons other than not being authenticated\n */\n async isAuthenticated(cwd?: string): Promise<boolean> {\n const cliAvailable = await this.isCliAvailable()\n if (!cliAvailable) {\n return false\n }\n\n try {\n await execa('neon', ['me'], {\n timeout: 10000,\n stdio: 'pipe',\n ...(cwd && { cwd }),\n })\n return true\n } catch (error) {\n const execaError = error as ExecaError\n const stderr = execaError.stderr?.trim() ?? ''\n\n // Check for authentication failure patterns (should return false, not throw)\n const isAuthError =\n stderr.toLowerCase().includes('not authenticated') ||\n stderr.toLowerCase().includes('not logged in') ||\n stderr.toLowerCase().includes('authentication required') ||\n stderr.toLowerCase().includes('login required')\n\n if (isAuthError) {\n return false\n }\n\n // For any other error, let it bubble up\n throw error\n }\n }\n\n /**\n * Sanitize branch name for Neon (replace slashes with underscores)\n * Ports: sanitize_neon_branch_name() from bash/utils/neon-utils.sh:11-15\n */\n sanitizeBranchName(branchName: string): string {\n return branchName.replace(/\\//g, '_')\n }\n\n /**\n * Extract endpoint ID from Neon connection string\n * Pattern matches: ep-abc-123 or ep-abc-123-pooler\n * Returns: ep-abc-123 (without -pooler suffix)\n * Used by: get_neon_branch_name() from bash/utils/neon-utils.sh:294\n */\n private extractEndpointId(connectionString: string): string | null {\n // First, extract the full host part between @ and first dot\n // Examples:\n // @ep-abc123.us-east-1.neon.tech -> ep-abc123\n // @ep-abc123-pooler.us-east-1.neon.tech -> ep-abc123-pooler\n const hostMatch = connectionString.match(/@(ep-[a-z0-9-]+)\\./)\n if (!hostMatch?.[1]) {\n return null\n }\n\n const fullEndpoint = hostMatch[1]\n // Remove -pooler suffix if present\n return fullEndpoint.replace(/-pooler$/, '')\n }\n\n /**\n * List all branches in the Neon project\n * Ports: list_neon_branches() from bash/utils/neon-utils.sh:63-74\n *\n * @param cwd - Optional working directory to run commands from\n */\n async listBranches(cwd?: string): Promise<string[]> {\n const output = await this.executeNeonCommand([\n 'branches',\n 'list',\n '--project-id',\n this.config.projectId,\n '--output',\n 'json',\n ], cwd)\n\n const branches: NeonBranch[] = JSON.parse(output)\n return branches.map(branch => branch.name)\n }\n\n /**\n * Check if a branch exists\n * Ports: check_neon_branch_exists() from bash/utils/neon-utils.sh:38-61\n *\n * @param name - Branch name to check\n * @param cwd - Optional working directory to run commands from\n */\n async branchExists(name: string, cwd?: string): Promise<boolean> {\n const branches = await this.listBranches(cwd)\n return branches.includes(name)\n }\n\n /**\n * Get connection string for a specific branch\n * Ports: get_neon_connection_string() from bash/utils/neon-utils.sh:76-90\n *\n * @param branch - Branch name to get connection string for\n * @param cwd - Optional working directory to run commands from\n */\n async getConnectionString(branch: string, cwd?: string): Promise<string> {\n const connectionString = await this.executeNeonCommand([\n 'connection-string',\n '--branch',\n branch,\n '--project-id',\n this.config.projectId,\n ], cwd)\n return connectionString.trim()\n }\n\n /**\n * Find Vercel preview database branch\n * Checks for both patterns: preview/<branch> and preview_<sanitized-branch>\n * Ports: find_preview_database_branch() from bash/utils/neon-utils.sh:92-124\n *\n * @param branchName - Branch name to find preview for\n * @param cwd - Optional working directory to run commands from\n */\n async findPreviewBranch(branchName: string, cwd?: string): Promise<string | null> {\n // Check for exact preview branch match with slash pattern\n const slashPattern = `preview/${branchName}`\n if (await this.branchExists(slashPattern, cwd)) {\n getLogger().info(`Found Vercel preview database: ${slashPattern}`)\n return slashPattern\n }\n\n // Check for underscore pattern variation\n const sanitized = this.sanitizeBranchName(branchName)\n const underscorePattern = `preview_${sanitized}`\n if (await this.branchExists(underscorePattern, cwd)) {\n getLogger().info(`Found Vercel preview database: ${underscorePattern}`)\n return underscorePattern\n }\n\n return null\n }\n\n /**\n * Remove expiration date from a Neon branch\n * Used when parent branches need to have child branches created\n * Neon limitation: \"Branches with an expiration date cannot have child branches\"\n *\n * @param branchName - Name of the branch to remove expiration from\n * @param cwd - Optional working directory to run commands from\n */\n private async removeExpiration(branchName: string, cwd?: string): Promise<void> {\n getLogger().info(`Removing expiration date from branch: ${branchName}`)\n await this.executeNeonCommand([\n 'branches',\n 'set-expiration',\n branchName,\n '--project-id',\n this.config.projectId,\n ], cwd)\n getLogger().success(`Expiration date removed from ${branchName}`)\n }\n\n /**\n * Create a new database branch\n * ALWAYS checks for Vercel preview database first\n * Handles Neon limitation where parent branches with expiration dates cannot have children\n * Returns connection string for the branch\n * Ports: create_neon_database_branch() from bash/utils/neon-utils.sh:126-187\n *\n * @param name - Name for the new branch\n * @param fromBranch - Parent branch to create from (defaults to config.parentBranch)\n * @param cwd - Optional working directory to run commands from\n */\n async createBranch(name: string, fromBranch?: string, cwd?: string): Promise<string> {\n // Always check for existing Vercel preview database first (lines 149-158)\n const previewBranch = await this.findPreviewBranch(name, cwd)\n if (previewBranch) {\n const connectionString = await this.getConnectionString(previewBranch, cwd)\n getLogger().success(`Using existing Vercel preview database: ${previewBranch}`)\n return connectionString\n }\n\n // Sanitize branch name for Neon (replace slashes with underscores)\n const sanitizedName = this.sanitizeBranchName(name)\n const parentBranch = fromBranch ?? this.config.parentBranch\n\n getLogger().info('Creating Neon database branch...')\n getLogger().info(` Parent branch: ${parentBranch}`)\n getLogger().info(` New branch: ${sanitizedName}`)\n\n try {\n // Create the database branch\n await this.executeNeonCommand([\n 'branches',\n 'create',\n '--name',\n sanitizedName,\n '--parent',\n parentBranch,\n '--project-id',\n this.config.projectId,\n ], cwd)\n } catch (error) {\n // Check if error is about parent branch having an expiration date\n const errorMessage = error instanceof Error ? error.message : String(error)\n if (errorMessage.toLowerCase().includes('expiration') &&\n errorMessage.toLowerCase().includes('child')) {\n getLogger().warn('Parent branch has an expiration date - removing it to allow child branch creation')\n\n // Remove expiration from parent branch\n await this.removeExpiration(parentBranch, cwd)\n\n // Retry branch creation\n getLogger().info('Retrying database branch creation...')\n await this.executeNeonCommand([\n 'branches',\n 'create',\n '--name',\n sanitizedName,\n '--parent',\n parentBranch,\n '--project-id',\n this.config.projectId,\n ], cwd)\n } else {\n // Re-throw if it's a different error\n throw error\n }\n }\n\n getLogger().success('Database branch created successfully')\n\n // Get the connection string for the new branch\n getLogger().info('Getting connection string for new database branch...')\n const connectionString = await this.getConnectionString(sanitizedName, cwd)\n\n return connectionString\n }\n\n /**\n * Delete a database branch\n * Includes preview database protection with user confirmation\n * Ports: delete_neon_database_branch() from bash/utils/neon-utils.sh:204-259\n *\n * @param name - Name of the branch to delete\n * @param isPreview - Whether this is a preview database branch\n * @param cwd - Optional working directory to run commands from (prevents issues with deleted directories)\n */\n async deleteBranch(name: string, isPreview: boolean = false, cwd?: string): Promise<import('../../types/index.js').DatabaseDeletionResult> {\n // Sanitize branch name for Neon\n const sanitizedName = this.sanitizeBranchName(name)\n\n // For preview contexts, check for preview databases first\n if (isPreview) {\n const previewBranch = await this.findPreviewBranch(name, cwd)\n if (previewBranch) {\n getLogger().warn(`Found Vercel preview database: ${previewBranch}`)\n getLogger().warn('Preview databases are managed by Vercel and will be cleaned up automatically')\n getLogger().warn('Manual deletion may interfere with Vercel\\'s preview deployments')\n\n const confirmed = await promptConfirmation(\n 'Delete preview database anyway?',\n false\n )\n\n if (confirmed) {\n // User confirmed - delete preview branch\n try {\n getLogger().info(`Deleting Vercel preview database: ${previewBranch}`)\n await this.executeNeonCommand([\n 'branches',\n 'delete',\n previewBranch,\n '--project-id',\n this.config.projectId,\n ], cwd)\n getLogger().success('Preview database deleted successfully')\n return {\n success: true,\n deleted: true,\n notFound: false,\n branchName: previewBranch\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n getLogger().error(`Failed to delete preview database: ${errorMessage}`)\n return {\n success: false,\n deleted: false,\n notFound: false,\n error: errorMessage,\n branchName: previewBranch\n }\n }\n } else {\n // User declined deletion\n getLogger().info('Skipping preview database deletion')\n return {\n success: true,\n deleted: false,\n notFound: false,\n userDeclined: true,\n branchName: previewBranch\n }\n }\n }\n // If no preview database found, fall through to check regular branch\n }\n\n // Check for regular branch\n getLogger().info(`Checking for Neon database branch: ${sanitizedName}`)\n\n try {\n const exists = await this.branchExists(sanitizedName, cwd)\n\n if (!exists) {\n getLogger().info(`No database branch found for '${name}'`)\n return {\n success: true,\n deleted: false,\n notFound: true,\n branchName: sanitizedName\n }\n }\n\n // Branch exists - delete it\n getLogger().info(`Deleting Neon database branch: ${sanitizedName}`)\n await this.executeNeonCommand([\n 'branches',\n 'delete',\n sanitizedName,\n '--project-id',\n this.config.projectId,\n ], cwd)\n getLogger().success('Database branch deleted successfully')\n\n return {\n success: true,\n deleted: true,\n notFound: false,\n branchName: sanitizedName\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n getLogger().error(`Failed to delete database branch: ${errorMessage}`)\n return {\n success: false,\n deleted: false,\n notFound: false,\n error: errorMessage,\n branchName: sanitizedName\n }\n }\n }\n\n /**\n * Get branch name from endpoint ID (reverse lookup)\n * Searches all branches to find one with matching endpoint\n * Ports: get_neon_branch_name() from bash/utils/neon-utils.sh:262-308\n *\n * @param endpointId - Endpoint ID to search for\n * @param cwd - Optional working directory to run commands from\n */\n async getBranchNameFromEndpoint(endpointId: string, cwd?: string): Promise<string | null> {\n const branches = await this.listBranches(cwd)\n\n for (const branch of branches) {\n try {\n const connectionString = await this.getConnectionString(branch, cwd)\n const branchEndpointId = this.extractEndpointId(connectionString)\n\n if (branchEndpointId === endpointId) {\n return branch\n }\n } catch {\n // Skip branches that fail to get connection string\n continue\n }\n }\n\n return null\n }\n\n /**\n * Get branch name from a connection string (reverse lookup)\n * Extracts endpoint ID from connection string and finds matching branch\n *\n * @param connectionString - Neon connection string (e.g., postgres://...@ep-abc-123.region.neon.tech/...)\n * @param cwd - Optional working directory to run commands from\n */\n async getBranchNameFromConnectionString(connectionString: string, cwd?: string): Promise<string | null> {\n const endpointId = this.extractEndpointId(connectionString)\n if (!endpointId) {\n getLogger().debug('Could not extract endpoint ID from connection string')\n return null\n }\n return this.getBranchNameFromEndpoint(endpointId, cwd)\n }\n}\n","import { execa, type ExecaError } from 'execa'\nimport type { DatabaseProvider, DatabaseDeletionResult } from '../../types/index.js'\nimport { getLogger } from '../../utils/logger-context.js'\n\nexport interface SupabaseConfig {\n projectRef: string\n parentBranch?: string\n withData?: boolean // default: true\n}\n\n/**\n * Validate Supabase configuration\n * Checks that required configuration values are present\n */\nexport function validateSupabaseConfig(config: {\n projectRef?: string\n parentBranch?: string\n}): { valid: boolean; error?: string } {\n if (!config.projectRef) {\n return {\n valid: false,\n error:\n 'Supabase projectRef is required. Configure in .iloom/settings.json under databaseProviders.supabase',\n }\n }\n\n // parentBranch is optional — Supabase currently always branches from the default branch\n\n // Basic validation for project ref format (alphanumeric and hyphens)\n if (!/^[a-zA-Z0-9-]+$/.test(config.projectRef)) {\n return {\n valid: false,\n error: 'Supabase projectRef contains invalid characters',\n }\n }\n\n return { valid: true }\n}\n\n/**\n * Supabase database provider implementation\n * Provides database branching via the Supabase CLI\n */\nexport class SupabaseProvider implements DatabaseProvider {\n private _isConfigured: boolean = false\n\n readonly displayName = 'Supabase CLI'\n readonly installHint = 'Install with: npm install -g supabase'\n\n constructor(private config: SupabaseConfig) {\n getLogger().debug('SupabaseProvider initialized with config:', {\n projectRef: config.projectRef,\n parentBranch: config.parentBranch,\n withData: config.withData,\n hasProjectRef: !!config.projectRef,\n hasParentBranch: !!config.parentBranch,\n })\n\n // Validate config but don't throw - just mark as not configured\n // This allows the provider to be instantiated even when Supabase is not being used\n const validation = validateSupabaseConfig(config)\n if (!validation.valid) {\n getLogger().debug(`SupabaseProvider not configured: ${validation.error}`)\n getLogger().debug('Supabase database branching will not be used')\n this._isConfigured = false\n } else {\n this._isConfigured = true\n }\n\n if (config.parentBranch) {\n getLogger().debug(\n `parentBranch '${config.parentBranch}' is stored but Supabase currently always branches from the default branch`\n )\n }\n }\n\n /**\n * Check if provider is properly configured\n * Returns true if projectRef and parentBranch are valid in settings\n */\n isConfigured(): boolean {\n return this._isConfigured\n }\n\n /**\n * Execute a Supabase CLI command and return stdout\n * Throws an error if the command fails\n *\n * @param args - Command arguments to pass to supabase CLI\n * @param cwd - Optional working directory to run the command from (defaults to current directory)\n */\n private async executeSupabaseCommand(args: string[], cwd?: string, timeout: number = 30000): Promise<string> {\n // Check if provider is properly configured\n if (!this._isConfigured) {\n throw new Error(\n 'SupabaseProvider is not configured. Check databaseProviders.supabase configuration in .iloom/settings.json'\n )\n }\n\n // Log the exact command being executed for debugging\n const command = `supabase ${args.join(' ')}`\n getLogger().debug(`Executing Supabase CLI command: ${command}`)\n getLogger().debug(`Project ref being used: ${this.config.projectRef}`)\n if (cwd) {\n getLogger().debug(`Working directory: ${cwd}`)\n }\n\n const result = await execa('supabase', args, {\n timeout,\n encoding: 'utf8',\n stdio: 'pipe',\n ...(cwd && { cwd }),\n })\n return result.stdout\n }\n\n /**\n * Check if supabase CLI is available\n */\n async isCliAvailable(): Promise<boolean> {\n try {\n await execa('supabase', ['--version'], {\n timeout: 5000,\n stdio: 'pipe',\n })\n return true\n } catch (error) {\n const errorCode = (error as NodeJS.ErrnoException).code\n // ENOENT means the binary was not found on the system\n // EACCES means the binary exists but has no execute permission\n if (errorCode === 'ENOENT' || errorCode === 'EACCES') {\n return false\n }\n // Any other error (e.g., non-zero exit) still means CLI is present\n return true\n }\n }\n\n /**\n * Check if user is authenticated with Supabase CLI\n *\n * @param cwd - Optional working directory to run the command from (prevents issues with deleted directories)\n * @throws Error if authentication check fails for reasons other than not being authenticated\n */\n async isAuthenticated(cwd?: string): Promise<boolean> {\n const cliAvailable = await this.isCliAvailable()\n if (!cliAvailable) {\n return false\n }\n\n try {\n await execa('supabase', ['projects', 'list'], {\n timeout: 10000,\n stdio: 'pipe',\n ...(cwd && { cwd }),\n })\n return true\n } catch (error) {\n const execaError = error as ExecaError\n const stderr = execaError.stderr?.trim() ?? ''\n\n // Check for authentication failure patterns (should return false, not throw)\n const isAuthError =\n stderr.toLowerCase().includes('not authenticated') ||\n stderr.toLowerCase().includes('not logged in') ||\n stderr.toLowerCase().includes('authentication required') ||\n stderr.toLowerCase().includes('login required') ||\n stderr.toLowerCase().includes('access token not provided') ||\n stderr.toLowerCase().includes('you need to be logged in')\n\n if (isAuthError) {\n return false\n }\n\n // For any other error, let it bubble up\n throw error\n }\n }\n\n /**\n * Sanitize branch name for Supabase (replace slashes with hyphens)\n * Supabase uses hyphens as separator (not underscores like Neon)\n */\n sanitizeBranchName(branchName: string): string {\n let sanitized = branchName\n .replace(/\\//g, '-') // replace slashes with hyphens\n .replace(/[^a-zA-Z0-9_-]/g, '') // remove chars that aren't alphanumeric, hyphens, or underscores\n .replace(/^-+/, '') // strip leading hyphens (prevents CLI flag injection)\n return sanitized || 'unnamed-branch'\n }\n\n /**\n * List all branches in the Supabase project\n *\n * @param cwd - Optional working directory to run commands from\n */\n async listBranches(cwd?: string): Promise<string[]> {\n const output = await this.executeSupabaseCommand(\n ['branches', 'list', '--project-ref', this.config.projectRef, '-o', 'json'],\n cwd\n )\n\n interface SupabaseBranch {\n name: string\n [key: string]: unknown\n }\n\n let jsonString = output\n // CLI tools can prepend warnings to stdout; strip non-JSON prefixes\n const firstBracket = output.indexOf('[')\n if (firstBracket > 0) {\n jsonString = output.slice(firstBracket)\n }\n\n let branches: SupabaseBranch[]\n try {\n branches = JSON.parse(jsonString)\n } catch (parseError) {\n throw new Error(\n `Failed to parse Supabase branch list as JSON: ${parseError instanceof Error ? parseError.message : String(parseError)}`\n )\n }\n return branches.map((branch) => branch.name)\n }\n\n /**\n * Check if a branch exists\n * Uses `supabase branches get` for a direct lookup (more efficient than listing all)\n *\n * @param name - Branch name to check\n * @param cwd - Optional working directory to run commands from\n */\n async branchExists(name: string, cwd?: string): Promise<boolean> {\n const sanitizedName = this.sanitizeBranchName(name)\n try {\n await this.executeSupabaseCommand(\n ['branches', 'get', sanitizedName, '--project-ref', this.config.projectRef],\n cwd\n )\n return true\n } catch (error) {\n const execaError = error as ExecaError\n const stderr = execaError.stderr?.toLowerCase() ?? ''\n const stdout = execaError.stdout?.toLowerCase() ?? ''\n const message = (error instanceof Error ? error.message : String(error)).toLowerCase()\n\n // Only return false for explicit \"not found\" error signatures\n // Note: Supabase CLI uses exitCode=1 for \"not found\" and exitCode=2 for auth errors\n const isNotFound =\n stderr.includes('not found') ||\n stderr.includes('does not exist') ||\n stderr.includes('no branch') ||\n stdout.includes('not found') ||\n message.includes('not found') ||\n message.includes('does not exist')\n\n if (isNotFound) {\n return false\n }\n\n // For any other error (auth, network, CLI unavailable), rethrow\n throw error\n }\n }\n\n /**\n * Get connection string for a specific branch\n * Parses POSTGRES_URL_NON_POOLING from `supabase branches get <name> -o env` output\n * Connection strings are never logged at info level or above (security)\n *\n * @param branch - Branch name to get connection string for\n * @param cwd - Optional working directory to run commands from\n */\n async getConnectionString(branch: string, cwd?: string): Promise<string> {\n const sanitizedBranch = this.sanitizeBranchName(branch)\n const output = await this.executeSupabaseCommand(\n ['branches', 'get', sanitizedBranch, '--project-ref', this.config.projectRef, '-o', 'env'],\n cwd\n )\n\n // Parse POSTGRES_URL_NON_POOLING from env output\n const match = output.match(/^POSTGRES_URL_NON_POOLING=(.+)$/m)\n if (!match?.[1]) {\n throw new Error(\n `Could not find POSTGRES_URL_NON_POOLING in branch '${branch}' environment output`\n )\n }\n\n const connectionString = match[1].trim()\n // Log only at debug level - never at info level or above (security)\n getLogger().debug(`Connection string retrieved for branch '${branch}'`)\n return connectionString\n }\n\n /**\n * Create a new database branch\n * Returns connection string for the branch\n *\n * Note: Supabase preview branches always branch from the production database.\n * The fromBranch parameter is accepted for interface compatibility but ignored.\n *\n * @param name - Name for the new branch\n * @param fromBranch - Accepted for interface compatibility but ignored (Supabase always branches from production)\n * @param cwd - Optional working directory to run commands from\n */\n async createBranch(name: string, fromBranch?: string, cwd?: string): Promise<string> {\n void fromBranch // accepted for interface compatibility but ignored - Supabase always branches from production\n\n const sanitizedName = this.sanitizeBranchName(name)\n\n getLogger().info('Creating Supabase database branch...')\n getLogger().info(` New branch: ${sanitizedName}`)\n\n const args = [\n 'branches',\n 'create',\n sanitizedName,\n '--project-ref',\n this.config.projectRef,\n ]\n\n // Add --with-data flag when withData is true (default: true per acceptance criteria)\n if (this.config.withData !== false) {\n args.push('--with-data')\n }\n\n await this.executeSupabaseCommand(args, cwd, 300000)\n\n getLogger().success('Database branch created successfully')\n\n // Get the connection string for the new branch\n getLogger().info('Getting connection string for new database branch...')\n const connectionString = await this.getConnectionString(sanitizedName, cwd)\n\n return connectionString\n }\n\n /**\n * Delete a database branch\n *\n * @param name - Name of the branch to delete\n * @param isPreview - Accepted but ignored (Neon-specific concept for Vercel preview databases)\n * @param cwd - Optional working directory to run commands from (prevents issues with deleted directories)\n */\n async deleteBranch(\n name: string,\n isPreview: boolean = false,\n cwd?: string\n ): Promise<DatabaseDeletionResult> {\n void isPreview // accepted but ignored - Neon-specific concept\n\n const sanitizedName = this.sanitizeBranchName(name)\n\n getLogger().info(`Checking for Supabase database branch: ${sanitizedName}`)\n\n try {\n const exists = await this.branchExists(sanitizedName, cwd)\n\n if (!exists) {\n getLogger().info(`No database branch found for '${name}'`)\n return {\n success: true,\n deleted: false,\n notFound: true,\n branchName: sanitizedName,\n }\n }\n\n // Branch exists - delete it\n getLogger().info(`Deleting Supabase database branch: ${sanitizedName}`)\n await this.executeSupabaseCommand(\n ['branches', 'delete', sanitizedName, '--project-ref', this.config.projectRef],\n cwd\n )\n getLogger().success('Database branch deleted successfully')\n\n return {\n success: true,\n deleted: true,\n notFound: false,\n branchName: sanitizedName,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n getLogger().error(`Failed to delete database branch: ${errorMessage}`)\n return {\n success: false,\n deleted: false,\n notFound: false,\n error: errorMessage,\n branchName: sanitizedName,\n }\n }\n }\n\n}\n","import { NeonProvider } from '../lib/providers/NeonProvider.js'\nimport { SupabaseProvider } from '../lib/providers/SupabaseProvider.js'\nimport type { IloomSettings } from '../lib/SettingsManager.js'\nimport type { DatabaseProvider } from '../types/index.js'\n\n/**\n * Create the appropriate database provider from iloom settings.\n *\n * - Returns a NeonProvider when databaseProviders.neon is configured\n * - Returns a SupabaseProvider when databaseProviders.supabase is configured\n * - Throws if both neon and supabase are configured simultaneously\n * - Returns an unconfigured NeonProvider (isConfigured() = false) when neither is configured\n */\nexport function createDatabaseProviderFromSettings(settings: IloomSettings): DatabaseProvider {\n\tconst neonConfig = settings.databaseProviders?.neon\n\tconst supabaseConfig = settings.databaseProviders?.supabase\n\n\tif (neonConfig && supabaseConfig) {\n\t\tthrow new Error(\n\t\t\t'Cannot configure both Neon and Supabase database providers simultaneously. ' +\n\t\t\t\t'Remove one from databaseProviders in .iloom/settings.json.',\n\t\t)\n\t}\n\n\tif (supabaseConfig) {\n\t\treturn new SupabaseProvider({\n\t\t\tprojectRef: supabaseConfig.projectRef,\n\t\t\t...(supabaseConfig.parentBranch && { parentBranch: supabaseConfig.parentBranch }),\n\t\t\t...(supabaseConfig.withData !== undefined && { withData: supabaseConfig.withData }),\n\t\t})\n\t}\n\n\treturn new NeonProvider({\n\t\tprojectId: neonConfig?.projectId ?? '',\n\t\tparentBranch: neonConfig?.parentBranch ?? '',\n\t})\n}\n"],"mappings":"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","names":["connectionString","execa","execa"]}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  extractIssueNumber
4
- } from "./chunk-3RXYOBME.js";
4
+ } from "./chunk-QNPJXO53.js";
5
5
  import {
6
6
  extractPort,
7
7
  findEnvFileContainingVariable,
8
8
  logger,
9
9
  parseEnvFile
10
- } from "./chunk-H2SSF24U.js";
10
+ } from "./chunk-VRPPI6GU.js";
11
11
 
12
12
  // src/utils/port.ts
13
13
  import { createHash } from "crypto";
@@ -108,4 +108,4 @@ export {
108
108
  calculatePortFromIdentifier,
109
109
  getWorkspacePort
110
110
  };
111
- //# sourceMappingURL=chunk-HLDY5S4C.js.map
111
+ //# sourceMappingURL=chunk-ZUIFO7B4.js.map
@@ -7,9 +7,9 @@ import {
7
7
  getClaudeVersion,
8
8
  launchClaude,
9
9
  launchClaudeInNewTerminalWindow
10
- } from "./chunk-Y3RX7LZT.js";
11
- import "./chunk-ZAXRQLK3.js";
12
- import "./chunk-H2SSF24U.js";
10
+ } from "./chunk-DDHWZNGL.js";
11
+ import "./chunk-FTYWGQFM.js";
12
+ import "./chunk-VRPPI6GU.js";
13
13
  export {
14
14
  detectClaudeCli,
15
15
  generateBranchName,
@@ -19,4 +19,4 @@ export {
19
19
  launchClaude,
20
20
  launchClaudeInNewTerminalWindow
21
21
  };
22
- //# sourceMappingURL=claude-ONQTDWV3.js.map
22
+ //# sourceMappingURL=claude-ACL7G4CF.js.map
@@ -1,59 +1,62 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ResourceCleanup
4
- } from "./chunk-7FIXNAUO.js";
5
- import "./chunk-XXFSOVL3.js";
4
+ } from "./chunk-SA446KA2.js";
5
+ import "./chunk-3XEXT35Z.js";
6
6
  import {
7
7
  CLIIsolationManager,
8
8
  DatabaseManager,
9
9
  EnvironmentManager,
10
10
  LoomManager
11
- } from "./chunk-XFQGI2E3.js";
12
- import "./chunk-ABVMUNCD.js";
13
- import "./chunk-NOMQ5RFG.js";
14
- import "./chunk-RMLADZRY.js";
15
- import "./chunk-4232AHNQ.js";
11
+ } from "./chunk-VVQQIG64.js";
12
+ import "./chunk-KQSV7FOG.js";
13
+ import "./chunk-7UBEHQTP.js";
14
+ import "./chunk-AYLC633W.js";
16
15
  import {
17
16
  ProcessManager
18
- } from "./chunk-5PNZBH6V.js";
17
+ } from "./chunk-H3T3EPF3.js";
18
+ import "./chunk-ZUIFO7B4.js";
19
19
  import {
20
20
  IdentifierParser
21
- } from "./chunk-UDCI3QTS.js";
22
- import "./chunk-YETJNRQM.js";
23
- import "./chunk-HLDY5S4C.js";
24
- import "./chunk-3GTUXW26.js";
25
- import "./chunk-NCPZYQ4B.js";
21
+ } from "./chunk-SN4S5CWL.js";
26
22
  import {
27
- createNeonProviderFromSettings
28
- } from "./chunk-VMZG66UV.js";
23
+ createDatabaseProviderFromSettings
24
+ } from "./chunk-YUOVWWJX.js";
29
25
  import {
30
26
  TelemetryService
31
- } from "./chunk-GMDSYLI6.js";
27
+ } from "./chunk-MY2Q3FJ3.js";
28
+ import "./chunk-NTDY5AMO.js";
29
+ import "./chunk-4232AHNQ.js";
30
+ import "./chunk-VIQOQ463.js";
32
31
  import {
33
32
  GitWorktreeManager
34
- } from "./chunk-LE2NOUTN.js";
35
- import "./chunk-5LTID2AF.js";
36
- import "./chunk-LHDD4JHC.js";
37
- import "./chunk-NH3QZYE5.js";
33
+ } from "./chunk-4VQXMEEP.js";
34
+ import "./chunk-WEBMMJKL.js";
35
+ import "./chunk-K3QGG4O2.js";
36
+ import "./chunk-DMSL5BAP.js";
37
+ import "./chunk-D4Q7T5KD.js";
38
+ import "./chunk-KV4NU3RP.js";
38
39
  import {
39
40
  promptConfirmation
40
- } from "./chunk-CV47VCMQ.js";
41
- import "./chunk-7OCGBJLR.js";
42
- import "./chunk-QVAA5KHK.js";
43
- import "./chunk-Y3RX7LZT.js";
44
- import "./chunk-3RXYOBME.js";
41
+ } from "./chunk-NPVA65KS.js";
42
+ import "./chunk-QC65IOV3.js";
43
+ import "./chunk-P5MXXHXQ.js";
44
+ import "./chunk-BZ7KTXPB.js";
45
+ import "./chunk-OIVFHJOA.js";
46
+ import "./chunk-DDHWZNGL.js";
47
+ import "./chunk-QNPJXO53.js";
45
48
  import {
46
49
  SettingsManager
47
- } from "./chunk-ET6A2JR4.js";
50
+ } from "./chunk-WGUGB54H.js";
48
51
  import {
49
52
  MetadataManager
50
- } from "./chunk-YRCEOQPX.js";
53
+ } from "./chunk-4JZEQBWV.js";
51
54
  import {
52
55
  getLogger
53
- } from "./chunk-ZAXRQLK3.js";
56
+ } from "./chunk-FTYWGQFM.js";
54
57
  import {
55
58
  loadEnvIntoProcess
56
- } from "./chunk-H2SSF24U.js";
59
+ } from "./chunk-VRPPI6GU.js";
57
60
 
58
61
  // src/commands/cleanup.ts
59
62
  function trackLoomAbandoned(metadata) {
@@ -94,8 +97,8 @@ var CleanupCommand = class {
94
97
  const settings = await settingsManager.loadSettings();
95
98
  const databaseUrlEnvVarName = ((_b = (_a = settings.capabilities) == null ? void 0 : _a.database) == null ? void 0 : _b.databaseUrlEnvVarName) ?? "DATABASE_URL";
96
99
  const environmentManager = new EnvironmentManager();
97
- const neonProvider = createNeonProviderFromSettings(settings);
98
- const databaseManager = new DatabaseManager(neonProvider, environmentManager, databaseUrlEnvVarName);
100
+ const databaseProvider = createDatabaseProviderFromSettings(settings);
101
+ const databaseManager = new DatabaseManager(databaseProvider, environmentManager, databaseUrlEnvVarName);
99
102
  const cliIsolationManager = new CLIIsolationManager();
100
103
  this.resourceCleanup ??= new ResourceCleanup(
101
104
  this.gitWorktreeManager,
@@ -104,10 +107,10 @@ var CleanupCommand = class {
104
107
  cliIsolationManager
105
108
  );
106
109
  if (!this.loomManager) {
107
- const { IssueTrackerFactory } = await import("./IssueTrackerFactory-XN6MQ4UN.js");
108
- const { ClaudeContextManager } = await import("./ClaudeContextManager-SXDCWDJA.js");
109
- const { ProjectCapabilityDetector } = await import("./ProjectCapabilityDetector-IC6NAFGY.js");
110
- const { DefaultBranchNamingService } = await import("./BranchNamingService-XBCO747L.js");
110
+ const { IssueTrackerFactory } = await import("./IssueTrackerFactory-KE2BDCLC.js");
111
+ const { ClaudeContextManager } = await import("./ClaudeContextManager-RRGREEZQ.js");
112
+ const { ProjectCapabilityDetector } = await import("./ProjectCapabilityDetector-I4J66WKF.js");
113
+ const { DefaultBranchNamingService } = await import("./BranchNamingService-MEK2WZUD.js");
111
114
  this.loomManager = new LoomManager(
112
115
  this.gitWorktreeManager,
113
116
  IssueTrackerFactory.create(settings),
@@ -311,7 +314,7 @@ var CleanupCommand = class {
311
314
  const { force, dryRun } = parsed.options;
312
315
  let parsedInput = await this.identifierParser.parseForPatternDetection(identifier);
313
316
  if (parsedInput.type === "branch" && parsedInput.branchName) {
314
- const { extractIssueNumber } = await import("./git-BXUD6CL5.js");
317
+ const { extractIssueNumber } = await import("./git-TX2IEMB3.js");
315
318
  const extractedNumber = extractIssueNumber(parsedInput.branchName);
316
319
  if (extractedNumber !== null) {
317
320
  parsedInput = {
@@ -541,4 +544,4 @@ var CleanupCommand = class {
541
544
  export {
542
545
  CleanupCommand
543
546
  };
544
- //# sourceMappingURL=cleanup-YOM6PQCN.js.map
547
+ //# sourceMappingURL=cleanup-RJKLI47I.js.map