@redscope-ai/redscope 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/README.md +224 -0
  2. package/dist/chunk-090920rk.js +288 -0
  3. package/dist/chunk-0afb2r78.js +141 -0
  4. package/dist/chunk-0d4ekx1g.js +73 -0
  5. package/dist/chunk-0g6nwbhq.js +15 -0
  6. package/dist/chunk-0qj905nt.js +18 -0
  7. package/dist/chunk-0s5btnn1.js +186 -0
  8. package/dist/chunk-0s8fars0.js +91 -0
  9. package/dist/chunk-10ev3dvh.js +312 -0
  10. package/dist/chunk-10k5jfc5.js +1295 -0
  11. package/dist/chunk-12tspwqa.js +240 -0
  12. package/dist/chunk-13qesvnw.js +17 -0
  13. package/dist/chunk-143eh1e0.js +121 -0
  14. package/dist/chunk-14p6wvsq.js +39 -0
  15. package/dist/chunk-19f3zb1m.js +342 -0
  16. package/dist/chunk-1a5cep8h.js +145 -0
  17. package/dist/chunk-1abw9kkn.js +34 -0
  18. package/dist/chunk-1aer7c78.js +118 -0
  19. package/dist/chunk-1dazz4g6.js +154 -0
  20. package/dist/chunk-1fcf4ty1.js +142 -0
  21. package/dist/chunk-1gnxhyf8.js +62 -0
  22. package/dist/chunk-1he3944e.js +8124 -0
  23. package/dist/chunk-1jpayz7y.js +952 -0
  24. package/dist/chunk-1qd6f6vk.js +269 -0
  25. package/dist/chunk-1v0kpe62.js +2547 -0
  26. package/dist/chunk-1w20m7gw.js +445 -0
  27. package/dist/chunk-1y7kp51j.js +72 -0
  28. package/dist/chunk-1ycb5sxt.js +247 -0
  29. package/dist/chunk-1zbwhcbt.js +1124 -0
  30. package/dist/chunk-20psem54.js +116 -0
  31. package/dist/chunk-23h69r5b.js +30 -0
  32. package/dist/chunk-23x86ptv.js +473 -0
  33. package/dist/chunk-24fyv3jz.js +378 -0
  34. package/dist/chunk-24kv69g3.js +97 -0
  35. package/dist/chunk-2azx8zsc.js +125 -0
  36. package/dist/chunk-2d1gwzz9.js +524 -0
  37. package/dist/chunk-2g0ytd9d.js +29058 -0
  38. package/dist/chunk-2hfp9kat.js +21 -0
  39. package/dist/chunk-2j875eq6.js +37 -0
  40. package/dist/chunk-2kcgxnvp.js +39 -0
  41. package/dist/chunk-2kz09j2s.js +23 -0
  42. package/dist/chunk-2mwnwp0n.js +17 -0
  43. package/dist/chunk-2p1cqhcn.js +921 -0
  44. package/dist/chunk-2p369q9z.js +61 -0
  45. package/dist/chunk-2rf6asgf.js +151 -0
  46. package/dist/chunk-2vr7mqx1.js +384 -0
  47. package/dist/chunk-2xcg933e.js +205 -0
  48. package/dist/chunk-2ypwckbz.js +40310 -0
  49. package/dist/chunk-30wnahyg.js +626 -0
  50. package/dist/chunk-326zehp8.js +204 -0
  51. package/dist/chunk-32s6jzgw.js +183 -0
  52. package/dist/chunk-35yzt1a7.js +202 -0
  53. package/dist/chunk-38frkej6.js +62 -0
  54. package/dist/chunk-3abaq08g.js +34 -0
  55. package/dist/chunk-3h59ttr5.js +32 -0
  56. package/dist/chunk-3nk9q8dr.js +154 -0
  57. package/dist/chunk-3prrxevm.js +224 -0
  58. package/dist/chunk-3tv8p9xw.js +127 -0
  59. package/dist/chunk-3txyekes.js +19 -0
  60. package/dist/chunk-3vfxjn7g.js +19 -0
  61. package/dist/chunk-3w9sye8h.js +81 -0
  62. package/dist/chunk-3y69j7y8.js +24 -0
  63. package/dist/chunk-3zwjpkjh.js +1603 -0
  64. package/dist/chunk-40t1d75v.js +3442 -0
  65. package/dist/chunk-470kmby4.js +318 -0
  66. package/dist/chunk-47jc141z.js +335 -0
  67. package/dist/chunk-48rz50ct.js +868 -0
  68. package/dist/chunk-49wv03ts.js +232 -0
  69. package/dist/chunk-4a189mn2.js +103 -0
  70. package/dist/chunk-4c4fmh7a.js +15 -0
  71. package/dist/chunk-4ct8dsj5.js +49 -0
  72. package/dist/chunk-4kqt1pm1.js +100 -0
  73. package/dist/chunk-4ng0xy0e.js +802 -0
  74. package/dist/chunk-4spgkgr3.js +43 -0
  75. package/dist/chunk-4tjdwtyy.js +19 -0
  76. package/dist/chunk-4tr60273.js +370 -0
  77. package/dist/chunk-4vnaeng5.js +29 -0
  78. package/dist/chunk-4wbqpeaw.js +871 -0
  79. package/dist/chunk-4wgkv3fv.js +1140 -0
  80. package/dist/chunk-4yjskjb6.js +40 -0
  81. package/dist/chunk-50m3a23z.js +35 -0
  82. package/dist/chunk-511f79az.js +182 -0
  83. package/dist/chunk-51sgztvv.js +161 -0
  84. package/dist/chunk-563fcpv1.js +290 -0
  85. package/dist/chunk-564cnq6v.js +735 -0
  86. package/dist/chunk-569r8cxc.js +31 -0
  87. package/dist/chunk-570x55d4.js +12 -0
  88. package/dist/chunk-571556cm.js +80 -0
  89. package/dist/chunk-59t4c56e.js +63 -0
  90. package/dist/chunk-5axjhkma.js +36 -0
  91. package/dist/chunk-5b188q5e.js +157 -0
  92. package/dist/chunk-5dmn1865.js +439 -0
  93. package/dist/chunk-5ks4829r.js +267 -0
  94. package/dist/chunk-5mmhfbxb.js +1078 -0
  95. package/dist/chunk-5rdt14hy.js +742 -0
  96. package/dist/chunk-5ssryexj.js +121 -0
  97. package/dist/chunk-5v95pnq4.js +15 -0
  98. package/dist/chunk-5xvjt2t9.js +68 -0
  99. package/dist/chunk-5zyq6t1q.js +118 -0
  100. package/dist/chunk-60fkafk2.js +15 -0
  101. package/dist/chunk-62fjkf5q.js +46 -0
  102. package/dist/chunk-64gazrrb.js +8067 -0
  103. package/dist/chunk-65tq2yjx.js +126 -0
  104. package/dist/chunk-65zbgg1n.js +14 -0
  105. package/dist/chunk-66v8mty3.js +264 -0
  106. package/dist/chunk-6acx5heq.js +292 -0
  107. package/dist/chunk-6hr7742d.js +61 -0
  108. package/dist/chunk-6hygvrhn.js +143 -0
  109. package/dist/chunk-6kjh280m.js +128 -0
  110. package/dist/chunk-6s0q1s5r.js +66 -0
  111. package/dist/chunk-6x35ffpx.js +690 -0
  112. package/dist/chunk-71jfy1hh.js +570 -0
  113. package/dist/chunk-71sdcaq6.js +15 -0
  114. package/dist/chunk-754qdxs5.js +92 -0
  115. package/dist/chunk-79v5bkj4.js +1176 -0
  116. package/dist/chunk-7br0w7j5.js +151 -0
  117. package/dist/chunk-7cjgrzz1.js +298 -0
  118. package/dist/chunk-7d41ks0y.js +133 -0
  119. package/dist/chunk-7f40pmtr.js +71 -0
  120. package/dist/chunk-7g15x8hm.js +131 -0
  121. package/dist/chunk-7gtnzdet.js +120 -0
  122. package/dist/chunk-7h0z4aqx.js +702 -0
  123. package/dist/chunk-7h7e5a7d.js +25 -0
  124. package/dist/chunk-7m2cznwr.js +40 -0
  125. package/dist/chunk-7nvday0n.js +252 -0
  126. package/dist/chunk-7qey87th.js +145 -0
  127. package/dist/chunk-7qx3xhv3.js +9076 -0
  128. package/dist/chunk-7tfdhkpy.js +61 -0
  129. package/dist/chunk-80m511j6.js +121 -0
  130. package/dist/chunk-80ysxfe9.js +784 -0
  131. package/dist/chunk-8375zk8t.js +17200 -0
  132. package/dist/chunk-85bpkyy9.js +412 -0
  133. package/dist/chunk-85tcn547.js +876 -0
  134. package/dist/chunk-85vqgbc8.js +13 -0
  135. package/dist/chunk-86626jb4.js +49 -0
  136. package/dist/chunk-87ms17f6.js +444 -0
  137. package/dist/chunk-87mz239c.js +118 -0
  138. package/dist/chunk-89vdzt4e.js +254 -0
  139. package/dist/chunk-89z3e99z.js +159 -0
  140. package/dist/chunk-8cwrz1dd.js +1806 -0
  141. package/dist/chunk-8gv2pjby.js +21 -0
  142. package/dist/chunk-8hdevr3s.js +140 -0
  143. package/dist/chunk-8hdsk6qc.js +710 -0
  144. package/dist/chunk-8kct9arg.js +724 -0
  145. package/dist/chunk-8kf8h7xf.js +23 -0
  146. package/dist/chunk-8qed8ymj.js +605 -0
  147. package/dist/chunk-8sdgr592.js +101 -0
  148. package/dist/chunk-8we9w8pw.js +111 -0
  149. package/dist/chunk-8xnm5637.js +72 -0
  150. package/dist/chunk-8y3q0eqy.js +67 -0
  151. package/dist/chunk-8yvsnrkr.js +3449 -0
  152. package/dist/chunk-8zz4z1q3.js +42 -0
  153. package/dist/chunk-90eyff3k.js +119 -0
  154. package/dist/chunk-92bjkrf2.js +121 -0
  155. package/dist/chunk-92zrc7c6.js +327 -0
  156. package/dist/chunk-935nrvdb.js +13 -0
  157. package/dist/chunk-94pfyv6a.js +48 -0
  158. package/dist/chunk-9568p8se.js +115 -0
  159. package/dist/chunk-96km1ywr.js +37 -0
  160. package/dist/chunk-980bg4w4.js +163 -0
  161. package/dist/chunk-9a9g5hbj.js +205 -0
  162. package/dist/chunk-9cm4725d.js +4395 -0
  163. package/dist/chunk-9ds3vzq8.js +847 -0
  164. package/dist/chunk-9ffc9n60.js +618 -0
  165. package/dist/chunk-9fstrwv2.js +184 -0
  166. package/dist/chunk-9gt0g0qe.js +153 -0
  167. package/dist/chunk-9h9k5vz3.js +2761 -0
  168. package/dist/chunk-9he8bmhy.js +17 -0
  169. package/dist/chunk-9hn8e6h1.js +12 -0
  170. package/dist/chunk-9j0n3g8e.js +179 -0
  171. package/dist/chunk-9j6pa3ft.js +251 -0
  172. package/dist/chunk-9jpg9dn7.js +122 -0
  173. package/dist/chunk-9mycnwj5.js +46 -0
  174. package/dist/chunk-9npy2c17.js +517 -0
  175. package/dist/chunk-9p6sec8n.js +34 -0
  176. package/dist/chunk-9pnym83h.js +4584 -0
  177. package/dist/chunk-9skwrnd2.js +25 -0
  178. package/dist/chunk-9tsfaqr8.js +459 -0
  179. package/dist/chunk-9tsw3cqv.js +5924 -0
  180. package/dist/chunk-9w6ckyk4.js +49 -0
  181. package/dist/chunk-a15bwzv6.js +147 -0
  182. package/dist/chunk-a9t6cp69.js +28 -0
  183. package/dist/chunk-ad2yk19p.js +102 -0
  184. package/dist/chunk-ad4cw4nw.js +336 -0
  185. package/dist/chunk-ad69fbsk.js +347 -0
  186. package/dist/chunk-ae76ded0.js +30 -0
  187. package/dist/chunk-aeysytks.js +216 -0
  188. package/dist/chunk-ag81m9bq.js +61 -0
  189. package/dist/chunk-ahx7gp6r.js +4448 -0
  190. package/dist/chunk-aj4tk4tk.js +23 -0
  191. package/dist/chunk-an82t9jc.js +104 -0
  192. package/dist/chunk-apg95qd7.js +1393 -0
  193. package/dist/chunk-aq5n2adz.js +27 -0
  194. package/dist/chunk-aw4s3a99.js +208 -0
  195. package/dist/chunk-awgdfggg.js +14 -0
  196. package/dist/chunk-ayymxgn1.js +164 -0
  197. package/dist/chunk-azbab59e.js +637 -0
  198. package/dist/chunk-azdxq2a3.js +293 -0
  199. package/dist/chunk-b0tjx3k1.js +523 -0
  200. package/dist/chunk-b5pp4g2g.js +371 -0
  201. package/dist/chunk-b5zm8dt6.js +26 -0
  202. package/dist/chunk-bcnye5a0.js +109 -0
  203. package/dist/chunk-beqz3k49.js +190 -0
  204. package/dist/chunk-bf906wpw.js +147 -0
  205. package/dist/chunk-bgan4cpf.js +13 -0
  206. package/dist/chunk-bhzp13h7.js +1178 -0
  207. package/dist/chunk-bk403kpw.js +142 -0
  208. package/dist/chunk-bmq4c135.js +489 -0
  209. package/dist/chunk-bprbeda7.js +35 -0
  210. package/dist/chunk-bst7czdd.js +888 -0
  211. package/dist/chunk-bths4xgn.js +111 -0
  212. package/dist/chunk-btjn3qby.js +13 -0
  213. package/dist/chunk-bwb1vxnt.js +120 -0
  214. package/dist/chunk-bxa6tw4m.js +643 -0
  215. package/dist/chunk-bxfjr8qb.js +27 -0
  216. package/dist/chunk-bxpzhrej.js +73 -0
  217. package/dist/chunk-bzyzrq0k.js +51 -0
  218. package/dist/chunk-c0k7b0jw.js +4265 -0
  219. package/dist/chunk-c17f0h2s.js +16 -0
  220. package/dist/chunk-c1yc761e.js +6748 -0
  221. package/dist/chunk-c5g9shkw.js +298 -0
  222. package/dist/chunk-c696122m.js +69 -0
  223. package/dist/chunk-c92b3yxx.js +109 -0
  224. package/dist/chunk-c9aqz56y.js +143 -0
  225. package/dist/chunk-cba7c5w3.js +345 -0
  226. package/dist/chunk-cbcxbbe6.js +6543 -0
  227. package/dist/chunk-cdfjb87h.js +11 -0
  228. package/dist/chunk-ce8zjt1y.js +136 -0
  229. package/dist/chunk-cep7e37k.js +22740 -0
  230. package/dist/chunk-chs5qm8d.js +258 -0
  231. package/dist/chunk-ckydq33g.js +144 -0
  232. package/dist/chunk-cnge6wpj.js +514 -0
  233. package/dist/chunk-cpnsvqf1.js +13 -0
  234. package/dist/chunk-cqqebkv4.js +32 -0
  235. package/dist/chunk-cvqpp7dk.js +627 -0
  236. package/dist/chunk-cwc33j40.js +65 -0
  237. package/dist/chunk-cypvrq2a.js +155 -0
  238. package/dist/chunk-d1ha0swn.js +475 -0
  239. package/dist/chunk-d2an0138.js +35 -0
  240. package/dist/chunk-d2tt72ck.js +343 -0
  241. package/dist/chunk-d6wvcqrw.js +9507 -0
  242. package/dist/chunk-d7ys2kka.js +991 -0
  243. package/dist/chunk-dbts5q5p.js +122 -0
  244. package/dist/chunk-dct29ggs.js +295 -0
  245. package/dist/chunk-de0qnnf7.js +1059 -0
  246. package/dist/chunk-dep72ce4.js +513 -0
  247. package/dist/chunk-dgpvgy8x.js +47 -0
  248. package/dist/chunk-dhhd7dtc.js +20 -0
  249. package/dist/chunk-dhzpmxv6.js +594 -0
  250. package/dist/chunk-djes4da7.js +413 -0
  251. package/dist/chunk-dnhv3vx7.js +166 -0
  252. package/dist/chunk-dqtvafan.js +2365 -0
  253. package/dist/chunk-dr4a3tcp.js +60 -0
  254. package/dist/chunk-dz2xk9kb.js +100 -0
  255. package/dist/chunk-dz7nc6rf.js +15 -0
  256. package/dist/chunk-e3abfxpy.js +1486 -0
  257. package/dist/chunk-e3cq9z89.js +85 -0
  258. package/dist/chunk-e3j7m7k2.js +642 -0
  259. package/dist/chunk-e4dsy4g1.js +9951 -0
  260. package/dist/chunk-e5592pnn.js +197 -0
  261. package/dist/chunk-e55hdegh.js +129 -0
  262. package/dist/chunk-e5r5r04e.js +1030 -0
  263. package/dist/chunk-e60zztbt.js +442 -0
  264. package/dist/chunk-e7qq6vn0.js +372 -0
  265. package/dist/chunk-e9aat7xw.js +80 -0
  266. package/dist/chunk-e9d5v3zs.js +143 -0
  267. package/dist/chunk-eax32zk4.js +87 -0
  268. package/dist/chunk-ebfwmbx1.js +117 -0
  269. package/dist/chunk-ec71pb8t.js +971 -0
  270. package/dist/chunk-eemjb825.js +17252 -0
  271. package/dist/chunk-ees8xdhd.js +256 -0
  272. package/dist/chunk-eewg66y1.js +112 -0
  273. package/dist/chunk-eg22v12d.js +266 -0
  274. package/dist/chunk-enzzk67f.js +313 -0
  275. package/dist/chunk-eskhp70f.js +117 -0
  276. package/dist/chunk-ewx6z4g8.js +55 -0
  277. package/dist/chunk-eyvx461k.js +76 -0
  278. package/dist/chunk-eztq2b5f.js +94 -0
  279. package/dist/chunk-f0ffwzdd.js +321 -0
  280. package/dist/chunk-f80n68mf.js +119 -0
  281. package/dist/chunk-fae2hjxp.js +99 -0
  282. package/dist/chunk-fbtfp370.js +60 -0
  283. package/dist/chunk-fc6ndtgf.js +94 -0
  284. package/dist/chunk-fdwabr8p.js +13870 -0
  285. package/dist/chunk-fejeqe61.js +785 -0
  286. package/dist/chunk-fh0d6mvk.js +168 -0
  287. package/dist/chunk-fh19zcaf.js +304 -0
  288. package/dist/chunk-fh8bd39r.js +186 -0
  289. package/dist/chunk-fj2ebbpn.js +33 -0
  290. package/dist/chunk-fjn632v7.js +194 -0
  291. package/dist/chunk-fncpkzs5.js +1389 -0
  292. package/dist/chunk-fpd1gpt8.js +332 -0
  293. package/dist/chunk-fq9snrnh.js +295 -0
  294. package/dist/chunk-fqcfzg3j.js +207 -0
  295. package/dist/chunk-ftt3vqj2.js +1919 -0
  296. package/dist/chunk-g06pm4n9.js +395 -0
  297. package/dist/chunk-g4m5pf4g.js +8 -0
  298. package/dist/chunk-g72h52y6.js +36 -0
  299. package/dist/chunk-g79ej71s.js +1627 -0
  300. package/dist/chunk-g7fwk59d.js +19 -0
  301. package/dist/chunk-g9jnkrtm.js +663 -0
  302. package/dist/chunk-g9vg5d7t.js +38 -0
  303. package/dist/chunk-ga1jkyqy.js +1636 -0
  304. package/dist/chunk-gaaap2nk.js +676 -0
  305. package/dist/chunk-gc6erq5q.js +483 -0
  306. package/dist/chunk-gjrcmf0a.js +752 -0
  307. package/dist/chunk-gmdy2w3z.js +238999 -0
  308. package/dist/chunk-gsz4yrrk.js +81 -0
  309. package/dist/chunk-gy47rjy8.js +3830 -0
  310. package/dist/chunk-h12a4f4x.js +11 -0
  311. package/dist/chunk-h1yratmg.js +725 -0
  312. package/dist/chunk-h9y0jnsy.js +155 -0
  313. package/dist/chunk-hbhs3mwy.js +133 -0
  314. package/dist/chunk-hbs8cmb4.js +8 -0
  315. package/dist/chunk-hdk0t1ht.js +940 -0
  316. package/dist/chunk-hef8dx4s.js +178 -0
  317. package/dist/chunk-hgsca8mt.js +381 -0
  318. package/dist/chunk-hhsxm2yr.js +67 -0
  319. package/dist/chunk-hj5tzzpd.js +39 -0
  320. package/dist/chunk-hjxqmtg5.js +94 -0
  321. package/dist/chunk-hn4w9pkj.js +68 -0
  322. package/dist/chunk-hnprkjgp.js +25 -0
  323. package/dist/chunk-hq3n5ex7.js +183 -0
  324. package/dist/chunk-hqjspfma.js +158 -0
  325. package/dist/chunk-hqxp6b72.js +1198 -0
  326. package/dist/chunk-hs6nrmq6.js +94 -0
  327. package/dist/chunk-hwba5xdc.js +267 -0
  328. package/dist/chunk-hy566ev3.js +430 -0
  329. package/dist/chunk-hzmzwte2.js +153 -0
  330. package/dist/chunk-hzxzvzw8.js +274 -0
  331. package/dist/chunk-j139fzgs.js +114 -0
  332. package/dist/chunk-j1mep9ck.js +62 -0
  333. package/dist/chunk-j3xveeg4.js +273 -0
  334. package/dist/chunk-j5y1s11j.js +100 -0
  335. package/dist/chunk-j9475b46.js +26 -0
  336. package/dist/chunk-j9rgqs8m.js +1192 -0
  337. package/dist/chunk-jccjaddz.js +74 -0
  338. package/dist/chunk-jdkwfy9e.js +35 -0
  339. package/dist/chunk-jdqp0r4h.js +6157 -0
  340. package/dist/chunk-jdzk4zwn.js +587 -0
  341. package/dist/chunk-jfafmkte.js +49 -0
  342. package/dist/chunk-jg3r989b.js +16 -0
  343. package/dist/chunk-jhtccjc9.js +54 -0
  344. package/dist/chunk-jj2ff1pr.js +688 -0
  345. package/dist/chunk-jmv7k0jn.js +37 -0
  346. package/dist/chunk-jmxzmwpw.js +65 -0
  347. package/dist/chunk-jnjxdqyr.js +353 -0
  348. package/dist/chunk-jsbbez9j.js +138 -0
  349. package/dist/chunk-jvpt2dc0.js +424 -0
  350. package/dist/chunk-jwd7cka0.js +34 -0
  351. package/dist/chunk-jy5er3st.js +15 -0
  352. package/dist/chunk-jyby79z5.js +121 -0
  353. package/dist/chunk-jzyr6j5n.js +332 -0
  354. package/dist/chunk-k49xc781.js +63 -0
  355. package/dist/chunk-k7dt2g4a.js +41 -0
  356. package/dist/chunk-k7hexw3v.js +969 -0
  357. package/dist/chunk-k7wwkraa.js +117 -0
  358. package/dist/chunk-kb3758f7.js +51 -0
  359. package/dist/chunk-kc67kt75.js +3119 -0
  360. package/dist/chunk-kdhmfxmh.js +3149 -0
  361. package/dist/chunk-kejdd6zc.js +51 -0
  362. package/dist/chunk-kekrjeem.js +402 -0
  363. package/dist/chunk-kez5r0zz.js +280 -0
  364. package/dist/chunk-kfsvcs5t.js +75 -0
  365. package/dist/chunk-khtvffc4.js +285 -0
  366. package/dist/chunk-kkz4w1tv.js +64 -0
  367. package/dist/chunk-kmywng0j.js +272 -0
  368. package/dist/chunk-kq6vcpdr.js +224 -0
  369. package/dist/chunk-kqzdszcc.js +37 -0
  370. package/dist/chunk-ktxpp02w.js +435 -0
  371. package/dist/chunk-kwcvhbtz.js +26 -0
  372. package/dist/chunk-kx0cm9qr.js +128 -0
  373. package/dist/chunk-kxcmqz10.js +120 -0
  374. package/dist/chunk-kxwava1g.js +14 -0
  375. package/dist/chunk-kywtr3jg.js +825 -0
  376. package/dist/chunk-kzwg923p.js +8 -0
  377. package/dist/chunk-m1eq3sgv.js +255 -0
  378. package/dist/chunk-m21h5zb4.js +119 -0
  379. package/dist/chunk-m2c3bjv1.js +111 -0
  380. package/dist/chunk-m41e19ms.js +42 -0
  381. package/dist/chunk-m7ka36ex.js +97 -0
  382. package/dist/chunk-m81w8tbm.js +259 -0
  383. package/dist/chunk-m95ggkax.js +281 -0
  384. package/dist/chunk-manx26xa.js +145 -0
  385. package/dist/chunk-mdxh3pk2.js +298 -0
  386. package/dist/chunk-mhbfkcja.js +311 -0
  387. package/dist/chunk-mjnr5erm.js +173 -0
  388. package/dist/chunk-mngvnmwp.js +135 -0
  389. package/dist/chunk-mvfqanv5.js +63 -0
  390. package/dist/chunk-mw1nesq1.js +140 -0
  391. package/dist/chunk-mx168925.js +661 -0
  392. package/dist/chunk-mxwvj18g.js +795 -0
  393. package/dist/chunk-my7r5mba.js +257 -0
  394. package/dist/chunk-myaa1kkf.js +17 -0
  395. package/dist/chunk-myypc3tn.js +46 -0
  396. package/dist/chunk-mzcnmnpq.js +3379 -0
  397. package/dist/chunk-mznav6d1.js +194 -0
  398. package/dist/chunk-n0qxskpr.js +24 -0
  399. package/dist/chunk-n6a6hgtp.js +394 -0
  400. package/dist/chunk-n6d5fgx0.js +254 -0
  401. package/dist/chunk-n6ym3n03.js +120 -0
  402. package/dist/chunk-n9g24mwe.js +104 -0
  403. package/dist/chunk-naamqdf9.js +185 -0
  404. package/dist/chunk-nb2jk7zj.js +15 -0
  405. package/dist/chunk-nbkbq9en.js +67 -0
  406. package/dist/chunk-ndttd6es.js +38 -0
  407. package/dist/chunk-nfygaaxg.js +133 -0
  408. package/dist/chunk-ngdzpszd.js +454 -0
  409. package/dist/chunk-nmfwksa4.js +1297 -0
  410. package/dist/chunk-nt837qt9.js +21 -0
  411. package/dist/chunk-nwc3v0vp.js +691 -0
  412. package/dist/chunk-nz8ha95p.js +3610 -0
  413. package/dist/chunk-nzxfj0gq.js +2007 -0
  414. package/dist/chunk-p0r8887g.js +6932 -0
  415. package/dist/chunk-p1seyqdm.js +120 -0
  416. package/dist/chunk-p425zbgw.js +726 -0
  417. package/dist/chunk-p7hamd2c.js +146 -0
  418. package/dist/chunk-pdvg91cg.js +32 -0
  419. package/dist/chunk-pecy49yr.js +14649 -0
  420. package/dist/chunk-pfxrg89f.js +547 -0
  421. package/dist/chunk-pfyw3155.js +2750 -0
  422. package/dist/chunk-pr8m11pm.js +1192 -0
  423. package/dist/chunk-ptxteaeh.js +1591 -0
  424. package/dist/chunk-pv164mac.js +394 -0
  425. package/dist/chunk-pxxhtxf5.js +10154 -0
  426. package/dist/chunk-q0e485mg.js +61 -0
  427. package/dist/chunk-q1vrhh0q.js +458 -0
  428. package/dist/chunk-q2h79ncs.js +370 -0
  429. package/dist/chunk-q3b4n194.js +56 -0
  430. package/dist/chunk-q44zc68f.js +4301 -0
  431. package/dist/chunk-q8gknbdx.js +352 -0
  432. package/dist/chunk-q8xk3kdj.js +11 -0
  433. package/dist/chunk-qak46xtp.js +119 -0
  434. package/dist/chunk-qfq7absv.js +95 -0
  435. package/dist/chunk-qfsn720k.js +151 -0
  436. package/dist/chunk-qg4811f6.js +228 -0
  437. package/dist/chunk-qgzn3qps.js +90 -0
  438. package/dist/chunk-qhaggqkt.js +113 -0
  439. package/dist/chunk-qjjp27z8.js +195 -0
  440. package/dist/chunk-qxp0nye6.js +34 -0
  441. package/dist/chunk-qy3nagaq.js +4957 -0
  442. package/dist/chunk-qz2meav1.js +1452 -0
  443. package/dist/chunk-r50hne7m.js +63 -0
  444. package/dist/chunk-r6m0vgnv.js +80 -0
  445. package/dist/chunk-r7yw38vf.js +22864 -0
  446. package/dist/chunk-r8xc618w.js +42 -0
  447. package/dist/chunk-r961r5kj.js +87 -0
  448. package/dist/chunk-r9b5xrh0.js +66 -0
  449. package/dist/chunk-rcn2pd6q.js +477 -0
  450. package/dist/chunk-rdeh8p3y.js +148 -0
  451. package/dist/chunk-rg9x1742.js +542 -0
  452. package/dist/chunk-rgyzsbs3.js +39 -0
  453. package/dist/chunk-rk2fsxtz.js +16 -0
  454. package/dist/chunk-rkchkwv9.js +40 -0
  455. package/dist/chunk-rp8whpb3.js +478 -0
  456. package/dist/chunk-rpkxdtgr.js +68 -0
  457. package/dist/chunk-rpmntgyh.js +394 -0
  458. package/dist/chunk-rpshz4dy.js +614 -0
  459. package/dist/chunk-rqd60ay5.js +133 -0
  460. package/dist/chunk-rrsjf2ea.js +229 -0
  461. package/dist/chunk-rtjk8c8e.js +173 -0
  462. package/dist/chunk-rw0y2wdf.js +1017 -0
  463. package/dist/chunk-rx5w7ess.js +663 -0
  464. package/dist/chunk-rx8t9d35.js +1947 -0
  465. package/dist/chunk-rxcazxgf.js +195 -0
  466. package/dist/chunk-rxg6q3bp.js +1413 -0
  467. package/dist/chunk-rxrb7xnd.js +71 -0
  468. package/dist/chunk-rxrzxff3.js +118 -0
  469. package/dist/chunk-ryqjc943.js +71 -0
  470. package/dist/chunk-rzk9k2rf.js +81 -0
  471. package/dist/chunk-s2qv0nht.js +119 -0
  472. package/dist/chunk-s3hafnk3.js +2285 -0
  473. package/dist/chunk-s4a496tt.js +226 -0
  474. package/dist/chunk-s4d1h3ka.js +35 -0
  475. package/dist/chunk-sm3k3ze4.js +16525 -0
  476. package/dist/chunk-sn0bja82.js +385 -0
  477. package/dist/chunk-sngjggw1.js +4227 -0
  478. package/dist/chunk-sq047n34.js +364 -0
  479. package/dist/chunk-sttwe2tw.js +8584 -0
  480. package/dist/chunk-sw8qx1r0.js +86 -0
  481. package/dist/chunk-swstah6a.js +240 -0
  482. package/dist/chunk-syrkr0mf.js +63 -0
  483. package/dist/chunk-sz206bd9.js +26 -0
  484. package/dist/chunk-t09669cj.js +333 -0
  485. package/dist/chunk-t5f8e30k.js +602 -0
  486. package/dist/chunk-t5m78mc8.js +432 -0
  487. package/dist/chunk-t5x1dqwn.js +143 -0
  488. package/dist/chunk-t877ea0w.js +168 -0
  489. package/dist/chunk-t91hb71c.js +17 -0
  490. package/dist/chunk-tb636bcf.js +942 -0
  491. package/dist/chunk-tb8sykbr.js +426 -0
  492. package/dist/chunk-tbdkekz3.js +125 -0
  493. package/dist/chunk-td2gsz7s.js +225 -0
  494. package/dist/chunk-tenvxbyh.js +20 -0
  495. package/dist/chunk-texg4qqt.js +317 -0
  496. package/dist/chunk-teymzz80.js +266 -0
  497. package/dist/chunk-tj26qpf7.js +153 -0
  498. package/dist/chunk-tk85ec4p.js +395 -0
  499. package/dist/chunk-tq205h01.js +164 -0
  500. package/dist/chunk-tqzddjzg.js +61 -0
  501. package/dist/chunk-trqrj23e.js +134 -0
  502. package/dist/chunk-tw1hfsxv.js +2477 -0
  503. package/dist/chunk-txxdfq83.js +122 -0
  504. package/dist/chunk-v0yhe582.js +31 -0
  505. package/dist/chunk-v14184xm.js +15 -0
  506. package/dist/chunk-v1h9z4hw.js +138 -0
  507. package/dist/chunk-v3ey5j7f.js +329 -0
  508. package/dist/chunk-v3nh1sfn.js +208 -0
  509. package/dist/chunk-v3x8tcc0.js +45 -0
  510. package/dist/chunk-v4nqnvqq.js +3984 -0
  511. package/dist/chunk-v4ypszbb.js +15 -0
  512. package/dist/chunk-v7wbqcx9.js +63 -0
  513. package/dist/chunk-v8r5fev3.js +341 -0
  514. package/dist/chunk-v9zg5kzx.js +2810 -0
  515. package/dist/chunk-va1wh5ss.js +24 -0
  516. package/dist/chunk-vbfswhht.js +42 -0
  517. package/dist/chunk-ve7x2tfq.js +124 -0
  518. package/dist/chunk-vfz8k89y.js +485 -0
  519. package/dist/chunk-vgm5k14x.js +35678 -0
  520. package/dist/chunk-vh9pej3c.js +247 -0
  521. package/dist/chunk-vjxqyt6f.js +3820 -0
  522. package/dist/chunk-vpb1xstn.js +178 -0
  523. package/dist/chunk-vqt79tj8.js +110 -0
  524. package/dist/chunk-vr0n9pv9.js +152 -0
  525. package/dist/chunk-vrejmja5.js +90 -0
  526. package/dist/chunk-vrxasmdw.js +449 -0
  527. package/dist/chunk-vrxb946v.js +125 -0
  528. package/dist/chunk-vv4kj0q8.js +98 -0
  529. package/dist/chunk-vvpfng7w.js +8 -0
  530. package/dist/chunk-vw6ybyew.js +2007 -0
  531. package/dist/chunk-vwenx8ke.js +17 -0
  532. package/dist/chunk-vwfa0s5a.js +155 -0
  533. package/dist/chunk-vx71j8xe.js +63 -0
  534. package/dist/chunk-vxbjzggp.js +43 -0
  535. package/dist/chunk-vxjxtz8w.js +440 -0
  536. package/dist/chunk-vy0c1bwp.js +9 -0
  537. package/dist/chunk-w3zczyse.js +14 -0
  538. package/dist/chunk-w4p5t920.js +655 -0
  539. package/dist/chunk-w68wc625.js +287 -0
  540. package/dist/chunk-w9ddp3yf.js +96 -0
  541. package/dist/chunk-wcggm5ja.js +125 -0
  542. package/dist/chunk-wgnyph3q.js +1306 -0
  543. package/dist/chunk-wjm5pc1e.js +134 -0
  544. package/dist/chunk-wnve0drm.js +131 -0
  545. package/dist/chunk-wp27ev2k.js +135 -0
  546. package/dist/chunk-wyvy8a4x.js +131 -0
  547. package/dist/chunk-x671y4dk.js +129 -0
  548. package/dist/chunk-xbj5keyy.js +22 -0
  549. package/dist/chunk-xf4fzms8.js +39 -0
  550. package/dist/chunk-xf59k3zg.js +65 -0
  551. package/dist/chunk-xgzc4w49.js +204 -0
  552. package/dist/chunk-xhj7g13b.js +2149 -0
  553. package/dist/chunk-xjp0cd00.js +56 -0
  554. package/dist/chunk-xkhnmhqs.js +74 -0
  555. package/dist/chunk-xkrkqx61.js +55 -0
  556. package/dist/chunk-xmpgmeb8.js +114 -0
  557. package/dist/chunk-xrw80zgd.js +4249 -0
  558. package/dist/chunk-xrzc96g0.js +202 -0
  559. package/dist/chunk-xt76sm44.js +318 -0
  560. package/dist/chunk-xwet3awb.js +20 -0
  561. package/dist/chunk-xyg1sk2w.js +78 -0
  562. package/dist/chunk-y0jpkqb0.js +180 -0
  563. package/dist/chunk-y1q7rt9n.js +102 -0
  564. package/dist/chunk-y67ntyek.js +258 -0
  565. package/dist/chunk-ybk37qp9.js +37 -0
  566. package/dist/chunk-yc1stfve.js +5386 -0
  567. package/dist/chunk-ychjpjef.js +62 -0
  568. package/dist/chunk-yez8fa9g.js +276 -0
  569. package/dist/chunk-ygm7xszr.js +90 -0
  570. package/dist/chunk-ym11azkj.js +37 -0
  571. package/dist/chunk-ympz2h15.js +578 -0
  572. package/dist/chunk-yqx3az3n.js +129 -0
  573. package/dist/chunk-yt3nfhcc.js +152 -0
  574. package/dist/chunk-yy8q0n8s.js +120 -0
  575. package/dist/chunk-yzb92zxv.js +8 -0
  576. package/dist/chunk-yzet6xyr.js +119 -0
  577. package/dist/chunk-yzm97qp1.js +226 -0
  578. package/dist/chunk-z0jgeax8.js +35 -0
  579. package/dist/chunk-z1r3z6w6.js +29 -0
  580. package/dist/chunk-z2dp53wn.js +17 -0
  581. package/dist/chunk-z79355gz.js +308 -0
  582. package/dist/chunk-z7e94hxz.js +251 -0
  583. package/dist/chunk-z8cqdcec.js +173 -0
  584. package/dist/chunk-z99tbg45.js +148 -0
  585. package/dist/chunk-z9nsjcht.js +37 -0
  586. package/dist/chunk-za3k6h2h.js +470 -0
  587. package/dist/chunk-zacynq5p.js +265 -0
  588. package/dist/chunk-zb0x40az.js +1785 -0
  589. package/dist/chunk-zbxtzycc.js +274 -0
  590. package/dist/chunk-zga50181.js +342 -0
  591. package/dist/chunk-zhb2pns1.js +44 -0
  592. package/dist/chunk-zkch6trx.js +231 -0
  593. package/dist/chunk-znf3z4qt.js +954 -0
  594. package/dist/chunk-zp8zwdgq.js +72 -0
  595. package/dist/chunk-ztjd8pyf.js +120 -0
  596. package/dist/chunk-ztmb7geg.js +173 -0
  597. package/dist/chunk-zvr4snzv.js +887 -0
  598. package/dist/chunk-zw62m6n3.js +34858 -0
  599. package/dist/chunk-zwwdebd0.js +65 -0
  600. package/dist/chunk-zxc6x9w8.js +340 -0
  601. package/dist/chunk-zy2e7sz0.js +8 -0
  602. package/dist/chunk-zzf074w3.js +196 -0
  603. package/dist/chunk-zzz0nwb5.js +310 -0
  604. package/dist/cli-bun.js +2 -0
  605. package/dist/cli-node.js +2 -0
  606. package/dist/cli.js +218 -0
  607. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  608. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  609. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  610. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  611. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  612. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  613. package/dist/vendor/ripgrep/x64-win32/rg.exe +0 -0
  614. package/package.json +243 -0
  615. package/scripts/chrome-mcp-bridge-resolver.mjs +43 -0
  616. package/scripts/chrome-mcp-env.mjs +19 -0
  617. package/scripts/postinstall.cjs +339 -0
  618. package/scripts/run-parallel.mjs +10 -0
  619. package/scripts/setup-chrome-mcp.mjs +69 -0
@@ -0,0 +1,3149 @@
1
+ // @bun
2
+ import {
3
+ init_mappers,
4
+ toInternalMessages
5
+ } from "./chunk-qg4811f6.js";
6
+ import {
7
+ init_Dialog
8
+ } from "./chunk-kxwava1g.js";
9
+ import {
10
+ ASK_USER_QUESTION_TOOL_NAME,
11
+ DreamTask,
12
+ EMPTY_LOOKUPS,
13
+ EXIT_PLAN_MODE_V2_TOOL_NAME,
14
+ InProcessTeammateTask,
15
+ LocalAgentTask,
16
+ LocalShellTask,
17
+ Message,
18
+ RemoteAgentTask,
19
+ Select,
20
+ UserPlanMessage,
21
+ exports_LocalWorkflowTask,
22
+ exports_MonitorMcpTask,
23
+ extractTag,
24
+ findToolByName,
25
+ getEmptyToolPermissionContext,
26
+ getRainbowColor,
27
+ getRemoteTaskSessionUrl,
28
+ getTaskOutputPath,
29
+ getTools,
30
+ init_AppState,
31
+ init_DreamTask,
32
+ init_InProcessTeammateTask,
33
+ init_LocalAgentTask,
34
+ init_LocalShellTask,
35
+ init_LocalWorkflowTask,
36
+ init_Message,
37
+ init_MonitorMcpTask,
38
+ init_RemoteAgentTask,
39
+ init_Task,
40
+ init_Tool,
41
+ init_UserPlanMessage,
42
+ init_collapseReadSearch,
43
+ init_constants2,
44
+ init_coordinatorMode,
45
+ init_diskOutput,
46
+ init_ink,
47
+ init_messages1 as init_messages,
48
+ init_overlayContext,
49
+ init_prompt8 as init_prompt,
50
+ init_select,
51
+ init_teleport,
52
+ init_thinking,
53
+ init_tools1 as init_tools,
54
+ init_types2 as init_types,
55
+ init_ultraplan,
56
+ init_useElapsedTime,
57
+ init_useSettings,
58
+ init_useShortcutDisplay,
59
+ init_useTerminalSize,
60
+ isBackgroundTask,
61
+ isCoordinatorMode,
62
+ isPanelAgentTask,
63
+ isTerminalTaskStatus,
64
+ normalizeMessages,
65
+ stopUltraplan,
66
+ summarizeRecentActivities,
67
+ teleportResumeCodeSession,
68
+ toInkColor,
69
+ useAppState,
70
+ useElapsedTime,
71
+ useRegisterOverlay,
72
+ useSetAppState,
73
+ useSettings,
74
+ useShortcutDisplay
75
+ } from "./chunk-gmdy2w3z.js";
76
+ import {
77
+ init_useKeybinding
78
+ } from "./chunk-65zbgg1n.js";
79
+ import {
80
+ init_browser,
81
+ openBrowser
82
+ } from "./chunk-6hr7742d.js";
83
+ import {
84
+ TEAM_LEAD_NAME,
85
+ init_constants as init_constants3
86
+ } from "./chunk-935nrvdb.js";
87
+ import {
88
+ AGENT_TOOL_NAME,
89
+ DIAMOND_FILLED,
90
+ DIAMOND_OPEN,
91
+ LEGACY_AGENT_TOOL_NAME,
92
+ init_constants1 as init_constants,
93
+ init_figures as init_figures2,
94
+ init_stringUtils,
95
+ plural
96
+ } from "./chunk-eemjb825.js";
97
+ import {
98
+ count,
99
+ init_array,
100
+ intersperse
101
+ } from "./chunk-k7hexw3v.js";
102
+ import {
103
+ formatDuration,
104
+ formatFileSize,
105
+ formatNumber,
106
+ init_format,
107
+ truncate,
108
+ truncateToWidth
109
+ } from "./chunk-q1vrhh0q.js";
110
+ import {
111
+ Byline,
112
+ Dialog,
113
+ KeyboardShortcutHint,
114
+ Link,
115
+ ThemedBox_default,
116
+ ThemedText,
117
+ init_src,
118
+ useAnimationFrame,
119
+ useKeybindings,
120
+ useTerminalSize,
121
+ useTheme
122
+ } from "./chunk-2g0ytd9d.js";
123
+ import {
124
+ require_jsx_dev_runtime,
125
+ require_react
126
+ } from "./chunk-de0qnnf7.js";
127
+ import {
128
+ init_analytics,
129
+ logEvent
130
+ } from "./chunk-j1mep9ck.js";
131
+ import {
132
+ figures_default,
133
+ init_figures
134
+ } from "./chunk-c5g9shkw.js";
135
+ import {
136
+ errorMessage,
137
+ init_errors,
138
+ init_fsOperations,
139
+ tailFile
140
+ } from "./chunk-s3hafnk3.js";
141
+ import {
142
+ __esm,
143
+ __export,
144
+ __toCommonJS,
145
+ __toESM
146
+ } from "./chunk-hhsxm2yr.js";
147
+
148
+ // src/state/teammateViewHelpers.ts
149
+ function isLocalAgent(task) {
150
+ return typeof task === "object" && task !== null && "type" in task && task.type === "local_agent";
151
+ }
152
+ function release(task) {
153
+ return {
154
+ ...task,
155
+ retain: false,
156
+ messages: undefined,
157
+ diskLoaded: false,
158
+ evictAfter: isTerminalTaskStatus(task.status) ? Date.now() + PANEL_GRACE_MS : undefined
159
+ };
160
+ }
161
+ function enterTeammateView(taskId, setAppState) {
162
+ logEvent("tengu_transcript_view_enter", {});
163
+ setAppState((prev) => {
164
+ const task = prev.tasks[taskId];
165
+ const prevId = prev.viewingAgentTaskId;
166
+ const prevTask = prevId !== undefined ? prev.tasks[prevId] : undefined;
167
+ const switching = prevId !== undefined && prevId !== taskId && isLocalAgent(prevTask) && prevTask.retain;
168
+ const needsRetain = isLocalAgent(task) && (!task.retain || task.evictAfter !== undefined);
169
+ const needsView = prev.viewingAgentTaskId !== taskId || prev.viewSelectionMode !== "viewing-agent";
170
+ if (!needsRetain && !needsView && !switching)
171
+ return prev;
172
+ let tasks = prev.tasks;
173
+ if (switching || needsRetain) {
174
+ tasks = { ...prev.tasks };
175
+ if (switching)
176
+ tasks[prevId] = release(prevTask);
177
+ if (needsRetain) {
178
+ tasks[taskId] = { ...task, retain: true, evictAfter: undefined };
179
+ }
180
+ }
181
+ return {
182
+ ...prev,
183
+ viewingAgentTaskId: taskId,
184
+ viewSelectionMode: "viewing-agent",
185
+ tasks
186
+ };
187
+ });
188
+ }
189
+ function exitTeammateView(setAppState) {
190
+ logEvent("tengu_transcript_view_exit", {});
191
+ setAppState((prev) => {
192
+ const id = prev.viewingAgentTaskId;
193
+ const cleared = {
194
+ ...prev,
195
+ viewingAgentTaskId: undefined,
196
+ viewSelectionMode: "none"
197
+ };
198
+ if (id === undefined) {
199
+ return prev.viewSelectionMode === "none" ? prev : cleared;
200
+ }
201
+ const task = prev.tasks[id];
202
+ if (!isLocalAgent(task) || !task.retain)
203
+ return cleared;
204
+ return {
205
+ ...cleared,
206
+ tasks: { ...prev.tasks, [id]: release(task) }
207
+ };
208
+ });
209
+ }
210
+ function stopOrDismissAgent(taskId, setAppState) {
211
+ setAppState((prev) => {
212
+ const task = prev.tasks[taskId];
213
+ if (!isLocalAgent(task))
214
+ return prev;
215
+ if (task.status === "running") {
216
+ task.abortController?.abort();
217
+ return prev;
218
+ }
219
+ if (task.evictAfter === 0)
220
+ return prev;
221
+ const viewingThis = prev.viewingAgentTaskId === taskId;
222
+ return {
223
+ ...prev,
224
+ tasks: {
225
+ ...prev.tasks,
226
+ [taskId]: { ...release(task), evictAfter: 0 }
227
+ },
228
+ ...viewingThis && {
229
+ viewingAgentTaskId: undefined,
230
+ viewSelectionMode: "none"
231
+ }
232
+ };
233
+ });
234
+ }
235
+ var PANEL_GRACE_MS = 30000;
236
+ var init_teammateViewHelpers = __esm(() => {
237
+ init_analytics();
238
+ init_Task();
239
+ });
240
+
241
+ // src/components/tasks/renderToolActivity.tsx
242
+ function renderToolActivity(activity, tools, theme) {
243
+ const tool = findToolByName(tools, activity.toolName);
244
+ if (!tool) {
245
+ return activity.toolName;
246
+ }
247
+ try {
248
+ const parsed = tool.inputSchema.safeParse(activity.input);
249
+ const parsedInput = parsed.success ? parsed.data : {};
250
+ const userFacingName = tool.userFacingName(parsedInput);
251
+ if (!userFacingName) {
252
+ return activity.toolName;
253
+ }
254
+ const toolArgs = tool.renderToolUseMessage(parsedInput, {
255
+ theme,
256
+ verbose: false
257
+ });
258
+ if (toolArgs) {
259
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedText, {
260
+ children: [
261
+ userFacingName,
262
+ "(",
263
+ toolArgs,
264
+ ")"
265
+ ]
266
+ }, undefined, true, undefined, this);
267
+ }
268
+ return userFacingName;
269
+ } catch {
270
+ return activity.toolName;
271
+ }
272
+ }
273
+ var jsx_dev_runtime;
274
+ var init_renderToolActivity = __esm(() => {
275
+ init_src();
276
+ init_Tool();
277
+ jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
278
+ });
279
+
280
+ // src/components/tasks/taskStatusUtils.tsx
281
+ function isTerminalStatus(status) {
282
+ return status === "completed" || status === "failed" || status === "killed";
283
+ }
284
+ function getTaskStatusIcon(status, options) {
285
+ const { isIdle, awaitingApproval, hasError, shutdownRequested } = options ?? {};
286
+ if (hasError)
287
+ return figures_default.cross;
288
+ if (awaitingApproval)
289
+ return figures_default.questionMarkPrefix;
290
+ if (shutdownRequested)
291
+ return figures_default.warning;
292
+ if (status === "running") {
293
+ if (isIdle)
294
+ return figures_default.ellipsis;
295
+ return figures_default.play;
296
+ }
297
+ if (status === "completed")
298
+ return figures_default.tick;
299
+ if (status === "failed" || status === "killed")
300
+ return figures_default.cross;
301
+ return figures_default.bullet;
302
+ }
303
+ function getTaskStatusColor(status, options) {
304
+ const { isIdle, awaitingApproval, hasError, shutdownRequested } = options ?? {};
305
+ if (hasError)
306
+ return "error";
307
+ if (awaitingApproval)
308
+ return "warning";
309
+ if (shutdownRequested)
310
+ return "warning";
311
+ if (isIdle)
312
+ return "background";
313
+ if (status === "completed")
314
+ return "success";
315
+ if (status === "failed")
316
+ return "error";
317
+ if (status === "killed")
318
+ return "warning";
319
+ return "background";
320
+ }
321
+ function describeTeammateActivity(t) {
322
+ if (t.shutdownRequested)
323
+ return "stopping";
324
+ if (t.awaitingPlanApproval)
325
+ return "awaiting approval";
326
+ if (t.isIdle)
327
+ return "idle";
328
+ return (t.progress?.recentActivities && summarizeRecentActivities(t.progress.recentActivities)) ?? t.progress?.lastActivity?.activityDescription ?? "working";
329
+ }
330
+ function shouldHideTasksFooter(tasks, showSpinnerTree) {
331
+ if (!showSpinnerTree)
332
+ return false;
333
+ let hasVisibleTask = false;
334
+ for (const t of Object.values(tasks)) {
335
+ if (!isBackgroundTask(t) || process.env.USER_TYPE === "ant" && isPanelAgentTask(t)) {
336
+ continue;
337
+ }
338
+ hasVisibleTask = true;
339
+ if (t.type !== "in_process_teammate")
340
+ return false;
341
+ }
342
+ return hasVisibleTask;
343
+ }
344
+ var init_taskStatusUtils = __esm(() => {
345
+ init_figures();
346
+ init_LocalAgentTask();
347
+ init_types();
348
+ init_collapseReadSearch();
349
+ });
350
+
351
+ // src/components/tasks/AsyncAgentDetailDialog.tsx
352
+ function AsyncAgentDetailDialog({
353
+ agent,
354
+ onDone,
355
+ onKillAgent,
356
+ onBack
357
+ }) {
358
+ const [theme] = useTheme();
359
+ const tools = import_react.useMemo(() => getTools(getEmptyToolPermissionContext()), []);
360
+ const elapsedTime = useElapsedTime(agent.startTime, agent.status === "running", 1000, agent.totalPausedMs ?? 0);
361
+ useKeybindings({
362
+ "confirm:yes": onDone
363
+ }, { context: "Confirmation" });
364
+ const handleKeyDown = (e) => {
365
+ if (e.key === " ") {
366
+ e.preventDefault();
367
+ onDone();
368
+ } else if (e.key === "left" && onBack) {
369
+ e.preventDefault();
370
+ onBack();
371
+ } else if (e.key === "x" && agent.status === "running" && onKillAgent) {
372
+ e.preventDefault();
373
+ onKillAgent();
374
+ }
375
+ };
376
+ const planContent = extractTag(agent.prompt, "plan");
377
+ const displayPrompt = agent.prompt.length > 300 ? agent.prompt.substring(0, 297) + "\u2026" : agent.prompt;
378
+ const tokenCount = agent.result?.totalTokens ?? agent.progress?.tokenCount;
379
+ const toolUseCount = agent.result?.totalToolUseCount ?? agent.progress?.toolUseCount;
380
+ const title = /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
381
+ children: [
382
+ agent.selectedAgent?.agentType ?? "agent",
383
+ " \u203A",
384
+ " ",
385
+ agent.description || "Async agent"
386
+ ]
387
+ }, undefined, true, undefined, this);
388
+ const subtitle = /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
389
+ children: [
390
+ agent.status !== "running" && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
391
+ color: getTaskStatusColor(agent.status),
392
+ children: [
393
+ getTaskStatusIcon(agent.status),
394
+ " ",
395
+ agent.status === "completed" ? "Completed" : agent.status === "failed" ? "Failed" : "Stopped",
396
+ " \xB7 "
397
+ ]
398
+ }, undefined, true, undefined, this),
399
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
400
+ dimColor: true,
401
+ children: [
402
+ elapsedTime,
403
+ tokenCount !== undefined && tokenCount > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(jsx_dev_runtime2.Fragment, {
404
+ children: [
405
+ " \xB7 ",
406
+ formatNumber(tokenCount),
407
+ " tokens"
408
+ ]
409
+ }, undefined, true, undefined, this),
410
+ toolUseCount !== undefined && toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(jsx_dev_runtime2.Fragment, {
411
+ children: [
412
+ " ",
413
+ "\xB7 ",
414
+ toolUseCount,
415
+ " ",
416
+ toolUseCount === 1 ? "tool" : "tools"
417
+ ]
418
+ }, undefined, true, undefined, this)
419
+ ]
420
+ }, undefined, true, undefined, this)
421
+ ]
422
+ }, undefined, true, undefined, this);
423
+ return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
424
+ flexDirection: "column",
425
+ tabIndex: 0,
426
+ autoFocus: true,
427
+ onKeyDown: handleKeyDown,
428
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Dialog, {
429
+ title,
430
+ subtitle,
431
+ onCancel: onDone,
432
+ color: "background",
433
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
434
+ children: [
435
+ "Press ",
436
+ exitState.keyName,
437
+ " again to exit"
438
+ ]
439
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Byline, {
440
+ children: [
441
+ onBack && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
442
+ shortcut: "\u2190",
443
+ action: "go back"
444
+ }, undefined, false, undefined, this),
445
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
446
+ shortcut: "Esc/Enter/Space",
447
+ action: "close"
448
+ }, undefined, false, undefined, this),
449
+ agent.status === "running" && onKillAgent && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
450
+ shortcut: "x",
451
+ action: "stop"
452
+ }, undefined, false, undefined, this)
453
+ ]
454
+ }, undefined, true, undefined, this),
455
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
456
+ flexDirection: "column",
457
+ children: [
458
+ agent.status === "running" && agent.progress?.recentActivities && agent.progress.recentActivities.length > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
459
+ flexDirection: "column",
460
+ children: [
461
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
462
+ bold: true,
463
+ dimColor: true,
464
+ children: "Progress"
465
+ }, undefined, false, undefined, this),
466
+ agent.progress.recentActivities.map((activity, i) => /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
467
+ dimColor: i < agent.progress.recentActivities.length - 1,
468
+ wrap: "truncate-end",
469
+ children: [
470
+ i === agent.progress.recentActivities.length - 1 ? "\u203A " : " ",
471
+ renderToolActivity(activity, tools, theme)
472
+ ]
473
+ }, i, true, undefined, this))
474
+ ]
475
+ }, undefined, true, undefined, this),
476
+ planContent ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
477
+ marginTop: 1,
478
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(UserPlanMessage, {
479
+ addMargin: false,
480
+ planContent
481
+ }, undefined, false, undefined, this)
482
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
483
+ flexDirection: "column",
484
+ marginTop: 1,
485
+ children: [
486
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
487
+ bold: true,
488
+ dimColor: true,
489
+ children: "Prompt"
490
+ }, undefined, false, undefined, this),
491
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
492
+ wrap: "wrap",
493
+ children: displayPrompt
494
+ }, undefined, false, undefined, this)
495
+ ]
496
+ }, undefined, true, undefined, this),
497
+ agent.status === "failed" && agent.error && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
498
+ flexDirection: "column",
499
+ marginTop: 1,
500
+ children: [
501
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
502
+ bold: true,
503
+ color: "error",
504
+ children: "Error"
505
+ }, undefined, false, undefined, this),
506
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
507
+ color: "error",
508
+ wrap: "wrap",
509
+ children: agent.error
510
+ }, undefined, false, undefined, this)
511
+ ]
512
+ }, undefined, true, undefined, this)
513
+ ]
514
+ }, undefined, true, undefined, this)
515
+ }, undefined, false, undefined, this)
516
+ }, undefined, false, undefined, this);
517
+ }
518
+ var import_react, jsx_dev_runtime2;
519
+ var init_AsyncAgentDetailDialog = __esm(() => {
520
+ init_useElapsedTime();
521
+ init_src();
522
+ init_useKeybinding();
523
+ init_Tool();
524
+ init_tools();
525
+ init_format();
526
+ init_messages();
527
+ init_src();
528
+ init_UserPlanMessage();
529
+ init_renderToolActivity();
530
+ init_taskStatusUtils();
531
+ import_react = __toESM(require_react(), 1);
532
+ jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
533
+ });
534
+
535
+ // src/components/tasks/RemoteSessionProgress.tsx
536
+ function formatReviewStageCounts(stage, found, verified, refuted) {
537
+ if (!stage)
538
+ return `${found} found \xB7 ${verified} verified`;
539
+ if (stage === "synthesizing") {
540
+ const parts = [`${verified} verified`];
541
+ if (refuted > 0)
542
+ parts.push(`${refuted} refuted`);
543
+ parts.push("deduping");
544
+ return parts.join(" \xB7 ");
545
+ }
546
+ if (stage === "verifying") {
547
+ const parts = [`${found} found`, `${verified} verified`];
548
+ if (refuted > 0)
549
+ parts.push(`${refuted} refuted`);
550
+ return parts.join(" \xB7 ");
551
+ }
552
+ return found > 0 ? `${found} found` : "finding";
553
+ }
554
+ function RainbowText({
555
+ text,
556
+ phase = 0
557
+ }) {
558
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
559
+ children: [...text].map((ch, i) => /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
560
+ color: getRainbowColor(i + phase),
561
+ children: ch
562
+ }, i, false, undefined, this))
563
+ }, undefined, false, undefined, this);
564
+ }
565
+ function useSmoothCount(target, time, snap) {
566
+ const displayed = import_react2.useRef(target);
567
+ const lastTick = import_react2.useRef(time);
568
+ if (snap || target < displayed.current) {
569
+ displayed.current = target;
570
+ } else if (target > displayed.current && time !== lastTick.current) {
571
+ displayed.current += 1;
572
+ lastTick.current = time;
573
+ }
574
+ return displayed.current;
575
+ }
576
+ function ReviewRainbowLine({
577
+ session
578
+ }) {
579
+ const settings = useSettings();
580
+ const reducedMotion = settings.prefersReducedMotion ?? false;
581
+ const p = session.reviewProgress;
582
+ const running = session.status === "running";
583
+ const [, time] = useAnimationFrame(running && !reducedMotion ? TICK_MS : null);
584
+ const targetFound = p?.bugsFound ?? 0;
585
+ const targetVerified = p?.bugsVerified ?? 0;
586
+ const targetRefuted = p?.bugsRefuted ?? 0;
587
+ const snap = reducedMotion || !running;
588
+ const found = useSmoothCount(targetFound, time, snap);
589
+ const verified = useSmoothCount(targetVerified, time, snap);
590
+ const refuted = useSmoothCount(targetRefuted, time, snap);
591
+ const phase = Math.floor(time / (TICK_MS * 3)) % 7;
592
+ if (session.status === "completed") {
593
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
594
+ children: [
595
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
596
+ color: "background",
597
+ children: [
598
+ DIAMOND_FILLED,
599
+ " "
600
+ ]
601
+ }, undefined, true, undefined, this),
602
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
603
+ text: "ultrareview",
604
+ phase: 0
605
+ }, undefined, false, undefined, this),
606
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
607
+ dimColor: true,
608
+ children: " ready \xB7 shift+\u2193 to view"
609
+ }, undefined, false, undefined, this)
610
+ ]
611
+ }, undefined, true, undefined, this);
612
+ }
613
+ if (session.status === "failed") {
614
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
615
+ children: [
616
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
617
+ color: "background",
618
+ children: [
619
+ DIAMOND_FILLED,
620
+ " "
621
+ ]
622
+ }, undefined, true, undefined, this),
623
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
624
+ text: "ultrareview",
625
+ phase: 0
626
+ }, undefined, false, undefined, this),
627
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
628
+ color: "error",
629
+ dimColor: true,
630
+ children: [
631
+ " \xB7 ",
632
+ "error"
633
+ ]
634
+ }, undefined, true, undefined, this)
635
+ ]
636
+ }, undefined, true, undefined, this);
637
+ }
638
+ const tail = !p ? "setting up" : formatReviewStageCounts(p.stage, found, verified, refuted);
639
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
640
+ children: [
641
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
642
+ color: "background",
643
+ children: [
644
+ DIAMOND_OPEN,
645
+ " "
646
+ ]
647
+ }, undefined, true, undefined, this),
648
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
649
+ text: "ultrareview",
650
+ phase: running ? phase : 0
651
+ }, undefined, false, undefined, this),
652
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
653
+ dimColor: true,
654
+ children: [
655
+ " \xB7 ",
656
+ tail
657
+ ]
658
+ }, undefined, true, undefined, this)
659
+ ]
660
+ }, undefined, true, undefined, this);
661
+ }
662
+ function RemoteSessionProgress({
663
+ session
664
+ }) {
665
+ if (session.isRemoteReview) {
666
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ReviewRainbowLine, {
667
+ session
668
+ }, undefined, false, undefined, this);
669
+ }
670
+ if (session.status === "completed") {
671
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
672
+ bold: true,
673
+ color: "success",
674
+ dimColor: true,
675
+ children: "done"
676
+ }, undefined, false, undefined, this);
677
+ }
678
+ if (session.status === "failed") {
679
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
680
+ bold: true,
681
+ color: "error",
682
+ dimColor: true,
683
+ children: "error"
684
+ }, undefined, false, undefined, this);
685
+ }
686
+ if (!session.todoList.length) {
687
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
688
+ dimColor: true,
689
+ children: [
690
+ session.status,
691
+ "\u2026"
692
+ ]
693
+ }, undefined, true, undefined, this);
694
+ }
695
+ const completed = count(session.todoList, (_) => _.status === "completed");
696
+ const total = session.todoList.length;
697
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
698
+ dimColor: true,
699
+ children: [
700
+ completed,
701
+ "/",
702
+ total
703
+ ]
704
+ }, undefined, true, undefined, this);
705
+ }
706
+ var import_react2, jsx_dev_runtime3, TICK_MS = 80;
707
+ var init_RemoteSessionProgress = __esm(() => {
708
+ init_figures2();
709
+ init_useSettings();
710
+ init_src();
711
+ init_array();
712
+ init_thinking();
713
+ import_react2 = __toESM(require_react(), 1);
714
+ jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
715
+ });
716
+
717
+ // src/components/tasks/ShellProgress.tsx
718
+ function TaskStatusText({
719
+ status,
720
+ label,
721
+ suffix
722
+ }) {
723
+ const displayLabel = label ?? status;
724
+ const color = status === "completed" ? "success" : status === "failed" ? "error" : status === "killed" ? "warning" : undefined;
725
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
726
+ color,
727
+ dimColor: true,
728
+ children: [
729
+ "(",
730
+ displayLabel,
731
+ suffix,
732
+ ")"
733
+ ]
734
+ }, undefined, true, undefined, this);
735
+ }
736
+ function ShellProgress({
737
+ shell
738
+ }) {
739
+ switch (shell.status) {
740
+ case "completed":
741
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
742
+ status: "completed",
743
+ label: "done"
744
+ }, undefined, false, undefined, this);
745
+ case "failed":
746
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
747
+ status: "failed",
748
+ label: "error"
749
+ }, undefined, false, undefined, this);
750
+ case "killed":
751
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
752
+ status: "killed",
753
+ label: "stopped"
754
+ }, undefined, false, undefined, this);
755
+ case "running":
756
+ case "pending":
757
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
758
+ status: "running"
759
+ }, undefined, false, undefined, this);
760
+ }
761
+ }
762
+ var jsx_dev_runtime4;
763
+ var init_ShellProgress = __esm(() => {
764
+ init_src();
765
+ jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
766
+ });
767
+
768
+ // src/components/tasks/BackgroundTask.tsx
769
+ function BackgroundTask({
770
+ task,
771
+ maxActivityWidth
772
+ }) {
773
+ const activityLimit = maxActivityWidth ?? 40;
774
+ switch (task.type) {
775
+ case "local_bash":
776
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
777
+ children: [
778
+ truncate(task.kind === "monitor" ? task.description : task.command, activityLimit, true),
779
+ " ",
780
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ShellProgress, {
781
+ shell: task
782
+ }, undefined, false, undefined, this)
783
+ ]
784
+ }, undefined, true, undefined, this);
785
+ case "remote_agent": {
786
+ if (task.isRemoteReview) {
787
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
788
+ children: /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(RemoteSessionProgress, {
789
+ session: task
790
+ }, undefined, false, undefined, this)
791
+ }, undefined, false, undefined, this);
792
+ }
793
+ const running = task.status === "running" || task.status === "pending";
794
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
795
+ children: [
796
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
797
+ dimColor: true,
798
+ children: [
799
+ running ? DIAMOND_OPEN : DIAMOND_FILLED,
800
+ " "
801
+ ]
802
+ }, undefined, true, undefined, this),
803
+ truncate(task.title, activityLimit, true),
804
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
805
+ dimColor: true,
806
+ children: " \xB7 "
807
+ }, undefined, false, undefined, this),
808
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(RemoteSessionProgress, {
809
+ session: task
810
+ }, undefined, false, undefined, this)
811
+ ]
812
+ }, undefined, true, undefined, this);
813
+ }
814
+ case "local_agent":
815
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
816
+ children: [
817
+ truncate(task.description, activityLimit, true),
818
+ " ",
819
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
820
+ status: task.status,
821
+ label: task.status === "completed" ? "done" : undefined,
822
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
823
+ }, undefined, false, undefined, this)
824
+ ]
825
+ }, undefined, true, undefined, this);
826
+ case "in_process_teammate": {
827
+ const activity = describeTeammateActivity(task);
828
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
829
+ children: [
830
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
831
+ color: toInkColor(task.identity.color),
832
+ children: [
833
+ "@",
834
+ task.identity.agentName
835
+ ]
836
+ }, undefined, true, undefined, this),
837
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
838
+ dimColor: true,
839
+ children: [
840
+ ": ",
841
+ truncate(activity, activityLimit, true)
842
+ ]
843
+ }, undefined, true, undefined, this)
844
+ ]
845
+ }, undefined, true, undefined, this);
846
+ }
847
+ case "local_workflow": {
848
+ const _task = task;
849
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
850
+ children: [
851
+ truncate(_task.workflowName ?? task.summary ?? task.description, activityLimit, true),
852
+ " ",
853
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
854
+ status: task.status,
855
+ label: task.status === "running" ? `${_task.agentCount} ${plural(_task.agentCount, "agent")}` : task.status === "completed" ? "done" : undefined,
856
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
857
+ }, undefined, false, undefined, this)
858
+ ]
859
+ }, undefined, true, undefined, this);
860
+ }
861
+ case "monitor_mcp":
862
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
863
+ children: [
864
+ truncate(task.description, activityLimit, true),
865
+ " ",
866
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
867
+ status: task.status,
868
+ label: task.status === "completed" ? "done" : undefined,
869
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
870
+ }, undefined, false, undefined, this)
871
+ ]
872
+ }, undefined, true, undefined, this);
873
+ case "dream": {
874
+ const n = task.filesTouched.length;
875
+ const detail = task.phase === "updating" && n > 0 ? `${n} ${plural(n, "file")}` : `${task.sessionsReviewing} ${plural(task.sessionsReviewing, "session")}`;
876
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
877
+ children: [
878
+ task.description,
879
+ " ",
880
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
881
+ dimColor: true,
882
+ children: [
883
+ "\xB7 ",
884
+ task.phase,
885
+ " \xB7 ",
886
+ detail
887
+ ]
888
+ }, undefined, true, undefined, this),
889
+ " ",
890
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
891
+ status: task.status,
892
+ label: task.status === "completed" ? "done" : undefined,
893
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
894
+ }, undefined, false, undefined, this)
895
+ ]
896
+ }, undefined, true, undefined, this);
897
+ }
898
+ }
899
+ }
900
+ var jsx_dev_runtime5;
901
+ var init_BackgroundTask = __esm(() => {
902
+ init_src();
903
+ init_ink();
904
+ init_format();
905
+ init_stringUtils();
906
+ init_figures2();
907
+ init_RemoteSessionProgress();
908
+ init_ShellProgress();
909
+ init_taskStatusUtils();
910
+ jsx_dev_runtime5 = __toESM(require_jsx_dev_runtime(), 1);
911
+ });
912
+
913
+ // src/components/tasks/DreamDetailDialog.tsx
914
+ function DreamDetailDialog({
915
+ task,
916
+ onDone,
917
+ onBack,
918
+ onKill
919
+ }) {
920
+ const elapsedTime = useElapsedTime(task.startTime, task.status === "running", 1000, 0);
921
+ useKeybindings({ "confirm:yes": onDone }, { context: "Confirmation" });
922
+ const handleKeyDown = (e) => {
923
+ if (e.key === " ") {
924
+ e.preventDefault();
925
+ onDone();
926
+ } else if (e.key === "left" && onBack) {
927
+ e.preventDefault();
928
+ onBack();
929
+ } else if (e.key === "x" && task.status === "running" && onKill) {
930
+ e.preventDefault();
931
+ onKill();
932
+ }
933
+ };
934
+ const visibleTurns = task.turns.filter((t) => t.text !== "");
935
+ const shown = visibleTurns.slice(-VISIBLE_TURNS);
936
+ const hidden = visibleTurns.length - shown.length;
937
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
938
+ flexDirection: "column",
939
+ tabIndex: 0,
940
+ autoFocus: true,
941
+ onKeyDown: handleKeyDown,
942
+ children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Dialog, {
943
+ title: "Memory consolidation",
944
+ subtitle: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
945
+ dimColor: true,
946
+ children: [
947
+ elapsedTime,
948
+ " \xB7 reviewing ",
949
+ task.sessionsReviewing,
950
+ " ",
951
+ plural(task.sessionsReviewing, "session"),
952
+ task.filesTouched.length > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(jsx_dev_runtime6.Fragment, {
953
+ children: [
954
+ " ",
955
+ "\xB7 ",
956
+ task.filesTouched.length,
957
+ " ",
958
+ plural(task.filesTouched.length, "file"),
959
+ " touched"
960
+ ]
961
+ }, undefined, true, undefined, this)
962
+ ]
963
+ }, undefined, true, undefined, this),
964
+ onCancel: onDone,
965
+ color: "background",
966
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
967
+ children: [
968
+ "Press ",
969
+ exitState.keyName,
970
+ " again to exit"
971
+ ]
972
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Byline, {
973
+ children: [
974
+ onBack && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
975
+ shortcut: "\u2190",
976
+ action: "go back"
977
+ }, undefined, false, undefined, this),
978
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
979
+ shortcut: "Esc/Enter/Space",
980
+ action: "close"
981
+ }, undefined, false, undefined, this),
982
+ task.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
983
+ shortcut: "x",
984
+ action: "stop"
985
+ }, undefined, false, undefined, this)
986
+ ]
987
+ }, undefined, true, undefined, this),
988
+ children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
989
+ flexDirection: "column",
990
+ gap: 1,
991
+ children: [
992
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
993
+ children: [
994
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
995
+ bold: true,
996
+ children: "Status:"
997
+ }, undefined, false, undefined, this),
998
+ " ",
999
+ task.status === "running" ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1000
+ color: "background",
1001
+ children: "running"
1002
+ }, undefined, false, undefined, this) : task.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1003
+ color: "success",
1004
+ children: task.status
1005
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1006
+ color: "error",
1007
+ children: task.status
1008
+ }, undefined, false, undefined, this)
1009
+ ]
1010
+ }, undefined, true, undefined, this),
1011
+ shown.length === 0 ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1012
+ dimColor: true,
1013
+ children: task.status === "running" ? "Starting\u2026" : "(no text output)"
1014
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(jsx_dev_runtime6.Fragment, {
1015
+ children: [
1016
+ hidden > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1017
+ dimColor: true,
1018
+ children: [
1019
+ "(",
1020
+ hidden,
1021
+ " earlier ",
1022
+ plural(hidden, "turn"),
1023
+ ")"
1024
+ ]
1025
+ }, undefined, true, undefined, this),
1026
+ shown.map((turn, i) => /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
1027
+ flexDirection: "column",
1028
+ children: [
1029
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1030
+ wrap: "wrap",
1031
+ children: turn.text
1032
+ }, undefined, false, undefined, this),
1033
+ turn.toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1034
+ dimColor: true,
1035
+ children: [
1036
+ " ",
1037
+ "(",
1038
+ turn.toolUseCount,
1039
+ " ",
1040
+ plural(turn.toolUseCount, "tool"),
1041
+ ")"
1042
+ ]
1043
+ }, undefined, true, undefined, this)
1044
+ ]
1045
+ }, i, true, undefined, this))
1046
+ ]
1047
+ }, undefined, true, undefined, this)
1048
+ ]
1049
+ }, undefined, true, undefined, this)
1050
+ }, undefined, false, undefined, this)
1051
+ }, undefined, false, undefined, this);
1052
+ }
1053
+ var jsx_dev_runtime6, VISIBLE_TURNS = 6;
1054
+ var init_DreamDetailDialog = __esm(() => {
1055
+ init_useElapsedTime();
1056
+ init_src();
1057
+ init_useKeybinding();
1058
+ init_stringUtils();
1059
+ init_src();
1060
+ jsx_dev_runtime6 = __toESM(require_jsx_dev_runtime(), 1);
1061
+ });
1062
+
1063
+ // src/components/tasks/InProcessTeammateDetailDialog.tsx
1064
+ function InProcessTeammateDetailDialog({
1065
+ teammate,
1066
+ onDone,
1067
+ onKill,
1068
+ onBack,
1069
+ onForeground
1070
+ }) {
1071
+ const [theme] = useTheme();
1072
+ const tools = import_react3.useMemo(() => getTools(getEmptyToolPermissionContext()), []);
1073
+ const elapsedTime = useElapsedTime(teammate.startTime, teammate.status === "running", 1000, teammate.totalPausedMs ?? 0);
1074
+ useKeybindings({
1075
+ "confirm:yes": onDone
1076
+ }, { context: "Confirmation" });
1077
+ const handleKeyDown = (e) => {
1078
+ if (e.key === " ") {
1079
+ e.preventDefault();
1080
+ onDone();
1081
+ } else if (e.key === "left" && onBack) {
1082
+ e.preventDefault();
1083
+ onBack();
1084
+ } else if (e.key === "x" && teammate.status === "running" && onKill) {
1085
+ e.preventDefault();
1086
+ onKill();
1087
+ } else if (e.key === "f" && teammate.status === "running" && onForeground) {
1088
+ e.preventDefault();
1089
+ onForeground();
1090
+ }
1091
+ };
1092
+ const activity = describeTeammateActivity(teammate);
1093
+ const tokenCount = teammate.result?.totalTokens ?? teammate.progress?.tokenCount;
1094
+ const toolUseCount = teammate.result?.totalToolUseCount ?? teammate.progress?.toolUseCount;
1095
+ const displayPrompt = truncateToWidth(teammate.prompt, 300);
1096
+ const title = /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1097
+ children: [
1098
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1099
+ color: toInkColor(teammate.identity.color),
1100
+ children: [
1101
+ "@",
1102
+ teammate.identity.agentName
1103
+ ]
1104
+ }, undefined, true, undefined, this),
1105
+ activity && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1106
+ dimColor: true,
1107
+ children: [
1108
+ " (",
1109
+ activity,
1110
+ ")"
1111
+ ]
1112
+ }, undefined, true, undefined, this)
1113
+ ]
1114
+ }, undefined, true, undefined, this);
1115
+ const subtitle = /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1116
+ children: [
1117
+ teammate.status !== "running" && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1118
+ color: teammate.status === "completed" ? "success" : teammate.status === "killed" ? "warning" : "error",
1119
+ children: [
1120
+ teammate.status === "completed" ? "Completed" : teammate.status === "failed" ? "Failed" : "Stopped",
1121
+ " \xB7 "
1122
+ ]
1123
+ }, undefined, true, undefined, this),
1124
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1125
+ dimColor: true,
1126
+ children: [
1127
+ elapsedTime,
1128
+ tokenCount !== undefined && tokenCount > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(jsx_dev_runtime7.Fragment, {
1129
+ children: [
1130
+ " \xB7 ",
1131
+ formatNumber(tokenCount),
1132
+ " tokens"
1133
+ ]
1134
+ }, undefined, true, undefined, this),
1135
+ toolUseCount !== undefined && toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(jsx_dev_runtime7.Fragment, {
1136
+ children: [
1137
+ " ",
1138
+ "\xB7 ",
1139
+ toolUseCount,
1140
+ " ",
1141
+ toolUseCount === 1 ? "tool" : "tools"
1142
+ ]
1143
+ }, undefined, true, undefined, this)
1144
+ ]
1145
+ }, undefined, true, undefined, this)
1146
+ ]
1147
+ }, undefined, true, undefined, this);
1148
+ return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1149
+ flexDirection: "column",
1150
+ tabIndex: 0,
1151
+ autoFocus: true,
1152
+ onKeyDown: handleKeyDown,
1153
+ children: /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Dialog, {
1154
+ title,
1155
+ subtitle,
1156
+ onCancel: onDone,
1157
+ color: "background",
1158
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1159
+ children: [
1160
+ "Press ",
1161
+ exitState.keyName,
1162
+ " again to exit"
1163
+ ]
1164
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Byline, {
1165
+ children: [
1166
+ onBack && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1167
+ shortcut: "\u2190",
1168
+ action: "go back"
1169
+ }, undefined, false, undefined, this),
1170
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1171
+ shortcut: "Esc/Enter/Space",
1172
+ action: "close"
1173
+ }, undefined, false, undefined, this),
1174
+ teammate.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1175
+ shortcut: "x",
1176
+ action: "stop"
1177
+ }, undefined, false, undefined, this),
1178
+ teammate.status === "running" && onForeground && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1179
+ shortcut: "f",
1180
+ action: "foreground"
1181
+ }, undefined, false, undefined, this)
1182
+ ]
1183
+ }, undefined, true, undefined, this),
1184
+ children: [
1185
+ teammate.status === "running" && teammate.progress?.recentActivities && teammate.progress.recentActivities.length > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1186
+ flexDirection: "column",
1187
+ children: [
1188
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1189
+ bold: true,
1190
+ dimColor: true,
1191
+ children: "Progress"
1192
+ }, undefined, false, undefined, this),
1193
+ teammate.progress.recentActivities.map((activity2, i) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1194
+ dimColor: i < teammate.progress.recentActivities.length - 1,
1195
+ wrap: "truncate-end",
1196
+ children: [
1197
+ i === teammate.progress.recentActivities.length - 1 ? "\u203A " : " ",
1198
+ renderToolActivity(activity2, tools, theme)
1199
+ ]
1200
+ }, i, true, undefined, this))
1201
+ ]
1202
+ }, undefined, true, undefined, this),
1203
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1204
+ flexDirection: "column",
1205
+ marginTop: 1,
1206
+ children: [
1207
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1208
+ bold: true,
1209
+ dimColor: true,
1210
+ children: "Prompt"
1211
+ }, undefined, false, undefined, this),
1212
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1213
+ wrap: "wrap",
1214
+ children: displayPrompt
1215
+ }, undefined, false, undefined, this)
1216
+ ]
1217
+ }, undefined, true, undefined, this),
1218
+ teammate.status === "failed" && teammate.error && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1219
+ flexDirection: "column",
1220
+ marginTop: 1,
1221
+ children: [
1222
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1223
+ bold: true,
1224
+ color: "error",
1225
+ children: "Error"
1226
+ }, undefined, false, undefined, this),
1227
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1228
+ color: "error",
1229
+ wrap: "wrap",
1230
+ children: teammate.error
1231
+ }, undefined, false, undefined, this)
1232
+ ]
1233
+ }, undefined, true, undefined, this)
1234
+ ]
1235
+ }, undefined, true, undefined, this)
1236
+ }, undefined, false, undefined, this);
1237
+ }
1238
+ var import_react3, jsx_dev_runtime7;
1239
+ var init_InProcessTeammateDetailDialog = __esm(() => {
1240
+ init_useElapsedTime();
1241
+ init_src();
1242
+ init_useKeybinding();
1243
+ init_Tool();
1244
+ init_tools();
1245
+ init_format();
1246
+ init_src();
1247
+ init_ink();
1248
+ init_renderToolActivity();
1249
+ init_taskStatusUtils();
1250
+ import_react3 = __toESM(require_react(), 1);
1251
+ jsx_dev_runtime7 = __toESM(require_jsx_dev_runtime(), 1);
1252
+ });
1253
+
1254
+ // src/components/tasks/RemoteSessionDetailDialog.tsx
1255
+ function formatToolUseSummary(name, input) {
1256
+ if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
1257
+ return "Review the plan in RedScope AI on the web";
1258
+ }
1259
+ if (!input || typeof input !== "object")
1260
+ return name;
1261
+ if (name === ASK_USER_QUESTION_TOOL_NAME && "questions" in input) {
1262
+ const qs = input.questions;
1263
+ if (Array.isArray(qs) && qs[0] && typeof qs[0] === "object") {
1264
+ const q = "question" in qs[0] && typeof qs[0].question === "string" && qs[0].question ? qs[0].question : ("header" in qs[0]) && typeof qs[0].header === "string" ? qs[0].header : null;
1265
+ if (q) {
1266
+ const oneLine = q.replace(/\s+/g, " ").trim();
1267
+ return `Answer in browser: ${truncateToWidth(oneLine, 50)}`;
1268
+ }
1269
+ }
1270
+ }
1271
+ for (const v of Object.values(input)) {
1272
+ if (typeof v === "string" && v.trim()) {
1273
+ const oneLine = v.replace(/\s+/g, " ").trim();
1274
+ return `${name} ${truncateToWidth(oneLine, 60)}`;
1275
+ }
1276
+ }
1277
+ return name;
1278
+ }
1279
+ function UltraplanSessionDetail({
1280
+ session,
1281
+ onDone,
1282
+ onBack,
1283
+ onKill
1284
+ }) {
1285
+ const running = session.status === "running" || session.status === "pending";
1286
+ const phase = session.ultraplanPhase;
1287
+ const statusText = running ? phase ? PHASE_LABEL[phase] : "running" : session.status;
1288
+ const elapsedTime = useElapsedTime(session.startTime, running, 1000, 0, session.endTime);
1289
+ const { agentsWorking, toolCalls, lastToolCall } = import_react4.useMemo(() => {
1290
+ let spawns = 0;
1291
+ let calls = 0;
1292
+ let lastBlock = null;
1293
+ for (const msg of session.log) {
1294
+ if (msg.type !== "assistant")
1295
+ continue;
1296
+ const content = msg.message?.content ?? [];
1297
+ for (const block of content) {
1298
+ if (block.type !== "tool_use")
1299
+ continue;
1300
+ calls++;
1301
+ lastBlock = block;
1302
+ if (block.name === AGENT_TOOL_NAME || block.name === LEGACY_AGENT_TOOL_NAME) {
1303
+ spawns++;
1304
+ }
1305
+ }
1306
+ }
1307
+ return {
1308
+ agentsWorking: 1 + spawns,
1309
+ toolCalls: calls,
1310
+ lastToolCall: lastBlock ? formatToolUseSummary(lastBlock.name, lastBlock.input) : null
1311
+ };
1312
+ }, [session.log]);
1313
+ const sessionUrl = getRemoteTaskSessionUrl(session.sessionId);
1314
+ const goBackOrClose = onBack ?? (() => onDone("Remote session details dismissed", { display: "system" }));
1315
+ const [confirmingStop, setConfirmingStop] = import_react4.useState(false);
1316
+ if (confirmingStop) {
1317
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1318
+ title: "Stop ultraplan?",
1319
+ onCancel: () => setConfirmingStop(false),
1320
+ color: "background",
1321
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1322
+ flexDirection: "column",
1323
+ gap: 1,
1324
+ children: [
1325
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1326
+ dimColor: true,
1327
+ children: "This will terminate the RedScope AI on the web session."
1328
+ }, undefined, false, undefined, this),
1329
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1330
+ options: [
1331
+ { label: "Terminate session", value: "stop" },
1332
+ { label: "Back", value: "back" }
1333
+ ],
1334
+ onChange: (v) => {
1335
+ if (v === "stop") {
1336
+ onKill?.();
1337
+ goBackOrClose();
1338
+ } else {
1339
+ setConfirmingStop(false);
1340
+ }
1341
+ }
1342
+ }, undefined, false, undefined, this)
1343
+ ]
1344
+ }, undefined, true, undefined, this)
1345
+ }, undefined, false, undefined, this);
1346
+ }
1347
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1348
+ title: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1349
+ children: [
1350
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1351
+ color: "background",
1352
+ children: [
1353
+ phase === "plan_ready" ? DIAMOND_FILLED : DIAMOND_OPEN,
1354
+ " "
1355
+ ]
1356
+ }, undefined, true, undefined, this),
1357
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1358
+ bold: true,
1359
+ children: "ultraplan"
1360
+ }, undefined, false, undefined, this),
1361
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1362
+ dimColor: true,
1363
+ children: [
1364
+ " \xB7 ",
1365
+ elapsedTime,
1366
+ " \xB7 ",
1367
+ statusText
1368
+ ]
1369
+ }, undefined, true, undefined, this)
1370
+ ]
1371
+ }, undefined, true, undefined, this),
1372
+ onCancel: goBackOrClose,
1373
+ color: "background",
1374
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1375
+ flexDirection: "column",
1376
+ gap: 1,
1377
+ children: [
1378
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1379
+ children: [
1380
+ phase === "plan_ready" && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1381
+ color: "success",
1382
+ children: [
1383
+ figures_default.tick,
1384
+ " "
1385
+ ]
1386
+ }, undefined, true, undefined, this),
1387
+ agentsWorking,
1388
+ " ",
1389
+ plural(agentsWorking, "agent"),
1390
+ " ",
1391
+ phase ? AGENT_VERB[phase] : "working",
1392
+ " \xB7 ",
1393
+ toolCalls,
1394
+ " tool",
1395
+ " ",
1396
+ plural(toolCalls, "call")
1397
+ ]
1398
+ }, undefined, true, undefined, this),
1399
+ lastToolCall && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1400
+ dimColor: true,
1401
+ children: lastToolCall
1402
+ }, undefined, false, undefined, this),
1403
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1404
+ url: sessionUrl,
1405
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1406
+ dimColor: true,
1407
+ children: sessionUrl
1408
+ }, undefined, false, undefined, this)
1409
+ }, undefined, false, undefined, this),
1410
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1411
+ options: [
1412
+ {
1413
+ label: "Review in RedScope AI on the web",
1414
+ value: "open"
1415
+ },
1416
+ ...onKill && running ? [{ label: "Stop ultraplan", value: "stop" }] : [],
1417
+ { label: "Back", value: "back" }
1418
+ ],
1419
+ onChange: (v) => {
1420
+ switch (v) {
1421
+ case "open":
1422
+ openBrowser(sessionUrl);
1423
+ onDone();
1424
+ return;
1425
+ case "stop":
1426
+ setConfirmingStop(true);
1427
+ return;
1428
+ case "back":
1429
+ goBackOrClose();
1430
+ return;
1431
+ }
1432
+ }
1433
+ }, undefined, false, undefined, this)
1434
+ ]
1435
+ }, undefined, true, undefined, this)
1436
+ }, undefined, false, undefined, this);
1437
+ }
1438
+ function StagePipeline({
1439
+ stage,
1440
+ completed,
1441
+ hasProgress
1442
+ }) {
1443
+ const currentIdx = stage ? STAGES.indexOf(stage) : -1;
1444
+ const inSetup = !completed && !hasProgress;
1445
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1446
+ children: [
1447
+ inSetup ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1448
+ color: "background",
1449
+ children: "Setup"
1450
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1451
+ dimColor: true,
1452
+ children: "Setup"
1453
+ }, undefined, false, undefined, this),
1454
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1455
+ dimColor: true,
1456
+ children: " \u2192 "
1457
+ }, undefined, false, undefined, this),
1458
+ STAGES.map((s, i) => {
1459
+ const isCurrent = !completed && !inSetup && i === currentIdx;
1460
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(import_react4.default.Fragment, {
1461
+ children: [
1462
+ i > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1463
+ dimColor: true,
1464
+ children: " \u2192 "
1465
+ }, undefined, false, undefined, this),
1466
+ isCurrent ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1467
+ color: "background",
1468
+ children: STAGE_LABELS[s]
1469
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1470
+ dimColor: true,
1471
+ children: STAGE_LABELS[s]
1472
+ }, undefined, false, undefined, this)
1473
+ ]
1474
+ }, s, true, undefined, this);
1475
+ }),
1476
+ completed && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1477
+ color: "success",
1478
+ children: " \u2713"
1479
+ }, undefined, false, undefined, this)
1480
+ ]
1481
+ }, undefined, true, undefined, this);
1482
+ }
1483
+ function reviewCountsLine(session) {
1484
+ const p = session.reviewProgress;
1485
+ if (!p)
1486
+ return session.status === "completed" ? "done" : "setting up";
1487
+ const verified = p.bugsVerified;
1488
+ const refuted = p.bugsRefuted ?? 0;
1489
+ if (session.status === "completed") {
1490
+ const parts = [`${verified} ${plural(verified, "finding")}`];
1491
+ if (refuted > 0)
1492
+ parts.push(`${refuted} refuted`);
1493
+ return parts.join(" \xB7 ");
1494
+ }
1495
+ return formatReviewStageCounts(p.stage, p.bugsFound, verified, refuted);
1496
+ }
1497
+ function ReviewSessionDetail({
1498
+ session,
1499
+ onDone,
1500
+ onBack,
1501
+ onKill
1502
+ }) {
1503
+ const completed = session.status === "completed";
1504
+ const running = session.status === "running" || session.status === "pending";
1505
+ const [confirmingStop, setConfirmingStop] = import_react4.useState(false);
1506
+ const elapsedTime = useElapsedTime(session.startTime, running, 1000, 0, session.endTime);
1507
+ const handleClose = () => onDone("Remote session details dismissed", { display: "system" });
1508
+ const goBackOrClose = onBack ?? handleClose;
1509
+ const sessionUrl = getRemoteTaskSessionUrl(session.sessionId);
1510
+ const statusLabel = completed ? "ready" : running ? "running" : session.status;
1511
+ if (confirmingStop) {
1512
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1513
+ title: "Stop ultrareview?",
1514
+ onCancel: () => setConfirmingStop(false),
1515
+ color: "background",
1516
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1517
+ flexDirection: "column",
1518
+ gap: 1,
1519
+ children: [
1520
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1521
+ dimColor: true,
1522
+ children: "This archives the remote session and stops local tracking. The review will not complete and any findings so far are discarded."
1523
+ }, undefined, false, undefined, this),
1524
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1525
+ options: [
1526
+ { label: "Stop ultrareview", value: "stop" },
1527
+ { label: "Back", value: "back" }
1528
+ ],
1529
+ onChange: (v) => {
1530
+ if (v === "stop") {
1531
+ onKill?.();
1532
+ goBackOrClose();
1533
+ } else {
1534
+ setConfirmingStop(false);
1535
+ }
1536
+ }
1537
+ }, undefined, false, undefined, this)
1538
+ ]
1539
+ }, undefined, true, undefined, this)
1540
+ }, undefined, false, undefined, this);
1541
+ }
1542
+ const options = completed ? [
1543
+ { label: "Open in RedScope AI on the web", value: "open" },
1544
+ { label: "Dismiss", value: "dismiss" }
1545
+ ] : [
1546
+ { label: "Open in RedScope AI on the web", value: "open" },
1547
+ ...onKill && running ? [{ label: "Stop ultrareview", value: "stop" }] : [],
1548
+ { label: "Back", value: "back" }
1549
+ ];
1550
+ const handleSelect = (action) => {
1551
+ switch (action) {
1552
+ case "open":
1553
+ openBrowser(sessionUrl);
1554
+ onDone();
1555
+ break;
1556
+ case "stop":
1557
+ setConfirmingStop(true);
1558
+ break;
1559
+ case "back":
1560
+ goBackOrClose();
1561
+ break;
1562
+ case "dismiss":
1563
+ handleClose();
1564
+ break;
1565
+ }
1566
+ };
1567
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1568
+ title: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1569
+ children: [
1570
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1571
+ color: "background",
1572
+ children: [
1573
+ completed ? DIAMOND_FILLED : DIAMOND_OPEN,
1574
+ " "
1575
+ ]
1576
+ }, undefined, true, undefined, this),
1577
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1578
+ bold: true,
1579
+ children: "ultrareview"
1580
+ }, undefined, false, undefined, this),
1581
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1582
+ dimColor: true,
1583
+ children: [
1584
+ " \xB7 ",
1585
+ elapsedTime,
1586
+ " \xB7 ",
1587
+ statusLabel
1588
+ ]
1589
+ }, undefined, true, undefined, this)
1590
+ ]
1591
+ }, undefined, true, undefined, this),
1592
+ onCancel: goBackOrClose,
1593
+ color: "background",
1594
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1595
+ children: [
1596
+ "Press ",
1597
+ exitState.keyName,
1598
+ " again to exit"
1599
+ ]
1600
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Byline, {
1601
+ children: [
1602
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1603
+ shortcut: "Enter",
1604
+ action: "select"
1605
+ }, undefined, false, undefined, this),
1606
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1607
+ shortcut: "Esc",
1608
+ action: "go back"
1609
+ }, undefined, false, undefined, this)
1610
+ ]
1611
+ }, undefined, true, undefined, this),
1612
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1613
+ flexDirection: "column",
1614
+ gap: 1,
1615
+ children: [
1616
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(StagePipeline, {
1617
+ stage: session.reviewProgress?.stage,
1618
+ completed,
1619
+ hasProgress: !!session.reviewProgress
1620
+ }, undefined, false, undefined, this),
1621
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1622
+ flexDirection: "column",
1623
+ children: [
1624
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1625
+ children: reviewCountsLine(session)
1626
+ }, undefined, false, undefined, this),
1627
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1628
+ url: sessionUrl,
1629
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1630
+ dimColor: true,
1631
+ children: sessionUrl
1632
+ }, undefined, false, undefined, this)
1633
+ }, undefined, false, undefined, this)
1634
+ ]
1635
+ }, undefined, true, undefined, this),
1636
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1637
+ options,
1638
+ onChange: handleSelect
1639
+ }, undefined, false, undefined, this)
1640
+ ]
1641
+ }, undefined, true, undefined, this)
1642
+ }, undefined, false, undefined, this);
1643
+ }
1644
+ function RemoteSessionDetailDialog({
1645
+ session,
1646
+ toolUseContext,
1647
+ onDone,
1648
+ onBack,
1649
+ onKill
1650
+ }) {
1651
+ const [isTeleporting, setIsTeleporting] = import_react4.useState(false);
1652
+ const [teleportError, setTeleportError] = import_react4.useState(null);
1653
+ const lastMessages = import_react4.useMemo(() => {
1654
+ if (session.isUltraplan || session.isRemoteReview)
1655
+ return [];
1656
+ return normalizeMessages(toInternalMessages(session.log)).filter((_) => _.type !== "progress").slice(-3);
1657
+ }, [session]);
1658
+ if (session.isUltraplan) {
1659
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(UltraplanSessionDetail, {
1660
+ session,
1661
+ onDone,
1662
+ onBack,
1663
+ onKill
1664
+ }, undefined, false, undefined, this);
1665
+ }
1666
+ if (session.isRemoteReview) {
1667
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ReviewSessionDetail, {
1668
+ session,
1669
+ onDone,
1670
+ onBack,
1671
+ onKill
1672
+ }, undefined, false, undefined, this);
1673
+ }
1674
+ const handleClose = () => onDone("Remote session details dismissed", { display: "system" });
1675
+ const handleKeyDown = (e) => {
1676
+ if (e.key === " ") {
1677
+ e.preventDefault();
1678
+ onDone("Remote session details dismissed", { display: "system" });
1679
+ } else if (e.key === "left" && onBack) {
1680
+ e.preventDefault();
1681
+ onBack();
1682
+ } else if (e.key === "t" && !isTeleporting) {
1683
+ e.preventDefault();
1684
+ handleTeleport();
1685
+ } else if (e.key === "return") {
1686
+ e.preventDefault();
1687
+ handleClose();
1688
+ }
1689
+ };
1690
+ async function handleTeleport() {
1691
+ setIsTeleporting(true);
1692
+ setTeleportError(null);
1693
+ try {
1694
+ await teleportResumeCodeSession(session.sessionId);
1695
+ } catch (err) {
1696
+ setTeleportError(errorMessage(err));
1697
+ } finally {
1698
+ setIsTeleporting(false);
1699
+ }
1700
+ }
1701
+ const displayTitle = truncateToWidth(session.title, 50);
1702
+ const displayStatus = session.status === "pending" ? "starting" : session.status;
1703
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1704
+ flexDirection: "column",
1705
+ tabIndex: 0,
1706
+ autoFocus: true,
1707
+ onKeyDown: handleKeyDown,
1708
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1709
+ title: "Remote session details",
1710
+ onCancel: handleClose,
1711
+ color: "background",
1712
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1713
+ children: [
1714
+ "Press ",
1715
+ exitState.keyName,
1716
+ " again to exit"
1717
+ ]
1718
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Byline, {
1719
+ children: [
1720
+ onBack && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1721
+ shortcut: "\u2190",
1722
+ action: "go back"
1723
+ }, undefined, false, undefined, this),
1724
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1725
+ shortcut: "Esc/Enter/Space",
1726
+ action: "close"
1727
+ }, undefined, false, undefined, this),
1728
+ !isTeleporting && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1729
+ shortcut: "t",
1730
+ action: "teleport"
1731
+ }, undefined, false, undefined, this)
1732
+ ]
1733
+ }, undefined, true, undefined, this),
1734
+ children: [
1735
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1736
+ flexDirection: "column",
1737
+ children: [
1738
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1739
+ children: [
1740
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1741
+ bold: true,
1742
+ children: "Status"
1743
+ }, undefined, false, undefined, this),
1744
+ ":",
1745
+ " ",
1746
+ displayStatus === "running" || displayStatus === "starting" ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1747
+ color: "background",
1748
+ children: displayStatus
1749
+ }, undefined, false, undefined, this) : displayStatus === "completed" ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1750
+ color: "success",
1751
+ children: displayStatus
1752
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1753
+ color: "error",
1754
+ children: displayStatus
1755
+ }, undefined, false, undefined, this)
1756
+ ]
1757
+ }, undefined, true, undefined, this),
1758
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1759
+ children: [
1760
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1761
+ bold: true,
1762
+ children: "Runtime"
1763
+ }, undefined, false, undefined, this),
1764
+ ":",
1765
+ " ",
1766
+ formatDuration((session.endTime ?? Date.now()) - session.startTime)
1767
+ ]
1768
+ }, undefined, true, undefined, this),
1769
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1770
+ wrap: "truncate-end",
1771
+ children: [
1772
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1773
+ bold: true,
1774
+ children: "Title"
1775
+ }, undefined, false, undefined, this),
1776
+ ": ",
1777
+ displayTitle
1778
+ ]
1779
+ }, undefined, true, undefined, this),
1780
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1781
+ children: [
1782
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1783
+ bold: true,
1784
+ children: "Progress"
1785
+ }, undefined, false, undefined, this),
1786
+ ":",
1787
+ " ",
1788
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(RemoteSessionProgress, {
1789
+ session
1790
+ }, undefined, false, undefined, this)
1791
+ ]
1792
+ }, undefined, true, undefined, this),
1793
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1794
+ children: [
1795
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1796
+ bold: true,
1797
+ children: "Session URL"
1798
+ }, undefined, false, undefined, this),
1799
+ ":",
1800
+ " ",
1801
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1802
+ url: getRemoteTaskSessionUrl(session.sessionId),
1803
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1804
+ dimColor: true,
1805
+ children: getRemoteTaskSessionUrl(session.sessionId)
1806
+ }, undefined, false, undefined, this)
1807
+ }, undefined, false, undefined, this)
1808
+ ]
1809
+ }, undefined, true, undefined, this)
1810
+ ]
1811
+ }, undefined, true, undefined, this),
1812
+ session.log.length > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1813
+ flexDirection: "column",
1814
+ marginTop: 1,
1815
+ children: [
1816
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1817
+ children: [
1818
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1819
+ bold: true,
1820
+ children: "Recent messages"
1821
+ }, undefined, false, undefined, this),
1822
+ ":"
1823
+ ]
1824
+ }, undefined, true, undefined, this),
1825
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1826
+ flexDirection: "column",
1827
+ height: 10,
1828
+ overflowY: "hidden",
1829
+ children: lastMessages.map((msg, i) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Message, {
1830
+ message: msg,
1831
+ lookups: EMPTY_LOOKUPS,
1832
+ addMargin: i > 0,
1833
+ tools: toolUseContext.options.tools,
1834
+ commands: toolUseContext.options.commands,
1835
+ verbose: toolUseContext.options.verbose,
1836
+ inProgressToolUseIDs: new Set,
1837
+ progressMessagesForMessage: [],
1838
+ shouldAnimate: false,
1839
+ shouldShowDot: false,
1840
+ style: "condensed",
1841
+ isTranscriptMode: false,
1842
+ isStatic: true
1843
+ }, i, false, undefined, this))
1844
+ }, undefined, false, undefined, this),
1845
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1846
+ marginTop: 1,
1847
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1848
+ dimColor: true,
1849
+ italic: true,
1850
+ children: [
1851
+ "Showing last ",
1852
+ lastMessages.length,
1853
+ " of ",
1854
+ session.log.length,
1855
+ " ",
1856
+ "messages"
1857
+ ]
1858
+ }, undefined, true, undefined, this)
1859
+ }, undefined, false, undefined, this)
1860
+ ]
1861
+ }, undefined, true, undefined, this),
1862
+ teleportError && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1863
+ marginTop: 1,
1864
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1865
+ color: "error",
1866
+ children: [
1867
+ "Teleport failed: ",
1868
+ teleportError
1869
+ ]
1870
+ }, undefined, true, undefined, this)
1871
+ }, undefined, false, undefined, this),
1872
+ isTeleporting && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1873
+ color: "background",
1874
+ children: "Teleporting to session\u2026"
1875
+ }, undefined, false, undefined, this)
1876
+ ]
1877
+ }, undefined, true, undefined, this)
1878
+ }, undefined, false, undefined, this);
1879
+ }
1880
+ var import_react4, jsx_dev_runtime8, PHASE_LABEL, AGENT_VERB, STAGES, STAGE_LABELS;
1881
+ var init_RemoteSessionDetailDialog = __esm(() => {
1882
+ init_figures();
1883
+ init_figures2();
1884
+ init_useElapsedTime();
1885
+ init_src();
1886
+ init_RemoteAgentTask();
1887
+ init_constants();
1888
+ init_prompt();
1889
+ init_constants2();
1890
+ init_browser();
1891
+ init_errors();
1892
+ init_format();
1893
+ init_mappers();
1894
+ init_messages();
1895
+ init_stringUtils();
1896
+ init_teleport();
1897
+ init_select();
1898
+ init_src();
1899
+ init_Message();
1900
+ init_RemoteSessionProgress();
1901
+ import_react4 = __toESM(require_react(), 1);
1902
+ jsx_dev_runtime8 = __toESM(require_jsx_dev_runtime(), 1);
1903
+ PHASE_LABEL = {
1904
+ needs_input: "input required",
1905
+ plan_ready: "ready"
1906
+ };
1907
+ AGENT_VERB = {
1908
+ needs_input: "waiting",
1909
+ plan_ready: "done"
1910
+ };
1911
+ STAGES = ["finding", "verifying", "synthesizing"];
1912
+ STAGE_LABELS = {
1913
+ finding: "Find",
1914
+ verifying: "Verify",
1915
+ synthesizing: "Dedupe"
1916
+ };
1917
+ });
1918
+
1919
+ // src/components/tasks/ShellDetailDialog.tsx
1920
+ async function getTaskOutput(shell) {
1921
+ const path = getTaskOutputPath(shell.id);
1922
+ try {
1923
+ const result = await tailFile(path, SHELL_DETAIL_TAIL_BYTES);
1924
+ return { content: result.content, bytesTotal: result.bytesTotal };
1925
+ } catch {
1926
+ return { content: "", bytesTotal: 0 };
1927
+ }
1928
+ }
1929
+ function ShellDetailDialog({
1930
+ shell,
1931
+ onDone,
1932
+ onKillShell,
1933
+ onBack
1934
+ }) {
1935
+ const { columns } = useTerminalSize();
1936
+ const [outputPromise, setOutputPromise] = import_react5.useState(() => getTaskOutput(shell));
1937
+ const deferredOutputPromise = import_react5.useDeferredValue(outputPromise);
1938
+ import_react5.useEffect(() => {
1939
+ if (shell.status !== "running") {
1940
+ return;
1941
+ }
1942
+ const timer = setInterval((setOutputPromise2, shell2) => setOutputPromise2(getTaskOutput(shell2)), 1000, setOutputPromise, shell);
1943
+ return () => clearInterval(timer);
1944
+ }, [shell.id, shell.status]);
1945
+ const handleClose = () => onDone("Shell details dismissed", { display: "system" });
1946
+ useKeybindings({
1947
+ "confirm:yes": handleClose
1948
+ }, { context: "Confirmation" });
1949
+ const handleKeyDown = (e) => {
1950
+ if (e.key === " ") {
1951
+ e.preventDefault();
1952
+ onDone("Shell details dismissed", { display: "system" });
1953
+ } else if (e.key === "left" && onBack) {
1954
+ e.preventDefault();
1955
+ onBack();
1956
+ } else if (e.key === "x" && shell.status === "running" && onKillShell) {
1957
+ e.preventDefault();
1958
+ onKillShell();
1959
+ }
1960
+ };
1961
+ const isMonitor = shell.kind === "monitor";
1962
+ const displayCommand = truncateToWidth(shell.command, 280);
1963
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
1964
+ flexDirection: "column",
1965
+ tabIndex: 0,
1966
+ autoFocus: true,
1967
+ onKeyDown: handleKeyDown,
1968
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Dialog, {
1969
+ title: isMonitor ? "Monitor details" : "Shell details",
1970
+ onCancel: handleClose,
1971
+ color: "background",
1972
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1973
+ children: [
1974
+ "Press ",
1975
+ exitState.keyName,
1976
+ " again to exit"
1977
+ ]
1978
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Byline, {
1979
+ children: [
1980
+ onBack && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1981
+ shortcut: "\u2190",
1982
+ action: "go back"
1983
+ }, undefined, false, undefined, this),
1984
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1985
+ shortcut: "Esc/Enter/Space",
1986
+ action: "close"
1987
+ }, undefined, false, undefined, this),
1988
+ shell.status === "running" && onKillShell && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1989
+ shortcut: "x",
1990
+ action: "stop"
1991
+ }, undefined, false, undefined, this)
1992
+ ]
1993
+ }, undefined, true, undefined, this),
1994
+ children: [
1995
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
1996
+ flexDirection: "column",
1997
+ children: [
1998
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1999
+ children: [
2000
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2001
+ bold: true,
2002
+ children: "Status:"
2003
+ }, undefined, false, undefined, this),
2004
+ " ",
2005
+ shell.status === "running" ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2006
+ color: "background",
2007
+ children: [
2008
+ shell.status,
2009
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2010
+ ]
2011
+ }, undefined, true, undefined, this) : shell.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2012
+ color: "success",
2013
+ children: [
2014
+ shell.status,
2015
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2016
+ ]
2017
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2018
+ color: "error",
2019
+ children: [
2020
+ shell.status,
2021
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2022
+ ]
2023
+ }, undefined, true, undefined, this)
2024
+ ]
2025
+ }, undefined, true, undefined, this),
2026
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2027
+ children: [
2028
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2029
+ bold: true,
2030
+ children: "Runtime:"
2031
+ }, undefined, false, undefined, this),
2032
+ " ",
2033
+ formatDuration((shell.endTime ?? Date.now()) - shell.startTime)
2034
+ ]
2035
+ }, undefined, true, undefined, this),
2036
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2037
+ wrap: "wrap",
2038
+ children: [
2039
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2040
+ bold: true,
2041
+ children: isMonitor ? "Script:" : "Command:"
2042
+ }, undefined, false, undefined, this),
2043
+ " ",
2044
+ displayCommand
2045
+ ]
2046
+ }, undefined, true, undefined, this)
2047
+ ]
2048
+ }, undefined, true, undefined, this),
2049
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
2050
+ flexDirection: "column",
2051
+ children: [
2052
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2053
+ bold: true,
2054
+ children: "Output:"
2055
+ }, undefined, false, undefined, this),
2056
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(import_react5.Suspense, {
2057
+ fallback: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2058
+ dimColor: true,
2059
+ children: "Loading output\u2026"
2060
+ }, undefined, false, undefined, this),
2061
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ShellOutputContent, {
2062
+ outputPromise: deferredOutputPromise,
2063
+ columns
2064
+ }, undefined, false, undefined, this)
2065
+ }, undefined, false, undefined, this)
2066
+ ]
2067
+ }, undefined, true, undefined, this)
2068
+ ]
2069
+ }, undefined, true, undefined, this)
2070
+ }, undefined, false, undefined, this);
2071
+ }
2072
+ function ShellOutputContent({
2073
+ outputPromise,
2074
+ columns
2075
+ }) {
2076
+ const { content, bytesTotal } = import_react5.use(outputPromise);
2077
+ if (!content) {
2078
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2079
+ dimColor: true,
2080
+ children: "No output available"
2081
+ }, undefined, false, undefined, this);
2082
+ }
2083
+ const starts = [];
2084
+ let pos = content.length;
2085
+ for (let i = 0;i < 10 && pos > 0; i++) {
2086
+ const prev = content.lastIndexOf(`
2087
+ `, pos - 1);
2088
+ starts.push(prev + 1);
2089
+ pos = prev;
2090
+ }
2091
+ starts.reverse();
2092
+ const isIncomplete = bytesTotal > content.length;
2093
+ const rendered = [];
2094
+ for (let i = 0;i < starts.length; i++) {
2095
+ const start = starts[i];
2096
+ const end = i < starts.length - 1 ? starts[i + 1] - 1 : content.length;
2097
+ const line = content.slice(start, end);
2098
+ if (line)
2099
+ rendered.push(line);
2100
+ }
2101
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(jsx_dev_runtime9.Fragment, {
2102
+ children: [
2103
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
2104
+ borderStyle: "round",
2105
+ paddingX: 1,
2106
+ flexDirection: "column",
2107
+ height: 12,
2108
+ maxWidth: columns - 6,
2109
+ children: rendered.map((line, i) => /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2110
+ wrap: "truncate-end",
2111
+ children: line
2112
+ }, i, false, undefined, this))
2113
+ }, undefined, false, undefined, this),
2114
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2115
+ dimColor: true,
2116
+ italic: true,
2117
+ children: [
2118
+ `Showing ${rendered.length} lines`,
2119
+ isIncomplete ? ` of ${formatFileSize(bytesTotal)}` : ""
2120
+ ]
2121
+ }, undefined, true, undefined, this)
2122
+ ]
2123
+ }, undefined, true, undefined, this);
2124
+ }
2125
+ var import_react5, jsx_dev_runtime9, SHELL_DETAIL_TAIL_BYTES = 8192;
2126
+ var init_ShellDetailDialog = __esm(() => {
2127
+ init_useTerminalSize();
2128
+ init_src();
2129
+ init_useKeybinding();
2130
+ init_format();
2131
+ init_fsOperations();
2132
+ init_diskOutput();
2133
+ init_src();
2134
+ import_react5 = __toESM(require_react(), 1);
2135
+ jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
2136
+ });
2137
+
2138
+ // src/components/design-system/Byline.tsx
2139
+ var init_Byline = __esm(() => {
2140
+ init_src();
2141
+ });
2142
+
2143
+ // src/components/design-system/KeyboardShortcutHint.tsx
2144
+ var init_KeyboardShortcutHint = __esm(() => {
2145
+ init_src();
2146
+ });
2147
+
2148
+ // src/components/tasks/WorkflowDetailDialog.tsx
2149
+ var exports_WorkflowDetailDialog = {};
2150
+ __export(exports_WorkflowDetailDialog, {
2151
+ WorkflowDetailDialog: () => WorkflowDetailDialog
2152
+ });
2153
+ function WorkflowDetailDialog({
2154
+ workflow,
2155
+ onDone,
2156
+ onKill,
2157
+ onSkipAgent: _onSkipAgent,
2158
+ onRetryAgent: _onRetryAgent,
2159
+ onBack
2160
+ }) {
2161
+ const elapsedTime = useElapsedTime(workflow.startTime, workflow.status === "running", 1000, 0);
2162
+ useKeybindings({}, { context: "WorkflowDetail" });
2163
+ const handleKeyDown = import_react6.useCallback((e) => {
2164
+ if (e.key === "left" && onBack) {
2165
+ e.preventDefault();
2166
+ onBack();
2167
+ } else if (e.key === "x" && workflow.status === "running" && onKill) {
2168
+ e.preventDefault();
2169
+ onKill();
2170
+ }
2171
+ }, [onBack, onKill, workflow.status]);
2172
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2173
+ flexDirection: "column",
2174
+ tabIndex: 0,
2175
+ borderStyle: "round",
2176
+ onKeyDown: handleKeyDown,
2177
+ children: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Dialog, {
2178
+ title: "Workflow",
2179
+ subtitle: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2180
+ dimColor: true,
2181
+ children: [
2182
+ elapsedTime,
2183
+ " \xB7 ",
2184
+ workflow.workflowName
2185
+ ]
2186
+ }, undefined, true, undefined, this),
2187
+ onCancel: onBack ?? (() => {}),
2188
+ inputGuide: () => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Byline, {
2189
+ children: [
2190
+ onBack && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2191
+ shortcut: "\u2190",
2192
+ action: "go back"
2193
+ }, undefined, false, undefined, this),
2194
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2195
+ shortcut: "Esc",
2196
+ action: "close"
2197
+ }, undefined, false, undefined, this),
2198
+ workflow.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2199
+ shortcut: "x",
2200
+ action: "stop"
2201
+ }, undefined, false, undefined, this)
2202
+ ]
2203
+ }, undefined, true, undefined, this),
2204
+ children: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2205
+ flexDirection: "column",
2206
+ gap: 1,
2207
+ children: [
2208
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2209
+ children: [
2210
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2211
+ bold: true,
2212
+ children: "Status:"
2213
+ }, undefined, false, undefined, this),
2214
+ " ",
2215
+ workflow.status === "running" ? /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2216
+ color: "ansi:green",
2217
+ children: "running"
2218
+ }, undefined, false, undefined, this) : workflow.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2219
+ color: "ansi:green",
2220
+ children: workflow.status
2221
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2222
+ color: "ansi:red",
2223
+ children: workflow.status
2224
+ }, undefined, false, undefined, this)
2225
+ ]
2226
+ }, undefined, true, undefined, this),
2227
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2228
+ children: [
2229
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2230
+ bold: true,
2231
+ children: "Description:"
2232
+ }, undefined, false, undefined, this),
2233
+ " ",
2234
+ workflow.description
2235
+ ]
2236
+ }, undefined, true, undefined, this),
2237
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2238
+ children: [
2239
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2240
+ bold: true,
2241
+ children: "Workflow:"
2242
+ }, undefined, false, undefined, this),
2243
+ " ",
2244
+ workflow.workflowName
2245
+ ]
2246
+ }, undefined, true, undefined, this),
2247
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2248
+ children: [
2249
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2250
+ bold: true,
2251
+ children: "File:"
2252
+ }, undefined, false, undefined, this),
2253
+ " ",
2254
+ workflow.workflowFile
2255
+ ]
2256
+ }, undefined, true, undefined, this),
2257
+ workflow.summary && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2258
+ children: [
2259
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2260
+ bold: true,
2261
+ children: "Summary:"
2262
+ }, undefined, false, undefined, this),
2263
+ " ",
2264
+ workflow.summary
2265
+ ]
2266
+ }, undefined, true, undefined, this),
2267
+ workflow.output && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2268
+ flexDirection: "column",
2269
+ children: [
2270
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2271
+ bold: true,
2272
+ children: "Output:"
2273
+ }, undefined, false, undefined, this),
2274
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2275
+ dimColor: true,
2276
+ children: workflow.output
2277
+ }, undefined, false, undefined, this)
2278
+ ]
2279
+ }, undefined, true, undefined, this)
2280
+ ]
2281
+ }, undefined, true, undefined, this)
2282
+ }, undefined, false, undefined, this)
2283
+ }, undefined, false, undefined, this);
2284
+ }
2285
+ var import_react6, jsx_dev_runtime10;
2286
+ var init_WorkflowDetailDialog = __esm(() => {
2287
+ init_useElapsedTime();
2288
+ init_src();
2289
+ init_useKeybinding();
2290
+ init_Byline();
2291
+ init_Dialog();
2292
+ init_KeyboardShortcutHint();
2293
+ import_react6 = __toESM(require_react(), 1);
2294
+ jsx_dev_runtime10 = __toESM(require_jsx_dev_runtime(), 1);
2295
+ });
2296
+
2297
+ // src/components/tasks/MonitorMcpDetailDialog.tsx
2298
+ var exports_MonitorMcpDetailDialog = {};
2299
+ __export(exports_MonitorMcpDetailDialog, {
2300
+ MonitorMcpDetailDialog: () => MonitorMcpDetailDialog
2301
+ });
2302
+ function MonitorMcpDetailDialog({
2303
+ task,
2304
+ onBack,
2305
+ onKill
2306
+ }) {
2307
+ const elapsedTime = useElapsedTime(task.startTime, task.status === "running", 1000, 0);
2308
+ useKeybindings({}, { context: "MonitorMcpDetail" });
2309
+ const handleKeyDown = (e) => {
2310
+ if (e.key === "left" && onBack) {
2311
+ e.preventDefault();
2312
+ onBack();
2313
+ } else if (e.key === "x" && task.status === "running" && onKill) {
2314
+ e.preventDefault();
2315
+ onKill();
2316
+ }
2317
+ };
2318
+ return /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedBox_default, {
2319
+ flexDirection: "column",
2320
+ tabIndex: 0,
2321
+ borderStyle: "round",
2322
+ onKeyDown: handleKeyDown,
2323
+ children: /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Dialog, {
2324
+ title: "MCP Monitor",
2325
+ subtitle: /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2326
+ dimColor: true,
2327
+ children: [
2328
+ elapsedTime,
2329
+ " \xB7 ",
2330
+ task.serverName,
2331
+ ":",
2332
+ task.resourceUri
2333
+ ]
2334
+ }, undefined, true, undefined, this),
2335
+ onCancel: onBack ?? (() => {}),
2336
+ inputGuide: () => /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Byline, {
2337
+ children: [
2338
+ onBack && /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(KeyboardShortcutHint, {
2339
+ shortcut: "\u2190",
2340
+ action: "go back"
2341
+ }, undefined, false, undefined, this),
2342
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(KeyboardShortcutHint, {
2343
+ shortcut: "Esc",
2344
+ action: "close"
2345
+ }, undefined, false, undefined, this),
2346
+ task.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(KeyboardShortcutHint, {
2347
+ shortcut: "x",
2348
+ action: "stop"
2349
+ }, undefined, false, undefined, this)
2350
+ ]
2351
+ }, undefined, true, undefined, this),
2352
+ children: /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedBox_default, {
2353
+ flexDirection: "column",
2354
+ gap: 1,
2355
+ children: [
2356
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2357
+ children: [
2358
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2359
+ bold: true,
2360
+ children: "Status:"
2361
+ }, undefined, false, undefined, this),
2362
+ " ",
2363
+ task.status === "running" ? /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2364
+ color: "ansi:green",
2365
+ children: "running"
2366
+ }, undefined, false, undefined, this) : task.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2367
+ color: "ansi:green",
2368
+ children: task.status
2369
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2370
+ color: "ansi:red",
2371
+ children: task.status
2372
+ }, undefined, false, undefined, this)
2373
+ ]
2374
+ }, undefined, true, undefined, this),
2375
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2376
+ children: [
2377
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2378
+ bold: true,
2379
+ children: "Description:"
2380
+ }, undefined, false, undefined, this),
2381
+ " ",
2382
+ task.description
2383
+ ]
2384
+ }, undefined, true, undefined, this),
2385
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2386
+ children: [
2387
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2388
+ bold: true,
2389
+ children: "Server:"
2390
+ }, undefined, false, undefined, this),
2391
+ " ",
2392
+ task.serverName
2393
+ ]
2394
+ }, undefined, true, undefined, this),
2395
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2396
+ children: [
2397
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2398
+ bold: true,
2399
+ children: "Resource:"
2400
+ }, undefined, false, undefined, this),
2401
+ " ",
2402
+ task.resourceUri
2403
+ ]
2404
+ }, undefined, true, undefined, this),
2405
+ task.command && /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2406
+ children: [
2407
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ThemedText, {
2408
+ bold: true,
2409
+ children: "Command:"
2410
+ }, undefined, false, undefined, this),
2411
+ " ",
2412
+ task.command
2413
+ ]
2414
+ }, undefined, true, undefined, this)
2415
+ ]
2416
+ }, undefined, true, undefined, this)
2417
+ }, undefined, false, undefined, this)
2418
+ }, undefined, false, undefined, this);
2419
+ }
2420
+ var jsx_dev_runtime11;
2421
+ var init_MonitorMcpDetailDialog = __esm(() => {
2422
+ init_useElapsedTime();
2423
+ init_src();
2424
+ init_useKeybinding();
2425
+ init_Byline();
2426
+ init_Dialog();
2427
+ init_KeyboardShortcutHint();
2428
+ jsx_dev_runtime11 = __toESM(require_jsx_dev_runtime(), 1);
2429
+ });
2430
+
2431
+ // src/components/tasks/BackgroundTasksDialog.tsx
2432
+ function getSelectableBackgroundTasks(tasks, foregroundedTaskId) {
2433
+ const backgroundTasks = Object.values(tasks ?? {}).filter(isBackgroundTask);
2434
+ return backgroundTasks.filter((task) => !(task.type === "local_agent" && task.id === foregroundedTaskId));
2435
+ }
2436
+ function BackgroundTasksDialog({
2437
+ onDone,
2438
+ toolUseContext,
2439
+ initialDetailTaskId
2440
+ }) {
2441
+ const tasks = useAppState((s) => s.tasks);
2442
+ const foregroundedTaskId = useAppState((s) => s.foregroundedTaskId);
2443
+ const showSpinnerTree = useAppState((s) => s.expandedView) === "teammates";
2444
+ const setAppState = useSetAppState();
2445
+ const killAgentsShortcut = useShortcutDisplay("chat:killAgents", "Chat", "ctrl+x ctrl+k");
2446
+ const typedTasks = tasks;
2447
+ const skippedListOnMount = import_react7.useRef(false);
2448
+ const [viewState, setViewState] = import_react7.useState(() => {
2449
+ if (initialDetailTaskId) {
2450
+ skippedListOnMount.current = true;
2451
+ return { mode: "detail", itemId: initialDetailTaskId };
2452
+ }
2453
+ const allItems = getSelectableBackgroundTasks(typedTasks, foregroundedTaskId);
2454
+ if (allItems.length === 1) {
2455
+ skippedListOnMount.current = true;
2456
+ return { mode: "detail", itemId: allItems[0].id };
2457
+ }
2458
+ return { mode: "list" };
2459
+ });
2460
+ const [selectedIndex, setSelectedIndex] = import_react7.useState(0);
2461
+ useRegisterOverlay("background-tasks-dialog");
2462
+ const {
2463
+ bashTasks,
2464
+ remoteSessions,
2465
+ agentTasks,
2466
+ teammateTasks,
2467
+ workflowTasks,
2468
+ mcpMonitors,
2469
+ dreamTasks,
2470
+ allSelectableItems
2471
+ } = import_react7.useMemo(() => {
2472
+ const backgroundTasks = Object.values(typedTasks ?? {}).filter(isBackgroundTask);
2473
+ const allItems = backgroundTasks.map(toListItem);
2474
+ const sorted = allItems.sort((a, b) => {
2475
+ const aStatus = a.status;
2476
+ const bStatus = b.status;
2477
+ if (aStatus === "running" && bStatus !== "running")
2478
+ return -1;
2479
+ if (aStatus !== "running" && bStatus === "running")
2480
+ return 1;
2481
+ const aTime = "task" in a ? a.task.startTime : 0;
2482
+ const bTime = "task" in b ? b.task.startTime : 0;
2483
+ return bTime - aTime;
2484
+ });
2485
+ const bash = sorted.filter((item) => item.type === "local_bash");
2486
+ const remote = sorted.filter((item) => item.type === "remote_agent");
2487
+ const agent = sorted.filter((item) => item.type === "local_agent" && item.id !== foregroundedTaskId);
2488
+ const workflows = sorted.filter((item) => item.type === "local_workflow");
2489
+ const monitorMcp = sorted.filter((item) => item.type === "monitor_mcp");
2490
+ const dreamTasks2 = sorted.filter((item) => item.type === "dream");
2491
+ const teammates = showSpinnerTree ? [] : sorted.filter((item) => item.type === "in_process_teammate");
2492
+ const leaderItem = teammates.length > 0 ? [
2493
+ {
2494
+ id: "__leader__",
2495
+ type: "leader",
2496
+ label: `@${TEAM_LEAD_NAME}`,
2497
+ status: "running"
2498
+ }
2499
+ ] : [];
2500
+ return {
2501
+ bashTasks: bash,
2502
+ remoteSessions: remote,
2503
+ agentTasks: agent,
2504
+ workflowTasks: workflows,
2505
+ mcpMonitors: monitorMcp,
2506
+ dreamTasks: dreamTasks2,
2507
+ teammateTasks: [...leaderItem, ...teammates],
2508
+ allSelectableItems: [
2509
+ ...leaderItem,
2510
+ ...teammates,
2511
+ ...bash,
2512
+ ...monitorMcp,
2513
+ ...remote,
2514
+ ...agent,
2515
+ ...workflows,
2516
+ ...dreamTasks2
2517
+ ]
2518
+ };
2519
+ }, [typedTasks, foregroundedTaskId, showSpinnerTree]);
2520
+ const currentSelection = allSelectableItems[selectedIndex] ?? null;
2521
+ useKeybindings({
2522
+ "confirm:previous": () => setSelectedIndex((prev) => Math.max(0, prev - 1)),
2523
+ "confirm:next": () => setSelectedIndex((prev) => Math.min(allSelectableItems.length - 1, prev + 1)),
2524
+ "confirm:yes": () => {
2525
+ const current = allSelectableItems[selectedIndex];
2526
+ if (current) {
2527
+ if (current.type === "leader") {
2528
+ exitTeammateView(setAppState);
2529
+ onDone("Viewing leader", { display: "system" });
2530
+ } else {
2531
+ setViewState({ mode: "detail", itemId: current.id });
2532
+ }
2533
+ }
2534
+ }
2535
+ }, { context: "Confirmation", isActive: viewState.mode === "list" });
2536
+ const handleKeyDown = (e) => {
2537
+ if (viewState.mode !== "list")
2538
+ return;
2539
+ if (e.key === "left") {
2540
+ e.preventDefault();
2541
+ onDone("Background tasks dialog dismissed", { display: "system" });
2542
+ return;
2543
+ }
2544
+ const currentSelection2 = allSelectableItems[selectedIndex];
2545
+ if (!currentSelection2)
2546
+ return;
2547
+ if (e.key === "x") {
2548
+ e.preventDefault();
2549
+ if (currentSelection2.type === "local_bash" && currentSelection2.status === "running") {
2550
+ killShellTask(currentSelection2.id);
2551
+ } else if (currentSelection2.type === "local_agent" && currentSelection2.status === "running") {
2552
+ killAgentTask(currentSelection2.id);
2553
+ } else if (currentSelection2.type === "in_process_teammate" && currentSelection2.status === "running") {
2554
+ killTeammateTask(currentSelection2.id);
2555
+ } else if (currentSelection2.type === "local_workflow" && currentSelection2.status === "running" && killWorkflowTask) {
2556
+ killWorkflowTask(currentSelection2.id, setAppState);
2557
+ } else if (currentSelection2.type === "monitor_mcp" && currentSelection2.status === "running" && killMonitorMcp) {
2558
+ killMonitorMcp(currentSelection2.id, setAppState);
2559
+ } else if (currentSelection2.type === "dream" && currentSelection2.status === "running") {
2560
+ killDreamTask(currentSelection2.id);
2561
+ } else if (currentSelection2.type === "remote_agent" && currentSelection2.status === "running") {
2562
+ if (currentSelection2.task.isUltraplan) {
2563
+ stopUltraplan(currentSelection2.id, currentSelection2.task.sessionId, setAppState);
2564
+ } else {
2565
+ killRemoteAgentTask(currentSelection2.id);
2566
+ }
2567
+ }
2568
+ }
2569
+ if (e.key === "f") {
2570
+ if (currentSelection2.type === "in_process_teammate" && currentSelection2.status === "running") {
2571
+ e.preventDefault();
2572
+ enterTeammateView(currentSelection2.id, setAppState);
2573
+ onDone("Viewing teammate", { display: "system" });
2574
+ } else if (currentSelection2.type === "leader") {
2575
+ e.preventDefault();
2576
+ exitTeammateView(setAppState);
2577
+ onDone("Viewing leader", { display: "system" });
2578
+ }
2579
+ }
2580
+ };
2581
+ async function killShellTask(taskId) {
2582
+ await LocalShellTask.kill(taskId, setAppState);
2583
+ }
2584
+ async function killAgentTask(taskId) {
2585
+ await LocalAgentTask.kill(taskId, setAppState);
2586
+ }
2587
+ async function killTeammateTask(taskId) {
2588
+ await InProcessTeammateTask.kill(taskId, setAppState);
2589
+ }
2590
+ async function killDreamTask(taskId) {
2591
+ await DreamTask.kill(taskId, setAppState);
2592
+ }
2593
+ async function killRemoteAgentTask(taskId) {
2594
+ await RemoteAgentTask.kill(taskId, setAppState);
2595
+ }
2596
+ const onDoneEvent = import_react7.useEffectEvent(onDone);
2597
+ import_react7.useEffect(() => {
2598
+ if (viewState.mode !== "list") {
2599
+ const task = (typedTasks ?? {})[viewState.itemId];
2600
+ if (!task || task.type !== "local_workflow" && !isBackgroundTask(task)) {
2601
+ if (skippedListOnMount.current) {
2602
+ onDoneEvent("Background tasks dialog dismissed", {
2603
+ display: "system"
2604
+ });
2605
+ } else {
2606
+ setViewState({ mode: "list" });
2607
+ }
2608
+ }
2609
+ }
2610
+ const totalItems = allSelectableItems.length;
2611
+ if (selectedIndex >= totalItems && totalItems > 0) {
2612
+ setSelectedIndex(totalItems - 1);
2613
+ }
2614
+ }, [viewState, typedTasks, selectedIndex, allSelectableItems, onDoneEvent]);
2615
+ const goBackToList = () => {
2616
+ if (skippedListOnMount.current && allSelectableItems.length <= 1) {
2617
+ onDone("Background tasks dialog dismissed", { display: "system" });
2618
+ } else {
2619
+ skippedListOnMount.current = false;
2620
+ setViewState({ mode: "list" });
2621
+ }
2622
+ };
2623
+ if (viewState.mode !== "list" && typedTasks) {
2624
+ const task = typedTasks[viewState.itemId];
2625
+ if (!task) {
2626
+ return null;
2627
+ }
2628
+ switch (task.type) {
2629
+ case "local_bash":
2630
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ShellDetailDialog, {
2631
+ shell: task,
2632
+ onDone,
2633
+ onKillShell: () => void killShellTask(task.id),
2634
+ onBack: goBackToList
2635
+ }, `shell-${task.id}`, false, undefined, this);
2636
+ case "local_agent":
2637
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(AsyncAgentDetailDialog, {
2638
+ agent: task,
2639
+ onDone,
2640
+ onKillAgent: () => void killAgentTask(task.id),
2641
+ onBack: goBackToList
2642
+ }, `agent-${task.id}`, false, undefined, this);
2643
+ case "remote_agent":
2644
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(RemoteSessionDetailDialog, {
2645
+ session: task,
2646
+ onDone,
2647
+ toolUseContext,
2648
+ onBack: goBackToList,
2649
+ onKill: task.status !== "running" ? undefined : task.isUltraplan ? () => void stopUltraplan(task.id, task.sessionId, setAppState) : () => void killRemoteAgentTask(task.id)
2650
+ }, `session-${task.id}`, false, undefined, this);
2651
+ case "in_process_teammate":
2652
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(InProcessTeammateDetailDialog, {
2653
+ teammate: task,
2654
+ onDone,
2655
+ onKill: task.status === "running" ? () => void killTeammateTask(task.id) : undefined,
2656
+ onBack: goBackToList,
2657
+ onForeground: task.status === "running" ? () => {
2658
+ enterTeammateView(task.id, setAppState);
2659
+ onDone("Viewing teammate", { display: "system" });
2660
+ } : undefined
2661
+ }, `teammate-${task.id}`, false, undefined, this);
2662
+ case "local_workflow":
2663
+ if (!WorkflowDetailDialog2)
2664
+ return null;
2665
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(WorkflowDetailDialog2, {
2666
+ workflow: task,
2667
+ onDone,
2668
+ onKill: task.status === "running" && killWorkflowTask ? () => killWorkflowTask(task.id, setAppState) : undefined,
2669
+ onSkipAgent: task.status === "running" && skipWorkflowAgent ? (agentId) => skipWorkflowAgent(task.id, agentId, setAppState) : undefined,
2670
+ onRetryAgent: task.status === "running" && retryWorkflowAgent ? (agentId) => retryWorkflowAgent(task.id, agentId, setAppState) : undefined,
2671
+ onBack: goBackToList
2672
+ }, `workflow-${task.id}`, false, undefined, this);
2673
+ case "monitor_mcp":
2674
+ if (!MonitorMcpDetailDialog2)
2675
+ return null;
2676
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(MonitorMcpDetailDialog2, {
2677
+ task,
2678
+ onKill: task.status === "running" && killMonitorMcp ? () => killMonitorMcp(task.id, setAppState) : undefined,
2679
+ onBack: goBackToList
2680
+ }, `monitor-mcp-${task.id}`, false, undefined, this);
2681
+ case "dream":
2682
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(DreamDetailDialog, {
2683
+ task,
2684
+ onDone: () => onDone("Background tasks dialog dismissed", {
2685
+ display: "system"
2686
+ }),
2687
+ onBack: goBackToList,
2688
+ onKill: task.status === "running" ? () => void killDreamTask(task.id) : undefined
2689
+ }, `dream-${task.id}`, false, undefined, this);
2690
+ }
2691
+ }
2692
+ const runningBashCount = count(bashTasks, (_) => _.status === "running");
2693
+ const runningAgentCount = count(remoteSessions, (_) => _.status === "running" || _.status === "pending") + count(agentTasks, (_) => _.status === "running");
2694
+ const runningTeammateCount = count(teammateTasks, (_) => _.status === "running");
2695
+ const subtitle = intersperse([
2696
+ ...runningTeammateCount > 0 ? [
2697
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2698
+ children: [
2699
+ runningTeammateCount,
2700
+ " ",
2701
+ runningTeammateCount !== 1 ? "agents" : "agent"
2702
+ ]
2703
+ }, "teammates", true, undefined, this)
2704
+ ] : [],
2705
+ ...runningBashCount > 0 ? [
2706
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2707
+ children: [
2708
+ runningBashCount,
2709
+ " ",
2710
+ runningBashCount !== 1 ? "active shells" : "active shell"
2711
+ ]
2712
+ }, "shells", true, undefined, this)
2713
+ ] : [],
2714
+ ...runningAgentCount > 0 ? [
2715
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2716
+ children: [
2717
+ runningAgentCount,
2718
+ " ",
2719
+ runningAgentCount !== 1 ? "active agents" : "active agent"
2720
+ ]
2721
+ }, "agents", true, undefined, this)
2722
+ ] : []
2723
+ ], (index) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2724
+ children: " \xB7 "
2725
+ }, `separator-${index}`, false, undefined, this));
2726
+ const actions = [
2727
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2728
+ shortcut: "\u2191/\u2193",
2729
+ action: "select"
2730
+ }, "upDown", false, undefined, this),
2731
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2732
+ shortcut: "Enter",
2733
+ action: "view"
2734
+ }, "enter", false, undefined, this),
2735
+ ...currentSelection?.type === "in_process_teammate" && currentSelection.status === "running" ? [
2736
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2737
+ shortcut: "f",
2738
+ action: "foreground"
2739
+ }, "foreground", false, undefined, this)
2740
+ ] : [],
2741
+ ...(currentSelection?.type === "local_bash" || currentSelection?.type === "local_agent" || currentSelection?.type === "in_process_teammate" || currentSelection?.type === "local_workflow" || currentSelection?.type === "monitor_mcp" || currentSelection?.type === "dream" || currentSelection?.type === "remote_agent") && currentSelection.status === "running" ? [/* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2742
+ shortcut: "x",
2743
+ action: "stop"
2744
+ }, "kill", false, undefined, this)] : [],
2745
+ ...agentTasks.some((t) => t.status === "running") ? [
2746
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2747
+ shortcut: killAgentsShortcut,
2748
+ action: "stop all agents"
2749
+ }, "kill-all", false, undefined, this)
2750
+ ] : [],
2751
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(KeyboardShortcutHint, {
2752
+ shortcut: "\u2190/Esc",
2753
+ action: "close"
2754
+ }, "esc", false, undefined, this)
2755
+ ];
2756
+ const handleCancel = () => onDone("Background tasks dialog dismissed", { display: "system" });
2757
+ function renderInputGuide(exitState) {
2758
+ if (exitState.pending) {
2759
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2760
+ children: [
2761
+ "Press ",
2762
+ exitState.keyName,
2763
+ " again to exit"
2764
+ ]
2765
+ }, undefined, true, undefined, this);
2766
+ }
2767
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Byline, {
2768
+ children: actions
2769
+ }, undefined, false, undefined, this);
2770
+ }
2771
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2772
+ flexDirection: "column",
2773
+ tabIndex: 0,
2774
+ autoFocus: true,
2775
+ onKeyDown: handleKeyDown,
2776
+ children: /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Dialog, {
2777
+ title: "Background tasks",
2778
+ subtitle: /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(jsx_dev_runtime12.Fragment, {
2779
+ children: subtitle
2780
+ }, undefined, false, undefined, this),
2781
+ onCancel: handleCancel,
2782
+ color: "background",
2783
+ inputGuide: renderInputGuide,
2784
+ children: allSelectableItems.length === 0 ? /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2785
+ dimColor: true,
2786
+ children: "No tasks currently running"
2787
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2788
+ flexDirection: "column",
2789
+ children: [
2790
+ teammateTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2791
+ flexDirection: "column",
2792
+ children: [
2793
+ (bashTasks.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0) && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2794
+ dimColor: true,
2795
+ children: [
2796
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2797
+ bold: true,
2798
+ children: [
2799
+ " ",
2800
+ "Agents"
2801
+ ]
2802
+ }, undefined, true, undefined, this),
2803
+ " (",
2804
+ count(teammateTasks, (i) => i.type !== "leader"),
2805
+ ")"
2806
+ ]
2807
+ }, undefined, true, undefined, this),
2808
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2809
+ flexDirection: "column",
2810
+ children: /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(TeammateTaskGroups, {
2811
+ teammateTasks,
2812
+ currentSelectionId: currentSelection?.id
2813
+ }, undefined, false, undefined, this)
2814
+ }, undefined, false, undefined, this)
2815
+ ]
2816
+ }, undefined, true, undefined, this),
2817
+ bashTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2818
+ flexDirection: "column",
2819
+ marginTop: teammateTasks.length > 0 ? 1 : 0,
2820
+ children: [
2821
+ (teammateTasks.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0) && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2822
+ dimColor: true,
2823
+ children: [
2824
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2825
+ bold: true,
2826
+ children: [
2827
+ " ",
2828
+ "Shells"
2829
+ ]
2830
+ }, undefined, true, undefined, this),
2831
+ " (",
2832
+ bashTasks.length,
2833
+ ")"
2834
+ ]
2835
+ }, undefined, true, undefined, this),
2836
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2837
+ flexDirection: "column",
2838
+ children: bashTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2839
+ item,
2840
+ isSelected: item.id === currentSelection?.id
2841
+ }, item.id, false, undefined, this))
2842
+ }, undefined, false, undefined, this)
2843
+ ]
2844
+ }, undefined, true, undefined, this),
2845
+ mcpMonitors.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2846
+ flexDirection: "column",
2847
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 ? 1 : 0,
2848
+ children: [
2849
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2850
+ dimColor: true,
2851
+ children: [
2852
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2853
+ bold: true,
2854
+ children: [
2855
+ " ",
2856
+ "Monitors"
2857
+ ]
2858
+ }, undefined, true, undefined, this),
2859
+ " (",
2860
+ mcpMonitors.length,
2861
+ ")"
2862
+ ]
2863
+ }, undefined, true, undefined, this),
2864
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2865
+ flexDirection: "column",
2866
+ children: mcpMonitors.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2867
+ item,
2868
+ isSelected: item.id === currentSelection?.id
2869
+ }, item.id, false, undefined, this))
2870
+ }, undefined, false, undefined, this)
2871
+ ]
2872
+ }, undefined, true, undefined, this),
2873
+ remoteSessions.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2874
+ flexDirection: "column",
2875
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 ? 1 : 0,
2876
+ children: [
2877
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2878
+ dimColor: true,
2879
+ children: [
2880
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2881
+ bold: true,
2882
+ children: [
2883
+ " ",
2884
+ "Remote agents"
2885
+ ]
2886
+ }, undefined, true, undefined, this),
2887
+ " (",
2888
+ remoteSessions.length,
2889
+ ")"
2890
+ ]
2891
+ }, undefined, true, undefined, this),
2892
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2893
+ flexDirection: "column",
2894
+ children: remoteSessions.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2895
+ item,
2896
+ isSelected: item.id === currentSelection?.id
2897
+ }, item.id, false, undefined, this))
2898
+ }, undefined, false, undefined, this)
2899
+ ]
2900
+ }, undefined, true, undefined, this),
2901
+ agentTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2902
+ flexDirection: "column",
2903
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 ? 1 : 0,
2904
+ children: [
2905
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2906
+ dimColor: true,
2907
+ children: [
2908
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2909
+ bold: true,
2910
+ children: [
2911
+ " ",
2912
+ "Local agents"
2913
+ ]
2914
+ }, undefined, true, undefined, this),
2915
+ " (",
2916
+ agentTasks.length,
2917
+ ")"
2918
+ ]
2919
+ }, undefined, true, undefined, this),
2920
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2921
+ flexDirection: "column",
2922
+ children: agentTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2923
+ item,
2924
+ isSelected: item.id === currentSelection?.id
2925
+ }, item.id, false, undefined, this))
2926
+ }, undefined, false, undefined, this)
2927
+ ]
2928
+ }, undefined, true, undefined, this),
2929
+ workflowTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2930
+ flexDirection: "column",
2931
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0 ? 1 : 0,
2932
+ children: [
2933
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2934
+ dimColor: true,
2935
+ children: [
2936
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
2937
+ bold: true,
2938
+ children: [
2939
+ " ",
2940
+ "Workflows"
2941
+ ]
2942
+ }, undefined, true, undefined, this),
2943
+ " (",
2944
+ workflowTasks.length,
2945
+ ")"
2946
+ ]
2947
+ }, undefined, true, undefined, this),
2948
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2949
+ flexDirection: "column",
2950
+ children: workflowTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2951
+ item,
2952
+ isSelected: item.id === currentSelection?.id
2953
+ }, item.id, false, undefined, this))
2954
+ }, undefined, false, undefined, this)
2955
+ ]
2956
+ }, undefined, true, undefined, this),
2957
+ dreamTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2958
+ flexDirection: "column",
2959
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0 || workflowTasks.length > 0 ? 1 : 0,
2960
+ children: /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
2961
+ flexDirection: "column",
2962
+ children: dreamTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
2963
+ item,
2964
+ isSelected: item.id === currentSelection?.id
2965
+ }, item.id, false, undefined, this))
2966
+ }, undefined, false, undefined, this)
2967
+ }, undefined, false, undefined, this)
2968
+ ]
2969
+ }, undefined, true, undefined, this)
2970
+ }, undefined, false, undefined, this)
2971
+ }, undefined, false, undefined, this);
2972
+ }
2973
+ function toListItem(task) {
2974
+ switch (task.type) {
2975
+ case "local_bash":
2976
+ return {
2977
+ id: task.id,
2978
+ type: "local_bash",
2979
+ label: task.kind === "monitor" ? task.description : task.command,
2980
+ status: task.status,
2981
+ task
2982
+ };
2983
+ case "remote_agent":
2984
+ return {
2985
+ id: task.id,
2986
+ type: "remote_agent",
2987
+ label: task.title,
2988
+ status: task.status,
2989
+ task
2990
+ };
2991
+ case "local_agent":
2992
+ return {
2993
+ id: task.id,
2994
+ type: "local_agent",
2995
+ label: task.description,
2996
+ status: task.status,
2997
+ task
2998
+ };
2999
+ case "in_process_teammate":
3000
+ return {
3001
+ id: task.id,
3002
+ type: "in_process_teammate",
3003
+ label: `@${task.identity.agentName}`,
3004
+ status: task.status,
3005
+ task
3006
+ };
3007
+ case "local_workflow":
3008
+ return {
3009
+ id: task.id,
3010
+ type: "local_workflow",
3011
+ label: task.summary ?? task.description,
3012
+ status: task.status,
3013
+ task
3014
+ };
3015
+ case "monitor_mcp":
3016
+ return {
3017
+ id: task.id,
3018
+ type: "monitor_mcp",
3019
+ label: task.description,
3020
+ status: task.status,
3021
+ task
3022
+ };
3023
+ case "dream":
3024
+ return {
3025
+ id: task.id,
3026
+ type: "dream",
3027
+ label: task.description,
3028
+ status: task.status,
3029
+ task
3030
+ };
3031
+ }
3032
+ }
3033
+ function Item({
3034
+ item,
3035
+ isSelected
3036
+ }) {
3037
+ const { columns } = useTerminalSize();
3038
+ const maxActivityWidth = Math.max(30, columns - 26);
3039
+ const useGreyPointer = isCoordinatorMode();
3040
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
3041
+ flexDirection: "row",
3042
+ children: [
3043
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
3044
+ dimColor: useGreyPointer && isSelected,
3045
+ children: isSelected ? figures_default.pointer + " " : " "
3046
+ }, undefined, false, undefined, this),
3047
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
3048
+ color: isSelected && !useGreyPointer ? "suggestion" : undefined,
3049
+ children: item.type === "leader" ? /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
3050
+ children: [
3051
+ "@",
3052
+ TEAM_LEAD_NAME
3053
+ ]
3054
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(BackgroundTask, {
3055
+ task: item.task,
3056
+ maxActivityWidth
3057
+ }, undefined, false, undefined, this)
3058
+ }, undefined, false, undefined, this)
3059
+ ]
3060
+ }, undefined, true, undefined, this);
3061
+ }
3062
+ function TeammateTaskGroups({
3063
+ teammateTasks,
3064
+ currentSelectionId
3065
+ }) {
3066
+ const leaderItems = teammateTasks.filter((i) => i.type === "leader");
3067
+ const teammateItems = teammateTasks.filter((i) => i.type === "in_process_teammate");
3068
+ const teams = new Map;
3069
+ for (const item of teammateItems) {
3070
+ const teamName = item.task.identity.teamName;
3071
+ const group = teams.get(teamName);
3072
+ if (group) {
3073
+ group.push(item);
3074
+ } else {
3075
+ teams.set(teamName, [item]);
3076
+ }
3077
+ }
3078
+ const teamEntries = [...teams.entries()];
3079
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(jsx_dev_runtime12.Fragment, {
3080
+ children: teamEntries.map(([teamName, items]) => {
3081
+ const memberCount = items.length + leaderItems.length;
3082
+ return /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedBox_default, {
3083
+ flexDirection: "column",
3084
+ children: [
3085
+ /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(ThemedText, {
3086
+ dimColor: true,
3087
+ children: [
3088
+ " ",
3089
+ "Team: ",
3090
+ teamName,
3091
+ " (",
3092
+ memberCount,
3093
+ ")"
3094
+ ]
3095
+ }, undefined, true, undefined, this),
3096
+ leaderItems.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
3097
+ item,
3098
+ isSelected: item.id === currentSelectionId
3099
+ }, `${item.id}-${teamName}`, false, undefined, this)),
3100
+ items.map((item) => /* @__PURE__ */ jsx_dev_runtime12.jsxDEV(Item, {
3101
+ item,
3102
+ isSelected: item.id === currentSelectionId
3103
+ }, item.id, false, undefined, this))
3104
+ ]
3105
+ }, teamName, true, undefined, this);
3106
+ })
3107
+ }, undefined, false, undefined, this);
3108
+ }
3109
+ var import_react7, jsx_dev_runtime12, WorkflowDetailDialog2, workflowTaskModule, killWorkflowTask, skipWorkflowAgent, retryWorkflowAgent, monitorMcpModule, killMonitorMcp, MonitorMcpDetailDialog2;
3110
+ var init_BackgroundTasksDialog = __esm(() => {
3111
+ init_figures();
3112
+ init_coordinatorMode();
3113
+ init_useTerminalSize();
3114
+ init_AppState();
3115
+ init_teammateViewHelpers();
3116
+ init_DreamTask();
3117
+ init_InProcessTeammateTask();
3118
+ init_LocalAgentTask();
3119
+ init_LocalShellTask();
3120
+ init_RemoteAgentTask();
3121
+ init_types();
3122
+ init_array();
3123
+ init_constants3();
3124
+ init_ultraplan();
3125
+ init_overlayContext();
3126
+ init_src();
3127
+ init_useKeybinding();
3128
+ init_useShortcutDisplay();
3129
+ init_array();
3130
+ init_src();
3131
+ init_AsyncAgentDetailDialog();
3132
+ init_BackgroundTask();
3133
+ init_DreamDetailDialog();
3134
+ init_InProcessTeammateDetailDialog();
3135
+ init_RemoteSessionDetailDialog();
3136
+ init_ShellDetailDialog();
3137
+ import_react7 = __toESM(require_react(), 1);
3138
+ jsx_dev_runtime12 = __toESM(require_jsx_dev_runtime(), 1);
3139
+ WorkflowDetailDialog2 = (init_WorkflowDetailDialog(), __toCommonJS(exports_WorkflowDetailDialog)).WorkflowDetailDialog;
3140
+ workflowTaskModule = (init_LocalWorkflowTask(), __toCommonJS(exports_LocalWorkflowTask));
3141
+ killWorkflowTask = workflowTaskModule?.killWorkflowTask ?? null;
3142
+ skipWorkflowAgent = workflowTaskModule?.skipWorkflowAgent ?? null;
3143
+ retryWorkflowAgent = workflowTaskModule?.retryWorkflowAgent ?? null;
3144
+ monitorMcpModule = (init_MonitorMcpTask(), __toCommonJS(exports_MonitorMcpTask));
3145
+ killMonitorMcp = monitorMcpModule?.killMonitorMcp ?? null;
3146
+ MonitorMcpDetailDialog2 = (init_MonitorMcpDetailDialog(), __toCommonJS(exports_MonitorMcpDetailDialog)).MonitorMcpDetailDialog;
3147
+ });
3148
+
3149
+ export { enterTeammateView, exitTeammateView, stopOrDismissAgent, init_teammateViewHelpers, isTerminalStatus, shouldHideTasksFooter, init_taskStatusUtils, BackgroundTasksDialog, init_BackgroundTasksDialog };