@sma1lboy/rove 0.9.274 → 0.9.277-next.1

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 (236) hide show
  1. package/dist/cli/{chunk-kgs56yns.js → chunk-0a65j1zj.js} +1 -1
  2. package/dist/cli/{chunk-55ajzrj6.js → chunk-0r1jf8m9.js} +1 -1
  3. package/dist/cli/{chunk-q6septaj.js → chunk-0rvydb9q.js} +1 -1
  4. package/dist/cli/chunk-1g6vhgfe.js +14 -0
  5. package/dist/cli/{chunk-mmq6922s.js → chunk-1vxtd8rh.js} +2 -2
  6. package/dist/cli/chunk-1wwqf6kx.js +3 -0
  7. package/dist/cli/{chunk-8h437k1q.js → chunk-2kbzb24j.js} +1 -1
  8. package/dist/cli/chunk-2kt0mfvf.js +2 -0
  9. package/dist/cli/{chunk-m4dvx7bd.js → chunk-2vph030z.js} +3 -3
  10. package/dist/cli/chunk-2xsxcdp6.js +3 -0
  11. package/dist/cli/{chunk-fexzfgd1.js → chunk-2y70y8na.js} +1 -1
  12. package/dist/cli/{chunk-tw9w8pzg.js → chunk-36eyrv4r.js} +3 -3
  13. package/dist/cli/chunk-37fas9aj.js +2 -0
  14. package/dist/cli/chunk-3dhv5n19.js +2 -0
  15. package/dist/cli/{chunk-kx53jjee.js → chunk-3x5g06mw.js} +8 -6
  16. package/dist/cli/{chunk-8sggyn8y.js → chunk-3y0z478f.js} +1 -1
  17. package/dist/cli/chunk-4dt1gfb3.js +3 -0
  18. package/dist/cli/chunk-4w4tpsqx.js +2 -0
  19. package/dist/cli/chunk-5apxck3d.js +97 -0
  20. package/dist/cli/chunk-5vrg6h71.js +3 -0
  21. package/dist/cli/chunk-5xpvd182.js +2 -0
  22. package/dist/cli/chunk-5yfffvqe.js +2 -0
  23. package/dist/cli/{chunk-gryq2vgw.js → chunk-5yh5trgy.js} +1 -1
  24. package/dist/cli/chunk-61cn88e7.js +15 -0
  25. package/dist/cli/{chunk-g9yba5vh.js → chunk-671ak750.js} +2 -2
  26. package/dist/cli/chunk-676f3tva.js +5 -0
  27. package/dist/cli/chunk-6hcyvg0m.js +3 -0
  28. package/dist/cli/chunk-6mg5zp8y.js +2 -0
  29. package/dist/cli/chunk-6q4br0pt.js +2 -0
  30. package/dist/cli/chunk-6wfhq8xd.js +4 -0
  31. package/dist/cli/{chunk-ypd337d0.js → chunk-748656h7.js} +3 -3
  32. package/dist/cli/chunk-7bakcyes.js +5 -0
  33. package/dist/cli/{chunk-hfdk7j28.js → chunk-7kgcy89w.js} +1 -1
  34. package/dist/cli/chunk-8qkyd589.js +5 -0
  35. package/dist/cli/chunk-9ckvdy0j.js +3 -0
  36. package/dist/cli/{chunk-egpcaxwb.js → chunk-9fdy8vne.js} +1 -1
  37. package/dist/cli/{chunk-h8t4xg1p.js → chunk-9rj2fx6v.js} +1 -1
  38. package/dist/cli/chunk-9x2xd1rz.js +2 -0
  39. package/dist/cli/{chunk-r77pfw4m.js → chunk-9zswhjkv.js} +1 -1
  40. package/dist/cli/{chunk-p6jw0zcd.js → chunk-agvtzads.js} +1 -1
  41. package/dist/cli/chunk-aq4j8ar4.js +2 -0
  42. package/dist/cli/{chunk-ecrw211n.js → chunk-aqwckba5.js} +1 -1
  43. package/dist/cli/{chunk-rzef6szc.js → chunk-atg13xab.js} +1 -1
  44. package/dist/cli/{chunk-ez438kn3.js → chunk-b95q6zhk.js} +1 -1
  45. package/dist/cli/chunk-bagwgxsg.js +2 -0
  46. package/dist/cli/{chunk-4hnz77xf.js → chunk-bcyex84w.js} +1 -1
  47. package/dist/cli/chunk-bv050ssb.js +8 -0
  48. package/dist/cli/chunk-bykqhbvy.js +2 -0
  49. package/dist/cli/{chunk-29s67j3k.js → chunk-ca4x8s96.js} +4 -4
  50. package/dist/cli/chunk-cakyme4s.js +2 -0
  51. package/dist/cli/{chunk-16ttm9x6.js → chunk-ccmke5sx.js} +1 -1
  52. package/dist/cli/chunk-cf3vpsm5.js +3 -0
  53. package/dist/cli/chunk-d552cvb2.js +2 -0
  54. package/dist/cli/{chunk-gcg5h667.js → chunk-dsdtq087.js} +1 -1
  55. package/dist/cli/{chunk-387ecqb8.js → chunk-e58kj4gm.js} +1 -1
  56. package/dist/cli/chunk-ee314raa.js +2 -0
  57. package/dist/cli/{chunk-0rrmz6k6.js → chunk-eege1x0a.js} +1 -1
  58. package/dist/cli/{chunk-m6yy3qc1.js → chunk-fgtc1xq9.js} +1 -1
  59. package/dist/cli/{chunk-5dd7trgf.js → chunk-fq2pefc5.js} +1 -1
  60. package/dist/cli/chunk-g4p5znv1.js +2 -0
  61. package/dist/cli/chunk-g9ba25q5.js +3 -0
  62. package/dist/cli/{chunk-qe7xb4rm.js → chunk-g9xknhjq.js} +2 -2
  63. package/dist/cli/chunk-gbd5j3dv.js +2 -0
  64. package/dist/cli/{chunk-ycd28edp.js → chunk-ggjmcqpt.js} +3 -4
  65. package/dist/cli/chunk-hv79ys32.js +1 -1
  66. package/dist/cli/chunk-hz1x3hak.js +3 -0
  67. package/dist/cli/{chunk-03rbg95q.js → chunk-hzz020xx.js} +5 -5
  68. package/dist/cli/chunk-j1qy79fd.js +3 -0
  69. package/dist/cli/chunk-j9tsdn1d.js +2 -0
  70. package/dist/cli/chunk-jejmt4k0.js +140 -0
  71. package/dist/cli/chunk-jj5f4n51.js +1 -1
  72. package/dist/cli/{chunk-nzbq51h9.js → chunk-k225696b.js} +1 -1
  73. package/dist/cli/{chunk-by6fjf7m.js → chunk-kag7cfbr.js} +1 -1
  74. package/dist/cli/{chunk-jwedmkm8.js → chunk-kdnk8m5j.js} +1 -1
  75. package/dist/cli/{chunk-yzkhwn31.js → chunk-kxp04jnp.js} +1 -1
  76. package/dist/cli/chunk-m4z6kepz.js +3 -0
  77. package/dist/cli/chunk-mdc7b01e.js +3 -0
  78. package/dist/cli/{chunk-bj6sa371.js → chunk-mjyhy152.js} +1 -1
  79. package/dist/cli/chunk-mqfvzdpr.js +3 -0
  80. package/dist/cli/chunk-mqvkd2g1.js +2 -0
  81. package/dist/cli/chunk-mvtqstte.js +4 -0
  82. package/dist/cli/{chunk-qs1r0tqr.js → chunk-mxx0y791.js} +1 -1
  83. package/dist/cli/{chunk-1rjq808h.js → chunk-n0rdn2fn.js} +1 -1
  84. package/dist/cli/{chunk-3v9s3bcz.js → chunk-n2zgej1a.js} +1 -1
  85. package/dist/cli/chunk-n94vzkbe.js +3 -0
  86. package/dist/cli/chunk-njncqdwf.js +2 -0
  87. package/dist/cli/{chunk-6jk2khme.js → chunk-nw092jak.js} +1 -1
  88. package/dist/cli/{chunk-22d4fjjb.js → chunk-pfagrkt6.js} +1 -1
  89. package/dist/cli/{chunk-sa48rtjz.js → chunk-pnrftncm.js} +1 -1
  90. package/dist/cli/{chunk-mxgtz5vz.js → chunk-pqr6td4z.js} +1 -1
  91. package/dist/cli/chunk-q8ffd1pc.js +3 -0
  92. package/dist/cli/{chunk-snqa07h6.js → chunk-qcjkactr.js} +1 -1
  93. package/dist/cli/{chunk-tjj9bt7n.js → chunk-qqr4tfhk.js} +1 -1
  94. package/dist/cli/chunk-qs359899.js +3 -0
  95. package/dist/cli/{chunk-sza3tyhs.js → chunk-qzzmd63x.js} +2 -3
  96. package/dist/cli/{chunk-xkmdxcjg.js → chunk-r2bb8b11.js} +1 -1
  97. package/dist/cli/{chunk-rtpa8hg3.js → chunk-rjfdzjhj.js} +1 -1
  98. package/dist/cli/chunk-rjy900p4.js +4 -0
  99. package/dist/cli/chunk-rmsdybs3.js +20 -0
  100. package/dist/cli/{chunk-y5axx6ev.js → chunk-rztqccs3.js} +1 -1
  101. package/dist/cli/chunk-s1308b3d.js +63 -0
  102. package/dist/cli/{chunk-b492aee1.js → chunk-se00fc8v.js} +1 -1
  103. package/dist/cli/chunk-shtm72c0.js +3 -0
  104. package/dist/cli/{chunk-dpq60qph.js → chunk-t9vjj8sy.js} +1 -1
  105. package/dist/cli/chunk-ta1p2nwa.js +6 -0
  106. package/dist/cli/chunk-teh40faw.js +1 -1
  107. package/dist/cli/{chunk-gqh6atvp.js → chunk-tjhw09bz.js} +1 -1
  108. package/dist/cli/chunk-tnatqcy7.js +2 -0
  109. package/dist/cli/chunk-tq0h3vy6.js +3 -0
  110. package/dist/cli/{chunk-9er68n24.js → chunk-tt58819p.js} +1 -1
  111. package/dist/cli/chunk-tw9tfs1d.js +3 -0
  112. package/dist/cli/chunk-v6dz59gy.js +2 -0
  113. package/dist/cli/chunk-v6v272b3.js +3 -0
  114. package/dist/cli/chunk-vkv1v3xn.js +56 -0
  115. package/dist/cli/chunk-vkz6kkmm.js +24 -0
  116. package/dist/cli/chunk-vp29jgbt.js +4 -0
  117. package/dist/cli/chunk-vpsarakj.js +2 -0
  118. package/dist/cli/{chunk-xbwq4bc0.js → chunk-vr2r2ncm.js} +1 -1
  119. package/dist/cli/{chunk-qvnr8c18.js → chunk-vvqwgcge.js} +1 -1
  120. package/dist/cli/{chunk-5gzpq34w.js → chunk-vwpf55cr.js} +3 -3
  121. package/dist/cli/{chunk-zaw71cf4.js → chunk-vytrhm50.js} +1 -1
  122. package/dist/cli/chunk-w77s2df8.js +3 -0
  123. package/dist/cli/{chunk-bexnp6g4.js → chunk-w7v71t7e.js} +1 -1
  124. package/dist/cli/chunk-wfgrn8p2.js +4 -0
  125. package/dist/cli/chunk-wzss4pzh.js +3 -0
  126. package/dist/cli/chunk-x1ghdmp1.js +2 -0
  127. package/dist/cli/chunk-x1jxxmtc.js +3 -0
  128. package/dist/cli/{chunk-edrxs4cy.js → chunk-x83xbzjd.js} +5 -5
  129. package/dist/cli/{chunk-9trbc3kj.js → chunk-x85rcep5.js} +2 -2
  130. package/dist/cli/{chunk-jd7p0y5x.js → chunk-x89zw7br.js} +1 -1
  131. package/dist/cli/chunk-xg42e2ff.js +19 -0
  132. package/dist/cli/{chunk-sbds7zx4.js → chunk-xte4phd1.js} +1 -1
  133. package/dist/cli/chunk-y8b2p44q.js +1 -1
  134. package/dist/cli/chunk-ys6v36ph.js +2 -0
  135. package/dist/cli/chunk-yzdrhytj.js +10 -0
  136. package/dist/cli/{chunk-39sfhppm.js → chunk-z3qz6enf.js} +1 -1
  137. package/dist/cli/chunk-z3wrbtcq.js +22 -0
  138. package/dist/cli/chunk-z43e08kw.js +4 -0
  139. package/dist/cli/{chunk-t34kjg5y.js → chunk-zpwvjt14.js} +7 -4
  140. package/dist/cli/chunk-zrf93zrx.js +2 -0
  141. package/dist/cli/index.js +9 -12
  142. package/dist/cli/pty-host-node.mjs +259 -32
  143. package/dist/cli/rove-run.js +1 -1
  144. package/dist/cli/rove.js +1 -1
  145. package/dist/completions/rove.bash +2 -2
  146. package/dist/completions/rove.fish +2 -2
  147. package/dist/completions/rove.zsh +2 -2
  148. package/dist/skills/rove/SKILL.md +25 -10
  149. package/dist/skills/rove/references/api-flags.md +30 -14
  150. package/dist/web/assets/index-BVQbpUea.css +1 -0
  151. package/dist/web/assets/index-Cn_7vMHX.js +152 -0
  152. package/dist/web/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  153. package/dist/web/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  154. package/dist/web/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff +0 -0
  155. package/dist/web/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
  156. package/dist/web/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  157. package/dist/web/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  158. package/dist/web/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
  159. package/dist/web/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff +0 -0
  160. package/dist/web/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  161. package/dist/web/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  162. package/dist/web/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
  163. package/dist/web/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  164. package/dist/web/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  165. package/dist/web/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  166. package/dist/web/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
  167. package/dist/web/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff +0 -0
  168. package/dist/web/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  169. package/dist/web/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff +0 -0
  170. package/dist/web/index.html +2 -2
  171. package/dist/web/relay/index.html +34 -0
  172. package/dist/web/sw.js +52 -0
  173. package/dist/web-ui/assets/{harness-pEyVtWV4.js → harness-C7ciHx2w.js} +2 -2
  174. package/dist/web-ui/assets/{index-Dyg-qcgB.js → index-B1FLht5L.js} +2 -2
  175. package/dist/web-ui/assets/{index-Bsn8NuKa.css → index-BDIkPexK.css} +1 -1
  176. package/dist/web-ui/index.html +2 -2
  177. package/package.json +3 -3
  178. package/dist/cli/chunk-033k4ap7.js +0 -2
  179. package/dist/cli/chunk-0g3sjn8z.js +0 -3
  180. package/dist/cli/chunk-0ppkvphp.js +0 -2
  181. package/dist/cli/chunk-11wyec8z.js +0 -2
  182. package/dist/cli/chunk-15fp4p9v.js +0 -15
  183. package/dist/cli/chunk-1exwrmjd.js +0 -3
  184. package/dist/cli/chunk-1ffqacz9.js +0 -3
  185. package/dist/cli/chunk-2v68zaaa.js +0 -2
  186. package/dist/cli/chunk-2y29zrm1.js +0 -2
  187. package/dist/cli/chunk-4d1v6066.js +0 -3
  188. package/dist/cli/chunk-4dxc29mm.js +0 -2
  189. package/dist/cli/chunk-5zsdjrgz.js +0 -4
  190. package/dist/cli/chunk-68wpp5y8.js +0 -20
  191. package/dist/cli/chunk-6h4qdckd.js +0 -3
  192. package/dist/cli/chunk-6jj82bej.js +0 -2
  193. package/dist/cli/chunk-783d1ba0.js +0 -3
  194. package/dist/cli/chunk-78v1q5mz.js +0 -2
  195. package/dist/cli/chunk-7z463zkx.js +0 -3
  196. package/dist/cli/chunk-97m9nyw7.js +0 -2
  197. package/dist/cli/chunk-9bae7f3m.js +0 -4
  198. package/dist/cli/chunk-b5c7p22a.js +0 -2
  199. package/dist/cli/chunk-b5pytfgm.js +0 -2
  200. package/dist/cli/chunk-b68dd36h.js +0 -3
  201. package/dist/cli/chunk-bbksmb5a.js +0 -3
  202. package/dist/cli/chunk-cpf78z3x.js +0 -4
  203. package/dist/cli/chunk-cyzp2btw.js +0 -63
  204. package/dist/cli/chunk-d9e4ssy7.js +0 -12
  205. package/dist/cli/chunk-e01321zn.js +0 -5
  206. package/dist/cli/chunk-ec7f3wcm.js +0 -3
  207. package/dist/cli/chunk-erx7x9xg.js +0 -97
  208. package/dist/cli/chunk-ewqqwtrj.js +0 -2
  209. package/dist/cli/chunk-fmbv4m3y.js +0 -25
  210. package/dist/cli/chunk-fs51wx31.js +0 -3
  211. package/dist/cli/chunk-fvvb0072.js +0 -3
  212. package/dist/cli/chunk-g263457v.js +0 -2
  213. package/dist/cli/chunk-g3tv8kht.js +0 -2
  214. package/dist/cli/chunk-g53yqr82.js +0 -78
  215. package/dist/cli/chunk-k67vbszb.js +0 -3
  216. package/dist/cli/chunk-kyt9ytz2.js +0 -20
  217. package/dist/cli/chunk-n2ejvjrd.js +0 -3
  218. package/dist/cli/chunk-p4s826r2.js +0 -96
  219. package/dist/cli/chunk-p6334e7v.js +0 -2
  220. package/dist/cli/chunk-q9zgj6kw.js +0 -3
  221. package/dist/cli/chunk-qfe1wf5c.js +0 -2
  222. package/dist/cli/chunk-r40aj7z6.js +0 -2
  223. package/dist/cli/chunk-sqxdfzdq.js +0 -5
  224. package/dist/cli/chunk-sz2xs0a2.js +0 -4
  225. package/dist/cli/chunk-t5y8k772.js +0 -2
  226. package/dist/cli/chunk-vht2e44j.js +0 -10
  227. package/dist/cli/chunk-vjp7drne.js +0 -2
  228. package/dist/cli/chunk-vm551pxs.js +0 -2
  229. package/dist/cli/chunk-w09356fj.js +0 -20
  230. package/dist/cli/chunk-w9cdc97q.js +0 -3
  231. package/dist/cli/chunk-x20bs6bs.js +0 -3
  232. package/dist/cli/chunk-xmqv1zx6.js +0 -2
  233. package/dist/cli/chunk-xn7bk4f9.js +0 -3
  234. package/dist/cli/chunk-zybjm7d5.js +0 -2
  235. package/dist/web/assets/index-C9vaSoIJ.js +0 -113
  236. package/dist/web/assets/index-sA2EEQJw.css +0 -1
@@ -1,12 +0,0 @@
1
- // @bun
2
- import{lookup}from"dns/promises";import{isIP}from"net";import{connect}from"tls";var PROBE_TIMEOUT_MS=3000,MAX_HEAD_BYTES=65536;function isLoopbackHost(host){let h=host.toLowerCase().replace(/^\[|\]$/g,"");if(h==="localhost"||h.endsWith(".localhost"))return!0;let kind=isIP(h);if(kind===4)return h.startsWith("127.")||h==="0.0.0.0";return kind===6&&(parseV6(h)?.every((g,i)=>g===(i===7?1:0))??!1)}function parseV4(ip){let parts=ip.split(".");if(parts.length!==4)return null;let octets=parts.map((p)=>/^\d{1,3}$/.test(p)?Number(p):Number.NaN);return octets.every((o)=>o>=0&&o<=255)?octets:null}function parseV6(raw){let ip=raw.split("%")[0]??"";if(isIP(ip)!==6)return null;let text=ip,lastColon=text.lastIndexOf(":");if(text.slice(lastColon+1).includes(".")){let v4=parseV4(text.slice(lastColon+1));if(!v4)return null;let group=(hi,lo)=>((hi??0)<<8|(lo??0)).toString(16);text=`${text.slice(0,lastColon+1)}${group(v4[0],v4[1])}:${group(v4[2],v4[3])}`}let[head="",rest]=text.split("::"),left=head===""?[]:head.split(":"),right=rest===void 0||rest===""?[]:rest.split(":"),fill=rest===void 0?0:8-left.length-right.length;if(fill<0||rest===void 0&&left.length!==8)return null;let groups=[...left,...Array(fill).fill("0"),...right].map((g)=>Number.parseInt(g,16));return groups.length===8&&groups.every((g)=>g>=0&&g<=65535)?groups:null}function refusedV4(o){let[a=0,b=0,c=0]=o;if(a===0)return"this-network address";if(a===10)return"private address";if(a===100&&b>=64&&b<=127)return"carrier-grade NAT address";if(a===127)return"loopback address";if(a===169&&b===254)return"link-local address";if(a===172&&b>=16&&b<=31)return"private address";if(a===192&&b===0&&c===0)return"reserved address";if(a===192&&b===168)return"private address";if(a===198&&(b===18||b===19))return"benchmarking address";if(a>=224)return"multicast or reserved address";return null}function refusedAddress(ip){let addr=ip.replace(/^\[|\]$/g,""),v4=parseV4(addr);if(v4)return refusedV4(v4);let g=parseV6(addr);if(!g)return"not an IP address";let embedded=(hi,lo)=>refusedV4([hi>>8,hi&255,lo>>8,lo&255]);if(g.slice(0,5).every((x)=>x===0)&&(g[5]===65535||g[5]===0)){if(g.slice(5).every((x)=>x===0))return"unspecified address";if(g[5]===0&&g[6]===0&&g[7]===1)return"loopback address";return embedded(g[6]??0,g[7]??0)??null}let first=g[0]??0;if((first&65024)===64512)return"unique-local address";if((first&65472)===65152)return"link-local address";if((first&65280)===65280)return"multicast address";if(first===8194)return embedded(g[1]??0,g[2]??0);if(first===100&&g[1]===65435)return embedded(g[6]??0,g[7]??0);if(first===8193&&g[1]===3512)return"documentation address";return null}function ancestorsAllow(sources,origin){let page=null;try{page=origin?new URL(origin):null}catch{page=null}return sources.some((raw)=>{let source=raw.toLowerCase();if(source==="*")return!0;if(!page)return!1;if(source===`${page.protocol}`)return!0;if(source.endsWith(":")||source.startsWith("'"))return!1;let candidate;try{candidate=new URL(source.includes("://")?source.replace("*.","wildcard."):`${page.protocol}//${source.replace("*.","wildcard.")}`)}catch{return!1}let wildcard=candidate.hostname.startsWith("wildcard."),host=wildcard?candidate.hostname.slice(9):candidate.hostname,hostOk=wildcard?page.hostname.endsWith(`.${host}`):page.hostname===host,portOk=source.endsWith(":*")||(candidate.port||defaultPort(candidate.protocol))===(page.port||defaultPort(page.protocol));return hostOk&&portOk&&candidate.protocol===page.protocol})}var defaultPort=(protocol)=>protocol==="https:"?"443":protocol==="http:"?"80":"";function parseFrameHeaders(headers,origin){for(let value of headers.xFrameOptions??[])for(let part of value.split(",")){let v=part.trim().toLowerCase();if(v==="deny"||v==="sameorigin")return{frameable:!1,reason:`X-Frame-Options: ${v.toUpperCase()}`}}for(let value of headers.csp??[])for(let policy of value.split(","))for(let directive of policy.split(";")){let[name,...sources]=directive.trim().split(/\s+/);if(name?.toLowerCase()!=="frame-ancestors")continue;if(!ancestorsAllow(sources,origin))return{frameable:!1,reason:`Content-Security-Policy: frame-ancestors ${sources.join(" ")}`.trim()}}return{frameable:!0}}function parseHead(text){let[statusLine="",...lines]=text.split(`\r
3
- `),status=Number(/^HTTP\/\d(?:\.\d)? (\d{3})/.exec(statusLine)?.[1]);if(!Number.isInteger(status))return null;let headers=new Map;for(let line of lines){let colon=line.indexOf(":");if(colon<=0)continue;let name=line.slice(0,colon).trim().toLowerCase();if(name!=="x-frame-options"&&name!=="content-security-policy"&&name!=="location")continue;headers.set(name,[...headers.get(name)??[],line.slice(colon+1).trim()])}return{status,headers}}var headOverTls=(target,signal)=>{let{promise,resolve,reject}=Promise.withResolvers(),socket=connect({host:target.ip,port:target.port,servername:target.host}),fail=(err)=>{socket.destroy(),reject(err)};signal.addEventListener("abort",()=>fail(Error("timed out")),{once:!0});let received="";return socket.on("secureConnect",()=>{socket.write(`HEAD ${target.path} HTTP/1.1\r
4
- Host: ${target.host}\r
5
- User-Agent: rove-frame-probe\r
6
- Accept: */*\r
7
- Connection: close\r
8
- \r
9
- `)}),socket.on("data",(chunk)=>{received+=chunk.toString("latin1");let end=received.indexOf(`\r
10
- \r
11
- `);if(end<0&&received.length<MAX_HEAD_BYTES)return;let parsed=parseHead(end<0?received:received.slice(0,end));if(socket.destroy(),parsed)resolve(parsed);else reject(Error("not an HTTP response"))}),socket.on("error",fail),socket.on("close",()=>fail(Error("closed before a response"))),promise},resolveAll=async(host)=>(await lookup(host,{all:!0})).map((a)=>a.address),unframeable=(reason,reachable,status)=>({reachable,frameable:!1,reason,...status!==void 0?{status}:{}});async function probeFrame(rawUrl,opts={}){let url;try{url=new URL(rawUrl)}catch{return unframeable("not a URL",!1)}if(url.protocol!=="https:")return unframeable("only https URLs are probed",!1);let host=url.hostname.replace(/^\[|\]$/g,""),deps={resolve:resolveAll,head:headOverTls,...opts.deps},abort=new AbortController,timer=setTimeout(()=>abort.abort(),PROBE_TIMEOUT_MS),deadline=Promise.withResolvers();deadline.promise.catch(()=>{}),abort.signal.addEventListener("abort",()=>deadline.reject(Error("timed out")),{once:!0});let timedOut=deadline.promise;try{let addresses=isIP(host)?[host]:await Promise.race([deps.resolve(host),timedOut]);if(addresses.length===0)return unframeable(`${host} did not resolve`,!1);for(let ip of addresses){let why=refusedAddress(ip);if(why)return unframeable(`refused: ${isIP(host)?host:`${host} resolves to ${ip}`} is a ${why}`,!1)}let port=url.port?Number(url.port):443,response=await Promise.race([deps.head({ip:addresses[0],host:url.host===url.hostname?host:url.host,port,path:`${url.pathname}${url.search}`||"/"},abort.signal),timedOut]),verdict=parseFrameHeaders({xFrameOptions:response.headers.get("x-frame-options")??[],csp:response.headers.get("content-security-policy")??[]},opts.origin),location=response.headers.get("location")?.[0],redirected=response.status>=300&&response.status<400&&location;return{reachable:!0,frameable:verdict.frameable,status:response.status,...verdict.reason?{reason:verdict.reason}:redirected?{reason:`redirects to ${location} (not followed)`}:{}}}catch(err){return unframeable(err instanceof Error?err.message:String(err),!1)}finally{clearTimeout(timer)}}async function checkFrame(rawUrl,opts={}){let url;try{url=new URL(rawUrl)}catch{return unframeable("not a URL",!1)}if(isLoopbackHost(url.hostname))return{reachable:!0,frameable:!0,reason:"localhost is not probed"};if(url.protocol==="http:")return{reachable:!0,frameable:!1,reason:"http is framed for localhost only; open the page in a tab"};return probeFrame(rawUrl,opts)}
12
- export{isLoopbackHost,checkFrame};
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{quoteShellArgv}from"./chunk-7kysxgbq.js";import{acquireWithRetry}from"./chunk-b68dd36h.js";import{isObject}from"./chunk-7ghwdjdc.js";import{acquireSync,release,releaseSync}from"./chunk-bejhca6z.js";import{roveStateDir}from"./chunk-z1nj22va.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import{fileURLToPath}from"url";function roveCliInvocation(){let cliName=ROVE_PRODUCT_NAME;if(import.meta.url.endsWith(".js"))return[cliName];let entry=fileURLToPath(new URL(`./${"rove.ts"}`,import.meta.url));return[process.execPath,"--conditions=browser",entry]}function roveHookInvocation(){if(import.meta.url.endsWith(".js"))return[ROVE_PRODUCT_NAME];if(Bun.which(ROVE_PRODUCT_NAME))return[ROVE_PRODUCT_NAME];return roveCliInvocation()}var ROVE_HOOK_VERSION=1;function roveHookArgs(vendor){return["--engine",vendor,"--hook-version",String(ROVE_HOOK_VERSION)]}var GATED_TOOL_VERBS=new Set(["tool-pre","tool-post","tool-failed"]);function parseHookSettings(raw){if(raw===void 0)return{ok:!0,doc:{}};let parsed;try{parsed=JSON.parse(raw)}catch(err){return{ok:!1,reason:`not valid JSON (${err instanceof Error?err.message:String(err)})`}}if(!isObject(parsed))return{ok:!1,reason:"top level is not a JSON object"};if(parsed.hooks===void 0)return{ok:!0,doc:parsed};if(!isObject(parsed.hooks))return{ok:!1,reason:'"hooks" is not an object'};for(let[event,groups]of Object.entries(parsed.hooks)){if(!Array.isArray(groups))return{ok:!1,reason:`"hooks.${event}" is not an array`};let bad=groups.findIndex((group)=>!isObject(group)||!Array.isArray(group.hooks));if(bad>=0)return{ok:!1,reason:`"hooks.${event}[${bad}]" is not an object with a "hooks" array`}}return{ok:!0,doc:parsed}}var HOOK_WORD=String.raw`(?:'(?:[^']|'\\'')*'|"[^"$\x60\\]*"|[A-Za-z0-9_./:=+-]+)`,HOOK_ARGV=new RegExp(`^${HOOK_WORD}(?:[ ]+${HOOK_WORD})*$`),ROVE_HOOK_FLAGS={"--engine":/^[a-z][a-z0-9-]*$/,"--hook-version":/^\d+$/};function isRoveHook(hook,verbs){if(!isObject(hook)||typeof hook.command!=="string")return!1;if(hook.type!==void 0&&hook.type!=="command")return!1;let command=hook.command.replace(/^[ \t]+|[ \t]+$/g,"");if(HOOK_ARGV.exec(command)?.[0]!==command)return!1;let argv=(command.match(new RegExp(HOOK_WORD,"g"))??[]).map((word)=>{if(word.startsWith("'"))return word.slice(1,-1).replaceAll("'\\''","'");if(word.startsWith('"'))return word.slice(1,-1);return word}),executable=argv[0]?.split("/").at(-1),offset=1;if(executable==="bun"||executable==="node"){if(argv[offset]==="--conditions=browser")offset++;let entry=argv[offset]??"";if(!/(?:^|\/)(?:src|dist)\/cli\/(?:rove|rove)\.(?:ts|js)$/.test(entry))return!1;offset++}else if(executable!=="rove"&&executable!=="rove")return!1;if(argv[offset]!=="hook"||!verbs.includes(argv[offset+1]))return!1;let rest=argv.slice(offset+2);for(let i=0;i<rest.length;i+=2){let value=rest[i+1],pattern=ROVE_HOOK_FLAGS[rest[i]??""];if(!pattern||value===void 0||!pattern.test(value))return!1}return!0}function removeRoveHooks(groups,verbs){return groups.flatMap((group)=>{if(!isObject(group)||!Array.isArray(group.hooks))return[group];let kept=group.hooks.filter((hook)=>!isRoveHook(hook,verbs));if(kept.length===group.hooks.length)return[group];return kept.length>0?[{...group,hooks:kept}]:[]})}function hasRoveActivityHooks(current,eventMap){let verbs=eventMap.map((spec)=>spec.verb),hooks=isObject(current.hooks)?current.hooks:{};return Object.values(hooks).some((groups)=>Array.isArray(groups)&&groups.some((group)=>isObject(group)&&Array.isArray(group.hooks)&&group.hooks.some((hook)=>isRoveHook(hook,verbs))))}function hookCommandQuoting(platform=process.platform){return{bareSafe:!0,windows:platform==="win32"}}function buildActivityHooks(eventMap,inv=roveHookInvocation(),opts={}){let out={},quoting=hookCommandQuoting();for(let spec of eventMap){if(opts.buildFilter&&!opts.buildFilter(spec))continue;let{event,matcher,verb}=spec,group={hooks:[{type:"command",command:quoteShellArgv([...inv,"hook",verb,...opts.extraArgs??[]],quoting)}]};if(matcher)group.matcher=matcher;let previous=out[event],groups=Array.isArray(previous)?previous:[];groups.push(group),out[event]=groups}return out}function mergeActivityHooks(current,install,eventMap,inv=roveHookInvocation(),opts={}){let verbs=eventMap.map((spec)=>spec.verb),{hooks:rawHooks,...restSettings}=current,hooks=isObject(rawHooks)?{...rawHooks}:{},built=install?buildActivityHooks(eventMap,inv,opts):{};for(let{event}of eventMap){let groups=hooks[event],prior=Array.isArray(groups)?groups:[],kept=removeRoveHooks(prior,verbs),additions=built[event];if(install&&Array.isArray(additions))kept.push(...additions);if(kept.length>0)hooks[event]=kept;else delete hooks[event]}return Object.keys(hooks).length>0?{...restSettings,hooks}:{...restSettings}}var RETIRED_WATCH_EVENT="PostToolUse";function removeWorktreeWatchHook(current){let{hooks:rawHooks,...restSettings}=current,hooks=isObject(rawHooks)?{...rawHooks}:{},groups=hooks[RETIRED_WATCH_EVENT],prior=Array.isArray(groups)?groups:[],kept=removeRoveHooks(prior,["worktree-created"]);if(kept.length>0)hooks[RETIRED_WATCH_EVENT]=kept;else delete hooks[RETIRED_WATCH_EVENT];return Object.keys(hooks).length>0?{...restSettings,hooks}:{...restSettings}}import{constants,closeSync,fstatSync,openSync,readSync}from"fs";import{open}from"fs/promises";var MAX_ENGINE_FILE_BYTES=104857600,MAX_JSONL_LINE_CHARS=8388608,READ_CHUNK_BYTES=65536,READ_FLAGS=constants.O_RDONLY|constants.O_NONBLOCK;async function readTextFileIfRegular(p,maxBytes=MAX_ENGINE_FILE_BYTES){let file=await open(p,READ_FLAGS);try{let info=await file.stat();if(!info.isFile()||info.size>maxBytes)return null;let chunks=[],total=0;while(total<=maxBytes){let buffer=Buffer.allocUnsafe(Math.min(READ_CHUNK_BYTES,maxBytes+1-total)),{bytesRead}=await file.read(buffer);if(bytesRead===0)return Buffer.concat(chunks,total).toString("utf8");chunks.push(buffer.subarray(0,bytesRead)),total+=bytesRead}return null}finally{await file.close()}}async function readTextFileBounded(p,maxBytes=MAX_ENGINE_FILE_BYTES){return await readTextFileIfRegular(p,maxBytes)??""}async function readFirstLineBounded(p,maxBytes=MAX_JSONL_LINE_CHARS){let file=await open(p,READ_FLAGS);try{if(!(await file.stat()).isFile())return"";let chunks=[],total=0,start=0,nonblank=!1;while(total<=maxBytes){let buffer=Buffer.allocUnsafe(Math.min(16384,maxBytes+1-total)),{bytesRead}=await file.read(buffer);if(!bytesRead)return Buffer.concat(chunks,total).subarray(start).toString("utf8");chunks.push(buffer.subarray(0,bytesRead));let segment=0;for(let i=0;i<bytesRead;i++){if(buffer[i]!==10)continue;nonblank||=buffer.subarray(segment,i).toString("utf8").trim().length>0;let end=total+i;if(end>maxBytes)return"";if(nonblank)return Buffer.concat(chunks,total+bytesRead).subarray(start,end).toString("utf8");start=end+1,segment=i+1}nonblank||=buffer.subarray(segment,bytesRead).toString("utf8").trim().length>0,total+=bytesRead}return""}finally{await file.close()}}function readTextFileSyncBounded(p,maxBytes=MAX_ENGINE_FILE_BYTES){try{return readTextFileIfRegularSync(p,maxBytes)}catch(err){if(err instanceof Error&&"code"in err&&err.code==="ENOENT")return null;throw err}}function readTextFileIfRegularSync(p,maxBytes=MAX_ENGINE_FILE_BYTES){let fd=openSync(p,READ_FLAGS);try{let info=fstatSync(fd);if(!info.isFile()||info.size>maxBytes)return null;let chunks=[],total=0;while(total<=maxBytes){let buffer=Buffer.allocUnsafe(Math.min(READ_CHUNK_BYTES,maxBytes+1-total)),bytesRead=readSync(fd,buffer);if(!bytesRead)return Buffer.concat(chunks,total).toString("utf8");chunks.push(buffer.subarray(0,bytesRead)),total+=bytesRead}return null}finally{closeSync(fd)}}function isJsonlLineWithinBound(line,maxChars=MAX_JSONL_LINE_CHARS){return line.length<=maxChars}import{createHash,randomBytes}from"crypto";import{mkdirSync,renameSync,unlinkSync,writeFileSync}from"fs";import{mkdir,rename,unlink,writeFile}from"fs/promises";import{dirname,join}from"path";var MAX_SHARED_CONFIG_BYTES=8388608;function stagingPath(file){return`${file}.rove-${process.pid}-${randomBytes(6).toString("hex")}.tmp`}function sharedConfigLockPath(file){return join(roveStateDir(),`shared-config-${createHash("sha256").update(file).digest("hex").slice(0,16)}.lock`)}var MAX_ATTEMPTS=5;function readSharedConfigSync(file){try{let raw=readTextFileIfRegularSync(file,MAX_SHARED_CONFIG_BYTES);if(raw===null)throw Error(`Refusing non-regular or oversized config: ${file}`);return raw}catch(err){if(err instanceof Error&&"code"in err&&err.code==="ENOENT")return;throw err}}async function readRaw(file){try{let raw=await readTextFileIfRegular(file,MAX_SHARED_CONFIG_BYTES);if(raw===null)throw Error(`Refusing non-regular or oversized config: ${file}`);return raw}catch(err){if(err instanceof Error&&"code"in err&&err.code==="ENOENT")return;throw err}}function updateSharedJsonSync(file,load,build){let lockPath=sharedConfigLockPath(file),lockToken=acquireSync(lockPath);try{for(let attempt=0;attempt<MAX_ATTEMPTS;attempt++){let before=readSharedConfigSync(file),doc=load(before);if(!doc)return;let text=build(doc);if(text===void 0)return;let tmp=stagingPath(file);try{if(mkdirSync(dirname(file),{recursive:!0}),writeFileSync(tmp,text,{mode:384,flag:"wx"}),readSharedConfigSync(file)===before){renameSync(tmp,file);return}}finally{try{unlinkSync(tmp)}catch{}}}throw Error(`gave up updating ${file} after ${MAX_ATTEMPTS} concurrent writes`)}finally{releaseSync(lockPath,lockToken)}}async function updateSharedJson(file,load,build){let lockPath=sharedConfigLockPath(file),lockToken=await acquireWithRetry(lockPath);try{for(let attempt=0;attempt<MAX_ATTEMPTS;attempt++){let before=await readRaw(file),doc=load(before);if(!doc)return;let text=build(doc);if(text===void 0)return;let tmp=stagingPath(file);try{if(await mkdir(dirname(file),{recursive:!0}),await writeFile(tmp,text,{mode:384,flag:"wx"}),await readRaw(file)===before){await rename(tmp,file);return}}finally{await unlink(tmp).catch(()=>{})}}throw Error(`gave up updating ${file} after ${MAX_ATTEMPTS} concurrent writes`)}finally{await release(lockPath,lockToken)}}async function editJsonSettings(settingsFilePath,transform,parse=parseHookSettings){let rejected;try{await updateSharedJson(settingsFilePath,(raw)=>{let parsed=parse(raw);if(parsed.ok)return parsed.doc;rejected=parsed.reason;return},(current)=>{let next=transform(current),json=JSON.stringify(next,null,2);return json===JSON.stringify(current,null,2)?void 0:`${json}
3
- `})}catch(err){return{ok:!1,file:settingsFilePath,reason:err instanceof Error?err.message:String(err)}}if(rejected!==void 0)return{ok:!1,file:settingsFilePath,reason:rejected};return{ok:!0}}class JsonHookAdapter{supportsHooks(){return!0}activityDetailFromPayload(_kind,_payload){return}sessionFromPayload(_payload){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(_settingsFilePath){}gatedVerbs(){return GATED_TOOL_VERBS}async installActivityHooks(settingsFilePath,opts={}){let gated=this.gatedVerbs(),outcome=await editJsonSettings(settingsFilePath,(cur)=>mergeActivityHooks(cur,!0,this.eventMap,void 0,{extraArgs:roveHookArgs(this.vendor),buildFilter:(spec)=>opts.toolEvents===!0||!gated.has(spec.verb)}));if(!outcome.ok&&!opts.quiet)process.stderr.write(`[rove hooks] ${this.vendor}: skipped ${outcome.file}: ${outcome.reason}
4
- `);return outcome}async removeActivityHooks(settingsFilePath){await editJsonSettings(settingsFilePath,(cur)=>mergeActivityHooks(cur,!1,this.eventMap))}async removeWorktreeWatchHook(settingsFilePath){await editJsonSettings(settingsFilePath,removeWorktreeWatchHook)}hookConfigRefusal(raw){let parsed=parseHookSettings(raw);return parsed.ok?void 0:parsed.reason}}import{homedir}from"os";import path from"path";var VENDOR_HOMES={claude:{envVar:"CLAUDE_CONFIG_DIR",dirName:".claude"},codex:{envVar:"CODEX_HOME",dirName:".codex"},copilot:{envVar:"COPILOT_HOME",dirName:".copilot"},kimi:{envVar:"KIMI_CODE_HOME",dirName:".kimi-code"}},AGENT_DIR_VENDORS={pi:{envVar:"PI_CODING_AGENT_DIR",dirName:".pi"},omp:{envVar:"PI_CODING_AGENT_DIR",dirName:".omp"}},defaultVendorHomeDeps={env:(name)=>process.env[name],home:()=>homedir()};function vendorWriteHomeDeps(home){return home===void 0?defaultVendorHomeDeps:{env:()=>{return},home:()=>home}}function vendorConfigHome(vendor,deps=defaultVendorHomeDeps){let{envVar,dirName}=VENDOR_HOMES[vendor],override=deps.env(envVar)?.trim();if(override)return override;return path.join(deps.home(),dirName)}function vendorAgentDir(vendor,deps=defaultVendorHomeDeps){let{envVar,dirName}=AGENT_DIR_VENDORS[vendor],override=deps.env(envVar)?.trim();if(override)return override;return path.join(deps.home(),dirName,"agent")}function depsOf(env,home){return{env,home:()=>home}}function claudeGlobalConfigPath(env,home){let override=env("CLAUDE_CONFIG_DIR")?.trim();if(override)return path.join(override,".claude.json");return path.join(home,".claude.json")}function codexAuthPath(env,home){return path.join(vendorConfigHome("codex",depsOf(env,home)),"auth.json")}function copilotConfigPath(env,home){return path.join(vendorConfigHome("copilot",depsOf(env,home)),"config.json")}function bobHome(home=homedir()){return path.join(home,".bob")}function bobTrustPath(home){return path.join(bobHome(home),"trustedFolders.json")}function bobDbPath(home){return path.join(bobHome(home),"db","bob.db")}function bobAuthSecretsPath(home){return path.join(bobHome(home),"settings","auth-secrets.json")}function kimiCredentialsPath(env,home){return path.join(vendorConfigHome("kimi",depsOf(env,home)),"credentials","kimi-code.json")}
5
- export{roveCliInvocation,roveHookInvocation,ROVE_HOOK_VERSION,roveHookArgs,GATED_TOOL_VERBS,isRoveHook,removeRoveHooks,hasRoveActivityHooks,hookCommandQuoting,readTextFileIfRegular,readTextFileBounded,readFirstLineBounded,readTextFileSyncBounded,isJsonlLineWithinBound,readSharedConfigSync,updateSharedJsonSync,updateSharedJson,editJsonSettings,JsonHookAdapter,vendorWriteHomeDeps,vendorConfigHome,vendorAgentDir,claudeGlobalConfigPath,codexAuthPath,copilotConfigPath,bobTrustPath,bobDbPath,bobAuthSecretsPath,kimiCredentialsPath};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{pathSyntax}from"./chunk-pn5ygqn6.js";function childrenOf(tasks,id){return tasks.filter((task)=>task.parentTaskId===id)}function workspaceOwnerId(task){return task.sharesWorkspaceOf??task.id}function isSharedChild(task){return task.sharesWorkspaceOf!==void 0}function lineageRootId(tasks,id){let byId=new Map(tasks.map((task)=>[task.id,task])),seen=new Set,current=id;for(;;){seen.add(current);let up=byId.get(current)?.parentTaskId;if(!up||seen.has(up)||!byId.has(up))return current;current=up}}function subtreeIds(tasks,id){let out=[],seen=new Set,visit=(current)=>{if(seen.has(current))return;seen.add(current);for(let child of childrenOf(tasks,current))visit(child.id);out.push(current)};return visit(id),out}function taskCwd(task){let root=task.worktreePath??"";if(!root||!task.cwdSubpath)return root;return pathSyntax(root).join(root,task.cwdSubpath)}var MULTI_REPO_CAP=8,REPO_NAME_RE=/^[A-Za-z0-9_][A-Za-z0-9._-]*$/;function repoNameOf(repoPath){return pathSyntax(repoPath).basename(repoPath).replace(/[^A-Za-z0-9._-]/g,"-").replace(/^[.-]+/,"")||"repo"}function uniqueRepoName(name,taken){if(!taken.has(name))return name;for(let n=2;;n++)if(!taken.has(`${name}-${n}`))return`${name}-${n}`}function taskRepos(task,tasks){let extras=(task.sharesWorkspaceOf&&tasks?.find((t)=>t.id===task.sharesWorkspaceOf)||task).extraRepos??[];return[{name:uniqueRepoName(repoNameOf(task.repo),new Set(extras.map((e)=>e.name))),repo:task.repo,branch:task.branch,worktreePath:task.worktreePath??"",...task.baseRef?{baseRef:task.baseRef}:{},...task.prStatus?{prStatus:task.prStatus}:{},primary:!0},...extras.map((e)=>({name:e.name,repo:e.repo,branch:e.branch,worktreePath:e.worktreePath,...e.baseRef?{baseRef:e.baseRef}:{},...e.prStatus?{prStatus:e.prStatus}:{},primary:!1}))]}function taskWorktreePaths(task,tasks){return taskRepos(task,tasks).map((r)=>r.worktreePath).filter((p)=>p.length>0)}function prRank(pr){if(pr.checkState==="failing")return 0;if(pr.checkState==="pending")return 1;return pr.lifecycle==="merged"?3:2}function rollupPr(task){let worst;for(let pr of[task.prStatus,...(task.extraRepos??[]).map((e)=>e.prStatus)])if(pr&&(!worst||prRank(pr)<prRank(worst)))worst=pr;return worst}function pickRepos(task,only){let all=taskRepos(task);if(!only)return all;let picked=all.filter((r)=>r.name===only);if(picked.length===0)throw Error(`UNKNOWN_REPO: no repo named '${only}' in this task (repos: ${all.map((r)=>r.name).join(", ")})`);return picked}var SESSION_PR_CAP=20,GITHUB_PR_URL=/^https?:\/\/(?:www\.)?github\.com\/([\w.-]+)\/([\w.-]+)\/pull\/(\d+)(?:[/?#].*)?$/i;function canonicalPrUrl(input){let m=GITHUB_PR_URL.exec(input.trim());if(!m)return;let[,owner,repo,number]=m;return`https://github.com/${owner}/${repo}/pull/${Number(number)}`}
3
- export{SESSION_PR_CAP,canonicalPrUrl,childrenOf,workspaceOwnerId,isSharedChild,lineageRootId,subtreeIds,taskCwd,MULTI_REPO_CAP,REPO_NAME_RE,repoNameOf,uniqueRepoName,taskRepos,taskWorktreePaths,rollupPr,pickRepos};