@qitqode/qitqode-android-arm64 0.2.0 → 0.2.2

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 (418) hide show
  1. package/bun +0 -0
  2. package/bundle/{chunk-cx7p4ezk.js → chunk-03mbn7nj.js} +2 -2
  3. package/bundle/{chunk-rrd0jf5m.js → chunk-07s30fpb.js} +1 -1
  4. package/bundle/{chunk-yacccwf6.js → chunk-087tnr8a.js} +1 -1
  5. package/bundle/chunk-0cdtq1r3.js +2 -0
  6. package/bundle/{chunk-kx2dp8ch.js → chunk-0f3ft9dh.js} +1 -1
  7. package/bundle/{chunk-rgxy4ngt.js → chunk-0gab4v98.js} +1 -1
  8. package/bundle/chunk-0ych0f5w.js +2 -0
  9. package/bundle/{chunk-w8d9srv7.js → chunk-0yjdatm6.js} +2 -2
  10. package/bundle/chunk-0ykeedfm.js +2 -0
  11. package/bundle/{chunk-rph9zj24.js → chunk-0zxwjsvz.js} +1 -1
  12. package/bundle/{chunk-pqnbdygz.js → chunk-1p6jjrea.js} +2 -2
  13. package/bundle/{chunk-9cw4cnz0.js → chunk-1q1cddy4.js} +1 -1
  14. package/bundle/{chunk-w9pdvcf9.js → chunk-1sfcxdbw.js} +2 -2
  15. package/bundle/chunk-22hr3ndh.js +2 -0
  16. package/bundle/chunk-23tyxyyj.js +2 -0
  17. package/bundle/chunk-2517cev8.js +2 -0
  18. package/bundle/chunk-28g1ndpx.js +2 -0
  19. package/bundle/{chunk-txqc7543.js → chunk-29zm623f.js} +2 -2
  20. package/bundle/{chunk-wm77svwm.js → chunk-2a9rzgk6.js} +1 -1
  21. package/bundle/chunk-2avxtbv3.js +2 -0
  22. package/bundle/{chunk-eaqfnwdj.js → chunk-2bgqy6z7.js} +1 -1
  23. package/bundle/{chunk-fyz7fngd.js → chunk-2faah8w1.js} +1 -1
  24. package/bundle/{chunk-9zre5e54.js → chunk-2hv2c8d5.js} +1 -1
  25. package/bundle/{chunk-swcgsrbj.js → chunk-2jpmxt4v.js} +1 -1
  26. package/bundle/chunk-2qk0k2eb.js +2 -0
  27. package/bundle/{chunk-nsjp44fp.js → chunk-2qwmrp16.js} +1 -1
  28. package/bundle/{chunk-dykqn0nj.js → chunk-2xqqkf86.js} +2 -2
  29. package/bundle/{chunk-d9x9kqvy.js → chunk-3888asr7.js} +1 -1
  30. package/bundle/chunk-3c3xzz0g.js +3 -0
  31. package/bundle/{chunk-zfcfyagt.js → chunk-3h49k2ck.js} +1 -1
  32. package/bundle/{chunk-r0g5yyhf.js → chunk-3jms025t.js} +1 -1
  33. package/bundle/{chunk-52b1v7mn.js → chunk-3qfpw8f6.js} +1 -1
  34. package/bundle/{chunk-v3x5nrc4.js → chunk-3tmq81kq.js} +2 -2
  35. package/bundle/{chunk-neqy8j4n.js → chunk-42r7z6sq.js} +1 -1
  36. package/bundle/chunk-42wdfks8.js +2 -0
  37. package/bundle/{chunk-kp8nkm3m.js → chunk-44y6dffe.js} +1 -1
  38. package/bundle/{chunk-j5kyf7vt.js → chunk-45fyv9f1.js} +2 -2
  39. package/bundle/chunk-4f19vqxf.js +2 -0
  40. package/bundle/{chunk-d93z6hrn.js → chunk-4fk46ngj.js} +1 -1
  41. package/bundle/{chunk-njkserae.js → chunk-4hd3v58j.js} +1 -1
  42. package/bundle/chunk-4m3k1atq.js +2 -0
  43. package/bundle/{chunk-1wpjmwnh.js → chunk-4mvg7jt1.js} +1 -1
  44. package/bundle/chunk-4n2ytddp.js +2 -0
  45. package/bundle/{chunk-zesbm9k1.js → chunk-4sxg9cgr.js} +1 -1
  46. package/bundle/{chunk-8fgamz4y.js → chunk-4v61ysex.js} +1 -1
  47. package/bundle/chunk-4yg42p6y.js +2 -0
  48. package/bundle/chunk-4zx3ze68.js +2 -0
  49. package/bundle/{chunk-qq2rcxv2.js → chunk-543pt030.js} +2 -2
  50. package/bundle/{chunk-rexdr63q.js → chunk-5az84brc.js} +2 -2
  51. package/bundle/{chunk-pnpre7ys.js → chunk-5js6a6gf.js} +1 -1
  52. package/bundle/{chunk-y0ydzdfc.js → chunk-5t0w9ecw.js} +1 -1
  53. package/bundle/{chunk-nq495be3.js → chunk-5wwd40t3.js} +1 -1
  54. package/bundle/chunk-637sjdzq.js +2 -0
  55. package/bundle/{chunk-snt1kefv.js → chunk-64c8q9zg.js} +3 -3
  56. package/bundle/{chunk-g794ey6w.js → chunk-6avjq7my.js} +1 -1
  57. package/bundle/{chunk-n0trgp1c.js → chunk-6dfjtzqb.js} +2 -2
  58. package/bundle/{chunk-dz3s882k.js → chunk-6f8qqbac.js} +189 -189
  59. package/bundle/chunk-6h8f89tt.js +2 -0
  60. package/bundle/{chunk-b0jh0rby.js → chunk-6j339s7a.js} +2 -2
  61. package/bundle/{chunk-8q6z6emx.js → chunk-6kf4vw2g.js} +1 -1
  62. package/bundle/{chunk-hgsykghj.js → chunk-6pcmv8vs.js} +2 -2
  63. package/bundle/chunk-6sjj203r.js +2 -0
  64. package/bundle/{chunk-kt0ej3nq.js → chunk-6ypafpg8.js} +1 -1
  65. package/bundle/{chunk-p8kpqyxb.js → chunk-732yr6qq.js} +2 -2
  66. package/bundle/{chunk-3sz6gw10.js → chunk-73fz0cf4.js} +2 -2
  67. package/bundle/chunk-79aka9xe.js +2 -0
  68. package/bundle/{chunk-s2xdf6qh.js → chunk-7ab3yw9j.js} +2 -2
  69. package/bundle/{chunk-8tp4whyw.js → chunk-7my2231h.js} +1 -1
  70. package/bundle/{chunk-vvzbfv2f.js → chunk-7njz51r4.js} +1 -1
  71. package/bundle/chunk-7nqdhe7x.js +2 -0
  72. package/bundle/{chunk-zaan8jk6.js → chunk-7ntw4rrn.js} +1 -1
  73. package/bundle/chunk-7q003wdd.js +4 -0
  74. package/bundle/chunk-7x88b2n2.js +2 -0
  75. package/bundle/{chunk-6r8pg6ma.js → chunk-7z884mz2.js} +1 -1
  76. package/bundle/{chunk-17pxm5d3.js → chunk-7zc04q43.js} +2 -2
  77. package/bundle/{chunk-v7q3d3n6.js → chunk-85xh72hk.js} +2 -2
  78. package/bundle/{chunk-jgz1a29w.js → chunk-86jsqc7d.js} +3 -3
  79. package/bundle/{chunk-zbqzm65q.js → chunk-86yk21g4.js} +1 -1
  80. package/bundle/{chunk-aj3y2e86.js → chunk-8apeexas.js} +1 -1
  81. package/bundle/{chunk-xjhezxft.js → chunk-8d6e4jg7.js} +3 -3
  82. package/bundle/{chunk-w3bmf3zz.js → chunk-8e6gx3gg.js} +1 -1
  83. package/bundle/chunk-8mthftwc.js +2 -0
  84. package/bundle/{chunk-73ckx171.js → chunk-8q5ns61h.js} +1 -1
  85. package/bundle/{chunk-549ptbaj.js → chunk-8rh0femq.js} +1 -1
  86. package/bundle/{chunk-qyjt0qnq.js → chunk-8v6x712g.js} +2 -2
  87. package/bundle/chunk-8wdara3b.js +2 -0
  88. package/bundle/chunk-8xhzpnph.js +2 -0
  89. package/bundle/{chunk-z0tfsdb9.js → chunk-91z7azf7.js} +1 -1
  90. package/bundle/{chunk-kqhh2pm9.js → chunk-94qhpkfx.js} +1 -1
  91. package/bundle/{chunk-g8cfzzrs.js → chunk-96sqbyvf.js} +1 -1
  92. package/bundle/{chunk-gxmxx8jb.js → chunk-99148b1k.js} +1 -1
  93. package/bundle/chunk-9akz8w0d.js +2 -0
  94. package/bundle/{chunk-7gbytqkn.js → chunk-9b4aqcde.js} +2 -2
  95. package/bundle/{chunk-nhwhkx62.js → chunk-9bm9z52r.js} +1 -1
  96. package/bundle/{chunk-tdmn21z0.js → chunk-9ea1n338.js} +2 -2
  97. package/bundle/chunk-9etpppyv.js +3 -0
  98. package/bundle/{chunk-vgaxv70x.js → chunk-9jrxrjzt.js} +2 -2
  99. package/bundle/{chunk-3bkdbqjj.js → chunk-9jsgs71h.js} +1 -1
  100. package/bundle/chunk-9pnpmtb2.js +2 -0
  101. package/bundle/{chunk-pxx2hz0g.js → chunk-9rxyq6f9.js} +2 -2
  102. package/bundle/chunk-9s785py4.js +28 -0
  103. package/bundle/{chunk-9fkmhmh6.js → chunk-9y15zjxa.js} +1 -1
  104. package/bundle/{chunk-mdzzcrf9.js → chunk-a2dz9nqh.js} +2 -2
  105. package/bundle/{chunk-rtdym35y.js → chunk-a550vst5.js} +149 -141
  106. package/bundle/{chunk-46ztrjw0.js → chunk-a5pbvp1f.js} +1 -1
  107. package/bundle/chunk-a7p0x4sw.js +2 -0
  108. package/bundle/{chunk-ev3a2sxv.js → chunk-a92hh67a.js} +2 -2
  109. package/bundle/chunk-ae0a496j.js +2 -0
  110. package/bundle/chunk-aq1j9y18.js +2 -0
  111. package/bundle/chunk-aq8nz9hp.js +2 -0
  112. package/bundle/{chunk-zxddasg8.js → chunk-as845ya4.js} +1 -1
  113. package/bundle/chunk-b4zy78be.js +2 -0
  114. package/bundle/{chunk-45mjcxqk.js → chunk-b50t4jc5.js} +1 -1
  115. package/bundle/chunk-basjzwqp.js +2 -0
  116. package/bundle/{chunk-d1rn44wz.js → chunk-bbbh69ys.js} +1 -1
  117. package/bundle/{chunk-mw2hr4pd.js → chunk-bcx2vkv4.js} +1 -1
  118. package/bundle/{chunk-72zxassf.js → chunk-bggybm9k.js} +1 -1
  119. package/bundle/{chunk-4gs87ghj.js → chunk-bgng3rdj.js} +2 -2
  120. package/bundle/chunk-bhetpmgq.js +3 -0
  121. package/bundle/{chunk-bnz0mxak.js → chunk-bk3z400e.js} +1 -1
  122. package/bundle/chunk-bm7xpjh6.js +2 -0
  123. package/bundle/chunk-c1bw1q75.js +2 -0
  124. package/bundle/{chunk-7fawtcnn.js → chunk-c1g8n10t.js} +1 -1
  125. package/bundle/chunk-c2k556rk.js +2 -0
  126. package/bundle/chunk-c47vp7ne.js +2 -0
  127. package/bundle/{chunk-w03fdrxe.js → chunk-cbf1y12x.js} +1 -1
  128. package/bundle/chunk-cbhgf058.js +2 -0
  129. package/bundle/{chunk-vc4e6xc4.js → chunk-cbmwhvxw.js} +2 -2
  130. package/bundle/{chunk-5bate758.js → chunk-cp39f96a.js} +1 -1
  131. package/bundle/{chunk-9nk0ts0s.js → chunk-d307vb2d.js} +1 -1
  132. package/bundle/chunk-d41mg7at.js +2 -0
  133. package/bundle/chunk-d50kpss6.js +2 -0
  134. package/bundle/chunk-day0rb5p.js +2 -0
  135. package/bundle/{chunk-ws3p9cya.js → chunk-dbztxdea.js} +2 -2
  136. package/bundle/chunk-dp7cww4v.js +2 -0
  137. package/bundle/{chunk-yeq7b87a.js → chunk-drwqag0f.js} +1 -1
  138. package/bundle/chunk-dy31mchw.js +3 -0
  139. package/bundle/{chunk-5myxjxae.js → chunk-e374shb8.js} +2 -2
  140. package/bundle/{chunk-qdcf1ay5.js → chunk-e586sjb0.js} +2 -2
  141. package/bundle/{chunk-pr1ysgr3.js → chunk-e5rda9mx.js} +1 -1
  142. package/bundle/{chunk-qs4wef8c.js → chunk-e6wp96vm.js} +1 -1
  143. package/bundle/chunk-e999xtfj.js +2 -0
  144. package/bundle/{chunk-n7d9eemn.js → chunk-ehfxypks.js} +216 -218
  145. package/bundle/{chunk-gnt982jr.js → chunk-epa576pa.js} +3 -3
  146. package/bundle/{chunk-m0xsvzyd.js → chunk-et5dnymk.js} +2 -2
  147. package/bundle/chunk-eyr0vf92.js +2 -0
  148. package/bundle/{chunk-02xcb52z.js → chunk-ezfzb8qc.js} +2 -2
  149. package/bundle/{chunk-4sazy0nq.js → chunk-f83wv08n.js} +1 -1
  150. package/bundle/{chunk-3dr4469n.js → chunk-fbm6qczy.js} +1 -1
  151. package/bundle/{chunk-0g25z230.js → chunk-fd7fmvyw.js} +1 -1
  152. package/bundle/{chunk-0z33en1a.js → chunk-fgn83bs7.js} +1 -1
  153. package/bundle/{chunk-dshnn54c.js → chunk-fpm2vgz6.js} +1 -1
  154. package/bundle/{chunk-px8vtbmr.js → chunk-frsd6e1h.js} +2 -2
  155. package/bundle/{chunk-w5940jxm.js → chunk-fvy24yhq.js} +1 -1
  156. package/bundle/{chunk-dt899wbf.js → chunk-g3kd4957.js} +2 -2
  157. package/bundle/chunk-g7k6ecb2.js +11 -0
  158. package/bundle/chunk-gbmmbhy4.js +2 -0
  159. package/bundle/chunk-gp877cq5.js +2 -0
  160. package/bundle/{chunk-tgd5ctnt.js → chunk-gr4bctqj.js} +2 -2
  161. package/bundle/{chunk-dvxk6mr6.js → chunk-grw4gg9j.js} +2 -2
  162. package/bundle/{chunk-mvnxwwe7.js → chunk-gtjn3yc4.js} +2 -2
  163. package/bundle/{chunk-m6zxr0j8.js → chunk-h10wjk96.js} +2 -2
  164. package/bundle/{chunk-cxtxvt43.js → chunk-h2bmss2m.js} +1 -1
  165. package/bundle/chunk-h4f582d6.js +2 -0
  166. package/bundle/chunk-h57c6ne3.js +2 -0
  167. package/bundle/chunk-hk8vvc10.js +2 -0
  168. package/bundle/{chunk-x42w8ewc.js → chunk-hnrqhcgq.js} +1 -1
  169. package/bundle/{chunk-hcy77w6t.js → chunk-hq9bgnqb.js} +1 -1
  170. package/bundle/{chunk-gkj4a27z.js → chunk-hrw5rmj1.js} +1 -1
  171. package/bundle/{chunk-n2ygpy76.js → chunk-hs3vfhar.js} +1 -1
  172. package/bundle/chunk-hwavzxdm.js +2 -0
  173. package/bundle/chunk-hwnc2sa5.js +2 -0
  174. package/bundle/chunk-hy86wfad.js +2 -0
  175. package/bundle/{chunk-aw8af3ky.js → chunk-j17421hz.js} +1 -1
  176. package/bundle/chunk-j2gvpa15.js +2 -0
  177. package/bundle/{chunk-te5tfq79.js → chunk-j3jqk62r.js} +1 -1
  178. package/bundle/{chunk-jqn27885.js → chunk-j5ymkhry.js} +1 -1
  179. package/bundle/chunk-j7n8khk7.js +2 -0
  180. package/bundle/chunk-jkh98wby.js +2 -0
  181. package/bundle/{chunk-h7w35n7w.js → chunk-jv4th87b.js} +1 -1
  182. package/bundle/{chunk-j63fkt6n.js → chunk-jvjq554f.js} +1 -1
  183. package/bundle/{chunk-00sr2gwz.js → chunk-jw114bbt.js} +2 -2
  184. package/bundle/{chunk-ax1y4699.js → chunk-jwph7tpc.js} +1 -1
  185. package/bundle/{chunk-xdacgfba.js → chunk-k1gddnkm.js} +1 -1
  186. package/bundle/chunk-k5a652s4.js +2 -0
  187. package/bundle/{chunk-1mcsf4yb.js → chunk-k6cbfrzc.js} +2 -2
  188. package/bundle/chunk-k6w32q2p.js +2 -0
  189. package/bundle/{chunk-5kmfnkzv.js → chunk-kdcnder5.js} +1 -1
  190. package/bundle/chunk-kghwk0yh.js +2 -0
  191. package/bundle/chunk-kh8de8re.js +2 -0
  192. package/bundle/{chunk-r6ndvzd0.js → chunk-km1n4ttr.js} +1 -1
  193. package/bundle/{chunk-tzrbb0e8.js → chunk-kmwy6c9g.js} +2 -2
  194. package/bundle/{chunk-ydc6ypjt.js → chunk-ks1cs80p.js} +2 -2
  195. package/bundle/{chunk-08q55ya0.js → chunk-kxjrrdj0.js} +1 -1
  196. package/bundle/{chunk-jts0dma5.js → chunk-kzvvvj79.js} +2 -2
  197. package/bundle/chunk-mce8aa9y.js +2 -0
  198. package/bundle/chunk-me1ja46g.js +2 -0
  199. package/bundle/chunk-mgadsp7r.js +2 -0
  200. package/bundle/{chunk-hb9mc5f9.js → chunk-mpe8zxc0.js} +1 -1
  201. package/bundle/{chunk-eb8nsk7e.js → chunk-mrn44msr.js} +2 -2
  202. package/bundle/{chunk-yykjvt7f.js → chunk-mswx4k75.js} +2 -2
  203. package/bundle/{chunk-std2bgv7.js → chunk-mxhb5adq.js} +2 -2
  204. package/bundle/{chunk-gwfx7tx7.js → chunk-my3cswnp.js} +2 -2
  205. package/bundle/chunk-n0k0pp4k.js +2 -0
  206. package/bundle/chunk-n393nnh5.js +2 -0
  207. package/bundle/chunk-n5vyed7w.js +2 -0
  208. package/bundle/{chunk-jf6ry79j.js → chunk-n7kqdqkh.js} +4 -4
  209. package/bundle/{chunk-tdxbm1nd.js → chunk-n90eh3e7.js} +1 -1
  210. package/bundle/{chunk-s8mghr5a.js → chunk-ngvp6zc2.js} +2 -2
  211. package/bundle/{chunk-mcc5ynma.js → chunk-p4ewy9xh.js} +3 -3
  212. package/bundle/{chunk-vgnddhdj.js → chunk-p635phfw.js} +1 -1
  213. package/bundle/{chunk-dgx4rq86.js → chunk-p887g1xj.js} +1 -1
  214. package/bundle/{chunk-7jhrxzjx.js → chunk-p9mj4zyk.js} +2 -2
  215. package/bundle/chunk-pasm65wq.js +2 -0
  216. package/bundle/{chunk-xdjwapwy.js → chunk-pfkm3j8g.js} +2 -2
  217. package/bundle/chunk-phpmxjf8.js +2 -0
  218. package/bundle/{chunk-9dh9bc9d.js → chunk-pp9neaaz.js} +1 -1
  219. package/bundle/{chunk-c72jajx9.js → chunk-pzefsndd.js} +1 -1
  220. package/bundle/{chunk-dh1h513y.js → chunk-q128vfc6.js} +1 -1
  221. package/bundle/chunk-q2q3dmg3.js +2 -0
  222. package/bundle/chunk-q46pzk9z.js +8 -0
  223. package/bundle/{chunk-4fa390yr.js → chunk-q4fn41ex.js} +2 -2
  224. package/bundle/{chunk-zrmx397j.js → chunk-q5abwn50.js} +1 -1
  225. package/bundle/{chunk-7vftsy04.js → chunk-qaz100ht.js} +1 -1
  226. package/bundle/{chunk-pnq1h5az.js → chunk-qhnpq5gb.js} +2 -2
  227. package/bundle/chunk-qvzvxsjw.js +2 -0
  228. package/bundle/{chunk-yzwgvjzd.js → chunk-r0s28gnb.js} +1 -1
  229. package/bundle/chunk-racrb1b3.js +2 -0
  230. package/bundle/{chunk-yj6rbe9p.js → chunk-rcyzqa3g.js} +2 -2
  231. package/bundle/{chunk-70pb4kcm.js → chunk-rdwma0de.js} +2 -2
  232. package/bundle/{chunk-25bp7pcm.js → chunk-rk2bk4s7.js} +2 -2
  233. package/bundle/{chunk-x6rr6ss1.js → chunk-rm5ntsvn.js} +1 -1
  234. package/bundle/{chunk-xhbb8b5g.js → chunk-rp8asmq7.js} +1 -1
  235. package/bundle/{chunk-z1rshv6g.js → chunk-rpfhgncs.js} +1 -1
  236. package/bundle/{chunk-gt6tgm42.js → chunk-s0c0t6qr.js} +1 -1
  237. package/bundle/{chunk-cagk1sjd.js → chunk-s0ptrw0z.js} +1 -1
  238. package/bundle/{chunk-yw9pfqxt.js → chunk-s0ty36qg.js} +1 -1
  239. package/bundle/{chunk-kb6v5hhm.js → chunk-s77qktcn.js} +2 -2
  240. package/bundle/{chunk-sxy4hyyy.js → chunk-sghy9s7m.js} +1 -1
  241. package/bundle/{chunk-k7n1csxv.js → chunk-sjreby6e.js} +1 -1
  242. package/bundle/chunk-skpkjnyy.js +2 -0
  243. package/bundle/{chunk-8r3410c2.js → chunk-skv9ww0s.js} +1 -1
  244. package/bundle/chunk-skxhg212.js +2 -0
  245. package/bundle/chunk-snt4kwab.js +2 -0
  246. package/bundle/chunk-sq47t8f1.js +2 -0
  247. package/bundle/chunk-sqhgnvvs.js +2 -0
  248. package/bundle/{chunk-ztnepaqc.js → chunk-ssdw9zre.js} +1 -1
  249. package/bundle/chunk-t114r59h.js +2 -0
  250. package/bundle/{chunk-909fp6pm.js → chunk-t1475j9f.js} +1 -1
  251. package/bundle/chunk-t1f56k0j.js +2 -0
  252. package/bundle/{chunk-9s4whpg1.js → chunk-t1jgx17a.js} +2 -2
  253. package/bundle/chunk-t69jx6fz.js +2 -0
  254. package/bundle/{chunk-srxx88nb.js → chunk-t9zbp2qw.js} +1 -1
  255. package/bundle/{chunk-jcjaw7tk.js → chunk-ta7mfkms.js} +2 -2
  256. package/bundle/{chunk-fn8191ps.js → chunk-tczbhj0e.js} +1 -1
  257. package/bundle/{chunk-h1kg35mn.js → chunk-tge53d52.js} +1 -1
  258. package/bundle/{chunk-2pzvcpv4.js → chunk-tj3rem3q.js} +2 -2
  259. package/bundle/chunk-tsb3jsx4.js +2 -0
  260. package/bundle/chunk-ttpbpzbh.js +2 -0
  261. package/bundle/{chunk-2dkrfc1s.js → chunk-v5z6sx6j.js} +1 -1
  262. package/bundle/chunk-v667egp5.js +2 -0
  263. package/bundle/{chunk-60qyqqxx.js → chunk-v9rg0a8g.js} +1 -1
  264. package/bundle/{chunk-jngchw38.js → chunk-ve3np791.js} +1 -1
  265. package/bundle/{chunk-wev34grp.js → chunk-vhe92p7a.js} +2 -2
  266. package/bundle/{chunk-ceefd2nj.js → chunk-vk88jj60.js} +1 -1
  267. package/bundle/{chunk-atpzz901.js → chunk-vm1ek7yf.js} +1 -1
  268. package/bundle/{chunk-3mepk08v.js → chunk-vqpfpmha.js} +2 -2
  269. package/bundle/{chunk-cdh26622.js → chunk-vqss3e48.js} +2 -2
  270. package/bundle/chunk-vrv67tt0.js +2 -0
  271. package/bundle/chunk-vtw0wwch.js +17 -0
  272. package/bundle/{chunk-z7vv0ngm.js → chunk-vyh300ac.js} +2 -2
  273. package/bundle/{chunk-qpzspr9z.js → chunk-w30b563s.js} +2 -2
  274. package/bundle/{chunk-ewpzqnj4.js → chunk-w79jzf8w.js} +1 -1
  275. package/bundle/{chunk-yha554nm.js → chunk-w7em72p8.js} +2 -2
  276. package/bundle/chunk-wcqfr8vr.js +3 -0
  277. package/bundle/chunk-wcx7hc2p.js +635 -0
  278. package/bundle/{chunk-r58gzg6m.js → chunk-wdaf713t.js} +1 -1
  279. package/bundle/{chunk-ymtcm4xd.js → chunk-wf4x5cjc.js} +1 -1
  280. package/bundle/{chunk-vsys768k.js → chunk-wfggztm4.js} +1 -1
  281. package/bundle/chunk-wv8qx8sa.js +2 -0
  282. package/bundle/{chunk-acyj91wq.js → chunk-x2cavpa9.js} +1 -1
  283. package/bundle/{chunk-qb35hqm4.js → chunk-x4pdpka8.js} +1 -1
  284. package/bundle/{chunk-vm58fkrv.js → chunk-xd3xc1vv.js} +1 -1
  285. package/bundle/{chunk-v0yxkq99.js → chunk-xmjntwjc.js} +2 -2
  286. package/bundle/{chunk-64s7vfj7.js → chunk-xny5ecn0.js} +2 -2
  287. package/bundle/chunk-xxrtr6sd.js +2 -0
  288. package/bundle/chunk-y287zwkr.js +10 -0
  289. package/bundle/{chunk-ypk3t1eh.js → chunk-y2ptjam9.js} +1 -1
  290. package/bundle/{chunk-ezrskm25.js → chunk-y3dfk6n5.js} +1 -1
  291. package/bundle/{chunk-t01bhw5h.js → chunk-y4e7e42x.js} +3 -3
  292. package/bundle/{chunk-98effz12.js → chunk-y6h35v4a.js} +1 -1
  293. package/bundle/chunk-y72p79v2.js +2 -0
  294. package/bundle/chunk-y8eggnrr.js +2 -0
  295. package/bundle/chunk-y9q0f9qz.js +2 -0
  296. package/bundle/{chunk-9xvctnjr.js → chunk-yajd975f.js} +1 -1
  297. package/bundle/chunk-yck5h49c.js +2 -0
  298. package/bundle/{chunk-8yr682pv.js → chunk-yd2emszh.js} +2 -2
  299. package/bundle/{chunk-p9zrk16q.js → chunk-yd8bzhv6.js} +1 -1
  300. package/bundle/chunk-yhsnmpzv.js +2 -0
  301. package/bundle/{chunk-y1b2h15z.js → chunk-ypcc3cnb.js} +1 -1
  302. package/bundle/{chunk-qy1a2tpc.js → chunk-yr35q7q1.js} +1 -1
  303. package/bundle/{chunk-rcyhqkv5.js → chunk-yrfq22a5.js} +1 -1
  304. package/bundle/{chunk-gg7bg3ek.js → chunk-yvjke593.js} +1 -1
  305. package/bundle/{chunk-871f8x99.js → chunk-ywdtp534.js} +2 -2
  306. package/bundle/{chunk-zfnbk5gy.js → chunk-ywkvq7zb.js} +1 -1
  307. package/bundle/{chunk-p3rp99na.js → chunk-yx1h0b5v.js} +1 -1
  308. package/bundle/{chunk-mzbr0m2v.js → chunk-yz0pwv2m.js} +1 -1
  309. package/bundle/{chunk-q81m4m9z.js → chunk-z2h1gxyx.js} +1 -1
  310. package/bundle/chunk-zcp0wx4j.js +5 -0
  311. package/bundle/{chunk-qqne79vp.js → chunk-zdzxsyxs.js} +2 -2
  312. package/bundle/{chunk-yzh4rmrt.js → chunk-zek5c15t.js} +1 -1
  313. package/bundle/{chunk-8dxdeksr.js → chunk-zfd70p01.js} +1 -1
  314. package/bundle/index.js +3 -3
  315. package/bundle/parser.worker.js +2 -2
  316. package/bundle/worker.js +1 -1
  317. package/package.json +1 -1
  318. package/bundle/chunk-092bx2yw.js +0 -2
  319. package/bundle/chunk-0jrgk6vk.js +0 -2
  320. package/bundle/chunk-0ne5m1n3.js +0 -2
  321. package/bundle/chunk-0qn52zsd.js +0 -2
  322. package/bundle/chunk-10accb7b.js +0 -2
  323. package/bundle/chunk-13kpdfr7.js +0 -2
  324. package/bundle/chunk-15s8zwgf.js +0 -2
  325. package/bundle/chunk-1bx2sjn6.js +0 -11
  326. package/bundle/chunk-1kgyfja6.js +0 -2
  327. package/bundle/chunk-4dtkj9zg.js +0 -2
  328. package/bundle/chunk-4e9p3e0a.js +0 -2
  329. package/bundle/chunk-4tbqsrsn.js +0 -2
  330. package/bundle/chunk-53kns5wy.js +0 -2
  331. package/bundle/chunk-559ek1ym.js +0 -2
  332. package/bundle/chunk-55wxgsga.js +0 -2
  333. package/bundle/chunk-5ke0yqqz.js +0 -8
  334. package/bundle/chunk-5q1fz2az.js +0 -2
  335. package/bundle/chunk-5sgpjgss.js +0 -10
  336. package/bundle/chunk-88emsbaz.js +0 -2
  337. package/bundle/chunk-8yn64y27.js +0 -2
  338. package/bundle/chunk-8ywa7az5.js +0 -2
  339. package/bundle/chunk-8ywdddts.js +0 -2
  340. package/bundle/chunk-92zjark4.js +0 -2
  341. package/bundle/chunk-a6z0fhta.js +0 -2
  342. package/bundle/chunk-akpssv2d.js +0 -2
  343. package/bundle/chunk-aq28ejhv.js +0 -2
  344. package/bundle/chunk-b10px5g4.js +0 -2
  345. package/bundle/chunk-bha3sbsj.js +0 -2
  346. package/bundle/chunk-bs020a3x.js +0 -2
  347. package/bundle/chunk-bs61sezq.js +0 -2
  348. package/bundle/chunk-cmdjkx32.js +0 -2
  349. package/bundle/chunk-de2rfsaf.js +0 -2
  350. package/bundle/chunk-dncnyzaa.js +0 -2
  351. package/bundle/chunk-dp6zktka.js +0 -2
  352. package/bundle/chunk-dvqdtdza.js +0 -2
  353. package/bundle/chunk-ebabnv33.js +0 -3
  354. package/bundle/chunk-ebdpg3cn.js +0 -2
  355. package/bundle/chunk-eyc6tb5h.js +0 -2
  356. package/bundle/chunk-eze57bty.js +0 -2
  357. package/bundle/chunk-fa47vzfc.js +0 -2
  358. package/bundle/chunk-fe397ph0.js +0 -2
  359. package/bundle/chunk-fr75ytdr.js +0 -2
  360. package/bundle/chunk-fw2tnbt6.js +0 -2
  361. package/bundle/chunk-fwr2qgqb.js +0 -2
  362. package/bundle/chunk-g204pt98.js +0 -2
  363. package/bundle/chunk-gcgmwqhh.js +0 -2
  364. package/bundle/chunk-grdfpd57.js +0 -2
  365. package/bundle/chunk-gw36mrg4.js +0 -2
  366. package/bundle/chunk-h36qec67.js +0 -2
  367. package/bundle/chunk-h9gtymfm.js +0 -2
  368. package/bundle/chunk-h9qn35pn.js +0 -2
  369. package/bundle/chunk-hd8q4msp.js +0 -2
  370. package/bundle/chunk-hhjkezfz.js +0 -2
  371. package/bundle/chunk-hnz570f9.js +0 -3
  372. package/bundle/chunk-jfz8wwk9.js +0 -2
  373. package/bundle/chunk-js6hqmq7.js +0 -2
  374. package/bundle/chunk-k70x182t.js +0 -2
  375. package/bundle/chunk-kmtfdky8.js +0 -4
  376. package/bundle/chunk-kwzawx7r.js +0 -2
  377. package/bundle/chunk-m0mek3es.js +0 -2
  378. package/bundle/chunk-m31d2n6h.js +0 -2
  379. package/bundle/chunk-n14qktbg.js +0 -2
  380. package/bundle/chunk-n38h109k.js +0 -17
  381. package/bundle/chunk-nzzsj54n.js +0 -2
  382. package/bundle/chunk-p19qfw59.js +0 -2
  383. package/bundle/chunk-p2yxj9s4.js +0 -2
  384. package/bundle/chunk-ps9p14y6.js +0 -2
  385. package/bundle/chunk-qagc6v17.js +0 -2
  386. package/bundle/chunk-qc0zhbhm.js +0 -2
  387. package/bundle/chunk-r78kfhvz.js +0 -2
  388. package/bundle/chunk-rnd5mnsm.js +0 -2
  389. package/bundle/chunk-schtpyjs.js +0 -2
  390. package/bundle/chunk-sp8ek94w.js +0 -5
  391. package/bundle/chunk-sv1s1qxd.js +0 -619
  392. package/bundle/chunk-sxwqrvmy.js +0 -28
  393. package/bundle/chunk-syc4b8rt.js +0 -2
  394. package/bundle/chunk-tcs6wgna.js +0 -3
  395. package/bundle/chunk-tf4xwqz7.js +0 -2
  396. package/bundle/chunk-twhavv1m.js +0 -2
  397. package/bundle/chunk-tzg4z74d.js +0 -2
  398. package/bundle/chunk-v8vcwx23.js +0 -2
  399. package/bundle/chunk-vftqwdpg.js +0 -3
  400. package/bundle/chunk-w6rf2knb.js +0 -2
  401. package/bundle/chunk-wh7r96t3.js +0 -2
  402. package/bundle/chunk-wnjqaxze.js +0 -2
  403. package/bundle/chunk-xc9se3c8.js +0 -2
  404. package/bundle/chunk-xfz698bh.js +0 -2
  405. package/bundle/chunk-xxj3sgd5.js +0 -2
  406. package/bundle/chunk-xxvqq7kc.js +0 -2
  407. package/bundle/chunk-ye0mkqb4.js +0 -2
  408. package/bundle/chunk-yfp9y71y.js +0 -2
  409. package/bundle/chunk-yjjh339w.js +0 -2
  410. package/bundle/chunk-yt6vd7a5.js +0 -2
  411. package/bundle/chunk-yzn08nx1.js +0 -2
  412. package/bundle/chunk-yzq3c3dq.js +0 -2
  413. package/bundle/chunk-z1j25911.js +0 -2
  414. package/bundle/chunk-z210dtw1.js +0 -3
  415. package/bundle/chunk-z29ahthm.js +0 -2
  416. package/bundle/chunk-zgre4gc2.js +0 -2
  417. package/bundle/chunk-zthkjx33.js +0 -2
  418. package/bundle/chunk-zwvwbrsc.js +0 -2
@@ -1,619 +0,0 @@
1
- // @bun
2
- import{$g as c$,Ah as D$,Bh as K1,Ch as C4,Dh as m4,Eh as G7,Fh as oB,Gh as FJ,Hh as t9,Ih as W0,Jh as g2,Kh as U5,Lh as A5,Mh as M5,Nh as _5,Oh as P6,Ph as R5,Qh as p5,Yg as B8,Zg as mB,_g as V8,ah as lB,bh as xQ,ch as j$,dh as F$,eh as TJ,fh as hJ,gh as $7,hh as VQ,ih as G1,kh as g5,mh as b6,nh as O1,ph as cB,rh as H$,th as rJ,uh as uB,vh as Q$,xh as M0,yh as n4,zh as b5}from"./chunk-n7d9eemn.js";import{Rh as FY}from"./chunk-pxx2hz0g.js";import{Ji as A7}from"./chunk-mdzzcrf9.js";import{$j as D2,$k as dY,Ck as N5,Lj as p,Lk as w5,Mj as R$,Mk as z2,Ok as x5,Pk as L5,Qj as m8,Qk as n9,Sj as E9,Vj as i4,Wj as yZ,Zj as W8,_j as M1,ak as w2,al as _6,bk as Q2,bl as M2,cl as i8,dk as r6,dl as H2,ek as J$,el as i2,gl as y2,hl as iB,ik as qJ,il as o,jk as PJ,jl as UQ,ll as U2,mk as q0,ml as s9,nk as e$,nl as M6,ok as t0,ol as D7,pk as q5,pl as f2,qk as iZ,ql as d0,rk as nZ,rl as J2,sk as P5,sl as B2,wk as gK,xk as EK}from"./chunk-rtdym35y.js";import{ul as pB}from"./chunk-5myxjxae.js";import{Fl as Z7,Il as WB,Jl as FZ,Kl as S0,Pl as D1,Sl as r2,Tl as l$,Ul as F8,Vl as C$,Wl as D5,Zl as kJ,_l as U$,am as S2,bm as d,cm as NB,dm as D0,em as oZ}from"./chunk-sp8ek94w.js";import{gm as n1,hm as s1,im as a1,lm as dJ,mm as O2}from"./chunk-gnt982jr.js";import{Dn as fY,En as vY,Gn as cQ,Tn as uQ,Un as v8,pn as W1,qn as X0,rn as e1,sn as R4,vn as G0,xn as EY}from"./chunk-1bx2sjn6.js";import{cp as dB}from"./chunk-n38h109k.js";import{wp as pJ,yp as iJ}from"./chunk-qdcf1ay5.js";import{sq as $0}from"./chunk-xjhezxft.js";import{Xq as W$,Yq as iY,hr as r$,ir as TX}from"./chunk-gwfx7tx7.js";import{Kr as NY,Lr as KY}from"./chunk-1wpjmwnh.js";import{cs as K6}from"./chunk-w9pdvcf9.js";import{hs as _0,ms as vB,ns as a5}from"./chunk-kb6v5hhm.js";import{ps as f0,qs as t4,ts as e4}from"./chunk-qyjt0qnq.js";import{Fs as G$,Gs as bJ,Ms as HZ,Ns as UJ}from"./chunk-xdjwapwy.js";import{mt as O6,rt as IB,ut as C6}from"./chunk-cxtxvt43.js";import{vt as w4,zt as WJ}from"./chunk-871f8x99.js";import{At as wK}from"./chunk-cx7p4ezk.js";import{Ot as x2}from"./chunk-3sz6gw10.js";import{Qt as _7}from"./chunk-twhavv1m.js";import{$t as q6,Rt as L1,Vt as y5,ku as z5}from"./chunk-v0yxkq99.js";import{qu as f5,tu as y$}from"./chunk-2pzvcpv4.js";import{Bu as L0,Ku as s}from"./chunk-kmtfdky8.js";import{Nu as vJ,Qu as _B,Ru as s2,Vu as B$,_u as P$}from"./chunk-vc4e6xc4.js";import{$u as P}from"./chunk-hnz570f9.js";import{av as VX,cv as w,dv as pX,ev as q2,fv as A2,gv as I7,hv as iX,iv as m2,jv as c,kv as u,lv as n2,mv as _2,nv as S7,ov as k7,pv as T2,qv as R0,rv as i,sv as l2,tv as WX,uv as T7,vv as nX,wv as sX,xv as F2}from"./chunk-tdmn21z0.js";import{Uv as G9,yv as oX}from"./chunk-s8mghr5a.js";import{DA as r4,OA as U7}from"./chunk-pqnbdygz.js";import{$C as Y0,EL as u9,GF as o2,GL as o5,HL as o4,HP as u0,LL as c2,MG as j8,NF as k2,OD as G5,SG as RJ,UI as Y,XL as fJ,YC as H5,ZG as CJ,aK as n8,bG as d2,cH as IJ,jL as j5,kL as O5,lL as F5,mL as c4,nD as Z2,oE as D6,oL as c5,pI as jZ,qL as u4,rG as M,tH as SJ,tI as OZ,tL as u5,wK as W6,zF as V2}from"./chunk-ydc6ypjt.js";import{gQ as B9,iQ as b2,kQ as K$,lQ as oY,mQ as pY}from"./chunk-4sazy0nq.js";var y0={};b2(y0,{layer:()=>uZ,defaultLayer:()=>VV,SessionStatus:()=>y0,Service:()=>Y6,Info:()=>cZ,Event:()=>z7});var cZ=P.union([P.object({type:P.literal("idle")}),P.object({type:P.literal("retry"),attempt:P.number(),message:P.string(),next:P.number()}),P.object({type:P.literal("busy"),message:P.string().optional()})]).meta({ref:"SessionStatus"}),z7={Status:O2.define("session.status",P.object({sessionID:D2.zod,status:cZ})),Idle:O2.define("session.idle",P.object({sessionID:D2.zod}))};class Y6 extends Z2.Service()("@qitqode/SessionStatus"){}var uZ=M.effect(Y6,Y.gen(function*(){let $=yield*p.Service,Z=yield*d.make(Y.fn("SessionStatus.state")(()=>Y.succeed(new Map))),X=Y.fn("SessionStatus.get")(function*(B){return(yield*d.get(Z)).get(B)??{type:"idle"}}),Q=Y.fn("SessionStatus.list")(function*(){return new Map(yield*d.get(Z))}),J=Y.fn("SessionStatus.set")(function*(B,V){let O=yield*d.get(Z);if(yield*$.publish(z7.Status,{sessionID:B,status:V}),V.type==="idle"){yield*$.publish(z7.Idle,{sessionID:B}),O.delete(B);return}O.set(B,V)});return Y6.of({get:X,list:Q,set:J})})),VV=uZ.pipe(M.provide(p.layer));var z0={};b2(z0,{layer:()=>pZ,defaultLayer:()=>WV,SessionRunState:()=>z0,Service:()=>J6});class J6 extends Z2.Service()("@qitqode/SessionRunState"){}var Q6=($,Z)=>`${$}:${Z}`,pZ=M.effect(J6,Y.gen(function*(){let $=yield*y0.Service,Z=f0.create({service:"SessionRunState"}),X=yield*d.make(Y.fn("SessionRunState.state")(function*(){let W=yield*d2.Scope,K=new Map;return yield*Y.addFinalizer(Y.fnUntraced(function*(){yield*Y.forEach(K.values(),(y)=>y.cancel,{concurrency:8,discard:!0}),K.clear()})),{runners:K,scope:W}})),Q=Y.fn("SessionRunState.runner")(function*(W,K,y){let j=Q6(W,K),q=yield*d.get(X),H=q.runners.get(j);if(H)return H;let z=K==="main",L=oZ.make(q.scope,{label:j,onReentryWarn:(b)=>Z.warn("runner-reentry",b),onIdle:z?Y.gen(function*(){q.runners.delete(j),yield*$.set(W,{type:"idle"})}):Y.sync(()=>{q.runners.delete(j)}),onBusy:z?$.set(W,{type:"busy"}):Y.void,onInterrupt:y,busy:()=>{throw new D7(W)}});return q.runners.set(j,L),L}),J=Y.fn("SessionRunState.assertNotBusy")(function*(W){if((yield*d.get(X)).runners.get(Q6(W,"main"))?.busy)throw new D7(W)}),B=Y.fn("SessionRunState.cancel")(function*(W){let K=Q6(W,"main"),j=(yield*d.get(X)).runners.get(K);if(!j||!j.busy){yield*$.set(W,{type:"idle"});return}yield*j.cancel}),V=Y.fn("SessionRunState.cancelActor")(function*(W,K){let y=Q6(W,K),q=(yield*d.get(X)).runners.get(y);if(!q||!q.busy)return;yield*q.cancel}),O=Y.fn("SessionRunState.ensureRunning")(function*(W,K,y,j){return yield*(yield*Q(W,K,y)).ensureRunning(j)}),G=Y.fn("SessionRunState.startShell")(function*(W,K,y){return yield*(yield*Q(W,"main",K)).startShell(y)});return J6.of({assertNotBusy:J,cancel:B,cancelActor:V,ensureRunning:O,startShell:G})})),WV=pZ.pipe(M.provide(y0.defaultLayer));var v0={};b2(v0,{startReminder:()=>HV,parseVerdictFromCompletion:()=>tZ,layer:()=>sZ,defaultLayer:()=>GV,clearGoalIfCurrent:()=>aZ,bumpReactIfCurrent:()=>rZ,Verdict:()=>w1,Service:()=>V6,Goal:()=>v0,Event:()=>N1});var w1=P.object({ok:P.boolean(),impossible:P.boolean().optional(),reason:P.string()}),N1={Updated:O2.define("session.goal",P.object({sessionID:D2.zod,goal:P.object({condition:P.string()}).optional(),lastVerdict:w1.extend({attempt:P.number(),messageID:P.string().optional(),error:P.boolean().optional()}).optional()}))},B6=`You are evaluating a stop-condition hook in QitQode. Read the conversation transcript carefully, then judge whether the user-provided condition is satisfied.
3
-
4
- Your response must be a JSON object with one of these shapes:
5
- - {"ok": true, "reason": "<quote evidence from the transcript that satisfies the condition>"}
6
- - {"ok": false, "reason": "<quote what is missing or what blocks the condition>"}
7
- - {"ok": false, "impossible": true, "reason": "<explain why the condition can never be satisfied>"}
8
-
9
- Always include a "reason" field, quoting specific text from the transcript whenever possible. If the transcript does not contain clear evidence that the condition is satisfied, return {"ok": false, "reason": "insufficient evidence in transcript"}.
10
-
11
- BEFORE reading the transcript, examine the condition itself for logical impossibility. If the condition is self-contradictory \u2014 it requires two things that cannot both be true at once (e.g. "the reply must contain the string X AND contain zero occurrences of the string X", "the value must be both greater than 5 and less than 3") \u2014 no transcript can ever satisfy it. In that case you MUST return {"ok": false, "impossible": true} immediately; returning plain {"ok": false} for a self-contradictory condition is wrong, because it forces endless futile retries.
12
-
13
- Beyond self-contradiction, also use {"ok": false, "impossible": true} when the condition is genuinely unachievable in this session \u2014 for example: it depends on a resource or capability that is unavailable, or the assistant has explicitly tried, exhausted reasonable approaches, and stated it cannot be done. Apply your own judgment when deciding this \u2014 the assistant claiming the goal is impossible is evidence, not proof; independently confirm the condition is genuinely unachievable rather than deferring to the assistant's self-assessment. Do not use it just because the goal has not been reached yet or because progress is slow. When the condition is achievable but unmet, return {"ok": false} without "impossible".`;function HV($){return["<system-reminder>",`A stop-condition goal has been set for this session: "${$}".`,"Start working toward it now.","An independent judge will review the transcript, and you will not be allowed to stop until it agrees the condition is genuinely met.","Do not consider the work finished until the goal is genuinely met or impossible.","</system-reminder>"].join(`
14
- `)}var q7=($)=>`Based on the conversation transcript above, has the following stopping condition been satisfied? Answer based on transcript evidence only.
15
-
16
- Condition: ${$}`;class V6 extends Z2.Service()("@qitqode/SessionGoal"){}var sZ=M.effect(V6,Y.gen(function*(){let $=yield*y2.Service,Z=yield*R$.Service,X=yield*B2.Service,Q=yield*p.Service,J=f0.create({service:"SessionGoal"}),B=yield*d.make(Y.fn("SessionGoal.state")(function*(){return{goals:new Map,generation:0}})),V=W6.makeUnsafe(1),O=Y.fn("SessionGoal.set")(function*(q,H){yield*V.withPermits(1)(Y.gen(function*(){let z=yield*d.get(B);z.generation+=1,z.goals.set(q,{condition:H,react:0,generation:z.generation}),yield*J.info("goal set",{sessionID:q,condition:H}),yield*Q.publish(N1.Updated,{sessionID:q,goal:{condition:H}})}))}),G=Y.fn("SessionGoal.get")(function*(q){return(yield*d.get(B)).goals.get(q)}),W=Y.fn("SessionGoal.clear")(function*(q,H){return yield*V.withPermits(1)(Y.gen(function*(){let z=yield*d.get(B);if(!aZ(z.goals,q,H))return!1;return yield*J.info("goal cleared",{sessionID:q}),yield*Q.publish(N1.Updated,{sessionID:q,goal:void 0}),!0}))}),K=Y.fn("SessionGoal.bumpReact")(function*(q,H){return yield*V.withPermits(1)(Y.gen(function*(){let z=yield*d.get(B);return rZ(z.goals,q,H)}))}),y=Y.fn("SessionGoal.commitVerdict")(function*(q){return yield*V.withPermits(1)(Y.gen(function*(){let H=yield*d.get(B),z=H.goals.get(q.sessionID);if(!z||z.generation!==q.expectedGeneration)return"stale";if(q.verdict.ok||q.verdict.impossible)return H.goals.delete(q.sessionID),yield*J.info("goal cleared",{sessionID:q.sessionID}),yield*Q.publish(N1.Updated,{sessionID:q.sessionID,goal:void 0,lastVerdict:{...q.verdict,attempt:z.react,messageID:q.judgedMessageID,error:q.verdict.judgeFailed?!0:void 0}}),"satisfied";if(z.react+=1,z.react>q.maxReact)return H.goals.delete(q.sessionID),yield*J.info("goal cleared",{sessionID:q.sessionID}),yield*Q.publish(N1.Updated,{sessionID:q.sessionID,goal:void 0,lastVerdict:{...q.verdict,attempt:z.react,messageID:q.judgedMessageID}}),"capped";return yield*Q.publish(N1.Updated,{sessionID:q.sessionID,goal:{condition:z.condition},lastVerdict:{...q.verdict,attempt:z.react,messageID:q.judgedMessageID}}),yield*q.reenter(z,z.react),"reentered"}))}),j=Y.fn("SessionGoal.evaluate")(function*(q){if(q.model.providerID==="qlex"){let E=q.msgs.slice(-20).map((N)=>{let A=N.parts.map((_)=>{let R=_;return R.type==="text"?String(R.text??""):""}).filter(Boolean).join(" ").slice(0,2000);return A?`${N.info.role}: ${A}`:null}).filter((N)=>N!==null).join(`
17
-
18
- `);if(!E)return yield*Y.die(Error("goal judge: empty transcript \u2014 nothing to evaluate"));let x=`${B6}
19
-
20
- ${E}
21
-
22
- ${q7(q.condition)}`,k=yield*Y.promise(()=>$0.resolveChatCompletion(x,{temperature:0,timeoutMs:20000}).then((N)=>({ok:!0,result:N}),(N)=>({ok:!1,error:N})));if(!k.ok)return yield*Y.die(Error(`goal judge chatCompletion failed: ${k.error instanceof Error?k.error.message:String(k.error)}`));let T=tZ(k.result.content??"");if(!T)return yield*Y.die(Error(`goal judge returned a malformed verdict: ${String(k.result.content).slice(0,300)}`));return T}let H=yield*X.get(),z=yield*$.getModel(q.model.providerID,q.model.modelID),L=yield*$.getLanguage(z),b=H.experimental?.openTelemetry?Y0.getOrUndefined(yield*Y.serviceOption(K6)):void 0,D=yield*Z.get(q.model.providerID).pipe(Y.orDie),U=q.model.providerID==="openai"&&D?.type==="oauth",F=yield*o.toModelMessagesEffect(q.msgs,z),I=(E,x)=>typeof x==="string"&&x.length>500?`\xAB${x.length} chars: ${x.slice(0,200)}\u2026\xBB`:x,C=[...U?[]:[{role:"system",content:B6}],...F,{role:"user",content:q7(q.condition)}];if(s.enabled("DEBUG"))yield*J.debug("goal judge transcript",{condition:q.condition,messageCount:C.length,messages:JSON.stringify(C,I)});let S={experimental_telemetry:{isEnabled:H.experimental?.openTelemetry,tracer:b,metadata:{userId:H.username??"unknown"}},temperature:0,messages:[...U?[]:[{role:"system",content:B6}],...F,{role:"user",content:q7(q.condition)}],model:L,schema:w1};if(U)return yield*Y.promise(async()=>{let E=nZ({...S,providerOptions:i2.providerOptions(z,{instructions:B6,store:!1}),onError:()=>{}});for await(let x of E.fullStream)if(x.type==="error")throw x.error;return w1.parse(await E.object)});return yield*Y.promise(()=>iZ(S).then((E)=>w1.parse(E.object)))});return V6.of({set:O,get:G,clear:W,bumpReact:K,commitVerdict:y,evaluate:j})})),GV=sZ.pipe(M.provide(y2.defaultLayer),M.provide(R$.defaultLayer),M.provide(B2.defaultLayer),M.provide(p.layer));function aZ($,Z,X){let Q=$.get(Z);if(!Q)return!1;if(X!==void 0&&Q.generation!==X)return!1;return $.delete(Z),!0}function rZ($,Z,X){let Q=$.get(Z);if(!Q)return;if(X!==void 0&&Q.generation!==X)return;return Q.react+=1,Q.react}function tZ($){try{let Z=$.match(/\{[\s\S]*\}/);if(!Z)return null;let X=w1.safeParse(JSON.parse(Z[0]));return X.success?X.data:null}catch{return null}}var m0={};b2(m0,{layer:()=>i5,defaultLayer:()=>CV,SessionProcessor:()=>m0,Service:()=>R6});var I2={};b2(I2,{subscribe:()=>Z5,jsonByteLength:()=>X5,getInstallationID:()=>O6,ToolCall:()=>G6,ModelCall:()=>H6,Metrics:()=>I2,AgentRequest:()=>j6});var H6=O2.define("metrics.model_call",P.object({sessionID:P.string(),finish_reason:P.string(),ttft_ms:P.number().optional(),latency_ms:P.number(),cached_read_tokens:P.number(),model_id:P.string(),provider:P.string(),total_tokens_in:P.number(),total_tokens_out:P.number()})),G6=O2.define("metrics.tool_call",P.object({sessionID:P.string(),tool_name:P.string(),input_bytes:P.number(),output_bytes:P.number(),tool_call_id:P.string(),tool_call_status:P.enum(["success","error","cancelled"])})),j6=O2.define("metrics.agent_request",P.object({sessionID:P.string(),phase:P.string(),task_type:P.string(),surface:P.string(),total_tokens_in:P.number(),total_tokens_out:P.number(),files_changed:P.number(),validation_status:P.string()}));function eZ($,Z){let X={event:$,app_id:"qitqode-cli",instance_id:crypto.randomUUID(),instance_id_type:"uuid",e_ts:Date.now()};if(Z)X.uid=Z,X.uid_type="session_id";return X}async function $5($){await fetch("https://telemetry.qitqode.com",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify($),signal:AbortSignal.timeout(60000)}).catch(()=>{})}var jV=!1;function P7($,Z,X){return $5([{H:eZ($,Z),B:X}])}var Z5=Y.fn("Metrics.subscribe")(function*(){if(!jV)return;yield*Y.promise(()=>O6().catch(()=>"")),yield*p.Service.use(($)=>Y.all([$.subscribeCallback(H6,(Z)=>{let X=Z.properties;return P7("model_call",X.sessionID,{finish_reason:X.finish_reason,ttft_ms:X.ttft_ms,latency_ms:X.latency_ms,cached_read_tokens:X.cached_read_tokens,model_id:X.model_id,provider:X.provider,total_tokens_in:X.total_tokens_in,total_tokens_out:X.total_tokens_out})}),$.subscribeCallback(G6,(Z)=>{let X=Z.properties;return P7("tool_call",X.sessionID,{tool_name:X.tool_name,input_bytes:X.input_bytes,output_bytes:X.output_bytes,tool_call_id:X.tool_call_id,tool_call_status:X.tool_call_status})}),$.subscribeCallback(j6,(Z)=>{let X=Z.properties;return P7("agent_request",X.sessionID,{phase:X.phase,task_type:X.task_type,surface:X.surface,total_tokens_in:X.total_tokens_in,total_tokens_out:X.total_tokens_out,files_changed:X.files_changed,validation_status:X.validation_status})})]))});function X5($){try{let Z=JSON.stringify($);if(typeof Z!=="string")return 0;return Buffer.byteLength(Z,"utf8")}catch{return 0}}var E2={};b2(E2,{persistentRetrySchedule:()=>C5,layer:()=>I5,isTransientCapacityError:()=>M7,hasToolCalls:()=>S5,defaultLayer:()=>wV,Service:()=>N6,OUTPUT_TOKEN_MAX:()=>qV,LLM:()=>E2});import x1 from"path";var O$={};b2(O$,{providerPromptName:()=>Y5,providerPrompt:()=>OV,layer:()=>Q5,defaultLayer:()=>FV,SystemPrompt:()=>O$,Service:()=>F6});function Y5($){if($.api.id.includes("gpt-4")||$.api.id.includes("o1")||$.api.id.includes("o3"))return"session/beast";if($.api.id.includes("gpt")){if($.api.id.includes("codex"))return"session/codex";return"session/gpt"}if($.api.id.includes("gemini-"))return"session/gemini";if($.api.id.includes("claude"))return"session/anthropic";if($.api.id.toLowerCase().includes("trinity"))return"session/trinity";if($.api.id.toLowerCase().includes("kimi"))return"session/kimi";return"session/default"}async function OV($){let Z=await $0.resolvePrompt(Y5($));return Z?[Z]:[]}class F6 extends Z2.Service()("@qitqode/SystemPrompt"){}var Q5=M.effect(F6,Y.gen(function*(){let $=yield*j$.Service;return F6.of({environment(Z,X){let Q=S2.project;return[["You are QitQode Agent, an interactive agent that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.",`You are powered by the model named ${Z.api.id}. The exact model ID is ${Z.providerID}/${Z.api.id}`,"Here is some useful information about the environment you are running in:","<env>",` Working directory: ${S2.directory}`,` Workspace root folder: ${S2.worktree}`,` Is directory a git repo: ${Q.vcs==="git"?"yes":"no"}`,` Platform: ${process.platform}`,` Today's date: ${new Date(X).toDateString()}`,"</env>"].join(`
23
- `),"IMPORTANT: Your response must ALWAYS strictly follow the same major language as the user."]},skills:Y.fn("SystemPrompt.skills")(function*(Z){if(z2.disabled(["skill"],Z.permission).has("skill"))return;let X=yield*$.available(Z);return["Skills provide specialized instructions and workflows for specific tasks.","Use the skill tool to load a skill when a task matches its description.",j$.fmt(X,{verbose:!0})].join(`
24
- `)})})})),FV=Q5.pipe(M.provide(j$.defaultLayer));var w7=2;function J5($){return $.toLowerCase().replace(/\s+/g," ").trim().split(" ").filter(Boolean)}function B5($,Z,X){if($.length<Z||X<2)return!1;let Q=new Map;for(let J=0;J<=$.length-Z;J++){let B=$.slice(J,J+Z).join("\x00"),V=(Q.get(B)??0)+1;if(V>=X)return!0;Q.set(B,V)}return!1}var N7=["write","write_file","edit","edit_file","question","bash","read","read_file","glob","grep"],yV=["tool_call","tool_use","function_call","function_calls","invoke_name","invoke"],zV="<\\/?[a-z][\\w-]*__[\\w-]+\\b[^>]*>",DV=new RegExp(`(?:<\\/?(?:${N7.join("|")})\\b[^>]*>|\\b(?:${N7.join("|")})\\s*=\\s*"[^"]*"|\\/(?:${N7.join("|")})\\b|<\\/?(?:${yV.join("|")})\\b[^>]*>|${zV})`,"i");function y6($){return DV.test($)}var V5=`# Tool invocation rules
25
-
26
- Tools are ONLY invoked through the structured tool-calling interface of this API. NEVER write tool calls as plain text in your response:
27
- - NEVER emit XML-style tags like <tool_call>, <invoke>, <function_call>, <toolname>, or namespaced tags like <agent__toolname> in your text output
28
- - NEVER write pseudo-syntax like toolname="..." or /toolname as text
29
- - Text like that is NEVER executed \u2014 the user just sees garbled output and nothing happens
30
- If you want to use a tool, issue a real structured tool call. If no tool fits, answer in plain prose.`;class x7{n;threshold;windowTokens;buffer="";tokens=[];fakeToolTag=!1;constructor($,Z,X){this.n=$;this.threshold=Z;this.windowTokens=X}append($){if(!$)return!1;this.buffer+=$;let Z=J5(this.buffer);if(this.tokens=Z.length>this.windowTokens?Z.slice(-this.windowTokens):Z,Z.length>this.windowTokens*2)this.buffer=this.tokens.join(" ");if(!this.fakeToolTag&&y6(this.buffer))this.fakeToolTag=!0;return B5(this.tokens,this.n,this.threshold)||this.fakeToolTag}reset(){this.buffer="",this.tokens=[],this.fakeToolTag=!1}}function z6(){return{_tag:"TextNgramRepeat"}}function L7($){return typeof $==="object"&&$!==null&&"_tag"in $&&$._tag==="TextNgramRepeat"}function W5($){return`<system-reminder>
31
- MALFORMED OUTPUT DETECTED: Your recent output either repeats phrases (sliding n-gram match within your last ${$} tokens), or contains fake tool-call syntax written as plain text (e.g. \`write_file="..."\`, \`/write\`, \`<question>...\`, \`/question\`, \`<tool_call>\`, \`<invoke_name>...\`) instead of an actual tool call.
32
-
33
- STOP and retry with a different approach:
34
- - Vary your wording and reasoning \u2014 do not reuse the same phrases
35
- - Tools are NEVER invoked by writing their name, tags, or \`key="value"\` attributes as plain text \u2014 that text is never executed and the user only sees garbled output. If you need to write a file, ask a question, run a command, etc., you MUST issue a real structured tool call.
36
- - If you are blocked, explain what is blocking you instead of looping or faking a tool call
37
-
38
- Do NOT output the same phrases again, and do NOT describe tool usage as inline text tags.
39
- </system-reminder>`}var b7=`<system-reminder>
40
- CRITICAL: You are STILL producing malformed output (repeated phrases or fake tool-call syntax written as plain text) after a recovery attempt.
41
-
42
- You MUST completely replan before continuing:
43
- 1. Abandon your current approach entirely \u2014 it is stuck in repetition or fake tool-call text
44
- 2. Write out a NEW plan with different steps and a different strategy
45
- 3. State what you were trying to do, why it failed, and how your new plan differs
46
- 4. Any tool usage (write, edit, question, bash, read, etc.) MUST go through a real structured tool call \u2014 never write tool names, tags, or attributes as plain text
47
-
48
- Do NOT continue the same line of reasoning, reuse the same wording, or fake a tool call as text.
49
- </system-reminder>`;var K5=s.create({service:"llm"}),qV=i2.OUTPUT_TOKEN_MAX;function M7($){if($ instanceof Error&&$.category==="stream_failed")return!1;return U5($)}var C5=j8.exponential(D6.millis(A5),M5).pipe(j8.modifyDelay(($,Z)=>{let X=D6.millis(_5);return Y.succeed(D6.isLessThanOrEqualTo(Z,X)?Z:X)}),j8.both(j8.recurs(P6)));function PV($,Z,X){let Q=x1.join(X,"projects",Z,"MEMORY.md"),J=x1.join(X,"sessions",$,"checkpoint.md"),B=x1.join(X,"sessions",$),V=x1.join(X,"global","MEMORY.md");return`# Memory system
50
-
51
- You have a persistent file-based memory system. Four file types:
52
-
53
- - Project memory at \`${Q}\` \u2014 persistent across all sessions in this project. Contains: project context, rules, architecture decisions, durable cross-task knowledge.
54
- - Session checkpoint at \`${J}\` \u2014 current session's structured state, written ONLY by the checkpoint-writer subagent. 11 sections covering active intent, next action, directives, task tree, current work, files, learnings, errors, live resources, design decisions, and open notes. Task content lives inside \xA74 Task tree and \xA75 Current work.
55
- - Per-task progress at \`${x1.join(B,"tasks","<id>","progress.md")}\` \u2014 writer-derived splitover from session-level progress.md (not LLM-written). When you spawn a subagent on a task, the subagent may be handed this path for reading; you do not maintain it.
56
- - Global memory at \`${V}\` \u2014 user-level preferences and cross-project feedback that persist across all projects. Auto-injected into rebuild context under the "## Global memory" header when present.
57
-
58
- The checkpoint writer is the sole curator of the structured files. You don't maintain them mid-task \u2014 the writer extracts everything from the conversation at checkpoint events.
59
-
60
- ## When to Edit MEMORY.md directly
61
-
62
- You may Edit MEMORY.md when:
63
- - User states a project-level rule that should hold across sessions \u2192 ## Rules
64
- - User states a project-level architectural decision \u2192 ## Architecture decisions
65
- - A clearly durable cross-session fact emerges that you want available immediately, before the next checkpoint \u2192 ## Discovered durable knowledge
66
-
67
- These are exceptions, not the norm. The writer covers most extraction at checkpoint time.
68
-
69
- ## Notes scratchpad
70
-
71
- You have a single legal scratchpad at \`${x1.join(B,"notes.md")}\`. Append entries to it when you want to record:
72
-
73
- - A quote (from the user, an article, a known engineer) that has lasting value but isn't a task-specific decision
74
- - An unresolved question \u2014 something you noticed but won't answer this turn
75
- - A cross-project observation \u2014 "we did this in project X, similar pattern here"
76
- - A note for future-self \u2014 context that would matter weeks later but doesn't fit any current task
77
-
78
- Format each entry as:
79
- ## [turn N \xB7 YYYY-MM-DDTHH:MM:SSZ]
80
- Free-form body. The writer reorganizes structured content at checkpoint time.
81
-
82
- This is your ONLY legal scratchpad \u2014 don't create \`learning.md\`, \`scratch.md\`, or any other ad-hoc memory file.
83
-
84
- ## Subagent return format
85
-
86
- When you (as a subagent) finish your task, your final assistant message will be delivered to the spawning agent. If the spawn machinery added a "Return format (required)" section to your prompt, follow it exactly:
87
-
88
- **Status**: success | partial | failed | blocked
89
- **Summary**: <one-line description>
90
-
91
- <deliverable body>
92
-
93
- **Files touched**: <comma-separated paths or "(none)">
94
- **Findings worth promoting**: <bullet list, or "(none)">
95
-
96
- If your spawn prompt didn't include this format (e.g., explore/title/summary agents have their own contracts), follow whatever your prompt specifies.
97
-
98
- ## What NOT to do
99
-
100
- - Don't Edit checkpoint.md \u2014 that's the writer's domain.
101
- - Don't create memory files other than notes.md (no learning.md, no scratch.md). Use notes.md for any free-form entry.
102
- - Don't ask the user about something memory may already record \u2014 search first via Grep / Read.
103
-
104
- ## Active recall protocol
105
-
106
- After a checkpoint rebuild, the following dumps may be already in your context (look for the "Summary of previous conversation from checkpoint files:" header followed by these dumps):
107
-
108
- - checkpoint.md (full or budget-truncated)
109
- - MEMORY.md (full or budget-truncated)
110
- - notes.md (full or budget-truncated)
111
- - global/MEMORY.md (full or budget-truncated)
112
-
113
- If these dumps are visible in your context:
114
-
115
- - Do NOT Read them again as whole files. The bytes are already in front of you.
116
- - For specific past details (a particular turn's content, a specific tool output, an old command), use Grep with a keyword pattern to target the exact item \u2014 do not pull a whole file.
117
- - For files NOT in the rebuild dump (per-task splitover progress.md files for tasks you don't actively need, spillover files, older session checkpoints in other sessions), Read on demand.
118
-
119
- If a dump shows "\u26A0\uFE0F Truncated at ~N tokens. Read(<path>, offset=L) for the rest." \u2014 that file was budget-cut. Use Read with the offset only when you need the missing tail.
120
-
121
- Memory entries name functions, files, flags, paths \u2014 those are CLAIMS about a point in time when they were written. Verify before acting on a specific name.
122
-
123
- Don't ask the user about something memory may already record.
124
- `}class N6 extends Z2.Service()("@qitqode/LLM"){}var NV=M.effect(N6,Y.gen(function*(){let $=yield*R$.Service,Z=yield*B2.Service,X=yield*y2.Service,Q=yield*H2.Service,J=yield*z2.Service,B=yield*M2.Service,V=yield*F$.Service,O=Y.fn("LLM.buildSystemArray")(function*(K){let y=[],j=K.agent.prompt?[K.agent.prompt]:yield*Y.promise(()=>O$.providerPrompt(K.model));if(y.push([...j,V5,...K.system,...K.user.system?[K.user.system]:[]].filter((z)=>z).join(`
125
- `)),!(K.agentID?yield*B.isSystemSpawned(D2.make(K.sessionID),K.agentID):!1)){let z=b5()??D5.global;yield*Y.promise(()=>N5(z)).pipe(Y.ignore),y.push(PV(D2.make(K.sessionID),z,yield*V.root()))}let H=y[0];if(yield*Q.trigger("experimental.chat.system.transform",{sessionID:K.sessionID,model:K.model},{system:y}),y.length>2&&y[0]===H){let z=y.slice(1);y.length=0,y.push(H,z.join(`
126
- `))}return y}),G=Y.fn("LLM.run")(function*(K){let y=K5.clone().tag("providerID",K.model.providerID).tag("modelID",K.model.id).tag("session.id",K.sessionID).tag("small",(K.small??!1).toString()).tag("agent",K.agent.name).tag("mode",K.agent.mode).tag("posture",K.agent.posture??x5(K.agent));y.info("stream",{modelID:K.model.id,providerID:K.model.providerID});let[j,q,H,z]=yield*Y.all([X.getLanguage(K.model),Z.get(),X.getProvider(K.model.providerID),$.get(K.model.providerID)],{concurrency:"unbounded"}),L=H.id==="openai"&&z?.type==="oauth",b=K.prebuiltSystem??(yield*O({agent:K.agent,model:K.model,system:K.system,user:K.user,sessionID:K.sessionID,agentID:K.agentID})),D=!K.small&&K.model.variants&&K.user.model.variant?K.model.variants[K.user.model.variant]:{},U=K.small?i2.smallOptions(K.model):i2.options({model:K.model,sessionID:K.sessionID,providerOptions:H.options}),F=y5(U,q6(K.model.options),q6(K.agent.options),q6(D));if(L)F.instructions=b.join(`
127
- `);let I=j instanceof A7,C=L?K.messages:I?K.messages:[...b.map((R)=>({role:"system",content:R})),...K.messages],S=yield*Q.trigger("chat.params",{sessionID:K.sessionID,agent:K.agent.name,model:K.model,provider:H,message:K.user},{temperature:K.model.capabilities.temperature?K.agent.temperature??i2.temperature(K.model):void 0,topP:K.agent.topP??i2.topP(K.model),topK:i2.topK(K.model),maxOutputTokens:i2.maxOutputTokens(K.model),options:F}),{headers:E}=yield*Q.trigger("chat.headers",{sessionID:K.sessionID,agent:K.agent.name,model:K.model,provider:H,message:K.user},{headers:{}}),x=xV(K);if((H.options?.litellmProxy===!0||K.model.providerID.toLowerCase().includes("litellm")||K.model.api.id.toLowerCase().includes("litellm")||K.model.providerID.includes("github-copilot"))&&Object.keys(x).length===0&&S5(K.messages))x._noop=r$({description:"Do not call this tool. It exists only for API compatibility and must never be invoked.",inputSchema:W$({type:"object",properties:{reason:{type:"string",description:"Unused"}}}),execute:async()=>({output:"",title:"",metadata:{}})});if(j instanceof A7){let R=j;R.sessionID=K.sessionID,R.systemPrompt=b.join(`
128
- `),R.toolExecutor=async(h,f,v)=>{let e=x[h];if(!e||!e.execute)return{result:"",error:`Unknown tool: ${h}`};try{let n=await e.execute(JSON.parse(f),{toolCallId:v,messages:K.messages,abortSignal:K.abort});return{result:typeof n==="string"?n:n?.output??JSON.stringify(n),metadata:typeof n==="object"?n?.metadata:void 0,title:typeof n==="object"?n?.title:void 0}}catch(n){return{result:"",error:n.message??String(n)}}};let g=z2.merge(K.agent.permission??[],K.permission??[]);R.sessionPreapprovedTools=Object.keys(x).filter((h)=>{let f=g.findLast((v)=>z5.match(h,v.permission));return!f||f.action!=="ask"});let l=yield*D0.make(),m=new Set;R.approvalHandler=S2.bind(async(h)=>{let f=[...new Set(h.map((n)=>n.name))];if(f.every((n)=>m.has(n)))return{approved:!0};let v=w5.ascending(),e;try{e=p.subscribe(z2.Event.Replied,(G2)=>{if(G2.properties.requestID===v)G2.properties.reply});let n=h.map((G2)=>{try{let R2=JSON.parse(G2.args),t=R2?.title??R2?.name??"";return t?`${G2.name}: ${t}`:G2.name}catch{return G2.name}}),a=[...new Set(n)];await l.promise(J.ask({id:v,sessionID:D2.make(K.sessionID),permission:"workflow_tool_approval",patterns:a,metadata:{tools:h},always:a,ruleset:[]}));for(let G2 of f)m.add(G2);return R.sessionPreapprovedTools=[...R.sessionPreapprovedTools??[],...f],{approved:!0}}catch{return{approved:!1}}finally{e?.()}})}let T=q.experimental?.openTelemetry?H5(yield*Y.serviceOption(K6)):void 0,N=T?new Proxy(T,{get(R,g,l){if(g!=="startSpan")return Reflect.get(R,g,l);return(...m)=>{let h=R.startSpan(...m);return h.setAttribute("session.id",K.sessionID),h}}}):void 0,A=Date.now(),_=K.model.providerID==="qlex"?L5(K.agent,Object.keys(x)):void 0;return y.debug("streamText starting",{messageID:K.user.id,msgCount:C.length,toolCount:Object.keys(x).length,qortexPosture:_?.posture??null,qortexDirective:_?.directive??null}),q5({onError(R){y.debug("streamText error",{messageID:K.user.id,error:R instanceof Error?R.message:String(R),elapsedMs:Date.now()-A}),y.error("stream error",{error:R})},async experimental_repairToolCall(R){let g=R.toolCall.toolName.toLowerCase();if(g!==R.toolCall.toolName&&x[g])return y.info("repairing tool call",{tool:R.toolCall.toolName,repaired:g}),{...R.toolCall,toolName:g};return{...R.toolCall,input:JSON.stringify({tool:R.toolCall.toolName,error:R.error.message}),toolName:"invalid"}},temperature:S.temperature,topP:S.topP,topK:S.topK,providerOptions:i2.providerOptions(K.model,{...S.options,..._??{}}),activeTools:Object.keys(x).filter((R)=>R!=="invalid"),tools:x,toolChoice:K.toolChoice,maxOutputTokens:K.user.outputBudgetRecoveryTokens??S.maxOutputTokens,abortSignal:K.abort,headers:{"x-session-affinity":K.sessionID,...K.parentSessionID?{"x-parent-session-id":K.parentSessionID}:{},...K.model.headers,...E,"User-Agent":`qitqode/${L1}`},maxRetries:K.model.providerID==="qlex"?0:K.retries??2,messages:C,model:P5({model:j,middleware:[{specificationVersion:"v3",async transformParams(R){if(R.type==="stream")R.params.prompt=i2.message(R.params.prompt,K.model,F);return R.params}}]}),experimental_telemetry:{isEnabled:q.experimental?.openTelemetry,functionId:"session.llm",tracer:N,metadata:{userId:q.username??"unknown",sessionId:K.sessionID}}})}),W=(K)=>F5(O5(Y.gen(function*(){let y=yield*Y.acquireRelease(Y.sync(()=>new AbortController),(L)=>Y.sync(()=>L.abort())),j=yield*U7.make(0),q=(L,b)=>Y.gen(function*(){if(K5.debug("retry attempt",{sessionID:K.sessionID,messageID:K.user.id,attempt:b,reason:L instanceof Error?L.message:String(L)}),b>P6)return;let D=R5(b);yield*Y.promise(()=>p.publish(U2.RetryAttempt,{sessionID:D2.make(K.sessionID),messageID:K.user.id,attempt:b,maxAttempts:P6,reason:L instanceof Error?L.message:String(L),nextDelayMs:D}))}),z=yield*G({...K,abort:y.signal}).pipe(Y.tapError((L)=>{if(!M7(L))return Y.void;return U7.updateAndGet(j,(b)=>b+1).pipe(Y.flatMap((b)=>q(L,b)))})).pipe(Y.retry({while:M7,schedule:C5}));return j5(z.fullStream,(L)=>L instanceof Error?L:Error(String(L)))})));return N6.of({stream:W,buildSystemArray:O})})),I5=NV.pipe(M.provide(z2.defaultLayer)),wV=M.suspend(()=>I5.pipe(M.provide(R$.defaultLayer),M.provide(B2.defaultLayer),M.provide(y2.defaultLayer),M.provide(H2.defaultLayer),M.provide(M2.defaultLayer),M.provide(F$.defaultLayer)));function xV($){let Z=z2.disabled(Object.keys($.tools),z2.merge($.agent.permission,$.permission??[]));return G5.filter($.tools,(X,Q)=>$.user.tools?.[Q]!==!1&&!Z.has(Q))}function S5($){for(let Z of $){if(!Array.isArray(Z.content))continue;for(let X of Z.content)if(X.type==="tool-call"||X.type==="tool-result")return!0}return!1}var P0={};b2(P0,{layer:()=>k5,defaultLayer:()=>bV,SessionSummary:()=>P0,Service:()=>x6,DiffInput:()=>UV});function w6($){return{additions:$.reduce((Z,X)=>Z+X.additions,0),deletions:$.reduce((Z,X)=>Z+X.deletions,0),files:$.length}}function LV($){if(!$.startsWith('"'))return $;if(!$.endsWith('"'))return $;let Z=$.slice(1,-1),X=[];for(let Q=0;Q<Z.length;Q++){let J=Z[Q];if(J!=="\\"){X.push(J.charCodeAt(0));continue}let B=Z[Q+1];if(!B){X.push(92);continue}if(B>="0"&&B<="7"){let G=Z.slice(Q+1,Q+4).match(/^[0-7]{1,3}/);if(!G){X.push(B.charCodeAt(0)),Q++;continue}X.push(parseInt(G[0],8)),Q+=G[0].length;continue}let V=B==="n"?`
129
- `:B==="r"?"\r":B==="t"?"\t":B==="b"?"\b":B==="f"?"\f":B==="v"?"\v":B==="\\"||B==='"'?B:void 0;X.push((V??B).charCodeAt(0)),Q++}return Buffer.from(X).toString()}class x6 extends Z2.Service()("@qitqode/SessionSummary"){}var k5=M.effect(x6,Y.gen(function*(){let $=yield*f2,Z=yield*q0.Service,X=yield*C$.Service,Q=yield*p.Service,J=Y.fn("SessionSummary.computeDiff")(function*(O){let G,W;for(let K of O.messages){if(!G){for(let y of K.parts)if(y.type==="step-start"&&y.snapshot){G=y.snapshot;break}}for(let y of K.parts)if(y.type==="step-finish"&&y.snapshot)W=y.snapshot}if(G&&W)return yield*Z.diffFull(G,W);return[]}),B=Y.fn("SessionSummary.summarize")(function*(O){let G=yield*$.messages({sessionID:O.sessionID,agentID:"main"});if(!G.length)return;let W=yield*J({messages:G});yield*$.setSummary({sessionID:O.sessionID,summary:w6(W)}),yield*X.write(["session_diff",O.sessionID],W).pipe(Y.ignore),yield*Q.publish(U2.Diff,{sessionID:O.sessionID,diff:W});let K=G.filter((q)=>q.info.id===O.messageID||q.info.role==="assistant"&&q.info.parentID===O.messageID),y=K.find((q)=>q.info.id===O.messageID);if(!y||y.info.role!=="user")return;let j=yield*J({messages:K});y.info.summary={...y.info.summary,diffs:j},yield*$.updateMessage(y.info)}),V=Y.fn("SessionSummary.diff")(function*(O){let G=yield*X.read(["session_diff",O.sessionID]).pipe(Y.catch(()=>Y.succeed([]))),W=G.map((y)=>{let j=LV(y.file);if(j===y.file)return y;return{...y,file:j}});if(W.some((y,j)=>y.file!==G[j]?.file))yield*X.write(["session_diff",O.sessionID],W).pipe(Y.ignore);return W});return x6.of({summarize:B,diff:V,computeDiff:J})})),bV=M.suspend(()=>k5.pipe(M.provide(d0),M.provide(q0.defaultLayer),M.provide(C$.defaultLayer),M.provide(p.layer))),UV=P.object({sessionID:D2.zod,messageID:w2.zod.optional()});function L6(){return new x7(L0.QITQODE_TEXT_NGRAM_N,L0.QITQODE_TEXT_REPEAT_THRESHOLD,L0.QITQODE_TEXT_WINDOW_TOKENS)}var T5=W5(L0.QITQODE_TEXT_WINDOW_TOKENS);var b0=($)=>$;function h5($,Z){let{context:X,handleEvent:Q,cleanup:J,halt:B,setAborted:V,recordOverhead:O}=Z,G=new AbortController,W={inputTokens:0,outputTokens:0,totalTokens:0};return Y.gen(function*(){X.currentText=void 0,X.reasoningMap={},yield*Q(b0({type:"start"})),yield*Q(b0({type:"start-step",request:{},warnings:[]}));let y=[$.selection?`[max mode] selected candidate ${$.selection.winner+1} of ${$.selection.total}`:void 0,$.reasoning].filter(Boolean).join(`
130
-
131
- `);if(y){let q=$.thinkingMs?Date.now()-$.thinkingMs:void 0;yield*Q(b0({type:"reasoning-start",id:"reasoning-replay",providerMetadata:$.reasoningMetadata,...q?{time:{start:q}}:{}})),yield*Q(b0({type:"reasoning-delta",id:"reasoning-replay",text:y,providerMetadata:$.reasoningMetadata})),yield*Q(b0({type:"reasoning-end",id:"reasoning-replay",providerMetadata:$.reasoningMetadata}))}if($.text)yield*Q(b0({type:"text-start",id:"text-replay",providerMetadata:$.textMetadata})),yield*Q(b0({type:"text-delta",id:"text-replay",text:$.text,providerMetadata:$.textMetadata})),yield*Q(b0({type:"text-end",id:"text-replay",providerMetadata:$.textMetadata}));for(let j of $.toolCalls){if(X.needsOverflowHandling)break;yield*Q(b0({type:"tool-input-start",id:j.toolCallId,toolName:j.toolName,providerMetadata:j.providerMetadata})),yield*Q(b0({type:"tool-call",toolCallId:j.toolCallId,toolName:j.toolName,input:j.input,providerMetadata:j.providerMetadata}));let q=$.tools[j.toolName];if(!q?.execute){yield*Q(b0({type:"tool-error",toolCallId:j.toolCallId,toolName:j.toolName,input:j.input,error:Error(`Tool "${j.toolName}" has no executor`)}));continue}let H=yield*Y.tryPromise({try:()=>q.execute(j.input,{toolCallId:j.toolCallId,messages:$.messages,abortSignal:G.signal}),catch:(z)=>z}).pipe(Y.map((z)=>({ok:!0,output:z})),Y.catch((z)=>Y.succeed({ok:!1,error:z})));if(!H.ok){yield*Q(b0({type:"tool-error",toolCallId:j.toolCallId,toolName:j.toolName,input:j.input,error:H.error}));continue}yield*Q(b0({type:"tool-result",toolCallId:j.toolCallId,toolName:j.toolName,input:j.input,output:H.output}))}if(yield*Q(b0({type:"finish-step",usage:$.usage??W,finishReason:$.finishReason,providerMetadata:$.providerMetadata})),$.overhead&&($.overhead.cost>0||$.overhead.tokensIn>0||$.overhead.tokensOut>0))yield*O($)}).pipe(Y.onInterrupt(()=>{if(V(),G.abort(),Z.context.assistantMessage.error)return Y.void;return B(new DOMException("Aborted","AbortError"))}),Y.catchCauseIf((K)=>!V2.hasInterruptsOnly(K),(K)=>Y.fail(V2.squash(K))),Y.catch(B),Y.ensuring(J()),Y.map(()=>{if(X.needsOverflowHandling)return"overflow";if(X.blocked||X.assistantMessage.error)return"stop";return"continue"}))}function E5($){let{ctx:Z,session:X}=$,Q=Y.fn("SessionProcessor.settleToolCall")(function*(K){let y=Z.toolcalls[K]?.done;if(delete Z.toolcalls[K],y)yield*k2.succeed(y,void 0).pipe(Y.ignore)}),J=Y.fn("SessionProcessor.readToolCall")(function*(K){let y=Z.toolcalls[K];if(!y)return;let j=yield*X.getPart({partID:y.partID,messageID:y.messageID,sessionID:y.sessionID});if(!j||j.type!=="tool"){delete Z.toolcalls[K];return}return{call:y,part:j}}),B=Y.fn("SessionProcessor.updateToolCall")(function*(K,y){let j=yield*J(K);if(!j)return;let q=yield*X.updatePart(y(j.part));return Z.toolcalls[K]={...j.call,partID:q.id,messageID:q.messageID,sessionID:q.sessionID},q}),V=Y.fn("SessionProcessor.completeToolCall")(function*(K,y){let j=yield*J(K);if(!j||j.part.state.status!=="running")return;if(yield*X.updatePart({...j.part,state:{status:"completed",input:j.part.state.input,output:y.output,metadata:y.metadata,title:y.title,time:{start:j.part.state.time.start,end:Date.now()},attachments:y.attachments}}),y.metadata?.declined===!0)Z.blocked=Z.shouldBreak;yield*Q(K)}),O=Y.fn("SessionProcessor.failToolCall")(function*(K,y){let j=yield*J(K);if(!j||j.part.state.status!=="running")return!1;let q=g5(y);if(yield*X.updatePart({...j.part,state:{status:"error",input:j.part.state.input,error:y$(y),...q?{metadata:{...j.part.state.metadata,recoverable:!0}}:{},time:{start:j.part.state.time.start,end:Date.now()}}}),y instanceof z2.RejectedError||y instanceof b6.RejectedError)Z.blocked=Z.shouldBreak;return yield*Q(K),!0});return{settleToolCall:Q,readToolCall:J,updateToolCall:B,completeToolCall:V,failToolCall:O,isBackendAuthRejection:(K)=>{let y=K;for(let j=0;j<5&&y!==void 0&&y!==null;j++){if(y instanceof $0.BackendAuthRejectedError)return!0;if(y instanceof Error&&y.name==="BackendAuthRejectedError")return!0;y=y instanceof Error?y.cause:void 0}return!1},backendBillingFailureMessage:(K)=>{let y=K;for(let j=0;j<5&&y!==void 0&&y!==null;j++){let q=y instanceof Error?y.name:void 0;if(y instanceof $0.BackendInsufficientBalanceError||q==="BackendInsufficientBalanceError")return _7.copy().insufficientBalance();if(y instanceof $0.BackendRateLimitError||q==="BackendRateLimitError")return _7.copy().rateLimit;y=y instanceof Error?y.cause:void 0}return}}}var U6=Y.fn("SessionProcessor.applySnapshotPatch")(function*($){if(!$.ctx.snapshot)return 0;let Z=yield*$.snapshot.patch($.ctx.snapshot);if(Z.files.length)yield*$.session.updatePart({id:Q2.ascending(),messageID:$.ctx.assistantMessage.id,sessionID:$.ctx.sessionID,type:"patch",hash:Z.hash,files:Z.files});return $.ctx.snapshot=void 0,Z.files.length});function v5($){let{ctx:Z,session:X,snapshot:Q,readToolCall:J}=$;return Y.fn("SessionProcessor.cleanup")(function*(){if(yield*U6({ctx:Z,session:X,snapshot:Q}),Z.currentText){let B=Date.now();Z.currentText.time={start:Z.currentText.time?.start??B,end:B},yield*X.updatePart(Z.currentText),Z.currentText=void 0}for(let B of Object.values(Z.reasoningMap)){let V=Date.now();yield*X.updatePart({...B,time:{start:B.time.start??V,end:V}})}Z.reasoningMap={},yield*Y.forEach(Object.values(Z.toolcalls),(B)=>k2.await(B.done).pipe(Y.timeout("250 millis"),Y.ignore),{concurrency:"unbounded"});for(let B of Object.keys(Z.toolcalls)){let V=yield*J(B);if(!V)continue;let O=V.part,G=Date.now(),W="metadata"in O.state&&f5(O.state.metadata)?O.state.metadata:{};yield*X.updatePart({...O,state:{...O.state,status:"error",error:"Tool execution aborted",metadata:{...W,interrupted:!0},time:{start:"time"in O.state?O.state.time.start:G,end:G}}})}Z.toolcalls={},Z.assistantMessage.time.completed=Date.now(),yield*X.updateMessage(Z.assistantMessage)})}var AV=20000,MV=20000;function b1($){let Z=$.model.limit.context;if(Z===0)return 0;let X=$.cfg.compaction?.reserved??Math.min(AV,i2.maxOutputTokens($.model)),Q=Math.min(i2.maxOutputTokens($.model),MV);return $.model.limit.input?Math.max(0,$.model.limit.input-X):Math.max(0,Z-Q-X)}function U1($){if($.cfg.compaction?.auto===!1)return!1;if($.model.limit.context===0)return!1;return($.tokens.total||$.tokens.input+$.tokens.output+$.tokens.cache.read+$.tokens.cache.write)>=b1($)}function A6($){if($.cfg.compaction?.auto===!1)return 0;if($.model.limit.context===0)return 0;let Z=$.tokens.total||$.tokens.input+$.tokens.output+$.tokens.cache.read+$.tokens.cache.write,X=b1($);if(X===0)return 0;let Q=Z/X;if(Q<0.5)return 0;if(Q<0.7)return 1;if(Q<0.85)return 2;return 3}function d5($){let{ctx:Z,session:X,snapshot:Q,bus:J,config:B,summary:V,scope:O}=$;return Y.fnUntraced(function*(G){let W=M6({model:Z.model,usage:G.usage,metadata:G.providerMetadata});if(Z.assistantMessage.finish=G.finishReason,Z.assistantMessage.cost+=W.cost,W.costCredits!==void 0)Z.assistantMessage.costCredits=(Z.assistantMessage.costCredits??0)+W.costCredits;if(Z.assistantMessage.tokens=W.tokens,W.contextWindow!==void 0)Z.assistantMessage.contextWindow=W.contextWindow;yield*X.updatePart({id:Q2.ascending(),reason:G.finishReason,snapshot:yield*Q.track(),messageID:Z.assistantMessage.id,sessionID:Z.assistantMessage.sessionID,type:"step-finish",tokens:W.tokens,cost:W.cost,costCredits:W.costCredits,contextWindow:W.contextWindow}),yield*X.updateMessage(Z.assistantMessage);let K=yield*U6({ctx:Z,session:X,snapshot:Q}),y=W.tokens.input+W.tokens.cache.read+W.tokens.cache.write,j=W.tokens.output+W.tokens.reasoning;if(Z.agentMetrics)Z.agentMetrics.tokens_in+=y,Z.agentMetrics.tokens_out+=j,Z.agentMetrics.files_changed+=K;if(yield*J.publish(I2.ModelCall,{sessionID:Z.sessionID,finish_reason:G.finishReason,ttft_ms:Z.firstTokenAt&&Z.stepStartedAt?Z.firstTokenAt-Z.stepStartedAt:void 0,latency_ms:Z.stepStartedAt?Date.now()-Z.stepStartedAt:0,cached_read_tokens:W.tokens.cache.read,model_id:Z.model.id,provider:Z.model.providerID,total_tokens_in:y,total_tokens_out:j}).pipe(Y.ignore),yield*V.summarize({sessionID:Z.sessionID,messageID:Z.assistantMessage.parentID}).pipe(Y.ignore,Y.forkIn(O)),!Z.assistantMessage.summary&&U1({cfg:yield*B.get(),tokens:W.tokens,model:Z.model}))Z.needsOverflowHandling=!0})}var m5=3,_V=s.create({service:"session.processor.events"});function l5($){let{ctx:Z,session:X,snapshot:Q,agents:J,permission:B,plugin:V,bus:O,status:G,isMain:W,checkTextNgram:K,updateToolCall:y,completeToolCall:j,failToolCall:q,isBackendAuthRejection:H,backendBillingFailureMessage:z,finishStep:L}=$;return Y.fnUntraced(function*(D){switch(D.type){case"start":if(W)yield*G.set(Z.sessionID,{type:"busy"});return;case"reasoning-start":if(D.id in Z.reasoningMap)return;Z.reasoningMap[D.id]={id:Q2.ascending(),messageID:Z.assistantMessage.id,sessionID:Z.assistantMessage.sessionID,type:"reasoning",text:"",time:{start:D.time?.start??Date.now()},metadata:D.providerMetadata},yield*X.updatePart(Z.reasoningMap[D.id]),Z.stepPartIds.push(Z.reasoningMap[D.id].id);return;case"reasoning-delta":if(!Z.firstTokenAt)Z.firstTokenAt=Date.now();if(!(D.id in Z.reasoningMap))return;if(Z.reasoningMap[D.id].text+=D.text,K(D.text),D.providerMetadata)Z.reasoningMap[D.id].metadata=D.providerMetadata;yield*X.updatePartDelta({sessionID:Z.reasoningMap[D.id].sessionID,messageID:Z.reasoningMap[D.id].messageID,partID:Z.reasoningMap[D.id].id,field:"text",delta:D.text});return;case"reasoning-end":if(!(D.id in Z.reasoningMap))return;if(Z.reasoningMap[D.id].text=Z.reasoningMap[D.id].text,Z.reasoningMap[D.id].time={...Z.reasoningMap[D.id].time,end:Date.now()},D.providerMetadata)Z.reasoningMap[D.id].metadata=D.providerMetadata;yield*X.updatePart(Z.reasoningMap[D.id]),delete Z.reasoningMap[D.id];return;case"tool-input-start":if(Z.assistantMessage.summary)throw Error(`Tool call not allowed while generating summary: ${D.toolName}`);let U=yield*X.updatePart({id:Z.toolcalls[D.id]?.partID??Q2.ascending(),messageID:Z.assistantMessage.id,sessionID:Z.assistantMessage.sessionID,type:"tool",tool:D.toolName,callID:D.id,state:{status:"pending",input:{},raw:""},metadata:D.providerExecuted?{providerExecuted:!0}:void 0});Z.stepPartIds.push(U.id),Z.toolcalls[D.id]={done:yield*k2.make(),partID:U.id,messageID:U.messageID,sessionID:U.sessionID};return;case"tool-input-delta":return;case"tool-input-end":return;case"tool-call":{if(Z.assistantMessage.summary)throw Error(`Tool call not allowed while generating summary: ${D.toolName}`);yield*y(D.toolCallId,(x)=>({...x,tool:D.toolName,state:{...x.state,status:"running",input:D.input,time:{start:Date.now()}},metadata:x.metadata?.providerExecuted?{...D.providerMetadata,providerExecuted:!0}:D.providerMetadata}));let C=o.parts(Z.assistantMessage.id).slice(-m5),S=JSON.stringify(D.input);if(C.length!==m5||!C.every((x)=>x.type==="tool"&&x.tool===D.toolName&&x.state.status!=="pending"&&JSON.stringify(x.state.input)===S))return;let E=yield*J.get(Z.assistantMessage.agent);yield*B.ask({permission:"doom_loop",patterns:[D.toolName],sessionID:Z.assistantMessage.sessionID,metadata:{tool:D.toolName,input:D.input},always:[D.toolName],ruleset:E.permission,interactive:!_6.has(Z.assistantMessage.agent)});return}case"tool-result":{yield*j(D.toolCallId,D.output);return}case"tool-error":{yield*q(D.toolCallId,D.error);let I=H(D.error)?y$(D.error):z(D.error);if(I)yield*O.publish(U2.Error,{sessionID:Z.sessionID,error:new x2.Unknown({message:I}).toObject()});yield*O.publish(I2.ToolCall,{sessionID:Z.sessionID,tool_name:D.toolName,input_bytes:I2.jsonByteLength(D.input),output_bytes:0,tool_call_id:D.toolCallId,tool_call_status:"error"}).pipe(Y.ignore);return}case"error":throw D.error;case"start-step":if(Z.stepStartedAt=Date.now(),Z.firstTokenAt=void 0,!Z.snapshot)Z.snapshot=yield*Q.track();let F=Q2.ascending();yield*X.updatePart({id:F,messageID:Z.assistantMessage.id,sessionID:Z.sessionID,snapshot:Z.snapshot,type:"step-start"}),Z.stepPartIds.push(F);return;case"finish-step":yield*L(D);return;case"text-start":Z.currentText={id:Q2.ascending(),messageID:Z.assistantMessage.id,sessionID:Z.assistantMessage.sessionID,type:"text",text:"",time:{start:Date.now()},metadata:D.providerMetadata},yield*X.updatePart(Z.currentText),Z.stepPartIds.push(Z.currentText.id);return;case"text-delta":if(!Z.firstTokenAt)Z.firstTokenAt=Date.now();if(!Z.currentText)return;if(Z.currentText.text+=D.text,K(D.text),D.providerMetadata)Z.currentText.metadata=D.providerMetadata;yield*X.updatePartDelta({sessionID:Z.currentText.sessionID,messageID:Z.currentText.messageID,partID:Z.currentText.id,field:"text",delta:D.text});return;case"text-end":if(!Z.currentText)return;Z.currentText.text=Z.currentText.text,Z.currentText.text=(yield*V.trigger("experimental.text.complete",{sessionID:Z.sessionID,messageID:Z.assistantMessage.id,partID:Z.currentText.id},{text:Z.currentText.text})).text;{let I=Date.now();Z.currentText.time={start:Z.currentText.time?.start??I,end:I}}if(D.providerMetadata)Z.currentText.metadata=D.providerMetadata;yield*X.updatePart(Z.currentText),Z.currentText=void 0;return;case"finish":return;default:_V.info("unhandled",{event:D.type,value:D});return}})}var RV=s.create({service:"session.processor"});class R6 extends Z2.Service()("@qitqode/SessionProcessor"){}var i5=M.effect(R6,Y.gen(function*(){let $=yield*f2,Z=yield*B2.Service,X=yield*p.Service,Q=yield*q0.Service,J=yield*g2.Service,B=yield*E2.Service,V=yield*z2.Service,O=yield*H2.Service,G=yield*P0.Service,W=yield*d2.Scope,K=yield*y0.Service,y=Y.fn("SessionProcessor.create")(function*(j){let q=yield*Q.track(),H={assistantMessage:j.assistantMessage,sessionID:j.sessionID,model:j.model,agentMetrics:j.agentMetrics,toolcalls:{},shouldBreak:!1,snapshot:q,blocked:!1,needsOverflowHandling:!1,currentText:void 0,reasoningMap:{},stepStartedAt:void 0,firstTokenAt:void 0,stepPartIds:[],textNgramMonitor:void 0,textNgramRepeat:!1},z=!1,L=!H.assistantMessage.agentID||H.assistantMessage.agentID==="main",b=RV.clone().tag("session.id",j.sessionID).tag("messageID",j.assistantMessage.id),D=(m)=>o.fromError(m,{providerID:j.model.providerID,aborted:z}),U=E5({ctx:H,session:$}),{settleToolCall:F,readToolCall:I,updateToolCall:C,completeToolCall:S,failToolCall:E,isBackendAuthRejection:x,backendBillingFailureMessage:k}=U,T=(m)=>{if(H.textNgramRepeat||!H.textNgramMonitor)return;if(H.textNgramMonitor.append(m))H.textNgramRepeat=!0},N=d5({ctx:H,session:$,snapshot:Q,bus:X,config:Z,summary:G,scope:W}),A=l5({ctx:H,session:$,snapshot:Q,agents:J,permission:V,plugin:O,bus:X,status:K,isMain:L,checkTextNgram:T,updateToolCall:C,completeToolCall:S,failToolCall:E,isBackendAuthRejection:x,backendBillingFailureMessage:k,finishStep:N}),_=v5({ctx:H,session:$,snapshot:Q,readToolCall:I}),R=Y.fn("SessionProcessor.halt")(function*(m){b.error("process",{error:y$(m),stack:m instanceof Error?m.stack:void 0});let h=D(m);if(o.ContextOverflowError.isInstance(h)){H.needsOverflowHandling=!0,yield*X.publish(U2.Error,{sessionID:H.sessionID,error:h});return}if(H.assistantMessage.error=h,yield*X.publish(U2.Error,{sessionID:H.assistantMessage.sessionID,error:H.assistantMessage.error}),L)yield*K.set(H.sessionID,{type:"idle"})}),g=Y.fn("SessionProcessor.process")(function*(m){return b.info("process"),H.needsOverflowHandling=!1,H.shouldBreak=(yield*Z.get()).experimental?.continue_loop_on_deny!==!0,yield*Y.gen(function*(){if(yield*Y.gen(function*(){H.currentText=void 0,H.reasoningMap={},H.stepPartIds=[],H.toolcalls={},H.textNgramRepeat=!1,H.textNgramMonitor=L6(),yield*B.stream(m).pipe(c5((f)=>A(f)),u5(()=>H.needsOverflowHandling||H.textNgramRepeat),o5)}).pipe(Y.onInterrupt(()=>Y.gen(function*(){if(z=!0,!H.assistantMessage.error)yield*R(new DOMException("Aborted","AbortError"))})),Y.catchCauseIf((h)=>!V2.hasInterruptsOnly(h),(h)=>Y.fail(V2.squash(h))),Y.tapError(()=>Y.gen(function*(){if(H.currentText){let v=Date.now();H.currentText.time={start:H.currentText.time?.start??v,end:v},yield*$.updatePart(H.currentText),H.currentText=void 0}let h=new Set(H.stepPartIds),f=new Set;for(let v of o.parts(H.assistantMessage.id)){if(!h.has(v.id))continue;if(v.type!=="text"&&v.type!=="reasoning")continue;if(v.text.trim().length>0)f.add(v.id)}if(f.size>0){for(let v of o.parts(H.assistantMessage.id))if(h.has(v.id)&&v.type==="step-start")f.add(v.id)}for(let v of H.stepPartIds){if(f.has(v))continue;yield*$.removePart({sessionID:H.sessionID,messageID:H.assistantMessage.id,partID:v})}H.stepPartIds=[]})),Y.retry(p5.policy({parse:D,set:(h)=>L?K.set(H.sessionID,{type:"retry",attempt:h.attempt,message:h.message,next:h.next}):Y.void})),Y.catch(R),Y.ensuring(_())),H.needsOverflowHandling)return"overflow";if(!H.textNgramRepeat&&!H.assistantMessage.error){let h=new Set(H.stepPartIds);for(let f of o.parts(H.assistantMessage.id)){if(!h.has(f.id))continue;if(f.type!=="text"&&f.type!=="reasoning")continue;if(y6(f.text)){b.info("fake tool tag detected in end-of-turn sweep",{partID:f.id}),H.textNgramRepeat=!0;break}}}if(H.textNgramRepeat){let h=new Set(H.stepPartIds),f=new Set;for(let v of o.parts(H.assistantMessage.id)){if(!h.has(v.id))continue;if(v.type!=="text"&&v.type!=="reasoning")continue;yield*$.removePart({sessionID:H.sessionID,messageID:H.assistantMessage.id,partID:v.id}),f.add(v.id)}return H.stepPartIds=H.stepPartIds.filter((v)=>!f.has(v)),"text-repeat"}if(H.blocked||H.assistantMessage.error)return"stop";return"continue"})}),l=Y.fn("SessionProcessor.replay")(function*(m){return b.info("replay",{toolCalls:m.toolCalls.length,finish:m.finishReason}),H.needsOverflowHandling=!1,H.shouldBreak=(yield*Z.get()).experimental?.continue_loop_on_deny!==!0,yield*h5(m,{context:H,handleEvent:A,cleanup:_,halt:R,setAborted:()=>{z=!0},recordOverhead:(h)=>{let f=h.overhead;if(!f)return Y.void;return H.assistantMessage.cost+=f.cost,Y.gen(function*(){if(yield*$.updateMessage(H.assistantMessage),H.agentMetrics)H.agentMetrics.tokens_in+=f.tokensIn,H.agentMetrics.tokens_out+=f.tokensOut;yield*X.publish(I2.ModelCall,{sessionID:H.sessionID,finish_reason:"max-mode-overhead",latency_ms:0,cached_read_tokens:0,model_id:H.model.id,provider:H.model.providerID,total_tokens_in:f.tokensIn,total_tokens_out:f.tokensOut}).pipe(Y.ignore)})}})});return{get message(){return H.assistantMessage},updateToolCall:C,completeToolCall:S,process:g,replay:l}});return R6.of({create:y})})),CV=M.suspend(()=>i5.pipe(M.provide(d0),M.provide(q0.defaultLayer),M.provide(g2.defaultLayer),M.provide(E2.defaultLayer),M.provide(z2.defaultLayer),M.provide(H2.defaultLayer),M.provide(P0.defaultLayer),M.provide(y0.defaultLayer),M.provide(p.layer),M.provide(B2.defaultLayer)));var z$={};b2(z$,{prune:()=>EV,layer:()=>e5,isOverflow:()=>gV,extractQortexSummary:()=>r5,defaultLayer:()=>$X,create:()=>fV,SessionCompaction:()=>z$,Service:()=>O8,PRUNE_PROTECT:()=>R7,PRUNE_MINIMUM:()=>A1,Event:()=>t5});var A1=20000,R7=40000,IV=["skill"];function I6($){let Z=0,X=0,Q=[],J=0;$:for(let B=$.length-1;B>=0;B--){let V=$[B];if(V.info.role==="user")J++;if(J<2)continue;if(V.info.role==="assistant"&&V.info.summary)break $;for(let O=V.parts.length-1;O>=0;O--){let G=V.parts[O];if(G.type==="tool"){if(G.state.status==="completed"){if(IV.includes(G.tool))continue;if(G.state.time.compacted)break $;let W=C6.estimate(G.state.output);if(Z+=W,Z>R7)X+=W,Q.push(G)}}}}return{total:Z,pruned:X,toPrune:Q}}function S6($,Z){return Y.gen(function*(){for(let X of $){if(X.state.status!=="completed")continue;X.state.time.compacted=Date.now(),yield*Z(X)}})}function n5($,Z){let X=(Q)=>{let J;try{J=$.parse(Q)}catch(B){if(B instanceof F2.ZodError){let V=JSON.stringify(B.issues,null,2);throw Error(`Schema validation failed:
132
- ${V}`,{cause:B})}throw B}return Z(J)};return X.force=(Q)=>Z(Q),X.schema=$,X}var t$=s.create({service:"session.compaction"});function r5($){if($.summary)return $.summary;if(!Array.isArray($.messages)||$.messages.length===0)return null;let Z=$.startIndex??0;for(let X=Z;X<$.messages.length;X++){let Q=$.messages[X];if(Q?.role!=="assistant")continue;let J=Q.content;if(typeof J==="string"&&J.trim())return J.trim();if(Array.isArray(J)){let B=J.filter((V)=>V?.type==="text"&&typeof V?.text==="string").map((V)=>V.text).join(`
133
- `).trim();if(B)return B}}return null}var t5={Compacted:O2.define("session.compacted",P.object({sessionID:D2.zod}))},s5=2,SV=2000,kV=8000;function TV($){return $.cfg.compaction?.preserve_recent_tokens??Math.min(kV,Math.max(SV,Math.floor(b1($)*0.25)))}function hV($){let Z=[];for(let X=0;X<$.length;X++){let Q=$[X];if(Q.info.role!=="user")continue;if(Q.parts.some((J)=>J.type==="compaction"))continue;Z.push({start:X,end:$.length,id:Q.info.id})}for(let X=0;X<Z.length-1;X++)Z[X].end=Z[X+1].start;return Z}class O8 extends Z2.Service()("@qitqode/SessionCompaction"){}var e5=M.effect(O8,Y.gen(function*(){let $=yield*p.Service,Z=yield*B2.Service,X=yield*f2,Q=yield*g2.Service,J=yield*H2.Service,B=yield*m0.Service,V=yield*y2.Service,O=Y.fn("SessionCompaction.isOverflow")(function*(z){return U1({cfg:yield*Z.get(),tokens:z.tokens,model:z.model})}),G=5000,W=new Map,K=Y.fn("SessionCompaction.estimate")(function*(z){let L=`${z.model.providerID}\x00${z.model.id}\x00${z.model.api.npm}\x00${z.model.api.id}`,b=0;for(let D of z.messages){let U=`${L}\x00${o.fingerprint(D)}`,F=W.get(U);if(F===void 0){let I=yield*o.toModelMessagesEffect([D],z.model);F=0;for(let C of I)F+=C6.estimate(JSON.stringify(C));if(W.size>=5000)W.delete(W.keys().next().value);W.set(U,F)}else W.delete(U),W.set(U,F);b+=F}return b}),y=Y.fn("SessionCompaction.select")(function*(z){let L=z.cfg.compaction?.tail_turns??s5;if(L<=0)return{head:z.messages,tail_start_id:void 0};let b=TV({cfg:z.cfg,model:z.model}),D=hV(z.messages);if(!D.length)return{head:z.messages,tail_start_id:void 0};let U=D.slice(-L),F=yield*Y.forEach(U,(S)=>K({messages:z.messages.slice(S.start,S.end),model:z.model}),{concurrency:1});if(F.at(-1)>b)return t$.info("tail fallback",{tokenBudget:b,size:F.at(-1)}),{head:z.messages,tail_start_id:void 0};let I=0,C;for(let S=U.length-1;S>=0;S--){let E=F[S];if(I+E>b)break;I+=E,C=U[S]}if(!C||C.start===0)return{head:z.messages,tail_start_id:void 0};return{head:z.messages.slice(0,C.start),tail_start_id:C.id}}),j=Y.fn("SessionCompaction.prune")(function*(z){if(!(yield*Z.get()).compaction?.prune)return;t$.info("pruning",{agentID:z.agentID??"main"});let b=yield*o.filterCompactedEffect(z.sessionID,{agentID:z.agentID}).pipe(Y.catchIf(F8.isInstance,()=>Y.succeed(void 0)));if(!b)return;let{total:D,pruned:U,toPrune:F}=I6(b);if(t$.info("found",{pruned:U,total:D}),U>A1)yield*S6(F,(I)=>X.updatePart(I)),t$.info("pruned",{count:F.length})}),q=Y.fn("SessionCompaction.process")(function*(z){let L=z.messages.findLast((h)=>h.info.id===z.parentID);if(!L||L.info.role!=="user")throw Error(`Compaction parent must be a user message: ${z.parentID}`);let b=L.info,D=L.parts.find((h)=>h.type==="compaction"),U=z.messages,F;if(z.overflow){let h=z.messages.findIndex((v)=>v.info.id===z.parentID);for(let v=h-1;v>=0;v--){let e=z.messages[v];if(e.info.role==="user"&&!e.parts.some((n)=>n.type==="compaction")){F={info:e.info,parts:e.parts},U=z.messages.slice(0,v);break}}if(!(F&&U.some((v)=>v.info.role==="user"&&!v.parts.some((e)=>e.type==="compaction"))))F=void 0,U=z.messages}let I=yield*Q.get("compaction"),C=I.model?yield*V.getModel(I.model.providerID,I.model.modelID):yield*V.getModel(b.model.providerID,b.model.modelID),S=yield*Z.get(),E=D&&U.at(-1)?.info.id===z.parentID?U.slice(0,-1):U,x=yield*y({messages:E,cfg:S,model:C}),k=yield*J.trigger("experimental.session.compacting",{sessionID:z.sessionID},{context:[],prompt:void 0}),T=`When constructing the summary, try to stick to this template:
134
- ---
135
- ## Goal
136
-
137
- [What goal(s) is the user trying to accomplish?]
138
-
139
- ## Instructions
140
-
141
- - [What important instructions did the user give you that are relevant]
142
- - [If there is a plan or spec, include information about it so next agent can continue using it]
143
-
144
- ## Discoveries
145
-
146
- [What notable things were learned during this conversation that would be useful for the next agent to know when continuing the work]
147
-
148
- ## Accomplished
149
-
150
- [What work has been completed, what work is still in progress, and what work is left?]
151
-
152
- ## Relevant files / directories
153
-
154
- [Construct a structured list of relevant files that have been read, edited, or created that pertain to the task at hand. If all the files in a directory are relevant, include the path to the directory.]
155
- ---`,N=k.prompt??[T,...k.context].join(`
156
-
157
- `),A=structuredClone(x.head);yield*J.trigger("experimental.chat.messages.transform",{},{messages:A});let _=yield*o.toModelMessagesEffect(A,C,{stripMedia:!0}),R=yield*d.context,g={id:w2.ascending(),role:"assistant",parentID:z.parentID,sessionID:z.sessionID,agentID:z.agentID??void 0,mode:"compaction",agent:"compaction",variant:b.model.variant,summary:!0,path:{cwd:R.directory,root:R.worktree},cost:0,tokens:{output:0,input:0,reasoning:0,cache:{read:0,write:0}},modelID:C.id,providerID:C.providerID,time:{created:Date.now()}},l=null,m=yield*Y.promise(()=>$0.resolveCompressTrajectorySafe({messages:_,tier:"economical",protectFirstSystem:!0,protectFirstUser:!0,protectLastTurns:S.compaction?.tail_turns??s5}).catch((h)=>{let f=$0.isBackendBillingError(h);return t$.warn(f?"compressTrajectorySafe rejected (qredits/rate limit); using local compaction fallback":"compressTrajectorySafe unavailable; using local compaction fallback",{error:h instanceof Error?h.message:String(h),...f?{billing:!0}:{},sessionID:z.sessionID}),null}));if(m!==null){if(!m.safe)t$.info("compressTrajectorySafe: no safe middle span; falling back to local compaction",{sessionID:z.sessionID,reason:m.reason});else if(l=r5(m),l===null)t$.warn("compressTrajectorySafe: could not extract summary text; using local compaction fallback",{sessionID:z.sessionID})}if(l!==null){let h=Date.now();yield*X.updateMessage(g),yield*X.updatePart({id:Q2.ascending(),messageID:g.id,sessionID:z.sessionID,type:"text",text:l,time:{start:h,end:h}}),yield*X.updateMessage({...g,finish:"done"})}else{yield*X.updateMessage(g);let h=yield*B.create({assistantMessage:g,sessionID:z.sessionID,model:C}),f=yield*h.process({user:b,agent:I,sessionID:z.sessionID,tools:{},system:[],messages:[..._,{role:"user",content:[{type:"text",text:N}]}],model:C});if(f==="overflow")return h.message.error=new o.ContextOverflowError({message:F?"Conversation history too large to compact - exceeds model context limit":"Session too large to compact - context exceeds model limit even after stripping media"}).toObject(),h.message.finish="error",yield*X.updateMessage(h.message),"stop";if(f==="text-repeat")return"stop";if(h.message.error)return"stop"}if(D&&x.tail_start_id&&D.tail_start_id!==x.tail_start_id)yield*X.updatePart({...D,tail_start_id:x.tail_start_id});if(z.auto){if(F){let h=F.info,f=yield*X.updateMessage({id:w2.ascending(),role:"user",sessionID:z.sessionID,agentID:z.agentID??void 0,time:{created:Date.now()},agent:h.agent,model:h.model,format:h.format,tools:h.tools,system:h.system});for(let v of F.parts){if(v.type==="compaction")continue;let e=v.type==="file"&&o.isMedia(v.mime)?{type:"text",text:`[Attached ${v.mime}: ${v.filename??"file"}]`}:v;yield*X.updatePart({...e,id:Q2.ascending(),messageID:f.id,sessionID:z.sessionID})}}if(!F){let h=yield*V.getProvider(b.model.providerID);if((yield*J.trigger("experimental.compaction.autocontinue",{sessionID:z.sessionID,agent:b.agent,model:yield*V.getModel(b.model.providerID,b.model.modelID),provider:{source:h.source,info:h,options:h.options},message:b,overflow:z.overflow===!0},{enabled:!0})).enabled){let f=yield*X.updateMessage({id:w2.ascending(),role:"user",sessionID:z.sessionID,agentID:z.agentID??void 0,time:{created:Date.now()},agent:b.agent,model:b.model}),v=(z.overflow?`The previous request exceeded the provider's size limit due to large media attachments. The conversation was compacted and media files were removed from context. If the user was asking about attached images or files, explain that the attachments were too large to process and suggest they try again with smaller or fewer files.
158
-
159
- `:"")+"Continue if you have next steps, or stop and ask for clarification if you are unsure how to proceed.";yield*X.updatePart({id:Q2.ascending(),messageID:f.id,sessionID:z.sessionID,type:"text",metadata:{compaction_continue:!0},synthetic:!0,text:v,time:{start:Date.now(),end:Date.now()}})}}}return yield*$.publish(t5.Compacted,{sessionID:z.sessionID}),"continue"}),H=Y.fn("SessionCompaction.create")(function*(z){let L=yield*X.updateMessage({id:w2.ascending(),role:"user",model:z.model,sessionID:z.sessionID,agentID:z.agentID??void 0,agent:z.agent,time:{created:Date.now()}});yield*X.updatePart({id:Q2.ascending(),messageID:L.id,sessionID:L.sessionID,type:"compaction",auto:z.auto,overflow:z.overflow})});return O8.of({isOverflow:O,prune:j,process:q,create:H})})),$X=M.suspend(()=>e5.pipe(M.provide(y2.defaultLayer),M.provide(d0),M.provide(m0.defaultLayer),M.provide(g2.defaultLayer),M.provide(H2.defaultLayer),M.provide(p.layer),M.provide(B2.defaultLayer))),{runPromise:C7}=a5(O8,$X);function gV($){return C7((Z)=>Z.isOverflow($))}function EV($){return C7((Z)=>Z.prune($))}var fV=n5(P.object({sessionID:D2.zod,agent:P.string(),model:P.object({providerID:e$.zod,modelID:t0.zod}),auto:P.boolean(),overflow:P.boolean().optional(),agentID:P.string().optional()}),($)=>C7((Z)=>Z.create($)));var q$={};b2(q$,{resolveThresholds:()=>QX,parseThreshold:()=>YX,layer:()=>JX,defaultThresholdsFor:()=>XX,defaultLayer:()=>oV,SessionPrune:()=>q$,Service:()=>k6});var e0=s.create({service:"session.prune"}),vV=4096,dV=1536,mV=1536,lV=300000,cV=13000,uV=3;function XX($){if($<25000)return[];if($<=200000)return["20%","40%","60%","80%"];if($<=500000)return["10%","20%","30%","40%","50%","60%","70%","80%","90%"];return Array.from({length:18},(Z,X)=>`${(X+1)*5}%`)}function ZX($,Z){if(!$)return!0;let X=$.cacheTTL??lV;if(!Z)return!0;return Date.now()-Z>X}function YX($,Z){let X=$.trim();if(X.endsWith("%")){let V=parseFloat(X.slice(0,-1));if(!Number.isFinite(V)||V<=0||V>100)throw Error(`Invalid checkpoint threshold percentage: "${$}" (must be 0 < n <= 100)`);let O=Math.floor(Z*V/100);if(O<=0)throw Error(`Invalid checkpoint threshold percentage: "${$}" (resolves to zero tokens)`);return O}let Q=X.match(/^(\d+(?:\.\d+)?)([KkMm]?)$/);if(!Q)throw Error(`Invalid checkpoint threshold format: "${$}"`);let J=parseFloat(Q[1]);if(Q[2]==="K"||Q[2]==="k")J*=1000;else if(Q[2]==="M"||Q[2]==="m")J*=1e6;let B=Math.floor(J);if(B<=0)throw Error(`Invalid checkpoint threshold: "${$}" (must be greater than 0)`);return B}function QX($,Z,X){let Q=X??cV,J=Z-Q;if(J<=0)throw Error(`Model window size (${Z}) is too small for checkpoints (need > ${Q} reserved tokens)`);let B=$.map((K)=>({raw:K,value:YX(K,Z)})),V=[],O=!1;for(let K of B){if(K.value<=J){V.push(K.value);continue}if(!O){e0.info(`checkpoint threshold "${K.raw}" (${K.value}) exceeds maxAllowed (${J}) \u2014 clamped to maxAllowed`),V.push(J),O=!0;continue}e0.info(`checkpoint threshold "${K.raw}" (${K.value}) exceeds maxAllowed (${J}) \u2014 dropped (already clamped earlier)`)}let G=V.sort((K,y)=>K-y),W=[];for(let K of G)if(W.length===0||W[W.length-1]!==K)W.push(K);return W}class k6 extends Z2.Service()("@qitqode/SessionPrune"){}var JX=M.effect(k6,Y.gen(function*(){let $=yield*B2.Service,Z=yield*f2,X=yield*D$.Service,Q=yield*M2.Service,J=new Map,B=new Set,V=new Map,O=Y.fn("SessionPrune.stripNonEssential")(function*(j){if(!ZX(j.model,j.lastAssistantTime))return;let q=yield*Z.messages({sessionID:j.sessionID,agentID:"main"}).pipe(Y.catchIf(F8.isInstance,()=>Y.succeed(void 0)));if(!q)return;let H=0,z=q.length;for(let b=q.length-1;b>=0;b--){if(q[b].info.role==="user")H++;if(H>3){z=b;break}}let L=0;for(let b=0;b<z;b++){let D=q[b];for(let U of D.parts){if(U.type==="file"&&o.isMedia(U.mime))yield*Z.updatePart({...U,url:"",filename:`[stripped: ${U.filename??U.mime}]`}),L++;if(U.type==="reasoning"&&D.info.role==="assistant")yield*Z.updatePart({...U,text:""}),L++}}if(L>0)e0.info("stripped non-essential content",{count:L})}),G=Y.fn("SessionPrune.fireCheckpoints")(function*(j){if(j.agentID&&(yield*Q.isSystemSpawned(j.sessionID,j.agentID)))return;if((j.agentID?yield*Q.get(j.sessionID,j.agentID):void 0)?.mode==="subagent")return;if(yield*X.isWriterRunning(j.sessionID)){e0.info("checkpoint writer running, skipping new threshold trigger",{sessionID:j.sessionID});return}let H=yield*$.get(),z=b1({cfg:H,model:j.model});if(z===0)return;let L=H.checkpoint?.thresholds??XX(z),b=QX(L,z,H.checkpoint?.reserved);if(b.length===0)return;let D=H.checkpoint?.max_writer_failures??uV,U=j.tokens.total||j.tokens.input+j.tokens.output+j.tokens.cache.read+j.tokens.cache.write,F=J.get(j.sessionID)??new Set,I=b[b.length-1];for(let C of b){if(U<C)break;if(F.has(C))continue;let S;if((yield*X.tryStartCheckpointWriter({sessionID:j.sessionID,model:{providerID:j.model.providerID,modelID:j.model.id},promptOps:j.promptOps,onStarted:(x)=>{S=x}}).pipe(Y.catch(()=>Y.succeed("skipped"))))==="started")yield*Y.gen(function*(){let x=S?yield*k2.await(S):yield*X.waitForWriter(j.sessionID).pipe(Y.map((T)=>T==="success"?{status:"success"}:T==="failure"?{status:"failure",error:"writer failed"}:{status:"cancelled"}));if(x.status==="success"){V.delete(j.sessionID);return}if(x.status!=="failure")return;let k=(V.get(j.sessionID)??0)+1;if(V.set(j.sessionID,k),k<D)J.delete(j.sessionID),B.delete(j.sessionID),e0.info("checkpoint writer failed \u2014 cleared thresholds for retry",{sessionID:j.sessionID,attempt:k,maxAttempts:D});else e0.warn("checkpoint writer gave up after max consecutive failures",{sessionID:j.sessionID,maxAttempts:D})}).pipe(Y.forkDetach);if(F.add(C),e0.info("checkpoint triggered",{threshold:C,currentTokens:U}),C===I)B.add(j.sessionID)}J.set(j.sessionID,F)}),W=Y.fn("SessionPrune.prune")(function*(j){let q=yield*$.get();if(!q.compaction?.prune)return;if(!ZX(j.model,j.lastAssistantTime))return;let H=A6({cfg:q,tokens:j.tokens,model:j.model});if(H===0)return;let z=H>=2?2:1;e0.info("pruning",{level:z});let L=yield*Z.messages({sessionID:j.sessionID,agentID:"main"}).pipe(Y.catchIf(F8.isInstance,()=>Y.succeed(void 0)));if(!L)return;let{total:b,pruned:D,toPrune:U}=I6(L);if(e0.info("found",{pruned:D,total:b,level:z}),z===1){for(let F of U)if(F.state.status==="completed"){let I=F.state.output;if(I.length>vV)F.state.output=I.slice(0,dV)+`
160
-
161
- [... trimmed \u2014 kept first and last 1.5K of `+I.length+` chars ...]
162
-
163
- `+I.slice(-mV),yield*Z.updatePart(F)}e0.info("soft-trimmed",{count:U.length})}else if(D>A1)yield*S6(U,(F)=>Z.updatePart(F)),e0.info("pruned",{count:U.length});if(z>=2)yield*O({sessionID:j.sessionID,model:j.model,lastAssistantTime:j.lastAssistantTime})}),K=Y.fn("SessionPrune.maxThresholdCrossed")(function*(j){return B.has(j)}),y=Y.fn("SessionPrune.resetThresholds")(function*(j){J.delete(j),B.delete(j)});return k6.of({prune:W,fireCheckpoints:G,maxThresholdCrossed:K,resetThresholds:y})})),oV=M.suspend(()=>JX.pipe(M.provide(d0),M.provide(B2.defaultLayer),M.provide(D$.defaultLayer),M.provide(M2.defaultLayer)));var $$={};b2($$,{layer:()=>BX,defaultLayer:()=>nV,SessionRevert:()=>$$,Service:()=>T6,RevertInput:()=>iV});var pV=s.create({service:"session.revert"}),iV=P.object({sessionID:D2.zod,messageID:w2.zod,partID:Q2.zod.optional()});class T6 extends Z2.Service()("@qitqode/SessionRevert"){}var BX=M.effect(T6,Y.gen(function*(){let $=yield*f2,Z=yield*q0.Service,X=yield*C$.Service,Q=yield*p.Service,J=yield*P0.Service,B=yield*z0.Service,V=Y.fn("SessionRevert.revert")(function*(W){yield*B.assertNotBusy(W.sessionID);let K=yield*$.messages({sessionID:W.sessionID,agentID:"*"}),y,j=yield*$.get(W.sessionID),q,H=[];for(let D of K){if(D.info.role==="user")y=D.info;let U=[];for(let F of D.parts){if(q){if(F.type==="patch")H.push(F);continue}if(!q){if(D.info.id===W.messageID&&!W.partID||F.id===W.partID){let I=U.some((C)=>["text","tool"].includes(C.type))?W.partID:void 0;q={messageID:!I&&y?y.id:D.info.id,partID:I}}U.push(F)}}}if(!q)return j;let z=q.messageID;if(q.snapshot=j.revert?.snapshot??(yield*Z.track()),j.revert?.snapshot)yield*Z.restore(j.revert.snapshot);if(yield*Z.revert(H),q.snapshot)q.diff=yield*Z.diff(q.snapshot);let L=K.filter((D)=>D.info.id>=z),b=yield*J.computeDiff({messages:L});return yield*X.write(["session_diff",W.sessionID],b).pipe(Y.ignore),yield*Q.publish(U2.Diff,{sessionID:W.sessionID,diff:b}),yield*$.setRevert({sessionID:W.sessionID,revert:q,summary:w6(b)}),yield*$.get(W.sessionID)}),O=Y.fn("SessionRevert.unrevert")(function*(W){pV.info("unreverting",W),yield*B.assertNotBusy(W.sessionID);let K=yield*$.get(W.sessionID);if(!K.revert)return K;if(K.revert.snapshot)yield*Z.restore(K.revert.snapshot);return yield*$.clearRevert(W.sessionID),yield*$.get(W.sessionID)}),G=Y.fn("SessionRevert.cleanup")(function*(W){if(!W.revert)return;let K=W.id,y=yield*$.messages({sessionID:K,agentID:"*"}),j=W.revert.messageID,q=[],H;for(let z of y){if(z.info.id<j)continue;if(z.info.id>j){q.push(z);continue}if(W.revert.partID){H=z;continue}q.push(z)}for(let z of q)M1.run(o.Event.Removed,{sessionID:K,messageID:z.info.id});if(W.revert.partID&&H){let z=W.revert.partID,L=H.parts.findIndex((b)=>b.id===z);if(L>=0){let b=H.parts.slice(L);H.parts=H.parts.slice(0,L);for(let D of b)M1.run(o.Event.PartRemoved,{sessionID:K,messageID:H.info.id,partID:D.id})}}yield*$.clearRevert(K)});return T6.of({revert:V,unrevert:O,cleanup:G})})),nV=M.suspend(()=>BX.pipe(M.provide(z0.defaultLayer),M.provide(d0),M.provide(q0.defaultLayer),M.provide(C$.defaultLayer),M.provide(p.layer),M.provide(P0.defaultLayer)));var m$={};b2(m$,{stepSignature:()=>f8,stableStringify:()=>X8,recallHintLines:()=>E8,layer:()=>yJ,defaultLayer:()=>bH,createStructuredOutputTool:()=>k4,ShellInput:()=>jJ,SessionPrompt:()=>m$,Service:()=>d8,PromptInput:()=>HJ,LoopInput:()=>GJ,CommandInput:()=>OJ});var N0={};b2(N0,{layer:()=>UY,defaultLayer:()=>L3,ToolsChanged:()=>V9,Status:()=>IK,Service:()=>x4,Resource:()=>RK,MCP:()=>N0,Failed:()=>CK,BrowserOpenFailed:()=>W9,AuthRequired:()=>s6});var CX=B9(wK(),1);import i6 from"process";import{PassThrough as xK}from"stream";var R1="2025-11-25";var KX=[R1,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],I$="io.modelcontextprotocol/related-task",g6="2.0",Q0=WX(($)=>$!==null&&(typeof $==="object"||typeof $==="function")),HX=_2([w(),q2().int()]),GX=w(),xy=n2({ttl:_2([q2(),I7()]).optional(),pollInterval:q2().optional()}),aV=u({ttl:q2().optional()}),rV=u({taskId:w()}),h7=n2({progressToken:HX.optional(),[I$]:rV.optional()}),C0=u({_meta:h7.optional()}),y8=C0.extend({task:aV.optional()}),jX=($)=>y8.safeParse($).success,J0=u({method:w(),params:C0.loose().optional()}),l0=u({_meta:h7.optional()}),c0=u({method:w(),params:l0.loose().optional()}),B0=n2({_meta:h7.optional()}),E6=_2([w(),q2().int()]),OX=u({jsonrpc:i(g6),id:E6,...J0.shape}).strict(),z8=($)=>OX.safeParse($).success,FX=u({jsonrpc:i(g6),...c0.shape}).strict(),yX=($)=>FX.safeParse($).success,g7=u({jsonrpc:i(g6),id:E6,result:B0}).strict(),$1=($)=>g7.safeParse($).success;var $2;(function($){$[$.ConnectionClosed=-32000]="ConnectionClosed",$[$.RequestTimeout=-32001]="RequestTimeout",$[$.ParseError=-32700]="ParseError",$[$.InvalidRequest=-32600]="InvalidRequest",$[$.MethodNotFound=-32601]="MethodNotFound",$[$.InvalidParams=-32602]="InvalidParams",$[$.InternalError=-32603]="InternalError",$[$.UrlElicitationRequired=-32042]="UrlElicitationRequired"})($2||($2={}));var E7=u({jsonrpc:i(g6),id:E6.optional(),error:u({code:q2().int(),message:w(),data:m2().optional()})}).strict();var zX=($)=>E7.safeParse($).success;var S$=_2([OX,FX,g7,E7]),Ly=_2([g7,E7]),Z1=B0.strict(),tV=l0.extend({requestId:E6.optional(),reason:w().optional()}),f6=c0.extend({method:i("notifications/cancelled"),params:tV}),eV=u({src:w(),mimeType:w().optional(),sizes:c(w()).optional(),theme:R0(["light","dark"]).optional()}),D8=u({icons:c(eV).optional()}),_1=u({name:w(),title:w().optional()}),DX=_1.extend({..._1.shape,...D8.shape,version:w(),websiteUrl:w().optional(),description:w().optional()}),$W=k7(u({applyDefaults:A2().optional()}),T2(w(),m2())),ZW=T7(($)=>{if($&&typeof $==="object"&&!Array.isArray($)){if(Object.keys($).length===0)return{form:{}}}return $},k7(u({form:$W.optional(),url:Q0.optional()}),T2(w(),m2()).optional())),XW=n2({list:Q0.optional(),cancel:Q0.optional(),requests:n2({sampling:n2({createMessage:Q0.optional()}).optional(),elicitation:n2({create:Q0.optional()}).optional()}).optional()}),YW=n2({list:Q0.optional(),cancel:Q0.optional(),requests:n2({tools:n2({call:Q0.optional()}).optional()}).optional()}),QW=u({experimental:T2(w(),Q0).optional(),sampling:u({context:Q0.optional(),tools:Q0.optional()}).optional(),elicitation:ZW.optional(),roots:u({listChanged:A2().optional()}).optional(),tasks:XW.optional()}),JW=C0.extend({protocolVersion:w(),capabilities:QW,clientInfo:DX}),BW=J0.extend({method:i("initialize"),params:JW});var VW=u({experimental:T2(w(),Q0).optional(),logging:Q0.optional(),completions:Q0.optional(),prompts:u({listChanged:A2().optional()}).optional(),resources:u({subscribe:A2().optional(),listChanged:A2().optional()}).optional(),tools:u({listChanged:A2().optional()}).optional(),tasks:YW.optional()}),f7=B0.extend({protocolVersion:w(),capabilities:VW,serverInfo:DX,instructions:w().optional()}),qX=c0.extend({method:i("notifications/initialized"),params:l0.optional()}),PX=($)=>qX.safeParse($).success,v6=J0.extend({method:i("ping"),params:C0.optional()}),WW=u({progress:q2(),total:l2(q2()),message:l2(w())}),KW=u({...l0.shape,...WW.shape,progressToken:HX}),d6=c0.extend({method:i("notifications/progress"),params:KW}),HW=C0.extend({cursor:GX.optional()}),q8=J0.extend({params:HW.optional()}),P8=B0.extend({nextCursor:GX.optional()}),GW=R0(["working","input_required","completed","failed","cancelled"]),N8=u({taskId:w(),status:GW,ttl:_2([q2(),I7()]),createdAt:w(),lastUpdatedAt:w(),pollInterval:l2(q2()),statusMessage:l2(w())}),X1=B0.extend({task:N8}),jW=l0.merge(N8),w8=c0.extend({method:i("notifications/tasks/status"),params:jW}),m6=J0.extend({method:i("tasks/get"),params:C0.extend({taskId:w()})}),l6=B0.merge(N8),c6=J0.extend({method:i("tasks/result"),params:C0.extend({taskId:w()})}),by=B0.loose(),u6=q8.extend({method:i("tasks/list")}),o6=P8.extend({tasks:c(N8)}),p6=J0.extend({method:i("tasks/cancel"),params:C0.extend({taskId:w()})}),NX=B0.merge(N8),wX=u({uri:w(),mimeType:l2(w()),_meta:T2(w(),m2()).optional()}),xX=wX.extend({text:w()}),v7=w().refine(($)=>{try{return atob($),!0}catch{return!1}},{message:"Invalid Base64 string"}),LX=wX.extend({blob:v7}),x8=R0(["user","assistant"]),C1=u({audience:c(x8).optional(),priority:q2().min(0).max(1).optional(),lastModified:VX.datetime({offset:!0}).optional()}),bX=u({..._1.shape,...D8.shape,uri:w(),description:l2(w()),mimeType:l2(w()),annotations:C1.optional(),_meta:l2(n2({}))}),OW=u({..._1.shape,...D8.shape,uriTemplate:w(),description:l2(w()),mimeType:l2(w()),annotations:C1.optional(),_meta:l2(n2({}))}),FW=q8.extend({method:i("resources/list")}),d7=P8.extend({resources:c(bX)}),yW=q8.extend({method:i("resources/templates/list")}),m7=P8.extend({resourceTemplates:c(OW)}),l7=C0.extend({uri:w()}),zW=l7,DW=J0.extend({method:i("resources/read"),params:zW}),c7=B0.extend({contents:c(_2([xX,LX]))}),u7=c0.extend({method:i("notifications/resources/list_changed"),params:l0.optional()}),qW=l7,PW=J0.extend({method:i("resources/subscribe"),params:qW}),NW=l7,wW=J0.extend({method:i("resources/unsubscribe"),params:NW}),xW=l0.extend({uri:w()}),LW=c0.extend({method:i("notifications/resources/updated"),params:xW}),bW=u({name:w(),description:l2(w()),required:l2(A2())}),UW=u({..._1.shape,...D8.shape,description:l2(w()),arguments:l2(c(bW)),_meta:l2(n2({}))}),AW=q8.extend({method:i("prompts/list")}),o7=P8.extend({prompts:c(UW)}),MW=C0.extend({name:w(),arguments:T2(w(),w()).optional()}),_W=J0.extend({method:i("prompts/get"),params:MW}),p7=u({type:i("text"),text:w(),annotations:C1.optional(),_meta:T2(w(),m2()).optional()}),i7=u({type:i("image"),data:v7,mimeType:w(),annotations:C1.optional(),_meta:T2(w(),m2()).optional()}),n7=u({type:i("audio"),data:v7,mimeType:w(),annotations:C1.optional(),_meta:T2(w(),m2()).optional()}),RW=u({type:i("tool_use"),name:w(),id:w(),input:T2(w(),m2()),_meta:T2(w(),m2()).optional()}),CW=u({type:i("resource"),resource:_2([xX,LX]),annotations:C1.optional(),_meta:T2(w(),m2()).optional()}),IW=bX.extend({type:i("resource_link")}),s7=_2([p7,i7,n7,IW,CW]),SW=u({role:x8,content:s7}),a7=B0.extend({description:w().optional(),messages:c(SW)}),r7=c0.extend({method:i("notifications/prompts/list_changed"),params:l0.optional()}),kW=u({title:w().optional(),readOnlyHint:A2().optional(),destructiveHint:A2().optional(),idempotentHint:A2().optional(),openWorldHint:A2().optional()}),TW=u({taskSupport:R0(["required","optional","forbidden"]).optional()}),UX=u({..._1.shape,...D8.shape,description:w().optional(),inputSchema:u({type:i("object"),properties:T2(w(),Q0).optional(),required:c(w()).optional()}).catchall(m2()),outputSchema:u({type:i("object"),properties:T2(w(),Q0).optional(),required:c(w()).optional()}).catchall(m2()).optional(),annotations:kW.optional(),execution:TW.optional(),_meta:T2(w(),m2()).optional()}),hW=q8.extend({method:i("tools/list")}),t7=P8.extend({tools:c(UX)}),k$=B0.extend({content:c(s7).default([]),structuredContent:T2(w(),m2()).optional(),isError:A2().optional()}),Uy=k$.or(B0.extend({toolResult:m2()})),gW=y8.extend({name:w(),arguments:T2(w(),m2()).optional()}),EW=J0.extend({method:i("tools/call"),params:gW}),L8=c0.extend({method:i("notifications/tools/list_changed"),params:l0.optional()}),AX=u({autoRefresh:A2().default(!0),debounceMs:q2().int().nonnegative().default(300)}),MX=R0(["debug","info","notice","warning","error","critical","alert","emergency"]),fW=C0.extend({level:MX}),vW=J0.extend({method:i("logging/setLevel"),params:fW}),dW=l0.extend({level:MX,logger:w().optional(),data:m2()}),mW=c0.extend({method:i("notifications/message"),params:dW}),lW=u({name:w().optional()}),cW=u({hints:c(lW).optional(),costPriority:q2().min(0).max(1).optional(),speedPriority:q2().min(0).max(1).optional(),intelligencePriority:q2().min(0).max(1).optional()}),uW=u({mode:R0(["auto","required","none"]).optional()}),oW=u({type:i("tool_result"),toolUseId:w().describe("The unique identifier for the corresponding tool call."),content:c(s7).default([]),structuredContent:u({}).loose().optional(),isError:A2().optional(),_meta:T2(w(),m2()).optional()}),pW=S7("type",[p7,i7,n7]),h6=S7("type",[p7,i7,n7,RW,oW]),iW=u({role:x8,content:_2([h6,c(h6)]),_meta:T2(w(),m2()).optional()}),nW=y8.extend({messages:c(iW),modelPreferences:cW.optional(),systemPrompt:w().optional(),includeContext:R0(["none","thisServer","allServers"]).optional(),temperature:q2().optional(),maxTokens:q2().int(),stopSequences:c(w()).optional(),metadata:Q0.optional(),tools:c(UX).optional(),toolChoice:uW.optional()}),e7=J0.extend({method:i("sampling/createMessage"),params:nW}),$9=B0.extend({model:w(),stopReason:l2(R0(["endTurn","stopSequence","maxTokens"]).or(w())),role:x8,content:pW}),Z9=B0.extend({model:w(),stopReason:l2(R0(["endTurn","stopSequence","maxTokens","toolUse"]).or(w())),role:x8,content:_2([h6,c(h6)])}),sW=u({type:i("boolean"),title:w().optional(),description:w().optional(),default:A2().optional()}),aW=u({type:i("string"),title:w().optional(),description:w().optional(),minLength:q2().optional(),maxLength:q2().optional(),format:R0(["email","uri","date","date-time"]).optional(),default:w().optional()}),rW=u({type:R0(["number","integer"]),title:w().optional(),description:w().optional(),minimum:q2().optional(),maximum:q2().optional(),default:q2().optional()}),tW=u({type:i("string"),title:w().optional(),description:w().optional(),enum:c(w()),default:w().optional()}),eW=u({type:i("string"),title:w().optional(),description:w().optional(),oneOf:c(u({const:w(),title:w()})),default:w().optional()}),$K=u({type:i("string"),title:w().optional(),description:w().optional(),enum:c(w()),enumNames:c(w()).optional(),default:w().optional()}),ZK=_2([tW,eW]),XK=u({type:i("array"),title:w().optional(),description:w().optional(),minItems:q2().optional(),maxItems:q2().optional(),items:u({type:i("string"),enum:c(w())}),default:c(w()).optional()}),YK=u({type:i("array"),title:w().optional(),description:w().optional(),minItems:q2().optional(),maxItems:q2().optional(),items:u({anyOf:c(u({const:w(),title:w()}))}),default:c(w()).optional()}),QK=_2([XK,YK]),JK=_2([$K,ZK,QK]),BK=_2([JK,sW,aW,rW]),VK=y8.extend({mode:i("form").optional(),message:w(),requestedSchema:u({type:i("object"),properties:T2(w(),BK),required:c(w()).optional()})}),WK=y8.extend({mode:i("url"),message:w(),elicitationId:w(),url:w().url()}),KK=_2([VK,WK]),X9=J0.extend({method:i("elicitation/create"),params:KK}),HK=l0.extend({elicitationId:w()}),GK=c0.extend({method:i("notifications/elicitation/complete"),params:HK}),Y9=B0.extend({action:R0(["accept","decline","cancel"]),content:T7(($)=>$===null?void 0:$,T2(w(),_2([w(),q2(),A2(),c(w())])).optional())}),jK=u({type:i("ref/resource"),uri:w()});var OK=u({type:i("ref/prompt"),name:w()}),FK=C0.extend({ref:_2([OK,jK]),argument:u({name:w(),value:w()}),context:u({arguments:T2(w(),w()).optional()}).optional()}),yK=J0.extend({method:i("completion/complete"),params:FK});var Q9=B0.extend({completion:n2({values:c(w()).max(100),total:l2(q2().int()),hasMore:l2(A2())})}),zK=u({uri:w().startsWith("file://"),name:w().optional(),_meta:T2(w(),m2()).optional()}),DK=J0.extend({method:i("roots/list"),params:C0.optional()}),qK=B0.extend({roots:c(zK)}),PK=c0.extend({method:i("notifications/roots/list_changed"),params:l0.optional()}),Ay=_2([v6,BW,yK,vW,_W,AW,FW,yW,DW,PW,wW,EW,hW,m6,c6,u6,p6]),My=_2([f6,d6,qX,PK,w8]),_y=_2([Z1,$9,Z9,Y9,qK,l6,o6,X1]),Ry=_2([v6,e7,X9,DK,m6,c6,u6,p6]),Cy=_2([f6,d6,mW,LW,u7,L8,r7,w8,GK]),Iy=_2([Z1,f7,Q9,a7,o7,d7,m7,c7,k$,t7,l6,o6,X1]);class r extends Error{constructor($,Z,X){super(`MCP error ${$}: ${Z}`);this.code=$,this.data=X,this.name="McpError"}static fromError($,Z,X){if($===$2.UrlElicitationRequired&&X){let Q=X;if(Q.elicitations)return new _X(Q.elicitations,Z)}return new r($,Z,X)}}class _X extends r{constructor($,Z=`URL elicitation${$.length>1?"s":""} required`){super($2.UrlElicitationRequired,Z,{elicitations:$})}get elicitations(){return this.data?.elicitations??[]}}class J9{append($){this._buffer=this._buffer?Buffer.concat([this._buffer,$]):$}readMessage(){if(!this._buffer)return null;let $=this._buffer.indexOf(`
164
- `);if($===-1)return null;let Z=this._buffer.toString("utf8",0,$).replace(/\r$/,"");return this._buffer=this._buffer.subarray($+1),NK(Z)}clear(){this._buffer=void 0}}function NK($){return S$.parse(JSON.parse($))}function RX($){return JSON.stringify($)+`
165
- `}var LK=i6.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function bK(){let $={};for(let Z of LK){let X=i6.env[Z];if(X===void 0)continue;if(X.startsWith("()"))continue;$[Z]=X}return $}class b8{constructor($){if(this._readBuffer=new J9,this._stderrStream=null,this._serverParams=$,$.stderr==="pipe"||$.stderr==="overlapped")this._stderrStream=new xK}async start(){if(this._process)throw Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise(($,Z)=>{if(this._process=CX.default(this._serverParams.command,this._serverParams.args??[],{env:{...bK(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:i6.platform==="win32"&&UK(),cwd:this._serverParams.cwd}),this._process.on("error",(X)=>{Z(X),this.onerror?.(X)}),this._process.on("spawn",()=>{$()}),this._process.on("close",(X)=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",(X)=>{this.onerror?.(X)}),this._process.stdout?.on("data",(X)=>{this._readBuffer.append(X),this.processReadBuffer()}),this._process.stdout?.on("error",(X)=>{this.onerror?.(X)}),this._stderrStream&&this._process.stderr)this._process.stderr.pipe(this._stderrStream)})}get stderr(){if(this._stderrStream)return this._stderrStream;return this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){while(!0)try{let $=this._readBuffer.readMessage();if($===null)break;this.onmessage?.($)}catch($){this.onerror?.($)}}async close(){if(this._process){let $=this._process;this._process=void 0;let Z=new Promise((X)=>{$.once("close",()=>{X()})});try{$.stdin?.end()}catch{}if(await Promise.race([Z,new Promise((X)=>setTimeout(X,2000).unref())]),$.exitCode===null){try{$.kill("SIGTERM")}catch{}await Promise.race([Z,new Promise((X)=>setTimeout(X,2000).unref())])}if($.exitCode===null)try{$.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send($){return new Promise((Z)=>{if(!this._process?.stdin)throw Error("Not connected");let X=RX($);if(this._process.stdin.write(X))Z();else this._process.stdin.once("drain",Z)})}}function UK(){return"type"in i6}var T$={};b2(T$,{layer:()=>kX,defaultLayer:()=>_K,Tokens:()=>IX,Service:()=>n6,McpAuth:()=>T$,Entry:()=>MK,ClientInfo:()=>SX});import AK from"path";var IX=P.object({accessToken:P.string(),refreshToken:P.string().optional(),expiresAt:P.number().optional(),scope:P.string().optional()}),SX=P.object({clientId:P.string(),clientSecret:P.string().optional(),clientIdIssuedAt:P.number().optional(),clientSecretExpiresAt:P.number().optional()}),MK=P.object({tokens:IX.optional(),clientInfo:SX.optional(),codeVerifier:P.string().optional(),oauthState:P.string().optional(),serverUrl:P.string().optional()}),U8=AK.join(P$.Path.data,"mcp-auth.json");class n6 extends Z2.Service()("@qitqode/McpAuth"){}var kX=M.effect(n6,Y.gen(function*(){let $=yield*s2.Service,Z=W6.makeUnsafe(1),X=Y.fn("McpAuth.read")(function*(){return yield*$.readJson(U8).pipe(Y.map((D)=>D),Y.catch(()=>Y.succeed({})))}),Q=Y.fn("McpAuth.all")(function*(){let D=yield*X();return Object.fromEntries(Object.entries(D).filter(([U])=>!U.includes("\x00")))}),J=Y.fn("McpAuth.get")(function*(D){return(yield*X())[D]}),B=Y.fn("McpAuth.getForUrl")(function*(D,U){let F=yield*J(D);if(!F)return;if(!F.serverUrl)return;if(F.serverUrl!==U)return;return F}),V=Y.fn("McpAuth.set")(function*(D,U,F){yield*Z.withPermits(1)(Y.gen(function*(){let I=yield*X();if(F)U.serverUrl=F;yield*$.writeJson(U8,{...I,[D]:U},384).pipe(Y.orDie)}))}),O=Y.fn("McpAuth.remove")(function*(D){yield*Z.withPermits(1)(Y.gen(function*(){let U=yield*X();delete U[D],yield*$.writeJson(U8,U,384).pipe(Y.orDie)}))}),G=(D,U)=>Y.fn(`McpAuth.${U}`)(function*(F,I,C){yield*Z.withPermits(1)(Y.gen(function*(){let S=yield*X(),E=S[F]??{};if(E[D]=I,C)E.serverUrl=C;yield*$.writeJson(U8,{...S,[F]:E},384).pipe(Y.orDie)}))}),W=(D,U)=>Y.fn(`McpAuth.${U}`)(function*(F){yield*Z.withPermits(1)(Y.gen(function*(){let I=yield*X(),C=I[F];if(!C)return;delete C[D],yield*$.writeJson(U8,I,384).pipe(Y.orDie)}))}),K=G("tokens","updateTokens"),y=G("clientInfo","updateClientInfo"),j=G("codeVerifier","updateCodeVerifier"),q=G("oauthState","updateOAuthState"),H=W("codeVerifier","clearCodeVerifier"),z=W("oauthState","clearOAuthState"),L=Y.fn("McpAuth.getOAuthState")(function*(D){return(yield*J(D))?.oauthState}),b=Y.fn("McpAuth.isTokenExpired")(function*(D){let U=yield*J(D);if(!U?.tokens)return null;if(!U.tokens.expiresAt)return!1;return U.tokens.expiresAt<Date.now()/1000});return n6.of({all:Q,get:J,getForUrl:B,set:V,remove:O,updateTokens:K,updateClientInfo:y,updateCodeVerifier:j,clearCodeVerifier:H,updateOAuthState:q,getOAuthState:L,clearOAuthState:z,isTokenExpired:b})})),_K=kX.pipe(M.provide(s2.defaultLayer));var RK=F2.object({name:F2.string(),uri:F2.string(),description:F2.string().optional(),mimeType:F2.string().optional(),client:F2.string()}).meta({ref:"McpResource"}),V9=O2.define("mcp.tools.changed",F2.object({server:F2.string()})),W9=O2.define("mcp.browser.open.failed",F2.object({mcpName:F2.string(),url:F2.string()})),s6=O2.define("mcp.auth.required",F2.object({server:F2.string(),reason:F2.enum(["client_registration","login"])})),CK=x2.create("MCPFailed",F2.object({name:F2.string()})),IK=F2.discriminatedUnion("status",[F2.object({status:F2.literal("connected")}).meta({ref:"MCPStatusConnected"}),F2.object({status:F2.literal("disabled")}).meta({ref:"MCPStatusDisabled"}),F2.object({status:F2.literal("pending")}).meta({ref:"MCPStatusPending"}),F2.object({status:F2.literal("failed"),error:F2.string()}).meta({ref:"MCPStatusFailed"}),F2.object({status:F2.literal("needs_auth")}).meta({ref:"MCPStatusNeedsAuth"}),F2.object({status:F2.literal("needs_client_registration"),error:F2.string()}).meta({ref:"MCPStatusNeedsClientRegistration"})]).meta({ref:"MCPStatus"});var t6=30000,K9=s.create({service:"mcp.catalog"}),a6=($)=>$.replace(/[^a-zA-Z0-9_-]/g,"_");function A8($){return typeof $==="object"&&$!==null&&"type"in $}function SK($,Z,X){let Q=$.inputSchema,J={...Q,type:"object",properties:Q.properties??{},additionalProperties:!1};return TX({description:$.description??"",inputSchema:W$(J),execute:async(B)=>Z.callTool({name:$.name,arguments:B||{}},k$,{resetTimeoutOnProgress:!0,timeout:X})})}function I1($,Z,X){return Y.tryPromise({try:()=>r6(Z.listTools(),X??t6),catch:(Q)=>Q instanceof Error?Q:Error(String(Q))}).pipe(Y.map((Q)=>Q.tools),Y.catch((Q)=>{return K9.error("failed to get tools from client",{key:$,error:Q}),Y.succeed(void 0)}))}function kK($,Z,X,Q){return Y.tryPromise({try:()=>X(Z),catch:(J)=>{return K9.error(`failed to get ${Q}`,{clientName:$,error:J instanceof Error?J.message:String(J)}),J}}).pipe(Y.map((J)=>{let B={},V=a6($);for(let O of J)B[V+":"+a6(O.name)]={...O,client:$};return B}),Y.orElseSucceed(()=>{return}))}function hX($,Z,X){let Q={};for(let[J,B]of Object.entries($.clients)){if($.status[J]?.status!=="connected")continue;let V=$.defs[J];if(!V){K9.warn("missing cached tools for connected server",{clientName:J});continue}let G=(A8(Z[J])?Z[J]:void 0)?.timeout??X;for(let W of V)Q[a6(J)+"_"+a6(W.name)]=SK(W,B,G)}return Q}function H9($,Z,X){return Y.forEach(Object.entries($.clients).filter(([Q])=>$.status[Q]?.status==="connected"),([Q,J])=>kK(Q,J,Z,X).pipe(Y.map((B)=>Object.entries(B??{}))),{concurrency:8}).pipe(Y.map((Q)=>Object.fromEntries(Q.flat())))}function gX($,Z){return $.type==="local"&&Z?.type==="claude"}function S1($){return!!$._zod}function Z$($,Z){if(S1($))return G9($,Z);return $.safeParse(Z)}function e6($){if(!$)return;let Z;if(S1($))Z=$._zod?.def?.shape;else Z=$.shape;if(!Z)return;if(typeof Z==="function")try{return Z()}catch{return}return Z}function EX($){if(S1($)){let B=$._zod?.def;if(B){if(B.value!==void 0)return B.value;if(Array.isArray(B.values)&&B.values.length>0)return B.values[0]}}let X=$._def;if(X){if(X.value!==void 0)return X.value;if(Array.isArray(X.values)&&X.values.length>0)return X.values[0]}let Q=$.value;if(Q!==void 0)return Q;return}function h$($){return $==="completed"||$==="failed"||$==="cancelled"}function j9($){let X=e6($)?.method;if(!X)throw Error("Schema is missing a method literal");let Q=EX(X);if(typeof Q!=="string")throw Error("Schema method literal must be a string");return Q}function O9($,Z){let X=Z$($,Z);if(!X.success)throw X.error;return X.data}var hK=60000;class F9{constructor($){if(this._options=$,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(f6,(Z)=>{this._oncancel(Z)}),this.setNotificationHandler(d6,(Z)=>{this._onprogress(Z)}),this.setRequestHandler(v6,(Z)=>({})),this._taskStore=$?.taskStore,this._taskMessageQueue=$?.taskMessageQueue,this._taskStore)this.setRequestHandler(m6,async(Z,X)=>{let Q=await this._taskStore.getTask(Z.params.taskId,X.sessionId);if(!Q)throw new r($2.InvalidParams,"Failed to retrieve task: Task not found");return{...Q}}),this.setRequestHandler(c6,async(Z,X)=>{let Q=async()=>{let J=Z.params.taskId;if(this._taskMessageQueue){let V;while(V=await this._taskMessageQueue.dequeue(J,X.sessionId)){if(V.type==="response"||V.type==="error"){let O=V.message,G=O.id,W=this._requestResolvers.get(G);if(W)if(this._requestResolvers.delete(G),V.type==="response")W(O);else{let K=O,y=new r(K.error.code,K.error.message,K.error.data);W(y)}else{let K=V.type==="response"?"Response":"Error";this._onerror(Error(`${K} handler missing for request ${G}`))}continue}await this._transport?.send(V.message,{relatedRequestId:X.requestId})}}let B=await this._taskStore.getTask(J,X.sessionId);if(!B)throw new r($2.InvalidParams,`Task not found: ${J}`);if(!h$(B.status))return await this._waitForTaskUpdate(J,X.signal),await Q();if(h$(B.status)){let V=await this._taskStore.getTaskResult(J,X.sessionId);return this._clearTaskQueue(J),{...V,_meta:{...V._meta,[I$]:{taskId:J}}}}return await Q()};return await Q()}),this.setRequestHandler(u6,async(Z,X)=>{try{let{tasks:Q,nextCursor:J}=await this._taskStore.listTasks(Z.params?.cursor,X.sessionId);return{tasks:Q,nextCursor:J,_meta:{}}}catch(Q){throw new r($2.InvalidParams,`Failed to list tasks: ${Q instanceof Error?Q.message:String(Q)}`)}}),this.setRequestHandler(p6,async(Z,X)=>{try{let Q=await this._taskStore.getTask(Z.params.taskId,X.sessionId);if(!Q)throw new r($2.InvalidParams,`Task not found: ${Z.params.taskId}`);if(h$(Q.status))throw new r($2.InvalidParams,`Cannot cancel task in terminal status: ${Q.status}`);await this._taskStore.updateTaskStatus(Z.params.taskId,"cancelled","Client cancelled task execution.",X.sessionId),this._clearTaskQueue(Z.params.taskId);let J=await this._taskStore.getTask(Z.params.taskId,X.sessionId);if(!J)throw new r($2.InvalidParams,`Task not found after cancellation: ${Z.params.taskId}`);return{_meta:{},...J}}catch(Q){if(Q instanceof r)throw Q;throw new r($2.InvalidRequest,`Failed to cancel task: ${Q instanceof Error?Q.message:String(Q)}`)}})}async _oncancel($){if(!$.params.requestId)return;this._requestHandlerAbortControllers.get($.params.requestId)?.abort($.params.reason)}_setupTimeout($,Z,X,Q,J=!1){this._timeoutInfo.set($,{timeoutId:setTimeout(Q,Z),startTime:Date.now(),timeout:Z,maxTotalTimeout:X,resetTimeoutOnProgress:J,onTimeout:Q})}_resetTimeout($){let Z=this._timeoutInfo.get($);if(!Z)return!1;let X=Date.now()-Z.startTime;if(Z.maxTotalTimeout&&X>=Z.maxTotalTimeout)throw this._timeoutInfo.delete($),r.fromError($2.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:Z.maxTotalTimeout,totalElapsed:X});return clearTimeout(Z.timeoutId),Z.timeoutId=setTimeout(Z.onTimeout,Z.timeout),!0}_cleanupTimeout($){let Z=this._timeoutInfo.get($);if(Z)clearTimeout(Z.timeoutId),this._timeoutInfo.delete($)}async connect($){if(this._transport)throw Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=$;let Z=this.transport?.onclose;this._transport.onclose=()=>{Z?.(),this._onclose()};let X=this.transport?.onerror;this._transport.onerror=(J)=>{X?.(J),this._onerror(J)};let Q=this._transport?.onmessage;this._transport.onmessage=(J,B)=>{if(Q?.(J,B),$1(J)||zX(J))this._onresponse(J);else if(z8(J))this._onrequest(J,B);else if(yX(J))this._onnotification(J);else this._onerror(Error(`Unknown message type: ${JSON.stringify(J)}`))},await this._transport.start()}_onclose(){let $=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let X of this._requestHandlerAbortControllers.values())X.abort();this._requestHandlerAbortControllers.clear();let Z=r.fromError($2.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let X of $.values())X(Z)}_onerror($){this.onerror?.($)}_onnotification($){let Z=this._notificationHandlers.get($.method)??this.fallbackNotificationHandler;if(Z===void 0)return;Promise.resolve().then(()=>Z($)).catch((X)=>this._onerror(Error(`Uncaught error in notification handler: ${X}`)))}_onrequest($,Z){let X=this._requestHandlers.get($.method)??this.fallbackRequestHandler,Q=this._transport,J=$.params?._meta?.[I$]?.taskId;if(X===void 0){let W={jsonrpc:"2.0",id:$.id,error:{code:$2.MethodNotFound,message:"Method not found"}};if(J&&this._taskMessageQueue)this._enqueueTaskMessage(J,{type:"error",message:W,timestamp:Date.now()},Q?.sessionId).catch((K)=>this._onerror(Error(`Failed to enqueue error response: ${K}`)));else Q?.send(W).catch((K)=>this._onerror(Error(`Failed to send an error response: ${K}`)));return}let B=new AbortController;this._requestHandlerAbortControllers.set($.id,B);let V=jX($.params)?$.params.task:void 0,O=this._taskStore?this.requestTaskStore($,Q?.sessionId):void 0,G={signal:B.signal,sessionId:Q?.sessionId,_meta:$.params?._meta,sendNotification:async(W)=>{if(B.signal.aborted)return;let K={relatedRequestId:$.id};if(J)K.relatedTask={taskId:J};await this.notification(W,K)},sendRequest:async(W,K,y)=>{if(B.signal.aborted)throw new r($2.ConnectionClosed,"Request was cancelled");let j={...y,relatedRequestId:$.id};if(J&&!j.relatedTask)j.relatedTask={taskId:J};let q=j.relatedTask?.taskId??J;if(q&&O)await O.updateTaskStatus(q,"input_required");return await this.request(W,K,j)},authInfo:Z?.authInfo,requestId:$.id,requestInfo:Z?.requestInfo,taskId:J,taskStore:O,taskRequestedTtl:V?.ttl,closeSSEStream:Z?.closeSSEStream,closeStandaloneSSEStream:Z?.closeStandaloneSSEStream};Promise.resolve().then(()=>{if(V)this.assertTaskHandlerCapability($.method)}).then(()=>X($,G)).then(async(W)=>{if(B.signal.aborted)return;let K={result:W,jsonrpc:"2.0",id:$.id};if(J&&this._taskMessageQueue)await this._enqueueTaskMessage(J,{type:"response",message:K,timestamp:Date.now()},Q?.sessionId);else await Q?.send(K)},async(W)=>{if(B.signal.aborted)return;let K={jsonrpc:"2.0",id:$.id,error:{code:Number.isSafeInteger(W.code)?W.code:$2.InternalError,message:W.message??"Internal error",...W.data!==void 0&&{data:W.data}}};if(J&&this._taskMessageQueue)await this._enqueueTaskMessage(J,{type:"error",message:K,timestamp:Date.now()},Q?.sessionId);else await Q?.send(K)}).catch((W)=>this._onerror(Error(`Failed to send response: ${W}`))).finally(()=>{this._requestHandlerAbortControllers.delete($.id)})}_onprogress($){let{progressToken:Z,...X}=$.params,Q=Number(Z),J=this._progressHandlers.get(Q);if(!J){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify($)}`));return}let B=this._responseHandlers.get(Q),V=this._timeoutInfo.get(Q);if(V&&B&&V.resetTimeoutOnProgress)try{this._resetTimeout(Q)}catch(O){this._responseHandlers.delete(Q),this._progressHandlers.delete(Q),this._cleanupTimeout(Q),B(O);return}J(X)}_onresponse($){let Z=Number($.id),X=this._requestResolvers.get(Z);if(X){if(this._requestResolvers.delete(Z),$1($))X($);else{let B=new r($.error.code,$.error.message,$.error.data);X(B)}return}let Q=this._responseHandlers.get(Z);if(Q===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify($)}`));return}this._responseHandlers.delete(Z),this._cleanupTimeout(Z);let J=!1;if($1($)&&$.result&&typeof $.result==="object"){let B=$.result;if(B.task&&typeof B.task==="object"){let V=B.task;if(typeof V.taskId==="string")J=!0,this._taskProgressTokens.set(V.taskId,Z)}}if(!J)this._progressHandlers.delete(Z);if($1($))Q($);else{let B=r.fromError($.error.code,$.error.message,$.error.data);Q(B)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream($,Z,X){let{task:Q}=X??{};if(!Q){try{yield{type:"result",result:await this.request($,Z,X)}}catch(B){yield{type:"error",error:B instanceof r?B:new r($2.InternalError,String(B))}}return}let J;try{let B=await this.request($,X1,X);if(B.task)J=B.task.taskId,yield{type:"taskCreated",task:B.task};else throw new r($2.InternalError,"Task creation did not return a task");while(!0){let V=await this.getTask({taskId:J},X);if(yield{type:"taskStatus",task:V},h$(V.status)){if(V.status==="completed")yield{type:"result",result:await this.getTaskResult({taskId:J},Z,X)};else if(V.status==="failed")yield{type:"error",error:new r($2.InternalError,`Task ${J} failed`)};else if(V.status==="cancelled")yield{type:"error",error:new r($2.InternalError,`Task ${J} was cancelled`)};return}if(V.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:J},Z,X)};return}let O=V.pollInterval??this._options?.defaultTaskPollInterval??1000;await new Promise((G)=>setTimeout(G,O)),X?.signal?.throwIfAborted()}}catch(B){yield{type:"error",error:B instanceof r?B:new r($2.InternalError,String(B))}}}request($,Z,X){let{relatedRequestId:Q,resumptionToken:J,onresumptiontoken:B,task:V,relatedTask:O}=X??{};return new Promise((G,W)=>{let K=(b)=>{W(b)};if(!this._transport){K(Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{if(this.assertCapabilityForMethod($.method),V)this.assertTaskCapability($.method)}catch(b){K(b);return}X?.signal?.throwIfAborted();let y=this._requestMessageId++,j={...$,jsonrpc:"2.0",id:y};if(X?.onprogress)this._progressHandlers.set(y,X.onprogress),j.params={...$.params,_meta:{...$.params?._meta||{},progressToken:y}};if(V)j.params={...j.params,task:V};if(O)j.params={...j.params,_meta:{...j.params?._meta||{},[I$]:O}};let q=(b)=>{this._responseHandlers.delete(y),this._progressHandlers.delete(y),this._cleanupTimeout(y),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:y,reason:String(b)}},{relatedRequestId:Q,resumptionToken:J,onresumptiontoken:B}).catch((U)=>this._onerror(Error(`Failed to send cancellation: ${U}`)));let D=b instanceof r?b:new r($2.RequestTimeout,String(b));W(D)};this._responseHandlers.set(y,(b)=>{if(X?.signal?.aborted)return;if(b instanceof Error)return W(b);try{let D=Z$(Z,b.result);if(!D.success)W(D.error);else G(D.data)}catch(D){W(D)}}),X?.signal?.addEventListener("abort",()=>{q(X?.signal?.reason)});let H=X?.timeout??hK,z=()=>q(r.fromError($2.RequestTimeout,"Request timed out",{timeout:H}));this._setupTimeout(y,H,X?.maxTotalTimeout,z,X?.resetTimeoutOnProgress??!1);let L=O?.taskId;if(L){let b=(D)=>{let U=this._responseHandlers.get(y);if(U)U(D);else this._onerror(Error(`Response handler missing for side-channeled request ${y}`))};this._requestResolvers.set(y,b),this._enqueueTaskMessage(L,{type:"request",message:j,timestamp:Date.now()}).catch((D)=>{this._cleanupTimeout(y),W(D)})}else this._transport.send(j,{relatedRequestId:Q,resumptionToken:J,onresumptiontoken:B}).catch((b)=>{this._cleanupTimeout(y),W(b)})})}async getTask($,Z){return this.request({method:"tasks/get",params:$},l6,Z)}async getTaskResult($,Z,X){return this.request({method:"tasks/result",params:$},Z,X)}async listTasks($,Z){return this.request({method:"tasks/list",params:$},o6,Z)}async cancelTask($,Z){return this.request({method:"tasks/cancel",params:$},NX,Z)}async notification($,Z){if(!this._transport)throw Error("Not connected");this.assertNotificationCapability($.method);let X=Z?.relatedTask?.taskId;if(X){let V={...$,jsonrpc:"2.0",params:{...$.params,_meta:{...$.params?._meta||{},[I$]:Z.relatedTask}}};await this._enqueueTaskMessage(X,{type:"notification",message:V,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes($.method)&&!$.params&&!Z?.relatedRequestId&&!Z?.relatedTask){if(this._pendingDebouncedNotifications.has($.method))return;this._pendingDebouncedNotifications.add($.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete($.method),!this._transport)return;let V={...$,jsonrpc:"2.0"};if(Z?.relatedTask)V={...V,params:{...V.params,_meta:{...V.params?._meta||{},[I$]:Z.relatedTask}}};this._transport?.send(V,Z).catch((O)=>this._onerror(O))});return}let B={...$,jsonrpc:"2.0"};if(Z?.relatedTask)B={...B,params:{...B.params,_meta:{...B.params?._meta||{},[I$]:Z.relatedTask}}};await this._transport.send(B,Z)}setRequestHandler($,Z){let X=j9($);this.assertRequestHandlerCapability(X),this._requestHandlers.set(X,(Q,J)=>{let B=O9($,Q);return Promise.resolve(Z(B,J))})}removeRequestHandler($){this._requestHandlers.delete($)}assertCanSetRequestHandler($){if(this._requestHandlers.has($))throw Error(`A request handler for ${$} already exists, which would be overridden`)}setNotificationHandler($,Z){let X=j9($);this._notificationHandlers.set(X,(Q)=>{let J=O9($,Q);return Promise.resolve(Z(J))})}removeNotificationHandler($){this._notificationHandlers.delete($)}_cleanupTaskProgressHandler($){let Z=this._taskProgressTokens.get($);if(Z!==void 0)this._progressHandlers.delete(Z),this._taskProgressTokens.delete($)}async _enqueueTaskMessage($,Z,X){if(!this._taskStore||!this._taskMessageQueue)throw Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let Q=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue($,Z,X,Q)}async _clearTaskQueue($,Z){if(this._taskMessageQueue){let X=await this._taskMessageQueue.dequeueAll($,Z);for(let Q of X)if(Q.type==="request"&&z8(Q.message)){let J=Q.message.id,B=this._requestResolvers.get(J);if(B)B(new r($2.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(J);else this._onerror(Error(`Resolver missing for request ${J} during task ${$} cleanup`))}}}async _waitForTaskUpdate($,Z){let X=this._options?.defaultTaskPollInterval??1000;try{let Q=await this._taskStore?.getTask($);if(Q?.pollInterval)X=Q.pollInterval}catch{}return new Promise((Q,J)=>{if(Z.aborted){J(new r($2.InvalidRequest,"Request cancelled"));return}let B=setTimeout(Q,X);Z.addEventListener("abort",()=>{clearTimeout(B),J(new r($2.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore($,Z){let X=this._taskStore;if(!X)throw Error("No task store configured");return{createTask:async(Q)=>{if(!$)throw Error("No request provided");return await X.createTask(Q,$.id,{method:$.method,params:$.params},Z)},getTask:async(Q)=>{let J=await X.getTask(Q,Z);if(!J)throw new r($2.InvalidParams,"Failed to retrieve task: Task not found");return J},storeTaskResult:async(Q,J,B)=>{await X.storeTaskResult(Q,J,B,Z);let V=await X.getTask(Q,Z);if(V){let O=w8.parse({method:"notifications/tasks/status",params:V});if(await this.notification(O),h$(V.status))this._cleanupTaskProgressHandler(Q)}},getTaskResult:(Q)=>{return X.getTaskResult(Q,Z)},updateTaskStatus:async(Q,J,B)=>{let V=await X.getTask(Q,Z);if(!V)throw new r($2.InvalidParams,`Task "${Q}" not found - it may have been cleaned up`);if(h$(V.status))throw new r($2.InvalidParams,`Cannot update task "${Q}" from terminal status "${V.status}" to "${J}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await X.updateTaskStatus(Q,J,B,Z);let O=await X.getTask(Q,Z);if(O){let G=w8.parse({method:"notifications/tasks/status",params:O});if(await this.notification(G),h$(O.status))this._cleanupTaskProgressHandler(Q)}},listTasks:(Q)=>{return X.listTasks(Q,Z)}}}}function fX($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function vX($,Z){let X={...$};for(let Q in Z){let J=Q,B=Z[J];if(B===void 0)continue;let V=X[J];if(fX(V)&&fX(B))X[J]={...V,...B};else X[J]=B}return X}var dX=B9(gK(),1),mX=B9(EK(),1);function fK(){let $=new dX.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return mX.default($),$}class y9{constructor($){this._ajv=$??fK()}getValidator($){let Z="$id"in $&&typeof $.$id==="string"?this._ajv.getSchema($.$id)??this._ajv.compile($):this._ajv.compile($);return(X)=>{if(Z(X))return{valid:!0,data:X,errorMessage:void 0};else return{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(Z.errors)}}}}class z9{constructor($){this._client=$}async*callToolStream($,Z=k$,X){let Q=this._client,J={...X,task:X?.task??(Q.isToolTask($.name)?{}:void 0)},B=Q.requestStream({method:"tools/call",params:$},Z,J),V=Q.getToolOutputValidator($.name);for await(let O of B){if(O.type==="result"&&V){let G=O.result;if(!G.structuredContent&&!G.isError){yield{type:"error",error:new r($2.InvalidRequest,`Tool ${$.name} has an output schema but did not return structured content`)};return}if(G.structuredContent)try{let W=V(G.structuredContent);if(!W.valid){yield{type:"error",error:new r($2.InvalidParams,`Structured content does not match the tool's output schema: ${W.errorMessage}`)};return}}catch(W){if(W instanceof r){yield{type:"error",error:W};return}yield{type:"error",error:new r($2.InvalidParams,`Failed to validate structured content: ${W instanceof Error?W.message:String(W)}`)};return}}yield O}}async getTask($,Z){return this._client.getTask({taskId:$},Z)}async getTaskResult($,Z,X){return this._client.getTaskResult({taskId:$},Z,X)}async listTasks($,Z){return this._client.listTasks($?{cursor:$}:void 0,Z)}async cancelTask($,Z){return this._client.cancelTask({taskId:$},Z)}requestStream($,Z,X){return this._client.requestStream($,Z,X)}}function lX($,Z,X){if(!$)throw Error(`${X} does not support task creation (required for ${Z})`);switch(Z){case"tools/call":if(!$.tools?.call)throw Error(`${X} does not support task creation for tools/call (required for ${Z})`);break;default:break}}function cX($,Z,X){if(!$)throw Error(`${X} does not support task creation (required for ${Z})`);switch(Z){case"sampling/createMessage":if(!$.sampling?.createMessage)throw Error(`${X} does not support task creation for sampling/createMessage (required for ${Z})`);break;case"elicitation/create":if(!$.elicitation?.create)throw Error(`${X} does not support task creation for elicitation/create (required for ${Z})`);break;default:break}}function $4($,Z){if(!$||Z===null||typeof Z!=="object")return;if($.type==="object"&&$.properties&&typeof $.properties==="object"){let X=Z,Q=$.properties;for(let J of Object.keys(Q)){let B=Q[J];if(X[J]===void 0&&Object.prototype.hasOwnProperty.call(B,"default"))X[J]=B.default;if(X[J]!==void 0)$4(B,X[J])}}if(Array.isArray($.anyOf)){for(let X of $.anyOf)if(typeof X!=="boolean")$4(X,Z)}if(Array.isArray($.oneOf)){for(let X of $.oneOf)if(typeof X!=="boolean")$4(X,Z)}}function vK($){if(!$)return{supportsFormMode:!1,supportsUrlMode:!1};let Z=$.form!==void 0,X=$.url!==void 0;return{supportsFormMode:Z||!Z&&!X,supportsUrlMode:X}}class M8 extends F9{constructor($,Z){super(Z);if(this._clientInfo=$,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=Z?.capabilities??{},this._jsonSchemaValidator=Z?.jsonSchemaValidator??new y9,Z?.listChanged)this._pendingListChangedConfig=Z.listChanged}_setupListChangedHandlers($){if($.tools&&this._serverCapabilities?.tools?.listChanged)this._setupListChangedHandler("tools",L8,$.tools,async()=>{return(await this.listTools()).tools});if($.prompts&&this._serverCapabilities?.prompts?.listChanged)this._setupListChangedHandler("prompts",r7,$.prompts,async()=>{return(await this.listPrompts()).prompts});if($.resources&&this._serverCapabilities?.resources?.listChanged)this._setupListChangedHandler("resources",u7,$.resources,async()=>{return(await this.listResources()).resources})}get experimental(){if(!this._experimental)this._experimental={tasks:new z9(this)};return this._experimental}registerCapabilities($){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=vX(this._capabilities,$)}setRequestHandler($,Z){let Q=e6($)?.method;if(!Q)throw Error("Schema is missing a method literal");let J;if(S1(Q)){let V=Q;J=V._zod?.def?.value??V.value}else{let V=Q;J=V._def?.value??V.value}if(typeof J!=="string")throw Error("Schema method literal must be a string");let B=J;if(B==="elicitation/create"){let V=async(O,G)=>{let W=Z$(X9,O);if(!W.success){let b=W.error instanceof Error?W.error.message:String(W.error);throw new r($2.InvalidParams,`Invalid elicitation request: ${b}`)}let{params:K}=W.data;K.mode=K.mode??"form";let{supportsFormMode:y,supportsUrlMode:j}=vK(this._capabilities.elicitation);if(K.mode==="form"&&!y)throw new r($2.InvalidParams,"Client does not support form-mode elicitation requests");if(K.mode==="url"&&!j)throw new r($2.InvalidParams,"Client does not support URL-mode elicitation requests");let q=await Promise.resolve(Z(O,G));if(K.task){let b=Z$(X1,q);if(!b.success){let D=b.error instanceof Error?b.error.message:String(b.error);throw new r($2.InvalidParams,`Invalid task creation result: ${D}`)}return b.data}let H=Z$(Y9,q);if(!H.success){let b=H.error instanceof Error?H.error.message:String(H.error);throw new r($2.InvalidParams,`Invalid elicitation result: ${b}`)}let z=H.data,L=K.mode==="form"?K.requestedSchema:void 0;if(K.mode==="form"&&z.action==="accept"&&z.content&&L){if(this._capabilities.elicitation?.form?.applyDefaults)try{$4(L,z.content)}catch{}}return z};return super.setRequestHandler($,V)}if(B==="sampling/createMessage"){let V=async(O,G)=>{let W=Z$(e7,O);if(!W.success){let z=W.error instanceof Error?W.error.message:String(W.error);throw new r($2.InvalidParams,`Invalid sampling request: ${z}`)}let{params:K}=W.data,y=await Promise.resolve(Z(O,G));if(K.task){let z=Z$(X1,y);if(!z.success){let L=z.error instanceof Error?z.error.message:String(z.error);throw new r($2.InvalidParams,`Invalid task creation result: ${L}`)}return z.data}let q=K.tools||K.toolChoice?Z9:$9,H=Z$(q,y);if(!H.success){let z=H.error instanceof Error?H.error.message:String(H.error);throw new r($2.InvalidParams,`Invalid sampling result: ${z}`)}return H.data};return super.setRequestHandler($,V)}return super.setRequestHandler($,Z)}assertCapability($,Z){if(!this._serverCapabilities?.[$])throw Error(`Server does not support ${$} (required for ${Z})`)}async connect($,Z){if(await super.connect($),$.sessionId!==void 0)return;try{let X=await this.request({method:"initialize",params:{protocolVersion:R1,capabilities:this._capabilities,clientInfo:this._clientInfo}},f7,Z);if(X===void 0)throw Error(`Server sent invalid initialize result: ${X}`);if(!KX.includes(X.protocolVersion))throw Error(`Server's protocol version is not supported: ${X.protocolVersion}`);if(this._serverCapabilities=X.capabilities,this._serverVersion=X.serverInfo,$.setProtocolVersion)$.setProtocolVersion(X.protocolVersion);if(this._instructions=X.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig)this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0}catch(X){throw this.close(),X}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod($){switch($){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw Error(`Server does not support logging (required for ${$})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw Error(`Server does not support prompts (required for ${$})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!this._serverCapabilities?.resources)throw Error(`Server does not support resources (required for ${$})`);if($==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw Error(`Server does not support resource subscriptions (required for ${$})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?.tools)throw Error(`Server does not support tools (required for ${$})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw Error(`Server does not support completions (required for ${$})`);break;case"initialize":break;case"ping":break}}assertNotificationCapability($){switch($){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw Error(`Client does not support roots list changed notifications (required for ${$})`);break;case"notifications/initialized":break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability($){if(!this._capabilities)return;switch($){case"sampling/createMessage":if(!this._capabilities.sampling)throw Error(`Client does not support sampling capability (required for ${$})`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw Error(`Client does not support elicitation capability (required for ${$})`);break;case"roots/list":if(!this._capabilities.roots)throw Error(`Client does not support roots capability (required for ${$})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Client does not support tasks capability (required for ${$})`);break;case"ping":break}}assertTaskCapability($){lX(this._serverCapabilities?.tasks?.requests,$,"Server")}assertTaskHandlerCapability($){if(!this._capabilities)return;cX(this._capabilities.tasks?.requests,$,"Client")}async ping($){return this.request({method:"ping"},Z1,$)}async complete($,Z){return this.request({method:"completion/complete",params:$},Q9,Z)}async setLoggingLevel($,Z){return this.request({method:"logging/setLevel",params:{level:$}},Z1,Z)}async getPrompt($,Z){return this.request({method:"prompts/get",params:$},a7,Z)}async listPrompts($,Z){return this.request({method:"prompts/list",params:$},o7,Z)}async listResources($,Z){return this.request({method:"resources/list",params:$},d7,Z)}async listResourceTemplates($,Z){return this.request({method:"resources/templates/list",params:$},m7,Z)}async readResource($,Z){return this.request({method:"resources/read",params:$},c7,Z)}async subscribeResource($,Z){return this.request({method:"resources/subscribe",params:$},Z1,Z)}async unsubscribeResource($,Z){return this.request({method:"resources/unsubscribe",params:$},Z1,Z)}async callTool($,Z=k$,X){if(this.isToolTaskRequired($.name))throw new r($2.InvalidRequest,`Tool "${$.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);let Q=await this.request({method:"tools/call",params:$},Z,X),J=this.getToolOutputValidator($.name);if(J){if(!Q.structuredContent&&!Q.isError)throw new r($2.InvalidRequest,`Tool ${$.name} has an output schema but did not return structured content`);if(Q.structuredContent)try{let B=J(Q.structuredContent);if(!B.valid)throw new r($2.InvalidParams,`Structured content does not match the tool's output schema: ${B.errorMessage}`)}catch(B){if(B instanceof r)throw B;throw new r($2.InvalidParams,`Failed to validate structured content: ${B instanceof Error?B.message:String(B)}`)}}return Q}isToolTask($){if(!this._serverCapabilities?.tasks?.requests?.tools?.call)return!1;return this._cachedKnownTaskTools.has($)}isToolTaskRequired($){return this._cachedRequiredTaskTools.has($)}cacheToolMetadata($){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(let Z of $){if(Z.outputSchema){let Q=this._jsonSchemaValidator.getValidator(Z.outputSchema);this._cachedToolOutputValidators.set(Z.name,Q)}let X=Z.execution?.taskSupport;if(X==="required"||X==="optional")this._cachedKnownTaskTools.add(Z.name);if(X==="required")this._cachedRequiredTaskTools.add(Z.name)}}getToolOutputValidator($){return this._cachedToolOutputValidators.get($)}async listTools($,Z){let X=await this.request({method:"tools/list",params:$},t7,Z);return this.cacheToolMetadata(X.tools),X}_setupListChangedHandler($,Z,X,Q){let J=AX.safeParse(X);if(!J.success)throw Error(`Invalid ${$} listChanged options: ${J.error.message}`);if(typeof X.onChanged!=="function")throw Error(`Invalid ${$} listChanged options: onChanged must be a function`);let{autoRefresh:B,debounceMs:V}=J.data,{onChanged:O}=X,G=async()=>{if(!B){O(null,null);return}try{let K=await Q();O(null,K)}catch(K){let y=K instanceof Error?K:Error(String(K));O(y,null)}},W=()=>{if(V){let K=this._listChangedDebounceTimers.get($);if(K)clearTimeout(K);let y=setTimeout(G,V);this._listChangedDebounceTimers.set($,y)}else G()};this.setNotificationHandler(Z,W)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function k1($){if(!$)return{};if($ instanceof Headers)return Object.fromEntries($.entries());if(Array.isArray($))return Object.fromEntries($);return{...$}}function Z4($=fetch,Z){if(!Z)return $;return async(X,Q)=>{let J={...Z,...Q,headers:Q?.headers?{...k1(Z.headers),...k1(Q.headers)}:Z.headers};return $(X,J)}}var D9;D9=globalThis.crypto?.webcrypto??globalThis.crypto??import("crypto").then(($)=>$.webcrypto);async function dK($){return(await D9).getRandomValues(new Uint8Array($))}async function mK($){let X=Math.pow(2,8)-Math.pow(2,8)%66,Q="";while(Q.length<$){let J=await dK($-Q.length);for(let B of J)if(B<X)Q+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[B%66]}return Q}async function lK($){return await mK($)}async function cK($){let Z=await(await D9).subtle.digest("SHA-256",new TextEncoder().encode($));return btoa(String.fromCharCode(...new Uint8Array(Z))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function q9($){if(!$)$=43;if($<43||$>128)throw`Expected a length between 43 and 128. Received ${$}.`;let Z=await lK($),X=await cK(Z);return{code_verifier:Z,code_challenge:X}}var V0=pX().superRefine(($,Z)=>{if(!URL.canParse($))return Z.addIssue({code:nX.custom,message:"URL must be parseable",fatal:!0}),oX}).refine(($)=>{let Z=new URL($);return Z.protocol!=="javascript:"&&Z.protocol!=="data:"&&Z.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),aX=n2({resource:w().url(),authorization_servers:c(V0).optional(),jwks_uri:w().url().optional(),scopes_supported:c(w()).optional(),bearer_methods_supported:c(w()).optional(),resource_signing_alg_values_supported:c(w()).optional(),resource_name:w().optional(),resource_documentation:w().optional(),resource_policy_uri:w().url().optional(),resource_tos_uri:w().url().optional(),tls_client_certificate_bound_access_tokens:A2().optional(),authorization_details_types_supported:c(w()).optional(),dpop_signing_alg_values_supported:c(w()).optional(),dpop_bound_access_tokens_required:A2().optional()}),P9=n2({issuer:w(),authorization_endpoint:V0,token_endpoint:V0,registration_endpoint:V0.optional(),scopes_supported:c(w()).optional(),response_types_supported:c(w()),response_modes_supported:c(w()).optional(),grant_types_supported:c(w()).optional(),token_endpoint_auth_methods_supported:c(w()).optional(),token_endpoint_auth_signing_alg_values_supported:c(w()).optional(),service_documentation:V0.optional(),revocation_endpoint:V0.optional(),revocation_endpoint_auth_methods_supported:c(w()).optional(),revocation_endpoint_auth_signing_alg_values_supported:c(w()).optional(),introspection_endpoint:w().optional(),introspection_endpoint_auth_methods_supported:c(w()).optional(),introspection_endpoint_auth_signing_alg_values_supported:c(w()).optional(),code_challenge_methods_supported:c(w()).optional(),client_id_metadata_document_supported:A2().optional()}),uK=n2({issuer:w(),authorization_endpoint:V0,token_endpoint:V0,userinfo_endpoint:V0.optional(),jwks_uri:V0,registration_endpoint:V0.optional(),scopes_supported:c(w()).optional(),response_types_supported:c(w()),response_modes_supported:c(w()).optional(),grant_types_supported:c(w()).optional(),acr_values_supported:c(w()).optional(),subject_types_supported:c(w()),id_token_signing_alg_values_supported:c(w()),id_token_encryption_alg_values_supported:c(w()).optional(),id_token_encryption_enc_values_supported:c(w()).optional(),userinfo_signing_alg_values_supported:c(w()).optional(),userinfo_encryption_alg_values_supported:c(w()).optional(),userinfo_encryption_enc_values_supported:c(w()).optional(),request_object_signing_alg_values_supported:c(w()).optional(),request_object_encryption_alg_values_supported:c(w()).optional(),request_object_encryption_enc_values_supported:c(w()).optional(),token_endpoint_auth_methods_supported:c(w()).optional(),token_endpoint_auth_signing_alg_values_supported:c(w()).optional(),display_values_supported:c(w()).optional(),claim_types_supported:c(w()).optional(),claims_supported:c(w()).optional(),service_documentation:w().optional(),claims_locales_supported:c(w()).optional(),ui_locales_supported:c(w()).optional(),claims_parameter_supported:A2().optional(),request_parameter_supported:A2().optional(),request_uri_parameter_supported:A2().optional(),require_request_uri_registration:A2().optional(),op_policy_uri:V0.optional(),op_tos_uri:V0.optional(),client_id_metadata_document_supported:A2().optional()}),rX=u({...uK.shape,...P9.pick({code_challenge_methods_supported:!0}).shape}),tX=u({access_token:w(),id_token:w().optional(),token_type:w(),expires_in:sX.number().optional(),scope:w().optional(),refresh_token:w().optional()}).strip(),eX=u({error:w(),error_description:w().optional(),error_uri:w().optional()}),uX=V0.optional().or(i("").transform(()=>{return})),oK=u({redirect_uris:c(V0),token_endpoint_auth_method:w().optional(),grant_types:c(w()).optional(),response_types:c(w()).optional(),client_name:w().optional(),client_uri:V0.optional(),logo_uri:uX,scope:w().optional(),contacts:c(w()).optional(),tos_uri:uX,policy_uri:w().optional(),jwks_uri:V0.optional(),jwks:iX().optional(),software_id:w().optional(),software_version:w().optional(),software_statement:w().optional()}).strip(),pK=u({client_id:w(),client_secret:w().optional(),client_id_issued_at:q2().optional(),client_secret_expires_at:q2().optional()}).strip(),$Y=oK.merge(pK),vz=u({error:w(),error_description:w().optional()}).strip(),dz=u({token:w(),token_type_hint:w().optional()}).strip();function ZY($){let Z=typeof $==="string"?new URL($):new URL($.href);return Z.hash="",Z}function XY({requestedResource:$,configuredResource:Z}){let X=typeof $==="string"?new URL($):new URL($.href),Q=typeof Z==="string"?new URL(Z):new URL(Z.href);if(X.origin!==Q.origin)return!1;if(X.pathname.length<Q.pathname.length)return!1;let J=X.pathname.endsWith("/")?X.pathname:X.pathname+"/",B=Q.pathname.endsWith("/")?Q.pathname:Q.pathname+"/";return J.startsWith(B)}class u2 extends Error{constructor($,Z){super($);this.errorUri=Z,this.name=this.constructor.name}toResponseObject(){let $={error:this.errorCode,error_description:this.message};if(this.errorUri)$.error_uri=this.errorUri;return $}get errorCode(){return this.constructor.errorCode}}class X4 extends u2{}X4.errorCode="invalid_request";class T1 extends u2{}T1.errorCode="invalid_client";class h1 extends u2{}h1.errorCode="invalid_grant";class g1 extends u2{}g1.errorCode="unauthorized_client";class Y4 extends u2{}Y4.errorCode="unsupported_grant_type";class Q4 extends u2{}Q4.errorCode="invalid_scope";class J4 extends u2{}J4.errorCode="access_denied";class g$ extends u2{}g$.errorCode="server_error";class B4 extends u2{}B4.errorCode="temporarily_unavailable";class V4 extends u2{}V4.errorCode="unsupported_response_type";class W4 extends u2{}W4.errorCode="unsupported_token_type";class K4 extends u2{}K4.errorCode="invalid_token";class H4 extends u2{}H4.errorCode="method_not_allowed";class G4 extends u2{}G4.errorCode="too_many_requests";class E1 extends u2{}E1.errorCode="invalid_client_metadata";class j4 extends u2{}j4.errorCode="insufficient_scope";class O4 extends u2{}O4.errorCode="invalid_target";var YY={[X4.errorCode]:X4,[T1.errorCode]:T1,[h1.errorCode]:h1,[g1.errorCode]:g1,[Y4.errorCode]:Y4,[Q4.errorCode]:Q4,[J4.errorCode]:J4,[g$.errorCode]:g$,[B4.errorCode]:B4,[V4.errorCode]:V4,[W4.errorCode]:W4,[K4.errorCode]:K4,[H4.errorCode]:H4,[G4.errorCode]:G4,[E1.errorCode]:E1,[j4.errorCode]:j4,[O4.errorCode]:O4};class Z0 extends Error{constructor($){super($??"Unauthorized")}}function iK($){return["client_secret_basic","client_secret_post","none"].includes($)}var N9="code",w9="S256";function nK($,Z){let X=$.client_secret!==void 0;if(Z.length===0)return X?"client_secret_post":"none";if("token_endpoint_auth_method"in $&&$.token_endpoint_auth_method&&iK($.token_endpoint_auth_method)&&Z.includes($.token_endpoint_auth_method))return $.token_endpoint_auth_method;if(X&&Z.includes("client_secret_basic"))return"client_secret_basic";if(X&&Z.includes("client_secret_post"))return"client_secret_post";if(Z.includes("none"))return"none";return X?"client_secret_post":"none"}function sK($,Z,X,Q){let{client_id:J,client_secret:B}=Z;switch($){case"client_secret_basic":aK(J,B,X);return;case"client_secret_post":rK(J,B,Q);return;case"none":tK(J,Q);return;default:throw Error(`Unsupported client authentication method: ${$}`)}}function aK($,Z,X){if(!Z)throw Error("client_secret_basic authentication requires a client_secret");let Q=btoa(`${$}:${Z}`);X.set("Authorization",`Basic ${Q}`)}function rK($,Z,X){if(X.set("client_id",$),Z)X.set("client_secret",Z)}function tK($,Z){Z.set("client_id",$)}async function JY($){let Z=$ instanceof Response?$.status:void 0,X=$ instanceof Response?await $.text():$;try{let Q=eX.parse(JSON.parse(X)),{error:J,error_description:B,error_uri:V}=Q;return new(YY[J]||g$)(B||"",V)}catch(Q){let J=`${Z?`HTTP ${Z}: `:""}Invalid OAuth error response: ${Q}. Raw body: ${X}`;return new g$(J)}}async function N$($,Z){try{return await x9($,Z)}catch(X){if(X instanceof T1||X instanceof g1)return await $.invalidateCredentials?.("all"),await x9($,Z);else if(X instanceof h1)return await $.invalidateCredentials?.("tokens"),await x9($,Z);throw X}}async function x9($,{serverUrl:Z,authorizationCode:X,scope:Q,resourceMetadataUrl:J,fetchFn:B}){let V=await $.discoveryState?.(),O,G,W,K=J;if(!K&&V?.resourceMetadataUrl)K=new URL(V.resourceMetadataUrl);if(V?.authorizationServerUrl){if(G=V.authorizationServerUrl,O=V.resourceMetadata,W=V.authorizationServerMetadata??await VY(G,{fetchFn:B}),!O)try{O=await BY(Z,{resourceMetadataUrl:K},B)}catch{}if(W!==V.authorizationServerMetadata||O!==V.resourceMetadata)await $.saveDiscoveryState?.({authorizationServerUrl:String(G),resourceMetadataUrl:K?.toString(),resourceMetadata:O,authorizationServerMetadata:W})}else{let D=await J3(Z,{resourceMetadataUrl:K,fetchFn:B});G=D.authorizationServerUrl,W=D.authorizationServerMetadata,O=D.resourceMetadata,await $.saveDiscoveryState?.({authorizationServerUrl:String(G),resourceMetadataUrl:K?.toString(),resourceMetadata:O,authorizationServerMetadata:W})}let y=await $3(Z,$,O),j=await Promise.resolve($.clientInformation());if(!j){if(X!==void 0)throw Error("Existing OAuth client information is required when exchanging an authorization code");let D=W?.client_id_metadata_document_supported===!0,U=$.clientMetadataUrl;if(U&&!eK(U))throw new E1(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${U}`);if(D&&U)j={client_id:U},await $.saveClientInformation?.(j);else{if(!$.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let I=await H3(G,{metadata:W,clientMetadata:$.clientMetadata,fetchFn:B});await $.saveClientInformation(I),j=I}}let q=!$.redirectUrl;if(X!==void 0||q){let D=await K3($,G,{metadata:W,resource:y,authorizationCode:X,fetchFn:B});return await $.saveTokens(D),"AUTHORIZED"}let H=await $.tokens();if(H?.refresh_token)try{let D=await W3(G,{metadata:W,clientInformation:j,refreshToken:H.refresh_token,resource:y,addClientAuthentication:$.addClientAuthentication,fetchFn:B});return await $.saveTokens(D),"AUTHORIZED"}catch(D){if(!(D instanceof u2)||D instanceof g$);else throw D}let z=$.state?await $.state():void 0,{authorizationUrl:L,codeVerifier:b}=await B3(G,{metadata:W,clientInformation:j,state:z,redirectUrl:$.redirectUrl,scope:Q||O?.scopes_supported?.join(" ")||$.clientMetadata.scope,resource:y});return await $.saveCodeVerifier(b),await $.redirectToAuthorization(L),"REDIRECT"}function eK($){if(!$)return!1;try{let Z=new URL($);return Z.protocol==="https:"&&Z.pathname!=="/"}catch{return!1}}async function $3($,Z,X){let Q=ZY($);if(Z.validateResourceURL)return await Z.validateResourceURL(Q,X?.resource);if(!X)return;if(!XY({requestedResource:Q,configuredResource:X.resource}))throw Error(`Protected resource ${X.resource} does not match expected ${Q} (or origin)`);return new URL(X.resource)}function f1($){let Z=$.headers.get("WWW-Authenticate");if(!Z)return{};let[X,Q]=Z.split(" ");if(X.toLowerCase()!=="bearer"||!Q)return{};let J=L9($,"resource_metadata")||void 0,B;if(J)try{B=new URL(J)}catch{}let V=L9($,"scope")||void 0,O=L9($,"error")||void 0;return{resourceMetadataUrl:B,scope:V,error:O}}function L9($,Z){let X=$.headers.get("WWW-Authenticate");if(!X)return null;let Q=new RegExp(`${Z}=(?:"([^"]+)"|([^\\s,]+))`),J=X.match(Q);if(J)return J[1]||J[2];return null}async function BY($,Z,X=fetch){let Q=await Y3($,"oauth-protected-resource",X,{protocolVersion:Z?.protocolVersion,metadataUrl:Z?.resourceMetadataUrl});if(!Q||Q.status===404)throw await Q?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!Q.ok)throw await Q.body?.cancel(),Error(`HTTP ${Q.status} trying to load well-known OAuth protected resource metadata.`);return aX.parse(await Q.json())}async function b9($,Z,X=fetch){try{return await X($,{headers:Z})}catch(Q){if(Q instanceof TypeError)if(Z)return b9($,void 0,X);else return;throw Q}}function Z3($,Z="",X={}){if(Z.endsWith("/"))Z=Z.slice(0,-1);return X.prependPathname?`${Z}/.well-known/${$}`:`/.well-known/${$}${Z}`}async function QY($,Z,X=fetch){return await b9($,{"MCP-Protocol-Version":Z},X)}function X3($,Z){return!$||$.status>=400&&$.status<500&&Z!=="/"}async function Y3($,Z,X,Q){let J=new URL($),B=Q?.protocolVersion??R1,V;if(Q?.metadataUrl)V=new URL(Q.metadataUrl);else{let G=Z3(Z,J.pathname);V=new URL(G,Q?.metadataServerUrl??J),V.search=J.search}let O=await QY(V,B,X);if(!Q?.metadataUrl&&X3(O,J.pathname)){let G=new URL(`/.well-known/${Z}`,J);O=await QY(G,B,X)}return O}function Q3($){let Z=typeof $==="string"?new URL($):$,X=Z.pathname!=="/",Q=[];if(!X)return Q.push({url:new URL("/.well-known/oauth-authorization-server",Z.origin),type:"oauth"}),Q.push({url:new URL("/.well-known/openid-configuration",Z.origin),type:"oidc"}),Q;let J=Z.pathname;if(J.endsWith("/"))J=J.slice(0,-1);return Q.push({url:new URL(`/.well-known/oauth-authorization-server${J}`,Z.origin),type:"oauth"}),Q.push({url:new URL(`/.well-known/openid-configuration${J}`,Z.origin),type:"oidc"}),Q.push({url:new URL(`${J}/.well-known/openid-configuration`,Z.origin),type:"oidc"}),Q}async function VY($,{fetchFn:Z=fetch,protocolVersion:X=R1}={}){let Q={"MCP-Protocol-Version":X,Accept:"application/json"},J=Q3($);for(let{url:B,type:V}of J){let O=await b9(B,Q,Z);if(!O)continue;if(!O.ok){if(await O.body?.cancel(),O.status>=400&&O.status<500)continue;throw Error(`HTTP ${O.status} trying to load ${V==="oauth"?"OAuth":"OpenID provider"} metadata from ${B}`)}if(V==="oauth")return P9.parse(await O.json());else return rX.parse(await O.json())}return}async function J3($,Z){let X,Q;try{if(X=await BY($,{resourceMetadataUrl:Z?.resourceMetadataUrl},Z?.fetchFn),X.authorization_servers&&X.authorization_servers.length>0)Q=X.authorization_servers[0]}catch{}if(!Q)Q=String(new URL("/",$));let J=await VY(Q,{fetchFn:Z?.fetchFn});return{authorizationServerUrl:Q,authorizationServerMetadata:J,resourceMetadata:X}}async function B3($,{metadata:Z,clientInformation:X,redirectUrl:Q,scope:J,state:B,resource:V}){let O;if(Z){if(O=new URL(Z.authorization_endpoint),!Z.response_types_supported.includes(N9))throw Error(`Incompatible auth server: does not support response type ${N9}`);if(Z.code_challenge_methods_supported&&!Z.code_challenge_methods_supported.includes(w9))throw Error(`Incompatible auth server: does not support code challenge method ${w9}`)}else O=new URL("/authorize",$);let G=await q9(),W=G.code_verifier,K=G.code_challenge;if(O.searchParams.set("response_type",N9),O.searchParams.set("client_id",X.client_id),O.searchParams.set("code_challenge",K),O.searchParams.set("code_challenge_method",w9),O.searchParams.set("redirect_uri",String(Q)),B)O.searchParams.set("state",B);if(J)O.searchParams.set("scope",J);if(J?.includes("offline_access"))O.searchParams.append("prompt","consent");if(V)O.searchParams.set("resource",V.href);return{authorizationUrl:O,codeVerifier:W}}function V3($,Z,X){return new URLSearchParams({grant_type:"authorization_code",code:$,code_verifier:Z,redirect_uri:String(X)})}async function WY($,{metadata:Z,tokenRequestParams:X,clientInformation:Q,addClientAuthentication:J,resource:B,fetchFn:V}){let O=Z?.token_endpoint?new URL(Z.token_endpoint):new URL("/token",$),G=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(B)X.set("resource",B.href);if(J)await J(G,X,O,Z);else if(Q){let K=Z?.token_endpoint_auth_methods_supported??[],y=nK(Q,K);sK(y,Q,G,X)}let W=await(V??fetch)(O,{method:"POST",headers:G,body:X});if(!W.ok)throw await JY(W);return tX.parse(await W.json())}async function W3($,{metadata:Z,clientInformation:X,refreshToken:Q,resource:J,addClientAuthentication:B,fetchFn:V}){let O=new URLSearchParams({grant_type:"refresh_token",refresh_token:Q}),G=await WY($,{metadata:Z,tokenRequestParams:O,clientInformation:X,addClientAuthentication:B,resource:J,fetchFn:V});return{refresh_token:Q,...G}}async function K3($,Z,{metadata:X,resource:Q,authorizationCode:J,fetchFn:B}={}){let V=$.clientMetadata.scope,O;if($.prepareTokenRequest)O=await $.prepareTokenRequest(V);if(!O){if(!J)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!$.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");let W=await $.codeVerifier();O=V3(J,W,$.redirectUrl)}let G=await $.clientInformation();return WY(Z,{metadata:X,tokenRequestParams:O,clientInformation:G??void 0,addClientAuthentication:$.addClientAuthentication,resource:Q,fetchFn:B})}async function H3($,{metadata:Z,clientMetadata:X,fetchFn:Q}){let J;if(Z){if(!Z.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");J=new URL(Z.registration_endpoint)}else J=new URL("/register",$);let B=await(Q??fetch)(J,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)});if(!B.ok)throw await JY(B);return $Y.parse(await B.json())}var G3={initialReconnectionDelay:1000,maxReconnectionDelay:30000,reconnectionDelayGrowFactor:1.5,maxRetries:2};class Y1 extends Error{constructor($,Z){super(`Streamable HTTP error: ${Z}`);this.code=$}}class _8{constructor($,Z){this._hasCompletedAuthFlow=!1,this._url=$,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=Z?.requestInit,this._authProvider=Z?.authProvider,this._fetch=Z?.fetch,this._fetchWithInit=Z4(Z?.fetch,Z?.requestInit),this._sessionId=Z?.sessionId,this._reconnectionOptions=Z?.reconnectionOptions??G3}async _authThenStart(){if(!this._authProvider)throw new Z0("No auth provider");let $;try{$=await N$(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(Z){throw this.onerror?.(Z),Z}if($!=="AUTHORIZED")throw new Z0;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let $={};if(this._authProvider){let X=await this._authProvider.tokens();if(X)$.Authorization=`Bearer ${X.access_token}`}if(this._sessionId)$["mcp-session-id"]=this._sessionId;if(this._protocolVersion)$["mcp-protocol-version"]=this._protocolVersion;let Z=k1(this._requestInit?.headers);return new Headers({...$,...Z})}async _startOrAuthSse($){let{resumptionToken:Z}=$;try{let X=await this._commonHeaders();if(X.set("Accept","text/event-stream"),Z)X.set("last-event-id",Z);let Q=await(this._fetch??fetch)(this._url,{method:"GET",headers:X,signal:this._abortController?.signal});if(!Q.ok){if(await Q.body?.cancel(),Q.status===401&&this._authProvider)return await this._authThenStart();if(Q.status===405)return;throw new Y1(Q.status,`Failed to open SSE stream: ${Q.statusText}`)}this._handleSseStream(Q.body,$,!0)}catch(X){throw this.onerror?.(X),X}}_getNextReconnectionDelay($){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let Z=this._reconnectionOptions.initialReconnectionDelay,X=this._reconnectionOptions.reconnectionDelayGrowFactor,Q=this._reconnectionOptions.maxReconnectionDelay;return Math.min(Z*Math.pow(X,$),Q)}_scheduleReconnection($,Z=0){let X=this._reconnectionOptions.maxRetries;if(Z>=X){this.onerror?.(Error(`Maximum reconnection attempts (${X}) exceeded.`));return}let Q=this._getNextReconnectionDelay(Z);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse($).catch((J)=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${J instanceof Error?J.message:String(J)}`)),this._scheduleReconnection($,Z+1)})},Q)}_handleSseStream($,Z,X){if(!$)return;let{onresumptiontoken:Q,replayMessageId:J}=Z,B,V=!1,O=!1;(async()=>{try{let W=$.pipeThrough(new TextDecoderStream).pipeThrough(new KY({onRetry:(j)=>{this._serverRetryMs=j}})).getReader();while(!0){let{value:j,done:q}=await W.read();if(q)break;if(j.id)B=j.id,V=!0,Q?.(j.id);if(!j.data)continue;if(!j.event||j.event==="message")try{let H=S$.parse(JSON.parse(j.data));if($1(H)){if(O=!0,J!==void 0)H.id=J}this.onmessage?.(H)}catch(H){this.onerror?.(H)}}if((X||V)&&!O&&this._abortController&&!this._abortController.signal.aborted)this._scheduleReconnection({resumptionToken:B,onresumptiontoken:Q,replayMessageId:J},0)}catch(W){if(this.onerror?.(Error(`SSE stream disconnected: ${W}`)),(X||V)&&!O&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:B,onresumptiontoken:Q,replayMessageId:J},0)}catch(j){this.onerror?.(Error(`Failed to reconnect: ${j instanceof Error?j.message:String(j)}`))}}})()}async start(){if(this._abortController)throw Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth($){if(!this._authProvider)throw new Z0("No auth provider");if(await N$(this._authProvider,{serverUrl:this._url,authorizationCode:$,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new Z0("Failed to authorize")}async close(){if(this._reconnectionTimeout)clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0;this._abortController?.abort(),this.onclose?.()}async send($,Z){try{let{resumptionToken:X,onresumptiontoken:Q}=Z||{};if(X){this._startOrAuthSse({resumptionToken:X,replayMessageId:z8($)?$.id:void 0}).catch((y)=>this.onerror?.(y));return}let J=await this._commonHeaders();J.set("content-type","application/json"),J.set("accept","application/json, text/event-stream");let B={...this._requestInit,method:"POST",headers:J,body:JSON.stringify($),signal:this._abortController?.signal},V=await(this._fetch??fetch)(this._url,B),O=V.headers.get("mcp-session-id");if(O)this._sessionId=O;if(!V.ok){let y=await V.text().catch(()=>null);if(V.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new Y1(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:j,scope:q}=f1(V);if(this._resourceMetadataUrl=j,this._scope=q,await N$(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new Z0;return this._hasCompletedAuthFlow=!0,this.send($)}if(V.status===403&&this._authProvider){let{resourceMetadataUrl:j,scope:q,error:H}=f1(V);if(H==="insufficient_scope"){let z=V.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===z)throw new Y1(403,"Server returned 403 after trying upscoping");if(q)this._scope=q;if(j)this._resourceMetadataUrl=j;if(this._lastUpscopingHeader=z??void 0,await N$(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!=="AUTHORIZED")throw new Z0;return this.send($)}}throw new Y1(V.status,`Error POSTing to endpoint: ${y}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,V.status===202){if(await V.body?.cancel(),PX($))this._startOrAuthSse({resumptionToken:void 0}).catch((y)=>this.onerror?.(y));return}let W=(Array.isArray($)?$:[$]).filter((y)=>("method"in y)&&("id"in y)&&y.id!==void 0).length>0,K=V.headers.get("content-type");if(W)if(K?.includes("text/event-stream"))this._handleSseStream(V.body,{onresumptiontoken:Q},!1);else if(K?.includes("application/json")){let y=await V.json(),j=Array.isArray(y)?y.map((q)=>S$.parse(q)):[S$.parse(y)];for(let q of j)this.onmessage?.(q)}else throw await V.body?.cancel(),new Y1(-1,`Unexpected content type: ${K}`);else await V.body?.cancel()}catch(X){throw this.onerror?.(X),X}}get sessionId(){return this._sessionId}async terminateSession(){if(!this._sessionId)return;try{let $=await this._commonHeaders(),Z={...this._requestInit,method:"DELETE",headers:$,signal:this._abortController?.signal},X=await(this._fetch??fetch)(this._url,Z);if(await X.body?.cancel(),!X.ok&&X.status!==405)throw new Y1(X.status,`Failed to terminate session: ${X.statusText}`);this._sessionId=void 0}catch($){throw this.onerror?.($),$}}setProtocolVersion($){this._protocolVersion=$}get protocolVersion(){return this._protocolVersion}async resumeStream($,Z){await this._startOrAuthSse({resumptionToken:$,onresumptiontoken:Z?.onresumptiontoken})}}var R8=s.create({service:"mcp.oauth"}),d1=19876,v1="/mcp/oauth/callback";class C8{mcpName;serverUrl;config;callbacks;auth;authKey;constructor($,Z,X,Q,J,B){this.mcpName=$;this.serverUrl=Z;this.config=X;this.callbacks=Q;this.auth=J;this.authKey=B??$}get redirectUrl(){if(this.config.redirectUri)return this.config.redirectUri;return`http://127.0.0.1:${d1}${v1}`}get clientMetadata(){return{redirect_uris:[this.redirectUrl],client_name:"QitQode",client_uri:"https://qitqode.com",grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:this.config.clientSecret?"client_secret_post":"none"}}async clientInformation(){if(this.config.clientId)return{client_id:this.config.clientId,client_secret:this.config.clientSecret};let $=await Y.runPromise(this.auth.getForUrl(this.mcpName,this.serverUrl));if($?.clientInfo){if($.clientInfo.clientSecretExpiresAt&&$.clientInfo.clientSecretExpiresAt<Date.now()/1000){R8.info("client secret expired, need to re-register",{mcpName:this.mcpName});return}return{client_id:$.clientInfo.clientId,client_secret:$.clientInfo.clientSecret}}return}async saveClientInformation($){await Y.runPromise(this.auth.updateClientInfo(this.mcpName,{clientId:$.client_id,clientSecret:$.client_secret,clientIdIssuedAt:$.client_id_issued_at,clientSecretExpiresAt:$.client_secret_expires_at},this.serverUrl)),R8.info("saved dynamically registered client",{mcpName:this.mcpName,clientId:$.client_id})}async tokens(){let $=await Y.runPromise(this.auth.getForUrl(this.mcpName,this.serverUrl));if(!$?.tokens)return;return{access_token:$.tokens.accessToken,token_type:"Bearer",refresh_token:$.tokens.refreshToken,expires_in:$.tokens.expiresAt?Math.max(0,Math.floor($.tokens.expiresAt-Date.now()/1000)):void 0,scope:$.tokens.scope}}async saveTokens($){await Y.runPromise(this.auth.updateTokens(this.mcpName,{accessToken:$.access_token,refreshToken:$.refresh_token,expiresAt:$.expires_in?Date.now()/1000+$.expires_in:void 0,scope:$.scope},this.serverUrl)),R8.info("saved oauth tokens",{mcpName:this.mcpName})}async redirectToAuthorization($){R8.info("redirecting to authorization",{mcpName:this.mcpName,url:$.toString()}),await this.callbacks.onRedirect($)}async saveCodeVerifier($){await Y.runPromise(this.auth.updateCodeVerifier(this.authKey,$))}async codeVerifier(){let $=await Y.runPromise(this.auth.get(this.authKey));if(!$?.codeVerifier)throw Error(`No code verifier saved for MCP server: ${this.mcpName}`);return $.codeVerifier}async saveState($){await Y.runPromise(this.auth.updateOAuthState(this.authKey,$))}async state(){let $=await Y.runPromise(this.auth.get(this.authKey));if($?.oauthState)return $.oauthState;let Z=Array.from(crypto.getRandomValues(new Uint8Array(32))).map((X)=>X.toString(16).padStart(2,"0")).join("");return await Y.runPromise(this.auth.updateOAuthState(this.authKey,Z)),Z}async invalidateCredentials($){R8.info("invalidating credentials",{mcpName:this.mcpName,type:$});let Z=await Y.runPromise(this.auth.get(this.mcpName));if(!Z)return;switch($){case"all":await Y.runPromise(this.auth.remove(this.mcpName));break;case"client":delete Z.clientInfo,await Y.runPromise(this.auth.set(this.mcpName,Z));break;case"tokens":delete Z.tokens,await Y.runPromise(this.auth.set(this.mcpName,Z));break}}}function HY($){if(!$)return{port:d1,path:v1};try{let Z=new URL($),X=Z.port?parseInt(Z.port,10):Z.protocol==="https:"?443:80,Q=Z.pathname||v1;return{port:X,path:Q}}catch{return{port:d1,path:v1}}}var x$={};b2(x$,{waitForCallback:()=>q3,stop:()=>OY,isRunning:()=>N3,isPortInUse:()=>jY,ensureRunning:()=>D3,cancelPending:()=>P3,McpOAuthCallback:()=>x$});import{createConnection as j3}from"net";import{createServer as O3}from"http";var Q1=s.create({service:"mcp.oauth-callback"}),m1=d1,y4=v1,F3=`<!DOCTYPE html>
166
- <html>
167
- <head>
168
- <title>QitQode - Authorization Successful</title>
169
- <style>
170
- body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
171
- .container { text-align: center; padding: 2rem; }
172
- h1 { color: #4ade80; margin-bottom: 1rem; }
173
- p { color: #aaa; }
174
- </style>
175
- </head>
176
- <body>
177
- <div class="container">
178
- <h1>Authorization Successful</h1>
179
- <p>You can close this window and return to QitQode.</p>
180
- </div>
181
- <script>setTimeout(() => window.close(), 2000);</script>
182
- </body>
183
- </html>`,F4=($)=>`<!DOCTYPE html>
184
- <html>
185
- <head>
186
- <title>QitQode - Authorization Failed</title>
187
- <style>
188
- body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
189
- .container { text-align: center; padding: 2rem; }
190
- h1 { color: #f87171; margin-bottom: 1rem; }
191
- p { color: #aaa; }
192
- .error { color: #fca5a5; font-family: monospace; margin-top: 1rem; padding: 1rem; background: rgba(248,113,113,0.1); border-radius: 0.5rem; }
193
- </style>
194
- </head>
195
- <body>
196
- <div class="container">
197
- <h1>Authorization Failed</h1>
198
- <p>An error occurred during authorization.</p>
199
- <div class="error">${$}</div>
200
- </div>
201
- </body>
202
- </html>`,w$,U0=new Map,J1=new Map,y3=300000;function GY($){for(let[Z,X]of J1)if(X===$){J1.delete(Z);break}}function z3($,Z){let X=new URL($.url||"/",`http://localhost:${m1}`);if(X.pathname!==y4){Z.writeHead(404),Z.end("Not found");return}let Q=X.searchParams.get("code"),J=X.searchParams.get("state"),B=X.searchParams.get("error"),V=X.searchParams.get("error_description");if(Q1.info("received oauth callback",{hasCode:!!Q,state:J,error:B}),!J){Q1.error("oauth callback missing state parameter",{url:X.toString()}),Z.writeHead(400,{"Content-Type":"text/html"}),Z.end(F4("Missing required state parameter - potential CSRF attack"));return}if(B){let G=V||B;if(U0.has(J)){let W=U0.get(J);clearTimeout(W.timeout),U0.delete(J),GY(J),W.reject(Error(G))}Z.writeHead(200,{"Content-Type":"text/html"}),Z.end(F4(G));return}if(!Q){Z.writeHead(400,{"Content-Type":"text/html"}),Z.end(F4("No authorization code provided"));return}if(!U0.has(J)){Q1.error("oauth callback with invalid state",{state:J,pendingStates:Array.from(U0.keys())}),Z.writeHead(400,{"Content-Type":"text/html"}),Z.end(F4("Invalid or expired state parameter - potential CSRF attack"));return}let O=U0.get(J);clearTimeout(O.timeout),U0.delete(J),GY(J),O.resolve(Q),Z.writeHead(200,{"Content-Type":"text/html"}),Z.end(F3)}async function D3($){let{port:Z,path:X}=HY($);if(w$&&(m1!==Z||y4!==X))Q1.info("stopping oauth callback server to reconfigure",{oldPort:m1,newPort:Z}),await OY();if(w$)return;if(await jY(Z)){Q1.info("oauth callback server already running on another instance",{port:Z});return}m1=Z,y4=X,w$=O3(z3),await new Promise((J,B)=>{w$.listen(m1,()=>{Q1.info("oauth callback server started",{port:m1,path:y4}),J()}),w$.on("error",B)})}function q3($,Z){if(Z)J1.set(Z,$);return new Promise((X,Q)=>{let J=setTimeout(()=>{if(U0.has($)){if(U0.delete($),Z)J1.delete(Z);Q(Error("OAuth callback timeout - authorization took too long"))}},y3);U0.set($,{resolve:X,reject:Q,timeout:J})})}function P3($){let X=J1.get($)??$,Q=U0.get(X);if(Q)clearTimeout(Q.timeout),U0.delete(X),J1.delete($),Q.reject(Error("Authorization cancelled"))}async function jY($=d1){return new Promise((Z)=>{let X=j3($,"127.0.0.1");X.on("connect",()=>{X.destroy(),Z(!0)}),X.on("error",()=>{Z(!1)})})}async function OY(){if(w$)await new Promise(($)=>w$.close(()=>$())),w$=void 0,Q1.info("oauth callback server stopped");for(let[$,Z]of U0)clearTimeout(Z.timeout),Z.reject(Error("OAuth callback server stopped"));U0.clear(),J1.clear()}function N3(){return w$!==void 0}var E$=new Map,yY="\x00",q4=($,Z)=>$+yY+Z,D4=($)=>Y.tryPromise(()=>$.close()).pipe(Y.ignore),U9=($,Z)=>{let X=E$.get($);if(E$.set($,Z),!X||X===Z)return Y.void;return D4(X)},z4=($,Z)=>Y.gen(function*(){let X=E$.get($);if(!X||Z&&X!==Z)return;E$.delete($),yield*D4(X)}),zY=($)=>{let Z=$+yY;return Y.forEach(Array.from(E$.entries()).filter(([X])=>X.startsWith(Z)),([X,Q])=>z4(X,Q),{concurrency:"unbounded",discard:!0})};function DY($){let Z=Y.fn("MCP.startAuth")(function*(G){let W=yield*$.getConfig(G);if(!W)throw Error(`MCP server ${G} not found or disabled`);if(W.type!=="remote")throw Error(`MCP server ${G} is not a remote server`);if(W.oauth===!1)throw Error(`MCP server ${G} has OAuth explicitly disabled`);let K=yield*$.pendingKey(G);x$.cancelPending(K);let y=typeof W.oauth==="object"?W.oauth:void 0;yield*Y.promise(()=>x$.ensureRunning(y?.redirectUri));let j=Array.from(crypto.getRandomValues(new Uint8Array(32))).map((L)=>L.toString(16).padStart(2,"0")).join("");yield*$.auth.updateOAuthState(K,j);let q,H=new C8(G,W.url,{clientId:y?.clientId,clientSecret:y?.clientSecret,scope:y?.scope,redirectUri:y?.redirectUri},{onRedirect:async(L)=>{q=L}},$.auth,K),z=new _8(new URL(W.url),{authProvider:H});return yield*Y.tryPromise({try:()=>{let L=new M8({name:"qitqode",version:L1});return L.connect(z).then(()=>({authorizationUrl:"",oauthState:j,pendingKey:K,transport:void 0,client:L}))},catch:(L)=>L}).pipe(Y.catch((L)=>{if(L instanceof Z0&&q)return U9(K,z).pipe(Y.as({authorizationUrl:q.toString(),oauthState:j,pendingKey:K,transport:z}));return D4(z).pipe(Y.andThen(Y.die(L)))}))}),X=Y.fn("MCP.finishAuth")(function*(G,W){let K=yield*$.pendingKey(G),y=E$.get(K);if(!y)throw Error(`No pending OAuth flow for MCP server: ${G}`);let j=yield*Y.tryPromise({try:()=>y.finishAuth(W).then(()=>!0),catch:(q)=>q}).pipe(Y.option);if(Y0.isNone(j))return yield*z4(K,y),{status:"failed",error:"OAuth completion failed"};if(E$.get(K)===y)E$.delete(K);return yield*Y.gen(function*(){yield*$.auth.clearCodeVerifier(K);let q=yield*$.getConfig(G);if(!q)return{status:"failed",error:"MCP config not found after auth"};return yield*$.createAndStore(G,q)}).pipe(Y.ensuring(D4(y)))}),Q=Y.fn("MCP.authenticate")(function*(G){let W=yield*Z(G);if(!W.authorizationUrl){let y="client"in W?W.client:void 0,j=yield*$.getConfig(G);if(!j)return yield*Y.tryPromise(()=>y?.close()??Promise.resolve()).pipe(Y.ignore),{status:"failed",error:"MCP config not found after auth"};let q=y?yield*I1(G,y,j.timeout):void 0;if(!y||!q)return yield*Y.tryPromise(()=>y?.close()??Promise.resolve()).pipe(Y.ignore),{status:"failed",error:"Failed to get tools"};return yield*$.auth.clearOAuthState(W.pendingKey),yield*$.storeClient(G,y,q,j.timeout)}let K=x$.waitForCallback(W.oauthState,W.pendingKey);return yield*Y.gen(function*(){if(!(yield*Y.promise(()=>FY(W.authorizationUrl))))yield*$.bus.publish(W9,{mcpName:G,url:W.authorizationUrl}).pipe(Y.ignore);let j=yield*Y.promise(()=>K);if((yield*$.auth.getOAuthState(W.pendingKey))!==W.oauthState)throw yield*$.auth.clearOAuthState(W.pendingKey),Error("OAuth state mismatch - potential CSRF attack");return yield*$.auth.clearOAuthState(W.pendingKey),yield*X(G,j)}).pipe(Y.ensuring(Y.sync(()=>x$.cancelPending(W.pendingKey)).pipe(Y.andThen(z4(W.pendingKey,W.transport)))))}),J=Y.fn("MCP.removeAuth")(function*(G){yield*$.auth.remove(G);let W=yield*$.pendingKey(G);yield*$.auth.clearCodeVerifier(W),yield*$.auth.clearOAuthState(W),x$.cancelPending(W),yield*z4(W)}),B=Y.fn("MCP.supportsOAuth")(function*(G){let W=yield*$.getConfig(G);return!!W&&W.type==="remote"&&W.oauth!==!1}),V=Y.fn("MCP.hasStoredTokens")(function*(G){return!!(yield*$.auth.get(G))?.tokens}),O=Y.fn("MCP.getAuthStatus")(function*(G){if(!(yield*$.auth.get(G))?.tokens)return"not_authenticated";return(yield*$.auth.isTokenExpired(G))?"expired":"authenticated"});return{startAuth:Z,authenticate:Q,finishAuth:X,removeAuth:J,supportsOAuth:B,hasStoredTokens:V,getAuthStatus:O}}class A9 extends Event{constructor($,Z){var X,Q;super($),this.code=(X=Z==null?void 0:Z.code)!=null?X:void 0,this.message=(Q=Z==null?void 0:Z.message)!=null?Q:void 0}[Symbol.for("nodejs.util.inspect.custom")]($,Z,X){return X(qY(this),Z)}[Symbol.for("Deno.customInspect")]($,Z){return $(qY(this),Z)}}function w3($){let Z=globalThis.DOMException;return typeof Z=="function"?new Z($,"SyntaxError"):SyntaxError($)}function M9($){return $ instanceof Error?"errors"in $&&Array.isArray($.errors)?$.errors.map(M9).join(", "):("cause"in $)&&$.cause instanceof Error?`${$}: ${M9($.cause)}`:$.message:`${$}`}function qY($){return{type:$.type,message:$.message,code:$.code,defaultPrevented:$.defaultPrevented,cancelable:$.cancelable,timeStamp:$.timeStamp}}var wY=($)=>{throw TypeError($)},h9=($,Z,X)=>Z.has($)||wY("Cannot "+X),W2=($,Z,X)=>(h9($,Z,"read from private field"),X?X.call($):Z.get($)),a2=($,Z,X)=>Z.has($)?wY("Cannot add the same private member more than once"):Z instanceof WeakSet?Z.add($):Z.set($,X),h2=($,Z,X,Q)=>(h9($,Z,"write to private field"),Z.set($,X),X),L$=($,Z,X)=>(h9($,Z,"access private method"),X),A0,B1,l1,P4,N4,k8,o1,T8,f$,c1,p1,u1,I8,X$,_9,R9,C9,PY,I9,S9,S8,k9,T9;class i1 extends EventTarget{constructor($,Z){var X,Q;super(),a2(this,X$),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,a2(this,A0),a2(this,B1),a2(this,l1),a2(this,P4),a2(this,N4),a2(this,k8),a2(this,o1),a2(this,T8,null),a2(this,f$),a2(this,c1),a2(this,p1,null),a2(this,u1,null),a2(this,I8,null),a2(this,R9,async(J)=>{var B;W2(this,c1).reset();let{body:V,redirected:O,status:G,headers:W}=J;if(G===204){L$(this,X$,S8).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(O?h2(this,l1,new URL(J.url)):h2(this,l1,void 0),G!==200){L$(this,X$,S8).call(this,`Non-200 status code (${G})`,G);return}if(!(W.get("content-type")||"").startsWith("text/event-stream")){L$(this,X$,S8).call(this,'Invalid content type, expected "text/event-stream"',G);return}if(W2(this,A0)===this.CLOSED)return;h2(this,A0,this.OPEN);let K=new Event("open");if((B=W2(this,I8))==null||B.call(this,K),this.dispatchEvent(K),typeof V!="object"||!V||!("getReader"in V)){L$(this,X$,S8).call(this,"Invalid response body, expected a web ReadableStream",G),this.close();return}let y=new TextDecoder,j=V.getReader(),q=!0;do{let{done:H,value:z}=await j.read();z&&W2(this,c1).feed(y.decode(z,{stream:!H})),H&&(q=!1,W2(this,c1).reset(),L$(this,X$,k9).call(this))}while(q)}),a2(this,C9,(J)=>{h2(this,f$,void 0),!(J.name==="AbortError"||J.type==="aborted")&&L$(this,X$,k9).call(this,M9(J))}),a2(this,I9,(J)=>{typeof J.id=="string"&&h2(this,T8,J.id);let B=new MessageEvent(J.event||"message",{data:J.data,origin:W2(this,l1)?W2(this,l1).origin:W2(this,B1).origin,lastEventId:J.id||""});W2(this,u1)&&(!J.event||J.event==="message")&&W2(this,u1).call(this,B),this.dispatchEvent(B)}),a2(this,S9,(J)=>{h2(this,k8,J)}),a2(this,T9,()=>{h2(this,o1,void 0),W2(this,A0)===this.CONNECTING&&L$(this,X$,_9).call(this)});try{if($ instanceof URL)h2(this,B1,$);else if(typeof $=="string")h2(this,B1,new URL($,x3()));else throw Error("Invalid URL")}catch{throw w3("An invalid or illegal string was specified")}h2(this,c1,NY({onEvent:W2(this,I9),onRetry:W2(this,S9)})),h2(this,A0,this.CONNECTING),h2(this,k8,3000),h2(this,N4,(X=Z==null?void 0:Z.fetch)!=null?X:globalThis.fetch),h2(this,P4,(Q=Z==null?void 0:Z.withCredentials)!=null?Q:!1),L$(this,X$,_9).call(this)}get readyState(){return W2(this,A0)}get url(){return W2(this,B1).href}get withCredentials(){return W2(this,P4)}get onerror(){return W2(this,p1)}set onerror($){h2(this,p1,$)}get onmessage(){return W2(this,u1)}set onmessage($){h2(this,u1,$)}get onopen(){return W2(this,I8)}set onopen($){h2(this,I8,$)}addEventListener($,Z,X){let Q=Z;super.addEventListener($,Q,X)}removeEventListener($,Z,X){let Q=Z;super.removeEventListener($,Q,X)}close(){W2(this,o1)&&clearTimeout(W2(this,o1)),W2(this,A0)!==this.CLOSED&&(W2(this,f$)&&W2(this,f$).abort(),h2(this,A0,this.CLOSED),h2(this,f$,void 0))}}A0=new WeakMap,B1=new WeakMap,l1=new WeakMap,P4=new WeakMap,N4=new WeakMap,k8=new WeakMap,o1=new WeakMap,T8=new WeakMap,f$=new WeakMap,c1=new WeakMap,p1=new WeakMap,u1=new WeakMap,I8=new WeakMap,X$=new WeakSet,_9=function(){h2(this,A0,this.CONNECTING),h2(this,f$,new AbortController),W2(this,N4)(W2(this,B1),L$(this,X$,PY).call(this)).then(W2(this,R9)).catch(W2(this,C9))},R9=new WeakMap,C9=new WeakMap,PY=function(){var $;let Z={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...W2(this,T8)?{"Last-Event-ID":W2(this,T8)}:void 0},cache:"no-store",signal:($=W2(this,f$))==null?void 0:$.signal};return"window"in globalThis&&(Z.credentials=this.withCredentials?"include":"same-origin"),Z},I9=new WeakMap,S9=new WeakMap,S8=function($,Z){var X;W2(this,A0)!==this.CLOSED&&h2(this,A0,this.CLOSED);let Q=new A9("error",{code:Z,message:$});(X=W2(this,p1))==null||X.call(this,Q),this.dispatchEvent(Q)},k9=function($,Z){var X;if(W2(this,A0)===this.CLOSED)return;h2(this,A0,this.CONNECTING);let Q=new A9("error",{code:Z,message:$});(X=W2(this,p1))==null||X.call(this,Q),this.dispatchEvent(Q),h2(this,o1,setTimeout(W2(this,T9),W2(this,k8)))},T9=new WeakMap,i1.CONNECTING=0,i1.OPEN=1,i1.CLOSED=2;function x3(){let $="document"in globalThis?globalThis.document:void 0;return $&&typeof $=="object"&&"baseURI"in $&&typeof $.baseURI=="string"?$.baseURI:void 0}class xY extends Error{constructor($,Z,X){super(`SSE error: ${Z}`);this.code=$,this.event=X}}class g9{constructor($,Z){this._url=$,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=Z?.eventSourceInit,this._requestInit=Z?.requestInit,this._authProvider=Z?.authProvider,this._fetch=Z?.fetch,this._fetchWithInit=Z4(Z?.fetch,Z?.requestInit)}async _authThenStart(){if(!this._authProvider)throw new Z0("No auth provider");let $;try{$=await N$(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(Z){throw this.onerror?.(Z),Z}if($!=="AUTHORIZED")throw new Z0;return await this._startOrAuth()}async _commonHeaders(){let $={};if(this._authProvider){let X=await this._authProvider.tokens();if(X)$.Authorization=`Bearer ${X.access_token}`}if(this._protocolVersion)$["mcp-protocol-version"]=this._protocolVersion;let Z=k1(this._requestInit?.headers);return new Headers({...$,...Z})}_startOrAuth(){let $=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((Z,X)=>{this._eventSource=new i1(this._url.href,{...this._eventSourceInit,fetch:async(Q,J)=>{let B=await this._commonHeaders();B.set("Accept","text/event-stream");let V=await $(Q,{...J,headers:B});if(V.status===401&&V.headers.has("www-authenticate")){let{resourceMetadataUrl:O,scope:G}=f1(V);this._resourceMetadataUrl=O,this._scope=G}return V}}),this._abortController=new AbortController,this._eventSource.onerror=(Q)=>{if(Q.code===401&&this._authProvider){this._authThenStart().then(Z,X);return}let J=new xY(Q.code,Q.message,Q);X(J),this.onerror?.(J)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",(Q)=>{let J=Q;try{if(this._endpoint=new URL(J.data,this._url),this._endpoint.origin!==this._url.origin)throw Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(B){X(B),this.onerror?.(B),this.close();return}Z()}),this._eventSource.onmessage=(Q)=>{let J=Q,B;try{B=S$.parse(JSON.parse(J.data))}catch(V){this.onerror?.(V);return}this.onmessage?.(B)}})}async start(){if(this._eventSource)throw Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth($){if(!this._authProvider)throw new Z0("No auth provider");if(await N$(this._authProvider,{serverUrl:this._url,authorizationCode:$,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new Z0("Failed to authorize")}async close(){this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send($){if(!this._endpoint)throw Error("Not connected");try{let Z=await this._commonHeaders();Z.set("content-type","application/json");let X={...this._requestInit,method:"POST",headers:Z,body:JSON.stringify($),signal:this._abortController?.signal},Q=await(this._fetch??fetch)(this._endpoint,X);if(!Q.ok){let J=await Q.text().catch(()=>null);if(Q.status===401&&this._authProvider){let{resourceMetadataUrl:B,scope:V}=f1(Q);if(this._resourceMetadataUrl=B,this._scope=V,await N$(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new Z0;return this.send($)}throw Error(`Error POSTing to endpoint (HTTP ${Q.status}): ${J}`)}await Q.body?.cancel()}catch(Z){throw this.onerror?.(Z),Z}}setProtocolVersion($){this._protocolVersion=$}}var b$=s.create({service:"mcp.connection"});function LY($){let Z=(J,B,V)=>Y.acquireUseRelease(Y.succeed(J),(O)=>Y.tryPromise({try:()=>{let G=new M8({name:"qitqode",version:L1});return r6(G.connect(O),B).then(()=>G)},catch:(G)=>G instanceof Error?G:Error(String(G))}),(O,G)=>{if(!o2.isFailure(G))return Y.void;if(V?.(V2.squash(G.cause)))return Y.void;return Y.tryPromise(()=>O.close()).pipe(Y.ignore)}),X=Y.fn("MCP.connectRemote")(function*(J,B){let V=yield*$.directory(),O=q4(V,J),G=B.oauth===!1,W=typeof B.oauth==="object"?B.oauth:void 0,K;if(!G)K=new C8(J,B.url,{clientId:W?.clientId,clientSecret:W?.clientSecret,scope:W?.scope,redirectUri:W?.redirectUri},{onRedirect:async(b)=>{b$.info("oauth redirect requested",{key:J,url:b.toString()})}},$.auth,O);let y=[{name:"StreamableHTTP",transport:new _8(new URL(B.url),{authProvider:K,requestInit:B.headers?{headers:B.headers}:void 0})},{name:"SSE",transport:new g9(new URL(B.url),{authProvider:K,requestInit:B.headers?{headers:B.headers}:void 0})}],j=B.timeout??t6,q,H=(b)=>{let D=b instanceof Error?b.message:String(b);return b instanceof Z0||!!K&&D.includes("OAuth")},z=(b)=>{let D=b instanceof Error?b.message:String(b);return D.includes("registration")||D.includes("client_id")},L=(b)=>!!K&&H(b)&&!z(b);for(let{name:b,transport:D}of y){let U=yield*Z(D,j,L).pipe(Y.map((F)=>({client:F,transportName:b})),Y.catch((F)=>{let I=F instanceof Error?F:Error(String(F));if(H(F)){if(b$.info("mcp server requires authentication",{key:J,transport:b}),z(F))return q={status:"needs_client_registration",error:"Server does not support dynamic client registration. Please provide clientId in config."},$.publish(s6,{server:J,reason:"client_registration"}).pipe(Y.ignore,Y.as(void 0));if(!K)return q={status:"failed",error:`MCP server requires authentication, but OAuth is disabled: ${I.message}`},Y.succeed(void 0);return q={status:"needs_auth"},U9(O,D).pipe(Y.andThen($.publish(s6,{server:J,reason:"login"})),Y.ignore,Y.as(void 0))}return b$.debug("transport connection failed",{key:J,transport:b,url:E9.redactString(B.url),error:I.message}),q={status:"failed",error:I.message},Y.succeed(void 0)}));if(U)return b$.info("connected",{key:J,transport:U.transportName}),{client:U.client,status:{status:"connected"}};if(q?.status==="needs_auth"||q?.status==="needs_client_registration")break}return{client:void 0,status:q??{status:"failed",error:"Unknown error"}}}),Q=Y.fn("MCP.connectLocal")(function*(J,B){let[V,...O]=B.command,G=yield*$.directory(),W=new b8({stderr:"pipe",command:V,args:O,cwd:G,env:{...w4(),...V==="qitqode"||V==="opencode"?{BUN_BE_BUN:"1"}:{},...B.environment}});W.stderr?.on("data",(y)=>{b$.info(`mcp stderr: ${y.toString()}`,{key:J})});let K=B.timeout??t6;return yield*Z(W,K).pipe(Y.map((y)=>({client:y,status:{status:"connected"}})),Y.catch((y)=>{let j=y instanceof Error?y.message:String(y);return b$.error("local mcp startup failed",{key:J,command:E9.redactCommand(B.command),cwd:G,error:j}),Y.succeed({client:void 0,status:{status:"failed",error:j}})}))});return Y.fn("MCP.create")(function*(J,B){if(B.enabled===!1)return b$.info("mcp server disabled",{key:J}),{status:{status:"disabled"}};b$.info("found",{key:J,type:B.type});let V=B.type==="remote"?yield*X(J,B):yield*Q(J,B);if(!V.client)return{status:V.status};let O=yield*I1(J,V.client,B.timeout);if(!O)return yield*Y.tryPromise(()=>V.client.close()).pipe(Y.ignore),{status:{status:"failed",error:"Failed to get tools"}};return b$.info("create() successfully created client",{key:J,toolCount:O.length}),{client:V.client,status:V.status,defs:O}})}var h8=s.create({service:"mcp"});class x4 extends Z2.Service()("@qitqode/MCP"){}var UY=M.effect(x4,Y.gen(function*(){let $=yield*n1.ChildProcessSpawner,Z=yield*T$.Service,X=yield*p.Service,Q=LY({auth:Z,directory:()=>d.directory,publish:(x,k)=>X.publish(x,k)}),J=(x,k)=>Q(x,k).pipe(Y.map((T)=>({mcpClient:T.client,status:T.status,defs:T.defs}))),B=yield*B2.Service,V=Y.fnUntraced(function*(x){if(process.platform==="win32")return[];let k=[],T=[x];while(T.length>0){let N=T.shift(),A=yield*$.spawn(s1.make("pgrep",["-P",String(N)],{stdin:"ignore"})),_=yield*c2.mkString(c2.decodeText(A.stdout));yield*A.exitCode;for(let R of _.split(`
203
- `)){let g=parseInt(R,10);if(!isNaN(g)&&!k.includes(g))k.push(g),T.push(g)}}return k},Y.scoped,Y.catch(()=>Y.succeed([])));function O(x,k,T,N,A){T.setNotificationHandler(L8,async()=>{if(h8.info("tools list changed notification received",{server:k}),x.clients[k]!==T||x.status[k]?.status!=="connected")return;let _=await N.promise(I1(k,T,A));if(!_)return;if(x.clients[k]!==T||x.status[k]?.status!=="connected")return;x.defs[k]=_,await N.promise(X.publish(V9,{server:k}).pipe(Y.ignore))})}let G=yield*d.make(Y.fn("MCP.state")(function*(){let x=yield*B.get(),k=yield*D0.make(),T=yield*d.directory,N=x.mcp??{},A={status:{},clients:{},defs:{}};return yield*Y.forEach(Object.entries(N),([_,R])=>Y.gen(function*(){if(!A8(R)){h8.error("Ignoring MCP config entry without type",{key:_});return}if(R.enabled===!1){A.status[_]={status:"disabled"};return}if(gX(R,x.mcp_origins?.[_])){A.status[_]={status:"pending"};return}let g=yield*J(_,R).pipe(Y.catch(()=>Y.void));if(!g)return;if(A.status[_]=g.status,g.mcpClient)A.clients[_]=g.mcpClient,A.defs[_]=g.defs,O(A,_,g.mcpClient,k,R.timeout)}),{concurrency:8}),yield*Y.addFinalizer(()=>Y.gen(function*(){yield*Y.forEach(Object.values(A.clients),(_)=>Y.gen(function*(){let R=_.transport instanceof b8?_.transport.pid:null;if(typeof R==="number"){let g=yield*V(R);for(let l of g)try{process.kill(l,"SIGTERM")}catch{}}yield*Y.tryPromise(()=>_.close()).pipe(Y.ignore)}),{concurrency:8}),yield*zY(T)})),A}));function W(x,k){let T=x.clients[k];if(delete x.defs[k],!T)return Y.void;return Y.tryPromise(()=>T.close()).pipe(Y.ignore)}let K=Y.fnUntraced(function*(x,k,T,N,A){let _=yield*D0.make();return yield*W(x,k),x.status[k]={status:"connected"},x.clients[k]=T,x.defs[k]=N,O(x,k,T,_,A),x.status[k]}),y=Y.fn("MCP.status")(function*(){let x=yield*d.get(G),T=(yield*B.get()).mcp??{},N={};for(let[A,_]of Object.entries(T)){if(!A8(_))continue;N[A]=x.status[A]??{status:"disabled"}}return N}),j=Y.fn("MCP.clients")(function*(){return(yield*d.get(G)).clients}),q=Y.fn("MCP.createAndStore")(function*(x,k){let T=yield*d.get(G),N=yield*J(x,k);if(T.status[x]=N.status,!N.mcpClient)return yield*W(T,x),delete T.clients[x],N.status;return yield*K(T,x,N.mcpClient,N.defs,k.timeout)}),H=Y.fn("MCP.add")(function*(x,k){return yield*q(x,k),{status:(yield*d.get(G)).status}}),z=Y.fn("MCP.connect")(function*(x){let k=yield*S(x);if(!k){h8.error("MCP config not found or invalid",{name:x});return}yield*q(x,{...k,enabled:!0})}),L=Y.fn("MCP.disconnect")(function*(x){let k=yield*d.get(G);yield*W(k,x),delete k.clients[x],k.status[x]={status:"disabled"}}),b=Y.fn("MCP.tools")(function*(){let x=yield*d.get(G),k=yield*B.get();return hX(x,k.mcp??{},k.experimental?.mcp_timeout)}),D=Y.fn("MCP.prompts")(function*(){let x=yield*d.get(G);return yield*H9(x,(k)=>k.listPrompts().then((T)=>T.prompts),"prompts")}),U=Y.fn("MCP.resources")(function*(){let x=yield*d.get(G);return yield*H9(x,(k)=>k.listResources().then((T)=>T.resources),"resources")}),F=Y.fnUntraced(function*(x,k,T,N){let _=(yield*d.get(G)).clients[x];if(!_){h8.warn(`client not found for ${T}`,{clientName:x});return}return yield*Y.tryPromise({try:()=>k(_),catch:(R)=>{return h8.error(`failed to ${T}`,{clientName:x,...N,error:R?.message}),R}}).pipe(Y.orElseSucceed(()=>{return}))}),I=Y.fn("MCP.getPrompt")(function*(x,k,T){return yield*F(x,(N)=>N.getPrompt({name:k,arguments:T}),"getPrompt",{promptName:k})}),C=Y.fn("MCP.readResource")(function*(x,k){return yield*F(x,(T)=>T.readResource({uri:k}),"readResource",{resourceUri:k})}),S=Y.fnUntraced(function*(x){let T=(yield*B.get()).mcp?.[x];if(!T||!A8(T))return;return T}),E=DY({auth:Z,bus:X,pendingKey:(x)=>Y.map(d.directory,(k)=>q4(k,x)),getConfig:S,storeClient:(x,k,T,N)=>Y.gen(function*(){let A=yield*d.get(G);return yield*K(A,x,k,T,N)}),createAndStore:q});return x4.of({status:y,clients:j,tools:b,prompts:D,resources:U,add:H,connect:z,disconnect:L,getPrompt:I,readResource:C,startAuth:E.startAuth,authenticate:E.authenticate,finishAuth:E.finishAuth,removeAuth:E.removeAuth,supportsOAuth:E.supportsOAuth,hasStoredTokens:E.hasStoredTokens,getAuthStatus:E.getAuthStatus})})),L3=UY.pipe(M.provide(T$.layer),M.provide(p.layer),M.provide(B2.defaultLayer),M.provide(a1),M.provide(s2.defaultLayer));var H0={};b2(H0,{layer:()=>RY,hints:()=>L4,defaultLayer:()=>_3,deepResearchTemplate:()=>_Y,Service:()=>b4,Info:()=>M3,Event:()=>A3,Default:()=>I0,Command:()=>H0});var AY=`Create or update \`AGENTS.md\` for this repository.
204
-
205
- The goal is a compact instruction file that helps future QitQode sessions avoid mistakes and ramp up quickly. Every line should answer: "Would an agent likely miss this without help?" If not, leave it out.
206
-
207
- User-provided focus or constraints (honor these):
208
- $ARGUMENTS
209
-
210
- ## How to investigate
211
-
212
- Read the highest-value sources first:
213
- - \`README*\`, root manifests, workspace config, lockfiles
214
- - build, test, lint, formatter, typecheck, and codegen config
215
- - CI workflows and pre-commit / task runner config
216
- - existing instruction files (\`AGENTS.md\`, \`CLAUDE.md\`, \`.cursor/rules/\`, \`.cursorrules\`, \`.github/copilot-instructions.md\`)
217
- - repo-local QitQode config such as \`qitqode.json\`
218
-
219
- If architecture is still unclear after reading config and docs, inspect a small number of representative code files to find the real entrypoints, package boundaries, and execution flow. Prefer reading the files that explain how the system is wired together over random leaf files.
220
-
221
- Prefer executable sources of truth over prose. If docs conflict with config or scripts, trust the executable source and only keep what you can verify.
222
-
223
- ## What to extract
224
-
225
- Look for the highest-signal facts for an agent working in this repo:
226
- - exact developer commands, especially non-obvious ones
227
- - how to run a single test, a single package, or a focused verification step
228
- - required command order when it matters, such as \`lint -> typecheck -> test\`
229
- - monorepo or multi-package boundaries, ownership of major directories, and the real app/library entrypoints
230
- - framework or toolchain quirks: generated code, migrations, codegen, build artifacts, special env loading, dev servers, infra deploy flow
231
- - repo-specific style or workflow conventions that differ from defaults
232
- - testing quirks: fixtures, integration test prerequisites, snapshot workflows, required services, flaky or expensive suites
233
- - important constraints from existing instruction files worth preserving
234
-
235
- Good \`AGENTS.md\` content is usually hard-earned context that took reading multiple files to infer.
236
-
237
- ## Questions
238
-
239
- Only ask the user questions if the repo cannot answer something important. Use the \`question\` tool for one short batch at most.
240
-
241
- Good questions:
242
- - undocumented team conventions
243
- - branch / PR / release expectations
244
- - missing setup or test prerequisites that are known but not written down
245
-
246
- Do not ask about anything the repo already makes clear.
247
-
248
- ## Writing rules
249
-
250
- Include only high-signal, repo-specific guidance such as:
251
- - exact commands and shortcuts the agent would otherwise guess wrong
252
- - architecture notes that are not obvious from filenames
253
- - conventions that differ from language or framework defaults
254
- - setup requirements, environment quirks, and operational gotchas
255
- - references to existing instruction sources that matter
256
-
257
- Exclude:
258
- - generic software advice
259
- - long tutorials or exhaustive file trees
260
- - obvious language conventions
261
- - speculative claims or anything you could not verify
262
- - content better stored in another file referenced via \`qitqode.json\` \`instructions\`
263
-
264
- When in doubt, omit.
265
-
266
- Prefer short sections and bullets. If the repo is simple, keep the file simple. If the repo is large, summarize the few structural facts that actually change how an agent should work.
267
-
268
- If \`AGENTS.md\` already exists at \`\${path}\`, improve it in place rather than rewriting blindly. Preserve verified useful guidance, delete fluff or stale claims, and reconcile it with the current codebase.
269
- `;var MY=`You are a code reviewer. Your job is to review code changes and provide actionable feedback.
270
-
271
- ---
272
-
273
- Input: $ARGUMENTS
274
-
275
- ---
276
-
277
- ## Determining What to Review
278
-
279
- Based on the input provided, determine which type of review to perform:
280
-
281
- 1. **No arguments (default)**: Review all uncommitted changes
282
- - Run: \`git diff\` for unstaged changes
283
- - Run: \`git diff --cached\` for staged changes
284
- - Run: \`git status --short\` to identify untracked (net new) files
285
-
286
- 2. **Commit hash** (40-char SHA or short hash): Review that specific commit
287
- - Run: \`git show $ARGUMENTS\`
288
-
289
- 3. **Branch name**: Compare current branch to the specified branch
290
- - Run: \`git diff $ARGUMENTS...HEAD\`
291
-
292
- 4. **PR URL or number** (contains "github.com" or "pull" or looks like a PR number): Review the pull request
293
- - Run: \`gh pr view $ARGUMENTS\` to get PR context
294
- - Run: \`gh pr diff $ARGUMENTS\` to get the diff
295
-
296
- Use best judgement when processing input.
297
-
298
- ---
299
-
300
- ## Gathering Context
301
-
302
- **Diffs alone are not enough.** After getting the diff, read the entire file(s) being modified to understand the full context. Code that looks wrong in isolation may be correct given surrounding logic\u2014and vice versa.
303
-
304
- - Use the diff to identify which files changed
305
- - Use \`git status --short\` to identify untracked files, then read their full contents
306
- - Read the full file to understand existing patterns, control flow, and error handling
307
- - Check for existing style guide or conventions files (CONVENTIONS.md, AGENTS.md, .editorconfig, etc.)
308
-
309
- ---
310
-
311
- ## What to Look For
312
-
313
- **Bugs** - Your primary focus.
314
- - Logic errors, off-by-one mistakes, incorrect conditionals
315
- - If-else guards: missing guards, incorrect branching, unreachable code paths
316
- - Edge cases: null/empty/undefined inputs, error conditions, race conditions
317
- - Security issues: injection, auth bypass, data exposure
318
- - Broken error handling that swallows failures, throws unexpectedly or returns error types that are not caught.
319
-
320
- **Structure** - Does the code fit the codebase?
321
- - Does it follow existing patterns and conventions?
322
- - Are there established abstractions it should use but doesn't?
323
- - Excessive nesting that could be flattened with early returns or extraction
324
-
325
- **Performance** - Only flag if obviously problematic.
326
- - O(n\xB2) on unbounded data, N+1 queries, blocking I/O on hot paths
327
-
328
- **Behavior Changes** - If a behavioral change is introduced, raise it (especially if it's possibly unintentional).
329
-
330
- ---
331
-
332
- ## Before You Flag Something
333
-
334
- **Be certain.** If you're going to call something a bug, you need to be confident it actually is one.
335
-
336
- - Only review the changes - do not review pre-existing code that wasn't modified
337
- - Don't flag something as a bug if you're unsure - investigate first
338
- - Don't invent hypothetical problems - if an edge case matters, explain the realistic scenario where it breaks
339
- - If you need more context to be sure, use the tools below to get it
340
-
341
- **Don't be a zealot about style.** When checking code against conventions:
342
-
343
- - Verify the code is *actually* in violation. Don't complain about else statements if early returns are already being used correctly.
344
- - Some "violations" are acceptable when they're the simplest option. A \`let\` statement is fine if the alternative is convoluted.
345
- - Excessive nesting is a legitimate concern regardless of other style choices.
346
- - Don't flag style preferences as issues unless they clearly violate established project conventions.
347
-
348
- ---
349
-
350
- ## Tools
351
-
352
- Use these to inform your review:
353
-
354
- - **Explore agent** - Find how existing code handles similar problems. Check patterns, conventions, and prior art before claiming something doesn't fit.
355
- - **Exa Code Context** - Verify correct usage of libraries/APIs before flagging something as wrong.
356
- - **Exa Web Search** - Research best practices if you're unsure about a pattern.
357
-
358
- If you're uncertain about something and can't verify it with these tools, say "I'm not sure about X" rather than flagging it as a definite issue.
359
-
360
- ---
361
-
362
- ## Output
363
-
364
- 1. If there is a bug, be direct and clear about why it is a bug.
365
- 2. Clearly communicate severity of issues. Do not overstate severity.
366
- 3. Critiques should clearly and explicitly communicate the scenarios, environments, or inputs that are necessary for the bug to arise. The comment should immediately indicate that the issue's severity depends on these factors.
367
- 4. Your tone should be matter-of-fact and not accusatory or overly positive. It should read as a helpful AI assistant suggestion without sounding too much like a human reviewer.
368
- 5. Write so the reader can quickly understand the issue without reading too closely.
369
- 6. AVOID flattery, do not give any comments that are not helpful to the reader. Avoid phrasing like "Great job ...", "Thanks for ...".
370
- `;var f9=AY,v9=MY;var A3={Executed:O2.define("command.executed",P.object({name:P.string(),sessionID:D2.zod,arguments:P.string(),messageID:w2.zod}))},M3=P.object({name:P.string(),description:P.string().optional(),agent:P.string().optional(),model:P.string().optional(),source:P.enum(["command","mcp","skill"]).optional(),template:P.promise(P.string()).or(P.string()),subtask:P.boolean().optional(),hints:P.array(P.string())}).meta({ref:"Command"});function L4($){let Z=[],X=$.match(/\$\d+/g);if(X)for(let Q of[...new Set(X)].sort())Z.push(Q);if($.includes("$ARGUMENTS"))Z.push("$ARGUMENTS");return Z}var I0={INIT:"init",REVIEW:"review",DREAM:"dream",DISTILL:"distill",GOAL:"goal",DEEP_RESEARCH:"deep-research"};function _Y(){return["The user wants a deep, multi-source, fact-checked research report.","","Research request:","$ARGUMENTS","","If the request is underspecified (missing scope, constraints, region, time range, etc.),","ask 2-3 brief clarifying questions FIRST, then weave the answers into a refined question.","","When the request is specific enough, run the built-in deep-research workflow:",' workflow({ operation: "run", name: "deep-research", args: "<the refined research question>" })',"","Pass the full refined question as `args`. The workflow fans out web searches, fetches sources,","adversarially verifies claims, and returns a cited report; relay its result to the user."].join(`
371
- `)}class b4 extends Z2.Service()("@qitqode/Command"){}var RY=M.effect(b4,Y.gen(function*(){let $=yield*B2.Service,Z=yield*N0.Service,X=yield*j$.Service,Q=Y.fn("Command.state")(function*(O){let G=yield*$.get(),W=yield*D0.make(),K={};if(K[I0.INIT]={name:I0.INIT,description:"guided AGENTS.md setup",source:"command",get template(){return f9.replace("${path}",O.worktree)},hints:L4(f9)},K[I0.REVIEW]={name:I0.REVIEW,description:"review changes [commit|branch|pr], defaults to uncommitted",source:"command",get template(){return v9.replace("${path}",O.worktree)},subtask:!0,hints:L4(v9)},K[I0.DREAM]={name:I0.DREAM,description:"manually consolidate project memory from memory files and raw trajectory",agent:"dream",source:"command",subtask:!1,get template(){return["Run one manual dream memory consolidation pass for the current project.","","User focus or constraints:","$ARGUMENTS","","Use the memory files as the working index and the raw qitqode trajectory database as the source of truth.","Use bash for read-only SQLite and filesystem inspection. Do not modify the database.","Consolidate only durable, verified information into project memory."].join(`
372
- `)},hints:["$ARGUMENTS"]},K[I0.DISTILL]={name:I0.DISTILL,description:"find repeated workflows in recent work and package them into skills, subagents, or commands",agent:"distill",source:"command",subtask:!1,get template(){return["Run one manual distill pass for the current project.","","User focus or constraints:","$ARGUMENTS","","Look back over recent work and identify repeated manual workflows worth packaging.","Use the raw qitqode trajectory database as the source of truth and memory files to spot cross-session patterns.","Inventory existing skills, agents, and commands first so you reuse or extend instead of duplicating.","Use bash for read-only SQLite and filesystem inspection. Do not modify the database.","Produce a compact shortlist, then create only the high-confidence missing assets."].join(`
373
- `)},hints:["$ARGUMENTS"]},K[I0.GOAL]={name:I0.GOAL,description:"set a stop-condition goal; runs until a judge says it's met. /goal clear to abort",source:"command",subtask:!1,get template(){return"$ARGUMENTS"},hints:["$ARGUMENTS"]},L0.QITQODE_EXPERIMENTAL_WORKFLOW_TOOL)K[I0.DEEP_RESEARCH]={name:I0.DEEP_RESEARCH,description:"deep multi-source, fact-checked research report (runs the deep-research workflow)",source:"command",subtask:!1,get template(){return _Y()},hints:["$ARGUMENTS"]};for(let[y,j]of Object.entries(G.command??{}))K[y]={name:y,agent:j.agent,model:j.model,description:j.description,source:"command",get template(){return j.template},subtask:j.subtask,hints:L4(j.template)};for(let[y,j]of Object.entries(yield*Z.prompts()))K[y]={name:y,source:"mcp",description:j.description,get template(){return W.promise(Z.getPrompt(j.client,j.name,j.arguments?Object.fromEntries(j.arguments.map((q,H)=>[q.name,`$${H+1}`])):{}).pipe(Y.map((q)=>q?.messages.map((H)=>H.content.type==="text"?H.content.text:"").join(`
374
- `)||"")))},hints:j.arguments?.map((q,H)=>`$${H+1}`)??[]};for(let y of yield*X.all()){if(K[y.name])continue;K[y.name]={name:y.name,description:y.description,source:"skill",get template(){return y.content},hints:[]}}return{commands:K}}),J=yield*d.make((O)=>Q(O)),B=Y.fn("Command.get")(function*(O){return(yield*d.get(J)).commands[O]}),V=Y.fn("Command.list")(function*(){let O=yield*d.get(J);return Object.values(O.commands)});return b4.of({get:B,list:V})})),_3=RY.pipe(M.provide(B2.defaultLayer),M.provide(N0.defaultLayer),M.provide(j$.defaultLayer));var CY=new WeakMap;function U4($,Z){let X=CY.get(Z);if(!X)X=new Map,CY.set(Z,X);let Q=`${$.providerID}\x00${$.api.id}`,J=X.get(Q);if(J)return J;let B=i2.schema($,P.toJSONSchema(Z));return X.set(Q,B),B}var A4=Y.fn("Session.buildLLMRequestPrefix")(function*($){let Z=yield*E2.Service,X=yield*W0.Service,Q=yield*o.toModelMessagesEffect($.msgs,$.model),J=$.msgs.findLast((W)=>W.info.role==="user");if(!J)return yield*Y.die(Error("buildLLMRequestPrefix: no user message in msgs"));let B=J.info,V=yield*Z.buildSystemArray({agent:$.agent,model:$.model,system:$.additions,user:B,sessionID:$.sessionID,agentID:B.agentID}),O=yield*X.tools({modelID:t0.make($.model.api.id),providerID:$.model.providerID,agent:$.agent}),G={};for(let W of O){let K=U4($.model,W.parameters);G[W.id]=r$({description:W.description,inputSchema:W$(K)})}return{system:V,tools:G,inheritedMessages:Q}});var o0={};b2(o0,{layer:()=>cY,gcInboxRows:()=>lY,defaultLayer:()=>E3,Service:()=>I4,MAX_DRAIN_PER_TURN:()=>mY,InboxReceiverNotFound:()=>d9});import M4 from"crypto";var SY="0123456789ABCDEFGHJKMNPQRSTVWXYZ",_4=32;var R3=16,kY=10,IY=281474976710655;var V1;(function($){$.Base32IncorrectEncoding="B32_ENC_INVALID",$.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",$.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",$.EncodeTimeNegative="ENC_TIME_NEG",$.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",$.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",$.PRNGDetectFailure="PRNG_DETECT",$.ULIDInvalid="ULID_INVALID",$.Unexpected="UNEXPECTED",$.UUIDInvalid="UUID_INVALID"})(V1||(V1={}));class r1 extends Error{constructor($,Z){super(`${Z} (${$})`);this.name="ULIDError",this.code=$}}function C3($){let Z=Math.floor($()*_4)%_4;return SY.charAt(Z)}function I3($){let Z=S3(),X=Z&&(Z.crypto||Z.msCrypto)||(typeof M4<"u"?M4:null);if(typeof X?.getRandomValues==="function")return()=>{let Q=new Uint8Array(1);return X.getRandomValues(Q),Q[0]/255};else if(typeof X?.randomBytes==="function")return()=>X.randomBytes(1).readUInt8()/255;else if(M4?.randomBytes)return()=>M4.randomBytes(1).readUInt8()/255;throw new r1(V1.PRNGDetectFailure,"Failed to find a reliable PRNG")}function S3(){if(h3())return self;if(typeof window<"u")return window;if(typeof global<"u")return global;if(typeof globalThis<"u")return globalThis;return null}function k3($,Z){let X="";for(;$>0;$--)X=C3(Z)+X;return X}function T3($,Z=kY){if(isNaN($))throw new r1(V1.EncodeTimeValueMalformed,`Time must be a number: ${$}`);else if($>IY)throw new r1(V1.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${IY}: ${$}`);else if($<0)throw new r1(V1.EncodeTimeNegative,`Time must be positive: ${$}`);else if(Number.isInteger($)===!1)throw new r1(V1.EncodeTimeValueMalformed,`Time must be an integer: ${$}`);let X,Q="";for(let J=Z;J>0;J--)X=$%_4,Q=SY.charAt(X)+Q,$=($-X)/_4;return Q}function h3(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function t1($,Z){let X=Z||I3(),Q=!$||isNaN($)?Date.now():$;return T3(Q,kY)+k3(R3,X)}var Y$=R4("inbox",{id:X0().primaryKey(),receiver_session_id:X0().$type().notNull().references(()=>S0.id,{onDelete:"cascade"}),receiver_actor_id:X0().notNull(),sender_session_id:X0().$type(),sender_actor_id:X0(),type:X0().notNull().default("text"),content:X0({mode:"json"}).$type().notNull(),created_at:W1().notNull()},($)=>[e1("inbox_receiver_idx").on($.receiver_session_id,$.receiver_actor_id,$.id),e1("inbox_created_idx").on($.created_at)]);function TY($){if($.type==="actor_notification")return $.content.text??"(no notification body)";let Z=$.content,X=$.sender_session_id?`${$.sender_session_id}:${$.sender_actor_id??"?"}`:"system",Q=new Date($.created_at).toISOString();return`<inbox from="${X}" sent_at="${Q}">
375
- ${Z.text??"(empty)"}
376
- </inbox>`}function hY($){let Z=`Background actor "${$.description}" (actor_id: ${$.actorID})`;if($.status==="completed"){let X=`Status: ${$.reportedStatus??"unknown"}`,Q=$.reportedSummary?`
377
- Summary: ${$.reportedSummary}`:"";return`<actor-notification>
378
- ${Z} completed.
379
- ${X}${Q}
380
- Result: ${$.result??"(no output)"}
381
- </actor-notification>`}if($.status==="failed")return`<actor-notification>
382
- ${Z} failed.
383
- Error: ${$.error??"unknown"}
384
- </actor-notification>`;return`<actor-notification>
385
- ${Z} was cancelled.
386
- </actor-notification>`}var gY=s.create({service:"inbox"}),g3=604800000,mY=100;function lY($){return Y.sync(()=>r2.use((Z)=>Z.delete(Y$).where(fY(Y$.created_at,$)).run()))}class d9 extends u0.TaggedErrorClass()("InboxReceiverNotFound",{receiverSessionID:u0.String,receiverActorID:u0.String}){}class I4 extends Z2.Service()("@qitqode/Inbox"){}var cY=M.effect(I4,Y.gen(function*(){let $=yield*p.Service,Z=yield*M2.Service,X=yield*J2.Service,Q=yield*d2.Scope;yield*lY(Date.now()-g3),gY.info("inbox gc-on-init complete");let J=Y.fn("Inbox.send")(function*(O){if(!(yield*Z.get(O.receiverSessionID,O.receiverActorID)))return yield*Y.fail(new d9({receiverSessionID:O.receiverSessionID,receiverActorID:O.receiverActorID}));let W={id:t1(),receiver_session_id:O.receiverSessionID,receiver_actor_id:O.receiverActorID,sender_session_id:O.senderSessionID??null,sender_actor_id:O.senderActorID??null,type:O.type??"text",content:{text:O.content},created_at:Date.now()};yield*Y.sync(()=>r2.use((y)=>y.insert(Y$).values(W).run())),yield*$.publish(dY,{receiverSessionID:O.receiverSessionID,receiverActorID:O.receiverActorID,...O.senderSessionID!==void 0?{senderSessionID:O.senderSessionID}:{},...O.senderActorID!==void 0?{senderActorID:O.senderActorID}:{},inboxID:W.id,type:W.type});let K=K1.current;if(K)yield*K.loop({sessionID:O.receiverSessionID,agentID:O.receiverActorID}).pipe(Y.ignore,Y.forkIn(Q));else gY.warn("inbox.send: sessionPromptRef.current undefined \u2014 wake skipped",{receiverActorID:O.receiverActorID});return{inboxID:W.id}}),B=Y.fn("Inbox.drain")(function*(O,G){let W=yield*Y.sync(()=>r2.use((H)=>H.select().from(Y$).where(EY(G0(Y$.receiver_session_id,O),G0(Y$.receiver_actor_id,G))).orderBy(Y$.id).limit(mY).all()));if(W.length===0)return 0;let y=(yield*X.messages({sessionID:O,agentID:G})).findLast((H)=>(H.info.role==="user"||H.info.role==="assistant")&&("model"in H.info)&&H.info.model!==void 0&&H.info.model.providerID!=="system"&&H.info.agent!=="system");if(!y||!("model"in y.info)||!y.info.model||!("agent"in y.info))return 0;let j=w2.ascending(),q=Date.now();yield*X.updateMessage({id:j,role:"user",sessionID:O,agentID:G,time:{created:q},agent:y.info.agent,model:y.info.model});for(let H of W)yield*X.updatePart({id:Q2.ascending(),messageID:j,sessionID:O,type:"text",synthetic:!0,text:TY(H)});return yield*Y.sync(()=>r2.use((H)=>H.delete(Y$).where(vY(Y$.id,W.map((z)=>z.id))).run())),W.length}),V=I4.of({send:J,drain:B});return C4.current=V,yield*Y.addFinalizer(()=>Y.sync(()=>{if(C4.current===V)C4.current=void 0})),V})),E3=cY.pipe(M.provide(p.defaultLayer),M.provide(M2.defaultLayer),M.provide(J2.defaultLayer));function g8($){return $.replace(/<think>[\s\S]*?<\/think>\s*/g,"").split(`
387
- `).map((Z)=>Z.trim()).find((Z)=>Z.length>0)}var H1={};b2(H1,{layer:()=>uY,defaultLayer:()=>f3,TaskGateState:()=>H1,Service:()=>S4});class S4 extends Z2.Service()("@qitqode/TaskGateState"){}var uY=M.effect(S4,Y.gen(function*(){let $=yield*d.make(Y.fn("TaskGateState.state")(function*(){return{counts:new Map}})),Z=Y.fn("TaskGateState.get")(function*(J){return(yield*d.get($)).counts.get(J)??0}),X=Y.fn("TaskGateState.bump")(function*(J){let B=yield*d.get($),V=(B.counts.get(J)??0)+1;return B.counts.set(J,V),V}),Q=Y.fn("TaskGateState.clear")(function*(J){(yield*d.get($)).counts.delete(J)});return S4.of({get:Z,bump:X,clear:Q})})),f3=uY;var v$=s.create({service:"session.prompt"}),v3=`Use this tool to return your final response in the requested structured format.
388
-
389
- IMPORTANT:
390
- - You MUST call this tool exactly once at the end of your response
391
- - The input must be valid JSON matching the required schema
392
- - Complete all necessary research and tool calls BEFORE calling this tool
393
- - This tool provides your final answer - no further actions are taken after calling it`,nY="IMPORTANT: The user has requested structured output. You MUST use the StructuredOutput tool to provide your final response. Do NOT respond with plain text - you MUST call the StructuredOutput tool with your answer formatted according to the schema.";function d3($){return/\/\.qitqode\/(tools?|skills?|hooks?)\//.test($)}function k4($){let{$schema:Z,...X}=$.schema;return r$({description:v3,inputSchema:W$(X),async execute(Q){return $.onSuccess(Q),{output:"Structured output captured successfully.",title:"Structured Output",metadata:{valid:!0}}},toModelOutput({output:Q}){return{type:"text",value:Q.output}}})}function sY($){return Y.gen(function*(){let Z=yield*W0.Service,X=yield*N0.Service,Q=yield*G1.Service,J=yield*p.Service,B=yield*z2.Service,V=yield*H2.Service,O=yield*M2.Service;return Y.fn("SessionPrompt.resolveTools")(function*(W){let D=[];try{const K=oY(D,v$.time("resolveTools"),0);let y={};let j=yield*D0.make();let q=yield*$();let H=Y.fn("SessionPrompt.whitelistFor")(function*(){if(!W.agentID)return;let C=yield*O.get(W.session.id,W.agentID);if(!C||!Array.isArray(C.tools))return;return new Set(C.tools)});let z=yield*H();let L=(C)=>({title:"Tool not permitted",output:`The "${C}" tool is not in this actor's whitelist. Allowed tools: ${z?[...z].join(", "):"(none)"}.`,metadata:{rejected:!0,reason:"tool-whitelist"}});let b=(C,S)=>({sessionID:W.session.id,abort:S.abortSignal,messageID:W.processor.message.id,callID:S.toolCallId,extra:{model:W.model,bypassAgentCheck:W.bypassAgentCheck,promptOps:q},agent:W.agent.name,actorID:W.agentID,taskId:W.task_id,messages:W.messages,metadata:(E)=>W.processor.updateToolCall(S.toolCallId,(x)=>{if(!["running","pending"].includes(x.state.status))return x;return{...x,state:{title:E.title,metadata:E.metadata,status:"running",input:C,time:{start:Date.now()}}}}),ask:(E)=>B.ask({...E,sessionID:W.session.id,tool:{messageID:W.processor.message.id,callID:S.toolCallId},ruleset:z2.merge(W.agent.permission,W.session.permission??[]),interactive:!_6.has(W.agent.name)},S.abortSignal).pipe(Y.orDie)});for(let C of yield*Z.tools({modelID:t0.make(W.model.api.id),providerID:W.model.providerID,agent:W.agent})){let S=U4(W.model,C.parameters);y[C.id]=r$({description:C.description,inputSchema:W$(S),execute(E,x){return j.promise(Y.gen(function*(){let k=Date.now(),T=x?.toolCallId??"?";v$.debug("tool execute start",{tool:C.id,callID:T,sessionID:W.session.id});let N=b(E,x);if(z&&!z.has(C.id)){let g=L(C.id);return v$.debug("tool execute rejected",{tool:C.id,callID:T,durationMs:Date.now()-k}),yield*W.processor.completeToolCall(x.toolCallId,g),g}let A={args:E};if(yield*V.trigger("tool.execute.before",{tool:C.id,sessionID:N.sessionID,callID:N.callID},A),A.cancel){let g={title:"Cancelled",output:A.cancelReason||"Tool call cancelled by hook",metadata:{cancelled:!0}};return yield*J.publish(I2.ToolCall,{sessionID:N.sessionID,tool_name:C.id,input_bytes:I2.jsonByteLength(A.args),output_bytes:0,tool_call_id:x.toolCallId,tool_call_status:"cancelled"}).pipe(Y.ignore),yield*W.processor.completeToolCall(x.toolCallId,g),g}let _=yield*C.execute(A.args,N);v$.debug("tool execute done",{tool:C.id,callID:T,durationMs:Date.now()-k,ok:!0});let R={..._,attachments:_.attachments?.map((g)=>({...g,id:Q2.ascending(),sessionID:N.sessionID,messageID:W.processor.message.id}))};if(yield*V.trigger("tool.execute.after",{tool:C.id,sessionID:N.sessionID,callID:N.callID,args:A.args},R),(C.id==="write"||C.id==="edit")&&A.args?.filePath&&d3(A.args.filePath))yield*Z.reload().pipe(Y.tapError((g)=>Y.sync(()=>v$.warn("extension reload failed",{error:g}))),Y.ignore);if(yield*J.publish(I2.ToolCall,{sessionID:N.sessionID,tool_name:C.id,input_bytes:I2.jsonByteLength(A.args),output_bytes:Buffer.byteLength(R.output??"","utf8"),tool_call_id:x.toolCallId,tool_call_status:"success"}).pipe(Y.ignore),x.abortSignal?.aborted)yield*W.processor.completeToolCall(x.toolCallId,R);return R}))}})}for(let[C,S]of Object.entries(yield*X.tools())){let E=S.execute;if(!E)continue;let x=yield*Y.promise(()=>Promise.resolve(iY(S.inputSchema).jsonSchema)),k=i2.schema(W.model,x);S.inputSchema=W$(k),S.execute=(T,N)=>j.promise(Y.gen(function*(){let A=Date.now(),_=N?.toolCallId??"?";v$.debug("tool execute start (mcp)",{tool:C,callID:_,sessionID:W.session.id});let R=b(T,N);if(z&&!z.has(C)){let n=L(C),a={title:n.title,metadata:n.metadata,output:n.output,attachments:[],content:[{type:"text",text:n.output}]};return v$.debug("tool execute rejected (mcp)",{tool:C,callID:_,durationMs:Date.now()-A}),yield*W.processor.completeToolCall(N.toolCallId,a),a}let g={args:T};if(yield*V.trigger("tool.execute.before",{tool:C,sessionID:R.sessionID,callID:N.toolCallId},g),g.cancel){let n={content:[{type:"text",text:g.cancelReason||"Tool call cancelled by hook"}]};return yield*J.publish(I2.ToolCall,{sessionID:R.sessionID,tool_name:C,input_bytes:I2.jsonByteLength(g.args),output_bytes:0,tool_call_id:N.toolCallId,tool_call_status:"cancelled"}).pipe(Y.ignore),n}yield*R.ask({permission:C,metadata:{},patterns:["*"],always:["*"]});let l=yield*Y.promise(()=>E(g.args,N));v$.debug("tool execute done (mcp)",{tool:C,callID:_,durationMs:Date.now()-A,ok:!0}),yield*V.trigger("tool.execute.after",{tool:C,sessionID:R.sessionID,callID:N.toolCallId,args:T},l);let m=[];yield*J.publish(I2.ToolCall,{sessionID:R.sessionID,tool_name:C,input_bytes:I2.jsonByteLength(T),output_bytes:I2.jsonByteLength(l.content??""),tool_call_id:N.toolCallId,tool_call_status:"success"}).pipe(Y.ignore);let h=[];for(let n of l.content)if(n.type==="text")m.push(n.text);else if(n.type==="image")h.push({type:"file",mime:n.mimeType,url:`data:${n.mimeType};base64,${n.data}`});else if(n.type==="resource"){let{resource:a}=n;if(a.text)m.push(a.text);if(a.blob)h.push({type:"file",mime:a.mimeType??"application/octet-stream",url:`data:${a.mimeType??"application/octet-stream"};base64,${a.blob}`,filename:a.uri})}let f=yield*Q.output(m.join(`
394
-
395
- `),{},W.agent),e={title:"",metadata:{...l.metadata,truncated:f.truncated,...f.truncated&&{outputPath:f.outputPath}},output:f.content,attachments:h.map((n)=>({...n,id:Q2.ascending(),sessionID:R.sessionID,messageID:W.processor.message.id})),content:l.content};if(N.abortSignal?.aborted)yield*W.processor.completeToolCall(N.toolCallId,e);return e})),y[C]=S}return y}catch(U){var F=U,I=1}finally{pY(D,F,I)}})})}function aY($){let Z=$.assistant;if($.parts.some((X)=>X.type==="tool"&&!X.metadata?.providerExecuted&&X.state.status!=="error"))return{type:"continue"};if(!Z.finish)return{type:"continue"};if(Z.finish==="tool-calls")return{type:"continue"};if($.phase==="existing-assistant"&&!($.lastUser.id<Z.id))return{type:"continue"};if(Z.error)return{type:"failed",reason:Z.error.name};if(Z.structured!==void 0)return{type:"final"};if(Z.summary)return{type:"final"};if(Z.finish==="content-filter")return{type:"filtered"};if(Z.finish==="error")return{type:"failed",reason:"model error finish"};if($.parts.some((X)=>X.type==="text"&&!X.synthetic&&!X.ignored&&X.text.trim().length>0))return Z.finish==="other"?{type:"final",degraded:!0}:{type:"final"};if($.parts.some((X)=>X.type==="reasoning"&&X.text.trim().length>0))return{type:"think-only"};return{type:"invalid",reason:"empty output"}}function m9($){return aY($)}var T4=Y.gen(function*(){return{bus:yield*p.Service,status:yield*y0.Service,sessions:yield*f2,agents:yield*g2.Service,provider:yield*y2.Service,processor:yield*m0.Service,prune:yield*q$.Service,checkpoint:yield*D$.Service,compaction:yield*z$.Service,config:yield*B2.Service,plugin:yield*H2.Service,permission:yield*z2.Service,fsys:yield*s2.Service,registry:yield*W0.Service,scope:yield*d2.Scope,instruction:yield*H$.Service,state:yield*z0.Service,goal:yield*v0.Service,taskGateState:yield*H1.Service,taskRegistry:yield*M0.Service,revert:yield*$$.Service,summary:yield*P0.Service,sys:yield*O$.Service,llm:yield*E2.Service,actorRegistry:yield*M2.Service,inbox:yield*o0.Service}}),l9=Y.fnUntraced(function*($,Z,X,Q){let J=(yield*$.list()).filter((O)=>!O.hidden).map((O)=>O.name),B=J.length?` Available agents: ${J.join(", ")}`:"",V=new x2.Unknown({message:`Agent not found: "${X}".${B}`});return yield*Z.publish(U2.Error,{sessionID:Q,error:V.toObject()}),V}),d$=Y.fnUntraced(function*($,Z,X,Q){let J=yield*$.get(X);if(!J)throw yield*l9($,Z,X,Q);return J}),$8=Y.fnUntraced(function*($,Z,X){if(!Z)return X;let Q=yield*$.resolveModelRef(Z);return{providerID:Q.providerID,modelID:Q.id}});function m3($,Z,X){if(!$.startsWith("data:"))return $;return`[data-url:${Z}${X?`:${X}`:""}]`}function rY($){return{...$,url:m3($.url,$.mime,$.filename)}}function l3($){if($.status==="completed"&&$.attachments&&$.attachments.length>0)return{...$,attachments:$.attachments.map(rY)};return $}function c3($){if($.type==="file")return rY($);if($.type==="tool")return{...$,state:l3($.state)};return $}function h4($){if(!$)return;if(typeof $==="object"&&$!==null&&"message"in $&&typeof $.message==="string")return $.message;return JSON.stringify($)}function tY($){return $.filter((Z)=>Z.type==="text"&&!Z.synthetic&&!Z.ignored).map((Z)=>Z.text).join(`
396
- `)}function g4($,Z){if($.structured!==void 0)return JSON.stringify($.structured);return Z.findLast((X)=>X.type==="text"&&!X.synthetic)?.text}function E4($){return $.map((Z)=>({...Z.info,created:Z.info.time.created,parts:Z.parts.map(c3)}))}function eY($,Z,X){let Q=$.findIndex((J)=>J.info.id===Z.id);if(Q===-1)return[...$,{info:Z,parts:X}];return $.map((J,B)=>B===Q?{info:Z,parts:X}:J)}function c9($,Z,X){return X.pipe(Y.catchDefect((Q)=>{if(!(Q instanceof $0.BackendAuthRejectedError))return Y.die(Q);return Z.publish(U2.Error,{sessionID:$,error:new x2.Unknown({message:Q.message}).toObject()}).pipe(Y.andThen(Y.die(Q)))}))}var $Q=Y.fn("SessionPrompt.prepareStep")(function*($){let X=$.msgs.findLast((B)=>B.info.role==="user")?.parts.some((B)=>B.type==="agent")??!1,Q=yield*$.resolveTools({agent:$.agent,session:$.session,model:$.model,tools:$.lastUser.tools,processor:$.handle,bypassAgentCheck:X,messages:$.msgs,agentID:$.lastUser.agentID,task_id:$.task_id});if($.lastUser.format?.type==="json_schema")Q.StructuredOutput=$.createStructuredOutputTool({schema:$.lastUser.format.schema,onSuccess(B){$.structured.value=B}});if($.step===1)yield*$.summary.summarize({sessionID:$.sessionID,messageID:$.lastUser.id}).pipe(Y.ignore,Y.forkIn($.scope));if($.step>1&&$.lastFinished)for(let B of $.msgs){if(B.info.role!=="user"||B.info.id<=$.lastFinished.id)continue;for(let V of B.parts){if(V.type!=="text"||V.ignored||V.synthetic)continue;if(!V.text.trim())continue;V.text=["<system-reminder>","The user sent the following message:",V.text,"","Please address this message and continue with your tasks.","</system-reminder>"].join(`
397
- `)}}yield*$.plugin.trigger("experimental.chat.messages.transform",{},{messages:$.msgs});let J=$.msgs.findLast((B)=>B.info.role==="user"&&B.info.id===$.lastUser.id)?.parts??[];return{tools:Q,format:$.lastUser.format??{type:"text"},query:tY(J)}});function ZQ($){return{cancelledByPlugin:Y.gen(function*(){let Q={cancel:void 0,cancelReason:void 0};if(yield*$.plugin.trigger("session.userQuery.pre",{sessionID:$.sessionID,agentID:$.agentID,step:$.step,messageID:$.lastUser.id,query:$.query},Q),!Q.cancel)return!1;return $.cancellation.cancelled=!0,$.cancellation.reason=Q.cancelReason,$.handle.message.error=new o.AbortedError({message:Q.cancelReason??"Step cancelled by plugin"}).toObject(),$.handle.message.finish="cancelled",yield*$.sessions.updateMessage($.handle.message),yield*$.plugin.trigger("session.userQuery.post",{sessionID:$.sessionID,agentID:$.agentID,step:$.step,messageID:$.lastUser.id,query:$.query,assistantMessageID:$.handle.message.id,finish:$.handle.message.finish,error:Q.cancelReason,trajectory:$.trajectoryForStep($.msgs,$.handle.message)},{}),!0}),withUserQueryPost:(Q)=>Q.pipe(Y.onExit((J)=>$.plugin.trigger("session.userQuery.post",{sessionID:$.sessionID,agentID:$.agentID,step:$.step,messageID:$.lastUser.id,query:$.query,assistantMessageID:$.handle.message.id,finish:$.handle.message.finish,error:o2.isFailure(J)?V2.pretty(J.cause):h4($.handle.message.error),finalText:g4($.handle.message,o.parts($.handle.message.id)),trajectory:$.trajectoryForStep($.msgs,$.handle.message)},{}).pipe(Y.ignore)))}}var Z8={};b2(Z8,{toSchemaOnlyTools:()=>YQ,runMaxStep:()=>i3,runCandidate:()=>QQ,parseJudgeIndex:()=>JQ,judge:()=>BQ,MaxMode:()=>Z8,MAX_MODE_AGENT:()=>u3,DEFAULT_CANDIDATES:()=>XQ});var f4=s.create({service:"session.max-mode"}),XQ=5,u3="max";function YQ($){let Z={};for(let[X,Q]of Object.entries($)){let{execute:J,...B}=Q;Z[X]=B}return Z}var QQ=($,Z)=>Y.gen(function*(){let X=L6(),Q={index:Z,reasoning:"",text:"",toolCalls:[],finishReason:"stop"},J=YQ($.tools),B=$.llm.stream({user:$.user,sessionID:$.sessionID,parentSessionID:$.parentSessionID,model:$.model,agent:$.agent,permission:$.permission,system:$.system,prebuiltSystem:$.prebuiltSystem,messages:$.messages,tools:J,agentID:$.agentID});return yield*u9(B,(V)=>{switch(V.type){case"reasoning-delta":if(Q.reasoning+=V.text,X.append(V.text))return Y.fail(z6());if(V.providerMetadata)Q.reasoningMetadata=V.providerMetadata;break;case"text-delta":if(Q.text+=V.text,X.append(V.text))return Y.fail(z6());if(V.providerMetadata)Q.textMetadata=V.providerMetadata;break;case"tool-call":Q.toolCalls.push({toolCallId:V.toolCallId,toolName:V.toolName,input:V.input??{},providerMetadata:V.providerMetadata});break;case"finish-step":Q.finishReason=V.finishReason??Q.finishReason,Q.usage=V.usage,Q.providerMetadata=V.providerMetadata;break;case"error":return Y.fail(V.error);default:break}return Y.void}),Q}).pipe(Y.catchCauseIf((X)=>!V2.hasInterruptsOnly(X),(X)=>Y.fail(V2.squash(X))),Y.retry({while:E2.isTransientCapacityError,schedule:E2.persistentRetrySchedule}),Y.catchIf(L7,()=>Y.succeed("text-repeat")),Y.catch((X)=>Y.sync(()=>{return f4.warn("candidate failed",{index:Z,error:X instanceof Error?X.message:String(X)}),null})));function o3($,Z){let X=$.toolCalls.length===0?"(no tool calls \u2014 final answer / text only)":$.toolCalls.map((B)=>` - ${B.toolName}(${JSON.stringify(B.input)})`).join(`
398
- `),Q=$.reasoning.trim()?$.reasoning.trim():"(no reasoning emitted)",J=$.text.trim()?$.text.trim():"(no text emitted)";return[`### Candidate ${Z}`,`Reasoning:
399
- ${Q}`,`Message:
400
- ${J}`,`Proposed tool calls:
401
- ${X}`].join(`
402
- `)}var p3=["You are a judge selecting the single best next step for a coding agent.","You will see several independent candidate drafts for the SAME step. Each candidate contains its reasoning, its message text, and the tool calls it proposes to make next.","Pick the ONE candidate that has the most correct, grounded, and useful next step. Prefer candidates whose reasoning is sound and whose proposed tool calls are appropriate and safe.","Respond with ONLY the integer index of the winning candidate (e.g. `2`). No other text."].join(`
403
- `);function JQ($,Z){let X=$.match(/\d+/);if(!X)return 0;let Q=parseInt(X[0],10);if(Number.isNaN(Q)||Q<0||Q>=Z)return 0;return Q}var BQ=($,Z)=>Y.gen(function*(){if(Z.length===1)return{pick:0,usage:void 0};let X=Z.map((G,W)=>o3(G,W)).join(`
404
-
405
- `),J=[{role:"user",content:[`There are ${Z.length} candidates, indexed 0..${Z.length-1}.`,"",X,"",`Reply with ONLY the integer index (0..${Z.length-1}) of the best candidate.`].join(`
406
- `)}],B="",V,O=$.llm.stream({user:$.user,sessionID:$.sessionID,parentSessionID:$.parentSessionID,model:$.model,agent:$.agent,permission:$.permission,system:[p3],messages:J,tools:{},toolChoice:"none",agentID:$.agentID});return yield*u9(O,(G)=>{if(G.type==="text-delta")B+=G.text;else if(G.type==="finish-step")V=G.usage;else if(G.type==="error")return Y.fail(G.error);return Y.void}),{pick:JQ(B,Z.length),usage:V}}).pipe(Y.catchCauseIf((X)=>!V2.hasInterruptsOnly(X),(X)=>Y.fail(V2.squash(X))),Y.retry({while:E2.isTransientCapacityError,schedule:E2.persistentRetrySchedule}),Y.catch((X)=>{return f4.warn("judge failed, defaulting to candidate 0",{error:X instanceof Error?X.message:String(X)}),Y.succeed({pick:0,usage:void 0})})),i3=($)=>Y.gen(function*(){let Z=Math.max(1,$.candidates??XQ),X=(y)=>$.setStatus?$.setStatus(y):Y.void,Q=Date.now();yield*X(`thinking \u2014 ${Z} candidates`);let J=yield*Y.all(Array.from({length:Z},(y,j)=>QQ($,j)),{concurrency:Z});if(J.some((y)=>y==="text-repeat"))return"text-repeat";let B=J.filter((y)=>y!==null&&y!=="text-repeat");if(B.length===0)return f4.warn("all candidates failed, falling back to single process"),yield*X(void 0),yield*$.handle.process({user:$.user,agent:$.agent,permission:$.permission,sessionID:$.sessionID,parentSessionID:$.parentSessionID,system:$.system,prebuiltSystem:$.prebuiltSystem,messages:$.messages,tools:$.tools,model:$.model,agentID:$.agentID});yield*X(`judging ${B.length} candidates`);let{pick:V,usage:O}=yield*BQ($,B),G=B[V];f4.info("max step",{candidates:Z,survivors:B.length,winner:V,toolCalls:G.toolCalls.length});let K=[...B.filter((y,j)=>j!==V).map((y)=>y.usage),O].reduce((y,j)=>{if(!j)return y;let q=M6({model:$.model,usage:j});return y.cost+=q.cost,y.tokensIn+=q.tokens.input+q.tokens.cache.read+q.tokens.cache.write,y.tokensOut+=q.tokens.output+q.tokens.reasoning,y},{cost:0,tokensIn:0,tokensOut:0});return yield*X(void 0),yield*$.handle.replay({reasoning:G.reasoning,reasoningMetadata:G.reasoningMetadata,text:G.text,textMetadata:G.textMetadata,toolCalls:G.toolCalls,finishReason:G.finishReason,usage:G.usage,providerMetadata:G.providerMetadata,tools:$.tools,messages:$.messages,selection:{winner:V,total:B.length},thinkingMs:Date.now()-Q,overhead:K})});var WQ=Y.fn("SessionPrompt.executeLlmStep")(function*($){let Z=$.lastUser.agentID?yield*$.actorRegistry.get($.sessionID,$.lastUser.agentID).pipe(Y.orElseSucceed(()=>{return})):void 0;if(Z?.contextMode==="full"&&(Z.mode==="subagent"||Z.mode==="peer")){let H=Q$.current?.getForkContext($.lastUser.agentID),z=H?yield*H:void 0;if(!z)return yield*$.slog.warn("fork agent runLoop: missing forkContext, failing actor",{sessionID:$.sessionID,agentID:$.lastUser.agentID}),yield*$.actorRegistry.updateStatus($.sessionID,$.lastUser.agentID,{status:"idle",lastOutcome:"failure",lastError:"missing fork context"}).pipe(Y.ignore),{kind:"break",reason:"missing-fork-context"};let L=$.msgs.filter((F)=>F.info.id>z.watermarkMsgID&&F.info.agentID===$.lastUser.agentID),b=yield*o.toModelMessagesEffect(L,$.model),D=[...z.inheritedMessages,...b];if(yield*$.cancelledByPlugin)return{kind:"processed",result:"stop",fork:!0};return{kind:"processed",result:yield*$.withUserQueryPost($.handle.process({user:$.lastUser,agent:$.agent,permission:z.parentPermission??$.session.permission,sessionID:$.sessionID,parentSessionID:$.session.parentID,system:[],prebuiltSystem:z.system,messages:[...D,...$.isLastStep?[{role:"assistant",content:$.maxStepsText}]:[]],tools:$.tools,model:$.model,toolChoice:$.format.type==="json_schema"?"required":void 0,agentID:$.lastUser.agentID})),fork:!0}}let[Q,J,B]=yield*Y.all([$.sys.skills($.agent),Y.sync(()=>$.sys.environment($.model,$.session.time.created)),$.instruction.system().pipe(Y.orDie)]);if(!$.session.parentID&&!$.instructionsNotified.has($.sessionID)){$.instructionsNotified.add($.sessionID);let H=(yield*d.context).worktree,z=Array.from(B.paths,(L)=>H$.display(L,H));if(z.length>0)yield*$.bus.publish(VQ,{files:z}).pipe(Y.ignore)}let V=[...J,...Q?[Q]:[],...B.content,...$.format.type==="json_schema"?[nY]:[]],{system:O,inheritedMessages:G}=yield*A4({sessionID:$.sessionID,agent:$.agent,model:$.model,msgs:$.msgs,additions:V}).pipe(Y.provideService(E2.Service,$.llm),Y.provideService(W0.Service,$.registry)),W=(yield*$.config.get()).experimental?.maxMode,K=$.agent.name===Z8.MAX_MODE_AGENT&&W!==void 0&&$.format.type!=="json_schema",y={user:$.lastUser,agent:$.agent,permission:$.session.permission,sessionID:$.sessionID,parentSessionID:$.session.parentID,system:V,prebuiltSystem:O,messages:[...G,...$.isLastStep?[{role:"assistant",content:$.maxStepsText}]:[]],tools:$.tools,model:$.model,toolChoice:$.format.type==="json_schema"?"required":void 0,agentID:$.lastUser.agentID};if(yield*$.cancelledByPlugin)return{kind:"processed",result:"stop",fork:!1};let j=K?Z8.runMaxStep({...y,handle:$.handle,llm:$.llm,candidates:W?.candidates,setStatus:(H)=>$.status.set($.sessionID,H?{type:"busy",message:H}:{type:"busy"})}):$.handle.process(y);return{kind:"processed",result:yield*$.withUserQueryPost(j),fork:!1}});function KQ($){if($.length===0)return;let Z=$[$.length-1];if(Z.role==="assistant")return{role:"assistant",finish:Z.finish==="tool-calls"?"tool-calls":"stop"};if(Z.role==="tool")return{role:"tool"};return{role:"user"}}function v4($,Z,X){return $.compaction.create({sessionID:Z.sessionID,agent:Z.lastUser.agent,model:{providerID:Z.model.providerID,modelID:Z.model.id},auto:!0,...X?{overflow:!0}:{},agentID:Z.lastUser.agentID}).pipe(Y.ignore)}function HQ($,Z){return Y.gen(function*(){yield*$.checkpoint.waitForWriter(Z.sessionID).pipe(Y.ignore);let X=yield*$.checkpoint.lastBoundary(Z.sessionID).pipe(Y.catch(()=>Y.succeed(void 0))),Q=X?Z.msgs.find((J)=>J.info.id===X):void 0;return X?yield*$.checkpoint.insertRebuildBoundary({sessionID:Z.sessionID,boundary:X,lastMessageInfo:KQ(Z.msgs.map((J)=>J.info)),agentID:Z.lastUser.agentID,agent:Z.lastUser.agent,model:{providerID:Z.model.providerID,modelID:Z.model.id},boundaryCreatedAt:Q?.info.time.created}).pipe(Y.catch(()=>Y.succeed(!1))):!1})}var GQ=Y.fn("SessionPrompt.handlePreStepOverflow")(function*($,Z){if(Z.isBoundedComputation||Z.lastFinished.summary===!0)return!1;let X=yield*$.config.get();if(!(U1({cfg:X,tokens:Z.lastFinished.tokens,model:Z.model})||(yield*$.prune.maxThresholdCrossed(Z.sessionID))))return!1;if(Z.lastUser.agentID&&Z.lastUser.agentID!=="main")return yield*v4($,Z,!1),!0;if(yield*$.checkpoint.hasCheckpoint(Z.sessionID).pipe(Y.catch(()=>Y.succeed(!1)))){if(yield*HQ($,Z))return yield*$.prune.resetThresholds(Z.sessionID),!0}return yield*v4($,Z,!1),!0}),jQ=Y.fn("SessionPrompt.handleProviderOverflow")(function*($,Z){if(!Z.isBoundedComputation&&Z.lastUser.agentID&&Z.lastUser.agentID!=="main")return yield*v4($,Z,!0),!0;if(!Z.isBoundedComputation){let X=yield*$.checkpoint.isWriterRunning(Z.sessionID).pipe(Y.catch(()=>Y.succeed(!1))),Q=yield*$.checkpoint.hasCheckpoint(Z.sessionID).pipe(Y.catch(()=>Y.succeed(!1)));if(X||Q){if(yield*HQ($,Z))return yield*$.prune.resetThresholds(Z.sessionID),!0}yield*v4($,Z,!0)}return!0});function OQ($){return(Z)=>Y.gen(function*(){let X=yield*o.filterCompactedEffect($.sessionID,{contextFrom:$.session.contextFrom,contextWatermark:$.session.contextWatermark,agentID:$.agentID}).pipe(Y.catch(()=>Y.succeed([]))),Q=X.findLast((K)=>K.info.role==="assistant"),J=Q&&Q.info.role==="assistant"?Q.info:void 0,B=Q?.parts??[],V=o2.isFailure(Z),O=!!J?.error,G=$.cancellation.cancelled?"cancelled":V||O?"error":"completed",W=$.cancellation.cancelled?$.cancellation.reason:V?V2.pretty(Z.cause):J?h4(J.error):void 0;yield*$.plugin.trigger("session.post",{sessionID:$.sessionID,agentID:$.agentID,task_id:$.task_id,outcome:G,error:W,finalText:J?g4(J,B):void 0,assistantMessageID:J?.id,trajectory:E4(X)},{})}).pipe(Y.ignore)}function FQ($){let Z={cancelled:!1,reason:void 0},X={tokens_in:0,tokens_out:0,files_changed:0},Q=Y.gen(function*(){let V={cancel:void 0,cancelReason:void 0};if(yield*$.plugin.trigger("session.pre",{sessionID:$.sessionID,agentID:$.agentID,task_id:$.task_id},V),!V.cancel)return;return Z.cancelled=!0,Z.reason=V.cancelReason,yield*Y.fail(new x2.Unknown({message:V.cancelReason??"Session cancelled by plugin"}))});return{cancellation:Z,agentMetrics:X,before:Q,publishAgentRequest:(V,O)=>$.bus.publish(I2.AgentRequest,{sessionID:$.sessionID,phase:V,task_type:O,surface:L0.QITQODE_CLIENT,total_tokens_in:X.tokens_in,total_tokens_out:X.tokens_out,files_changed:X.files_changed,validation_status:"skipped"}).pipe(Y.ignore),schedulePrune:(V)=>$.prune.prune({sessionID:$.sessionID,model:V.model,tokens:V.lastFinished.tokens,lastAssistantTime:V.lastFinished.time.completed,promptOps:V.promptOps}).pipe(Y.ignore,Y.forkIn($.scope),Y.asVoid)}}var yQ={input:0,output:0,reasoning:0,cache:{read:0,write:0}};function d4($){return{id:w2.ascending(),sessionID:$.sessionID,role:"assistant",parentID:$.parentID,agentID:$.agentID,mode:$.agent,agent:$.agent,variant:$.variant,path:{cwd:$.cwd,root:$.root},cost:0,tokens:{...yQ,cache:{...yQ.cache}},modelID:$.modelID,providerID:$.providerID,time:{created:$.created??Date.now()}}}var n3=s.create({service:"session.prompt"}),zQ=Y.fn("SessionPrompt.getModel")(function*($,Z,X,Q,J){let B=yield*$.getModel(X,Q).pipe(Y.exit);if(o2.isSuccess(B))return B.value;let V=V2.squash(B.cause);if(y2.ModelNotFoundError.isInstance(V)){let O=V.data.suggestions?.length?` Did you mean: ${V.data.suggestions.join(", ")}?`:"";yield*Z.publish(U2.Error,{sessionID:J,error:new x2.Unknown({message:`Model not found: ${V.data.providerID}/${V.data.modelID}.${O}`}).toObject()})}return yield*Y.failCause(B.cause)}),DQ=zQ,l4=Y.fn("SessionPrompt.getModel")(function*($,Z,X){let Q=yield*y2.Service,J=yield*p.Service;return yield*zQ(Q,J,$,Z,X)}),qQ=Y.fnUntraced(function*($,Z,X){if(X!==void 0){let B=yield*$.messages({sessionID:Z,agentID:X}),V=B.findLast((O)=>O.info.role==="assistant");if(V)return V;if(B.length>0)return B[B.length-1]}let Q=yield*$.findMessage(Z,(B)=>B.info.role!=="user",{agentID:"*"});if(Y0.isSome(Q))return Q.value;let J=yield*$.messages({sessionID:Z,limit:1,agentID:"*"});if(J.length>0)return J[0];throw Error("Impossible")}),PQ=qQ,s3=Y.fnUntraced(function*($,Z){let X=yield*f2;return yield*qQ(X,$,Z)}),o9=Y.fn("SessionPrompt.handleSubtask")(function*($){let{task:Z,model:X,lastUser:Q,sessionID:J,session:B,msgs:V,getOps:O}=$,G=yield*d.context,W=yield*p.Service,K=yield*W0.Service,y=yield*f2,j=yield*g2.Service,q=yield*H2.Service,H=yield*z2.Service,z=yield*O(),{actor:L}=yield*K.named(),b=Z.model?yield*l4(Z.model.providerID,Z.model.modelID,J):X,D=yield*y.updateMessage(d4({sessionID:J,parentID:Q.id,agentID:Q.agentID,agent:Z.agent,variant:Q.model.variant,cwd:G.directory,root:G.worktree,modelID:b.id,providerID:b.providerID})),U={operation:{action:"run",prompt:Z.prompt,description:Z.description,subagent_type:Z.agent,command:Z.command}},F=yield*y.updatePart({id:Q2.ascending(),messageID:D.id,sessionID:D.sessionID,type:"tool",callID:t1(),tool:m4.id,state:{status:"running",input:U,time:{start:Date.now()}}});yield*q.trigger("tool.execute.before",{tool:m4.id,sessionID:J,callID:F.id},{args:U});let I=yield*d$(j,W,Z.agent,J),C,S=new AbortController,E=yield*L.execute(U,{agent:Z.agent,messageID:D.id,sessionID:J,abort:S.signal,callID:F.callID,extra:{bypassAgentCheck:!0,promptOps:z},messages:V,metadata:(T)=>Y.gen(function*(){F=yield*y.updatePart({...F,type:"tool",state:{...F.state,...T}})}),ask:(T)=>H.ask({...T,sessionID:J,ruleset:z2.merge(I.permission,B.permission??[])}).pipe(Y.orDie)}).pipe(Y.catchCause((T)=>{let N=V2.squash(T);return C=N instanceof Error?N:Error(String(N)),n3.error("subtask execution failed",{error:C,agent:Z.agent,description:Z.description}),Y.void}),Y.onInterrupt(()=>Y.gen(function*(){if(S.abort(),D.finish="tool-calls",D.time.completed=Date.now(),yield*y.updateMessage(D),F.state.status==="running")yield*y.updatePart({...F,state:{status:"error",error:"Cancelled",time:{start:F.state.time.start,end:Date.now()},metadata:F.state.metadata,input:F.state.input}})}))),x=E?.attachments?.map((T)=>({...T,id:Q2.ascending(),sessionID:J,messageID:D.id}));if(yield*q.trigger("tool.execute.after",{tool:m4.id,sessionID:J,callID:F.id,args:U},E),D.finish="tool-calls",D.time.completed=Date.now(),yield*y.updateMessage(D),E&&F.state.status==="running")yield*y.updatePart({...F,state:{status:"completed",input:F.state.input,title:E.title,metadata:E.metadata,output:E.output,attachments:x,time:{...F.state.time,end:Date.now()}}});if(!E)yield*y.updatePart({...F,state:{status:"error",error:C?`Tool execution failed: ${C.message}`:"Tool execution failed",time:{start:F.state.status==="running"?F.state.time.start:Date.now(),end:Date.now()},metadata:F.state.status==="pending"?void 0:F.state.metadata,input:F.state.input}});if(!Z.command)return;let k={id:w2.ascending(),sessionID:J,role:"user",agentID:Q.agentID,time:{created:Date.now()},agent:Q.agent,model:Q.model};yield*y.updateMessage(k),yield*y.updatePart({id:Q2.ascending(),messageID:k.id,sessionID:J,type:"text",text:"Summarize the actor tool output above and continue with your task.",synthetic:!0})});var j1={};b2(j1,{decide:()=>r3,TaskGate:()=>j1,MAX_TASK_GATE_SUBAGENT_REACT:()=>p9,MAX_TASK_GATE_MAIN_REACT:()=>i9});var p9=2,i9=3,a3=($,Z)=>{let X=Z==="subagent"?"You are about to finish, but these tasks you own are still unfinished:":"You are about to finish, but these tasks in this session are still unfinished:",Q=Z==="subagent"?"Then re-emit your final message starting with the **Status**/**Summary** header.":"Then continue or respond.";return["<system-reminder>",X,...$.map((J)=>`- ${J.id} (${J.status}): ${J.summary}`),"For EACH: complete the work then `task done <id> <summary>`, or `task abandon <id> <reason>` if it is genuinely not needed.",Q,"</system-reminder>"].join(`
407
- `)},r3=Y.fn("TaskGate.decide")(function*($){let Q=(yield*(yield*M0.Service).list({session_id:$.session_id,owner:$.owner,include_terminal:!1}).pipe(Y.orElseSucceed(()=>[]))).filter((J)=>J.status==="open"||J.status==="in_progress");if(Q.length===0)return{needReentry:!1,capExceeded:!1,incompleteTasks:[]};if($.reactCount>=$.maxReact)return{needReentry:!1,capExceeded:!0,incompleteTasks:Q.map((J)=>J.id)};return{needReentry:!0,capExceeded:!1,reentryText:a3(Q,$.mode),incompleteTasks:Q.map((J)=>J.id)}});function NQ($){return Y.fn("SessionPrompt.taskGate")(function*(Z){if(($.agentID??"main")!=="main")return!1;let X=yield*$.agents.get("main").pipe(Y.orElseSucceed(()=>{return}));if(X&&z2.disabled(["task"],X.permission).has("task"))return!1;if(Z.tools?.task===!1)return!1;let Q=yield*$.taskGateState.get($.sessionID),J=yield*j1.decide({session_id:$.sessionID,owner:void 0,reactCount:Q,maxReact:i9,mode:"main"}).pipe(Y.provideService(M0.Service,$.taskRegistry));if(!J.needReentry){if(J.capExceeded)yield*$.slog.warn("task gate hit cap; allowing stop",{sessionID:$.sessionID,incompleteTasks:J.incompleteTasks});return yield*$.taskGateState.clear($.sessionID),!1}return yield*$.taskGateState.bump($.sessionID),yield*$.appendSyntheticUserTurn({lastUser:Z,sessionID:$.sessionID,text:J.reentryText}),!0})}var t3=12;function wQ($){return Y.fn("SessionPrompt.goalGate")(function*(Z){if(($.agentID??"main")!=="main")return!1;let X=yield*$.goal.get($.sessionID);if(!X)return!1;let Q=yield*o.filterCompactedEffect($.sessionID,{contextFrom:$.session.contextFrom,contextWatermark:$.session.contextWatermark,agentID:"main"}),J=Q.findLast((G)=>G.info.role==="assistant")?.info.id,B=yield*$.goal.evaluate({condition:X.condition,msgs:Q,model:Z.model}).pipe(Y.catchCause((G)=>Y.gen(function*(){if(V2.hasInterruptsOnly(G))return yield*Y.failCause(G);return yield*$.slog.warn("goal judge failed; allowing stop",{error:V2.pretty(G)}),{ok:!0,reason:"judge error",judgeFailed:!0}}))),V=0;switch(yield*$.goal.commitVerdict({sessionID:$.sessionID,expectedGeneration:X.generation,verdict:{...B,judgeFailed:"judgeFailed"in B?!0:void 0},judgedMessageID:J,maxReact:t3,reenter:(G,W)=>Y.gen(function*(){V=W,yield*$.appendSyntheticUserTurn({lastUser:Z,sessionID:$.sessionID,text:["<system-reminder>",`Your goal is not yet satisfied: "${G.condition}".`,"A judge reviewed the transcript and reported what is still missing:",B.reason,"Keep working toward the goal. Do not stop until it is genuinely met or impossible.","</system-reminder>"].join(`
408
- `)})})})){case"stale":return yield*$.slog.info("goal changed during judge evaluation; discarding verdict",{sessionID:$.sessionID}),!1;case"satisfied":return yield*$.slog.info("goal satisfied; allowing stop",{sessionID:$.sessionID,impossible:B.impossible===!0}),!1;case"capped":return yield*$.slog.warn("goal hit MAX_GOAL_REACT cap; allowing stop",{sessionID:$.sessionID,condition:X.condition}),!1;case"reentered":return yield*$.slog.info("goal not satisfied; re-entering",{sessionID:$.sessionID,attempt:V,reason:B.reason.slice(0,300)}),!0}})}import e3 from"path";var $H=s.create({service:"session.prompt.context"});function LQ($){return Y.fn("SessionPrompt.ensureTitle")(function*(Z){if(Z.session.parentID)return;if(!UQ(Z.session.title))return;let X=(z)=>z.info.role==="user"&&!z.parts.every((L)=>("synthetic"in L)&&L.synthetic),Q=Z.history.findIndex(X);if(Q===-1||Z.history.filter(X).length!==1)return;let J=Z.history.slice(0,Q+1),B=J[Q];if(!B||B.info.role!=="user")return;let V=B.info,O=B.parts.filter((z)=>z.type==="subtask"),G=O.length>0&&B.parts.every((z)=>z.type==="subtask");if(Z.providerID==="qlex"){let z=G?O.map((L)=>L.prompt).join(`
409
- `):B.parts.map((L)=>{let b=L;return b.type==="text"&&!b.synthetic?String(b.text??""):""}).filter(Boolean).join(`
410
- `).slice(0,4000);if(z){let L=yield*Y.promise(()=>$0.resolveChatCompletion(`Generate a very short title (5 words or fewer) for this conversation. Reply with ONLY the title, no quotes or punctuation:
411
-
412
- ${z}`,{temperature:0.5,timeoutMs:1e4}).catch((b)=>{return $H.warn("chatCompletion title generation failed; falling through to llm.stream path",{error:b instanceof Error?b.message:String(b)}),null}));if(L?.content){let b=g8(L.content);if(b){let D=b.length>100?b.substring(0,97)+"...":b;yield*$.sessions.setTitle({sessionID:Z.session.id,title:D}).pipe(Y.catchCause((U)=>$.elog.error("failed to generate title",{error:V2.squash(U)})));return}}}}let W=yield*$.agents.get("title");if(!W)return;let K=W.modelRef?yield*$.provider.resolveModelRef(W.modelRef,Z.providerID):W.model?yield*$.provider.getModel(W.model.providerID,W.model.modelID):(yield*$.provider.getSmallModel(Z.providerID))??(yield*$.provider.getModel(Z.providerID,Z.modelID)),y=G?[{role:"user",content:O.map((z)=>z.prompt).join(`
413
- `)}]:yield*o.toModelMessagesEffect(J,K),j=yield*$.llm.stream({agent:W,user:V,system:[],small:!0,tools:{},model:K,sessionID:Z.session.id,retries:2,messages:[{role:"user",content:`Generate a title for this conversation:
414
- `},...y]}).pipe(u4((z)=>z.type==="text-delta"),c4((z)=>z.text),o4,Y.orDie),q=g8(j);if(!q)return;let H=q.length>100?q.substring(0,97)+"...":q;yield*$.sessions.setTitle({sessionID:Z.session.id,title:H}).pipe(Y.catchCause((z)=>$.elog.error("failed to generate title",{error:V2.squash(z)})))})}function bQ($){return Y.fn("SessionPrompt.insertReminders")(function*(Z){let X=Z.messages.findLast((G)=>G.info.role==="user");if(!X)return Z.messages;let Q=Z.messages.find((G)=>G.info.role==="user"&&G.info.agent==="compose");if(Q){let G=xQ();Q.parts.unshift({id:Q2.ascending(),messageID:Q.info.id,sessionID:Q.info.sessionID,type:"text",text:n9({source:"mode",trust:"local-policy",posture:"workflow-compose",body:$.promptCompose+(G?`
415
-
416
- `+G:"")}),synthetic:!0})}let J=Z.messages.findLast((G)=>G.info.role==="assistant");if(Z.agent.name!=="plan"&&J?.info.agent==="plan"){let G=s9(Z.session);if(!(yield*$.fsys.existsSafe(G)))return Z.messages;let W=yield*$.sessions.updatePart({id:Q2.ascending(),messageID:X.info.id,sessionID:X.info.sessionID,type:"text",text:`${$.buildSwitch}
417
-
418
- A plan file exists at ${G}. You should execute on the plan defined within it`,synthetic:!0});return X.parts.push(W),Z.messages}if(Z.agent.name!=="plan"||J?.info.agent==="plan")return Z.messages;let B=s9(Z.session),V=yield*$.fsys.existsSafe(B);if(!V)yield*$.fsys.ensureDir(e3.dirname(B)).pipe(Y.catch(Y.die));let O=yield*$.sessions.updatePart({id:Q2.ascending(),messageID:X.info.id,sessionID:X.info.sessionID,type:"text",text:n9({source:"mode",trust:"local-policy",posture:"read-only-plan",envelope:"system-reminder",body:`
419
- Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supersedes any other instructions you have received.
420
-
421
- ## Plan File Info:
422
- ${V?`A plan file already exists at ${B}. You can read it and make incremental edits using the edit tool.`:`No plan file exists yet. You should create your plan at ${B} using the write tool.`}
423
- You should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.
424
-
425
- ## Plan Workflow
426
-
427
- ### Phase 1: Initial Understanding
428
- Goal: Gain a comprehensive understanding of the user's request by reading through code and asking them questions. Critical: In this phase you should only use the explore subagent type.
429
-
430
- 1. Focus on understanding the user's request and the code associated with their request
431
-
432
- 2. **Launch up to 3 explore agents IN PARALLEL** (single message, multiple tool calls) to efficiently explore the codebase.
433
- - Use 1 agent when the task is isolated to known files, the user provided specific file paths, or you're making a small targeted change.
434
- - Use multiple agents when: the scope is uncertain, multiple areas of the codebase are involved, or you need to understand existing patterns before planning.
435
- - Quality over quantity - 3 agents maximum, but you should try to use the minimum number of agents necessary (usually just 1)
436
- - If using multiple agents: Provide each agent with a specific search focus or area to explore. Example: One agent searches for existing implementations, another explores related components, a third investigates testing patterns
437
-
438
- 3. After exploring the code, use the question tool to clarify ambiguities in the user request up front.
439
-
440
- ### Phase 2: Design
441
- Goal: Design an implementation approach.
442
-
443
- Launch general agent(s) to design the implementation based on the user's intent and your exploration results from Phase 1.
444
-
445
- You can launch up to 1 agent(s) in parallel.
446
-
447
- **Guidelines:**
448
- - **Default**: Launch at least 1 Plan agent for most tasks - it helps validate your understanding and consider alternatives
449
- - **Skip agents**: Only for truly trivial tasks (typo fixes, single-line changes, simple renames)
450
-
451
- Examples of when to use multiple agents:
452
- - The task touches multiple parts of the codebase
453
- - It's a large refactor or architectural change
454
- - There are many edge cases to consider
455
- - You'd benefit from exploring different approaches
456
-
457
- Example perspectives by task type:
458
- - New feature: simplicity vs performance vs maintainability
459
- - Bug fix: root cause vs workaround vs prevention
460
- - Refactoring: minimal change vs clean architecture
461
-
462
- In the agent prompt:
463
- - Provide comprehensive background context from Phase 1 exploration including filenames and code path traces
464
- - Describe requirements and constraints
465
- - Request a detailed implementation plan
466
-
467
- ### Phase 3: Review
468
- Goal: Review the plan(s) from Phase 2 and ensure alignment with the user's intentions.
469
- 1. Read the critical files identified by agents to deepen your understanding
470
- 2. Ensure that the plans align with the user's original request
471
- 3. Use question tool to clarify any remaining questions with the user
472
-
473
- ### Phase 4: Final Plan
474
- Goal: Write your final plan to the plan file (the only file you can edit).
475
- - Include only your recommended approach, not all alternatives
476
- - Ensure that the plan file is concise enough to scan quickly, but detailed enough to execute effectively
477
- - Include the paths of critical files to be modified
478
- - Include a verification section describing how to test the changes end-to-end (run the code, use MCP tools, run tests)
479
-
480
- ### Phase 5: Call plan_exit tool
481
- At the very end of your turn, once you have asked the user questions and are happy with your final plan file - you should always call plan_exit to indicate to the user that you are done planning.
482
- This is critical - your turn should only end with either asking the user a question or calling plan_exit. Do not stop unless it's for these 2 reasons.
483
-
484
- **Important:** Use question tool to clarify requirements/approach, use plan_exit to request plan approval. Do NOT use question tool to ask "Is this plan okay?" - that's what plan_exit does.
485
-
486
- NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.
487
- `.trim()}),synthetic:!0});return X.parts.push(O),Z.messages})}var AQ=5,p4=3,a9=2;function MQ($){return $.trim().toLowerCase().replace(/\s+/g," ").replace(/^(let me |i'll |i will |let's )/i,"").slice(0,200)}function _Q($,Z){if(Z<=0||$.length<Z)return!1;let X=$.slice(-Z);return X.every((Q)=>Q===X[0])}var RQ=`<system-reminder>
488
- LOOP DETECTED: Your last several outputs were identical. You are stuck in a repetitive pattern.
489
-
490
- STOP what you are doing and take a DIFFERENT approach:
491
- - If you were about to call a tool, try a different tool or different arguments
492
- - If you were planning an action, reconsider and pick an alternative strategy
493
- - If you are blocked, explain what's blocking you and ask the user for help
494
-
495
- Do NOT repeat the same text or action again.
496
- </system-reminder>`,CQ=`<system-reminder>
497
- CRITICAL: You are STILL stuck in a loop after a previous recovery attempt.
498
-
499
- Your previous approach has failed repeatedly. You MUST:
500
- 1. Abandon your current plan entirely
501
- 2. State what you were trying to do and why it failed
502
- 3. Ask the user for guidance on how to proceed
503
-
504
- If you repeat the same output again, the session will be terminated.
505
- </system-reminder>`;var r9=($)=>Y.fnUntraced(function*(Z){let X=yield*$.updateMessage({id:w2.ascending(),role:"user",sessionID:Z.sessionID,agentID:Z.lastUser.agentID,agent:Z.lastUser.agent,model:Z.lastUser.model,tools:Z.lastUser.tools,format:Z.lastUser.format,outputBudgetRecoveryTokens:Z.outputBudgetRecoveryTokens,time:{created:Date.now()}});return yield*$.updatePart({id:Q2.ascending(),messageID:X.id,sessionID:X.sessionID,type:"text",synthetic:!0,text:Z.text}),X});function IQ(){return["<system-reminder>","The previous assistant response hit the model output token limit before completing.","Continue the same task from the exact point where it stopped.","Do not restart, recap, or repeat prior reasoning. Keep reasoning concise, prefer concrete tool calls or final output, and only stop when the user's task is complete or genuinely blocked.","</system-reminder>"].join(`
506
- `)}function SQ(){return["<system-reminder>","Your previous response contained no usable answer (it had only reasoning, or was empty).","Provide a final answer to the user now, or call a valid tool to make progress on the task.","Do not respond with only reasoning/thinking.","</system-reminder>"].join(`
507
- `)}function kQ(){return["<system-reminder>","Your previous response did not produce valid structured output via the StructuredOutput tool","(it was plain text, empty, or only reasoning).","You MUST call the StructuredOutput tool now, passing JSON that matches the requested schema.","Do not reply with plain text and do not respond with only reasoning/thinking.","</system-reminder>"].join(`
508
- `)}function TQ($){return $===0?T5:b7}function hQ($){return $===0?RQ:CQ}var ZH=L0.QITQODE_OUTPUT_LENGTH_CONTINUATION_LIMIT,XH=L0.QITQODE_INVALID_OUTPUT_CONTINUATION_LIMIT,YH=1;function gQ($){let Z=0,X=0,Q=0,J=0,B=0,V=Y.fnUntraced(function*(H){yield*$.sessions.updateMessage(H),yield*$.bus.publish(U2.Error,{sessionID:H.sessionID,error:H.error})}),O=Y.fn("SessionPrompt.autoContinueOutputLength")(function*(H){if(H.assistant.finish!=="length"||H.assistant.error||H.assistant.summary)return!1;if(o.parts(H.assistant.id).some((z)=>z.type==="tool"&&!z.metadata?.providerExecuted))return!1;if(Z>=ZH)return H.assistant.error=new o.OutputLengthError({}).toObject(),yield*V(H.assistant),!1;return Z++,yield*$.slog.info("auto-continuing output length",{attempt:Z}),yield*$.appendSyntheticUserTurn({lastUser:H.lastUser,sessionID:H.lastUser.sessionID,text:IQ()}),!0}),G=Y.fn("SessionPrompt.autoContinueInvalidOutput")(function*(H){if(H.assistant.error||H.assistant.summary||H.assistant.structured!==void 0)return!1;if(X>=XH)return H.assistant.error=new o.InvalidOutputError({message:H.reason}).toObject(),yield*V(H.assistant),!1;return X++,yield*$.slog.info("auto-continuing invalid output",{attempt:X,reason:H.reason}),yield*$.appendSyntheticUserTurn({lastUser:H.lastUser,sessionID:H.lastUser.sessionID,text:SQ()}),!0}),W=Y.fn("SessionPrompt.autoRecoverOutputBudget")(function*(H){let z=H.assistant.error;if(!z||!o.APIError.isInstance(z))return!1;if(z.data.category!=="output_budget_exhausted"&&z.data.category!=="empty_output")return!1;if(!z.data.outputBudgetRecoveryAvailable||!z.data.outputBudgetRecoveryTokens||B>=YH)return!1;return B++,yield*$.slog.info("retrying output-budget-starved turn with headroom",{attempt:B}),yield*$.appendSyntheticUserTurn({lastUser:H.lastUser,sessionID:H.lastUser.sessionID,outputBudgetRecoveryTokens:z.data.outputBudgetRecoveryTokens,text:z.data.category==="empty_output"?"The previous attempt produced no visible answer. Please answer the original request directly with visible text.":"The previous attempt ran out of output room. Please answer the original request directly and concisely."}),!0}),K=Y.fn("SessionPrompt.autoRetryStructuredOutput")(function*(H){if(H.assistant.error||H.assistant.summary||H.assistant.structured!==void 0)return!1;let z=H.lastUser.format?.type==="json_schema"?H.lastUser.format.retryCount:0;if(Q>=z)return H.assistant.error=new o.StructuredOutputError({message:"Model did not produce structured output",retries:Q}).toObject(),yield*V(H.assistant),!1;return Q++,yield*$.slog.info("retrying structured output",{attempt:Q}),yield*$.appendSyntheticUserTurn({lastUser:H.lastUser,sessionID:H.lastUser.sessionID,text:kQ()}),!0}),y=Y.fn("SessionPrompt.handleTextRepeat")(function*(H){if(J>=w7)return yield*$.slog.info("text n-gram: max recovery exceeded, terminating"),yield*$.bus.publish(U2.Error,{sessionID:$.sessionID,error:new x2.Unknown({message:"The model produced malformed output and couldn't recover. Please try again or switch to a stronger tier."}).toObject()}),!1;return yield*$.appendSyntheticUserTurn({lastUser:H.lastUser,sessionID:$.sessionID,text:TQ(J)}),J++,yield*$.slog.info("text n-gram: recovery injected",{attempt:J}),!0}),j=Y.fn("SessionPrompt.writeContentFilterError")(function*(H){if(H.assistant.error)return;H.assistant.error=new o.ContentFilterError({message:"The response was withheld by the model provider's content safety filter."}).toObject(),yield*V(H.assistant)}),q=Y.fn("SessionPrompt.writeModelError")(function*(H){if(H.assistant.error)return;H.assistant.error=new o.ModelError({message:H.reason}).toObject(),yield*V(H.assistant)});return{autoContinueOutputLength:O,autoRecoverOutputBudget:W,autoContinueInvalidOutput:G,autoRetryStructuredOutput:K,handleTextRepeat:y,writeContentFilterError:j,writeModelError:q}}function EQ($){let Z=[],X=0;return{check:Y.fnUntraced(function*(J){let B=J.completedParts.filter((K)=>K.type==="text"&&!K.synthetic).map((K)=>K.text).join(" ");if(!B.trim())return"none";let V=J.completedParts.filter((K)=>K.type==="tool").map((K)=>`${K.tool}:${JSON.stringify(K.state&&"input"in K.state?K.state.input:"")}`).join("|"),O=MQ(B)+(V?`\x00${V}`:"");if(Z.push(O),Z.length>AQ)Z.shift();if(Z.length<p4)return"none";if(!_Q(Z,p4))return"none";if(X>=a9)return yield*$.slog.info("text loop: max recovery exceeded, terminating"),yield*$.bus.publish(U2.Error,{sessionID:$.sessionID,error:new x2.Unknown({message:`Text loop detected: model repeated the same output ${p4} times after ${a9} recovery attempts. Session terminated.`}).toObject()}),"terminate";let W=hQ(X);return yield*$.appendSyntheticUserTurn({lastUser:J.lastUser,sessionID:$.sessionID,text:W}),X++,Z.length=0,yield*$.slog.info("text loop: recovery injected",{attempt:X}),"recovered"})}}import QH from"path";function E8($){let Z=t9($,"task")==="shell"?"- task list":'- task({ operation: "list" })',X=t9($,"actor")==="shell"?"- actor status <actor_id>":'- actor({ operation: "status", actor_id: "<id>" })';return['- memory({ operation: "search", query: "<keyword>" })',Z,X]}function X8($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return"["+$.map(X8).join(",")+"]";return"{"+Object.keys($).sort().map((X)=>JSON.stringify(X)+":"+X8($[X])).join(",")+"}"}function f8($){let Z=[];for(let X of $)if(X.type==="tool")Z.push("tool:"+X.tool+":"+X8(X.state.input??{}));if(Z.length===0)return;return Z.join(`
509
- `)}var e9=3,fQ=Y.fnUntraced(function*($){let Z=$.msgs.findLast((B)=>B.info.role==="user");if(!Z)return;if(!(yield*$.checkpoint.hasMemoryOrTasks($.sessionID).pipe(Y.catch(()=>Y.succeed(!1)))))return;let Q=QH.join(P$.Path.data,"memory","sessions",$.sessionID),J=E8((yield*$.config.get()).tool);Z.parts.push({id:Q2.ascending(),messageID:Z.info.id,sessionID:$.sessionID,type:"text",synthetic:!0,text:["<system-reminder>",`This session has memory at ${Q}/. Recall content`,"not in your context with:",J[0],`- Read(file_path="${Q}/...")`,J[1],J[2],"","Don't ask the user about something memory may already record.","</system-reminder>"].join(`
510
- `)})}),vQ=Y.fnUntraced(function*($){let{lastFinished:Z,model:X}=$;if(!Z||Z.summary===!0||!X)return;let Q=yield*$.config.get(),J=A6({cfg:Q,tokens:Z.tokens,model:X});if(J<2)return;let B=$.msgs.findLast((V)=>V.info.role==="user");if(!B||B.parts.some((V)=>V.type==="text"&&V.text?.includes("Context is filling up")))return;B.parts.push({id:Q2.ascending(),messageID:B.info.id,sessionID:$.sessionID,type:"text",synthetic:!0,text:["<system-reminder>",`Context is filling up (${J>=3?">85%":">70%"}).`,"If you have important learnings or decisions from this session,","consider writing them to memory now before context may be reset.","</system-reminder>"].join(`
511
- `)})});function dQ($){if(!$.lastFinished)return;let Z=[];for(let J=$.msgs.length-1;J>=0&&Z.length<e9;J--){let B=$.msgs[J];if(B.info.role!=="assistant"||!B.info.finish)continue;let V=f8(B.parts);if(V===void 0)break;Z.push(V)}if(!(Z.length===e9&&Z.every((J)=>J===Z[0])))return;let Q=$.msgs.findLast((J)=>J.info.role==="user");if(!Q||Q.parts.some((J)=>J.type==="text"&&J.text?.includes("repeating the same action")))return;Q.parts.push({id:Q2.ascending(),messageID:Q.info.id,sessionID:$.sessionID,type:"text",synthetic:!0,text:["<system-reminder>",`Your last ${e9} steps have been identical \u2014 you appear to be`,"repeating the same action without making progress. Stop and reconsider:","the current approach is not working. Try a different strategy, use a","different tool, or if you are blocked, explain the blocker to the user","instead of repeating the same step again.","</system-reminder>"].join(`
512
- `)})}var $Z=s.create({service:"auto-dream"}),ZZ=86400000,JH=7,BH=30,oQ=1e4,XZ="Auto Dream",YZ="Auto Distill",mQ=0,lQ=0,pQ=["Run one automatic dream memory consolidation pass for the current project.","","Use the memory files as the working index and the raw qitqode trajectory database as the source of truth.","Use bash for read-only SQLite and filesystem inspection. Do not modify the database.","Consolidate only durable, verified information into project memory."].join(`
513
- `),iQ=["Run one automatic distill pass for the current project.","","Review the past month of sessions and identify repeated manual workflows worth packaging.","Use the raw qitqode trajectory database as the source of truth and memory files to spot cross-session patterns.","Inventory existing skills, agents, and commands first so you reuse or extend instead of duplicating.","Use bash for read-only SQLite and filesystem inspection. Do not modify the database.","Produce a compact shortlist, then create only the high-confidence missing assets."].join(`
514
- `);function nQ($){return Y.gen(function*(){if(!$.enabled)return!1;let Z=$.intervalDays*ZZ,X=yield*Y.sync(()=>r2.use((B)=>B.select({time_created:S0.time_created}).from(S0).where(G0(S0.title,$.title)).orderBy(v8(S0.time_created)).limit(1).get())),Q=Date.now(),J=X?Q-X.time_created:1/0;if(!X){let B=yield*Y.sync(()=>r2.use((V)=>V.select({time_created:S0.time_created}).from(S0).where(cQ(S0.parent_id)).orderBy(uQ(S0.time_created)).limit(1).get()));if(!B||Q-B.time_created<Z)return $Z.info(`auto-${$.label} skipped \u2014 project too young`,{projectAge:B?Math.round((Q-B.time_created)/ZZ)+"d":"empty",interval:$.intervalDays+"d"}),!1}if(J<Z)return $Z.info(`auto-${$.label} skipped \u2014 last run too recent`,{lastRunAgo:Math.round(J/ZZ)+"d",interval:$.intervalDays+"d"}),!1;return $Z.info(`auto-${$.label} triggering`,{lastRun:X?new Date(X.time_created).toISOString():"never",interval:$.intervalDays+"d"}),!0})}function sQ($){let Z=$.dream?.auto!==!1;if(!Z)return Y.succeed(!1);let X=Date.now();if(X-mQ<oQ)return Y.succeed(!1);mQ=X;let Q=$.dream?.interval_days??JH;return nQ({enabled:Z,intervalDays:Q,title:XZ,label:"dream"})}function aQ($){let Z=$.distill?.auto!==!1;if(!Z)return Y.succeed(!1);let X=Date.now();if(X-lQ<oQ)return Y.succeed(!1);lQ=X;let Q=$.distill?.interval_days??BH;return nQ({enabled:Z,intervalDays:Q,title:YZ,label:"distill"})}var rQ=Y.fnUntraced(function*($){let Z=yield*$.config.get(),X=yield*sQ(Z).pipe(Y.catch(()=>Y.succeed(!1))),Q=yield*aQ(Z).pipe(Y.catch(()=>Y.succeed(!1))),J={providerID:$.lastUser.model.providerID,modelID:$.lastUser.model.modelID};if(!X&&!Q)return;let{AppRuntime:B}=yield*Y.promise(()=>import("./chunk-dncnyzaa.js"));if(X)B.runPromise(f2.use((V)=>Y.gen(function*(){let O=yield*V.create({title:XZ});yield*(yield*$.promptServiceTag).prompt({sessionID:O.id,agent:"dream",model:J,parts:[{type:"text",text:pQ}]})}))).catch((V)=>$.log.error("auto-dream prompt failed",{error:String(V)}));if(Q)B.runPromise(f2.use((V)=>Y.gen(function*(){let O=yield*V.create({title:YZ});yield*(yield*$.promptServiceTag).prompt({sessionID:O.id,agent:"distill",model:J,parts:[{type:"text",text:iQ}]})}))).catch((V)=>$.log.error("auto-distill prompt failed",{error:String(V)}))});var WH=($)=>$.pipe(Y.catchDefect((Z)=>Z instanceof $0.BackendAuthRejectedError?Y.succeed(void 0):Y.die(Z))),QZ=($)=>WH(Y.promise(()=>$0.resolvePrompt($))).pipe(Y.map((Z)=>Z??"")),tQ=Y.gen(function*(){let $=yield*QZ("session/build-switch"),Z=yield*QZ("session/max-steps"),X=yield*QZ("session/compose");return{buildSwitch:$,maxSteps:Z,promptCompose:X}});var eQ=f0.create({service:"session.prompt"}),KH=s.create({service:"session.prompt"});function $J($,Z,X,Q){return Y.gen(function*(){let{bus:J,status:B,sessions:V,agents:O,provider:G,processor:W,prune:K,checkpoint:y,compaction:j,config:q,plugin:H,permission:z,fsys:L,registry:b,scope:D,instruction:U,state:F,goal:I,taskGateState:C,taskRegistry:S,revert:E,summary:x,sys:k,llm:T,actorRegistry:N,inbox:A}=yield*T4,_=yield*tQ,R=_.buildSwitch,g=_.maxSteps,l=_.promptCompose,m=(t,N2,j2)=>DQ(G,J,t,N2,j2),h=(t,N2)=>PQ(V,t,N2),f=r9(V),v=1024,e=new class extends Set{add(t){if(super.add(t),this.size>1024){let N2=this.values().next().value;if(N2!==void 0)this.delete(N2)}return this}},n=(t)=>o9({getOps:$,...t}),a=LQ({agents:O,provider:G,llm:T,sessions:V,elog:eQ}),G2=bQ({sessions:V,fsys:L,buildSwitch:R,promptCompose:l});return{runLoop:Y.fn("SessionPrompt.run")(function*(t,N2,j2){let T0=yield*d.context,C2=eQ.with({sessionID:t}),Y2,P2=0,L2=yield*V.get(t),t2,w0,F0=N2??"main",i0=FQ({sessionID:t,agentID:F0,task_id:j2,plugin:H,bus:J,prune:K,scope:D}),{cancellation:h0,agentMetrics:M$,publishAgentRequest:n0,schedulePrune:s0}=i0,P1=OQ({sessionID:t,agentID:F0,task_id:j2,session:L2,cancellation:h0,plugin:H});return yield*Y.gen(function*(){yield*i0.before;let a0=(e2,X2)=>E4(eY(e2,X2,o.parts(X2.id))),s$=!1,H8=EQ({sessionID:t,bus:J,appendSyntheticUserTurn:f,slog:C2}),g0=gQ({sessionID:t,sessions:V,bus:J,appendSyntheticUserTurn:f,slog:C2}),{autoContinueOutputLength:G8,autoRecoverOutputBudget:RZ,autoContinueInvalidOutput:CZ,autoRetryStructuredOutput:nB,handleTextRepeat:sB,writeContentFilterError:IZ,writeModelError:SZ}=g0,kZ=NQ({sessionID:t,agentID:N2,agents:O,taskGateState:C,taskRegistry:S,appendSyntheticUserTurn:f,slog:C2}),TZ=wQ({sessionID:t,agentID:N2,session:L2,goal:I,bus:J,appendSyntheticUserTurn:f,slog:C2});while(!0){if(!N2||N2==="main")yield*B.set(t,{type:"busy"});yield*A.drain(t,N2??"main").pipe(Y.ignore),yield*C2.info("loop",{step:P2});let e2=yield*o.filterCompactedEffect(t,{contextFrom:L2.contextFrom,contextWatermark:L2.contextWatermark,agentID:N2??"main"}),X2,gZ,E0,O7,x0,EZ=[];for(let K2=e2.length-1;K2>=0;K2--){let K0=e2[K2];if(!X2&&K0.info.role==="user")X2=K0.info,gZ=K0;if(!E0&&K0.info.role==="assistant")E0=K0.info,O7=K0;if(!x0&&K0.info.role==="assistant"&&K0.info.finish)x0=K0.info;if(X2&&x0)break;if(!x0){let Z6=K0.parts.filter((a$)=>a$.type==="subtask");EZ.push(...Z6)}}if(!X2)throw Error("No user message found in stream. This should never happen.");yield*fQ({sessionID:t,msgs:e2,checkpoint:y,config:q});let tB=O7?.parts.some((K2)=>K2.type==="tool"&&!K2.metadata?.providerExecuted)??!1;if(E0?.finish==="length"&&!tB&&X2.id<E0.id&&(yield*G8({lastUser:X2,assistant:E0})))continue;if(E0){if(yield*RZ({lastUser:X2,assistant:E0}))continue;let K2=m9({phase:"existing-assistant",lastUser:X2,assistant:E0,parts:O7?.parts??[]});if(K2.type==="filtered"){yield*IZ({assistant:E0}),yield*C2.info("exiting loop",{classification:K2.type});break}if(K2.type==="failed"){yield*SZ({assistant:E0,reason:K2.reason}),yield*C2.info("exiting loop",{classification:K2.type,reason:K2.reason});break}if(K2.type==="think-only"||K2.type==="invalid"){let K0=K2.type==="invalid"?K2.reason:"think-only";if(yield*CZ({lastUser:X2,assistant:E0,reason:K0}))continue;yield*C2.info("exiting loop",{classification:K2.type});break}if(K2.type==="final"&&K2.degraded)yield*C2.warn("degraded final on abnormal finish",{finish:E0.finish});if(K2.type!=="continue"){if(yield*kZ(X2))continue;if(yield*TZ(X2))continue;yield*C2.info("exiting loop",{classification:K2.type});break}}if(P2++,P2===1)yield*a({session:L2,modelID:X2.model.modelID,providerID:X2.model.providerID,history:e2}).pipe(Y.ignore,Y.forkIn(D));if(P2===1&&!L2.parentID)yield*rQ({config:q,lastUser:X2,promptServiceTag:Q,log:KH});let r0=yield*m(X2.model.providerID,X2.model.modelID,t);w0=r0,t2=x0;let fZ=EZ.pop();if(fZ?.type==="subtask"){yield*n({task:fZ,model:r0,lastUser:X2,sessionID:t,session:L2,msgs:e2});continue}let vZ=gZ;if(vZ?.parts.some((K2)=>K2.type==="compaction")){let K2=vZ.parts.find((a$)=>a$.type==="compaction"),K0=yield*V.messages({sessionID:t,agentID:X2.agentID??"main"});if((yield*j.process({parentID:X2.id,messages:K0,sessionID:t,auto:K2?.auto??!1,overflow:K2?.overflow,agentID:X2.agentID}))==="stop")break;continue}yield*vQ({sessionID:t,msgs:e2,lastFinished:x0,model:r0,config:q}),dQ({sessionID:t,msgs:e2,lastFinished:x0});let _$=yield*O.get(X2.agent),F7=_$?.native===!0&&_$?.hidden===!0;if(!s$&&!F7&&x0&&x0.tokens){let K2=yield*$();yield*K.fireCheckpoints({sessionID:t,model:r0,tokens:x0.tokens,promptOps:K2,agentID:X2.agentID}).pipe(Y.ignore)}if(!s$&&x0&&x0.tokens){if(yield*GQ({config:q,checkpoint:y,compaction:j,prune:K},{sessionID:t,lastFinished:x0,lastUser:X2,model:r0,msgs:e2,isBoundedComputation:F7})){s$=!0;continue}}if(s$=!1,!_$)throw yield*l9(O,J,X2.agent,t);let eB=_$.steps??1/0,$V=P2>=eB;e2=yield*G2({messages:e2,agent:_$,session:L2});let dZ=d4({sessionID:t,parentID:X2.id,agentID:X2.agentID,agent:_$.name,variant:X2.model.variant,cwd:T0.directory,root:T0.worktree,modelID:r0.id,providerID:r0.providerID});yield*V.updateMessage(dZ);let p2=yield*W.create({assistantMessage:dZ,sessionID:t,model:r0,agentMetrics:M$}),ZV=yield*Y.gen(function*(){let K2={value:Y2},K0=yield*$Q({sessionID:t,resolvedAgentID:F0,step:P2,task_id:j2,lastUser:X2,lastFinished:x0,msgs:e2,agent:_$,session:L2,model:r0,handle:p2,structured:K2,resolveTools:Z,createStructuredOutputTool:X,summary:x,scope:D,plugin:H}),{tools:Z6,format:a$,query:XV}=K0,{cancelledByPlugin:YV,withUserQueryPost:QV}=ZQ({sessionID:t,agentID:F0,step:P2,lastUser:X2,msgs:e2,query:XV,handle:p2,plugin:H,sessions:V,cancellation:h0,trajectoryForStep:a0}),JV=Y.fnUntraced(function*(X6){if(X6==="continue"&&(yield*G8({lastUser:X2,assistant:p2.message})))return"continue";if(X6==="text-repeat"){if(yield*sB({lastUser:X2}))return"continue";return"break"}if(K2.value!==void 0)return Y2=K2.value,p2.message.structured=K2.value,p2.message.finish=p2.message.finish??"stop",yield*V.updateMessage(p2.message),"break";let V$=m9({phase:"after-process",lastUser:X2,assistant:p2.message,parts:o.parts(p2.message.id),processResult:X6});if(V$.type==="filtered")return yield*IZ({assistant:p2.message}),"break";if(V$.type==="failed"){if(yield*RZ({lastUser:X2,assistant:p2.message}))return"continue";return yield*SZ({assistant:p2.message,reason:V$.reason}),"break"}if(V$.type!=="continue"&&!p2.message.error&&a$.type==="json_schema"){if(yield*nB({lastUser:X2,assistant:p2.message}))return"continue";return"break"}if((V$.type==="think-only"||V$.type==="invalid")&&a$.type!=="json_schema"){let BV=V$.type==="invalid"?V$.reason:"think-only";if(yield*CZ({lastUser:X2,assistant:p2.message,reason:BV}))return"continue";return"break"}if(V$.type==="final"&&V$.degraded)yield*C2.warn("degraded final on abnormal finish",{finish:p2.message.finish});if(X6==="stop")return"break";return}),y7=yield*WQ({sessionID:t,lastUser:X2,agent:_$,session:L2,model:r0,msgs:e2,tools:Z6,format:a$,handle:p2,isLastStep:$V,task_id:j2,instructionsNotified:e,maxStepsText:g,actorRegistry:N,bus:J,config:q,instruction:U,llm:T,registry:b,status:B,sys:k,cancelledByPlugin:YV,withUserQueryPost:QV,slog:C2});if(y7.kind==="break")return"break";let lZ=yield*JV(y7.result);if(lZ)return lZ;if(y7.result==="overflow")yield*jQ({config:q,checkpoint:y,compaction:j,prune:K},{sessionID:t,lastUser:X2,model:r0,msgs:e2,isBoundedComputation:F7});return"continue"}).pipe(Y.ensuring(U.clear(p2.message.id))),mZ=yield*H8.check({lastUser:X2,completedParts:o.parts(p2.message.id)});if(mZ==="terminate")break;if(mZ==="recovered")continue;if(ZV==="break"){if(yield*kZ(X2))continue;if(yield*TZ(X2))continue;break}continue}let aB=yield*$();if(w0&&t2)yield*s0({model:w0,lastFinished:t2,promptOps:aB});let $6=yield*h(t,N2),rB=$6.info.role==="assistant"&&!!$6.info.error,hZ=yield*V.findMessage(t,(e2)=>e2.info.role==="user",{agentID:"*"});return yield*n0(rB?"error":"completed",Y0.isSome(hZ)?hZ.value.info.agent:$6.info.agent),$6}).pipe((a0)=>c9(t,J,a0),Y.onExit(P1),Y.orDie)}),lastAssistant:h}})}import ZJ from"path";var HH=new TextEncoder,JZ=new TextDecoder,GH=($)=>`
515
-
516
- [... QitQode truncated ${$} bytes of shell output ...]
517
-
518
- `;class BZ{head=new Uint8Array(262144);tail=new Uint8Array(786432);headBytes=0;tailBytes=0;tailStart=0;seenBytes=0;append($){let Z=HH.encode($);this.seenBytes=Math.min(Number.MAX_SAFE_INTEGER,this.seenBytes+Z.byteLength);let X=Math.min(Z.byteLength,262144-this.headBytes);if(X>0)this.head.set(Z.subarray(0,X),this.headBytes),this.headBytes+=X;if(X===Z.byteLength)return;let Q=Z.subarray(X);if(Q.byteLength>=this.tail.byteLength){this.tail.set(Q.subarray(Q.byteLength-this.tail.byteLength)),this.tailBytes=this.tail.byteLength,this.tailStart=0;return}let J=Math.max(0,this.tailBytes+Q.byteLength-this.tail.byteLength);this.tailStart=(this.tailStart+J)%this.tail.byteLength,this.tailBytes=Math.min(this.tail.byteLength,this.tailBytes+Q.byteLength);let B=(this.tailStart+this.tailBytes-Q.byteLength)%this.tail.byteLength,V=Math.min(Q.byteLength,this.tail.byteLength-B);if(this.tail.set(Q.subarray(0,V),B),V<Q.byteLength)this.tail.set(Q.subarray(V),0)}get totalBytes(){return this.seenBytes}get retainedBytes(){return this.headBytes+this.tailBytes}get truncated(){return this.seenBytes>this.retainedBytes}toString(){let $=new Uint8Array(this.retainedBytes);$.set(this.head.subarray(0,this.headBytes));let Z=Math.min(this.tailBytes,this.tail.byteLength-this.tailStart);if($.set(this.tail.subarray(this.tailStart,this.tailStart+Z),this.headBytes),Z<this.tailBytes)$.set(this.tail.subarray(0,this.tailBytes-Z),this.headBytes+Z);if(!this.truncated)return JZ.decode($);let X=JZ.decode($.subarray(0,this.headBytes)),Q=JZ.decode($.subarray(this.headBytes));return X+GH(this.seenBytes-this.retainedBytes)+Q}}var jH=50,OH=32768;function XJ($){return Y.gen(function*(){let Z=yield*f2,X=yield*$$.Service,Q=yield*g2.Service,J=yield*y2.Service,B=yield*p.Service,V=yield*H2.Service,O=yield*n1.ChildProcessSpawner;return Y.fn("SessionPrompt.shellImpl")(function*(G){let W=yield*d.context,K=yield*Z.get(G.sessionID);if(K.revert)yield*X.cleanup(K);let y=yield*d$(Q,B,G.agent,G.sessionID),j=yield*$8(J,G.modelRef,G.model),q=yield*$8(J,y.modelRef,y.model),H=j??q??(yield*$(G.sessionID)),z={id:G.messageID??w2.ascending(),sessionID:G.sessionID,time:{created:Date.now()},role:"user",agent:G.agent,model:{providerID:H.providerID,modelID:H.modelID}};yield*Z.updateMessage(z);let L={type:"text",id:Q2.ascending(),messageID:z.id,sessionID:G.sessionID,text:"The following tool was executed by the user",synthetic:!0};yield*Z.updatePart(L);let b={id:w2.ascending(),sessionID:G.sessionID,parentID:z.id,agentID:z.agentID,mode:G.agent,agent:G.agent,cost:0,path:{cwd:W.directory,root:W.worktree},time:{created:Date.now()},role:"assistant",tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:H.modelID,providerID:H.providerID};yield*Z.updateMessage(b);let D={type:"tool",id:Q2.ascending(),messageID:b.id,sessionID:G.sessionID,tool:"bash",callID:t1(),state:{status:"running",time:{start:Date.now()},input:{command:G.command}}};yield*Z.updatePart(D);let U=new BZ,F=!1,I=0,C=0,S=()=>({output:U.toString(),description:"",truncated:U.truncated,totalBytes:U.totalBytes}),E=Y.uninterruptible(Y.gen(function*(){if(F)U.append(`
519
-
520
- `+["<metadata>","User aborted the command","</metadata>"].join(`
521
- `));if(!b.time.completed)b.time.completed=Date.now(),yield*Z.updateMessage(b);if(D.state.status==="running"){let k=S();D.state={status:"completed",time:{...D.state.time,end:Date.now()},input:D.state.input,title:"",metadata:k,output:k.output},yield*Z.updatePart(D)}})),x=yield*Y.gen(function*(){let k=O1.preferred(),T=(process.platform==="win32"?ZJ.win32.basename(k,".exe"):ZJ.basename(k)).toLowerCase(),N={nu:{args:["-c",G.command]},fish:{args:["-c",G.command]},zsh:{args:["-l","-c",`
522
- __oc_cwd=$PWD
523
- [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true
524
- [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true
525
- cd "$__oc_cwd"
526
- eval ${JSON.stringify(G.command)}
527
- `]},bash:{args:["-l","-c",`
528
- __oc_cwd=$PWD
529
- shopt -s expand_aliases
530
- [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true
531
- cd "$__oc_cwd"
532
- eval ${JSON.stringify(G.command)}
533
- `]},cmd:{args:["/c",G.command]},powershell:{args:["-NoProfile","-Command",G.command]},pwsh:{args:["-NoProfile","-Command",G.command]},"":{args:["-c",G.command]}},A=(N[T]??N[""]).args,_=W.directory,R=yield*V.trigger("shell.env",{cwd:_,sessionID:G.sessionID,callID:D.callID},{env:{}}),g=s1.make(k,A,{cwd:_,extendEnv:!0,env:{...R.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),l=yield*O.spawn(g);yield*c2.runForEach(c2.decodeText(l.all),(m)=>Y.suspend(()=>{if(U.append(m),D.state.status!=="running")return Y.void;let h=Date.now();if(h-I<jH&&U.totalBytes-C<OH)return Y.void;return D.state.metadata=S(),I=h,C=U.totalBytes,Z.updatePart(D).pipe(Y.ignore)})),yield*l.exitCode}).pipe(Y.scoped,Y.onInterrupt(()=>Y.sync(()=>{F=!0})),Y.orDie,Y.ensuring(E),Y.exit);if(o2.isFailure(x)&&!V2.hasInterruptsOnly(x.cause))return yield*Y.failCause(x.cause);return{info:b,parts:[D]}})})}import QJ from"path";import FH from"os";import{pathToFileURL as yH,fileURLToPath as zH}from"url";function YJ($){let Z=$.indexOf(",");if(Z===-1)return"";let X=$.slice(0,Z),Q=$.slice(Z+1);if(X.includes(";base64"))return Buffer.from(Q,"base64").toString("utf8");return decodeURIComponent(Q)}var F1=s.create({service:"session.prompt"}),JJ=f0.create({service:"session.prompt"}),DH=393216;function BJ(){return Y.gen(function*(){let $=yield*f2,Z=yield*g2.Service,X=yield*y2.Service,Q=yield*p.Service,J=yield*H2.Service,B=yield*N0.Service,V=Y.fnUntraced(function*(H){let z=yield*$.findMessage(H,(L)=>L.info.role==="user"&&!!L.info.model,{agentID:"*"});if(Y0.isSome(z)&&z.value.info.role==="user")return z.value.info.model;return yield*X.defaultModel()}),O=yield*J$.Service,G=yield*s2.Service,W=yield*W0.Service,K=yield*H$.Service,y=Y.fn("SessionPrompt.resolvePromptParts")(function*(H){let z=yield*d.context,L=[{type:"text",text:H}],b=i4.files(H),D=new Set;return yield*Y.forEach(b,Y.fnUntraced(function*(U){let F=U[1];if(D.has(F))return;D.add(F);let I=F.startsWith("~/")?QJ.join(FH.homedir(),F.slice(2)):QJ.resolve(z.worktree,F),C=yield*G.stat(I).pipe(Y.option);if(Y0.isNone(C)){let E=yield*Z.get(F);if(E)L.push({type:"agent",name:E.name});return}let S=C.value;L.push({type:"file",url:yH(I).href,filename:F,mime:S.type==="Directory"?"application/x-directory":"text/plain"})}),{concurrency:16,discard:!0}),L}),j=Y.fn("SessionPrompt.createUserMessage")(function*(H){let z=H.agent||(yield*Z.defaultAgent()),L=yield*d$(Z,Q,z,H.sessionID),b=yield*$8(X,H.modelRef,H.model),D=yield*$8(X,L.modelRef,L.model),U=b??D??(yield*V(H.sessionID)),F=D&&U.providerID===D.providerID&&U.modelID===D.modelID,I=!H.variant&&L.variant&&F?yield*X.getModel(U.providerID,U.modelID).pipe(Y.catchDefect(()=>Y.void)):void 0,C=H.variant??(L.variant&&I?.variants?.[L.variant]?L.variant:void 0),S={id:H.messageID??w2.ascending(),role:"user",sessionID:H.sessionID,agentID:H.agentID,time:{created:Date.now()},tools:H.tools,agent:L.name,model:{providerID:U.providerID,modelID:U.modelID,variant:C},system:H.system,format:H.format,provenance:H.provenance};yield*Y.addFinalizer(()=>K.clear(S.id));let E=(N)=>({...N,id:N.id?Q2.make(N.id):Q2.ascending()}),x=Y.fn("SessionPrompt.resolveUserPart")(function*(N){if(N.type==="file"){if(N.source?.type==="resource"){let{clientName:_,uri:R}=N.source;F1.info("mcp resource",{clientName:_,uri:R,mime:N.mime});let g=[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Reading MCP resource: ${N.filename} (${R})`}],l=yield*B.readResource(_,R).pipe(Y.exit);if(o2.isSuccess(l)){let m=l.value;if(!m)throw Error(`Resource not found: ${_}/${R}`);let h=Array.isArray(m.contents)?m.contents:[m.contents];for(let f of h)if("text"in f&&f.text)g.push({messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:f.text});else if("blob"in f&&f.blob){let v="mimeType"in f?f.mimeType:N.mime;g.push({messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`[Binary content: ${v}]`})}g.push({...N,messageID:S.id,sessionID:H.sessionID})}else{let m=V2.squash(l.cause);F1.error("failed to read MCP resource",{error:m,clientName:_,uri:R});let h=m instanceof Error?m.message:String(m);g.push({messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Failed to read MCP resource ${N.filename}: ${h}`})}return g}let A=new URL(N.url);switch(A.protocol){case"data:":if(N.mime==="text/plain")return[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify({filePath:N.filename})}`},{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:YJ(N.url)},{...N,messageID:S.id,sessionID:H.sessionID}];break;case"file:":{F1.info("file",{mime:N.mime});let _=zH(N.url);if(yield*G.isDir(_))N.mime="application/x-directory";let{read:R}=yield*W.named(),g=(m,h)=>{let f=new AbortController;return R.execute(m,{sessionID:H.sessionID,abort:f.signal,agent:H.agent,messageID:S.id,extra:{bypassCwdCheck:!0,...h},messages:[],metadata:()=>Y.void,ask:()=>Y.void}).pipe(Y.onInterrupt(()=>Y.sync(()=>f.abort())))};if(N.mime==="text/plain"){let m,h,f={start:A.searchParams.get("start"),end:A.searchParams.get("end")};if(f.start!=null){let a=N.url.split("?")[0],G2=parseInt(f.start,10),R2=f.end?parseInt(f.end,10):void 0;if(G2===R2){let t=yield*O.documentSymbol(a).pipe(Y.catch(()=>Y.succeed([])));for(let N2 of t){let j2;if("range"in N2)j2=N2.range;else if("location"in N2)j2=N2.location.range;if(j2?.start?.line&&j2?.start?.line===G2){G2=j2.start.line,R2=j2?.end?.line??G2;break}}}if(Number.isFinite(G2)&&G2>=1){if(m=Math.max(G2,1),R2!=null&&Number.isFinite(R2)&&R2>=G2)h=R2-(m-1)}}let v={filePath:_,offset:m,limit:h},e=[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(v)}`}],n=yield*X.getModel(S.model.providerID,S.model.modelID).pipe(Y.flatMap((a)=>g(v,{model:a})),Y.exit);if(o2.isSuccess(n)){let a=n.value;if(e.push({messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:a.output}),a.attachments?.length)e.push(...a.attachments.map((G2)=>({...G2,synthetic:!0,filename:G2.filename??N.filename,messageID:S.id,sessionID:H.sessionID})));else e.push({...N,messageID:S.id,sessionID:H.sessionID})}else{let a=V2.squash(n.cause);F1.error("failed to read file",{error:a});let G2=a instanceof Error?a.message:String(a);yield*Q.publish(U2.Error,{sessionID:H.sessionID,error:new x2.Unknown({message:G2}).toObject()}),e.push({messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${_} with the following error: ${G2}`})}return e}if(N.mime==="application/x-directory"){let m={filePath:_},h=yield*g(m).pipe(Y.exit);if(o2.isFailure(h)){let f=V2.squash(h.cause);F1.error("failed to read directory",{error:f});let v=f instanceof Error?f.message:String(f);return yield*Q.publish(U2.Error,{sessionID:H.sessionID,error:new x2.Unknown({message:v}).toObject()}),[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Read tool failed to read ${_} with the following error: ${v}`}]}return[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: ${JSON.stringify(m)}`},{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:h.value.output},{...N,messageID:S.id,sessionID:H.sessionID}]}let l=yield*G.stat(_).pipe(Y.option);if(Y0.isNone(l)||Number(l.value.size)>DH)return[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:Y0.isNone(l)?`File not found: ${_}`:`Attachment omitted because it exceeds the 384 KB inline limit: ${_}`}];return[{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:`Called the Read tool with the following input: {"filePath":"${_}"}`},{id:N.id,messageID:S.id,sessionID:H.sessionID,type:"file",url:`data:${N.mime};base64,`+Buffer.from(yield*G.readFile(_).pipe(Y.catch(Y.die))).toString("base64"),mime:N.mime,filename:N.filename,source:N.source}]}}}if(N.type==="agent"){let _=z2.evaluate("task",N.name,L.permission).action==="deny"?" . Invoked by user; guaranteed to exist.":"";return[{...N,messageID:S.id,sessionID:H.sessionID},{messageID:S.id,sessionID:H.sessionID,type:"text",synthetic:!0,text:" Use the above message and context to generate a prompt and call the actor tool with subagent: "+N.name+_}]}return[{...N,messageID:S.id,sessionID:H.sessionID}]}),k=yield*Y.forEach(H.parts,x,{concurrency:8}).pipe(Y.map((N)=>N.flat().map(E)));yield*J.trigger("chat.message",{sessionID:H.sessionID,agent:H.agent,model:H.model,messageID:H.messageID,variant:H.variant},{message:S,parts:k});let T=o.Info.safeParse(S);if(!T.success)F1.error("invalid user message before save",{sessionID:H.sessionID,messageID:S.id,agent:S.agent,model:S.model,issues:T.error.issues});k.forEach((N,A)=>{let _=o.Part.safeParse(N);if(_.success)return;F1.error("invalid user part before save",{sessionID:H.sessionID,messageID:S.id,partID:N.id,partType:N.type,index:A,issues:_.error.issues,part:N})}),yield*$.updateMessage(S);for(let N of k)yield*$.updatePart(N);return{info:S,parts:k}},Y.scoped),q=Y.fn("SessionPrompt.sweepOrphanAssistants")(function*(H){let z=yield*$.messages({sessionID:H,agentID:"*"}),L=Date.now(),b=3600000;for(let D of z){if(D.info.role!=="assistant")continue;if(D.info.time?.completed)continue;let U=D.info.time?.created??0;if(L-U<3600000)continue;D.info.time={...D.info.time,completed:L},D.info.error=D.info.error??new o.AbortedError({message:"Abandoned: previous request interrupted before completion"}).toObject(),yield*$.updateMessage(D.info).pipe(Y.catchCause((F)=>JJ.warn("orphan-update-failed",{sessionID:H,messageID:D.info.id,cause:F}))),yield*JJ.info("orphan-assistant-cleared",{sessionID:H,messageID:D.info.id})}});return{resolvePromptParts:y,createUserMessage:j,sweepOrphanAssistants:q,lastModel:V}})}var qH=f0.create({service:"session.prompt"}),PH=/!`([^`]+)`/g,NH=/(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi,VJ=/\$(\d+)/g,VZ=/^["']|["']$/g;function KJ($,Z,X){return Y.gen(function*(){let Q=yield*g2.Service,J=yield*H0.Service,B=yield*v0.Service,V=yield*p.Service,O=yield*H2.Service;return Y.fn("SessionPrompt.command")(function*(W){yield*qH.info("command",{sessionID:W.sessionID,command:W.command,agent:W.agent});let K=yield*J.get(W.command);if(!K){let x=(yield*J.list()).map((N)=>N.name),k=x.length?` Available commands: ${x.join(", ")}`:"",T=new x2.Unknown({message:`Command not found: "${W.command}".${k}`});throw yield*V.publish(U2.Error,{sessionID:W.sessionID,error:T.toObject()}),T}let y=K.agent??W.agent??(yield*Q.defaultAgent());if(W.command===H0.Default.GOAL){let x=W.arguments.trim(),k=x===""||x==="clear"||x==="reset",T;if(k)yield*B.clear(W.sessionID),T=[{type:"text",text:"Goal cleared.",synthetic:!0}];else yield*B.set(W.sessionID,x),T=[{type:"text",text:`/${W.command} ${x}`},{type:"text",text:v0.startReminder(x),synthetic:!0},...W.parts??[]];yield*O.trigger("command.execute.before",{command:W.command,sessionID:W.sessionID,arguments:W.arguments},{parts:T});let N=yield*$({sessionID:W.sessionID,messageID:W.messageID,model:k?void 0:W.model?y2.parseModel(W.model):yield*X(W.sessionID),agent:y,parts:T,variant:W.variant,noReply:k?!0:void 0});return yield*V.publish(H0.Event.Executed,{name:W.command,sessionID:W.sessionID,arguments:W.arguments,messageID:N.info.id}),N}let q=(W.arguments.match(NH)??[]).map((x)=>x.replace(VZ,"")),H=yield*Y.promise(async()=>K.template),z;if(K.source==="skill")z=W.arguments;else{let x=H.match(VJ)??[],k=0;for(let A of x){let _=Number(A.slice(1));if(_>k)k=_}let T=H.replaceAll(VJ,(A,_)=>{let R=Number(_),g=R-1;if(g>=q.length)return"";if(R===k)return q.slice(g).join(" ");return q[g]}),N=H.includes("$ARGUMENTS");if(z=T.replaceAll("$ARGUMENTS",W.arguments),x.length===0&&!N&&W.arguments.trim())z=z+`
534
-
535
- `+W.arguments}let L=i4.shell(z);if(L.length>0){let x=O1.preferred(),k=yield*Y.promise(()=>Promise.all(L.map(async([,N])=>(await WJ.text([N],{shell:x,nothrow:!0})).text))),T=0;z=z.replace(PH,()=>k[T++])}z=z.trim();let b=yield*Y.gen(function*(){if(K.model)return y2.parseModel(K.model);if(K.agent){let x=yield*Q.get(K.agent);if(x?.model)return x.model}if(W.model)return y2.parseModel(W.model);return yield*X(W.sessionID)});yield*l4(b.providerID,b.modelID,W.sessionID);let D=yield*d$(Q,V,y,W.sessionID),U=yield*Z(z),F=D.mode==="subagent"&&K.subtask!==!1||K.subtask===!0,I;if(F){let x=K.source==="skill"?H+(W.arguments.trim()?`
536
-
537
- `+W.arguments:""):U.find((k)=>k.type==="text")?.text??"";I=[{type:"subtask",agent:D.name,description:K.description??"",command:W.command,model:{providerID:b.providerID,modelID:b.modelID},prompt:x}]}else if(K.source==="skill"){let x=W.arguments.trim()?`/${W.command} ${W.arguments}`:`/${W.command}`,k={type:"text",text:`<skill_content name="${W.command}">
538
- ${H}
539
- </skill_content>`,synthetic:!0},T=U.filter((N)=>N.type!=="text");I=[{type:"text",text:x},k,...T,...W.parts??[]]}else I=[...U,...W.parts??[]];let C=F?W.agent??(yield*Q.defaultAgent()):y,S=F?W.model?y2.parseModel(W.model):yield*X(W.sessionID):b;yield*O.trigger("command.execute.before",{command:W.command,sessionID:W.sessionID,arguments:W.arguments},{parts:I});let E=yield*$({sessionID:W.sessionID,messageID:W.messageID,model:S,agent:C,parts:I,variant:W.variant});return yield*V.publish(H0.Event.Executed,{name:W.command,sessionID:W.sessionID,arguments:W.arguments,messageID:E.info.id}),E})})}var HJ=P.object({sessionID:D2.zod,messageID:w2.zod.optional(),model:P.object({providerID:e$.zod,modelID:t0.zod}).optional(),modelRef:P.string().optional().describe("Model group/tier name (e.g. fast/economical/default/power) or a literal provider/model. Resolved provider-aware. Takes precedence over `model` when both are set."),agent:P.string().optional(),agentID:P.string().optional(),task_id:P.string().optional().describe("If the spawning caller bound this prompt to a specific user-task (T4 etc), pass its TID. Propagates to Tool.Context.taskId so memory-path-guard allows writes to tasks/<task_id>/*.md."),source:P.enum(["user","spawn","hook"]).optional(),provenance:o.Provenance.optional(),noReply:P.boolean().optional(),tools:P.record(P.string(),P.boolean()).optional().describe("@deprecated tools and permissions have been merged, you can set permissions on the session itself now"),format:o.Format.optional(),system:P.string().optional(),variant:P.string().optional(),parts:P.array(P.discriminatedUnion("type",[o.TextPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"TextPartInput"}),o.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"FilePartInput"}),o.AgentPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"AgentPartInput"}),o.SubtaskPart.omit({messageID:!0,sessionID:!0}).partial({id:!0}).meta({ref:"SubtaskPartInput"})]))}),GJ=P.object({sessionID:D2.zod,agentID:P.string().optional(),task_id:P.string().optional()}),jJ=P.object({sessionID:D2.zod,messageID:w2.zod.optional(),agent:P.string(),model:P.object({providerID:e$.zod,modelID:t0.zod}).optional(),modelRef:P.string().optional().describe("Model group/tier name (e.g. fast/economical/default/power) or a literal provider/model. Resolved provider-aware. Takes precedence over `model` when both are set."),command:P.string()}),OJ=P.object({messageID:w2.zod.optional(),sessionID:D2.zod,agent:P.string().optional(),model:P.string().optional(),arguments:P.string(),command:P.string(),variant:P.string().optional(),parts:P.array(P.discriminatedUnion("type",[o.FilePart.omit({messageID:!0,sessionID:!0}).partial({id:!0})])).optional()});var wH="You predict the single most likely next message a user will send to a coding assistant, based on the conversation so far. Output only that next message as one short, natural first-person request (what the user would type). No preamble, no quotes, no explanation, no markdown. Keep it under 100 characters.",xH="Based on the conversation above, write the user's most likely next message:",XU=s.create({service:"session.prompt"}),LH=f0.create({service:"session.prompt"});class d8 extends Z2.Service()("@qitqode/SessionPrompt"){}var yJ=M.effect(d8,Y.gen(function*(){let{bus:$,status:Z,sessions:X,agents:Q,provider:J,processor:B,prune:V,checkpoint:O,compaction:G,config:W,plugin:K,permission:y,fsys:j,registry:q,scope:H,instruction:z,state:L,goal:b,taskGateState:D,taskRegistry:U,revert:F,summary:I,sys:C,llm:S,actorRegistry:E,inbox:x}=yield*T4,k=yield*H0.Service,T=yield*N0.Service,N=yield*J$.Service,A=yield*G1.Service,_=(Y2)=>Y.gen(function*(){let P2={system:[],tools:{},inheritedMessages:[],parentPermission:[]},L2=yield*Q.get(Y2.agentName).pipe(Y.catch(()=>Y.succeed(void 0)));if(!L2)return P2;let t2=yield*J.getModel(Y2.providerID,Y2.modelID).pipe(Y.catch(()=>Y.succeed(void 0)));if(!t2)return P2;let w0=yield*X.get(Y2.sessionID).pipe(Y.catch(()=>Y.succeed(void 0)));if(!w0)return P2;let[F0,i0,h0]=yield*Y.all([C.skills(L2),Y.sync(()=>C.environment(t2,w0.time.created)),z.system().pipe(Y.orDie)]),M$=[...i0,...F0?[F0]:[],...h0.content];return{...yield*A4({sessionID:Y2.sessionID,agent:L2,model:t2,msgs:Y2.msgs,additions:M$}).pipe(Y.provideService(E2.Service,S),Y.provideService(W0.Service,q),Y.catch(()=>Y.succeed(P2))),parentPermission:L2.permission}});n4.current=_,yield*Y.addFinalizer(()=>Y.sync(()=>{if(n4.current===_)n4.current=void 0}));let R=Y.fn("SessionPrompt.runner")(function*(){return yield*D0.make()}),g=Y.fn("SessionPrompt.ops")(function*(){let Y2=yield*R();return{cancel:(P2)=>Y2.fork(l(P2)),resolvePromptParts:(P2)=>m(P2),prompt:(P2)=>t(P2)}}),l=Y.fn("SessionPrompt.cancel")(function*(Y2){yield*LH.info("cancel",{sessionID:Y2}),yield*L.cancel(Y2)}),{resolvePromptParts:m,createUserMessage:h,sweepOrphanAssistants:f,lastModel:v}=yield*BJ(),e=yield*sY(g),{runLoop:n,lastAssistant:a}=yield*$J(g,e,k4,d8),G2=yield*XJ(v),R2=Y.fn("SessionPrompt.predict")(function*(Y2){if((yield*W.get()).experimental?.predict_next_prompt===!1)return"";let L2=yield*X.messages({sessionID:Y2.sessionID,agentID:"main"}),t2=(g0)=>g0.info.role==="user"&&!g0.parts.every((G8)=>("synthetic"in G8)&&G8.synthetic),w0=L2.findLastIndex(t2);if(w0===-1)return"";let F0=L2[w0];if(F0.info.role!=="user")return"";let i0=L2.slice(w0+1).filter((g0)=>g0.info.role==="assistant");if(i0.length===0)return"";if(i0.some((g0)=>g0.info.time.completed===void 0))return"";let h0=i0[i0.length-1],M$=yield*Q.get("title");if(!M$)return"";let n0={...M$,prompt:wH},s0=n0.modelRef?yield*J.resolveModelRef(n0.modelRef,h0.info.providerID):n0.model?yield*J.getModel(n0.model.providerID,n0.model.modelID):(yield*J.getSmallModel(h0.info.providerID))??(yield*J.getModel(h0.info.providerID,h0.info.modelID)),P1=yield*o.toModelMessagesEffect([F0,h0],s0,{stripMedia:!0}),a0=yield*S.stream({agent:n0,user:F0.info,system:[],small:!0,tools:{},model:s0,sessionID:Y2.sessionID,retries:1,messages:[...P1,{role:"user",content:xH}]}).pipe(u4((g0)=>g0.type==="text-delta"),c4((g0)=>g0.text),o4,Y.orElseSucceed(()=>"")),s$=g8(a0);if(!s$)return"";let H8=s$.replace(VZ,"");return H8.length>120?H8.substring(0,117)+"...":H8}),t=Y.fn("SessionPrompt.prompt")(function*(Y2){let P2=yield*X.get(Y2.sessionID);if(Y2.source!=="spawn"&&Y2.source!=="hook")yield*F.cleanup(P2),yield*f(Y2.sessionID);let L2=yield*h(Y2);yield*X.touch(Y2.sessionID);let t2=[];for(let[w0,F0]of Object.entries(Y2.tools??{}))t2.push({permission:w0,action:F0?"allow":"deny",pattern:"*"});if(t2.length>0)P2.permission=t2,yield*X.setPermission({sessionID:P2.id,permission:t2});if(Y2.noReply===!0)return L2;return yield*N2({sessionID:Y2.sessionID,agentID:Y2.agentID??"main",task_id:Y2.task_id})}),N2=Y.fn("SessionPrompt.loop")(function*(Y2){let P2=Y2.agentID??"main",L2=a(Y2.sessionID,P2),t2=n(Y2.sessionID,P2,Y2.task_id);return yield*L.ensureRunning(Y2.sessionID,P2,L2,t2)}),j2=Y.fn("SessionPrompt.shell")(function*(Y2){let P2=a(Y2.sessionID),L2=G2(Y2);return yield*L.startShell(Y2.sessionID,P2,L2)}),T0=yield*KJ(t,m,v),C2=d8.of({cancel:l,prompt:t,loop:N2,shell:j2,command:T0,resolvePromptParts:m,sweepOrphanAssistants:f,predict:R2});return K1.current={loop:C2.loop},yield*Y.addFinalizer(()=>Y.sync(()=>{if(K1.current?.loop===C2.loop)K1.current=void 0})),C2})),bH=M.suspend(()=>yJ.pipe(M.provide(z0.defaultLayer),M.provide(y0.defaultLayer),M.provide(q$.defaultLayer),M.provide(D$.defaultLayer),M.provide(z$.defaultLayer),M.provide(m0.defaultLayer),M.provide(H0.defaultLayer),M.provide(z2.defaultLayer),M.provide(N0.defaultLayer),M.provide(J$.defaultLayer),M.provide(W0.defaultLayer),M.provide(G1.defaultLayer),M.provide(y2.defaultLayer),M.provide(H$.defaultLayer),M.provide(s2.defaultLayer),M.provide(H2.defaultLayer),M.provide(d0),M.provide($$.defaultLayer),M.provide(M.mergeAll(B2.defaultLayer,P0.defaultLayer,FJ.defaultLayer,M2.defaultLayer,g2.defaultLayer,O$.defaultLayer,E2.defaultLayer,p.layer,a1,o0.defaultLayer,v0.defaultLayer,H1.defaultLayer,M0.defaultLayer))));var y1={};b2(y1,{layer:()=>xJ,defaultLayer:()=>kH,Service:()=>Y8,Mode:()=>CH,Info:()=>IH,FileDiff:()=>SH,Event:()=>wJ});import UH from"path";var zJ=s.create({service:"vcs"}),DJ=($)=>{if(!$)return 0;if(!$.endsWith(`
540
- `))return $.split(`
541
- `).length;return $.slice(0,-1).split(`
542
- `).length},AH=Y.fnUntraced(function*($,Z,X){let Q=UH.join(Z,X);if(!(yield*$.exists(Q).pipe(Y.orDie)))return"";let J=yield*$.readFile(Q).pipe(Y.catch(()=>Y.succeed(new Uint8Array)));if(Buffer.from(J).includes(0))return"";return Buffer.from(J).toString("utf8")}),NJ=($)=>new Map($.map((Z)=>[Z.file,{additions:Z.additions,deletions:Z.deletions}])),MH=(...$)=>{let Z=new Map;return $.flat().forEach((X)=>{if(!Z.has(X.file))Z.set(X.file,X)}),[...Z.values()]},WZ=Y.fnUntraced(function*($,Z,X,Q,J,B){let V=Q?yield*Z.prefix(X):"",O=(W,K,y)=>PJ(qJ(W,W,K,y,"","",{context:Number.MAX_SAFE_INTEGER}));return(yield*Y.forEach(J,(W)=>Y.gen(function*(){let K=W.status==="added"||!Q?"":yield*Z.show(X,Q,W.file,V),y=W.status==="deleted"?"":yield*AH($,X,W.file),j=B.get(W.file);return{file:W.file,patch:O(W.file,K,y),additions:j?.additions??(W.status==="added"?DJ(y):0),deletions:j?.deletions??(W.status==="deleted"?DJ(K):0),status:W.status}}),{concurrency:8})).toSorted((W,K)=>W.file.localeCompare(K.file))}),_H=Y.fnUntraced(function*($,Z,X,Q){if(!Q)return yield*WZ($,Z,X,Q,yield*Z.status(X),new Map);let[J,B]=yield*Y.all([Z.status(X),Z.stats(X,Q)],{concurrency:2});return yield*WZ($,Z,X,Q,J,NJ(B))}),RH=Y.fnUntraced(function*($,Z,X,Q){let[J,B,V]=yield*Y.all([Z.diff(X,Q),Z.stats(X,Q),Z.status(X)],{concurrency:3});return yield*WZ($,Z,X,Q,MH(J,V.filter((O)=>O.code==="??")),NJ(B))}),CH=P.enum(["git","branch"]),wJ={BranchUpdated:O2.define("vcs.branch.updated",P.object({branch:P.string().optional()}))},IH=P.object({branch:P.string().optional(),default_branch:P.string().optional()}).meta({ref:"VcsInfo"}),SH=P.object({file:P.string(),patch:P.string(),additions:P.number(),deletions:P.number(),status:P.enum(["added","deleted","modified"]).optional()}).meta({ref:"VcsFileDiff"});class Y8 extends Z2.Service()("@qitqode/Vcs"){}var xJ=M.effect(Y8,Y.gen(function*(){let $=yield*s2.Service,Z=yield*l$.Service,X=yield*p.Service,Q=yield*d2.Scope,J=yield*d.make(Y.fn("Vcs.state")(function*(B){if(B.project.vcs!=="git")return{current:void 0,root:void 0};let V=Y.fnUntraced(function*(){return yield*Z.branch(B.directory)}),[O,G]=yield*Y.all([Z.branch(B.directory),Z.defaultBranch(B.directory)],{concurrency:2}),W={current:O,root:G};return zJ.info("initialized",{branch:W.current,default_branch:W.root?.name}),yield*X.subscribe(c$.Event.Updated).pipe(c2.filter((K)=>K.properties.file.endsWith("HEAD")),c2.runForEach((K)=>Y.gen(function*(){let y=yield*V();if(y!==W.current)zJ.info("branch changed",{from:W.current,to:y}),W.current=y,yield*X.publish(wJ.BranchUpdated,{branch:y})})),Y.forkScoped),W}));return Y8.of({init:Y.fn("Vcs.init")(function*(){yield*d.get(J).pipe(Y.forkIn(Q))}),branch:Y.fn("Vcs.branch")(function*(){return yield*d.use(J,(B)=>B.current)}),defaultBranch:Y.fn("Vcs.defaultBranch")(function*(){return yield*d.use(J,(B)=>B.root?.name)}),diff:Y.fn("Vcs.diff")(function*(B){let V=yield*d.get(J),O=yield*d.context;if(O.project.vcs!=="git")return[];if(B==="git")return yield*_H($,Z,O.directory,(yield*Z.hasHead(O.directory))?"HEAD":void 0);if(!V.root)return[];if(V.current&&V.current===V.root.name)return[];let G=yield*Z.mergeBase(O.directory,V.root.ref);if(!G)return[];return yield*RH($,Z,O.directory,G)})})})),kH=xJ.pipe(M.provide(l$.defaultLayer),M.provide(s2.defaultLayer),M.provide(p.layer));var u$={};b2(u$,{layer:()=>uJ,defaultLayer:()=>pH,Worktree:()=>u$,StartCommandFailedError:()=>cH,Service:()=>Q7,ResetInput:()=>lH,ResetFailedError:()=>k0,RemoveInput:()=>mH,RemoveFailedError:()=>q1,NotGitError:()=>Y7,NameGenerationFailedError:()=>lJ,Info:()=>mJ,Event:()=>X7,CreateInput:()=>dH,CreateFailedError:()=>cJ});var A$={};b2(A$,{layer:()=>MJ,defaultLayer:()=>GZ,Service:()=>J8});var z1=s.create({service:"share-next"}),Q8=process.env.QITQODE_DISABLE_SHARE==="true"||process.env.QITQODE_DISABLE_SHARE==="1",TH=u0.Struct({id:u0.String,url:u0.String,secret:u0.String});class J8 extends Z2.Service()("@qitqode/ShareNext"){}var KZ=($)=>Y.sync(()=>r2.use($));function AJ($){return{create:`/api/${$}`,sync:(Z)=>`/api/${$}/${Z}/sync`,remove:(Z)=>`/api/${$}/${Z}`,data:(Z)=>`/api/${$}/${Z}/data`}}var hH=AJ("share"),gH=AJ("shares");function LJ($){switch($.type){case"session":return"session";case"message":return`message/${$.data.id}`;case"part":return`part/${$.data.messageID}/${$.data.id}`;case"session_diff":return"session_diff";case"model":return"model"}}var MJ=M.effect(J8,Y.gen(function*(){let $=yield*m8.Service,Z=yield*p.Service,X=yield*B2.Service,Q=yield*HZ.HttpClient,J=HZ.filterStatusOk(Q),B=yield*y2.Service,V=yield*J2.Service;function O(D,U){return Y.gen(function*(){if(Q8)return;if(!(yield*y(D)))return;let I=yield*d.get(G),C=I.queue.get(D);if(C){for(let E of U)C.set(LJ(E),E);return}let S=new Map(U.map((E)=>[LJ(E),E]));I.queue.set(D,S),yield*j(D).pipe(Y.delay(1000),Y.catchCause((E)=>Y.sync(()=>{z1.error("share flush failed",{sessionID:D,cause:E})})),Y.forkIn(I.scope))})}let G=yield*d.make(Y.fn("ShareNext.state")(function*(D){let U={queue:new Map,scope:yield*d2.make(),shared:new Map};if(yield*Y.addFinalizer(()=>d2.close(U.scope,o2.void).pipe(Y.andThen(Y.sync(()=>{U.queue.clear(),U.shared.clear()})))),Q8)return U;let F=(I,C)=>Z.subscribe(I).pipe(c2.runForEach((S)=>C(S).pipe(Y.catchCause((E)=>Y.sync(()=>{z1.error("share subscriber failed",{type:I.type,cause:E})})))),Y.forkScoped);return yield*F(J2.Event.Updated,(I)=>Y.gen(function*(){let C=yield*V.get(I.properties.sessionID);yield*O(C.id,[{type:"session",data:C}])})),yield*F(o.Event.Updated,(I)=>Y.gen(function*(){let C=I.properties.info;if(yield*O(C.sessionID,[{type:"message",data:C}]),C.role!=="user")return;let S=yield*B.getModel(C.model.providerID,C.model.modelID);yield*O(C.sessionID,[{type:"model",data:[S]}])})),yield*F(o.Event.PartUpdated,(I)=>I.properties.part.type==="compaction"?Y.void:O(I.properties.part.sessionID,[{type:"part",data:I.properties.part}])),yield*F(J2.Event.Diff,(I)=>O(I.properties.sessionID,[{type:"session_diff",data:I.properties.diff}])),yield*F(J2.Event.Deleted,(I)=>b(I.properties.sessionID)),U})),W=Y.fn("ShareNext.request")(function*(){let D={},U=yield*$.active();if(Y0.isNone(U)||!U.value.active_org_id){let I=(yield*X.get()).enterprise?.url??"https://opncd.ai";return{headers:D,api:hH,baseUrl:I}}let F=yield*$.token(U.value.id);if(Y0.isNone(F))throw Error("No active account token available for sharing");return D.authorization=`Bearer ${F.value}`,D["x-org-id"]=U.value.active_org_id,{headers:D,api:gH,baseUrl:U.value.url}}),K=Y.fnUntraced(function*(D){let U=yield*KZ((F)=>F.select().from(D1).where(G0(D1.session_id,D)).get());if(!U)return;return{id:U.id,secret:U.secret,url:U.url}}),y=Y.fnUntraced(function*(D){let U=yield*d.get(G);if(U.shared.has(D)){let I=U.shared.get(D);return I===null?void 0:I}let F=yield*K(D);return U.shared.set(D,F??null),F}),j=Y.fn("ShareNext.flush")(function*(D){if(Q8)return;let U=yield*d.get(G),F=U.queue.get(D);if(!F)return;let I=yield*y(D);if(!I){U.queue.delete(D);return}let C=yield*W(),S=yield*G$.post(`${C.baseUrl}${C.api.sync(I.id)}`).pipe(G$.setHeaders(C.headers),G$.bodyJson({secret:I.secret,data:Array.from(F.values())}),Y.flatMap((E)=>Q.execute(E)));if(S.status>=400){z1.warn("failed to sync share",{sessionID:D,shareID:I.id,status:S.status});return}U.queue.delete(D)}),q=Y.fn("ShareNext.full")(function*(D){z1.info("full sync",{sessionID:D});let U=yield*V.get(D),F=yield*V.diff(D),I=yield*Y.sync(()=>Array.from(o.stream(D,{agentID:"*"}))),C=yield*Y.forEach(Array.from(new Map(I.filter((S)=>S.info.role==="user").map((S)=>S.info.model).map((S)=>[`${S.providerID}/${S.modelID}`,S])).values()),(S)=>B.getModel(e$.make(S.providerID),t0.make(S.modelID)),{concurrency:8});yield*O(D,[{type:"session",data:U},...I.map((S)=>({type:"message",data:S.info})),...I.flatMap((S)=>S.parts.filter((E)=>E.type!=="compaction").map((E)=>({type:"part",data:E}))),{type:"session_diff",data:F},{type:"model",data:C}])}),H=Y.fn("ShareNext.init")(function*(){if(Q8)return;yield*d.get(G)}),z=Y.fn("ShareNext.url")(function*(){return(yield*W()).baseUrl}),L=Y.fn("ShareNext.create")(function*(D){if(Q8)return{id:"",url:"",secret:""};z1.info("creating share",{sessionID:D});let U=yield*W(),F=yield*G$.post(`${U.baseUrl}${U.api.create}`).pipe(G$.setHeaders(U.headers),G$.bodyJson({sessionID:D}),Y.flatMap((C)=>J.execute(C)),Y.flatMap(bJ.schemaBodyJson(TH)));yield*KZ((C)=>C.insert(D1).values({session_id:D,id:F.id,secret:F.secret,url:F.url}).onConflictDoUpdate({target:D1.session_id,set:{id:F.id,secret:F.secret,url:F.url}}).run());let I=yield*d.get(G);return I.shared.set(D,F),yield*q(D).pipe(Y.catchCause((C)=>Y.sync(()=>{z1.error("share full sync failed",{sessionID:D,cause:C})})),Y.forkIn(I.scope)),F}),b=Y.fn("ShareNext.remove")(function*(D){if(Q8)return;z1.info("removing share",{sessionID:D});let U=yield*d.get(G),F=yield*y(D);if(!F){U.shared.delete(D),U.queue.delete(D);return}let I=yield*W();yield*G$.delete(`${I.baseUrl}${I.api.remove(F.id)}`).pipe(G$.setHeaders(I.headers),G$.bodyJson({secret:F.secret}),Y.flatMap((C)=>J.execute(C))),yield*KZ((C)=>C.delete(D1).where(G0(D1.session_id,D)).run()),U.shared.delete(D),U.queue.delete(D)});return J8.of({init:H,url:z,request:W,create:L,remove:b})})),GZ=MJ.pipe(M.provide(p.layer),M.provide(m8.defaultLayer),M.provide(B2.defaultLayer),M.provide(UJ.layer),M.provide(y2.defaultLayer),M.provide(J2.defaultLayer));var a4={};b2(a4,{layer:()=>_J,defaultLayer:()=>EH,Service:()=>s4});class s4 extends Z2.Service()("@qitqode/SessionShare"){}var _J=M.effect(s4,Y.gen(function*(){let $=yield*B2.Service,Z=yield*J2.Service,X=yield*J8,Q=yield*d2.Scope,J=Y.fn("SessionShare.share")(function*(O){if((yield*$.get()).share==="disabled")throw Error("Sharing is disabled in configuration");let W=yield*X.create(O);return yield*Y.sync(()=>M1.run(J2.Event.Updated,{sessionID:O,info:{share:{url:W.url}}})),W}),B=Y.fn("SessionShare.unshare")(function*(O){yield*X.remove(O),yield*Y.sync(()=>M1.run(J2.Event.Updated,{sessionID:O,info:{share:{url:null}}}))}),V=Y.fn("SessionShare.create")(function*(O){let G=yield*Z.create(O);if(G.parentID)return G;let W=yield*$.get();if(!(L0.QITQODE_AUTO_SHARE||W.share==="auto"))return G;return yield*J(G.id).pipe(Y.ignore,Y.forkIn(Q)),G});return s4.of({create:V,share:J,unshare:B})})),EH=_J.pipe(M.provide(GZ),M.provide(J2.defaultLayer),M.provide(B2.defaultLayer));var gJ=IJ(function*(){s.Default.info("bootstrapping",{directory:S2.directory}),yield*B2.Service.use(($)=>$.get()),yield*H2.Service.use(($)=>$.init()),yield*RJ([J$.Service,A$.Service,B8.Service,V8.Service,c$.Service,Y8,q0.Service,TJ,hJ].map(($)=>OZ($.use((Z)=>Z.init())))).pipe(jZ("InstanceBootstrap.init")),yield*F$.Service.use(($)=>$.reconcile()).pipe(SJ(($)=>CJ(()=>s.Default.warn("memory reconcile failed",{error:String($)}))),OZ),yield*p.Service.use(($)=>$.subscribeCallback(H0.Event.Executed,async(Z)=>{if(Z.properties.name===H0.Default.INIT)kJ(S2.project.id)})),yield*I2.subscribe()}).pipe(jZ("InstanceBootstrap"));var vH=M.mergeAll(B2.defaultLayer,H2.defaultLayer,A$.defaultLayer,B8.defaultLayer,J$.defaultLayer,V8.defaultLayer,c$.defaultLayer,y1.defaultLayer,q0.defaultLayer,p.defaultLayer,F$.defaultLayer,$7.defaultLayer).pipe(M.provide(t4)),EJ=r4.make(vH,{memoMap:e4});var l8=s.create({service:"worktree"}),X7={Ready:O2.define("worktree.ready",P.object({name:P.string(),branch:P.string()})),Failed:O2.define("worktree.failed",P.object({message:P.string()}))},mJ=P.object({name:P.string(),branch:P.string(),directory:P.string()}).meta({ref:"Worktree"}),dH=P.object({name:P.string().optional(),startCommand:P.string().optional().describe("Additional startup script to run after the project's start command")}).meta({ref:"WorktreeCreateInput"}),mH=P.object({directory:P.string()}).meta({ref:"WorktreeRemoveInput"}),lH=P.object({directory:P.string()}).meta({ref:"WorktreeResetInput"}),Y7=x2.create("WorktreeNotGitError",P.object({message:P.string()})),lJ=x2.create("WorktreeNameGenerationFailedError",P.object({message:P.string()})),cJ=x2.create("WorktreeCreateFailedError",P.object({message:P.string()})),cH=x2.create("WorktreeStartCommandFailedError",P.object({message:P.string()})),q1=x2.create("WorktreeRemoveFailedError",P.object({message:P.string()})),k0=x2.create("WorktreeResetFailedError",P.object({message:P.string()}));function uH($){return $.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").replace(/-+$/,"")}function oH(...$){return $.filter(Boolean).flatMap((Z)=>Z.split(`
543
- `).map((X)=>X.trim()).flatMap((X)=>{let Q=X.match(/^warning:\s+failed to remove\s+(.+):\s+/i);if(!Q)return[];let J=Q[1]?.trim().replace(/^['"]|['"]$/g,"");if(!J)return[];return[J]}))}class Q7 extends Z2.Service()("@qitqode/Worktree"){}var uJ=M.effect(Q7,Y.gen(function*(){let $=yield*d2.Scope,Z=yield*s2.Service,X=yield*fJ.Path,Q=yield*n1.ChildProcessSpawner,J=yield*l$.Service,B=yield*U$.Service,V=Y.fnUntraced(function*(A,_){return yield*dJ(Q,A,_)},Y.catch((A)=>Y.succeed({code:1,text:"",stderr:A instanceof Error?A.message:String(A)}))),O=26,G=Y.fn("Worktree.candidate")(function*(A,_){let R=yield*d.context;for(let g of Array.from({length:26},(l,m)=>m)){let l=_?g===0?_:`${_}-${yZ.create()}`:yZ.create(),m=`qitqode/${l}`,h=X.join(A,l);if(yield*Z.exists(h).pipe(Y.orDie))continue;let f=`refs/heads/${m}`;if((yield*V(["show-ref","--verify","--quiet",f],{cwd:R.worktree})).code===0)continue;return mJ.parse({name:l,branch:m,directory:h})}throw new lJ({message:"Failed to generate a unique worktree name"})}),W=Y.fn("Worktree.makeWorktreeInfo")(function*(A){let _=yield*d.context;if(_.project.vcs!=="git")throw new Y7({message:"Worktrees are only supported for git projects"});let R=X.join(P$.Path.data,"worktree",_.project.id);yield*Z.makeDirectory(R,{recursive:!0}).pipe(Y.orDie);let g=A?uH(A):"";return yield*G(R,g||void 0)}),K=Y.fnUntraced(function*(A){let _=yield*d.context,R=yield*V(["worktree","add","--no-checkout","-b",A.branch,A.directory],{cwd:_.worktree});if(R.code!==0)throw new cJ({message:R.stderr||R.text||"Failed to create git worktree"});yield*B.addSandbox(_.project.id,A.directory).pipe(Y.catch(()=>Y.void))}),y=Y.fnUntraced(function*(A,_){let R=yield*d.context,g=yield*d.workspaceID,l=R.project.id,m=_?.trim(),h=yield*V(["reset","--hard"],{cwd:A.directory});if(h.code!==0){let v=h.stderr||h.text||"Failed to populate worktree";l8.error("worktree checkout failed",{directory:A.directory,message:v}),Z7.emit("event",{directory:A.directory,project:R.project.id,workspace:g,payload:{type:X7.Failed.type,properties:{message:v}}});return}if(!(yield*Y.promise(()=>S2.provide({directory:A.directory,init:()=>EJ.runPromise(gJ),fn:()=>{return}}).then(()=>!0).catch((v)=>{let e=y$(v);return l8.error("worktree bootstrap failed",{directory:A.directory,message:e}),Z7.emit("event",{directory:A.directory,project:R.project.id,workspace:g,payload:{type:X7.Failed.type,properties:{message:e}}}),!1}))))return;Z7.emit("event",{directory:A.directory,project:R.project.id,workspace:g,payload:{type:X7.Ready.type,properties:{name:A.name,branch:A.branch}}}),yield*S(A.directory,{projectID:l,extra:m})}),j=Y.fn("Worktree.createFromInfo")(function*(A,_){yield*K(A),yield*y(A,_)}),q=Y.fn("Worktree.create")(function*(A){let _=yield*W(A?.name);return yield*K(_),yield*y(_,A?.startCommand).pipe(Y.catchCause((R)=>Y.sync(()=>l8.error("worktree bootstrap failed",{cause:R}))),Y.forkIn($)),_}),H=Y.fnUntraced(function*(A){let _=X.resolve(A),R=yield*Z.realPath(_).pipe(Y.catch(()=>Y.succeed(_))),g=X.normalize(R);return process.platform==="win32"?g.toLowerCase():g});function z(A){return A.split(`
544
- `).map((_)=>_.trim()).reduce((_,R)=>{if(!R)return _;if(R.startsWith("worktree "))return _.push({path:R.slice(9).trim()}),_;let g=_[_.length-1];if(!g)return _;if(R.startsWith("branch "))g.branch=R.slice(7).trim();return _},[])}let L=Y.fnUntraced(function*(A,_){for(let R of A){if(!R.path)continue;if((yield*H(R.path))===_)return R}return});function b(A){return Z.exists(A).pipe(Y.orDie,Y.flatMap((_)=>_?V(["fsmonitor--daemon","stop"],{cwd:A}):Y.void))}function D(A){return Y.promise(()=>import("fs/promises").then((_)=>_.rm(A,{recursive:!0,force:!0,maxRetries:5,retryDelay:100})).catch((_)=>{let R=y$(_);throw new q1({message:R||"Failed to remove git worktree directory"})}))}let U=Y.fn("Worktree.remove")(function*(A){let _=yield*d.context;if(_.project.vcs!=="git")throw new Y7({message:"Worktrees are only supported for git projects"});let R=yield*H(A.directory),g=yield*V(["worktree","list","--porcelain"],{cwd:_.worktree});if(g.code!==0)throw new q1({message:g.stderr||g.text||"Failed to read git worktrees"});let l=z(g.text),m=yield*L(l,R);if(!m?.path){if(!(yield*Z.exists(R).pipe(Y.orDie)))return!0;let e=yield*H(X.join(P$.Path.data,"worktree",_.project.id));if(R!==e&&!R.startsWith(`${e}${X.sep}`))throw new q1({message:"Directory is not a registered or managed worktree"});return yield*b(R),yield*D(R),!0}yield*b(m.path);let h=yield*V(["worktree","remove","--force",m.path],{cwd:_.worktree});if(h.code!==0){let v=yield*V(["worktree","list","--porcelain"],{cwd:_.worktree});if(v.code!==0)throw new q1({message:h.stderr||h.text||v.stderr||v.text||"Failed to remove git worktree"});if((yield*L(z(v.text),R))?.path)throw new q1({message:h.stderr||h.text||"Failed to remove git worktree"})}yield*D(m.path);let f=m.branch?.replace(/^refs\/heads\//,"");if(f){let v=yield*V(["branch","-D",f],{cwd:_.worktree});if(v.code!==0)throw new q1({message:v.stderr||v.text||"Failed to delete worktree branch"})}return!0}),F=Y.fnUntraced(function*(A,_,R){let g=yield*V(A,_);if(g.code!==0)throw R(g);return g}),I=Y.fnUntraced(function*(A,_){let[R,g]=process.platform==="win32"?["cmd",["/c",_]]:["bash",["-lc",_]],l=yield*Q.spawn(s1.make(R,g,{cwd:A,extendEnv:!0,stdin:"ignore"})),[,m]=yield*Y.all([c2.runDrain(l.stdout),c2.mkString(c2.decodeText(l.stderr))],{concurrency:2}).pipe(Y.orDie);return{code:yield*l.exitCode,stderr:m}},Y.scoped,Y.catch(()=>Y.succeed({code:1,stderr:""}))),C=Y.fnUntraced(function*(A,_,R){let g=_.trim();if(!g)return!0;let l=yield*I(A,g);if(l.code===0)return!0;return l8.error("worktree start command failed",{kind:R,directory:A,message:l.stderr}),!1}),S=Y.fnUntraced(function*(A,_){let R=yield*Y.sync(()=>r2.use((h)=>h.select().from(FZ).where(G0(FZ.id,_.projectID)).get())),l=(R?U$.fromRow(R):void 0)?.commands?.start?.trim()??"";if(!(yield*C(A,l,"project")))return!1;return yield*C(A,_.extra??"","worktree"),!0}),E=Y.fnUntraced(function*(A,_){let R=yield*H(A);yield*Y.forEach(_,(g)=>Y.gen(function*(){let l=yield*H(X.resolve(A,g));if(l===R)return;if(!l.startsWith(`${R}${X.sep}`))return;yield*Z.remove(l,{recursive:!0}).pipe(Y.ignore)}),{concurrency:8})}),x=Y.fnUntraced(function*(A){let _=yield*V(["clean","-ffdx"],{cwd:A});if(_.code===0)return _;let R=oH(_.stderr,_.text);if(!R.length)return _;return yield*E(A,R),yield*V(["clean","-ffdx"],{cwd:A})}),k=Y.fn("Worktree.reset")(function*(A){let _=yield*d.context;if(_.project.vcs!=="git")throw new Y7({message:"Worktrees are only supported for git projects"});let R=yield*H(A.directory),g=yield*H(_.worktree);if(R===g)throw new k0({message:"Cannot reset the primary workspace"});let l=yield*V(["worktree","list","--porcelain"],{cwd:_.worktree});if(l.code!==0)throw new k0({message:l.stderr||l.text||"Failed to read git worktrees"});let m=yield*L(z(l.text),R);if(!m?.path)throw new k0({message:"Worktree not found"});let h=m.path,f=yield*J.defaultBranch(_.worktree);if(!f)throw new k0({message:"Default branch not found"});let v=f.ref.indexOf("/");if(f.ref!==f.name&&v>0){let a=f.ref.slice(0,v),G2=f.ref.slice(v+1);yield*F(["fetch",a,G2],{cwd:_.worktree},(R2)=>new k0({message:R2.stderr||R2.text||`Failed to fetch ${f.ref}`}))}yield*F(["reset","--hard",f.ref],{cwd:h},(a)=>new k0({message:a.stderr||a.text||"Failed to reset worktree to target"}));let e=yield*x(h);if(e.code!==0)throw new k0({message:e.stderr||e.text||"Failed to clean worktree"});yield*F(["submodule","update","--init","--recursive","--force"],{cwd:h},(a)=>new k0({message:a.stderr||a.text||"Failed to update submodules"})),yield*F(["submodule","foreach","--recursive","git","reset","--hard"],{cwd:h},(a)=>new k0({message:a.stderr||a.text||"Failed to reset submodules"})),yield*F(["submodule","foreach","--recursive","git","clean","-fdx"],{cwd:h},(a)=>new k0({message:a.stderr||a.text||"Failed to clean submodules"}));let n=yield*V(["-c","core.fsmonitor=false","status","--porcelain=v1"],{cwd:h});if(n.code!==0)throw new k0({message:n.stderr||n.text||"Failed to read git status"});if(n.text.trim())throw new k0({message:`Worktree reset left local changes:
545
- ${n.text.trim()}`});return yield*S(h,{projectID:_.project.id}).pipe(Y.catchCause((a)=>Y.sync(()=>l8.error("worktree start task failed",{cause:a}))),Y.forkIn($)),!0}),T=Y.fn("Worktree.head")(function*(A){return(yield*V(["rev-parse","HEAD"],{cwd:A})).text.trim()}),N=Y.fn("Worktree.isPristine")(function*(A,_){let R=yield*V(["status","--porcelain"],{cwd:A});if(R.code!==0)return!1;if(R.text.trim()!=="")return!1;let g=yield*V(["rev-parse","HEAD"],{cwd:A});return g.code===0&&g.text.trim()===_});return Q7.of({makeWorktreeInfo:W,createFromInfo:j,create:q,remove:U,reset:k,head:T,isPristine:N})})),pH=uJ.pipe(M.provide(l$.defaultLayer),M.provide(a1),M.provide(U$.defaultLayer),M.provide(s2.defaultLayer),M.provide(vJ.layer));var p8={};b2(p8,{layer:()=>aJ,defaultLayer:()=>eH,UpdateInput:()=>tH,Service:()=>J7,Pty:()=>p8,Info:()=>DZ,Event:()=>o8,CreateInput:()=>rH});function oJ($){let Z,X=!1;return()=>{if(X)return Z;return X=!0,Z=$(),Z}}var iH=u0.String.annotate({[iJ]:W8.schema("pty")}).pipe(u0.brand("PtyID")),c8=iH.pipe(pJ(($)=>({ascending:(Z)=>$.make(W8.ascending("pty",Z)),zod:W8.schema("pty").pipe(P.custom())})));var u8=s.create({service:"pty"}),nJ=2097152,sJ=65536,nH=new TextEncoder,zZ=($)=>$.data&&typeof $.data==="object"?$.data:$,sH=($)=>{let Z=JSON.stringify({cursor:$}),X=nH.encode(Z),Q=new Uint8Array(X.length+1);return Q[0]=0,Q.set(X,1),Q},aH=oJ(()=>import("./chunk-j63fkt6n.js")),DZ=P.object({id:c8.zod,title:P.string(),command:P.string(),args:P.array(P.string()),cwd:P.string(),status:P.enum(["running","exited"]),pid:P.number()}).meta({ref:"Pty"}),rH=P.object({command:P.string().optional(),args:P.array(P.string()).optional(),cwd:P.string().optional(),title:P.string().optional(),env:P.record(P.string(),P.string()).optional()}),tH=P.object({title:P.string().optional(),size:P.object({rows:P.number(),cols:P.number()}).optional()}),o8={Created:O2.define("pty.created",P.object({info:DZ})),Updated:O2.define("pty.updated",P.object({info:DZ})),Exited:O2.define("pty.exited",P.object({id:c8.zod,exitCode:P.number()})),Deleted:O2.define("pty.deleted",P.object({id:c8.zod}))};class J7 extends Z2.Service()("@qitqode/Pty"){}var aJ=M.effect(J7,Y.gen(function*(){let $=yield*p.Service,Z=yield*H2.Service;function X(j){try{j.process.kill()}catch{}for(let[q,H]of j.subscribers.entries())try{if(zZ(H)===q)H.close()}catch{}j.subscribers.clear()}let Q=yield*d.make(Y.fn("Pty.state")(function*(j){let q={dir:j.directory,sessions:new Map};return yield*Y.addFinalizer(()=>Y.sync(()=>{for(let H of q.sessions.values())X(H);q.sessions.clear()})),q})),J=Y.fn("Pty.remove")(function*(j){let q=yield*d.get(Q),H=q.sessions.get(j);if(!H)return;q.sessions.delete(j),u8.info("removing session",{id:j}),X(H),yield*$.publish(o8.Deleted,{id:H.info.id})}),B=Y.fn("Pty.list")(function*(){let j=yield*d.get(Q);return Array.from(j.sessions.values()).map((q)=>q.info)}),V=Y.fn("Pty.get")(function*(j){return(yield*d.get(Q)).sessions.get(j)?.info}),O=Y.fn("Pty.create")(function*(j){let q=yield*d.get(Q),H=yield*D0.make(),z=c8.ascending(),L=j.command||O1.preferred(),b=j.args||[];if(O1.login(L))b.push("-l");let D=j.cwd||q.dir,U=yield*Z.trigger("shell.env",{cwd:D},{env:{}}),F={...w4(),...j.env,...U.env,TERM:"xterm-256color",QITQODE_TERMINAL:"1"};if(process.platform==="win32")F.LC_ALL="C.UTF-8",F.LC_CTYPE="C.UTF-8",F.LANG="C.UTF-8";u8.info("creating session",{id:z,cmd:L,args:b,cwd:D});let{spawn:I}=yield*Y.promise(()=>aH()),C=yield*Y.sync(()=>I(L,b,{name:"xterm-256color",cwd:D,env:F})),S={id:z,title:j.title||`Terminal ${z.slice(-4)}`,command:L,args:b,cwd:D,status:"running",pid:C.pid},E={info:S,process:C,buffer:"",bufferCursor:0,cursor:0,subscribers:new Map};return q.sessions.set(z,E),C.onData(S2.bind((x)=>{E.cursor+=x.length;for(let[T,N]of E.subscribers.entries()){if(N.readyState!==1){E.subscribers.delete(T);continue}if(zZ(N)!==T){E.subscribers.delete(T);continue}try{N.send(x)}catch{E.subscribers.delete(T)}}if(E.buffer+=x,E.buffer.length<=nJ)return;let k=E.buffer.length-nJ;E.buffer=E.buffer.slice(k),E.bufferCursor+=k})),C.onExit(S2.bind(({exitCode:x})=>{if(E.info.status==="exited")return;u8.info("session exited",{id:z,exitCode:x}),E.info.status="exited",H.fork($.publish(o8.Exited,{id:z,exitCode:x})),H.fork(J(z))})),yield*$.publish(o8.Created,{info:S}),S}),G=Y.fn("Pty.update")(function*(j,q){let z=(yield*d.get(Q)).sessions.get(j);if(!z)return;if(q.title)z.info.title=q.title;if(q.size)z.process.resize(q.size.cols,q.size.rows);return yield*$.publish(o8.Updated,{info:z.info}),z.info}),W=Y.fn("Pty.resize")(function*(j,q,H){let L=(yield*d.get(Q)).sessions.get(j);if(L&&L.info.status==="running")L.process.resize(q,H)}),K=Y.fn("Pty.write")(function*(j,q){let z=(yield*d.get(Q)).sessions.get(j);if(z&&z.info.status==="running")z.process.write(q)}),y=Y.fn("Pty.connect")(function*(j,q,H){let L=(yield*d.get(Q)).sessions.get(j);if(!L){q.close();return}u8.info("client connected to session",{id:j});let b=zZ(q);L.subscribers.delete(b),L.subscribers.set(b,q);let D=()=>{L.subscribers.delete(b)},U=L.bufferCursor,F=L.cursor,I=H===-1?F:typeof H==="number"&&Number.isSafeInteger(H)?Math.max(0,H):0,C=(()=>{if(!L.buffer)return"";if(I>=F)return"";let S=Math.max(0,I-U);if(S>=L.buffer.length)return"";return L.buffer.slice(S)})();if(C)try{for(let S=0;S<C.length;S+=sJ)q.send(C.slice(S,S+sJ))}catch{D(),q.close();return}try{q.send(sH(F))}catch{D(),q.close();return}return{onMessage:(S)=>{L.process.write(typeof S==="string"?S:new TextDecoder().decode(S))},onClose:()=>{u8.info("client disconnected from session",{id:j}),D()}}});return J7.of({list:B,get:V,create:O,update:G,remove:J,resize:W,write:K,connect:y})})),eH=aJ.pipe(M.provide(p.layer),M.provide(H2.defaultLayer));var s8={};b2(s8,{layer:()=>$B,defaultLayer:()=>YG,Service:()=>W7,MAX_PRE_REACT:()=>tJ,MAX_POST_REACT:()=>eJ,Actor:()=>s8});var B7=($,Z,X)=>Y.uninterruptible(Y.gen(function*(){let Q=yield*M2.Service;yield*Q.updateStatus($,Z,{status:"running"}).pipe(Y.ignore);let J=yield*X.pipe(Y.interruptible,Y.exit);if(o2.isSuccess(J))return yield*Q.updateStatus($,Z,{status:"idle",lastOutcome:"success",lastError:void 0}).pipe(Y.ignore),J.value;let B=J.cause,V=V2.hasInterruptsOnly(B);return yield*Q.updateStatus($,Z,{status:"idle",lastOutcome:V?"cancelled":"failure",lastError:V?void 0:$G(B)}).pipe(Y.ignore),yield*Y.failCause(B)}));function $G($){return V2.pretty($)}var V7=s.create({service:"actor.spawn"}),tJ=3,eJ=3,XG=`
546
-
547
- ---
548
-
549
- ## Return format (required)
550
-
551
- Your FINAL assistant message \u2014 what the spawning agent will receive \u2014 MUST start with this header block:
552
-
553
- **Status**: success | partial | failed | blocked
554
- **Summary**: <one sentence describing what happened>
555
-
556
- After the header, include the actual deliverable (whatever the task asked for in its prompt).
557
-
558
- If applicable, also include below the deliverable:
559
-
560
- **Files touched**: <comma-separated paths or "(none)">
561
- **Findings worth promoting**: <bullet list of cross-task transferable facts; "(none)" if just routine work>
562
-
563
- This format lets the spawning agent and the checkpoint writer extract your progress without parsing free-form prose. Do NOT precede the header with an introduction \u2014 your final message must start with "**Status**:".
564
- `;class W7 extends Z2.Service()("@qitqode/Actor"){}var $B=M.effect(W7,Y.gen(function*(){let $=yield*J2.Service,Z=yield*M2.Service,X=yield*g2.Service,Q=yield*m$.Service,J=yield*o0.Service,B=yield*z0.Service,V=yield*H2.Service,O=yield*p.Service,G=yield*M0.Service,W=yield*d2.Scope,K=new Map,y=Y.fn("Actor.runAgentLoop")(function*(F){let I=yield*Q.prompt({sessionID:F.sessionID,agent:F.agentType,agentID:F.actorID,source:F.source,provenance:F.provenance,model:F.model,task_id:F.task_id,parts:[{type:"text",text:F.task}],...F.format?{format:F.format}:{}}),C=I?.info,S=C?.role==="assistant"?C.structured:void 0;return{finalText:S!==void 0?void 0:I?.parts.findLast((x)=>x.type==="text")?.text,structured:S}}),j=(F)=>Y.gen(function*(){let I=yield*k2.make(),C=F.description??F.agentType;if(F.task_id)yield*G.start({session_id:F.parentSessionID,id:F.task_id,owner:F.actorID}).pipe(Y.ignoreCause({log:"Warn",message:`auto-start of task ${F.task_id} failed`}));let S=(R,g)=>F.background&&F.agentType!=="checkpoint-writer"?J.send({receiverSessionID:F.parentSessionID,receiverActorID:F.parentActorID??"main",senderSessionID:F.sessionID,senderActorID:F.actorID,type:"actor_notification",content:hY({actorID:F.actorID,description:C,status:R,...g})}).pipe(Y.ignore):Y.void,E=F.parentSessionID===F.sessionID?"subagent":"peer",x=yield*X.get(F.agentType),k=x?!z2.disabled(["write"],x.permission).has("write"):!0,T=Y.gen(function*(){let R,g,l=0,m;while(!0){let h=l>0?m:void 0,f=yield*B7(F.sessionID,F.actorID,y({...F,task:h?h.reason:F.task,source:h?"hook":"spawn",provenance:h?{hookPhase:"pre",hookIteration:l,pluginNames:h.contributingPluginNames,hookIDs:h.contributingHookIDs}:void 0}));if(R=f.finalText,g=f.structured,l++,l>tJ){yield*O.publish(i8.ReActMaxReached,{phase:"pre",actorID:F.actorID,agentType:F.agentType}),V7.warn("actor.preStop hit MAX_PRE_REACT cap; skipping further hook checks",{actorID:F.actorID,totalTurns:l});break}let v=yield*V.triggerActorPreStop({sessionID:F.sessionID,parentSessionID:F.parentSessionID,actorID:F.actorID,parentActorID:F.parentActorID,agentType:F.agentType,mode:E,lifecycle:F.lifecycle,finalText:R,task:F.task,description:F.description,task_id:F.task_id,iteration:l-1});if(!v.continue)break;if(!v.reason)break;yield*O.publish(i8.ReActReentered,{phase:"pre",actorID:F.actorID,agentType:F.agentType,iteration:l,triggeredByPlugins:v.contributingPluginNames,reasonPreview:v.reason.slice(0,200)}),m={reason:v.reason,contributingPluginNames:v.contributingPluginNames,contributingHookIDs:v.contributingHookIDs}}return{finalText:R,structured:g}}).pipe(Y.provideService(M2.Service,Z),Y.matchCauseEffect({onSuccess:({finalText:R,structured:g})=>Y.gen(function*(){let l=R;if(F.gateEligible){let j2=0;while(!0){let T0=yield*j1.decide({session_id:F.parentSessionID,owner:F.actorID,reactCount:j2,maxReact:p9,mode:"subagent"}).pipe(Y.provideService(M0.Service,G));if(!T0.needReentry)break;j2++;let C2=yield*B7(F.sessionID,F.actorID,y({...F,task:T0.reentryText,source:"hook",provenance:{hookPhase:"post",hookIteration:j2,pluginNames:[],hookIDs:[]}})).pipe(Y.catch(()=>Y.gen(function*(){return V7.error("actor.gate runTurn failed",{actorID:F.actorID}),{finalText:void 0,structured:void 0}})),Y.provideService(M2.Service,Z));if(C2.finalText!==void 0)l=C2.finalText;if(C2.structured!==void 0)g=C2.structured}}let m=F.gateEligible?yield*G.list({session_id:F.parentSessionID,owner:F.actorID,include_terminal:!1}).pipe(Y.orElseSucceed(()=>[])):[],f=m.filter((j2)=>j2.status==="open"||j2.status==="in_progress").length>0?"partial":m.length>0?"blocked":void 0,v=rJ(l),e=f??v.status,n=m.map((j2)=>j2.id),a=f&&n.length>0?`${l??""}
565
-
566
- **Incomplete tasks**: ${n.join(", ")}`:l,G2=g!==void 0?JSON.stringify(g):a??"(no output)";yield*S("completed",{result:G2,...e?{reportedStatus:e}:{},...v.summary?{reportedSummary:v.summary}:{}}),yield*k2.succeed(I,{status:"success",...a!==void 0?{finalText:a}:{},...g!==void 0?{structured:g}:{},...e?{reportedStatus:e}:{},...v.summary?{reportedSummary:v.summary}:{},...n.length>0?{incompleteTasks:n}:{}});let R2=0,t=R,N2;while(!0){let j2=yield*V.triggerActorPostStop({sessionID:F.sessionID,parentSessionID:F.parentSessionID,actorID:F.actorID,parentActorID:F.parentActorID,agentType:F.agentType,mode:E,lifecycle:F.lifecycle,finalText:t,task:F.task,description:F.description,task_id:F.task_id,outcome:"success",iteration:R2,canWrite:k});if(!j2.continue)break;if(!j2.reason)break;if(R2>=eJ){yield*O.publish(i8.ReActMaxReached,{phase:"post",actorID:F.actorID,agentType:F.agentType}),V7.warn("actor.postStop hit MAX_POST_REACT cap; skipping further hook checks",{actorID:F.actorID,totalTurns:R2+1});break}R2++,yield*O.publish(i8.ReActReentered,{phase:"post",actorID:F.actorID,agentType:F.agentType,iteration:R2,triggeredByPlugins:j2.contributingPluginNames,reasonPreview:j2.reason.slice(0,200)}),N2={reason:j2.reason,contributingPluginNames:j2.contributingPluginNames,contributingHookIDs:j2.contributingHookIDs};let T0=yield*B7(F.sessionID,F.actorID,y({...F,task:N2.reason,source:"hook",provenance:{hookPhase:"post",hookIteration:R2,pluginNames:N2.contributingPluginNames,hookIDs:N2.contributingHookIDs}})).pipe(Y.catch(()=>Y.gen(function*(){return V7.error("actor.postStop runTurn failed",{actorID:F.actorID}),{finalText:void 0,structured:void 0}})),Y.provideService(M2.Service,Z));if(T0.finalText===void 0)break;t=T0.finalText}yield*Y.sync(()=>K.delete(F.actorID))}),onFailure:(R)=>Y.gen(function*(){let g=V2.hasInterruptsOnly(R),l=V2.pretty(R);yield*S(g?"cancelled":"failed",g?{}:{error:l}),yield*k2.succeed(I,g?{status:"cancelled"}:{status:"failure",error:l}),yield*Y.sync(()=>K.delete(F.actorID))})})),N=yield*_0;return{fiber:yield*(N?T.pipe(Y.provideService(_0,N)):T).pipe(Y.forkIn(W)),outcome:I}}),q=Y.fn("Actor.spawnPeer")(function*(F){let I=yield*$.create({parentID:F.sessionID,contextFrom:F.context==="full"?F.sessionID:void 0,title:`${F.agentType}: ${F.task.slice(0,40)}`});if(yield*Z.register({sessionID:I.id,actorID:I.id,mode:"peer",parentActorID:F.parentActorID,agent:F.agentType,description:F.description??F.agentType,contextMode:F.context,contextWatermark:void 0,background:F.background,lifecycle:F.lifecycle??"persistent",tools:F.tools}),F.forkContext)K.set(I.id,F.forkContext);let{fiber:C,outcome:S}=yield*j({sessionID:I.id,parentSessionID:F.sessionID,parentActorID:F.parentActorID,actorID:I.id,agentType:F.agentType,task:F.task,description:F.description,background:F.background,model:F.model,lifecycle:F.lifecycle??"persistent",task_id:F.task_id,format:F.format});if(!F.background)yield*n8.join(C).pipe(Y.ignore);return{actorID:I.id,sessionID:I.id,outcome:S}}),H=Y.fn("Actor.spawnSubagent")(function*(F){let I=yield*Z.allocateActorID(F.sessionID,F.agentType),C=F.context==="full"?yield*$.lastMainMessageID(F.sessionID):void 0;if(yield*Z.register({sessionID:F.sessionID,actorID:I,mode:"subagent",parentActorID:F.parentActorID,agent:F.agentType,description:F.description??F.agentType,contextMode:F.context,contextWatermark:C,background:F.background,lifecycle:F.lifecycle??"ephemeral",tools:F.tools}),F.onActorID)yield*Y.sync(()=>F.onActorID(I)).pipe(Y.ignore);if(F.forkContext)K.set(I,F.forkContext);let S=yield*X.get(F.agentType),E=S?.mode==="subagent"&&!S?.prompt&&F.agentType!=="checkpoint-writer",x=E?F.task+XG:F.task,{fiber:k,outcome:T}=yield*j({sessionID:F.sessionID,parentSessionID:F.parentSessionID??F.sessionID,parentActorID:F.parentActorID,actorID:I,agentType:F.agentType,task:x,description:F.description,background:F.background,model:F.model,lifecycle:F.lifecycle??"ephemeral",task_id:F.task_id,gateEligible:E,format:F.format});if(F.onReady)yield*Y.ignore(F.onReady({actorID:I,sessionID:F.sessionID}));if(!F.background)yield*n8.join(k).pipe(Y.ignore);return{actorID:I,sessionID:F.sessionID,outcome:T}}),z=Y.fn("Actor.spawn")(function*(F){let I=yield*_0,C=F.mode==="peer"?q(F):H(F);return yield*I?C.pipe(Y.provideService(_0,I)):C}),L=Y.fn("Actor.cancel")(function*(F,I,C){let S=yield*Z.listByParent(F,I);yield*Y.forEach(S,(E)=>L(F,E.actorID,C),{concurrency:"unbounded",discard:!0}),yield*B.cancelActor(F,I),yield*Z.updateStatus(F,I,{status:"idle",lastOutcome:"cancelled"}).pipe(Y.ignore),yield*Y.sync(()=>K.delete(I))}),b=Y.fn("Actor.getForkContext")(function*(F){return K.get(F)}),D=W7.of({spawn:z,cancel:L,getForkContext:b}),U=Q$.current;return Q$.current=D,yield*Y.addFinalizer(()=>Y.sync(()=>{if(Q$.current===D)Q$.current=U})),D})),YG=M.suspend(()=>$B.pipe(M.provide(J2.defaultLayer),M.provide(M2.defaultLayer),M.provide(g2.defaultLayer),M.provide(m$.defaultLayer),M.provide(z0.defaultLayer),M.provide(o0.defaultLayer),M.provide(H2.defaultLayer),M.provide(p.layer),M.provide(M0.defaultLayer)));var t8={};b2(t8,{layer:()=>fB,defaultLayer:()=>mG,WorkflowRuntime:()=>t8,Service:()=>j7});import{createHash as EB}from"crypto";var QG=/export\s+const\s+meta\s*=\s*/;function PZ($){let Z=QG.exec($);if(!Z)return{ok:!1,error:"workflow script must start with `export const meta = { ... }`"};let X=$.indexOf("{",Z.index+Z[0].length);if(X===-1)return{ok:!1,error:"workflow script must start with `export const meta = { ... }`"};let Q=JG($,X);if(Q===-1)return{ok:!1,error:"could not locate a balanced meta object literal"};let J=$.slice(X,Q+1),B=BG(J);if(!B.ok)return{ok:!1,error:`meta is not a valid object literal: ${B.error}`};let V=B.value;if(typeof V!=="object"||V===null||Array.isArray(V))return{ok:!1,error:"meta must be an object"};let O=V;if(typeof O.name!=="string"||!O.name)return{ok:!1,error:"meta.name (non-empty string) is required"};if(typeof O.description!=="string"||!O.description)return{ok:!1,error:"meta.description (non-empty string) is required"};let G=Q+1+($[Q+1]===";"?1:0),W=$.slice(Z.index,G),K=$.slice(0,Z.index)+W.replace(/[^\n]/g," ")+$.slice(G);return{ok:!0,meta:O,body:K}}function JG($,Z){let X=0,Q="";for(let J=Z;J<$.length;J++){let B=$[J];if(Q){if(B==="\\"){J++;continue}if(B===Q)Q="";continue}if(B==="/"&&$[J+1]==="/"){J+=2;while(J<$.length&&$[J]!==`
567
- `)J++;continue}if(B==="/"&&$[J+1]==="*"){J+=2;while(J<$.length&&!($[J]==="*"&&$[J+1]==="/"))J++;J++;continue}if(B==='"'||B==="'"||B==="`"){Q=B;continue}if(B==="{")X++;else if(B==="}"){if(X--,X===0)return J}}return-1}var ZB=100;function BG($){let Z={text:$,pos:0,depth:0};try{p0(Z);let X=NZ(Z);if(p0(Z),Z.pos!==Z.text.length)throw new j0(`unexpected token at offset ${Z.pos}`);return{ok:!0,value:X}}catch(X){if(X instanceof j0)return{ok:!1,error:X.message};throw X}}class j0 extends Error{}function p0($){for(;;){let Z=$.text[$.pos];if(Z===" "||Z==="\t"||Z===`
568
- `||Z==="\r"||Z==="\f"||Z==="\v"){$.pos++;continue}if(Z==="/"&&$.text[$.pos+1]==="/"){$.pos+=2;while($.pos<$.text.length&&$.text[$.pos]!==`
569
- `)$.pos++;continue}if(Z==="/"&&$.text[$.pos+1]==="*"){$.pos+=2;while($.pos<$.text.length&&!($.text[$.pos]==="*"&&$.text[$.pos+1]==="/"))$.pos++;if($.pos>=$.text.length)throw new j0("unterminated comment");$.pos+=2;continue}return}}function NZ($){let Z=$.text[$.pos];if(Z===void 0)throw new j0("unexpected end of input");if(Z==="{")return VG($);if(Z==="[")return WG($);if(Z==='"'||Z==="'")return XB($);if(Z==="-"||Z>="0"&&Z<="9")return HG($);if(qZ($,"true"))return!0;if(qZ($,"false"))return!1;if(qZ($,"null"))return null;throw new j0(`unexpected token at offset ${$.pos} (only data literals are allowed)`)}function VG($){if(++$.depth>ZB)throw new j0("meta nesting too deep");$.pos++;let Z={};if(p0($),$.text[$.pos]==="}")return $.pos++,$.depth--,Z;for(;;){p0($);let X=KG($);if(p0($),$.text[$.pos]!==":")throw new j0(`expected ':' after key '${X}' at offset ${$.pos}`);$.pos++,p0($),Z[X]=NZ($),p0($);let Q=$.text[$.pos];if(Q===","){if($.pos++,p0($),$.text[$.pos]==="}")return $.pos++,$.depth--,Z;continue}if(Q==="}")return $.pos++,$.depth--,Z;throw new j0(`expected ',' or '}' at offset ${$.pos}`)}}function WG($){if(++$.depth>ZB)throw new j0("meta nesting too deep");$.pos++;let Z=[];if(p0($),$.text[$.pos]==="]")return $.pos++,$.depth--,Z;for(;;){p0($),Z.push(NZ($)),p0($);let X=$.text[$.pos];if(X===","){if($.pos++,p0($),$.text[$.pos]==="]")return $.pos++,$.depth--,Z;continue}if(X==="]")return $.pos++,$.depth--,Z;throw new j0(`expected ',' or ']' at offset ${$.pos}`)}}function KG($){let Z=$.text[$.pos];if(Z==='"'||Z==="'")return XB($);if(Z!==void 0&&/[A-Za-z_$]/.test(Z)){let X=$.pos;$.pos++;while($.pos<$.text.length&&/[A-Za-z0-9_$]/.test($.text[$.pos]))$.pos++;return $.text.slice(X,$.pos)}throw new j0(`expected a property name at offset ${$.pos}`)}function XB($){let Z=$.text[$.pos];$.pos++;let X="";for(;;){let Q=$.text[$.pos];if(Q===void 0||Q===`
570
- `)throw new j0("unterminated string");if(Q==="\\"){let J=$.text[$.pos+1];if($.pos+=2,J==="n")X+=`
571
- `;else if(J==="t")X+="\t";else if(J==="r")X+="\r";else if(J==="b")X+="\b";else if(J==="f")X+="\f";else if(J==="v")X+="\v";else if(J==="0")X+="\x00";else if(J==="u"){let B=$.text.slice($.pos,$.pos+4);if(!/^[0-9a-fA-F]{4}$/.test(B))throw new j0("invalid \\u escape");X+=String.fromCharCode(parseInt(B,16)),$.pos+=4}else if(J===void 0)throw new j0("unterminated string");else X+=J;continue}if(Q===Z)return $.pos++,X;X+=Q,$.pos++}}function HG($){let Z=$.pos;if($.text[$.pos]==="-")$.pos++;while($.pos<$.text.length&&/[0-9]/.test($.text[$.pos]))$.pos++;if($.text[$.pos]==="."){$.pos++;while($.pos<$.text.length&&/[0-9]/.test($.text[$.pos]))$.pos++}if($.text[$.pos]==="e"||$.text[$.pos]==="E"){if($.pos++,$.text[$.pos]==="+"||$.text[$.pos]==="-")$.pos++;while($.pos<$.text.length&&/[0-9]/.test($.text[$.pos]))$.pos++}let X=$.text.slice(Z,$.pos),Q=Number(X);if(!Number.isFinite(Q))throw new j0(`invalid number '${X}'`);return Q}function qZ($,Z){if($.text.startsWith(Z,$.pos)){let X=$.text[$.pos+Z.length];if(X===void 0||!/[A-Za-z0-9_$]/.test(X))return $.pos+=Z.length,!0}return!1}var YB=O2.define("workflow.phase",P.object({sessionID:D2.zod,runID:P.string(),title:P.string()})),QB=O2.define("workflow.log",P.object({sessionID:D2.zod,runID:P.string(),message:P.string()})),JB=O2.define("workflow.started",P.object({sessionID:D2.zod,runID:P.string(),name:P.string()})),K7=O2.define("workflow.finished",P.object({sessionID:D2.zod,runID:P.string(),status:P.enum(["completed","failed","cancelled"]),error:P.string().optional()})),BB=O2.define("workflow.agent_failed",P.object({sessionID:D2.zod,runID:P.string(),actorID:P.string().optional(),agentType:P.string(),label:P.string().optional(),phase:P.string().optional(),reason:P.enum(["over-cap","spawn-reject","timeout","actor-error","no-deliverable"]),errorMessage:P.string().optional()})),VB=O2.define("workflow.child_failed",P.object({sessionID:D2.zod,runID:P.string(),childRunID:P.string(),name:P.string(),status:P.enum(["failed","cancelled"]),error:P.string().optional()}));import xZ from"path";import{createHash as GG}from"crypto";var O0=R4("workflow_run",{id:X0().primaryKey(),session_id:X0().$type().notNull().references(()=>S0.id,{onDelete:"cascade"}),name:X0().notNull(),status:X0().$type().notNull(),running:W1().notNull().default(0),succeeded:W1().notNull().default(0),failed:W1().notNull().default(0),current_phase:X0(),parent_actor_id:X0(),args:X0({mode:"json"}),script_sha:X0(),agent_timeout_ms:W1(),error:X0(),...WB},($)=>[e1("workflow_run_session_idx").on($.session_id),e1("workflow_run_status_idx").on($.status)]);function wZ($){if($===null||typeof $!=="object")return $;if(Array.isArray($))return $.map(wZ);return Object.fromEntries(Object.keys($).sort().map((Z)=>[Z,wZ($[Z])]))}function KB($,Z){let X=wZ({prompt:$,agentType:Z.agentType??null,model:Z.model??null,schema:Z.schema??null,phase:Z.phase??null});return GG("sha256").update(JSON.stringify(X)).digest("hex")}var a8=()=>xZ.join(P$.Path.data,"workflow"),o$=new Map;function HB($,Z){if(Z.length===0)return Promise.resolve();let Q=(o$.get($)??Promise.resolve()).catch(()=>{}).then(async()=>{let J=await import("fs/promises");await J.mkdir(a8(),{recursive:!0}),await J.appendFile(LZ($),Z.map((B)=>JSON.stringify(B)+`
572
- `).join(""))});return o$.set($,Q),Q.finally(()=>{if(o$.get($)===Q)o$.delete($)})}var jG=/^wf_[0-9A-Za-z]+$/,GB=($)=>{if(!jG.test($))throw Error(`invalid workflow runID: ${JSON.stringify($)}`);return $},jB=($)=>xZ.join(a8(),`${GB($)}.js`),LZ=($)=>xZ.join(a8(),`${GB($)}.jsonl`);function OB($){return{runID:$.id,sessionID:$.session_id,name:$.name,status:$.status,running:$.running,succeeded:$.succeeded,failed:$.failed,...$.current_phase?{currentPhase:$.current_phase}:{},...$.parent_actor_id?{parentActorID:$.parent_actor_id}:{},...$.args!==null&&$.args!==void 0?{args:$.args}:{},...$.script_sha?{scriptSha:$.script_sha}:{},...$.agent_timeout_ms!==null&&$.agent_timeout_ms!==void 0?{agentTimeoutMs:$.agent_timeout_ms}:{},...$.error?{error:$.error}:{},createdAt:$.time_created,updatedAt:$.time_updated}}var OG=($)=>Y.sync(()=>r2.use((Z)=>Z.insert(O0).values({id:$.runID,session_id:$.sessionID,name:$.name,status:"running",running:0,succeeded:0,failed:0,parent_actor_id:$.parentActorID??null,args:$.args??null,script_sha:$.scriptSha??null,agent_timeout_ms:$.agentTimeoutMs??null}).onConflictDoUpdate({target:O0.id,set:{status:"running",running:0,succeeded:0,failed:0,script_sha:$.scriptSha??null,...$.agentTimeoutMs!==void 0?{agent_timeout_ms:$.agentTimeoutMs}:{}}}).run())),FG=($)=>Y.sync(()=>r2.use((Z)=>Z.update(O0).set({current_phase:$.phase}).where(G0(O0.id,$.runID)).run())),yG=($)=>Y.sync(()=>r2.use((Z)=>Z.update(O0).set({running:$.running,succeeded:$.succeeded,failed:$.failed}).where(G0(O0.id,$.runID)).run())),zG=($)=>Y.sync(()=>r2.use((Z)=>Z.update(O0).set({status:$.status,...$.error?{error:$.error}:{}}).where(G0(O0.id,$.runID)).run())),DG=($)=>Y.sync(()=>r2.use((Z)=>{return(($?.sessionID)?Z.select().from(O0).where(G0(O0.session_id,$.sessionID)).orderBy(v8(O0.time_created)).all():Z.select().from(O0).orderBy(v8(O0.time_created)).all()).map(OB)})),qG=($)=>Y.sync(()=>r2.use((Z)=>{let X=Z.select().from(O0).where(G0(O0.id,$)).get();return X?OB(X):void 0})),PG=($,Z)=>Y.promise(async()=>{await(await import("fs/promises")).mkdir(a8(),{recursive:!0}),await Bun.write(jB($),Z)}),NG=($)=>Y.promise(()=>Bun.file(jB($)).text()),wG=($,Z)=>Y.promise(()=>HB($,[Z])),xG=($,Z)=>Y.promise(()=>HB($,Z)),LG=($)=>Y.promise(async()=>{let Z=Bun.file(LZ($));if(!await Z.exists())return{results:new Map,pass:1};let X=await Z.text(),Q=new Map,J=0;for(let B of X.split(`
573
- `)){if(!B)continue;let V;try{V=JSON.parse(B)}catch{continue}if(typeof V.pass==="number"&&V.pass>J)J=V.pass;if(V.t==="agent")Q.set(V.key,V.result)}return{results:Q,pass:J+1}}),bG=($)=>Y.promise(async()=>{let X=(o$.get($)??Promise.resolve()).catch(()=>{}).then(async()=>{await(await import("fs/promises")).mkdir(a8(),{recursive:!0}),await Bun.write(LZ($),"")});o$.set($,X);try{await X}finally{if(o$.get($)===X)o$.delete($)}}),v2={recordStart:OG,recordPhase:FG,flushCounters:yG,recordTerminal:zG,list:DG,load:qG,writeScript:PG,readScript:NG,appendJournal:wG,appendJournalSync:xG,loadJournal:LG,clearJournal:bG};class bZ{#$=new Map;get($){return this.#$.get($)}set($){return this.#$.set($.runID,$),$}values(){return this.#$.values()}clear(){this.#$.clear()}}function FB($){let Z=(B)=>Y.gen(function*(){if(B.status!=="running")return;if(yield*X(B),yield*$.flushNow(B),yield*v2.recordTerminal({runID:B.runID,status:"cancelled"}).pipe(Y.ignore),B.fiber)yield*n8.interrupt(B.fiber);B.status="cancelled",yield*$.bus.publish(K7,{sessionID:B.sessionID,runID:B.runID,status:"cancelled"}),yield*k2.succeed(B.deferred,{status:"cancelled"})}).pipe(Y.provideService(_0,B.instance)),X=(B)=>Y.gen(function*(){let V=Q$.current;if(V)yield*Y.forEach([...B.childActorIDs],(O)=>V.cancel(B.sessionID,O,"graceful").pipe(Y.ignore),{concurrency:"unbounded",discard:!0});yield*Y.forEach([...B.worktrees],(O)=>$.worktree.remove({directory:O}).pipe(Y.ignore),{concurrency:"unbounded",discard:!0}),B.worktrees.clear(),yield*Y.forEach([...B.childRunIDs],(O)=>Y.gen(function*(){let G=$.runs.get(O);if(G&&G.status==="running")yield*Z(G)}).pipe(Y.ignore),{concurrency:"unbounded",discard:!0})}).pipe(Y.provideService(_0,B.instance));return{reclaim:X,cancelEntry:Z,complete:(B)=>Y.gen(function*(){if(B.entry.status="completed",yield*$.flushNow(B.entry),yield*v2.recordTerminal({runID:B.entry.runID,status:"completed"}).pipe(Y.ignore),yield*$.bus.publish(K7,{sessionID:B.sessionID,runID:B.entry.runID,status:"completed"}),B.notifyOnTerminal!==!1)yield*$.inbox.send({receiverSessionID:B.sessionID,receiverActorID:B.parentActorID,senderSessionID:B.sessionID,senderActorID:"workflow",type:"actor_notification",content:`Workflow completed. run_id: ${B.entry.runID}
574
- `+JSON.stringify(B.result??null).slice(0,4000)}).pipe(Y.ignore);yield*k2.succeed(B.entry.deferred,{status:"completed",result:B.result})}).pipe(Y.provideService(_0,B.entry.instance)),fail:(B)=>Y.gen(function*(){if(yield*X(B.entry),B.entry.status="failed",yield*$.flushNow(B.entry),yield*v2.recordTerminal({runID:B.entry.runID,status:"failed",error:B.error}).pipe(Y.ignore),yield*$.bus.publish(K7,{sessionID:B.sessionID,runID:B.entry.runID,status:"failed",error:B.error}),B.notifyOnTerminal!==!1)yield*$.inbox.send({receiverSessionID:B.sessionID,receiverActorID:B.parentActorID,senderSessionID:B.sessionID,senderActorID:"workflow",type:"actor_notification",content:`Workflow failed. run_id: ${B.entry.runID}
575
- error: ${B.error}`}).pipe(Y.ignore);yield*k2.succeed(B.entry.deferred,{status:"failed",error:B.error})}).pipe(Y.provideService(_0,B.entry.instance))}}import UG from"os";function UZ($){let Z=0,X=[],Q=()=>{Z--;let J=X.shift();if(J)J()};return{run(J){return new Promise((B,V)=>{let O=()=>{Z++,J().then((G)=>{Q(),B(G)},(G)=>{Q(),V(G)})};if(Z<$)O();else X.push(O)})}}}function yB(){let $=UG.cpus().length;return Math.min(16,2*Math.max(1,$>0?$:4))}function zB($,Z){return Y.gen(function*(){if(Z)yield*v2.clearJournal($).pipe(Y.ignore);let X=yield*v2.loadJournal($);return{results:X.results,pass:X.pass,occurrences:new Map}})}function DB($,Z){let X=$.occurrences.get(Z)??0;return $.occurrences.set(Z,X+1),Z+":"+X}function qB($,Z,X,Q){return v2.appendJournalSync($,[{t:"agent",key:X,result:Q,pass:Z.pass}]).pipe(Y.ignore)}var PB=Symbol("straggler-timeout");function wB($){let Z=(G,W,K,y)=>{let j=W.timeoutMs??$.runAgentTimeoutMs;if(!j||j<=0)return K;return Y.raceFirst(K,Y.sleep(`${j} millis`).pipe(Y.as(PB))).pipe(Y.flatMap((q)=>q===PB?Y.gen(function*(){let H=$.getActor();if(H)yield*H.cancel($.sessionID,G,"graceful").pipe(Y.ignore);return yield*Y.sync(()=>{try{y?.()}catch{}}),null}):Y.succeed(q)))},X=(G,W,K={})=>{try{$.bridge.fork($.bus.publish(BB,{sessionID:$.sessionID,runID:$.runID,actorID:K.actorID,agentType:G.agentType??"general",label:G.label,phase:G.phase??$.entry.currentPhase,reason:W,errorMessage:K.errorMessage}).pipe(Y.ignore))}catch{}},Q=(G)=>G.label?G.phase?`[${G.phase}] ${G.label}`:G.label:G.phase?`[${G.phase}]`:void 0,J=(G,W,K)=>({mode:"subagent",sessionID:$.sessionID,agentType:G.agentType??"general",description:Q(G),task:W,context:"none",tools:G.tools?[...G.tools]:"INHERIT",background:!0,parentActorID:$.parentActorID,model:K,onActorID:(y)=>$.entry.childActorIDs.add(y),...G.schema?{format:{type:"json_schema",schema:G.schema,retryCount:2}}:{}}),B=async(G,W,K,y)=>{$.entry.running++,$.scheduleFlush($.entry);let j="actor-error",q,H,z=await $.bridge.promise(Y.gen(function*(){let L=yield*G.spawn(J(K,W,y));q=L.actorID;let b=yield*Z(L.actorID,K,k2.await(L.outcome).pipe(Y.map((D)=>{if(D.status!=="success")return j="actor-error",H=D.error,null;let U=K.schema?D.structured??null:D.structured??D.finalText??null;if(U===null)j="no-deliverable";return U})),()=>{j="timeout"});return $.entry.childActorIDs.delete(L.actorID),b})).catch((L)=>{return j="spawn-reject",H=L instanceof Error?L.message:String(L),null});if($.entry.running--,z!==null)$.entry.succeeded++;else $.entry.failed++,X(K,j,{actorID:q,errorMessage:H});return $.scheduleFlush($.entry),z},V=async(G,W,K,y)=>{let j="actor-error",q,H,z=await $.bridge.promise(Y.gen(function*(){let x=yield*$.worktree.makeWorktreeInfo();return yield*$.worktree.createFromInfo(x),x})).catch((x)=>{return H=x instanceof Error?x.message:String(x),null});if(!z)return X(K,"spawn-reject",{errorMessage:H}),null;$.entry.worktrees.add(z.directory);let L=await $.bridge.promise($.worktree.head(z.directory)).catch(()=>""),b=await S2.provide({directory:z.directory,fn:()=>Promise.resolve(S2.current)}),D=await $.bridge.promise(NB().pipe(Y.provideService(_0,b)));$.entry.running++,$.scheduleFlush($.entry);let U=await S2.provide({directory:z.directory,fn:()=>D.promise(Y.gen(function*(){let x=yield*G.spawn(J(K,W,y));q=x.actorID;let k=yield*Z(x.actorID,K,k2.await(x.outcome),()=>{j="timeout"});if($.entry.childActorIDs.delete(x.actorID),k===null)return null;if(k.status!=="success")j="actor-error",H=k.error;return{actorID:x.actorID,outcome:k}})).catch((x)=>{return j="spawn-reject",H=x instanceof Error?x.message:String(x),null})}).catch((x)=>{return j="spawn-reject",H=x instanceof Error?x.message:String(x),null}),F=!!U&&U.outcome.status==="success";if($.entry.running--,F)$.entry.succeeded++;else $.entry.failed++,X(K,j,{actorID:q,errorMessage:H});$.scheduleFlush($.entry);let I=U&&U.outcome.status==="success"?K.schema?U.outcome.structured??null:U.outcome.structured??U.outcome.finalText??null:null,C=L!==""&&await $.bridge.promise($.worktree.isPristine(z.directory,L)).catch(()=>!1);if(!(F&&!C))return await $.bridge.promise($.worktree.remove({directory:z.directory})).catch(()=>{return}),$.entry.worktrees.delete(z.directory),F?I:null;let E={branch:z.branch,directory:z.directory,changed:!0};if(I&&typeof I==="object"&&!Array.isArray(I))return{...I,_worktree:E};return{_worktree:E,result:I}},O=async(G,W,K)=>{if($.entry.agentCount>=$.lifecycleCap)return $.warnCapOnce(),X(G,"over-cap"),null;$.entry.agentCount++;let y=$.getActor();if(!y)throw Error("Actor service unavailable");let j=await $.bridge.promise($.resolveAgentModel(G.model,$.defaultModel,$.entry.warnedModelRefs));return K(y,W,G,j)};return(G,W)=>{let K=W??{},y=String(G);if(K.isolation!=="worktree"){let j=KB(y,{agentType:K.agentType,model:K.model,schema:K.schema,phase:K.phase}),q=DB($.journal,j);if($.journal.results.has(q))return $.entry.succeeded++,$.scheduleFlush($.entry),Promise.resolve($.journal.results.get(q));return(async()=>{let H=await $.semaphore.run(async()=>$.globalSemaphore.run(async()=>O(K,y,B)));if(H!==null)await Y.runPromise(qB($.runID,$.journal,q,H));return H})()}return $.semaphore.run(async()=>$.globalSemaphore.run(async()=>O(K,y,V)))}}async function xB($){let Z=AZ(await $),[X,Q,{QuickJSWASMModule:J}]=await Promise.all([Z.importModuleLoader().then(AZ),Z.importFFI(),import("./chunk-092bx2yw.js").then(AZ)]),B=await X();B.type="sync";let V=new Q(B);return new J(B,V)}function AZ($){return $&&"default"in $&&$.default?$.default&&"default"in $.default&&$.default.default?$.default.default:$.default:$}function LB($){let Z=typeof $=="number"?$:$.getTime();return function(){return Date.now()>Z}}var AG={type:"sync",importFFI:()=>import("./chunk-5bate758.js").then(($)=>$.QuickJSFFI),importModuleLoader:()=>import("./chunk-n2ygpy76.js").then(($)=>$.default)},bB=AG;var MG=xB(bB),UB=43200000,_G=67108864,RG=2654435769,CG=`
576
- globalThis.parallel = (thunks) =>
577
- Promise.all(thunks.map((t) => Promise.resolve().then(t)));
578
- globalThis.pipeline = (items, ...stages) =>
579
- Promise.all(items.map((item, index) =>
580
- stages.reduce((acc, stage) => acc.then((prev) => stage(prev, item, index)), Promise.resolve(item))));
581
- // Minimal, deterministic URL for dedup/host-extraction in workflow scripts.
582
- // The bare QuickJS guest has no Web URL. Covers protocol/hostname/pathname/
583
- // search/hash \u2014 enough for normURL-style dedup \u2014 and THROWS on inputs without
584
- // a scheme+host, so scripts' try/catch fallbacks behave like the real URL.
585
- globalThis.URL = class URL {
586
- constructor(input) {
587
- const str = String(input);
588
- const m = /^([a-zA-Z][a-zA-Z0-9+.-]*:)\\/\\/([^/?#]*)([^?#]*)(\\?[^#]*)?(#.*)?$/.exec(str);
589
- if (!m) throw new TypeError("Invalid URL: " + str);
590
- this.protocol = m[1].toLowerCase();
591
- this.hostname = m[2];
592
- this.pathname = m[3] || "/";
593
- this.search = m[4] || "";
594
- this.hash = m[5] || "";
595
- this.host = m[2];
596
- }
597
- toString() { return this.protocol + "//" + this.host + this.pathname + this.search + this.hash; }
598
- };
599
- `,H7=($)=>{if(process.env.QQ_WF_TRACE)process.stderr.write(`[sb ${new Date().toISOString()}] ${$}
600
- `)};async function AB($,Z,X={}){H7("module load begin");let Q=await MG;if(H7("module load end"),X.signal?.aborted)throw Error("workflow script aborted");let J=Q.newRuntime();J.setMemoryLimit(X.memoryLimitBytes??_G),J.setInterruptHandler(LB(Date.now()+(X.deadlineMs??UB)));let B=J.newContext(),V=[],O=[],G=(W)=>{return V.push(W),W};try{IG(B,Z,G,O);let W=(X.seed??RG)>>>0,K=B.evalCode(`
601
- delete globalThis.Date;
602
- (function () {
603
- // mulberry32 \u2014 tiny seeded PRNG; deterministic for a given seed.
604
- let s = ${W} >>> 0;
605
- Math.random = function () {
606
- s = (s + 0x6d2b79f5) >>> 0;
607
- let t = s;
608
- t = Math.imul(t ^ (t >>> 15), t | 1);
609
- t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
610
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
611
- };
612
- })();
613
- delete globalThis.WeakRef;
614
- delete globalThis.FinalizationRegistry;
615
- `);if(K.error)K.error.dispose();else K.value.dispose();let y=B.evalCode(CG);if(y.error){let T=B.dump(y.error);throw y.error.dispose(),Error(`workflow prelude error: ${typeof T==="string"?T:JSON.stringify(T)}`)}y.value.dispose();let j=MZ(B,X.args??null);B.setProp(B.global,"args",j),j.dispose();let q=`(async () => {
616
- ${$}
617
- })()`,H=B.evalCode(q);if(H.error){let T=B.dump(H.error);throw H.error.dispose(),Error(`workflow script error: ${typeof T==="string"?T:JSON.stringify(T)}`)}let z=G(H.value),L=1,b=50,D=50,U,F=0,I=()=>{if(J.hasPendingJob())J.executePendingJobs(),F=0;else F++;U=setTimeout(I,F<D?L:b)};U=setTimeout(I,L);let C,S=Date.now()+(X.deadlineMs??UB),E=new Promise((T,N)=>{let A=()=>{if(X.signal?.aborted){N(Error("workflow script aborted"));return}if(Date.now()>=S){N(Error("workflow script deadline exceeded"));return}C=setTimeout(A,5)};C=setTimeout(A,5)}),x,k=new Promise((T,N)=>{if(!X.signal)return;if(X.signal.aborted)return N(Error("workflow script aborted"));if(x=()=>N(Error("workflow script aborted")),X.signal.addEventListener("abort",x,{once:!0}),X.signal.aborted)x()});try{H7("resolve begin");let T=await Promise.race([B.resolvePromise(z),E,k]);if(H7("resolve end"),T.error){let A=B.dump(T.error);throw T.error.dispose(),Error(`workflow script rejected: ${typeof A==="string"?A:JSON.stringify(A)}`)}let N=G(T.value);return B.dump(N)}finally{if(clearTimeout(U),clearTimeout(C),x&&X.signal)X.signal.removeEventListener("abort",x)}}finally{for(let W of O)if(W.alive)W.dispose();for(let W of V)if(W.alive)W.dispose();B.dispose(),J.dispose()}}function IG($,Z,X,Q){for(let[J,B]of Object.entries(Z)){let V=$.newFunction(J,(...O)=>{let G=O.map((K)=>$.dump(K)),W=B(...G);if(W instanceof Promise){let K=$.newPromise();return Q.push(K),W.then((y)=>{if(!$.alive)return;let j=MZ($,y);K.resolve(j),j.dispose(),$.runtime.executePendingJobs()},(y)=>{if(!$.alive)return;let j=$.newString(y instanceof Error?y.message:String(y));K.reject(j),j.dispose(),$.runtime.executePendingJobs()}),K.settled.then(()=>{if($.alive)$.runtime.executePendingJobs()}),K.handle}return MZ($,W)});$.setProp($.global,J,X(V))}}function MZ($,Z){if(Z===void 0||Z===null)return $.undefined;if(typeof Z==="string")return $.newString(Z);if(typeof Z==="number")return $.newNumber(Z);if(typeof Z==="boolean")return Z?$.true:$.false;let X=$.newString(JSON.stringify(Z));try{let Q=$.evalCode("JSON.parse"),J=$.unwrapResult(Q),B=$.callFunction(J,$.undefined,X);return J.dispose(),$.unwrapResult(B)}finally{X.dispose()}}import i$ from"path";import{lstat as SG,realpath as kG}from"fs/promises";async function MB($){let Z=$;while(!0)try{await SG(Z);break}catch{let Q=i$.dirname(Z);if(Q===Z)break;Z=Q}let X=await kG(Z);return i$.resolve(X,i$.relative(Z,$))}async function p$($,Z){let X=i$.resolve($,Z),[Q,J]=await Promise.all([MB(i$.resolve($)),MB(X)]);if(!B$.contains($,X)||!B$.contains(Q,J))throw Error(`workspace path escapes the workspace root: ${JSON.stringify(Z)}`);return X}function RB($){return{async readFile(Z){let X=await p$($,String(Z));if(!await B$.exists(X))return null;return B$.readText(X)},async writeFile(Z,X){let Q=await p$($,String(Z));await B$.write(Q,String(X))},async exists(Z){let X=await p$($,String(Z));return B$.exists(X)},async glob(Z){let X=await _B.scan(String(Z),{cwd:$,absolute:!0,include:"all",dot:!0});return(await Promise.all(X.map(async(J)=>{let B=i$.relative($,J);if(B===""||B===".."||B.startsWith(`..${i$.sep}`)||i$.isAbsolute(B))return;try{return await p$($,B),B}catch{return}}))).filter((J)=>J!==void 0).sort()}}}function CB($){let Z=RB($.workspaceRoot),X={...$.hooks,readFile:Z.readFile,writeFile:Z.writeFile,glob:Z.glob,exists:Z.exists};return{hooks:X,evaluate:(Q,J)=>AB(Q,X,{...J,signal:J.signal})}}import{createHash as TG}from"crypto";function SB($){return Y.fn("WorkflowRuntime.resume")(function*(Z){let X=yield*Y.promise(()=>IB.write("workflow-resume:"+Z.runID));return yield*Y.gen(function*(){let Q=$.runs.get(Z.runID);if(Q&&Q.status==="running")return{runID:Z.runID,resumed:!1};let J=yield*v2.load(Z.runID);if(!J)return{runID:Z.runID,resumed:!1};let B=yield*v2.readScript(Z.runID).pipe(Y.exit),V=o2.isSuccess(B)?B.value:"";if(!V)return{runID:Z.runID,resumed:!1};let O=TG("sha256").update(V).digest("hex"),G=J.scriptSha!==O;return yield*$.launch({script:V,sessionID:J.sessionID,parentActorID:J.parentActorID??"main",args:J.args,freshJournal:G,agentTimeoutMs:Z.agentTimeoutMs??J.agentTimeoutMs},Z.runID,J.name),{runID:Z.runID,resumed:!0}}).pipe(Y.ensuring(Y.sync(()=>X[Symbol.dispose]())))})}import{createHash as hB}from"crypto";import kB from"path";var hG=/export\s+const\s+meta\s*=/;function r8($){return hG.test($)}var gG=/^[A-Za-z0-9._-]+$/;async function TB($,Z,X){if(!gG.test($))throw Error(`invalid workflow name: ${JSON.stringify($)}`);let Q=[".qitqode/workflows",".claude/workflows"];for(let J of await EG($,Q,Z,X))return B$.readText(J);return null}async function EG($,Z,X,Q){if(!B$.contains(Q,X))return[];let J=[],B=X;for(;;){for(let O of Z){let G=kB.join(B,O,`${$}.js`);if(await B$.exists(G))J.push(G)}if(B===Q)break;let V=kB.dirname(B);if(V===B)break;B=V}return J}function gB($){let Z=(B)=>{let V=String(B);$.entry.currentPhase=V,$.entry.transcript.push({kind:"phase",text:V}),$.bridge.fork(v2.recordPhase({runID:$.runID,phase:V}).pipe(Y.ignore)),$.bridge.fork(v2.appendJournal($.runID,{t:"phase",title:V,pass:$.journal.pass}).pipe(Y.ignore)),$.bridge.fork($.bus.publish(YB,{sessionID:$.sessionID,runID:$.runID,title:V}));return},X=(B)=>{let V=String(B);$.entry.transcript.push({kind:"log",text:V}),$.bridge.fork(v2.appendJournal($.runID,{t:"log",msg:V,pass:$.journal.pass}).pipe(Y.ignore)),$.bridge.fork($.bus.publish(QB,{sessionID:$.sessionID,runID:$.runID,message:V}));return},Q=new Map;return{phase:Z,logHook:X,workflowHook:(B,V,O)=>{let G=String(B),W=O??{},K=hB("sha256").update(JSON.stringify({spec:G,args:V??null})).digest("hex"),y=Q.get(K)??0;Q.set(K,y+1);let j=K+":"+y;if($.journal.results.has("wf:"+j))return $.entry.succeeded++,$.scheduleFlush($.entry),Promise.resolve($.journal.results.get("wf:"+j));let q="wf_"+hB("sha256").update($.runID+j).digest("hex");return $.bridge.promise(Y.gen(function*(){let H=r8(G)?G:yield*Y.promise(()=>TB(G,$.workspaceRoot,S2.worktree));if(H===null)return yield*Y.die(Error(`${$.structuralError}: unknown workflow: ${JSON.stringify(G)}`));let z=r8(G)?"inline:"+K.slice(0,12):G;if($.depth+1>$.maxDepth)return yield*Y.die(Error(`${$.structuralError}: workflow nesting exceeds maxDepth (${$.maxDepth})`));if($.lineage.includes(z))return yield*Y.die(Error(`${$.structuralError}: workflow cycle detected: ${z} is already an ancestor`));$.entry.childRunIDs.add(q),yield*$.launch({script:H,sessionID:$.sessionID,parentActorID:$.parentActorID,args:V,model:$.model,workspace:W.workspace?yield*Y.promise(()=>p$($.workspaceRoot,String(W.workspace))):$.workspaceRoot,maxConcurrentAgents:W.maxConcurrentAgents,scriptDeadlineMs:$.scriptDeadlineMs,lineage:[...$.lineage,z],depth:$.depth+1,maxDepth:$.maxDepth,notifyOnTerminal:!1},q,r8(G)?"inline":G);let L=yield*$.waitFor(q);if(L.status==="failed"&&L.error.includes($.structuralError)){let D=L.error.indexOf($.structuralError);return yield*Y.die(Error(L.error.slice(D)))}if(L.status!=="completed")yield*$.bus.publish(VB,{sessionID:$.sessionID,runID:$.runID,childRunID:q,name:r8(G)?"inline":G,status:L.status,...L.status==="failed"?{error:L.error}:{}}).pipe(Y.ignore);let b=L.status==="completed"?L.result??null:null;if(b!==null)yield*v2.appendJournalSync($.runID,[{t:"agent",key:"wf:"+j,result:b,pass:$.journal.pass}]).pipe(Y.ignore);return b}))}}}var _Z=s.create({service:"workflow.runtime"}),n$=($)=>{if(process.env.QQ_WF_TRACE)process.stderr.write(`[wf ${new Date().toISOString()}] ${$}
618
- `)},fG=43200000,vG=1000,dG="WorkflowStructuralError";class j7 extends Z2.Service()("@qitqode/WorkflowRuntime"){}var fB=M.effect(j7,Y.gen(function*(){let $=yield*p.Service,Z=yield*o0.Service,X=yield*u$.Service,Q=yield*y2.Service,J=yield*B2.Service,B=yield*d2.Scope,V=new bZ,O=(N,A,_)=>N===void 0?Y.succeed(A):Q.resolveModelRef(N).pipe(Y.map((R)=>({providerID:R.providerID,modelID:R.id})),Y.catchCause(()=>Y.sync(()=>{let R=typeof N==="string"?N:`{${Object.keys(N).sort().join(",")}}`;if(!_.has(R))_.add(R),_Z.warn("workflow agent model ref did not resolve \u2014 using run default",{ref:R});return A}))),G,W=0,K,y=Y.fn("WorkflowRuntime.ensureGlobal")(function*(){if(K)return K;return G??=yield*J.get(),W=Math.max(1,G.workflow?.maxConcurrentAgents??yB()),K??=UZ(W),K}),j=new Map,q=(N)=>{let A=j.get(N.runID);if(A)clearTimeout(A),j.delete(N.runID);return v2.flushCounters({runID:N.runID,running:N.running,succeeded:N.succeeded,failed:N.failed}).pipe(Y.ignore)},H=(N)=>{if(j.has(N.runID))return;j.set(N.runID,setTimeout(()=>{j.delete(N.runID),Y.runFork(v2.flushCounters({runID:N.runID,running:N.running,succeeded:N.succeeded,failed:N.failed}).pipe(Y.ignore))},250))},z=FB({runs:V,bus:$,inbox:Z,worktree:X,flushNow:q}),L=(N)=>Y.gen(function*(){let A=V.get(N);if(!A)return{status:"failed",error:"child run missing"};return yield*k2.await(A.deferred)}),b=Y.fn("WorkflowRuntime.launch")(function*(N,A,_){let R=PZ(N.script),g=R.ok?R.body:N.script,l=N.workspace?yield*Y.promise(()=>p$(S2.worktree,N.workspace)):S2.worktree,m=S2.current,h=yield*k2.make(),f={runID:A,sessionID:N.sessionID,instance:m,status:"running",deferred:h,fiber:void 0,childActorIDs:new Set,worktrees:new Set,childRunIDs:new Set,name:_,running:0,succeeded:0,failed:0,agentCount:0,capWarned:!1,warnedModelRefs:new Set,currentPhase:void 0,transcript:[]};V.set(f);let v=EB("sha256").update(N.script).digest("hex");n$(`launch begin ${A}`),yield*v2.recordStart({runID:A,sessionID:N.sessionID,name:_,parentActorID:N.parentActorID,args:N.args,scriptSha:v,agentTimeoutMs:N.agentTimeoutMs}).pipe(Y.ignore),yield*v2.writeScript(A,N.script).pipe(Y.ignore);let e=yield*zB(A,N.freshJournal??!1),n=yield*D0.make(),a=yield*y(),G2=N.lineage??[],R2=N.depth??0,t=N.maxDepth??G?.workflow?.maxDepth??8,N2=N.maxConcurrentAgents??W,j2=Math.max(1,Math.min(N2,W)),T0=UZ(j2),C2=N.maxLifecycleAgents??G?.workflow?.maxLifecycleAgents??vG,Y2=()=>{if(f.capWarned)return;f.capWarned=!0,_Z.warn("workflow lifecycle agent cap reached \u2014 over-cap agents return null",{runID:A,cap:C2})},P2=N.agentTimeoutMs,L2=wB({runID:A,sessionID:N.sessionID,parentActorID:N.parentActorID,defaultModel:N.model,runAgentTimeoutMs:P2,lifecycleCap:C2,entry:f,bridge:n,bus:$,worktree:X,getActor:()=>Q$.current,resolveAgentModel:O,journal:e,semaphore:T0,globalSemaphore:a,scheduleFlush:H,warnCapOnce:Y2});yield*$.publish(JB,{sessionID:N.sessionID,runID:A,name:_});let t2=gB({runID:A,sessionID:N.sessionID,parentActorID:N.parentActorID,model:N.model,scriptDeadlineMs:N.scriptDeadlineMs,workspaceRoot:l,lineage:G2,depth:R2,maxDepth:t,entry:f,bridge:n,bus:$,journal:e,scheduleFlush:H,launch:b,waitFor:L,structuralError:dG}),{phase:w0,logHook:F0,workflowHook:i0}=t2,h0=CB({workspaceRoot:l,hooks:{agent:L2,phase:w0,log:F0,workflow:i0}}),M$=Y.gen(function*(){let n0=EB("sha1").update(A).digest().readUInt32BE(0);n$(`eval begin ${A}`);let s0=yield*Y.tryPromise({try:(a0)=>h0.evaluate(g,{deadlineMs:N.scriptDeadlineMs??fG,args:N.args,seed:n0,signal:a0}),catch:(a0)=>a0 instanceof Error?a0:Error(String(a0))}).pipe(Y.result);if(n$(`eval end ${A} ${s0._tag}`),s0._tag==="Success"){yield*z.complete({entry:f,sessionID:N.sessionID,parentActorID:N.parentActorID,result:s0.success,notifyOnTerminal:N.notifyOnTerminal}),n$(`flushed ${A}`),n$(`terminal-recorded ${A}`),n$(`published ${A}`),n$(`deferred-succeeded ${A}`);return}let P1=s0.failure instanceof Error?s0.failure.message:String(s0.failure);_Z.warn("workflow run failed",{runID:A,error:P1}),yield*z.fail({entry:f,sessionID:N.sessionID,parentActorID:N.parentActorID,error:P1,notifyOnTerminal:N.notifyOnTerminal})});return f.fiber=yield*M$.pipe(Y.provideService(_0,m),Y.forkIn(B)),n$(`launched ${A}`),{runID:A}}),D=Y.fn("WorkflowRuntime.start")(function*(N){let A=PZ(N.script);if(!A.ok)return yield*Y.die(A.error);let _=W8.descending("workflow");return yield*b(N,_,A.meta.name)}),U=Y.fn("WorkflowRuntime.status")(function*(N){let A=V.get(N.runID);if(!A)return{status:"unknown",agentCount:0};return{status:A.status,agentCount:A.agentCount,...A.currentPhase!==void 0?{currentPhase:A.currentPhase}:{}}}),F=Y.fn("WorkflowRuntime.transcript")(function*(N){let A=V.get(N.runID);return A?A.transcript.slice():[]}),I=Y.fn("WorkflowRuntime.wait")(function*(N){let A=V.get(N.runID);if(!A)return{status:"failed",error:`unknown runID ${N.runID}`};if(N.timeoutMs===void 0)return yield*k2.await(A.deferred);let _=yield*k2.await(A.deferred).pipe(Y.timeout(N.timeoutMs),Y.catchTag("TimeoutError",()=>Y.succeed(null)));if(_===null)return{status:"failed",error:"workflow wait timed out"};return _}),C=Y.fn("WorkflowRuntime.cancel")(function*(N){let A=V.get(N.runID);if(!A)return;yield*z.cancelEntry(A)}),S=Y.fn("WorkflowRuntime.list")(function*(N){return yield*v2.list(N)}),E=SB({runs:V,launch:b}),x=j7.of({start:D,status:U,wait:I,transcript:F,cancel:C,list:S,resume:E}),k=!1,T=Y.gen(function*(){if(k)return;k=!0,yield*Y.forEach([...V.values()],(N)=>(N.status==="running"?z.cancelEntry(N):Y.void).pipe(Y.ignore),{concurrency:1,discard:!0});for(let N of j.values())clearTimeout(N);j.clear(),V.clear()});return G7.current=x,yield*Y.addFinalizer(()=>T),yield*Y.addFinalizer(()=>Y.sync(()=>{if(G7.current===x)G7.current=void 0})),x})),mG=fB.pipe(M.provide(p.defaultLayer),M.provide(o0.defaultLayer),M.provide(u$.defaultLayer),M.provide(y2.defaultLayer),M.provide(B2.defaultLayer));var lG=M.suspend(()=>M.mergeAll(dB.defaultLayer,s2.defaultLayer,p.defaultLayer,R$.defaultLayer,m8.defaultLayer,B2.defaultLayer,l$.defaultLayer,mB.defaultLayer,V8.defaultLayer,c$.defaultLayer,C$.defaultLayer,q0.defaultLayer,H2.defaultLayer,y2.defaultLayer,iB.defaultLayer,g2.defaultLayer,j$.defaultLayer,lB.defaultLayer,b6.defaultLayer,z2.defaultLayer,oB.defaultLayer,J2.defaultLayer,y0.defaultLayer,z0.defaultLayer,v0.defaultLayer,m0.defaultLayer,z$.defaultLayer,q$.defaultLayer,$$.defaultLayer,P0.defaultLayer,m$.defaultLayer,D$.defaultLayer,H$.defaultLayer,E2.defaultLayer,J$.defaultLayer,N0.defaultLayer,T$.defaultLayer,H0.defaultLayer,G1.defaultLayer,W0.defaultLayer,B8.defaultLayer,U$.defaultLayer,y1.defaultLayer,u$.defaultLayer,p8.defaultLayer,pB.defaultLayer,A$.defaultLayer,a4.defaultLayer,M2.defaultLayer,uB.defaultLayer,s8.defaultLayer,M0.defaultLayer,t8.defaultLayer,F$.defaultLayer,$7.defaultLayer).pipe(M.provideMerge(t4),M.provideMerge(cB))),K8=r4.make(lG,{memoMap:e4}),e8=($)=>vB($),HC={runSync($){return K8.runSync(e8($))},runPromise($,Z){return K8.runPromise(e8($),Z)},runPromiseExit($,Z){return K8.runPromiseExit(e8($),Z)},runFork($){return K8.runFork(e8($))},runCallback($){return K8.runCallback(e8($))},dispose:()=>K8.dispose()};
619
- export{y1 as Ag,T$ as Bg,M8 as Cg,Z0 as Dg,_8 as Eg,C8 as Fg,q4 as Gg,N0 as Hg,H0 as Ig,A$ as Jg,a4 as Kg,gJ as Lg,u$ as Mg,n5 as Ng,y0 as Og,z0 as Pg,P0 as Qg,$$ as Rg,z$ as Sg,m$ as Tg,c8 as Ug,p8 as Vg,lG as Wg,HC as Xg};