claude-code-best 1.0.3 → 1.2.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 (522) hide show
  1. package/README.md +104 -369
  2. package/dist/{chunk-5wxspfct.js → chunk-01qzvbp3.js} +8 -2
  3. package/dist/chunk-053bj0m0.js +247 -0
  4. package/dist/chunk-05tt9tt1.js +653 -0
  5. package/dist/chunk-06sq1vz3.js +403 -0
  6. package/dist/chunk-07069jq1.js +30 -0
  7. package/dist/chunk-0dac8msw.js +135 -0
  8. package/dist/{chunk-52n4py3b.js → chunk-0ja0y3at.js} +6 -6
  9. package/dist/chunk-0jzdwbdc.js +14 -0
  10. package/dist/chunk-0nrq46nf.js +313 -0
  11. package/dist/chunk-0qz705wz.js +192 -0
  12. package/dist/{chunk-by7ezad6.js → chunk-0rn4v8sg.js} +42 -28
  13. package/dist/{chunk-1cbn5kxf.js → chunk-0rpb2bdp.js} +3 -2
  14. package/dist/{chunk-zz21rvr7.js → chunk-127cmycn.js} +8 -5
  15. package/dist/chunk-12vk6z7z.js +109 -0
  16. package/dist/chunk-15y014gg.js +102 -0
  17. package/dist/{chunk-44fpr6jq.js → chunk-168xb8v1.js} +4 -2
  18. package/dist/{chunk-8fmbf525.js → chunk-16bnxyz0.js} +1 -1
  19. package/dist/{chunk-wsqhnjj3.js → chunk-1atfzck5.js} +24 -24
  20. package/dist/chunk-1cbhkqxg.js +310 -0
  21. package/dist/chunk-1csq8bf1.js +295 -0
  22. package/dist/{chunk-0e1xsncc.js → chunk-1cwdhk7a.js} +1 -1
  23. package/dist/{chunk-36k3f7pn.js → chunk-1ebqpwhn.js} +79 -59
  24. package/dist/{chunk-ap2a2er6.js → chunk-1mh5vt6v.js} +102 -80
  25. package/dist/chunk-1qf125vg.js +123 -0
  26. package/dist/{chunk-fcz5eche.js → chunk-1sp6713v.js} +139 -170
  27. package/dist/{chunk-d18z9pna.js → chunk-1thgdca1.js} +2 -2
  28. package/dist/chunk-1z1gfx2c.js +443 -0
  29. package/dist/{chunk-7z8j9qfn.js → chunk-21z7acxh.js} +3 -3
  30. package/dist/chunk-229pcf6p.js +509 -0
  31. package/dist/chunk-238g70xa.js +1 -1
  32. package/dist/{chunk-vpb723tx.js → chunk-23ad5t92.js} +5 -5
  33. package/dist/chunk-28043j1k.js +68 -0
  34. package/dist/chunk-299r6d9v.js +141 -0
  35. package/dist/{chunk-5r3ak65p.js → chunk-2bw5nqsw.js} +4 -4
  36. package/dist/chunk-2mxstrx5.js +445 -0
  37. package/dist/{chunk-w2z5pqd3.js → chunk-2q39ej51.js} +6 -6
  38. package/dist/chunk-2qwgfjcj.js +5370 -0
  39. package/dist/chunk-2ss23j0q.js +3587 -0
  40. package/dist/{chunk-k9c3888e.js → chunk-2wvxddsg.js} +9 -7
  41. package/dist/chunk-2x2aznpc.js +134 -0
  42. package/dist/{chunk-bqq4zamw.js → chunk-2ys5wcxk.js} +3 -3
  43. package/dist/{chunk-2kbk09sb.js → chunk-3cvcwgsr.js} +79 -59
  44. package/dist/{chunk-rs45skes.js → chunk-3xv7rjsy.js} +15 -11
  45. package/dist/chunk-42x5tjk2.js +42 -0
  46. package/dist/{chunk-n78qmqpq.js → chunk-436r0x2n.js} +8 -8
  47. package/dist/{chunk-k3vpzx3c.js → chunk-44q4jkwa.js} +27 -67
  48. package/dist/{chunk-qnbdekts.js → chunk-44w22kyx.js} +111 -132
  49. package/dist/{chunk-7m2nd8da.js → chunk-46fcr28b.js} +31 -10
  50. package/dist/{chunk-wm2f2f1z.js → chunk-474y75ga.js} +2 -2
  51. package/dist/{chunk-6fkwz9yk.js → chunk-478rpnqm.js} +8 -8
  52. package/dist/chunk-48w0df8a.js +32 -0
  53. package/dist/chunk-4cp6193g.js +9076 -0
  54. package/dist/chunk-4d0de73v.js +436 -0
  55. package/dist/chunk-4eecm90d.js +1030 -0
  56. package/dist/{chunk-jfv3zczw.js → chunk-4f4ccg1h.js} +10 -115
  57. package/dist/chunk-4h102wt5.js +65 -0
  58. package/dist/{chunk-6n2qgm9v.js → chunk-4hv90qcz.js} +1 -1
  59. package/dist/{chunk-4gj6zzg1.js → chunk-4jcqmf9w.js} +43 -29
  60. package/dist/{chunk-067wa5sn.js → chunk-4kk7vxed.js} +8 -6
  61. package/dist/chunk-4nspekjp.js +69 -0
  62. package/dist/chunk-4xmb7bvy.js +125 -0
  63. package/dist/{chunk-nrp9yaq6.js → chunk-4xy0c1dz.js} +16 -12
  64. package/dist/{chunk-77g09znh.js → chunk-53c9gb9c.js} +23 -16
  65. package/dist/{chunk-03nqtgyr.js → chunk-53zsn91p.js} +42 -30
  66. package/dist/{chunk-gkrx7ptx.js → chunk-548g1d6z.js} +113 -114
  67. package/dist/chunk-559yvwh1.js +63 -0
  68. package/dist/chunk-5a6ahhvy.js +594 -0
  69. package/dist/{chunk-h2j4t3fk.js → chunk-5c6man70.js} +9692 -17630
  70. package/dist/chunk-5hb5ev7b.js +74 -0
  71. package/dist/{chunk-hx2tr4ep.js → chunk-5z28bqne.js} +34 -475
  72. package/dist/{chunk-p7g7pf3f.js → chunk-61ahbn23.js} +8 -6
  73. package/dist/chunk-64c1avct.js +13 -0
  74. package/dist/{chunk-0sb5scxx.js → chunk-652wnf1z.js} +5 -5
  75. package/dist/{chunk-1w361mz1.js → chunk-66jkaz3q.js} +109 -213
  76. package/dist/{chunk-q25bjaev.js → chunk-677as3nh.js} +2 -2
  77. package/dist/chunk-68ksfahx.js +386 -0
  78. package/dist/{chunk-xs0hwvpa.js → chunk-68pfxvxt.js} +14 -9
  79. package/dist/{chunk-epmheefa.js → chunk-69hys77v.js} +8 -8
  80. package/dist/{chunk-404wc7d4.js → chunk-6ayqcq3h.js} +126 -119
  81. package/dist/chunk-6kpbgc5w.js +23 -0
  82. package/dist/chunk-6mpsxxsf.js +362 -0
  83. package/dist/chunk-6nze0g86.js +119 -0
  84. package/dist/{chunk-v1mgv1et.js → chunk-6p4cyhb3.js} +4 -3
  85. package/dist/{chunk-w2qfgzzh.js → chunk-6t62dbnb.js} +61 -100
  86. package/dist/chunk-6t87a3q6.js +2842 -0
  87. package/dist/{chunk-q6av622g.js → chunk-6xana182.js} +18 -13
  88. package/dist/{chunk-fpf4cgbt.js → chunk-7bfach0x.js} +9 -9
  89. package/dist/{chunk-g6e1ab2k.js → chunk-7f1ggjr2.js} +81 -61
  90. package/dist/chunk-7fxjmmfw.js +1172 -0
  91. package/dist/{chunk-ckcagq32.js → chunk-7gqf9wej.js} +5 -5
  92. package/dist/chunk-7j3dkjqq.js +38 -0
  93. package/dist/chunk-7ns74x0q.js +475 -0
  94. package/dist/chunk-7qmknpkq.js +272 -0
  95. package/dist/chunk-7rzepn9c.js +83 -0
  96. package/dist/chunk-7tdcwje9.js +68 -0
  97. package/dist/{chunk-201dvaa3.js → chunk-8201tnhf.js} +11 -5
  98. package/dist/{chunk-dv1wfr85.js → chunk-8225arm6.js} +5 -4
  99. package/dist/chunk-822wfv88.js +70 -0
  100. package/dist/chunk-837tm8ht.js +183 -0
  101. package/dist/chunk-8a2ajt5d.js +878 -0
  102. package/dist/{chunk-drv8qvwz.js → chunk-8bymxfn4.js} +43 -29
  103. package/dist/chunk-8cwbzk7h.js +118 -0
  104. package/dist/chunk-8d0ev0m2.js +111 -0
  105. package/dist/chunk-8g5pe1gr.js +37 -0
  106. package/dist/{chunk-g0j0t6qk.js → chunk-8g747a8x.js} +1 -1
  107. package/dist/chunk-8kfwb79z.js +436 -0
  108. package/dist/{chunk-xyqr1cww.js → chunk-8me0yq6v.js} +12 -12
  109. package/dist/{chunk-qdrwxg3e.js → chunk-8n8285ax.js} +91 -71
  110. package/dist/{chunk-sdj9b9wh.js → chunk-8pn8tvgg.js} +9 -154
  111. package/dist/{chunk-ha0xq3e9.js → chunk-8qhr4n77.js} +64 -106
  112. package/dist/{chunk-fpjzr5jj.js → chunk-8s9bbk3r.js} +62 -45
  113. package/dist/{chunk-e3g8q4cn.js → chunk-905d2hee.js} +10 -8
  114. package/dist/{chunk-3psth3ez.js → chunk-91xq5y4a.js} +9 -9
  115. package/dist/{chunk-rq1kckze.js → chunk-93xsyzsp.js} +1 -1
  116. package/dist/chunk-99pmbfqp.js +230 -0
  117. package/dist/chunk-9f14bkn9.js +33068 -0
  118. package/dist/{chunk-ex978bsn.js → chunk-9m78gjpd.js} +1 -1
  119. package/dist/{chunk-hpwa620w.js → chunk-9pm2d2gv.js} +251 -306
  120. package/dist/chunk-a136cvvz.js +27 -0
  121. package/dist/{chunk-n5t9m8h9.js → chunk-a1bjde7d.js} +7 -7
  122. package/dist/chunk-a2evk7n1.js +168 -0
  123. package/dist/{chunk-6heqkcjx.js → chunk-a3k4w4cm.js} +42 -28
  124. package/dist/chunk-a3mcc1sb.js +1403 -0
  125. package/dist/{chunk-8hq5kk3y.js → chunk-a4twdmhf.js} +3 -2
  126. package/dist/chunk-a8eaey19.js +66 -0
  127. package/dist/chunk-abkb5pw6.js +426 -0
  128. package/dist/chunk-ae76ded0.js +30 -0
  129. package/dist/{chunk-2v1br2x0.js → chunk-agx5w9ce.js} +14 -8
  130. package/dist/chunk-ah46h8rp.js +70 -0
  131. package/dist/chunk-aj3azy6z.js +409 -0
  132. package/dist/chunk-an6z4rzv.js +158 -0
  133. package/dist/{chunk-r6b58y3x.js → chunk-ase86y73.js} +1 -3
  134. package/dist/{chunk-e6s36z54.js → chunk-avfjb6pd.js} +17 -557
  135. package/dist/{chunk-1hhdpn3t.js → chunk-az5x70pn.js} +8 -5
  136. package/dist/{chunk-91gk0g2y.js → chunk-b6rg3egp.js} +33 -18
  137. package/dist/chunk-b73r6ngr.js +125 -0
  138. package/dist/{chunk-8bedvdm1.js → chunk-b81hd3m6.js} +1 -1
  139. package/dist/{chunk-ebfsjcvm.js → chunk-b9mhpc0v.js} +3 -3
  140. package/dist/chunk-b9ndqcdv.js +139 -0
  141. package/dist/{chunk-w7wgpqcp.js → chunk-bd8zk9tn.js} +7 -7
  142. package/dist/chunk-bdy6n17s.js +343 -0
  143. package/dist/{chunk-s8y2tfzf.js → chunk-bf1j3azq.js} +156 -119
  144. package/dist/{chunk-j5j6nrfq.js → chunk-bfcet2mw.js} +2 -2
  145. package/dist/{chunk-jy35mvy3.js → chunk-bmjmrk76.js} +7 -7
  146. package/dist/{chunk-ra0r65nx.js → chunk-bsj8e2mb.js} +11 -11
  147. package/dist/{chunk-jce5r25x.js → chunk-bt64sq5y.js} +5 -4
  148. package/dist/{chunk-vyc0rjyx.js → chunk-bwg7582d.js} +1 -1
  149. package/dist/{chunk-3be7ka25.js → chunk-bxcfz5gy.js} +1 -1
  150. package/dist/{chunk-7wm1rjfm.js → chunk-c1k9tg7h.js} +518 -810
  151. package/dist/{chunk-qwvrkydc.js → chunk-c5pxerks.js} +13 -11
  152. package/dist/chunk-c6sjhj89.js +1284 -0
  153. package/dist/{chunk-brcnd1j0.js → chunk-c9q0phsg.js} +9 -6
  154. package/dist/chunk-caj0ab74.js +129 -0
  155. package/dist/chunk-chsyvavm.js +3435 -0
  156. package/dist/chunk-cjpt035a.js +269 -0
  157. package/dist/chunk-cmcbatgz.js +147 -0
  158. package/dist/chunk-cnsj3vq2.js +35 -0
  159. package/dist/chunk-cqjmxeqv.js +269 -0
  160. package/dist/{chunk-cdz5yb0r.js → chunk-crmjpsqe.js} +13 -2
  161. package/dist/{chunk-2mcp388c.js → chunk-cvb1v08x.js} +38 -32
  162. package/dist/{chunk-w0r5627q.js → chunk-cxhvyf7c.js} +234 -363
  163. package/dist/{chunk-s0wvh65m.js → chunk-cxx0e4nv.js} +1343 -2839
  164. package/dist/chunk-cy2hswr1.js +15 -0
  165. package/dist/{chunk-g9q2cznf.js → chunk-cy6ezb6j.js} +125994 -138958
  166. package/dist/{chunk-ks0m9njy.js → chunk-d2jekryq.js} +8 -8
  167. package/dist/chunk-d4mdda98.js +94 -0
  168. package/dist/{chunk-hgtf13es.js → chunk-d6ve5pze.js} +10 -10
  169. package/dist/{chunk-55wgxwa9.js → chunk-d7886r6a.js} +6928 -6935
  170. package/dist/{chunk-4bgz02m1.js → chunk-d83tmb5h.js} +87 -64
  171. package/dist/{chunk-hdwh7ncw.js → chunk-d8meetqc.js} +84 -63
  172. package/dist/{chunk-128nh5j9.js → chunk-d8r0q4ps.js} +547 -866
  173. package/dist/chunk-d95k8xkm.js +84 -0
  174. package/dist/chunk-dd4m7t1v.js +112 -0
  175. package/dist/{chunk-rcdpvnxh.js → chunk-dekbr08w.js} +24 -20
  176. package/dist/{chunk-cvge4pvp.js → chunk-dk8287aa.js} +1 -1
  177. package/dist/chunk-dm3n2qgd.js +24 -0
  178. package/dist/{chunk-b0105v1f.js → chunk-dmxte86x.js} +3 -3
  179. package/dist/{chunk-zkmxtgc3.js → chunk-dqvwn28p.js} +19 -15
  180. package/dist/chunk-drkm8yx2.js +34 -0
  181. package/dist/chunk-dsbewdgm.js +148 -0
  182. package/dist/{chunk-w7h2yphx.js → chunk-dwekpr47.js} +2 -2
  183. package/dist/{chunk-hg776v69.js → chunk-e3299veq.js} +16 -68
  184. package/dist/{chunk-wqpr7002.js → chunk-e5hcyxae.js} +132 -18
  185. package/dist/chunk-e7h0nd5w.js +106 -0
  186. package/dist/{chunk-7qwme3ab.js → chunk-eaemyebz.js} +5 -5
  187. package/dist/{chunk-hjhc4cpt.js → chunk-edzkkadh.js} +2 -2
  188. package/dist/chunk-em99fnet.js +128 -0
  189. package/dist/{chunk-hfzj1m07.js → chunk-epyaq1z0.js} +13 -4
  190. package/dist/{chunk-r8f13sz1.js → chunk-eqmkajs4.js} +102 -195
  191. package/dist/{chunk-gax0fcbx.js → chunk-ergam9ft.js} +5 -5
  192. package/dist/chunk-es2fdse0.js +63 -0
  193. package/dist/{chunk-grdvmq7q.js → chunk-esn3tgm2.js} +8 -6
  194. package/dist/{chunk-ptmcaxqn.js → chunk-et8ybmt2.js} +9 -7
  195. package/dist/chunk-ew9rp41b.js +300 -0
  196. package/dist/{chunk-dvfb4qwt.js → chunk-ewx6xfzb.js} +2 -2
  197. package/dist/chunk-eyjtbtt0.js +137 -0
  198. package/dist/chunk-f0jd2p9n.js +797 -0
  199. package/dist/{chunk-vzqrbsd1.js → chunk-f69rgsm2.js} +5 -5
  200. package/dist/{chunk-45kxdsp8.js → chunk-f6rbj3gz.js} +17 -12
  201. package/dist/chunk-fbhyqxdg.js +1182 -0
  202. package/dist/chunk-feyzykye.js +10 -0
  203. package/dist/chunk-ffhejx56.js +107 -0
  204. package/dist/{chunk-cpe70sxw.js → chunk-fhx6nt2a.js} +42 -28
  205. package/dist/chunk-fkkysfev.js +158 -0
  206. package/dist/chunk-fn510gqw.js +216 -0
  207. package/dist/chunk-ftsg8bjm.js +117 -0
  208. package/dist/{chunk-s39js2d3.js → chunk-fyts9grb.js} +2 -2
  209. package/dist/{chunk-bjqw6798.js → chunk-fz0ch109.js} +6 -5
  210. package/dist/{chunk-q1e6pzwh.js → chunk-g1jarkx9.js} +38 -8
  211. package/dist/chunk-g9f19ttm.js +15 -0
  212. package/dist/chunk-g9qte35t.js +341 -0
  213. package/dist/chunk-gaav53dc.js +105 -0
  214. package/dist/chunk-gfx3cwrk.js +75 -0
  215. package/dist/chunk-gk2d1x2a.js +946 -0
  216. package/dist/chunk-gkbat1p9.js +121 -0
  217. package/dist/{chunk-cg43nnpk.js → chunk-gmnyk2t8.js} +8 -6
  218. package/dist/{chunk-m23b51r2.js → chunk-gnmdprq3.js} +191 -338
  219. package/dist/{chunk-bq6x1ehp.js → chunk-gpz0ddyz.js} +8 -8
  220. package/dist/{chunk-yt6z8030.js → chunk-gv1csnc3.js} +217 -355
  221. package/dist/{chunk-nx6nds18.js → chunk-gv37c8ax.js} +3 -3
  222. package/dist/{chunk-h6c8cms4.js → chunk-gzr2601k.js} +10 -10
  223. package/dist/{chunk-2tkt52mz.js → chunk-h3pda469.js} +37 -82
  224. package/dist/{chunk-qqfa0dqg.js → chunk-h4b85amj.js} +20 -32
  225. package/dist/chunk-h5zv78zq.js +352 -0
  226. package/dist/{chunk-2x3gmbws.js → chunk-h7edytkc.js} +5 -5
  227. package/dist/{chunk-as261f01.js → chunk-ha0wbzc3.js} +13 -11
  228. package/dist/{chunk-nxsh6de2.js → chunk-hcgkak1j.js} +20 -125
  229. package/dist/{chunk-tjaqa99q.js → chunk-hezj20qy.js} +3 -3
  230. package/dist/{chunk-7ahman84.js → chunk-hf85ht0m.js} +2 -2
  231. package/dist/{chunk-w0hx9v3y.js → chunk-ht1nfygk.js} +42 -28
  232. package/dist/chunk-j316jjby.js +108 -0
  233. package/dist/chunk-j3fge71v.js +115 -0
  234. package/dist/{chunk-v4h5psgs.js → chunk-j4x0t6k2.js} +46 -31
  235. package/dist/{chunk-9gbamk79.js → chunk-j5bth84e.js} +5 -1
  236. package/dist/chunk-j783d5af.js +134 -0
  237. package/dist/chunk-j7pbwf9x.js +108 -0
  238. package/dist/{chunk-rf2w4x97.js → chunk-j8rnrm5n.js} +120 -142
  239. package/dist/{chunk-vratq94g.js → chunk-j9gxwbe3.js} +1 -1
  240. package/dist/{chunk-3r24h7t6.js → chunk-jaaxk89e.js} +1 -1
  241. package/dist/{chunk-y47cg3kz.js → chunk-jaew3662.js} +18 -13
  242. package/dist/{chunk-q1txr206.js → chunk-jbbj16w2.js} +128 -185
  243. package/dist/chunk-jerew25v.js +148 -0
  244. package/dist/{chunk-v399mzxk.js → chunk-jf0p00fz.js} +2 -2
  245. package/dist/{chunk-97r68x5g.js → chunk-jfsah2w3.js} +1065 -1762
  246. package/dist/{chunk-av73dywf.js → chunk-jna2tcvj.js} +8 -8
  247. package/dist/{chunk-yym1e1dr.js → chunk-jng0mb4r.js} +10 -10
  248. package/dist/chunk-jrrmwfp4.js +66 -0
  249. package/dist/{chunk-0rc2rn3b.js → chunk-jt6fa514.js} +14 -12
  250. package/dist/chunk-jvkyx1b7.js +911 -0
  251. package/dist/{chunk-41xeh3t9.js → chunk-jy6c07wa.js} +4 -4
  252. package/dist/chunk-k1fvb16y.js +269 -0
  253. package/dist/{chunk-bqfnp99q.js → chunk-k3s4yk22.js} +1 -1
  254. package/dist/{chunk-madfgr3n.js → chunk-k46gxg21.js} +68 -8
  255. package/dist/chunk-k8wwyz2t.js +110 -0
  256. package/dist/{chunk-mnx3wyv4.js → chunk-ka3fdfyb.js} +83 -62
  257. package/dist/{chunk-k5c8ssc6.js → chunk-ka4x7mhn.js} +42 -28
  258. package/dist/chunk-kb99zpps.js +216 -0
  259. package/dist/{chunk-1dyeexvn.js → chunk-kd3mmsd2.js} +4 -4
  260. package/dist/{chunk-1xkekb9y.js → chunk-kfd89dsd.js} +5 -3
  261. package/dist/{chunk-g7fxbqsc.js → chunk-km1wcchx.js} +87 -68
  262. package/dist/{chunk-248szg6m.js → chunk-kmhwx18d.js} +3 -3
  263. package/dist/{chunk-pabnr66n.js → chunk-kq91dwkq.js} +8 -6
  264. package/dist/chunk-m17m84b7.js +111 -0
  265. package/dist/chunk-m1a0s9fd.js +1070 -0
  266. package/dist/{chunk-jafes477.js → chunk-m2bcpk8j.js} +4 -3
  267. package/dist/{chunk-t0brxw87.js → chunk-m7jtn7dk.js} +80 -60
  268. package/dist/chunk-mq2mgyt9.js +103 -0
  269. package/dist/chunk-msv3w4qp.js +1811 -0
  270. package/dist/chunk-mx28h61f.js +1147 -0
  271. package/dist/{chunk-wf7yz2j0.js → chunk-mxe1f4jg.js} +13 -11
  272. package/dist/{chunk-n5crdyay.js → chunk-mzwjvfr2.js} +137 -124
  273. package/dist/{chunk-gf96dtb6.js → chunk-n2n0sq7r.js} +71 -77
  274. package/dist/{chunk-m06q12hg.js → chunk-n8mpqdje.js} +1 -1
  275. package/dist/chunk-n9e984ba.js +132 -0
  276. package/dist/chunk-netzwgv1.js +154 -0
  277. package/dist/{chunk-xszk7n10.js → chunk-nh3cd07f.js} +1 -1
  278. package/dist/chunk-njrz6mbe.js +66 -0
  279. package/dist/{chunk-sb2sew2f.js → chunk-nv7pfr7k.js} +2 -2
  280. package/dist/{chunk-g9xf7jc4.js → chunk-nwd8pb55.js} +85 -65
  281. package/dist/{chunk-5hva0tsg.js → chunk-p2yv7m0g.js} +6 -6
  282. package/dist/chunk-p5t2vy90.js +259 -0
  283. package/dist/{chunk-zk2wsm7d.js → chunk-p7vkh4wx.js} +2 -2
  284. package/dist/{chunk-da4ve9t5.js → chunk-p8crqj70.js} +10 -10
  285. package/dist/{chunk-02y0y853.js → chunk-pcngtzr8.js} +12 -6
  286. package/dist/{chunk-3vpqaqc6.js → chunk-pdjem6h1.js} +53 -71
  287. package/dist/{chunk-7rgwp44r.js → chunk-pmxdzjq0.js} +11 -9
  288. package/dist/{chunk-3s5r02ps.js → chunk-pnkcecq2.js} +31 -57
  289. package/dist/{chunk-zsfxha74.js → chunk-pshjyzq4.js} +8 -7
  290. package/dist/chunk-pt1yj9zf.js +107 -0
  291. package/dist/{chunk-rxwb7b78.js → chunk-py6b9d5b.js} +2331 -4219
  292. package/dist/chunk-q7n8d91g.js +67 -0
  293. package/dist/{chunk-e5pntxye.js → chunk-q7tpyeb3.js} +6 -4
  294. package/dist/{chunk-7ymfj7m3.js → chunk-q82r31er.js} +1 -1
  295. package/dist/chunk-qajrkk97.js +298 -0
  296. package/dist/chunk-qbrh24cn.js +119 -0
  297. package/dist/chunk-qd9ntz7c.js +230 -0
  298. package/dist/chunk-qfr5tcd5.js +2537 -0
  299. package/dist/chunk-qpzfmkct.js +456 -0
  300. package/dist/{chunk-ywxd4qw4.js → chunk-qtfc6wdh.js} +2 -5
  301. package/dist/chunk-r032587e.js +83 -0
  302. package/dist/chunk-r2k2jy0y.js +51 -0
  303. package/dist/{chunk-8mqwac85.js → chunk-r4dnnggx.js} +22 -16
  304. package/dist/{chunk-5wnn3t3a.js → chunk-r5n8fvw0.js} +7 -7
  305. package/dist/{chunk-pxvatg16.js → chunk-r7kh03er.js} +231 -190
  306. package/dist/{chunk-z4wtem3z.js → chunk-rfs0mfg8.js} +147 -151
  307. package/dist/{chunk-hrzerbfw.js → chunk-rgbbtszq.js} +14 -14
  308. package/dist/{chunk-ctw5jwcd.js → chunk-rkak3kjw.js} +10 -10
  309. package/dist/chunk-rp568bfw.js +111 -0
  310. package/dist/chunk-rtv718sv.js +146 -0
  311. package/dist/{chunk-8d5eyjse.js → chunk-rvkvehat.js} +5284 -3093
  312. package/dist/chunk-s1baskk7.js +14 -0
  313. package/dist/{chunk-tse7q7k1.js → chunk-s1eb67v3.js} +79 -59
  314. package/dist/{chunk-7rn4t7tx.js → chunk-s59kx26r.js} +87 -64
  315. package/dist/chunk-s6yk6m3b.js +109 -0
  316. package/dist/{chunk-bsk44136.js → chunk-sca71yv8.js} +11 -9
  317. package/dist/chunk-sfrwm87k.js +151 -0
  318. package/dist/chunk-sgaknx21.js +123 -0
  319. package/dist/{chunk-4y62603j.js → chunk-snyaz093.js} +9 -15
  320. package/dist/{chunk-ytg914ra.js → chunk-sq8wkk3z.js} +1 -3
  321. package/dist/chunk-sxqj7s2h.js +54 -0
  322. package/dist/chunk-t2m6cjp1.js +264 -0
  323. package/dist/chunk-t6hmvb6k.js +1021 -0
  324. package/dist/chunk-t72x960a.js +125 -0
  325. package/dist/chunk-t9kashay.js +440 -0
  326. package/dist/chunk-t9wzf009.js +151 -0
  327. package/dist/chunk-ta1dgyj1.js +154 -0
  328. package/dist/chunk-tavxhayf.js +149 -0
  329. package/dist/{chunk-2tw2ve8h.js → chunk-tcdv4gp8.js} +18 -12
  330. package/dist/chunk-td3b74vm.js +362 -0
  331. package/dist/{chunk-mt25echc.js → chunk-tezak8rx.js} +1 -1
  332. package/dist/chunk-tgcw0rzx.js +262 -0
  333. package/dist/{chunk-9rcbyag3.js → chunk-tmdbrszg.js} +2 -2
  334. package/dist/{chunk-avwewk4v.js → chunk-v17qee2y.js} +12 -8
  335. package/dist/{chunk-njtjmsx7.js → chunk-v1jd31dw.js} +2 -2
  336. package/dist/chunk-var1et7e.js +66 -0
  337. package/dist/{chunk-j5zq8axt.js → chunk-ve9wswz4.js} +7 -131
  338. package/dist/{chunk-hqmz36b3.js → chunk-vf612n57.js} +21 -101
  339. package/dist/chunk-vfhabc5j.js +109 -0
  340. package/dist/{chunk-wszmas1q.js → chunk-vgy0w6tt.js} +2 -2
  341. package/dist/chunk-vh02fvz1.js +375 -0
  342. package/dist/{chunk-jz6sqm8m.js → chunk-vm935era.js} +1083 -881
  343. package/dist/{chunk-e7393td6.js → chunk-vtb8z6as.js} +14 -9
  344. package/dist/chunk-w2kf9sxn.js +115 -0
  345. package/dist/chunk-w7trx259.js +132 -0
  346. package/dist/chunk-w92b262y.js +1072 -0
  347. package/dist/chunk-w9zqjhvm.js +103 -0
  348. package/dist/{chunk-0he1tqj5.js → chunk-wb2fvy1k.js} +81 -61
  349. package/dist/chunk-ws2d81aj.js +123 -0
  350. package/dist/{chunk-k808gmhk.js → chunk-wssgdcck.js} +2 -2
  351. package/dist/{chunk-t9z6njcr.js → chunk-wtycm8km.js} +9 -9
  352. package/dist/chunk-wz0d8mna.js +108 -0
  353. package/dist/chunk-x01wtn3p.js +144 -0
  354. package/dist/{chunk-ze747xz6.js → chunk-x2sp7rcv.js} +73 -105
  355. package/dist/{chunk-7vtykt4v.js → chunk-xbprynsc.js} +18 -46
  356. package/dist/{chunk-p196v9d0.js → chunk-xext3y2y.js} +8 -6
  357. package/dist/{chunk-r66hz8j6.js → chunk-xycy3c8q.js} +15 -12
  358. package/dist/{chunk-npv8q5qr.js → chunk-y01ys1vm.js} +25 -74
  359. package/dist/{chunk-spqaamnc.js → chunk-y78t50v0.js} +2 -2
  360. package/dist/chunk-y9bgt2k1.js +78 -0
  361. package/dist/{chunk-j8rw3m89.js → chunk-ydm0nfsv.js} +6 -6
  362. package/dist/{chunk-3cn070p7.js → chunk-yetebjek.js} +291 -502
  363. package/dist/chunk-ym5r3jnk.js +2007 -0
  364. package/dist/chunk-ysks0ewj.js +237 -0
  365. package/dist/chunk-yv3evkgg.js +68 -0
  366. package/dist/chunk-yw79dz62.js +164 -0
  367. package/dist/{chunk-ea18z8vr.js → chunk-yy59gvs4.js} +159 -183
  368. package/dist/{chunk-def1dc97.js → chunk-yyax4hdg.js} +10 -8
  369. package/dist/chunk-yzx3mhfd.js +110 -0
  370. package/dist/chunk-z0q85m5f.js +108 -0
  371. package/dist/chunk-z1bs6d7k.js +24 -0
  372. package/dist/chunk-z6e5jp2w.js +119 -0
  373. package/dist/chunk-z7ssqvt6.js +6886 -0
  374. package/dist/chunk-z95yxwyb.js +61 -0
  375. package/dist/{chunk-5a3cw988.js → chunk-z9aqj026.js} +5 -5
  376. package/dist/chunk-zc6dxhk9.js +169 -0
  377. package/dist/{chunk-2t3vw4tx.js → chunk-ze6zvkg6.js} +10 -10
  378. package/dist/{chunk-t0rgmccj.js → chunk-zejm280k.js} +1 -1
  379. package/dist/chunk-zfapazzd.js +37 -0
  380. package/dist/chunk-zj4fqmnc.js +219 -0
  381. package/dist/chunk-zkrpbswn.js +1608 -0
  382. package/dist/chunk-zktbb38m.js +112 -0
  383. package/dist/{chunk-2mcrd0rj.js → chunk-zptcqa7t.js} +92 -71
  384. package/dist/{chunk-a3csma98.js → chunk-zvnsjbt8.js} +1 -1
  385. package/dist/chunk-zwaanw8y.js +110 -0
  386. package/dist/{chunk-g3t0act8.js → chunk-zzm33q8x.js} +1 -1
  387. package/dist/{chunk-3gqdqmzb.js → chunk-zzzc1ead.js} +17 -12
  388. package/dist/cli.js +39 -10
  389. package/dist/download-ripgrep.js +24821 -0
  390. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  391. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  392. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  393. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  394. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  395. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  396. package/package.json +25 -15
  397. package/scripts/download-ripgrep.ts +335 -0
  398. package/scripts/postinstall.cjs +319 -0
  399. package/dist/chunk-07ysf2mw.js +0 -184
  400. package/dist/chunk-0ewgfms5.js +0 -117
  401. package/dist/chunk-165b9y9k.js +0 -70
  402. package/dist/chunk-17g3drrw.js +0 -121
  403. package/dist/chunk-1jv1ckhg.js +0 -1152
  404. package/dist/chunk-1pxd1xfp.js +0 -103
  405. package/dist/chunk-1tzexy7d.js +0 -258
  406. package/dist/chunk-271zt54b.js +0 -1871
  407. package/dist/chunk-2a27tvzp.js +0 -281
  408. package/dist/chunk-2g1zxpt7.js +0 -2833
  409. package/dist/chunk-2jb48txn.js +0 -98
  410. package/dist/chunk-2kc13eta.js +0 -88
  411. package/dist/chunk-2tme3s1c.js +0 -114
  412. package/dist/chunk-4491abz9.js +0 -99
  413. package/dist/chunk-4dfmgx6h.js +0 -69
  414. package/dist/chunk-4fbyr2hm.js +0 -279
  415. package/dist/chunk-5dsvtbwb.js +0 -87
  416. package/dist/chunk-5t59fqg3.js +0 -127
  417. package/dist/chunk-60nc5bh3.js +0 -1579
  418. package/dist/chunk-6dcq96a3.js +0 -128
  419. package/dist/chunk-6tm5941a.js +0 -152
  420. package/dist/chunk-79zmgkg5.js +0 -750
  421. package/dist/chunk-7d35rxr3.js +0 -69
  422. package/dist/chunk-7enxknwt.js +0 -442
  423. package/dist/chunk-7j0wpf4m.js +0 -89
  424. package/dist/chunk-7q6pjeyp.js +0 -1493
  425. package/dist/chunk-7whgbwhx.js +0 -584
  426. package/dist/chunk-9egdc8n4.js +0 -463
  427. package/dist/chunk-9rr0wepz.js +0 -56
  428. package/dist/chunk-ajp7hmws.js +0 -422
  429. package/dist/chunk-bm1qb16p.js +0 -17
  430. package/dist/chunk-bmvzacx5.js +0 -998
  431. package/dist/chunk-bw093kge.js +0 -129
  432. package/dist/chunk-c4q9x8t2.js +0 -105
  433. package/dist/chunk-c6421kme.js +0 -54
  434. package/dist/chunk-cdajcgne.js +0 -195
  435. package/dist/chunk-ch8avrbh.js +0 -86
  436. package/dist/chunk-chkyv40s.js +0 -2642
  437. package/dist/chunk-d049dd11.js +0 -348
  438. package/dist/chunk-d7tw94h4.js +0 -114
  439. package/dist/chunk-daeav7vb.js +0 -418
  440. package/dist/chunk-dxnv8hfn.js +0 -536
  441. package/dist/chunk-dy3tzxgq.js +0 -91
  442. package/dist/chunk-exy9bnjf.js +0 -212
  443. package/dist/chunk-f1f3dmd5.js +0 -713
  444. package/dist/chunk-f7yg1atj.js +0 -47
  445. package/dist/chunk-fakajzny.js +0 -372
  446. package/dist/chunk-ftrm87vt.js +0 -467
  447. package/dist/chunk-ftsp0cj3.js +0 -105
  448. package/dist/chunk-fv7hhcns.js +0 -345
  449. package/dist/chunk-fvcwxb8x.js +0 -83
  450. package/dist/chunk-g00hs992.js +0 -90
  451. package/dist/chunk-g5fpkpeg.js +0 -520
  452. package/dist/chunk-g9qyg278.js +0 -88
  453. package/dist/chunk-gkjdjqfs.js +0 -112
  454. package/dist/chunk-gqk545se.js +0 -6107
  455. package/dist/chunk-gyj242zr.js +0 -20
  456. package/dist/chunk-gzmjp1eb.js +0 -696
  457. package/dist/chunk-hbh17tng.js +0 -1013
  458. package/dist/chunk-hdfzyzk4.js +0 -85
  459. package/dist/chunk-hdtb5jce.js +0 -101
  460. package/dist/chunk-j99mjxam.js +0 -220
  461. package/dist/chunk-jaqg0k7h.js +0 -271
  462. package/dist/chunk-jdew773m.js +0 -115
  463. package/dist/chunk-jjsx6t78.js +0 -169
  464. package/dist/chunk-jpr8js4w.js +0 -328
  465. package/dist/chunk-jx817w05.js +0 -11
  466. package/dist/chunk-k0g3jve7.js +0 -89
  467. package/dist/chunk-k1g3g183.js +0 -128
  468. package/dist/chunk-k1p54aq6.js +0 -54
  469. package/dist/chunk-kexj9c6y.js +0 -5398
  470. package/dist/chunk-kgg1gq3t.js +0 -113
  471. package/dist/chunk-kwkrek4t.js +0 -95
  472. package/dist/chunk-m4gcjpj3.js +0 -103
  473. package/dist/chunk-m6rk1r6q.js +0 -194
  474. package/dist/chunk-mb2xmb0d.js +0 -53
  475. package/dist/chunk-mv1pbf3a.js +0 -297
  476. package/dist/chunk-my7r0cca.js +0 -469
  477. package/dist/chunk-nprycdaa.js +0 -525
  478. package/dist/chunk-p2pztr2r.js +0 -104
  479. package/dist/chunk-p68nf56z.js +0 -92
  480. package/dist/chunk-p6pc9xrz.js +0 -3443
  481. package/dist/chunk-p7skftb4.js +0 -108
  482. package/dist/chunk-pa2235xc.js +0 -160
  483. package/dist/chunk-pmzbyaat.js +0 -99
  484. package/dist/chunk-pqzk7nbh.js +0 -91
  485. package/dist/chunk-pvvew193.js +0 -802
  486. package/dist/chunk-pvx0x5zm.js +0 -2057
  487. package/dist/chunk-py77warv.js +0 -66
  488. package/dist/chunk-q43gccx5.js +0 -92
  489. package/dist/chunk-rse6x10x.js +0 -89
  490. package/dist/chunk-rxdhy7ve.js +0 -131
  491. package/dist/chunk-scb48p4v.js +0 -496
  492. package/dist/chunk-sjqtqj35.js +0 -28
  493. package/dist/chunk-sq0wf7jj.js +0 -1919
  494. package/dist/chunk-sy1hkkty.js +0 -400
  495. package/dist/chunk-sy9jf9v2.js +0 -109
  496. package/dist/chunk-t2km9bn3.js +0 -87
  497. package/dist/chunk-t4afbt2j.js +0 -88
  498. package/dist/chunk-t4c5qtdc.js +0 -42
  499. package/dist/chunk-t94jxd0x.js +0 -100
  500. package/dist/chunk-tb2g2bba.js +0 -192
  501. package/dist/chunk-tdpvdzbf.js +0 -97
  502. package/dist/chunk-tf4dw2e2.js +0 -142
  503. package/dist/chunk-tp40437d.js +0 -90
  504. package/dist/chunk-vabm7x8v.js +0 -61
  505. package/dist/chunk-veaq13qy.js +0 -490
  506. package/dist/chunk-vmz3wcnv.js +0 -641
  507. package/dist/chunk-vsgv16zj.js +0 -756
  508. package/dist/chunk-vxa0avb0.js +0 -105
  509. package/dist/chunk-x14dq3v1.js +0 -722
  510. package/dist/chunk-x6bg700t.js +0 -88
  511. package/dist/chunk-x8b7vft8.js +0 -132
  512. package/dist/chunk-xmdcxa8r.js +0 -374
  513. package/dist/chunk-y42a2xmv.js +0 -1316
  514. package/dist/chunk-y56ckcf8.js +0 -44
  515. package/dist/chunk-ybgghjqa.js +0 -602
  516. package/dist/chunk-zacq47b2.js +0 -84
  517. package/dist/chunk-zv3hxg5y.js +0 -267
  518. package/dist/chunk-zw2x3xxq.js +0 -96
  519. package/dist/chunk-zyf9epwn.js +0 -642
  520. package/dist/{chunk-whvdag1y.js → chunk-3bfs3x0h.js} +9 -9
  521. package/dist/{chunk-27xc1csx.js → chunk-dggvswz1.js} +3 -3
  522. package/dist/{chunk-0wftg29n.js → chunk-f9nt10jh.js} +3 -3
@@ -0,0 +1,1608 @@
1
+ // @bun
2
+ import {
3
+ createCapacityWake
4
+ } from "./chunk-ae76ded0.js";
5
+ import {
6
+ getPollIntervalConfig
7
+ } from "./chunk-es2fdse0.js";
8
+ import {
9
+ buildCCRv2SdkUrl,
10
+ buildSdkUrl,
11
+ decodeWorkSecret,
12
+ registerWorker,
13
+ sameSessionId
14
+ } from "./chunk-4h102wt5.js";
15
+ import {
16
+ createTokenRefreshScheduler
17
+ } from "./chunk-ta1dgyj1.js";
18
+ import {
19
+ init_server
20
+ } from "./chunk-jdgeec04.js";
21
+ import {
22
+ BRIDGE_LOGIN_ERROR,
23
+ BridgeFatalError,
24
+ DEFAULT_SESSION_TIMEOUT_MS,
25
+ createAgentWorktree,
26
+ createBridgeApiClient,
27
+ getRemoteSessionUrl,
28
+ init_bridgeApi,
29
+ init_bridgeStatusUtil,
30
+ init_product,
31
+ init_types4 as init_types,
32
+ init_worktree,
33
+ isExpiredErrorType,
34
+ isSuppressible403,
35
+ removeAgentWorktree,
36
+ validateBridgeId
37
+ } from "./chunk-cy6ezb6j.js";
38
+ import"./chunk-zejm280k.js";
39
+ import {
40
+ init_rcDebugLog,
41
+ rcLog
42
+ } from "./chunk-g1jarkx9.js";
43
+ import {
44
+ getTrustedDeviceToken,
45
+ init_trustedDevice
46
+ } from "./chunk-yyax4hdg.js";
47
+ import"./chunk-4nspekjp.js";
48
+ import"./chunk-kmhwx18d.js";
49
+ import"./chunk-var1et7e.js";
50
+ import"./chunk-2gzv8nrw.js";
51
+ import"./chunk-ehtwnxpg.js";
52
+ import"./chunk-dmxte86x.js";
53
+ import"./chunk-d6ve5pze.js";
54
+ import"./chunk-bxcfz5gy.js";
55
+ import"./chunk-dekbr08w.js";
56
+ import"./chunk-f6rbj3gz.js";
57
+ import"./chunk-9f14bkn9.js";
58
+ import"./chunk-cgfdkzhb.js";
59
+ import"./chunk-k46gxg21.js";
60
+ import"./chunk-j5bth84e.js";
61
+ import"./chunk-8qhr4n77.js";
62
+ import"./chunk-az5x70pn.js";
63
+ import {
64
+ debugTruncate,
65
+ describeAxiosError,
66
+ init_debugUtils,
67
+ init_sessionIdCompat,
68
+ toCompatSessionId
69
+ } from "./chunk-epyaq1z0.js";
70
+ import"./chunk-0jzdwbdc.js";
71
+ import"./chunk-ps49ymvj.js";
72
+ import"./chunk-p7vkh4wx.js";
73
+ import"./chunk-cmcbatgz.js";
74
+ import"./chunk-agx5w9ce.js";
75
+ import"./chunk-48w0df8a.js";
76
+ import"./chunk-y78t50v0.js";
77
+ import"./chunk-4jm600zv.js";
78
+ import"./chunk-n8mpqdje.js";
79
+ import"./chunk-dqvwn28p.js";
80
+ import"./chunk-esn3tgm2.js";
81
+ import"./chunk-mx28h61f.js";
82
+ import"./chunk-dsbewdgm.js";
83
+ import"./chunk-sxqj7s2h.js";
84
+ import {
85
+ init_datadog
86
+ } from "./chunk-8201tnhf.js";
87
+ import"./chunk-2qwgfjcj.js";
88
+ import"./chunk-chsyvavm.js";
89
+ import"./chunk-w92b262y.js";
90
+ import {
91
+ getClaudeAIOAuthTokens,
92
+ init_auth,
93
+ init_figures,
94
+ init_firstPartyEventLogger,
95
+ init_growthbook
96
+ } from "./chunk-c1k9tg7h.js";
97
+ import"./chunk-905d2hee.js";
98
+ import"./chunk-rkak3kjw.js";
99
+ import"./chunk-p2yv7m0g.js";
100
+ import"./chunk-1cwdhk7a.js";
101
+ import"./chunk-j9gxwbe3.js";
102
+ import"./chunk-64c1avct.js";
103
+ import"./chunk-6kpbgc5w.js";
104
+ import {
105
+ init_sleep,
106
+ sleep
107
+ } from "./chunk-8g5pe1gr.js";
108
+ import"./chunk-hezj20qy.js";
109
+ import"./chunk-4cp6193g.js";
110
+ import"./chunk-8g747a8x.js";
111
+ import"./chunk-d7886r6a.js";
112
+ import"./chunk-f5ma3nh5.js";
113
+ import"./chunk-qz2x630m.js";
114
+ import"./chunk-dk8287aa.js";
115
+ import"./chunk-r2k2jy0y.js";
116
+ import"./chunk-3c25bcsw.js";
117
+ import {
118
+ init_bundledMode,
119
+ isInBundledMode
120
+ } from "./chunk-2q39ej51.js";
121
+ import"./chunk-q82r31er.js";
122
+ import"./chunk-p2816w9z.js";
123
+ import"./chunk-v9smspw2.js";
124
+ import"./chunk-v1kzp02e.js";
125
+ import {
126
+ formatDuration,
127
+ init_format,
128
+ truncateToWidth
129
+ } from "./chunk-qpzfmkct.js";
130
+ import"./chunk-crmjpsqe.js";
131
+ import {
132
+ init_src
133
+ } from "./chunk-rvkvehat.js";
134
+ import"./chunk-g338npwr.js";
135
+ import {
136
+ init_analytics,
137
+ logEvent
138
+ } from "./chunk-h0rbjg6x.js";
139
+ import"./chunk-0vkfrmqm.js";
140
+ import"./chunk-0xjaqda8.js";
141
+ import"./chunk-21z7acxh.js";
142
+ import {
143
+ init_diagLogs,
144
+ logForDiagnosticsNoPII
145
+ } from "./chunk-rgbbtszq.js";
146
+ import"./chunk-1thgdca1.js";
147
+ import"./chunk-qnfx3qtx.js";
148
+ import"./chunk-yw79dz62.js";
149
+ import"./chunk-b81hd3m6.js";
150
+ import {
151
+ init_log,
152
+ logError
153
+ } from "./chunk-61ahbn23.js";
154
+ import"./chunk-8tnsngw2.js";
155
+ import"./chunk-edzkkadh.js";
156
+ import"./chunk-bwg7582d.js";
157
+ import"./chunk-5z28bqne.js";
158
+ import"./chunk-qajrkk97.js";
159
+ import {
160
+ init_debug,
161
+ init_slowOperations,
162
+ jsonParse,
163
+ jsonStringify,
164
+ logForDebugging
165
+ } from "./chunk-hcgkak1j.js";
166
+ import"./chunk-fbv4apne.js";
167
+ import {
168
+ errorMessage,
169
+ init_errors
170
+ } from "./chunk-z6e5jp2w.js";
171
+ import {
172
+ init_envUtils,
173
+ isEnvTruthy,
174
+ isInProtectedNamespace
175
+ } from "./chunk-jaaxk89e.js";
176
+ import"./chunk-h4b85amj.js";
177
+ import"./chunk-07069jq1.js";
178
+ import"./chunk-vf612n57.js";
179
+ import"./chunk-d4mdda98.js";
180
+ import"./chunk-7wm5s02e.js";
181
+ import"./chunk-4g3v8y12.js";
182
+ import"./chunk-7739pg2c.js";
183
+ import"./chunk-nh3cd07f.js";
184
+ import"./chunk-8pn8tvgg.js";
185
+ import"./chunk-netzwgv1.js";
186
+ import {
187
+ __require
188
+ } from "./chunk-qp2qdcda.js";
189
+
190
+ // src/daemon/workerRegistry.ts
191
+ import { resolve as resolve2 } from "path";
192
+
193
+ // src/bridge/bridgeMain.ts
194
+ init_product();
195
+ init_datadog();
196
+ init_firstPartyEventLogger();
197
+ init_growthbook();
198
+ init_analytics();
199
+ init_bundledMode();
200
+ init_debug();
201
+ init_rcDebugLog();
202
+ init_diagLogs();
203
+ init_envUtils();
204
+ init_errors();
205
+ init_format();
206
+ init_log();
207
+ init_sleep();
208
+ init_worktree();
209
+ init_bridgeApi();
210
+ init_bridgeStatusUtil();
211
+ import { randomUUID } from "crypto";
212
+ import { hostname, tmpdir as tmpdir2 } from "os";
213
+ import { basename, join as join2, resolve } from "path";
214
+
215
+ // src/bridge/bridgeUI.ts
216
+ init_server();
217
+ init_figures();
218
+ init_src();
219
+ init_debug();
220
+ init_bridgeStatusUtil();
221
+
222
+ // src/bridge/bridgeMain.ts
223
+ init_debugUtils();
224
+ init_sessionIdCompat();
225
+
226
+ // src/bridge/sessionRunner.ts
227
+ init_slowOperations();
228
+ init_debugUtils();
229
+ import { spawn } from "child_process";
230
+ import { createWriteStream } from "fs";
231
+ import { tmpdir } from "os";
232
+ import { dirname, join } from "path";
233
+ import { createInterface } from "readline";
234
+ var MAX_ACTIVITIES = 10;
235
+ var MAX_STDERR_LINES = 10;
236
+ function safeFilenameId(id) {
237
+ return id.replace(/[^a-zA-Z0-9_-]/g, "_");
238
+ }
239
+ var TOOL_VERBS = {
240
+ Read: "Reading",
241
+ Write: "Writing",
242
+ Edit: "Editing",
243
+ MultiEdit: "Editing",
244
+ Bash: "Running",
245
+ Glob: "Searching",
246
+ Grep: "Searching",
247
+ WebFetch: "Fetching",
248
+ WebSearch: "Searching",
249
+ Task: "Running task",
250
+ FileReadTool: "Reading",
251
+ FileWriteTool: "Writing",
252
+ FileEditTool: "Editing",
253
+ GlobTool: "Searching",
254
+ GrepTool: "Searching",
255
+ BashTool: "Running",
256
+ NotebookEditTool: "Editing notebook",
257
+ LSP: "LSP"
258
+ };
259
+ function toolSummary(name, input) {
260
+ const verb = TOOL_VERBS[name] ?? name;
261
+ const target = input.file_path ?? input.filePath ?? input.pattern ?? input.command?.slice(0, 60) ?? input.url ?? input.query ?? "";
262
+ if (target) {
263
+ return `${verb} ${target}`;
264
+ }
265
+ return verb;
266
+ }
267
+ function extractActivities(line, sessionId, onDebug) {
268
+ let parsed;
269
+ try {
270
+ parsed = jsonParse(line);
271
+ } catch {
272
+ return [];
273
+ }
274
+ if (!parsed || typeof parsed !== "object") {
275
+ return [];
276
+ }
277
+ const msg = parsed;
278
+ const activities = [];
279
+ const now = Date.now();
280
+ switch (msg.type) {
281
+ case "assistant": {
282
+ const message = msg.message;
283
+ if (!message)
284
+ break;
285
+ const content = message.content;
286
+ if (!Array.isArray(content))
287
+ break;
288
+ for (const block of content) {
289
+ if (!block || typeof block !== "object")
290
+ continue;
291
+ const b = block;
292
+ if (b.type === "tool_use") {
293
+ const name = b.name ?? "Tool";
294
+ const input = b.input ?? {};
295
+ const summary = toolSummary(name, input);
296
+ activities.push({
297
+ type: "tool_start",
298
+ summary,
299
+ timestamp: now
300
+ });
301
+ onDebug(`[bridge:activity] sessionId=${sessionId} tool_use name=${name} ${inputPreview(input)}`);
302
+ } else if (b.type === "text") {
303
+ const text = b.text ?? "";
304
+ if (text.length > 0) {
305
+ activities.push({
306
+ type: "text",
307
+ summary: text.slice(0, 80),
308
+ timestamp: now
309
+ });
310
+ onDebug(`[bridge:activity] sessionId=${sessionId} text "${text.slice(0, 100)}"`);
311
+ }
312
+ }
313
+ }
314
+ break;
315
+ }
316
+ case "result": {
317
+ const subtype = msg.subtype;
318
+ if (subtype === "success") {
319
+ activities.push({
320
+ type: "result",
321
+ summary: "Session completed",
322
+ timestamp: now
323
+ });
324
+ onDebug(`[bridge:activity] sessionId=${sessionId} result subtype=success`);
325
+ } else if (subtype) {
326
+ const errors = msg.errors;
327
+ const errorSummary = errors?.[0] ?? `Error: ${subtype}`;
328
+ activities.push({
329
+ type: "error",
330
+ summary: errorSummary,
331
+ timestamp: now
332
+ });
333
+ onDebug(`[bridge:activity] sessionId=${sessionId} result subtype=${subtype} error="${errorSummary}"`);
334
+ } else {
335
+ onDebug(`[bridge:activity] sessionId=${sessionId} result subtype=undefined`);
336
+ }
337
+ break;
338
+ }
339
+ default:
340
+ break;
341
+ }
342
+ return activities;
343
+ }
344
+ function extractUserMessageText(msg) {
345
+ if (msg.parent_tool_use_id != null || msg.isSynthetic || msg.isReplay)
346
+ return;
347
+ const message = msg.message;
348
+ const content = message?.content;
349
+ let text;
350
+ if (typeof content === "string") {
351
+ text = content;
352
+ } else if (Array.isArray(content)) {
353
+ for (const block of content) {
354
+ if (block && typeof block === "object" && block.type === "text") {
355
+ text = block.text;
356
+ break;
357
+ }
358
+ }
359
+ }
360
+ text = text?.trim();
361
+ return text ? text : undefined;
362
+ }
363
+ function inputPreview(input) {
364
+ const parts = [];
365
+ for (const [key, val] of Object.entries(input)) {
366
+ if (typeof val === "string") {
367
+ parts.push(`${key}="${val.slice(0, 100)}"`);
368
+ }
369
+ if (parts.length >= 3)
370
+ break;
371
+ }
372
+ return parts.join(" ");
373
+ }
374
+ function createSessionSpawner(deps) {
375
+ return {
376
+ spawn(opts, dir) {
377
+ const safeId = safeFilenameId(opts.sessionId);
378
+ let debugFile;
379
+ if (deps.debugFile) {
380
+ const ext = deps.debugFile.lastIndexOf(".");
381
+ if (ext > 0) {
382
+ debugFile = `${deps.debugFile.slice(0, ext)}-${safeId}${deps.debugFile.slice(ext)}`;
383
+ } else {
384
+ debugFile = `${deps.debugFile}-${safeId}`;
385
+ }
386
+ } else if (deps.verbose || process.env.USER_TYPE === "ant") {
387
+ debugFile = join(tmpdir(), "claude", `bridge-session-${safeId}.log`);
388
+ }
389
+ let transcriptStream = null;
390
+ let transcriptPath;
391
+ if (deps.debugFile) {
392
+ transcriptPath = join(dirname(deps.debugFile), `bridge-transcript-${safeId}.jsonl`);
393
+ transcriptStream = createWriteStream(transcriptPath, { flags: "a" });
394
+ transcriptStream.on("error", (err) => {
395
+ deps.onDebug(`[bridge:session] Transcript write error: ${err.message}`);
396
+ transcriptStream = null;
397
+ });
398
+ deps.onDebug(`[bridge:session] Transcript log: ${transcriptPath}`);
399
+ }
400
+ const args = [
401
+ ...deps.scriptArgs,
402
+ "--print",
403
+ "--sdk-url",
404
+ opts.sdkUrl,
405
+ "--session-id",
406
+ opts.sessionId,
407
+ "--input-format",
408
+ "stream-json",
409
+ "--output-format",
410
+ "stream-json",
411
+ "--replay-user-messages",
412
+ ...deps.verbose ? ["--verbose"] : [],
413
+ ...debugFile ? ["--debug-file", debugFile] : [],
414
+ ...deps.permissionMode ? ["--permission-mode", deps.permissionMode] : []
415
+ ];
416
+ const env = {
417
+ ...deps.env,
418
+ CLAUDE_CODE_OAUTH_TOKEN: undefined,
419
+ CLAUDE_CODE_ENVIRONMENT_KIND: "bridge",
420
+ ...deps.sandbox && { CLAUDE_CODE_FORCE_SANDBOX: "1" },
421
+ CLAUDE_CODE_SESSION_ACCESS_TOKEN: opts.accessToken,
422
+ CLAUDE_CODE_POST_FOR_SESSION_INGRESS_V2: "1",
423
+ ...opts.useCcrV2 && {
424
+ CLAUDE_CODE_USE_CCR_V2: "1",
425
+ CLAUDE_CODE_WORKER_EPOCH: String(opts.workerEpoch)
426
+ }
427
+ };
428
+ deps.onDebug(`[bridge:session] Spawning sessionId=${opts.sessionId} sdkUrl=${opts.sdkUrl} accessToken=${opts.accessToken ? "present" : "MISSING"}`);
429
+ deps.onDebug(`[bridge:session] Child args: ${args.join(" ")}`);
430
+ if (debugFile) {
431
+ deps.onDebug(`[bridge:session] Debug log: ${debugFile}`);
432
+ }
433
+ const child = spawn(deps.execPath, args, {
434
+ cwd: dir,
435
+ stdio: ["pipe", "pipe", "pipe"],
436
+ env,
437
+ windowsHide: true
438
+ });
439
+ deps.onDebug(`[bridge:session] sessionId=${opts.sessionId} pid=${child.pid}`);
440
+ const activities = [];
441
+ let currentActivity = null;
442
+ const lastStderr = [];
443
+ let sigkillSent = false;
444
+ let firstUserMessageSeen = false;
445
+ if (child.stderr) {
446
+ const stderrRl = createInterface({ input: child.stderr });
447
+ stderrRl.on("line", (line) => {
448
+ if (deps.verbose) {
449
+ process.stderr.write(line + `
450
+ `);
451
+ }
452
+ if (lastStderr.length >= MAX_STDERR_LINES) {
453
+ lastStderr.shift();
454
+ }
455
+ lastStderr.push(line);
456
+ });
457
+ }
458
+ if (child.stdout) {
459
+ const rl = createInterface({ input: child.stdout });
460
+ rl.on("line", (line) => {
461
+ if (transcriptStream) {
462
+ transcriptStream.write(line + `
463
+ `);
464
+ }
465
+ deps.onDebug(`[bridge:ws] sessionId=${opts.sessionId} <<< ${debugTruncate(line)}`);
466
+ if (deps.verbose) {
467
+ process.stderr.write(line + `
468
+ `);
469
+ }
470
+ const extracted = extractActivities(line, opts.sessionId, deps.onDebug);
471
+ for (const activity of extracted) {
472
+ if (activities.length >= MAX_ACTIVITIES) {
473
+ activities.shift();
474
+ }
475
+ activities.push(activity);
476
+ currentActivity = activity;
477
+ deps.onActivity?.(opts.sessionId, activity);
478
+ }
479
+ {
480
+ let parsed;
481
+ try {
482
+ parsed = jsonParse(line);
483
+ } catch {}
484
+ if (parsed && typeof parsed === "object") {
485
+ const msg = parsed;
486
+ if (msg.type === "control_request") {
487
+ const request = msg.request;
488
+ if (request?.subtype === "can_use_tool" && deps.onPermissionRequest) {
489
+ deps.onPermissionRequest(opts.sessionId, parsed, opts.accessToken);
490
+ }
491
+ } else if (msg.type === "user" && !firstUserMessageSeen && opts.onFirstUserMessage) {
492
+ const text = extractUserMessageText(msg);
493
+ if (text) {
494
+ firstUserMessageSeen = true;
495
+ opts.onFirstUserMessage(text);
496
+ }
497
+ }
498
+ }
499
+ }
500
+ });
501
+ }
502
+ const done = new Promise((resolve) => {
503
+ child.on("close", (code, signal) => {
504
+ if (transcriptStream) {
505
+ transcriptStream.end();
506
+ transcriptStream = null;
507
+ }
508
+ if (signal === "SIGTERM" || signal === "SIGINT") {
509
+ deps.onDebug(`[bridge:session] sessionId=${opts.sessionId} interrupted signal=${signal} pid=${child.pid}`);
510
+ resolve("interrupted");
511
+ } else if (code === 0) {
512
+ deps.onDebug(`[bridge:session] sessionId=${opts.sessionId} completed exit_code=0 pid=${child.pid}`);
513
+ resolve("completed");
514
+ } else {
515
+ deps.onDebug(`[bridge:session] sessionId=${opts.sessionId} failed exit_code=${code} pid=${child.pid}`);
516
+ resolve("failed");
517
+ }
518
+ });
519
+ child.on("error", (err) => {
520
+ deps.onDebug(`[bridge:session] sessionId=${opts.sessionId} spawn error: ${err.message}`);
521
+ resolve("failed");
522
+ });
523
+ });
524
+ const handle = {
525
+ sessionId: opts.sessionId,
526
+ done,
527
+ activities,
528
+ accessToken: opts.accessToken,
529
+ lastStderr,
530
+ get currentActivity() {
531
+ return currentActivity;
532
+ },
533
+ kill() {
534
+ if (!child.killed) {
535
+ deps.onDebug(`[bridge:session] Sending SIGTERM to sessionId=${opts.sessionId} pid=${child.pid}`);
536
+ if (process.platform === "win32") {
537
+ child.kill();
538
+ } else {
539
+ child.kill("SIGTERM");
540
+ }
541
+ }
542
+ },
543
+ forceKill() {
544
+ if (!sigkillSent && child.pid) {
545
+ sigkillSent = true;
546
+ deps.onDebug(`[bridge:session] Sending SIGKILL to sessionId=${opts.sessionId} pid=${child.pid}`);
547
+ if (process.platform === "win32") {
548
+ child.kill();
549
+ } else {
550
+ child.kill("SIGKILL");
551
+ }
552
+ }
553
+ },
554
+ writeStdin(data) {
555
+ if (child.stdin && !child.stdin.destroyed) {
556
+ deps.onDebug(`[bridge:ws] sessionId=${opts.sessionId} >>> ${debugTruncate(data)}`);
557
+ child.stdin.write(data);
558
+ }
559
+ },
560
+ updateAccessToken(token) {
561
+ handle.accessToken = token;
562
+ handle.writeStdin(jsonStringify({
563
+ type: "update_environment_variables",
564
+ variables: { CLAUDE_CODE_SESSION_ACCESS_TOKEN: token }
565
+ }) + `
566
+ `);
567
+ deps.onDebug(`[bridge:session] Sent token refresh via stdin for sessionId=${opts.sessionId}`);
568
+ }
569
+ };
570
+ return handle;
571
+ }
572
+ };
573
+ }
574
+
575
+ // src/bridge/bridgeMain.ts
576
+ init_trustedDevice();
577
+ init_types();
578
+ var DEFAULT_BACKOFF = {
579
+ connInitialMs: 2000,
580
+ connCapMs: 120000,
581
+ connGiveUpMs: 600000,
582
+ generalInitialMs: 500,
583
+ generalCapMs: 30000,
584
+ generalGiveUpMs: 600000
585
+ };
586
+ var STATUS_UPDATE_INTERVAL_MS = 1000;
587
+ function pollSleepDetectionThresholdMs(backoff) {
588
+ return backoff.connCapMs * 2;
589
+ }
590
+ function spawnScriptArgs() {
591
+ if (isInBundledMode() || !process.argv[1]) {
592
+ return [];
593
+ }
594
+ return [process.argv[1]];
595
+ }
596
+ function safeSpawn(spawner, opts, dir) {
597
+ try {
598
+ return spawner.spawn(opts, dir);
599
+ } catch (err) {
600
+ const errMsg = errorMessage(err);
601
+ logError(new Error(`Session spawn failed: ${errMsg}`));
602
+ return errMsg;
603
+ }
604
+ }
605
+ async function runBridgeLoop(config, environmentId, environmentSecret, api, spawner, logger, signal, backoffConfig = DEFAULT_BACKOFF, initialSessionId, getAccessToken) {
606
+ const controller = new AbortController;
607
+ if (signal.aborted) {
608
+ controller.abort();
609
+ } else {
610
+ signal.addEventListener("abort", () => controller.abort(), { once: true });
611
+ }
612
+ const loopSignal = controller.signal;
613
+ const activeSessions = new Map;
614
+ const sessionStartTimes = new Map;
615
+ const sessionWorkIds = new Map;
616
+ const sessionCompatIds = new Map;
617
+ const sessionIngressTokens = new Map;
618
+ const sessionTimers = new Map;
619
+ const completedWorkIds = new Set;
620
+ const sessionWorktrees = new Map;
621
+ const timedOutSessions = new Set;
622
+ const titledSessions = new Set;
623
+ const capacityWake = createCapacityWake(loopSignal);
624
+ async function heartbeatActiveWorkItems() {
625
+ rcLog(`heartbeat: checking ${activeSessions.size} active session(s)`);
626
+ let anySuccess = false;
627
+ let anyFatal = false;
628
+ const authFailedSessions = [];
629
+ for (const [sessionId] of activeSessions) {
630
+ const workId = sessionWorkIds.get(sessionId);
631
+ const ingressToken = sessionIngressTokens.get(sessionId);
632
+ if (!workId || !ingressToken) {
633
+ continue;
634
+ }
635
+ try {
636
+ await api.heartbeatWork(environmentId, workId, ingressToken);
637
+ anySuccess = true;
638
+ } catch (err) {
639
+ logForDebugging(`[bridge:heartbeat] Failed for sessionId=${sessionId} workId=${workId}: ${errorMessage(err)}`);
640
+ if (err instanceof BridgeFatalError) {
641
+ logEvent("tengu_bridge_heartbeat_error", {
642
+ status: err.status,
643
+ error_type: err.status === 401 || err.status === 403 ? "auth_failed" : "fatal"
644
+ });
645
+ if (err.status === 401 || err.status === 403) {
646
+ authFailedSessions.push(sessionId);
647
+ } else {
648
+ anyFatal = true;
649
+ }
650
+ }
651
+ }
652
+ }
653
+ for (const sessionId of authFailedSessions) {
654
+ logger.logVerbose(`Session ${sessionId} token expired \u2014 re-queuing via bridge/reconnect`);
655
+ try {
656
+ await api.reconnectSession(environmentId, sessionId);
657
+ logForDebugging(`[bridge:heartbeat] Re-queued sessionId=${sessionId} via bridge/reconnect`);
658
+ } catch (err) {
659
+ logger.logError(`Failed to refresh session ${sessionId} token: ${errorMessage(err)}`);
660
+ logForDebugging(`[bridge:heartbeat] reconnectSession(${sessionId}) failed: ${errorMessage(err)}`, { level: "error" });
661
+ }
662
+ }
663
+ if (anyFatal) {
664
+ return "fatal";
665
+ }
666
+ if (authFailedSessions.length > 0) {
667
+ return "auth_failed";
668
+ }
669
+ return anySuccess ? "ok" : "failed";
670
+ }
671
+ const v2Sessions = new Set;
672
+ const tokenRefresh = getAccessToken ? createTokenRefreshScheduler({
673
+ getAccessToken,
674
+ onRefresh: (sessionId, oauthToken) => {
675
+ const handle = activeSessions.get(sessionId);
676
+ if (!handle) {
677
+ return;
678
+ }
679
+ if (v2Sessions.has(sessionId)) {
680
+ logger.logVerbose(`Refreshing session ${sessionId} token via bridge/reconnect`);
681
+ api.reconnectSession(environmentId, sessionId).catch((err) => {
682
+ logger.logError(`Failed to refresh session ${sessionId} token: ${errorMessage(err)}`);
683
+ logForDebugging(`[bridge:token] reconnectSession(${sessionId}) failed: ${errorMessage(err)}`, { level: "error" });
684
+ });
685
+ } else {
686
+ handle.updateAccessToken(oauthToken);
687
+ }
688
+ },
689
+ label: "bridge"
690
+ }) : null;
691
+ const loopStartTime = Date.now();
692
+ const pendingCleanups = new Set;
693
+ function trackCleanup(p) {
694
+ pendingCleanups.add(p);
695
+ p.finally(() => pendingCleanups.delete(p));
696
+ }
697
+ let connBackoff = 0;
698
+ let generalBackoff = 0;
699
+ let connErrorStart = null;
700
+ let generalErrorStart = null;
701
+ let lastPollErrorTime = null;
702
+ let statusUpdateTimer = null;
703
+ let fatalExit = false;
704
+ logForDebugging(`[bridge:work] Starting poll loop spawnMode=${config.spawnMode} maxSessions=${config.maxSessions} environmentId=${environmentId}`);
705
+ logForDiagnosticsNoPII("info", "bridge_loop_started", {
706
+ max_sessions: config.maxSessions,
707
+ spawn_mode: config.spawnMode
708
+ });
709
+ if (process.env.USER_TYPE === "ant") {
710
+ let debugGlob;
711
+ if (config.debugFile) {
712
+ const ext = config.debugFile.lastIndexOf(".");
713
+ debugGlob = ext > 0 ? `${config.debugFile.slice(0, ext)}-*${config.debugFile.slice(ext)}` : `${config.debugFile}-*`;
714
+ } else {
715
+ debugGlob = join2(tmpdir2(), "claude", "bridge-session-*.log");
716
+ }
717
+ logger.setDebugLogPath(debugGlob);
718
+ }
719
+ logger.printBanner(config, environmentId);
720
+ logger.updateSessionCount(0, config.maxSessions, config.spawnMode);
721
+ if (initialSessionId) {
722
+ logger.setAttached(initialSessionId);
723
+ }
724
+ function updateStatusDisplay() {
725
+ logger.updateSessionCount(activeSessions.size, config.maxSessions, config.spawnMode);
726
+ for (const [sid, handle2] of activeSessions) {
727
+ const act = handle2.currentActivity;
728
+ if (act) {
729
+ logger.updateSessionActivity(sessionCompatIds.get(sid) ?? sid, act);
730
+ }
731
+ }
732
+ if (activeSessions.size === 0) {
733
+ logger.updateIdleStatus();
734
+ return;
735
+ }
736
+ const [sessionId, handle] = [...activeSessions.entries()].pop();
737
+ const startTime = sessionStartTimes.get(sessionId);
738
+ if (!startTime)
739
+ return;
740
+ const activity = handle.currentActivity;
741
+ if (!activity || activity.type === "result" || activity.type === "error") {
742
+ if (config.maxSessions > 1)
743
+ logger.refreshDisplay();
744
+ return;
745
+ }
746
+ const elapsed = formatDuration(Date.now() - startTime);
747
+ const trail = handle.activities.filter((a) => a.type === "tool_start").slice(-5).map((a) => a.summary);
748
+ logger.updateSessionStatus(sessionId, elapsed, activity, trail);
749
+ }
750
+ function startStatusUpdates() {
751
+ stopStatusUpdates();
752
+ updateStatusDisplay();
753
+ statusUpdateTimer = setInterval(updateStatusDisplay, STATUS_UPDATE_INTERVAL_MS);
754
+ }
755
+ function stopStatusUpdates() {
756
+ if (statusUpdateTimer) {
757
+ clearInterval(statusUpdateTimer);
758
+ statusUpdateTimer = null;
759
+ }
760
+ }
761
+ function onSessionDone(sessionId, startTime, handle) {
762
+ return (rawStatus) => {
763
+ const workId = sessionWorkIds.get(sessionId);
764
+ rcLog(`session done: sessionId=${sessionId} workId=${workId ?? "none"} status=${rawStatus}` + ` wasTimedOut=${timedOutSessions.has(sessionId)} duration=${Math.round((Date.now() - startTime) / 1000)}s` + ` stderr=${handle.lastStderr.length > 0 ? handle.lastStderr.join("\\n").slice(0, 500) : "(none)"}`);
765
+ activeSessions.delete(sessionId);
766
+ sessionStartTimes.delete(sessionId);
767
+ sessionWorkIds.delete(sessionId);
768
+ sessionIngressTokens.delete(sessionId);
769
+ const compatId = sessionCompatIds.get(sessionId) ?? sessionId;
770
+ sessionCompatIds.delete(sessionId);
771
+ logger.removeSession(compatId);
772
+ titledSessions.delete(compatId);
773
+ v2Sessions.delete(sessionId);
774
+ const timer = sessionTimers.get(sessionId);
775
+ if (timer) {
776
+ clearTimeout(timer);
777
+ sessionTimers.delete(sessionId);
778
+ }
779
+ tokenRefresh?.cancel(sessionId);
780
+ capacityWake.wake();
781
+ const wasTimedOut = timedOutSessions.delete(sessionId);
782
+ const status = wasTimedOut && rawStatus === "interrupted" ? "failed" : rawStatus;
783
+ const durationMs = Date.now() - startTime;
784
+ logForDebugging(`[bridge:session] sessionId=${sessionId} workId=${workId ?? "unknown"} exited status=${status} duration=${formatDuration(durationMs)}`);
785
+ logEvent("tengu_bridge_session_done", {
786
+ status,
787
+ duration_ms: durationMs
788
+ });
789
+ logForDiagnosticsNoPII("info", "bridge_session_done", {
790
+ status,
791
+ duration_ms: durationMs
792
+ });
793
+ logger.clearStatus();
794
+ stopStatusUpdates();
795
+ const stderrSummary = handle.lastStderr.length > 0 ? handle.lastStderr.join(`
796
+ `) : undefined;
797
+ let failureMessage;
798
+ switch (status) {
799
+ case "completed":
800
+ logger.logSessionComplete(sessionId, durationMs);
801
+ break;
802
+ case "failed":
803
+ if (!wasTimedOut && !loopSignal.aborted) {
804
+ failureMessage = stderrSummary ?? "Process exited with error";
805
+ logger.logSessionFailed(sessionId, failureMessage);
806
+ logError(new Error(`Bridge session failed: ${failureMessage}`));
807
+ }
808
+ break;
809
+ case "interrupted":
810
+ logger.logVerbose(`Session ${sessionId} interrupted`);
811
+ break;
812
+ }
813
+ if (status !== "interrupted" && workId) {
814
+ trackCleanup(stopWorkWithRetry(api, environmentId, workId, logger, backoffConfig.stopWorkBaseDelayMs));
815
+ completedWorkIds.add(workId);
816
+ }
817
+ const wt = sessionWorktrees.get(sessionId);
818
+ if (wt) {
819
+ sessionWorktrees.delete(sessionId);
820
+ trackCleanup(removeAgentWorktree(wt.worktreePath, wt.worktreeBranch, wt.gitRoot, wt.hookBased).catch((err) => logger.logVerbose(`Failed to remove worktree ${wt.worktreePath}: ${errorMessage(err)}`)));
821
+ }
822
+ if (status !== "interrupted" && !loopSignal.aborted) {
823
+ if (config.spawnMode !== "single-session") {
824
+ trackCleanup(api.archiveSession(compatId).catch((err) => logger.logVerbose(`Failed to archive session ${sessionId}: ${errorMessage(err)}`)));
825
+ logForDebugging(`[bridge:session] Session ${status}, returning to idle (multi-session mode)`);
826
+ } else {
827
+ logForDebugging(`[bridge:session] Session ${status}, aborting poll loop to tear down environment`);
828
+ controller.abort();
829
+ return;
830
+ }
831
+ }
832
+ if (!loopSignal.aborted) {
833
+ startStatusUpdates();
834
+ }
835
+ };
836
+ }
837
+ if (!initialSessionId) {
838
+ startStatusUpdates();
839
+ }
840
+ while (!loopSignal.aborted) {
841
+ const pollConfig = getPollIntervalConfig();
842
+ try {
843
+ rcLog(`poll: envId=${environmentId} activeSessions=${activeSessions.size}`);
844
+ const work = await api.pollForWork(environmentId, environmentSecret, loopSignal, pollConfig.reclaim_older_than_ms);
845
+ const wasDisconnected = connErrorStart !== null || generalErrorStart !== null;
846
+ if (wasDisconnected) {
847
+ const disconnectedMs = Date.now() - (connErrorStart ?? generalErrorStart ?? Date.now());
848
+ logger.logReconnected(disconnectedMs);
849
+ logForDebugging(`[bridge:poll] Reconnected after ${formatDuration(disconnectedMs)}`);
850
+ logEvent("tengu_bridge_reconnected", {
851
+ disconnected_ms: disconnectedMs
852
+ });
853
+ }
854
+ connBackoff = 0;
855
+ generalBackoff = 0;
856
+ connErrorStart = null;
857
+ generalErrorStart = null;
858
+ lastPollErrorTime = null;
859
+ if (!work) {
860
+ const atCap = activeSessions.size >= config.maxSessions;
861
+ if (atCap) {
862
+ const atCapMs = pollConfig.multisession_poll_interval_ms_at_capacity;
863
+ if (pollConfig.non_exclusive_heartbeat_interval_ms > 0) {
864
+ logEvent("tengu_bridge_heartbeat_mode_entered", {
865
+ active_sessions: activeSessions.size,
866
+ heartbeat_interval_ms: pollConfig.non_exclusive_heartbeat_interval_ms
867
+ });
868
+ const pollDeadline = atCapMs > 0 ? Date.now() + atCapMs : null;
869
+ let hbResult = "ok";
870
+ let hbCycles = 0;
871
+ while (!loopSignal.aborted && activeSessions.size >= config.maxSessions && (pollDeadline === null || Date.now() < pollDeadline)) {
872
+ const hbConfig = getPollIntervalConfig();
873
+ if (hbConfig.non_exclusive_heartbeat_interval_ms <= 0)
874
+ break;
875
+ const cap = capacityWake.signal();
876
+ hbResult = await heartbeatActiveWorkItems();
877
+ if (hbResult === "auth_failed" || hbResult === "fatal") {
878
+ cap.cleanup();
879
+ break;
880
+ }
881
+ hbCycles++;
882
+ await sleep(hbConfig.non_exclusive_heartbeat_interval_ms, cap.signal);
883
+ cap.cleanup();
884
+ }
885
+ const exitReason = hbResult === "auth_failed" || hbResult === "fatal" ? hbResult : loopSignal.aborted ? "shutdown" : activeSessions.size < config.maxSessions ? "capacity_changed" : pollDeadline !== null && Date.now() >= pollDeadline ? "poll_due" : "config_disabled";
886
+ logEvent("tengu_bridge_heartbeat_mode_exited", {
887
+ reason: exitReason,
888
+ heartbeat_cycles: hbCycles,
889
+ active_sessions: activeSessions.size
890
+ });
891
+ if (exitReason === "poll_due") {
892
+ logForDebugging(`[bridge:poll] Heartbeat poll_due after ${hbCycles} cycles \u2014 falling through to pollForWork`);
893
+ }
894
+ if (hbResult === "auth_failed" || hbResult === "fatal") {
895
+ const cap = capacityWake.signal();
896
+ await sleep(atCapMs > 0 ? atCapMs : pollConfig.non_exclusive_heartbeat_interval_ms, cap.signal);
897
+ cap.cleanup();
898
+ }
899
+ } else if (atCapMs > 0) {
900
+ const cap = capacityWake.signal();
901
+ await sleep(atCapMs, cap.signal);
902
+ cap.cleanup();
903
+ }
904
+ } else {
905
+ const interval = activeSessions.size > 0 ? pollConfig.multisession_poll_interval_ms_partial_capacity : pollConfig.multisession_poll_interval_ms_not_at_capacity;
906
+ await sleep(interval, loopSignal);
907
+ }
908
+ continue;
909
+ }
910
+ const atCapacityBeforeSwitch = activeSessions.size >= config.maxSessions;
911
+ if (completedWorkIds.has(work.id)) {
912
+ logForDebugging(`[bridge:work] Skipping already-completed workId=${work.id}`);
913
+ if (atCapacityBeforeSwitch) {
914
+ const cap = capacityWake.signal();
915
+ if (pollConfig.non_exclusive_heartbeat_interval_ms > 0) {
916
+ await heartbeatActiveWorkItems();
917
+ await sleep(pollConfig.non_exclusive_heartbeat_interval_ms, cap.signal);
918
+ } else if (pollConfig.multisession_poll_interval_ms_at_capacity > 0) {
919
+ await sleep(pollConfig.multisession_poll_interval_ms_at_capacity, cap.signal);
920
+ }
921
+ cap.cleanup();
922
+ } else {
923
+ await sleep(1000, loopSignal);
924
+ }
925
+ continue;
926
+ }
927
+ let secret;
928
+ try {
929
+ secret = decodeWorkSecret(work.secret);
930
+ } catch (err) {
931
+ const errMsg = errorMessage(err);
932
+ logger.logError(`Failed to decode work secret for workId=${work.id}: ${errMsg}`);
933
+ logEvent("tengu_bridge_work_secret_failed", {});
934
+ completedWorkIds.add(work.id);
935
+ trackCleanup(stopWorkWithRetry(api, environmentId, work.id, logger, backoffConfig.stopWorkBaseDelayMs));
936
+ if (atCapacityBeforeSwitch) {
937
+ const cap = capacityWake.signal();
938
+ if (pollConfig.non_exclusive_heartbeat_interval_ms > 0) {
939
+ await heartbeatActiveWorkItems();
940
+ await sleep(pollConfig.non_exclusive_heartbeat_interval_ms, cap.signal);
941
+ } else if (pollConfig.multisession_poll_interval_ms_at_capacity > 0) {
942
+ await sleep(pollConfig.multisession_poll_interval_ms_at_capacity, cap.signal);
943
+ }
944
+ cap.cleanup();
945
+ }
946
+ continue;
947
+ }
948
+ const ackWork = async () => {
949
+ logForDebugging(`[bridge:work] Acknowledging workId=${work.id}`);
950
+ try {
951
+ await api.acknowledgeWork(environmentId, work.id, secret.session_ingress_token);
952
+ } catch (err) {
953
+ logForDebugging(`[bridge:work] Acknowledge failed workId=${work.id}: ${errorMessage(err)}`);
954
+ }
955
+ };
956
+ const workType = work.data.type;
957
+ switch (work.data.type) {
958
+ case "healthcheck":
959
+ await ackWork();
960
+ logForDebugging("[bridge:work] Healthcheck received");
961
+ logger.logVerbose("Healthcheck received");
962
+ break;
963
+ case "session": {
964
+ const sessionId = work.data.id;
965
+ rcLog(`work received: type=session sessionId=${sessionId} workId=${work.id}`);
966
+ try {
967
+ validateBridgeId(sessionId, "session_id");
968
+ } catch {
969
+ await ackWork();
970
+ logger.logError(`Invalid session_id received: ${sessionId}`);
971
+ break;
972
+ }
973
+ const existingHandle = activeSessions.get(sessionId);
974
+ if (existingHandle) {
975
+ existingHandle.updateAccessToken(secret.session_ingress_token);
976
+ sessionIngressTokens.set(sessionId, secret.session_ingress_token);
977
+ sessionWorkIds.set(sessionId, work.id);
978
+ tokenRefresh?.schedule(sessionId, secret.session_ingress_token);
979
+ logForDebugging(`[bridge:work] Updated access token for existing sessionId=${sessionId} workId=${work.id}`);
980
+ await ackWork();
981
+ break;
982
+ }
983
+ if (activeSessions.size >= config.maxSessions) {
984
+ logForDebugging(`[bridge:work] At capacity (${activeSessions.size}/${config.maxSessions}), cannot spawn new session for workId=${work.id}`);
985
+ break;
986
+ }
987
+ await ackWork();
988
+ const spawnStartTime = Date.now();
989
+ let sdkUrl;
990
+ let useCcrV2 = false;
991
+ let workerEpoch;
992
+ if (secret.use_code_sessions === true || isEnvTruthy(process.env.CLAUDE_BRIDGE_USE_CCR_V2)) {
993
+ sdkUrl = buildCCRv2SdkUrl(config.apiBaseUrl, sessionId);
994
+ for (let attempt = 1;attempt <= 2; attempt++) {
995
+ try {
996
+ workerEpoch = await registerWorker(sdkUrl, secret.session_ingress_token);
997
+ useCcrV2 = true;
998
+ logForDebugging(`[bridge:session] CCR v2: registered worker sessionId=${sessionId} epoch=${workerEpoch} attempt=${attempt}`);
999
+ break;
1000
+ } catch (err) {
1001
+ const errMsg = errorMessage(err);
1002
+ if (attempt < 2) {
1003
+ logForDebugging(`[bridge:session] CCR v2: registerWorker attempt ${attempt} failed, retrying: ${errMsg}`);
1004
+ await sleep(2000, loopSignal);
1005
+ if (loopSignal.aborted)
1006
+ break;
1007
+ continue;
1008
+ }
1009
+ logger.logError(`CCR v2 worker registration failed for session ${sessionId}: ${errMsg}`);
1010
+ logError(new Error(`registerWorker failed: ${errMsg}`));
1011
+ completedWorkIds.add(work.id);
1012
+ trackCleanup(stopWorkWithRetry(api, environmentId, work.id, logger, backoffConfig.stopWorkBaseDelayMs));
1013
+ }
1014
+ }
1015
+ if (!useCcrV2)
1016
+ break;
1017
+ } else {
1018
+ sdkUrl = buildSdkUrl(config.sessionIngressUrl, sessionId);
1019
+ }
1020
+ const spawnModeAtDecision = config.spawnMode;
1021
+ let sessionDir = config.dir;
1022
+ let worktreeCreateMs = 0;
1023
+ if (spawnModeAtDecision === "worktree" && (initialSessionId === undefined || !sameSessionId(sessionId, initialSessionId))) {
1024
+ const wtStart = Date.now();
1025
+ try {
1026
+ const wt = await createAgentWorktree(`bridge-${safeFilenameId(sessionId)}`);
1027
+ worktreeCreateMs = Date.now() - wtStart;
1028
+ sessionWorktrees.set(sessionId, {
1029
+ worktreePath: wt.worktreePath,
1030
+ worktreeBranch: wt.worktreeBranch,
1031
+ gitRoot: wt.gitRoot,
1032
+ hookBased: wt.hookBased
1033
+ });
1034
+ sessionDir = wt.worktreePath;
1035
+ logForDebugging(`[bridge:session] Created worktree for sessionId=${sessionId} at ${wt.worktreePath}`);
1036
+ } catch (err) {
1037
+ const errMsg = errorMessage(err);
1038
+ logger.logError(`Failed to create worktree for session ${sessionId}: ${errMsg}`);
1039
+ logError(new Error(`Worktree creation failed: ${errMsg}`));
1040
+ completedWorkIds.add(work.id);
1041
+ trackCleanup(stopWorkWithRetry(api, environmentId, work.id, logger, backoffConfig.stopWorkBaseDelayMs));
1042
+ break;
1043
+ }
1044
+ }
1045
+ logForDebugging(`[bridge:session] Spawning sessionId=${sessionId} sdkUrl=${sdkUrl}`);
1046
+ const compatSessionId = toCompatSessionId(sessionId);
1047
+ rcLog(`spawning session: sessionId=${sessionId} sdkUrl=${sdkUrl}` + ` useCcrV2=${useCcrV2} workerEpoch=${workerEpoch}` + ` dir=${sessionDir}` + ` accessToken=${secret.session_ingress_token ? secret.session_ingress_token.slice(0, 8) + "..." : "NONE"}`);
1048
+ const spawnResult = safeSpawn(spawner, {
1049
+ sessionId,
1050
+ sdkUrl,
1051
+ accessToken: secret.session_ingress_token,
1052
+ useCcrV2,
1053
+ workerEpoch,
1054
+ onFirstUserMessage: (text) => {
1055
+ if (titledSessions.has(compatSessionId))
1056
+ return;
1057
+ titledSessions.add(compatSessionId);
1058
+ const title = deriveSessionTitle(text);
1059
+ logger.setSessionTitle(compatSessionId, title);
1060
+ logForDebugging(`[bridge:title] derived title for ${compatSessionId}: ${title}`);
1061
+ import("./chunk-c9q0phsg.js").then(({ updateBridgeSessionTitle }) => updateBridgeSessionTitle(compatSessionId, title, {
1062
+ baseUrl: config.apiBaseUrl
1063
+ })).catch((err) => logForDebugging(`[bridge:title] failed to update title for ${compatSessionId}: ${err}`, { level: "error" }));
1064
+ }
1065
+ }, sessionDir);
1066
+ if (typeof spawnResult === "string") {
1067
+ logger.logError(`Failed to spawn session ${sessionId}: ${spawnResult}`);
1068
+ const wt = sessionWorktrees.get(sessionId);
1069
+ if (wt) {
1070
+ sessionWorktrees.delete(sessionId);
1071
+ trackCleanup(removeAgentWorktree(wt.worktreePath, wt.worktreeBranch, wt.gitRoot, wt.hookBased).catch((err) => logger.logVerbose(`Failed to remove worktree ${wt.worktreePath}: ${errorMessage(err)}`)));
1072
+ }
1073
+ completedWorkIds.add(work.id);
1074
+ trackCleanup(stopWorkWithRetry(api, environmentId, work.id, logger, backoffConfig.stopWorkBaseDelayMs));
1075
+ break;
1076
+ }
1077
+ const handle = spawnResult;
1078
+ const spawnDurationMs = Date.now() - spawnStartTime;
1079
+ logEvent("tengu_bridge_session_started", {
1080
+ active_sessions: activeSessions.size,
1081
+ spawn_mode: spawnModeAtDecision,
1082
+ in_worktree: sessionWorktrees.has(sessionId),
1083
+ spawn_duration_ms: spawnDurationMs,
1084
+ worktree_create_ms: worktreeCreateMs,
1085
+ inProtectedNamespace: isInProtectedNamespace()
1086
+ });
1087
+ logForDiagnosticsNoPII("info", "bridge_session_started", {
1088
+ spawn_mode: spawnModeAtDecision,
1089
+ in_worktree: sessionWorktrees.has(sessionId),
1090
+ spawn_duration_ms: spawnDurationMs,
1091
+ worktree_create_ms: worktreeCreateMs
1092
+ });
1093
+ activeSessions.set(sessionId, handle);
1094
+ sessionWorkIds.set(sessionId, work.id);
1095
+ sessionIngressTokens.set(sessionId, secret.session_ingress_token);
1096
+ sessionCompatIds.set(sessionId, compatSessionId);
1097
+ const startTime = Date.now();
1098
+ sessionStartTimes.set(sessionId, startTime);
1099
+ logger.logSessionStart(sessionId, `Session ${sessionId}`);
1100
+ const safeId = safeFilenameId(sessionId);
1101
+ let sessionDebugFile;
1102
+ if (config.debugFile) {
1103
+ const ext = config.debugFile.lastIndexOf(".");
1104
+ if (ext > 0) {
1105
+ sessionDebugFile = `${config.debugFile.slice(0, ext)}-${safeId}${config.debugFile.slice(ext)}`;
1106
+ } else {
1107
+ sessionDebugFile = `${config.debugFile}-${safeId}`;
1108
+ }
1109
+ } else if (config.verbose || process.env.USER_TYPE === "ant") {
1110
+ sessionDebugFile = join2(tmpdir2(), "claude", `bridge-session-${safeId}.log`);
1111
+ }
1112
+ if (sessionDebugFile) {
1113
+ logger.logVerbose(`Debug log: ${sessionDebugFile}`);
1114
+ }
1115
+ logger.addSession(compatSessionId, getRemoteSessionUrl(compatSessionId, config.sessionIngressUrl));
1116
+ startStatusUpdates();
1117
+ logger.setAttached(compatSessionId);
1118
+ fetchSessionTitle(compatSessionId, config.apiBaseUrl).then((title) => {
1119
+ if (title && activeSessions.has(sessionId)) {
1120
+ titledSessions.add(compatSessionId);
1121
+ logger.setSessionTitle(compatSessionId, title);
1122
+ logForDebugging(`[bridge:title] server title for ${compatSessionId}: ${title}`);
1123
+ }
1124
+ }).catch((err) => logForDebugging(`[bridge:title] failed to fetch title for ${compatSessionId}: ${err}`, { level: "error" }));
1125
+ const timeoutMs = config.sessionTimeoutMs ?? DEFAULT_SESSION_TIMEOUT_MS;
1126
+ if (timeoutMs > 0) {
1127
+ const timer = setTimeout(onSessionTimeout, timeoutMs, sessionId, timeoutMs, logger, timedOutSessions, handle);
1128
+ sessionTimers.set(sessionId, timer);
1129
+ }
1130
+ if (useCcrV2) {
1131
+ v2Sessions.add(sessionId);
1132
+ }
1133
+ tokenRefresh?.schedule(sessionId, secret.session_ingress_token);
1134
+ handle.done.then(onSessionDone(sessionId, startTime, handle));
1135
+ break;
1136
+ }
1137
+ default:
1138
+ await ackWork();
1139
+ logForDebugging(`[bridge:work] Unknown work type: ${workType}, skipping`);
1140
+ break;
1141
+ }
1142
+ if (atCapacityBeforeSwitch) {
1143
+ const cap = capacityWake.signal();
1144
+ if (pollConfig.non_exclusive_heartbeat_interval_ms > 0) {
1145
+ await heartbeatActiveWorkItems();
1146
+ await sleep(pollConfig.non_exclusive_heartbeat_interval_ms, cap.signal);
1147
+ } else if (pollConfig.multisession_poll_interval_ms_at_capacity > 0) {
1148
+ await sleep(pollConfig.multisession_poll_interval_ms_at_capacity, cap.signal);
1149
+ }
1150
+ cap.cleanup();
1151
+ }
1152
+ } catch (err) {
1153
+ if (loopSignal.aborted) {
1154
+ break;
1155
+ }
1156
+ if (err instanceof BridgeFatalError) {
1157
+ fatalExit = true;
1158
+ if (isExpiredErrorType(err.errorType)) {
1159
+ logger.logStatus(err.message);
1160
+ } else if (isSuppressible403(err)) {
1161
+ logForDebugging(`[bridge:work] Suppressed 403 error: ${err.message}`);
1162
+ } else {
1163
+ logger.logError(err.message);
1164
+ logError(err);
1165
+ }
1166
+ logEvent("tengu_bridge_fatal_error", {
1167
+ status: err.status,
1168
+ error_type: err.errorType
1169
+ });
1170
+ logForDiagnosticsNoPII(isExpiredErrorType(err.errorType) ? "info" : "error", "bridge_fatal_error", { status: err.status, error_type: err.errorType });
1171
+ break;
1172
+ }
1173
+ const errMsg = describeAxiosError(err);
1174
+ rcLog(`poll error: ${errMsg}` + ` isConn=${isConnectionError(err)} isServer=${isServerError(err)}` + ` activeSessions=${activeSessions.size}`);
1175
+ if (isConnectionError(err) || isServerError(err)) {
1176
+ const now = Date.now();
1177
+ if (lastPollErrorTime !== null && now - lastPollErrorTime > pollSleepDetectionThresholdMs(backoffConfig)) {
1178
+ logForDebugging(`[bridge:work] Detected system sleep (${Math.round((now - lastPollErrorTime) / 1000)}s gap), resetting error budget`);
1179
+ logForDiagnosticsNoPII("info", "bridge_poll_sleep_detected", {
1180
+ gapMs: now - lastPollErrorTime
1181
+ });
1182
+ connErrorStart = null;
1183
+ connBackoff = 0;
1184
+ generalErrorStart = null;
1185
+ generalBackoff = 0;
1186
+ }
1187
+ lastPollErrorTime = now;
1188
+ if (!connErrorStart) {
1189
+ connErrorStart = now;
1190
+ }
1191
+ const elapsed = now - connErrorStart;
1192
+ if (elapsed >= backoffConfig.connGiveUpMs) {
1193
+ logger.logError(`Server unreachable for ${Math.round(elapsed / 60000)} minutes, giving up.`);
1194
+ logEvent("tengu_bridge_poll_give_up", {
1195
+ error_type: "connection",
1196
+ elapsed_ms: elapsed
1197
+ });
1198
+ logForDiagnosticsNoPII("error", "bridge_poll_give_up", {
1199
+ error_type: "connection",
1200
+ elapsed_ms: elapsed
1201
+ });
1202
+ fatalExit = true;
1203
+ break;
1204
+ }
1205
+ generalErrorStart = null;
1206
+ generalBackoff = 0;
1207
+ connBackoff = connBackoff ? Math.min(connBackoff * 2, backoffConfig.connCapMs) : backoffConfig.connInitialMs;
1208
+ const delay = addJitter(connBackoff);
1209
+ logger.logVerbose(`Connection error, retrying in ${formatDelay(delay)} (${Math.round(elapsed / 1000)}s elapsed): ${errMsg}`);
1210
+ logger.updateReconnectingStatus(formatDelay(delay), formatDuration(elapsed));
1211
+ if (getPollIntervalConfig().non_exclusive_heartbeat_interval_ms > 0) {
1212
+ await heartbeatActiveWorkItems();
1213
+ }
1214
+ await sleep(delay, loopSignal);
1215
+ } else {
1216
+ const now = Date.now();
1217
+ if (lastPollErrorTime !== null && now - lastPollErrorTime > pollSleepDetectionThresholdMs(backoffConfig)) {
1218
+ logForDebugging(`[bridge:work] Detected system sleep (${Math.round((now - lastPollErrorTime) / 1000)}s gap), resetting error budget`);
1219
+ logForDiagnosticsNoPII("info", "bridge_poll_sleep_detected", {
1220
+ gapMs: now - lastPollErrorTime
1221
+ });
1222
+ connErrorStart = null;
1223
+ connBackoff = 0;
1224
+ generalErrorStart = null;
1225
+ generalBackoff = 0;
1226
+ }
1227
+ lastPollErrorTime = now;
1228
+ if (!generalErrorStart) {
1229
+ generalErrorStart = now;
1230
+ }
1231
+ const elapsed = now - generalErrorStart;
1232
+ if (elapsed >= backoffConfig.generalGiveUpMs) {
1233
+ logger.logError(`Persistent errors for ${Math.round(elapsed / 60000)} minutes, giving up.`);
1234
+ logEvent("tengu_bridge_poll_give_up", {
1235
+ error_type: "general",
1236
+ elapsed_ms: elapsed
1237
+ });
1238
+ logForDiagnosticsNoPII("error", "bridge_poll_give_up", {
1239
+ error_type: "general",
1240
+ elapsed_ms: elapsed
1241
+ });
1242
+ fatalExit = true;
1243
+ break;
1244
+ }
1245
+ connErrorStart = null;
1246
+ connBackoff = 0;
1247
+ generalBackoff = generalBackoff ? Math.min(generalBackoff * 2, backoffConfig.generalCapMs) : backoffConfig.generalInitialMs;
1248
+ const delay = addJitter(generalBackoff);
1249
+ logger.logVerbose(`Poll failed, retrying in ${formatDelay(delay)} (${Math.round(elapsed / 1000)}s elapsed): ${errMsg}`);
1250
+ logger.updateReconnectingStatus(formatDelay(delay), formatDuration(elapsed));
1251
+ if (getPollIntervalConfig().non_exclusive_heartbeat_interval_ms > 0) {
1252
+ await heartbeatActiveWorkItems();
1253
+ }
1254
+ await sleep(delay, loopSignal);
1255
+ }
1256
+ }
1257
+ }
1258
+ stopStatusUpdates();
1259
+ logger.clearStatus();
1260
+ const loopDurationMs = Date.now() - loopStartTime;
1261
+ logEvent("tengu_bridge_shutdown", {
1262
+ active_sessions: activeSessions.size,
1263
+ loop_duration_ms: loopDurationMs
1264
+ });
1265
+ logForDiagnosticsNoPII("info", "bridge_shutdown", {
1266
+ active_sessions: activeSessions.size,
1267
+ loop_duration_ms: loopDurationMs
1268
+ });
1269
+ const sessionsToArchive = new Set(activeSessions.keys());
1270
+ if (initialSessionId) {
1271
+ sessionsToArchive.add(initialSessionId);
1272
+ }
1273
+ const compatIdSnapshot = new Map(sessionCompatIds);
1274
+ if (activeSessions.size > 0) {
1275
+ logForDebugging(`[bridge:shutdown] Shutting down ${activeSessions.size} active session(s)`);
1276
+ logger.logStatus(`Shutting down ${activeSessions.size} active session(s)\u2026`);
1277
+ const shutdownWorkIds = new Map(sessionWorkIds);
1278
+ for (const [sessionId, handle] of activeSessions.entries()) {
1279
+ logForDebugging(`[bridge:shutdown] Sending SIGTERM to sessionId=${sessionId}`);
1280
+ handle.kill();
1281
+ }
1282
+ const timeout = new AbortController;
1283
+ await Promise.race([
1284
+ Promise.allSettled([...activeSessions.values()].map((h) => h.done)),
1285
+ sleep(backoffConfig.shutdownGraceMs ?? 30000, timeout.signal)
1286
+ ]);
1287
+ timeout.abort();
1288
+ for (const [sid, handle] of activeSessions.entries()) {
1289
+ logForDebugging(`[bridge:shutdown] Force-killing stuck sessionId=${sid}`);
1290
+ handle.forceKill();
1291
+ }
1292
+ for (const timer of sessionTimers.values()) {
1293
+ clearTimeout(timer);
1294
+ }
1295
+ sessionTimers.clear();
1296
+ tokenRefresh?.cancelAll();
1297
+ if (sessionWorktrees.size > 0) {
1298
+ const remainingWorktrees = [...sessionWorktrees.values()];
1299
+ sessionWorktrees.clear();
1300
+ logForDebugging(`[bridge:shutdown] Cleaning up ${remainingWorktrees.length} worktree(s)`);
1301
+ await Promise.allSettled(remainingWorktrees.map((wt) => removeAgentWorktree(wt.worktreePath, wt.worktreeBranch, wt.gitRoot, wt.hookBased)));
1302
+ }
1303
+ await Promise.allSettled([...shutdownWorkIds.entries()].map(([sessionId, workId]) => {
1304
+ return api.stopWork(environmentId, workId, true).catch((err) => logger.logVerbose(`Failed to stop work ${workId} for session ${sessionId}: ${errorMessage(err)}`));
1305
+ }));
1306
+ }
1307
+ if (pendingCleanups.size > 0) {
1308
+ await Promise.allSettled([...pendingCleanups]);
1309
+ }
1310
+ if (false) {}
1311
+ if (sessionsToArchive.size > 0) {
1312
+ logForDebugging(`[bridge:shutdown] Archiving ${sessionsToArchive.size} session(s)`);
1313
+ await Promise.allSettled([...sessionsToArchive].map((sessionId) => api.archiveSession(compatIdSnapshot.get(sessionId) ?? toCompatSessionId(sessionId)).catch((err) => logger.logVerbose(`Failed to archive session ${sessionId}: ${errorMessage(err)}`))));
1314
+ }
1315
+ try {
1316
+ await api.deregisterEnvironment(environmentId);
1317
+ logForDebugging(`[bridge:shutdown] Environment deregistered, bridge offline`);
1318
+ logger.logVerbose("Environment deregistered.");
1319
+ } catch (err) {
1320
+ logger.logVerbose(`Failed to deregister environment: ${errorMessage(err)}`);
1321
+ }
1322
+ const { clearBridgePointer } = await import("./chunk-tcdv4gp8.js");
1323
+ await clearBridgePointer(config.dir);
1324
+ logger.logVerbose("Environment offline.");
1325
+ }
1326
+ var CONNECTION_ERROR_CODES = new Set([
1327
+ "ECONNREFUSED",
1328
+ "ECONNRESET",
1329
+ "ETIMEDOUT",
1330
+ "ENETUNREACH",
1331
+ "EHOSTUNREACH"
1332
+ ]);
1333
+ function isConnectionError(err) {
1334
+ if (err && typeof err === "object" && "code" in err && typeof err.code === "string" && CONNECTION_ERROR_CODES.has(err.code)) {
1335
+ return true;
1336
+ }
1337
+ return false;
1338
+ }
1339
+ function isServerError(err) {
1340
+ return !!err && typeof err === "object" && "code" in err && typeof err.code === "string" && err.code === "ERR_BAD_RESPONSE";
1341
+ }
1342
+ function addJitter(ms) {
1343
+ return Math.max(0, ms + ms * 0.25 * (2 * Math.random() - 1));
1344
+ }
1345
+ function formatDelay(ms) {
1346
+ return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;
1347
+ }
1348
+ async function stopWorkWithRetry(api, environmentId, workId, logger, baseDelayMs = 1000) {
1349
+ const MAX_ATTEMPTS = 3;
1350
+ for (let attempt = 1;attempt <= MAX_ATTEMPTS; attempt++) {
1351
+ try {
1352
+ await api.stopWork(environmentId, workId, false);
1353
+ logForDebugging(`[bridge:work] stopWork succeeded for workId=${workId} on attempt ${attempt}/${MAX_ATTEMPTS}`);
1354
+ return;
1355
+ } catch (err) {
1356
+ if (err instanceof BridgeFatalError) {
1357
+ if (isSuppressible403(err)) {
1358
+ logForDebugging(`[bridge:work] Suppressed stopWork 403 for ${workId}: ${err.message}`);
1359
+ } else {
1360
+ logger.logError(`Failed to stop work ${workId}: ${err.message}`);
1361
+ }
1362
+ logForDiagnosticsNoPII("error", "bridge_stop_work_failed", {
1363
+ attempts: attempt,
1364
+ fatal: true
1365
+ });
1366
+ return;
1367
+ }
1368
+ const errMsg = errorMessage(err);
1369
+ if (attempt < MAX_ATTEMPTS) {
1370
+ const delay = addJitter(baseDelayMs * Math.pow(2, attempt - 1));
1371
+ logger.logVerbose(`Failed to stop work ${workId} (attempt ${attempt}/${MAX_ATTEMPTS}), retrying in ${formatDelay(delay)}: ${errMsg}`);
1372
+ await sleep(delay);
1373
+ } else {
1374
+ logger.logError(`Failed to stop work ${workId} after ${MAX_ATTEMPTS} attempts: ${errMsg}`);
1375
+ logForDiagnosticsNoPII("error", "bridge_stop_work_failed", {
1376
+ attempts: MAX_ATTEMPTS
1377
+ });
1378
+ }
1379
+ }
1380
+ }
1381
+ }
1382
+ function onSessionTimeout(sessionId, timeoutMs, logger, timedOutSessions, handle) {
1383
+ logForDebugging(`[bridge:session] sessionId=${sessionId} timed out after ${formatDuration(timeoutMs)}`);
1384
+ logEvent("tengu_bridge_session_timeout", {
1385
+ timeout_ms: timeoutMs
1386
+ });
1387
+ logger.logSessionFailed(sessionId, `Session timed out after ${formatDuration(timeoutMs)}`);
1388
+ timedOutSessions.add(sessionId);
1389
+ handle.kill();
1390
+ }
1391
+ var TITLE_MAX_LEN = 80;
1392
+ function deriveSessionTitle(text) {
1393
+ const flat = text.replace(/\s+/g, " ").trim();
1394
+ return truncateToWidth(flat, TITLE_MAX_LEN);
1395
+ }
1396
+ async function fetchSessionTitle(compatSessionId, baseUrl) {
1397
+ const { getBridgeSession } = await import("./chunk-c9q0phsg.js");
1398
+ const session = await getBridgeSession(compatSessionId, { baseUrl });
1399
+ return session?.title || undefined;
1400
+ }
1401
+ class BridgeHeadlessPermanentError extends Error {
1402
+ constructor(message) {
1403
+ super(message);
1404
+ this.name = "BridgeHeadlessPermanentError";
1405
+ }
1406
+ }
1407
+ async function runBridgeHeadless(opts, signal) {
1408
+ const { dir, log } = opts;
1409
+ process.chdir(dir);
1410
+ const { setOriginalCwd, setCwdState } = await import("./chunk-168xb8v1.js");
1411
+ setOriginalCwd(dir);
1412
+ setCwdState(dir);
1413
+ const { enableConfigs, checkHasTrustDialogAccepted } = await import("./chunk-ht1nfygk.js");
1414
+ enableConfigs();
1415
+ const { initSinks } = await import("./chunk-559yvwh1.js");
1416
+ initSinks();
1417
+ if (!checkHasTrustDialogAccepted()) {
1418
+ throw new BridgeHeadlessPermanentError(`Workspace not trusted: ${dir}. Run \`claude\` in that directory first to accept the trust dialog.`);
1419
+ }
1420
+ if (!opts.getAccessToken()) {
1421
+ throw new Error(BRIDGE_LOGIN_ERROR);
1422
+ }
1423
+ const { getBridgeBaseUrl } = await import("./chunk-822wfv88.js");
1424
+ const baseUrl = getBridgeBaseUrl();
1425
+ if (baseUrl.startsWith("http://") && !baseUrl.includes("localhost") && !baseUrl.includes("127.0.0.1")) {
1426
+ throw new BridgeHeadlessPermanentError("Remote Control base URL uses HTTP. Only HTTPS or localhost HTTP is allowed.");
1427
+ }
1428
+ const sessionIngressUrl = process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL || baseUrl;
1429
+ const { getBranch, getRemoteUrl, findGitRoot } = await import("./chunk-zzzc1ead.js");
1430
+ const { hasWorktreeCreateHook } = await import("./chunk-1ebqpwhn.js");
1431
+ if (opts.spawnMode === "worktree") {
1432
+ const worktreeAvailable = hasWorktreeCreateHook() || findGitRoot(dir) !== null;
1433
+ if (!worktreeAvailable) {
1434
+ throw new BridgeHeadlessPermanentError(`Worktree mode requires a git repository or WorktreeCreate hooks. Directory ${dir} has neither.`);
1435
+ }
1436
+ }
1437
+ const branch = await getBranch();
1438
+ const gitRepoUrl = await getRemoteUrl();
1439
+ const machineName = hostname();
1440
+ const bridgeId = randomUUID();
1441
+ const config = {
1442
+ dir,
1443
+ machineName,
1444
+ branch,
1445
+ gitRepoUrl,
1446
+ maxSessions: opts.capacity,
1447
+ spawnMode: opts.spawnMode,
1448
+ verbose: false,
1449
+ sandbox: opts.sandbox,
1450
+ bridgeId,
1451
+ workerType: "claude_code",
1452
+ environmentId: randomUUID(),
1453
+ apiBaseUrl: baseUrl,
1454
+ sessionIngressUrl,
1455
+ sessionTimeoutMs: opts.sessionTimeoutMs
1456
+ };
1457
+ const api = createBridgeApiClient({
1458
+ baseUrl,
1459
+ getAccessToken: opts.getAccessToken,
1460
+ runnerVersion: "2.1.888",
1461
+ onDebug: log,
1462
+ onAuth401: opts.onAuth401,
1463
+ getTrustedDeviceToken
1464
+ });
1465
+ let environmentId;
1466
+ let environmentSecret;
1467
+ try {
1468
+ const reg = await api.registerBridgeEnvironment(config);
1469
+ environmentId = reg.environment_id;
1470
+ environmentSecret = reg.environment_secret;
1471
+ } catch (err) {
1472
+ throw new Error(`Bridge registration failed: ${errorMessage(err)}`);
1473
+ }
1474
+ const spawner = createSessionSpawner({
1475
+ execPath: process.execPath,
1476
+ scriptArgs: spawnScriptArgs(),
1477
+ env: process.env,
1478
+ verbose: false,
1479
+ sandbox: opts.sandbox,
1480
+ permissionMode: opts.permissionMode,
1481
+ onDebug: log
1482
+ });
1483
+ const logger = createHeadlessBridgeLogger(log);
1484
+ logger.printBanner(config, environmentId);
1485
+ let initialSessionId;
1486
+ if (opts.createSessionOnStart) {
1487
+ const { createBridgeSession } = await import("./chunk-c9q0phsg.js");
1488
+ try {
1489
+ const sid = await createBridgeSession({
1490
+ environmentId,
1491
+ title: opts.name,
1492
+ events: [],
1493
+ gitRepoUrl,
1494
+ branch,
1495
+ signal,
1496
+ baseUrl,
1497
+ getAccessToken: opts.getAccessToken,
1498
+ permissionMode: opts.permissionMode
1499
+ });
1500
+ if (sid) {
1501
+ initialSessionId = sid;
1502
+ log(`created initial session ${sid}`);
1503
+ }
1504
+ } catch (err) {
1505
+ log(`session pre-creation failed (non-fatal): ${errorMessage(err)}`);
1506
+ }
1507
+ }
1508
+ await runBridgeLoop(config, environmentId, environmentSecret, api, spawner, logger, signal, undefined, initialSessionId, async () => opts.getAccessToken());
1509
+ }
1510
+ function createHeadlessBridgeLogger(log) {
1511
+ const noop = () => {};
1512
+ return {
1513
+ printBanner: (cfg, envId) => log(`registered environmentId=${envId} dir=${cfg.dir} spawnMode=${cfg.spawnMode} capacity=${cfg.maxSessions}`),
1514
+ logSessionStart: (id, _prompt) => log(`session start ${id}`),
1515
+ logSessionComplete: (id, ms) => log(`session complete ${id} (${ms}ms)`),
1516
+ logSessionFailed: (id, err) => log(`session failed ${id}: ${err}`),
1517
+ logStatus: log,
1518
+ logVerbose: log,
1519
+ logError: (s) => log(`error: ${s}`),
1520
+ logReconnected: (ms) => log(`reconnected after ${ms}ms`),
1521
+ addSession: (id, _url) => log(`session attached ${id}`),
1522
+ removeSession: (id) => log(`session detached ${id}`),
1523
+ updateIdleStatus: noop,
1524
+ updateReconnectingStatus: noop,
1525
+ updateSessionStatus: noop,
1526
+ updateSessionActivity: noop,
1527
+ updateSessionCount: noop,
1528
+ updateFailedStatus: noop,
1529
+ setSpawnModeDisplay: noop,
1530
+ setRepoInfo: noop,
1531
+ setDebugLogPath: noop,
1532
+ setAttached: noop,
1533
+ setSessionTitle: noop,
1534
+ clearStatus: noop,
1535
+ toggleQr: noop,
1536
+ refreshDisplay: noop
1537
+ };
1538
+ }
1539
+
1540
+ // src/daemon/workerRegistry.ts
1541
+ init_auth();
1542
+ init_errors();
1543
+ var EXIT_CODE_PERMANENT = 78;
1544
+ var EXIT_CODE_TRANSIENT = 1;
1545
+ async function runDaemonWorker(kind) {
1546
+ if (!kind) {
1547
+ console.error("Error: --daemon-worker requires a worker kind");
1548
+ process.exitCode = EXIT_CODE_PERMANENT;
1549
+ return;
1550
+ }
1551
+ switch (kind) {
1552
+ case "remoteControl":
1553
+ await runRemoteControlWorker();
1554
+ break;
1555
+ default:
1556
+ console.error(`Error: unknown daemon worker kind '${kind}'`);
1557
+ process.exitCode = EXIT_CODE_PERMANENT;
1558
+ }
1559
+ }
1560
+ async function runRemoteControlWorker() {
1561
+ const dir = process.env.DAEMON_WORKER_DIR || resolve2(".");
1562
+ const name = process.env.DAEMON_WORKER_NAME || undefined;
1563
+ const spawnMode = process.env.DAEMON_WORKER_SPAWN_MODE || "same-dir";
1564
+ const capacity = parseInt(process.env.DAEMON_WORKER_CAPACITY || "4", 10);
1565
+ const permissionMode = process.env.DAEMON_WORKER_PERMISSION || undefined;
1566
+ const sandbox = process.env.DAEMON_WORKER_SANDBOX === "1";
1567
+ const sessionTimeoutMs = process.env.DAEMON_WORKER_TIMEOUT_MS ? parseInt(process.env.DAEMON_WORKER_TIMEOUT_MS, 10) : undefined;
1568
+ const createSessionOnStart = process.env.DAEMON_WORKER_CREATE_SESSION !== "0";
1569
+ const controller = new AbortController;
1570
+ const onSignal = () => controller.abort();
1571
+ process.on("SIGTERM", onSignal);
1572
+ process.on("SIGINT", onSignal);
1573
+ const opts = {
1574
+ dir,
1575
+ name,
1576
+ spawnMode,
1577
+ capacity,
1578
+ permissionMode,
1579
+ sandbox,
1580
+ sessionTimeoutMs,
1581
+ createSessionOnStart,
1582
+ getAccessToken: () => getClaudeAIOAuthTokens()?.accessToken,
1583
+ onAuth401: async (_failedToken) => {
1584
+ const tokens = getClaudeAIOAuthTokens();
1585
+ return !!tokens?.accessToken;
1586
+ },
1587
+ log: (s) => {
1588
+ console.log(`[remoteControl] ${s}`);
1589
+ }
1590
+ };
1591
+ try {
1592
+ await runBridgeHeadless(opts, controller.signal);
1593
+ } catch (err) {
1594
+ if (err instanceof BridgeHeadlessPermanentError) {
1595
+ console.error(`[remoteControl] permanent error: ${err.message}`);
1596
+ process.exitCode = EXIT_CODE_PERMANENT;
1597
+ } else {
1598
+ console.error(`[remoteControl] transient error: ${errorMessage(err)}`);
1599
+ process.exitCode = EXIT_CODE_TRANSIENT;
1600
+ }
1601
+ } finally {
1602
+ process.off("SIGTERM", onSignal);
1603
+ process.off("SIGINT", onSignal);
1604
+ }
1605
+ }
1606
+ export {
1607
+ runDaemonWorker
1608
+ };