@costrict/csc 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. package/README.md +398 -0
  2. package/dist/chunk-04hza677.js +24 -0
  3. package/dist/chunk-0559sa47.js +269 -0
  4. package/dist/chunk-06saje2v.js +39 -0
  5. package/dist/chunk-07069jq1.js +30 -0
  6. package/dist/chunk-070x53zd.js +2377 -0
  7. package/dist/chunk-0731m51q.js +8 -0
  8. package/dist/chunk-0858agqy.js +481 -0
  9. package/dist/chunk-09vwyeam.js +16 -0
  10. package/dist/chunk-0h5jp1k7.js +142 -0
  11. package/dist/chunk-0hhpf3sk.js +703 -0
  12. package/dist/chunk-0rpb2bdp.js +8 -0
  13. package/dist/chunk-0vkfrmqm.js +690 -0
  14. package/dist/chunk-0xjaqda8.js +1124 -0
  15. package/dist/chunk-0xv28twy.js +140 -0
  16. package/dist/chunk-0yrqcj0z.js +117 -0
  17. package/dist/chunk-1141xmr4.js +8 -0
  18. package/dist/chunk-11nzax0s.js +38 -0
  19. package/dist/chunk-13hhjhs8.js +1299 -0
  20. package/dist/chunk-15yrwc9c.js +110 -0
  21. package/dist/chunk-168xb8v1.js +436 -0
  22. package/dist/chunk-1a1qct3y.js +120 -0
  23. package/dist/chunk-1cwdhk7a.js +969 -0
  24. package/dist/chunk-1dz5e26z.js +726 -0
  25. package/dist/chunk-1h2famwb.js +49 -0
  26. package/dist/chunk-1hreef20.js +27 -0
  27. package/dist/chunk-1mpdkjdj.js +66 -0
  28. package/dist/chunk-1pvfqrpv.js +78 -0
  29. package/dist/chunk-1r1zzbv3.js +112 -0
  30. package/dist/chunk-1rvwfjaq.js +71 -0
  31. package/dist/chunk-1w2y3m4g.js +47290 -0
  32. package/dist/chunk-1xf1hn04.js +366 -0
  33. package/dist/chunk-225mq9kr.js +908 -0
  34. package/dist/chunk-238g70xa.js +36 -0
  35. package/dist/chunk-23my8c16.js +516 -0
  36. package/dist/chunk-26wtxbdc.js +13870 -0
  37. package/dist/chunk-2a42s11t.js +412 -0
  38. package/dist/chunk-2eykm0j0.js +20 -0
  39. package/dist/chunk-2fwze72g.js +24 -0
  40. package/dist/chunk-2gdm9hp2.js +1179 -0
  41. package/dist/chunk-2gzv8nrw.js +205 -0
  42. package/dist/chunk-2jb168ef.js +772 -0
  43. package/dist/chunk-2k995y2x.js +880 -0
  44. package/dist/chunk-2nayx6q1.js +63 -0
  45. package/dist/chunk-2p2kknmh.js +165 -0
  46. package/dist/chunk-2qa6bvek.js +146 -0
  47. package/dist/chunk-2qz6r4n3.js +74 -0
  48. package/dist/chunk-2s460rgh.js +61 -0
  49. package/dist/chunk-2wv3ttqg.js +199 -0
  50. package/dist/chunk-2wvz22ag.js +71 -0
  51. package/dist/chunk-2wz9qb4j.js +164 -0
  52. package/dist/chunk-30rst83v.js +168 -0
  53. package/dist/chunk-39jcea92.js +737 -0
  54. package/dist/chunk-3bes9fg8.js +78 -0
  55. package/dist/chunk-3c25bcsw.js +17 -0
  56. package/dist/chunk-3cg807vs.js +38 -0
  57. package/dist/chunk-3dy7fxmg.js +1072 -0
  58. package/dist/chunk-3h8a89gy.js +46 -0
  59. package/dist/chunk-3j0f3yyd.js +17 -0
  60. package/dist/chunk-3mgywd32.js +8 -0
  61. package/dist/chunk-3ng1qsw3.js +281 -0
  62. package/dist/chunk-3nk79af8.js +8 -0
  63. package/dist/chunk-3ns6ys7f.js +1648 -0
  64. package/dist/chunk-3sj7jkgr.js +35 -0
  65. package/dist/chunk-3tg3p70s.js +513 -0
  66. package/dist/chunk-3v18yz1s.js +21933 -0
  67. package/dist/chunk-3vxgde8h.js +830 -0
  68. package/dist/chunk-3w6s9m5w.js +16 -0
  69. package/dist/chunk-3x2jaxpw.js +254 -0
  70. package/dist/chunk-3xyekzfn.js +113 -0
  71. package/dist/chunk-3yeacwwq.js +115 -0
  72. package/dist/chunk-3z5e623j.js +130 -0
  73. package/dist/chunk-3z9478wf.js +14 -0
  74. package/dist/chunk-46fcr28b.js +131 -0
  75. package/dist/chunk-495d85x1.js +8066 -0
  76. package/dist/chunk-4bfwebv9.js +276 -0
  77. package/dist/chunk-4g3v8y12.js +23 -0
  78. package/dist/chunk-4gn5yqrx.js +79 -0
  79. package/dist/chunk-4jfp4pr0.js +24 -0
  80. package/dist/chunk-4jm600zv.js +13 -0
  81. package/dist/chunk-4nspekjp.js +69 -0
  82. package/dist/chunk-4pbx3g7s.js +26 -0
  83. package/dist/chunk-4t6efhvx.js +102 -0
  84. package/dist/chunk-4te4ttsn.js +42 -0
  85. package/dist/chunk-4x6wg2kg.js +254 -0
  86. package/dist/chunk-4y23e4m9.js +399 -0
  87. package/dist/chunk-4zfkzkt6.js +37 -0
  88. package/dist/chunk-4zh96y27.js +202 -0
  89. package/dist/chunk-512kh02z.js +117 -0
  90. package/dist/chunk-538ydk68.js +85 -0
  91. package/dist/chunk-56ax2vae.js +255 -0
  92. package/dist/chunk-56r79b2b.js +69 -0
  93. package/dist/chunk-57zse1aw.js +393 -0
  94. package/dist/chunk-5c5xde65.js +229 -0
  95. package/dist/chunk-5c8g21yn.js +334 -0
  96. package/dist/chunk-5hfekx34.js +158 -0
  97. package/dist/chunk-5j8wked2.js +125 -0
  98. package/dist/chunk-5krq9sjq.js +291 -0
  99. package/dist/chunk-5kstcfhs.js +180 -0
  100. package/dist/chunk-5q9t5raw.js +1077 -0
  101. package/dist/chunk-5z0vwms1.js +20 -0
  102. package/dist/chunk-5z28bqne.js +6748 -0
  103. package/dist/chunk-616twzqj.js +17 -0
  104. package/dist/chunk-62me46b4.js +115 -0
  105. package/dist/chunk-62xkxk9z.js +32 -0
  106. package/dist/chunk-64c1avct.js +13 -0
  107. package/dist/chunk-677as3nh.js +15 -0
  108. package/dist/chunk-68jt10ky.js +170 -0
  109. package/dist/chunk-6aspnjtj.js +213 -0
  110. package/dist/chunk-6bd8brc4.js +48 -0
  111. package/dist/chunk-6dj5t602.js +341 -0
  112. package/dist/chunk-6e7578mb.js +183 -0
  113. package/dist/chunk-6gr3c3w9.js +378 -0
  114. package/dist/chunk-6km733xr.js +1393 -0
  115. package/dist/chunk-6kpdq5vp.js +269 -0
  116. package/dist/chunk-6mzwkxka.js +591 -0
  117. package/dist/chunk-6n4rgw3j.js +308 -0
  118. package/dist/chunk-6p4cyhb3.js +16 -0
  119. package/dist/chunk-6ps660aq.js +177 -0
  120. package/dist/chunk-6rvt67cg.js +156 -0
  121. package/dist/chunk-6tq2v3rk.js +186 -0
  122. package/dist/chunk-6vhnnq2y.js +1410 -0
  123. package/dist/chunk-6wyva7w0.js +208 -0
  124. package/dist/chunk-6x0hj15f.js +502 -0
  125. package/dist/chunk-71pmx33m.js +367 -0
  126. package/dist/chunk-71ynp714.js +101 -0
  127. package/dist/chunk-73rpbt04.js +1947 -0
  128. package/dist/chunk-74vem2p2.js +34238 -0
  129. package/dist/chunk-760252na.js +101 -0
  130. package/dist/chunk-7739pg2c.js +4261 -0
  131. package/dist/chunk-78ynhtwg.js +71 -0
  132. package/dist/chunk-7aw745vx.js +40175 -0
  133. package/dist/chunk-7ethp9j4.js +785 -0
  134. package/dist/chunk-7f9h59mx.js +123 -0
  135. package/dist/chunk-7gwn2q3t.js +267 -0
  136. package/dist/chunk-7j39efa9.js +4521 -0
  137. package/dist/chunk-7nzp7c14.js +113 -0
  138. package/dist/chunk-7p0pvq5a.js +1189 -0
  139. package/dist/chunk-7pe7wxtx.js +37 -0
  140. package/dist/chunk-7wm5s02e.js +216 -0
  141. package/dist/chunk-7xyswgjh.js +8 -0
  142. package/dist/chunk-80ex85y3.js +231 -0
  143. package/dist/chunk-80v8c3v8.js +94 -0
  144. package/dist/chunk-8225arm6.js +6374 -0
  145. package/dist/chunk-82eajk9f.js +885 -0
  146. package/dist/chunk-83hfzbx3.js +10 -0
  147. package/dist/chunk-84bn8nbd.js +130 -0
  148. package/dist/chunk-85em0j2s.js +61 -0
  149. package/dist/chunk-86vz5aga.js +585 -0
  150. package/dist/chunk-86zqm75k.js +119 -0
  151. package/dist/chunk-894yt5ch.js +127 -0
  152. package/dist/chunk-89f30geq.js +114 -0
  153. package/dist/chunk-89m2z6cf.js +542 -0
  154. package/dist/chunk-89spcmeg.js +203 -0
  155. package/dist/chunk-8a1q7y7t.js +38 -0
  156. package/dist/chunk-8b9j5s4r.js +22 -0
  157. package/dist/chunk-8g5pe1gr.js +37 -0
  158. package/dist/chunk-8h45f69y.js +151 -0
  159. package/dist/chunk-8henn231.js +63 -0
  160. package/dist/chunk-8jprqan8.js +1580 -0
  161. package/dist/chunk-8pn8tvgg.js +637 -0
  162. package/dist/chunk-8psrvmy6.js +797 -0
  163. package/dist/chunk-8sq45snx.js +1585 -0
  164. package/dist/chunk-8tj3ttfr.js +122 -0
  165. package/dist/chunk-8tnsngw2.js +31 -0
  166. package/dist/chunk-8y12jxg8.js +10 -0
  167. package/dist/chunk-8ymf4e6z.js +48 -0
  168. package/dist/chunk-8yrcxv0n.js +17 -0
  169. package/dist/chunk-90wp6wez.js +10510 -0
  170. package/dist/chunk-92cm1qp0.js +387 -0
  171. package/dist/chunk-95g4wtbk.js +83 -0
  172. package/dist/chunk-95h99qt5.js +350 -0
  173. package/dist/chunk-9663bsk0.js +15 -0
  174. package/dist/chunk-96mf19ww.js +130 -0
  175. package/dist/chunk-97kwfkef.js +172626 -0
  176. package/dist/chunk-9d4wp328.js +121 -0
  177. package/dist/chunk-9h9j6e8f.js +340 -0
  178. package/dist/chunk-9k8qsaph.js +33068 -0
  179. package/dist/chunk-9mfbqw9k.js +24 -0
  180. package/dist/chunk-9n6x41fh.js +89 -0
  181. package/dist/chunk-9nsdc461.js +43 -0
  182. package/dist/chunk-9nyem167.js +68 -0
  183. package/dist/chunk-9q3r5pd2.js +80 -0
  184. package/dist/chunk-9wf38cty.js +83 -0
  185. package/dist/chunk-9x5zgy22.js +12 -0
  186. package/dist/chunk-a136cvvz.js +27 -0
  187. package/dist/chunk-a4twdmhf.js +45 -0
  188. package/dist/chunk-a53syfz4.js +348 -0
  189. package/dist/chunk-a783nmpc.js +240 -0
  190. package/dist/chunk-a8ejc632.js +3094 -0
  191. package/dist/chunk-a9vdeb6y.js +258 -0
  192. package/dist/chunk-a9zh40sj.js +48 -0
  193. package/dist/chunk-ae76ded0.js +30 -0
  194. package/dist/chunk-akdsj21e.js +37 -0
  195. package/dist/chunk-ase86y73.js +15 -0
  196. package/dist/chunk-avb9ff81.js +98 -0
  197. package/dist/chunk-ayydhscx.js +26 -0
  198. package/dist/chunk-az3db85f.js +301 -0
  199. package/dist/chunk-az7hwp39.js +111 -0
  200. package/dist/chunk-b4wg70y1.js +54 -0
  201. package/dist/chunk-b81hd3m6.js +32 -0
  202. package/dist/chunk-ba17dx50.js +30 -0
  203. package/dist/chunk-bcfd2zw7.js +20 -0
  204. package/dist/chunk-bcv6qax7.js +32 -0
  205. package/dist/chunk-bef1t5q0.js +1460 -0
  206. package/dist/chunk-bend4tmg.js +208 -0
  207. package/dist/chunk-bhxz6rzk.js +475 -0
  208. package/dist/chunk-bj6k61m9.js +130 -0
  209. package/dist/chunk-bnrctxq5.js +112 -0
  210. package/dist/chunk-bt64sq5y.js +19 -0
  211. package/dist/chunk-bxcfz5gy.js +56 -0
  212. package/dist/chunk-c11k4btd.js +1095 -0
  213. package/dist/chunk-c3eaj3gr.js +2997 -0
  214. package/dist/chunk-c51ns2ke.js +40 -0
  215. package/dist/chunk-c5kags80.js +141 -0
  216. package/dist/chunk-c6sjhj89.js +1284 -0
  217. package/dist/chunk-c77cvfqz.js +14 -0
  218. package/dist/chunk-cb68zyey.js +117 -0
  219. package/dist/chunk-cczpp302.js +223 -0
  220. package/dist/chunk-ce2v5y9y.js +338 -0
  221. package/dist/chunk-cfv996bs.js +22 -0
  222. package/dist/chunk-cgfdkzhb.js +12 -0
  223. package/dist/chunk-cj3ptgbw.js +918 -0
  224. package/dist/chunk-ck22v5n3.js +2745 -0
  225. package/dist/chunk-ck4be14j.js +8588 -0
  226. package/dist/chunk-cmwfcp4h.js +120 -0
  227. package/dist/chunk-cnsj3vq2.js +35 -0
  228. package/dist/chunk-cnvsytvx.js +182 -0
  229. package/dist/chunk-cp1aqm3d.js +66 -0
  230. package/dist/chunk-cpgjt97m.js +126 -0
  231. package/dist/chunk-cqrdcwc6.js +115 -0
  232. package/dist/chunk-crmjpsqe.js +68 -0
  233. package/dist/chunk-ctya0ggm.js +1606 -0
  234. package/dist/chunk-cvkzqcxn.js +26 -0
  235. package/dist/chunk-d4mdda98.js +94 -0
  236. package/dist/chunk-d8vwvym7.js +693 -0
  237. package/dist/chunk-d8xwx5h7.js +431 -0
  238. package/dist/chunk-dgepe1tj.js +557 -0
  239. package/dist/chunk-dggvswz1.js +104 -0
  240. package/dist/chunk-dgqrcy74.js +48 -0
  241. package/dist/chunk-dhgfme5s.js +622 -0
  242. package/dist/chunk-dkzwgrsa.js +336 -0
  243. package/dist/chunk-dmfnhfbm.js +63 -0
  244. package/dist/chunk-dnh7jtpb.js +37 -0
  245. package/dist/chunk-drtj50ge.js +112 -0
  246. package/dist/chunk-dtj6da60.js +173 -0
  247. package/dist/chunk-e3jdmhj3.js +122 -0
  248. package/dist/chunk-e5ey47fq.js +78 -0
  249. package/dist/chunk-ehtwnxpg.js +1591 -0
  250. package/dist/chunk-enz148g9.js +79 -0
  251. package/dist/chunk-eq5csq9z.js +147 -0
  252. package/dist/chunk-eqp1rfft.js +17 -0
  253. package/dist/chunk-ers3hn71.js +58 -0
  254. package/dist/chunk-evs073nf.js +9300 -0
  255. package/dist/chunk-ew2qn2ct.js +128 -0
  256. package/dist/chunk-ewadzrm8.js +103 -0
  257. package/dist/chunk-ewhxrzr7.js +282 -0
  258. package/dist/chunk-f076572y.js +29 -0
  259. package/dist/chunk-f1fd8rrx.js +458 -0
  260. package/dist/chunk-f2mhrmww.js +62 -0
  261. package/dist/chunk-f2rspz95.js +661 -0
  262. package/dist/chunk-f4evkbn3.js +109 -0
  263. package/dist/chunk-f5ma3nh5.js +3436 -0
  264. package/dist/chunk-f77bmbss.js +262 -0
  265. package/dist/chunk-fafwc5w7.js +63 -0
  266. package/dist/chunk-fas0j37w.js +206 -0
  267. package/dist/chunk-fbv4apne.js +51 -0
  268. package/dist/chunk-fbvwrs77.js +74 -0
  269. package/dist/chunk-feyzykye.js +10 -0
  270. package/dist/chunk-fk80f449.js +29032 -0
  271. package/dist/chunk-fqz39wqc.js +2754 -0
  272. package/dist/chunk-fs870v81.js +321 -0
  273. package/dist/chunk-fvrd2wnw.js +119 -0
  274. package/dist/chunk-fwqpwb0b.js +68 -0
  275. package/dist/chunk-fyc5fepv.js +10 -0
  276. package/dist/chunk-fz0ch109.js +329 -0
  277. package/dist/chunk-fzsn5y4x.js +74 -0
  278. package/dist/chunk-g1k68z1b.js +15 -0
  279. package/dist/chunk-g338npwr.js +1061 -0
  280. package/dist/chunk-g4mn27j2.js +125 -0
  281. package/dist/chunk-g5k4zxrz.js +285 -0
  282. package/dist/chunk-g7hbj02n.js +47 -0
  283. package/dist/chunk-g9f19ttm.js +15 -0
  284. package/dist/chunk-gmpnr1zb.js +248 -0
  285. package/dist/chunk-gnsx2xas.js +58 -0
  286. package/dist/chunk-gr2j2pnw.js +449 -0
  287. package/dist/chunk-gs8skfag.js +700 -0
  288. package/dist/chunk-gte39pa1.js +62 -0
  289. package/dist/chunk-gvee52bj.js +41 -0
  290. package/dist/chunk-gzvt7jsh.js +109 -0
  291. package/dist/chunk-gzykgb04.js +445 -0
  292. package/dist/chunk-h0qngp9w.js +157 -0
  293. package/dist/chunk-h4b85amj.js +2331 -0
  294. package/dist/chunk-h5w7hchy.js +851 -0
  295. package/dist/chunk-hakdhagh.js +16606 -0
  296. package/dist/chunk-hamq5sbn.js +398 -0
  297. package/dist/chunk-hezhnvr6.js +369 -0
  298. package/dist/chunk-hh7cmy4k.js +20 -0
  299. package/dist/chunk-hhgyxd84.js +259 -0
  300. package/dist/chunk-hk9xz7gk.js +118 -0
  301. package/dist/chunk-hkn7tzgv.js +2007 -0
  302. package/dist/chunk-hnafabz8.js +266 -0
  303. package/dist/chunk-hqhmy4sg.js +4181 -0
  304. package/dist/chunk-hvdbzsar.js +127 -0
  305. package/dist/chunk-hzhe8ygc.js +547 -0
  306. package/dist/chunk-j05addbw.js +132 -0
  307. package/dist/chunk-j2k4p94p.js +55 -0
  308. package/dist/chunk-j3a4p81y.js +184 -0
  309. package/dist/chunk-j5bth84e.js +97 -0
  310. package/dist/chunk-j64ga6ta.js +8035 -0
  311. package/dist/chunk-j7e5xs2n.js +225 -0
  312. package/dist/chunk-j9gxwbe3.js +349 -0
  313. package/dist/chunk-jaaxk89e.js +113 -0
  314. package/dist/chunk-jbe9jra5.js +132 -0
  315. package/dist/chunk-jd32zbps.js +15 -0
  316. package/dist/chunk-jdgeec04.js +4249 -0
  317. package/dist/chunk-jhvzhfs0.js +61 -0
  318. package/dist/chunk-jmczk6av.js +173 -0
  319. package/dist/chunk-jmmy2389.js +146 -0
  320. package/dist/chunk-jmt3t5ka.js +655 -0
  321. package/dist/chunk-jnhkref0.js +30 -0
  322. package/dist/chunk-jrw2ydrt.js +122 -0
  323. package/dist/chunk-jwrvnvn4.js +40 -0
  324. package/dist/chunk-jzmz18nn.js +65 -0
  325. package/dist/chunk-k04vbmv4.js +646 -0
  326. package/dist/chunk-k0p9w03v.js +4957 -0
  327. package/dist/chunk-k3dhz0k9.js +135 -0
  328. package/dist/chunk-k3s4yk22.js +477 -0
  329. package/dist/chunk-k9ssqns7.js +32 -0
  330. package/dist/chunk-kadfnk84.js +182 -0
  331. package/dist/chunk-kddy2dqe.js +251 -0
  332. package/dist/chunk-kfd89dsd.js +21 -0
  333. package/dist/chunk-kqnj25tn.js +6956 -0
  334. package/dist/chunk-kt7g00mq.js +435 -0
  335. package/dist/chunk-kwdta9bw.js +3437 -0
  336. package/dist/chunk-kwekc97v.js +18 -0
  337. package/dist/chunk-kyqp0hdk.js +410 -0
  338. package/dist/chunk-m19387gd.js +192 -0
  339. package/dist/chunk-m1k6c44h.js +97 -0
  340. package/dist/chunk-m2bcpk8j.js +30 -0
  341. package/dist/chunk-m2f2brtj.js +290 -0
  342. package/dist/chunk-m3vd4kjb.js +895 -0
  343. package/dist/chunk-m4y35n20.js +2845 -0
  344. package/dist/chunk-m53f3dw3.js +237 -0
  345. package/dist/chunk-m7e9yz7v.js +112 -0
  346. package/dist/chunk-m7gb3xym.js +196 -0
  347. package/dist/chunk-m85hmjj5.js +446 -0
  348. package/dist/chunk-mafty4rg.js +30 -0
  349. package/dist/chunk-mbgrtfd1.js +67 -0
  350. package/dist/chunk-mc9gapvy.js +1811 -0
  351. package/dist/chunk-md75xjhp.js +283 -0
  352. package/dist/chunk-mdkxrfbj.js +666 -0
  353. package/dist/chunk-mfq8d0nf.js +126 -0
  354. package/dist/chunk-mg4j7qa1.js +192 -0
  355. package/dist/chunk-mjnb2hkr.js +132 -0
  356. package/dist/chunk-mnc0y0d0.js +190 -0
  357. package/dist/chunk-mpvn2d5c.js +155 -0
  358. package/dist/chunk-mr2kw49k.js +116 -0
  359. package/dist/chunk-ms3y5kf0.js +252 -0
  360. package/dist/chunk-mwz7he7v.js +169 -0
  361. package/dist/chunk-mx28h61f.js +1147 -0
  362. package/dist/chunk-my3kzsjn.js +99 -0
  363. package/dist/chunk-n0a4xh5h.js +128 -0
  364. package/dist/chunk-n0qaeaa5.js +256 -0
  365. package/dist/chunk-n24pwjkp.js +139 -0
  366. package/dist/chunk-n2qz0nhv.js +93 -0
  367. package/dist/chunk-n7d8481f.js +68 -0
  368. package/dist/chunk-n7ttdtk0.js +641 -0
  369. package/dist/chunk-n9axs6t8.js +716 -0
  370. package/dist/chunk-netzwgv1.js +154 -0
  371. package/dist/chunk-nh3cd07f.js +14358 -0
  372. package/dist/chunk-njhgsxjj.js +237 -0
  373. package/dist/chunk-nk5x8t2h.js +132 -0
  374. package/dist/chunk-nka1g8f4.js +773 -0
  375. package/dist/chunk-nneembm7.js +31 -0
  376. package/dist/chunk-nq0fxyxh.js +752 -0
  377. package/dist/chunk-nt837qt9.js +21 -0
  378. package/dist/chunk-p0ng6w7n.js +315 -0
  379. package/dist/chunk-p1e5ajm6.js +90 -0
  380. package/dist/chunk-p2816w9z.js +1486 -0
  381. package/dist/chunk-p2d5nh3g.js +342 -0
  382. package/dist/chunk-p3a8pcmp.js +780 -0
  383. package/dist/chunk-p5rg8b87.js +157 -0
  384. package/dist/chunk-p7vkh4wx.js +15 -0
  385. package/dist/chunk-p99pzx02.js +65 -0
  386. package/dist/chunk-p9ce1a80.js +279 -0
  387. package/dist/chunk-pakvqawt.js +2544 -0
  388. package/dist/chunk-pfc94kdv.js +5387 -0
  389. package/dist/chunk-pfnzae5b.js +71 -0
  390. package/dist/chunk-pgyrvzpr.js +862 -0
  391. package/dist/chunk-pj77mrv7.js +879 -0
  392. package/dist/chunk-pk3s1vqt.js +136 -0
  393. package/dist/chunk-ppwjyveh.js +8 -0
  394. package/dist/chunk-ps1ds612.js +183 -0
  395. package/dist/chunk-ps49ymvj.js +43 -0
  396. package/dist/chunk-pshjyzq4.js +17656 -0
  397. package/dist/chunk-pskjqhz7.js +116 -0
  398. package/dist/chunk-pvc81kgd.js +1030 -0
  399. package/dist/chunk-pwwa7s62.js +11 -0
  400. package/dist/chunk-q3j9ktw6.js +313 -0
  401. package/dist/chunk-q4t5gjz6.js +180 -0
  402. package/dist/chunk-q7tpyeb3.js +39 -0
  403. package/dist/chunk-q82r31er.js +151 -0
  404. package/dist/chunk-qajrkk97.js +298 -0
  405. package/dist/chunk-qb6ej6am.js +118 -0
  406. package/dist/chunk-qbrsmra3.js +23 -0
  407. package/dist/chunk-qezabsdm.js +65 -0
  408. package/dist/chunk-qfdazq4f.js +81 -0
  409. package/dist/chunk-qjb5b625.js +382 -0
  410. package/dist/chunk-qjeytdb7.js +47 -0
  411. package/dist/chunk-qkn19vqd.js +116 -0
  412. package/dist/chunk-qnfx3qtx.js +617 -0
  413. package/dist/chunk-qp1047f9.js +16239 -0
  414. package/dist/chunk-qp2qdcda.js +100 -0
  415. package/dist/chunk-qtfc6wdh.js +19 -0
  416. package/dist/chunk-qvpvpfby.js +4951 -0
  417. package/dist/chunk-qwcs5mar.js +151 -0
  418. package/dist/chunk-qywms8ma.js +84 -0
  419. package/dist/chunk-qz2x630m.js +49145 -0
  420. package/dist/chunk-r1c1vckq.js +606 -0
  421. package/dist/chunk-r1cmrvhq.js +660 -0
  422. package/dist/chunk-r4w1khtr.js +479 -0
  423. package/dist/chunk-r5c7ntjh.js +308 -0
  424. package/dist/chunk-r6pqswky.js +118 -0
  425. package/dist/chunk-rcpmj2s6.js +51 -0
  426. package/dist/chunk-re5rh06v.js +151 -0
  427. package/dist/chunk-reta5k4w.js +127 -0
  428. package/dist/chunk-rfpx3se2.js +114 -0
  429. package/dist/chunk-rfzv16n9.js +140 -0
  430. package/dist/chunk-rhq6rjsm.js +139 -0
  431. package/dist/chunk-rn0v1hk8.js +34 -0
  432. package/dist/chunk-rpmxbsc4.js +106 -0
  433. package/dist/chunk-rw0b3wq4.js +54 -0
  434. package/dist/chunk-rwg99z4w.js +277 -0
  435. package/dist/chunk-rzz2be44.js +144 -0
  436. package/dist/chunk-s1pwx4p8.js +1029 -0
  437. package/dist/chunk-s2jznn2t.js +63 -0
  438. package/dist/chunk-s3pzvdss.js +50 -0
  439. package/dist/chunk-s5hrc81b.js +256 -0
  440. package/dist/chunk-s6zh6vsc.js +115 -0
  441. package/dist/chunk-sac40vch.js +41 -0
  442. package/dist/chunk-sd36yzx8.js +954 -0
  443. package/dist/chunk-sd6tyy2k.js +445 -0
  444. package/dist/chunk-sg9s9fhh.js +220 -0
  445. package/dist/chunk-st29kcjw.js +70 -0
  446. package/dist/chunk-szj5wvdy.js +28 -0
  447. package/dist/chunk-tazmxz0r.js +115 -0
  448. package/dist/chunk-tbbgpakn.js +352 -0
  449. package/dist/chunk-tbjjq4ry.js +70 -0
  450. package/dist/chunk-tezak8rx.js +6157 -0
  451. package/dist/chunk-tf79jran.js +15 -0
  452. package/dist/chunk-tg8bdmhy.js +148 -0
  453. package/dist/chunk-thjjw26s.js +369 -0
  454. package/dist/chunk-tq1ak9qz.js +3594 -0
  455. package/dist/chunk-tqvxvgcq.js +390 -0
  456. package/dist/chunk-ts2p6bv1.js +224 -0
  457. package/dist/chunk-tsmzsjkv.js +167 -0
  458. package/dist/chunk-ttk5dzz8.js +25 -0
  459. package/dist/chunk-v1kzp02e.js +785 -0
  460. package/dist/chunk-v4rp12y4.js +269 -0
  461. package/dist/chunk-v4t6dyyh.js +9076 -0
  462. package/dist/chunk-v78fj8by.js +145 -0
  463. package/dist/chunk-v9smspw2.js +4301 -0
  464. package/dist/chunk-var1et7e.js +66 -0
  465. package/dist/chunk-vest0y6x.js +3830 -0
  466. package/dist/chunk-vf5sd1nq.js +12 -0
  467. package/dist/chunk-vf612n57.js +472 -0
  468. package/dist/chunk-vhqtr0f1.js +343 -0
  469. package/dist/chunk-vnfempy5.js +43 -0
  470. package/dist/chunk-vp5pr5yv.js +443 -0
  471. package/dist/chunk-vp8cvspq.js +157 -0
  472. package/dist/chunk-vqqtdc8s.js +75 -0
  473. package/dist/chunk-vyjeh50y.js +2149 -0
  474. package/dist/chunk-w0nwhqww.js +295 -0
  475. package/dist/chunk-w32xjs44.js +306 -0
  476. package/dist/chunk-w4mdb23d.js +111 -0
  477. package/dist/chunk-w5j84xcj.js +226 -0
  478. package/dist/chunk-w78f4cd8.js +158 -0
  479. package/dist/chunk-wbpxzaty.js +66 -0
  480. package/dist/chunk-wfz0qffj.js +3939 -0
  481. package/dist/chunk-wm26jyc3.js +156 -0
  482. package/dist/chunk-wmw9c9ga.js +440 -0
  483. package/dist/chunk-wpp8s8bh.js +433 -0
  484. package/dist/chunk-wrb0tqk3.js +198 -0
  485. package/dist/chunk-wswsvthr.js +946 -0
  486. package/dist/chunk-wzpdet3m.js +843 -0
  487. package/dist/chunk-x1pmes5j.js +482 -0
  488. package/dist/chunk-x6r4v44b.js +8 -0
  489. package/dist/chunk-x92g7cqn.js +421 -0
  490. package/dist/chunk-xedf6d09.js +66 -0
  491. package/dist/chunk-xgwhhpvz.js +154 -0
  492. package/dist/chunk-xkxd7n8n.js +310 -0
  493. package/dist/chunk-xrt6e27s.js +60 -0
  494. package/dist/chunk-xsq9ae7x.js +90 -0
  495. package/dist/chunk-xv3era3s.js +8 -0
  496. package/dist/chunk-xwz1db00.js +34 -0
  497. package/dist/chunk-xx0570gb.js +120 -0
  498. package/dist/chunk-xxshn0tn.js +314 -0
  499. package/dist/chunk-xzc7k2hh.js +122 -0
  500. package/dist/chunk-y1784krc.js +19 -0
  501. package/dist/chunk-y2hdgkmv.js +244 -0
  502. package/dist/chunk-y82j1dne.js +524 -0
  503. package/dist/chunk-ybae225f.js +669 -0
  504. package/dist/chunk-ye7fmmc4.js +95 -0
  505. package/dist/chunk-ygj29dpk.js +100 -0
  506. package/dist/chunk-yj2t6a2t.js +216 -0
  507. package/dist/chunk-yja33bsx.js +300 -0
  508. package/dist/chunk-yjkamwzv.js +121 -0
  509. package/dist/chunk-ymjz2by8.js +120 -0
  510. package/dist/chunk-yqtda7b6.js +105 -0
  511. package/dist/chunk-yqx2fkma.js +2362 -0
  512. package/dist/chunk-yzx3mhfd.js +110 -0
  513. package/dist/chunk-z1bs6d7k.js +24 -0
  514. package/dist/chunk-z2dp53wn.js +17 -0
  515. package/dist/chunk-z6e5jp2w.js +119 -0
  516. package/dist/chunk-z915v06p.js +148 -0
  517. package/dist/chunk-ze6zvkg6.js +22820 -0
  518. package/dist/chunk-zejm280k.js +39 -0
  519. package/dist/chunk-zeytvkxt.js +142 -0
  520. package/dist/chunk-zgjh33vv.js +276 -0
  521. package/dist/chunk-zgncjtyk.js +264 -0
  522. package/dist/chunk-zmgzhwae.js +4389 -0
  523. package/dist/chunk-ztf1hdpb.js +456 -0
  524. package/dist/chunk-zzm33q8x.js +8 -0
  525. package/dist/cli.js +139 -0
  526. package/dist/download-ripgrep.js +24821 -0
  527. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  528. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  529. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  530. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  531. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  532. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  533. package/package.json +177 -0
  534. package/scripts/download-ripgrep.ts +335 -0
  535. package/scripts/postinstall.cjs +319 -0
@@ -0,0 +1,2845 @@
1
+ // @bun
2
+ import {
3
+ init_mappers,
4
+ toInternalMessages
5
+ } from "./chunk-5c5xde65.js";
6
+ import {
7
+ ASK_USER_QUESTION_TOOL_NAME,
8
+ DreamTask,
9
+ EMPTY_LOOKUPS,
10
+ EXIT_PLAN_MODE_V2_TOOL_NAME,
11
+ InProcessTeammateTask,
12
+ LocalAgentTask,
13
+ LocalShellTask,
14
+ Message,
15
+ RemoteAgentTask,
16
+ Select,
17
+ UserPlanMessage,
18
+ extractTag,
19
+ findToolByName,
20
+ getEmptyToolPermissionContext,
21
+ getRainbowColor,
22
+ getRemoteTaskSessionUrl,
23
+ getTaskOutputPath,
24
+ getTools,
25
+ init_AppState,
26
+ init_DreamTask,
27
+ init_InProcessTeammateTask,
28
+ init_LocalAgentTask,
29
+ init_LocalShellTask,
30
+ init_Message,
31
+ init_RemoteAgentTask,
32
+ init_Task,
33
+ init_Tool,
34
+ init_UserPlanMessage,
35
+ init_collapseReadSearch,
36
+ init_constants2,
37
+ init_coordinatorMode,
38
+ init_diskOutput,
39
+ init_ink,
40
+ init_messages1 as init_messages,
41
+ init_overlayContext,
42
+ init_prompt8 as init_prompt,
43
+ init_select,
44
+ init_teleport,
45
+ init_thinking,
46
+ init_tools1 as init_tools,
47
+ init_types1 as init_types,
48
+ init_ultraplan,
49
+ init_useElapsedTime,
50
+ init_useSettings,
51
+ init_useShortcutDisplay,
52
+ init_useTerminalSize,
53
+ isBackgroundTask,
54
+ isCoordinatorMode,
55
+ isPanelAgentTask,
56
+ isTerminalTaskStatus,
57
+ normalizeMessages,
58
+ stopUltraplan,
59
+ summarizeRecentActivities,
60
+ teleportResumeCodeSession,
61
+ toInkColor,
62
+ useAppState,
63
+ useElapsedTime,
64
+ useRegisterOverlay,
65
+ useSetAppState,
66
+ useSettings,
67
+ useShortcutDisplay
68
+ } from "./chunk-97kwfkef.js";
69
+ import {
70
+ init_useKeybinding
71
+ } from "./chunk-3z9478wf.js";
72
+ import {
73
+ init_browser,
74
+ openBrowser
75
+ } from "./chunk-85em0j2s.js";
76
+ import {
77
+ TEAM_LEAD_NAME,
78
+ init_constants as init_constants3
79
+ } from "./chunk-4jm600zv.js";
80
+ import {
81
+ AGENT_TOOL_NAME,
82
+ DIAMOND_FILLED,
83
+ DIAMOND_OPEN,
84
+ LEGACY_AGENT_TOOL_NAME,
85
+ init_constants1 as init_constants,
86
+ init_figures as init_figures2,
87
+ init_stringUtils,
88
+ plural
89
+ } from "./chunk-qp1047f9.js";
90
+ import {
91
+ count,
92
+ init_array,
93
+ intersperse
94
+ } from "./chunk-1cwdhk7a.js";
95
+ import {
96
+ formatDuration,
97
+ formatFileSize,
98
+ formatNumber,
99
+ init_format,
100
+ truncate,
101
+ truncateToWidth
102
+ } from "./chunk-ztf1hdpb.js";
103
+ import {
104
+ Byline,
105
+ Dialog,
106
+ KeyboardShortcutHint,
107
+ Link,
108
+ ThemedBox_default,
109
+ ThemedText,
110
+ init_src,
111
+ useAnimationFrame,
112
+ useKeybindings,
113
+ useTerminalSize,
114
+ useTheme
115
+ } from "./chunk-fk80f449.js";
116
+ import {
117
+ require_jsx_dev_runtime,
118
+ require_react
119
+ } from "./chunk-g338npwr.js";
120
+ import {
121
+ init_analytics,
122
+ logEvent
123
+ } from "./chunk-f2mhrmww.js";
124
+ import {
125
+ figures_default,
126
+ init_figures
127
+ } from "./chunk-qajrkk97.js";
128
+ import {
129
+ init_fsOperations,
130
+ tailFile
131
+ } from "./chunk-ctya0ggm.js";
132
+ import {
133
+ errorMessage,
134
+ init_errors
135
+ } from "./chunk-z6e5jp2w.js";
136
+ import {
137
+ __esm,
138
+ __toESM
139
+ } from "./chunk-qp2qdcda.js";
140
+
141
+ // src/state/teammateViewHelpers.ts
142
+ function isLocalAgent(task) {
143
+ return typeof task === "object" && task !== null && "type" in task && task.type === "local_agent";
144
+ }
145
+ function release(task) {
146
+ return {
147
+ ...task,
148
+ retain: false,
149
+ messages: undefined,
150
+ diskLoaded: false,
151
+ evictAfter: isTerminalTaskStatus(task.status) ? Date.now() + PANEL_GRACE_MS : undefined
152
+ };
153
+ }
154
+ function enterTeammateView(taskId, setAppState) {
155
+ logEvent("tengu_transcript_view_enter", {});
156
+ setAppState((prev) => {
157
+ const task = prev.tasks[taskId];
158
+ const prevId = prev.viewingAgentTaskId;
159
+ const prevTask = prevId !== undefined ? prev.tasks[prevId] : undefined;
160
+ const switching = prevId !== undefined && prevId !== taskId && isLocalAgent(prevTask) && prevTask.retain;
161
+ const needsRetain = isLocalAgent(task) && (!task.retain || task.evictAfter !== undefined);
162
+ const needsView = prev.viewingAgentTaskId !== taskId || prev.viewSelectionMode !== "viewing-agent";
163
+ if (!needsRetain && !needsView && !switching)
164
+ return prev;
165
+ let tasks = prev.tasks;
166
+ if (switching || needsRetain) {
167
+ tasks = { ...prev.tasks };
168
+ if (switching)
169
+ tasks[prevId] = release(prevTask);
170
+ if (needsRetain) {
171
+ tasks[taskId] = { ...task, retain: true, evictAfter: undefined };
172
+ }
173
+ }
174
+ return {
175
+ ...prev,
176
+ viewingAgentTaskId: taskId,
177
+ viewSelectionMode: "viewing-agent",
178
+ tasks
179
+ };
180
+ });
181
+ }
182
+ function exitTeammateView(setAppState) {
183
+ logEvent("tengu_transcript_view_exit", {});
184
+ setAppState((prev) => {
185
+ const id = prev.viewingAgentTaskId;
186
+ const cleared = {
187
+ ...prev,
188
+ viewingAgentTaskId: undefined,
189
+ viewSelectionMode: "none"
190
+ };
191
+ if (id === undefined) {
192
+ return prev.viewSelectionMode === "none" ? prev : cleared;
193
+ }
194
+ const task = prev.tasks[id];
195
+ if (!isLocalAgent(task) || !task.retain)
196
+ return cleared;
197
+ return {
198
+ ...cleared,
199
+ tasks: { ...prev.tasks, [id]: release(task) }
200
+ };
201
+ });
202
+ }
203
+ function stopOrDismissAgent(taskId, setAppState) {
204
+ setAppState((prev) => {
205
+ const task = prev.tasks[taskId];
206
+ if (!isLocalAgent(task))
207
+ return prev;
208
+ if (task.status === "running") {
209
+ task.abortController?.abort();
210
+ return prev;
211
+ }
212
+ if (task.evictAfter === 0)
213
+ return prev;
214
+ const viewingThis = prev.viewingAgentTaskId === taskId;
215
+ return {
216
+ ...prev,
217
+ tasks: {
218
+ ...prev.tasks,
219
+ [taskId]: { ...release(task), evictAfter: 0 }
220
+ },
221
+ ...viewingThis && {
222
+ viewingAgentTaskId: undefined,
223
+ viewSelectionMode: "none"
224
+ }
225
+ };
226
+ });
227
+ }
228
+ var PANEL_GRACE_MS = 30000;
229
+ var init_teammateViewHelpers = __esm(() => {
230
+ init_analytics();
231
+ init_Task();
232
+ });
233
+
234
+ // src/components/tasks/renderToolActivity.tsx
235
+ function renderToolActivity(activity, tools, theme) {
236
+ const tool = findToolByName(tools, activity.toolName);
237
+ if (!tool) {
238
+ return activity.toolName;
239
+ }
240
+ try {
241
+ const parsed = tool.inputSchema.safeParse(activity.input);
242
+ const parsedInput = parsed.success ? parsed.data : {};
243
+ const userFacingName = tool.userFacingName(parsedInput);
244
+ if (!userFacingName) {
245
+ return activity.toolName;
246
+ }
247
+ const toolArgs = tool.renderToolUseMessage(parsedInput, {
248
+ theme,
249
+ verbose: false
250
+ });
251
+ if (toolArgs) {
252
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedText, {
253
+ children: [
254
+ userFacingName,
255
+ "(",
256
+ toolArgs,
257
+ ")"
258
+ ]
259
+ }, undefined, true, undefined, this);
260
+ }
261
+ return userFacingName;
262
+ } catch {
263
+ return activity.toolName;
264
+ }
265
+ }
266
+ var jsx_dev_runtime;
267
+ var init_renderToolActivity = __esm(() => {
268
+ init_src();
269
+ init_Tool();
270
+ jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
271
+ });
272
+
273
+ // src/components/tasks/taskStatusUtils.tsx
274
+ function isTerminalStatus(status) {
275
+ return status === "completed" || status === "failed" || status === "killed";
276
+ }
277
+ function getTaskStatusIcon(status, options) {
278
+ const { isIdle, awaitingApproval, hasError, shutdownRequested } = options ?? {};
279
+ if (hasError)
280
+ return figures_default.cross;
281
+ if (awaitingApproval)
282
+ return figures_default.questionMarkPrefix;
283
+ if (shutdownRequested)
284
+ return figures_default.warning;
285
+ if (status === "running") {
286
+ if (isIdle)
287
+ return figures_default.ellipsis;
288
+ return figures_default.play;
289
+ }
290
+ if (status === "completed")
291
+ return figures_default.tick;
292
+ if (status === "failed" || status === "killed")
293
+ return figures_default.cross;
294
+ return figures_default.bullet;
295
+ }
296
+ function getTaskStatusColor(status, options) {
297
+ const { isIdle, awaitingApproval, hasError, shutdownRequested } = options ?? {};
298
+ if (hasError)
299
+ return "error";
300
+ if (awaitingApproval)
301
+ return "warning";
302
+ if (shutdownRequested)
303
+ return "warning";
304
+ if (isIdle)
305
+ return "background";
306
+ if (status === "completed")
307
+ return "success";
308
+ if (status === "failed")
309
+ return "error";
310
+ if (status === "killed")
311
+ return "warning";
312
+ return "background";
313
+ }
314
+ function describeTeammateActivity(t) {
315
+ if (t.shutdownRequested)
316
+ return "stopping";
317
+ if (t.awaitingPlanApproval)
318
+ return "awaiting approval";
319
+ if (t.isIdle)
320
+ return "idle";
321
+ return (t.progress?.recentActivities && summarizeRecentActivities(t.progress.recentActivities)) ?? t.progress?.lastActivity?.activityDescription ?? "working";
322
+ }
323
+ function shouldHideTasksFooter(tasks, showSpinnerTree) {
324
+ if (!showSpinnerTree)
325
+ return false;
326
+ let hasVisibleTask = false;
327
+ for (const t of Object.values(tasks)) {
328
+ if (!isBackgroundTask(t) || process.env.USER_TYPE === "ant" && isPanelAgentTask(t)) {
329
+ continue;
330
+ }
331
+ hasVisibleTask = true;
332
+ if (t.type !== "in_process_teammate")
333
+ return false;
334
+ }
335
+ return hasVisibleTask;
336
+ }
337
+ var init_taskStatusUtils = __esm(() => {
338
+ init_figures();
339
+ init_LocalAgentTask();
340
+ init_types();
341
+ init_collapseReadSearch();
342
+ });
343
+
344
+ // src/components/tasks/AsyncAgentDetailDialog.tsx
345
+ function AsyncAgentDetailDialog({
346
+ agent,
347
+ onDone,
348
+ onKillAgent,
349
+ onBack
350
+ }) {
351
+ const [theme] = useTheme();
352
+ const tools = import_react.useMemo(() => getTools(getEmptyToolPermissionContext()), []);
353
+ const elapsedTime = useElapsedTime(agent.startTime, agent.status === "running", 1000, agent.totalPausedMs ?? 0);
354
+ useKeybindings({
355
+ "confirm:yes": onDone
356
+ }, { context: "Confirmation" });
357
+ const handleKeyDown = (e) => {
358
+ if (e.key === " ") {
359
+ e.preventDefault();
360
+ onDone();
361
+ } else if (e.key === "left" && onBack) {
362
+ e.preventDefault();
363
+ onBack();
364
+ } else if (e.key === "x" && agent.status === "running" && onKillAgent) {
365
+ e.preventDefault();
366
+ onKillAgent();
367
+ }
368
+ };
369
+ const planContent = extractTag(agent.prompt, "plan");
370
+ const displayPrompt = agent.prompt.length > 300 ? agent.prompt.substring(0, 297) + "\u2026" : agent.prompt;
371
+ const tokenCount = agent.result?.totalTokens ?? agent.progress?.tokenCount;
372
+ const toolUseCount = agent.result?.totalToolUseCount ?? agent.progress?.toolUseCount;
373
+ const title = /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
374
+ children: [
375
+ agent.selectedAgent?.agentType ?? "agent",
376
+ " \u203A",
377
+ " ",
378
+ agent.description || "Async agent"
379
+ ]
380
+ }, undefined, true, undefined, this);
381
+ const subtitle = /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
382
+ children: [
383
+ agent.status !== "running" && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
384
+ color: getTaskStatusColor(agent.status),
385
+ children: [
386
+ getTaskStatusIcon(agent.status),
387
+ " ",
388
+ agent.status === "completed" ? "Completed" : agent.status === "failed" ? "Failed" : "Stopped",
389
+ " \xB7 "
390
+ ]
391
+ }, undefined, true, undefined, this),
392
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
393
+ dimColor: true,
394
+ children: [
395
+ elapsedTime,
396
+ tokenCount !== undefined && tokenCount > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(jsx_dev_runtime2.Fragment, {
397
+ children: [
398
+ " \xB7 ",
399
+ formatNumber(tokenCount),
400
+ " tokens"
401
+ ]
402
+ }, undefined, true, undefined, this),
403
+ toolUseCount !== undefined && toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(jsx_dev_runtime2.Fragment, {
404
+ children: [
405
+ " ",
406
+ "\xB7 ",
407
+ toolUseCount,
408
+ " ",
409
+ toolUseCount === 1 ? "tool" : "tools"
410
+ ]
411
+ }, undefined, true, undefined, this)
412
+ ]
413
+ }, undefined, true, undefined, this)
414
+ ]
415
+ }, undefined, true, undefined, this);
416
+ return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
417
+ flexDirection: "column",
418
+ tabIndex: 0,
419
+ autoFocus: true,
420
+ onKeyDown: handleKeyDown,
421
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Dialog, {
422
+ title,
423
+ subtitle,
424
+ onCancel: onDone,
425
+ color: "background",
426
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
427
+ children: [
428
+ "Press ",
429
+ exitState.keyName,
430
+ " again to exit"
431
+ ]
432
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Byline, {
433
+ children: [
434
+ onBack && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
435
+ shortcut: "\u2190",
436
+ action: "go back"
437
+ }, undefined, false, undefined, this),
438
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
439
+ shortcut: "Esc/Enter/Space",
440
+ action: "close"
441
+ }, undefined, false, undefined, this),
442
+ agent.status === "running" && onKillAgent && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(KeyboardShortcutHint, {
443
+ shortcut: "x",
444
+ action: "stop"
445
+ }, undefined, false, undefined, this)
446
+ ]
447
+ }, undefined, true, undefined, this),
448
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
449
+ flexDirection: "column",
450
+ children: [
451
+ agent.status === "running" && agent.progress?.recentActivities && agent.progress.recentActivities.length > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
452
+ flexDirection: "column",
453
+ children: [
454
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
455
+ bold: true,
456
+ dimColor: true,
457
+ children: "Progress"
458
+ }, undefined, false, undefined, this),
459
+ agent.progress.recentActivities.map((activity, i) => /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
460
+ dimColor: i < agent.progress.recentActivities.length - 1,
461
+ wrap: "truncate-end",
462
+ children: [
463
+ i === agent.progress.recentActivities.length - 1 ? "\u203A " : " ",
464
+ renderToolActivity(activity, tools, theme)
465
+ ]
466
+ }, i, true, undefined, this))
467
+ ]
468
+ }, undefined, true, undefined, this),
469
+ planContent ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
470
+ marginTop: 1,
471
+ children: /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(UserPlanMessage, {
472
+ addMargin: false,
473
+ planContent
474
+ }, undefined, false, undefined, this)
475
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
476
+ flexDirection: "column",
477
+ marginTop: 1,
478
+ children: [
479
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
480
+ bold: true,
481
+ dimColor: true,
482
+ children: "Prompt"
483
+ }, undefined, false, undefined, this),
484
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
485
+ wrap: "wrap",
486
+ children: displayPrompt
487
+ }, undefined, false, undefined, this)
488
+ ]
489
+ }, undefined, true, undefined, this),
490
+ agent.status === "failed" && agent.error && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
491
+ flexDirection: "column",
492
+ marginTop: 1,
493
+ children: [
494
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
495
+ bold: true,
496
+ color: "error",
497
+ children: "Error"
498
+ }, undefined, false, undefined, this),
499
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
500
+ color: "error",
501
+ wrap: "wrap",
502
+ children: agent.error
503
+ }, undefined, false, undefined, this)
504
+ ]
505
+ }, undefined, true, undefined, this)
506
+ ]
507
+ }, undefined, true, undefined, this)
508
+ }, undefined, false, undefined, this)
509
+ }, undefined, false, undefined, this);
510
+ }
511
+ var import_react, jsx_dev_runtime2;
512
+ var init_AsyncAgentDetailDialog = __esm(() => {
513
+ init_useElapsedTime();
514
+ init_src();
515
+ init_useKeybinding();
516
+ init_Tool();
517
+ init_tools();
518
+ init_format();
519
+ init_messages();
520
+ init_src();
521
+ init_UserPlanMessage();
522
+ init_renderToolActivity();
523
+ init_taskStatusUtils();
524
+ import_react = __toESM(require_react(), 1);
525
+ jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
526
+ });
527
+
528
+ // src/components/tasks/RemoteSessionProgress.tsx
529
+ function formatReviewStageCounts(stage, found, verified, refuted) {
530
+ if (!stage)
531
+ return `${found} found \xB7 ${verified} verified`;
532
+ if (stage === "synthesizing") {
533
+ const parts = [`${verified} verified`];
534
+ if (refuted > 0)
535
+ parts.push(`${refuted} refuted`);
536
+ parts.push("deduping");
537
+ return parts.join(" \xB7 ");
538
+ }
539
+ if (stage === "verifying") {
540
+ const parts = [`${found} found`, `${verified} verified`];
541
+ if (refuted > 0)
542
+ parts.push(`${refuted} refuted`);
543
+ return parts.join(" \xB7 ");
544
+ }
545
+ return found > 0 ? `${found} found` : "finding";
546
+ }
547
+ function RainbowText({
548
+ text,
549
+ phase = 0
550
+ }) {
551
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
552
+ children: [...text].map((ch, i) => /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
553
+ color: getRainbowColor(i + phase),
554
+ children: ch
555
+ }, i, false, undefined, this))
556
+ }, undefined, false, undefined, this);
557
+ }
558
+ function useSmoothCount(target, time, snap) {
559
+ const displayed = import_react2.useRef(target);
560
+ const lastTick = import_react2.useRef(time);
561
+ if (snap || target < displayed.current) {
562
+ displayed.current = target;
563
+ } else if (target > displayed.current && time !== lastTick.current) {
564
+ displayed.current += 1;
565
+ lastTick.current = time;
566
+ }
567
+ return displayed.current;
568
+ }
569
+ function ReviewRainbowLine({
570
+ session
571
+ }) {
572
+ const settings = useSettings();
573
+ const reducedMotion = settings.prefersReducedMotion ?? false;
574
+ const p = session.reviewProgress;
575
+ const running = session.status === "running";
576
+ const [, time] = useAnimationFrame(running && !reducedMotion ? TICK_MS : null);
577
+ const targetFound = p?.bugsFound ?? 0;
578
+ const targetVerified = p?.bugsVerified ?? 0;
579
+ const targetRefuted = p?.bugsRefuted ?? 0;
580
+ const snap = reducedMotion || !running;
581
+ const found = useSmoothCount(targetFound, time, snap);
582
+ const verified = useSmoothCount(targetVerified, time, snap);
583
+ const refuted = useSmoothCount(targetRefuted, time, snap);
584
+ const phase = Math.floor(time / (TICK_MS * 3)) % 7;
585
+ if (session.status === "completed") {
586
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
587
+ children: [
588
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
589
+ color: "background",
590
+ children: [
591
+ DIAMOND_FILLED,
592
+ " "
593
+ ]
594
+ }, undefined, true, undefined, this),
595
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
596
+ text: "ultrareview",
597
+ phase: 0
598
+ }, undefined, false, undefined, this),
599
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
600
+ dimColor: true,
601
+ children: " ready \xB7 shift+\u2193 to view"
602
+ }, undefined, false, undefined, this)
603
+ ]
604
+ }, undefined, true, undefined, this);
605
+ }
606
+ if (session.status === "failed") {
607
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
608
+ children: [
609
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
610
+ color: "background",
611
+ children: [
612
+ DIAMOND_FILLED,
613
+ " "
614
+ ]
615
+ }, undefined, true, undefined, this),
616
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
617
+ text: "ultrareview",
618
+ phase: 0
619
+ }, undefined, false, undefined, this),
620
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
621
+ color: "error",
622
+ dimColor: true,
623
+ children: [
624
+ " \xB7 ",
625
+ "error"
626
+ ]
627
+ }, undefined, true, undefined, this)
628
+ ]
629
+ }, undefined, true, undefined, this);
630
+ }
631
+ const tail = !p ? "setting up" : formatReviewStageCounts(p.stage, found, verified, refuted);
632
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(jsx_dev_runtime3.Fragment, {
633
+ children: [
634
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
635
+ color: "background",
636
+ children: [
637
+ DIAMOND_OPEN,
638
+ " "
639
+ ]
640
+ }, undefined, true, undefined, this),
641
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(RainbowText, {
642
+ text: "ultrareview",
643
+ phase: running ? phase : 0
644
+ }, undefined, false, undefined, this),
645
+ /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
646
+ dimColor: true,
647
+ children: [
648
+ " \xB7 ",
649
+ tail
650
+ ]
651
+ }, undefined, true, undefined, this)
652
+ ]
653
+ }, undefined, true, undefined, this);
654
+ }
655
+ function RemoteSessionProgress({
656
+ session
657
+ }) {
658
+ if (session.isRemoteReview) {
659
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ReviewRainbowLine, {
660
+ session
661
+ }, undefined, false, undefined, this);
662
+ }
663
+ if (session.status === "completed") {
664
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
665
+ bold: true,
666
+ color: "success",
667
+ dimColor: true,
668
+ children: "done"
669
+ }, undefined, false, undefined, this);
670
+ }
671
+ if (session.status === "failed") {
672
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
673
+ bold: true,
674
+ color: "error",
675
+ dimColor: true,
676
+ children: "error"
677
+ }, undefined, false, undefined, this);
678
+ }
679
+ if (!session.todoList.length) {
680
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
681
+ dimColor: true,
682
+ children: [
683
+ session.status,
684
+ "\u2026"
685
+ ]
686
+ }, undefined, true, undefined, this);
687
+ }
688
+ const completed = count(session.todoList, (_) => _.status === "completed");
689
+ const total = session.todoList.length;
690
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedText, {
691
+ dimColor: true,
692
+ children: [
693
+ completed,
694
+ "/",
695
+ total
696
+ ]
697
+ }, undefined, true, undefined, this);
698
+ }
699
+ var import_react2, jsx_dev_runtime3, TICK_MS = 80;
700
+ var init_RemoteSessionProgress = __esm(() => {
701
+ init_figures2();
702
+ init_useSettings();
703
+ init_src();
704
+ init_array();
705
+ init_thinking();
706
+ import_react2 = __toESM(require_react(), 1);
707
+ jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
708
+ });
709
+
710
+ // src/components/tasks/ShellProgress.tsx
711
+ function TaskStatusText({
712
+ status,
713
+ label,
714
+ suffix
715
+ }) {
716
+ const displayLabel = label ?? status;
717
+ const color = status === "completed" ? "success" : status === "failed" ? "error" : status === "killed" ? "warning" : undefined;
718
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
719
+ color,
720
+ dimColor: true,
721
+ children: [
722
+ "(",
723
+ displayLabel,
724
+ suffix,
725
+ ")"
726
+ ]
727
+ }, undefined, true, undefined, this);
728
+ }
729
+ function ShellProgress({
730
+ shell
731
+ }) {
732
+ switch (shell.status) {
733
+ case "completed":
734
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
735
+ status: "completed",
736
+ label: "done"
737
+ }, undefined, false, undefined, this);
738
+ case "failed":
739
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
740
+ status: "failed",
741
+ label: "error"
742
+ }, undefined, false, undefined, this);
743
+ case "killed":
744
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
745
+ status: "killed",
746
+ label: "stopped"
747
+ }, undefined, false, undefined, this);
748
+ case "running":
749
+ case "pending":
750
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TaskStatusText, {
751
+ status: "running"
752
+ }, undefined, false, undefined, this);
753
+ }
754
+ }
755
+ var jsx_dev_runtime4;
756
+ var init_ShellProgress = __esm(() => {
757
+ init_src();
758
+ jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
759
+ });
760
+
761
+ // src/components/tasks/BackgroundTask.tsx
762
+ function BackgroundTask({
763
+ task,
764
+ maxActivityWidth
765
+ }) {
766
+ const activityLimit = maxActivityWidth ?? 40;
767
+ switch (task.type) {
768
+ case "local_bash":
769
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
770
+ children: [
771
+ truncate(task.kind === "monitor" ? task.description : task.command, activityLimit, true),
772
+ " ",
773
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ShellProgress, {
774
+ shell: task
775
+ }, undefined, false, undefined, this)
776
+ ]
777
+ }, undefined, true, undefined, this);
778
+ case "remote_agent": {
779
+ if (task.isRemoteReview) {
780
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
781
+ children: /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(RemoteSessionProgress, {
782
+ session: task
783
+ }, undefined, false, undefined, this)
784
+ }, undefined, false, undefined, this);
785
+ }
786
+ const running = task.status === "running" || task.status === "pending";
787
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
788
+ children: [
789
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
790
+ dimColor: true,
791
+ children: [
792
+ running ? DIAMOND_OPEN : DIAMOND_FILLED,
793
+ " "
794
+ ]
795
+ }, undefined, true, undefined, this),
796
+ truncate(task.title, activityLimit, true),
797
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
798
+ dimColor: true,
799
+ children: " \xB7 "
800
+ }, undefined, false, undefined, this),
801
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(RemoteSessionProgress, {
802
+ session: task
803
+ }, undefined, false, undefined, this)
804
+ ]
805
+ }, undefined, true, undefined, this);
806
+ }
807
+ case "local_agent":
808
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
809
+ children: [
810
+ truncate(task.description, activityLimit, true),
811
+ " ",
812
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
813
+ status: task.status,
814
+ label: task.status === "completed" ? "done" : undefined,
815
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
816
+ }, undefined, false, undefined, this)
817
+ ]
818
+ }, undefined, true, undefined, this);
819
+ case "in_process_teammate": {
820
+ const activity = describeTeammateActivity(task);
821
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
822
+ children: [
823
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
824
+ color: toInkColor(task.identity.color),
825
+ children: [
826
+ "@",
827
+ task.identity.agentName
828
+ ]
829
+ }, undefined, true, undefined, this),
830
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
831
+ dimColor: true,
832
+ children: [
833
+ ": ",
834
+ truncate(activity, activityLimit, true)
835
+ ]
836
+ }, undefined, true, undefined, this)
837
+ ]
838
+ }, undefined, true, undefined, this);
839
+ }
840
+ case "local_workflow": {
841
+ const _task = task;
842
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
843
+ children: [
844
+ truncate(_task.workflowName ?? task.summary ?? task.description, activityLimit, true),
845
+ " ",
846
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
847
+ status: task.status,
848
+ label: task.status === "running" ? `${_task.agentCount} ${plural(_task.agentCount, "agent")}` : task.status === "completed" ? "done" : undefined,
849
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
850
+ }, undefined, false, undefined, this)
851
+ ]
852
+ }, undefined, true, undefined, this);
853
+ }
854
+ case "monitor_mcp":
855
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
856
+ children: [
857
+ truncate(task.description, activityLimit, true),
858
+ " ",
859
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
860
+ status: task.status,
861
+ label: task.status === "completed" ? "done" : undefined,
862
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
863
+ }, undefined, false, undefined, this)
864
+ ]
865
+ }, undefined, true, undefined, this);
866
+ case "dream": {
867
+ const n = task.filesTouched.length;
868
+ const detail = task.phase === "updating" && n > 0 ? `${n} ${plural(n, "file")}` : `${task.sessionsReviewing} ${plural(task.sessionsReviewing, "session")}`;
869
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
870
+ children: [
871
+ task.description,
872
+ " ",
873
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(ThemedText, {
874
+ dimColor: true,
875
+ children: [
876
+ "\xB7 ",
877
+ task.phase,
878
+ " \xB7 ",
879
+ detail
880
+ ]
881
+ }, undefined, true, undefined, this),
882
+ " ",
883
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TaskStatusText, {
884
+ status: task.status,
885
+ label: task.status === "completed" ? "done" : undefined,
886
+ suffix: task.status === "completed" && !task.notified ? ", unread" : undefined
887
+ }, undefined, false, undefined, this)
888
+ ]
889
+ }, undefined, true, undefined, this);
890
+ }
891
+ }
892
+ }
893
+ var jsx_dev_runtime5;
894
+ var init_BackgroundTask = __esm(() => {
895
+ init_src();
896
+ init_ink();
897
+ init_format();
898
+ init_stringUtils();
899
+ init_figures2();
900
+ init_RemoteSessionProgress();
901
+ init_ShellProgress();
902
+ init_taskStatusUtils();
903
+ jsx_dev_runtime5 = __toESM(require_jsx_dev_runtime(), 1);
904
+ });
905
+
906
+ // src/components/tasks/DreamDetailDialog.tsx
907
+ function DreamDetailDialog({
908
+ task,
909
+ onDone,
910
+ onBack,
911
+ onKill
912
+ }) {
913
+ const elapsedTime = useElapsedTime(task.startTime, task.status === "running", 1000, 0);
914
+ useKeybindings({ "confirm:yes": onDone }, { context: "Confirmation" });
915
+ const handleKeyDown = (e) => {
916
+ if (e.key === " ") {
917
+ e.preventDefault();
918
+ onDone();
919
+ } else if (e.key === "left" && onBack) {
920
+ e.preventDefault();
921
+ onBack();
922
+ } else if (e.key === "x" && task.status === "running" && onKill) {
923
+ e.preventDefault();
924
+ onKill();
925
+ }
926
+ };
927
+ const visibleTurns = task.turns.filter((t) => t.text !== "");
928
+ const shown = visibleTurns.slice(-VISIBLE_TURNS);
929
+ const hidden = visibleTurns.length - shown.length;
930
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
931
+ flexDirection: "column",
932
+ tabIndex: 0,
933
+ autoFocus: true,
934
+ onKeyDown: handleKeyDown,
935
+ children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Dialog, {
936
+ title: "Memory consolidation",
937
+ subtitle: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
938
+ dimColor: true,
939
+ children: [
940
+ elapsedTime,
941
+ " \xB7 reviewing ",
942
+ task.sessionsReviewing,
943
+ " ",
944
+ plural(task.sessionsReviewing, "session"),
945
+ task.filesTouched.length > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(jsx_dev_runtime6.Fragment, {
946
+ children: [
947
+ " ",
948
+ "\xB7 ",
949
+ task.filesTouched.length,
950
+ " ",
951
+ plural(task.filesTouched.length, "file"),
952
+ " touched"
953
+ ]
954
+ }, undefined, true, undefined, this)
955
+ ]
956
+ }, undefined, true, undefined, this),
957
+ onCancel: onDone,
958
+ color: "background",
959
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
960
+ children: [
961
+ "Press ",
962
+ exitState.keyName,
963
+ " again to exit"
964
+ ]
965
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Byline, {
966
+ children: [
967
+ onBack && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
968
+ shortcut: "\u2190",
969
+ action: "go back"
970
+ }, undefined, false, undefined, this),
971
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
972
+ shortcut: "Esc/Enter/Space",
973
+ action: "close"
974
+ }, undefined, false, undefined, this),
975
+ task.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(KeyboardShortcutHint, {
976
+ shortcut: "x",
977
+ action: "stop"
978
+ }, undefined, false, undefined, this)
979
+ ]
980
+ }, undefined, true, undefined, this),
981
+ children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
982
+ flexDirection: "column",
983
+ gap: 1,
984
+ children: [
985
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
986
+ children: [
987
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
988
+ bold: true,
989
+ children: "Status:"
990
+ }, undefined, false, undefined, this),
991
+ " ",
992
+ task.status === "running" ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
993
+ color: "background",
994
+ children: "running"
995
+ }, undefined, false, undefined, this) : task.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
996
+ color: "success",
997
+ children: task.status
998
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
999
+ color: "error",
1000
+ children: task.status
1001
+ }, undefined, false, undefined, this)
1002
+ ]
1003
+ }, undefined, true, undefined, this),
1004
+ shown.length === 0 ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1005
+ dimColor: true,
1006
+ children: task.status === "running" ? "Starting\u2026" : "(no text output)"
1007
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(jsx_dev_runtime6.Fragment, {
1008
+ children: [
1009
+ hidden > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1010
+ dimColor: true,
1011
+ children: [
1012
+ "(",
1013
+ hidden,
1014
+ " earlier ",
1015
+ plural(hidden, "turn"),
1016
+ ")"
1017
+ ]
1018
+ }, undefined, true, undefined, this),
1019
+ shown.map((turn, i) => /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedBox_default, {
1020
+ flexDirection: "column",
1021
+ children: [
1022
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1023
+ wrap: "wrap",
1024
+ children: turn.text
1025
+ }, undefined, false, undefined, this),
1026
+ turn.toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ThemedText, {
1027
+ dimColor: true,
1028
+ children: [
1029
+ " ",
1030
+ "(",
1031
+ turn.toolUseCount,
1032
+ " ",
1033
+ plural(turn.toolUseCount, "tool"),
1034
+ ")"
1035
+ ]
1036
+ }, undefined, true, undefined, this)
1037
+ ]
1038
+ }, i, true, undefined, this))
1039
+ ]
1040
+ }, undefined, true, undefined, this)
1041
+ ]
1042
+ }, undefined, true, undefined, this)
1043
+ }, undefined, false, undefined, this)
1044
+ }, undefined, false, undefined, this);
1045
+ }
1046
+ var jsx_dev_runtime6, VISIBLE_TURNS = 6;
1047
+ var init_DreamDetailDialog = __esm(() => {
1048
+ init_useElapsedTime();
1049
+ init_src();
1050
+ init_useKeybinding();
1051
+ init_stringUtils();
1052
+ init_src();
1053
+ jsx_dev_runtime6 = __toESM(require_jsx_dev_runtime(), 1);
1054
+ });
1055
+
1056
+ // src/components/tasks/InProcessTeammateDetailDialog.tsx
1057
+ function InProcessTeammateDetailDialog({
1058
+ teammate,
1059
+ onDone,
1060
+ onKill,
1061
+ onBack,
1062
+ onForeground
1063
+ }) {
1064
+ const [theme] = useTheme();
1065
+ const tools = import_react3.useMemo(() => getTools(getEmptyToolPermissionContext()), []);
1066
+ const elapsedTime = useElapsedTime(teammate.startTime, teammate.status === "running", 1000, teammate.totalPausedMs ?? 0);
1067
+ useKeybindings({
1068
+ "confirm:yes": onDone
1069
+ }, { context: "Confirmation" });
1070
+ const handleKeyDown = (e) => {
1071
+ if (e.key === " ") {
1072
+ e.preventDefault();
1073
+ onDone();
1074
+ } else if (e.key === "left" && onBack) {
1075
+ e.preventDefault();
1076
+ onBack();
1077
+ } else if (e.key === "x" && teammate.status === "running" && onKill) {
1078
+ e.preventDefault();
1079
+ onKill();
1080
+ } else if (e.key === "f" && teammate.status === "running" && onForeground) {
1081
+ e.preventDefault();
1082
+ onForeground();
1083
+ }
1084
+ };
1085
+ const activity = describeTeammateActivity(teammate);
1086
+ const tokenCount = teammate.result?.totalTokens ?? teammate.progress?.tokenCount;
1087
+ const toolUseCount = teammate.result?.totalToolUseCount ?? teammate.progress?.toolUseCount;
1088
+ const displayPrompt = truncateToWidth(teammate.prompt, 300);
1089
+ const title = /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1090
+ children: [
1091
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1092
+ color: toInkColor(teammate.identity.color),
1093
+ children: [
1094
+ "@",
1095
+ teammate.identity.agentName
1096
+ ]
1097
+ }, undefined, true, undefined, this),
1098
+ activity && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1099
+ dimColor: true,
1100
+ children: [
1101
+ " (",
1102
+ activity,
1103
+ ")"
1104
+ ]
1105
+ }, undefined, true, undefined, this)
1106
+ ]
1107
+ }, undefined, true, undefined, this);
1108
+ const subtitle = /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1109
+ children: [
1110
+ teammate.status !== "running" && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1111
+ color: teammate.status === "completed" ? "success" : teammate.status === "killed" ? "warning" : "error",
1112
+ children: [
1113
+ teammate.status === "completed" ? "Completed" : teammate.status === "failed" ? "Failed" : "Stopped",
1114
+ " \xB7 "
1115
+ ]
1116
+ }, undefined, true, undefined, this),
1117
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1118
+ dimColor: true,
1119
+ children: [
1120
+ elapsedTime,
1121
+ tokenCount !== undefined && tokenCount > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(jsx_dev_runtime7.Fragment, {
1122
+ children: [
1123
+ " \xB7 ",
1124
+ formatNumber(tokenCount),
1125
+ " tokens"
1126
+ ]
1127
+ }, undefined, true, undefined, this),
1128
+ toolUseCount !== undefined && toolUseCount > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(jsx_dev_runtime7.Fragment, {
1129
+ children: [
1130
+ " ",
1131
+ "\xB7 ",
1132
+ toolUseCount,
1133
+ " ",
1134
+ toolUseCount === 1 ? "tool" : "tools"
1135
+ ]
1136
+ }, undefined, true, undefined, this)
1137
+ ]
1138
+ }, undefined, true, undefined, this)
1139
+ ]
1140
+ }, undefined, true, undefined, this);
1141
+ return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1142
+ flexDirection: "column",
1143
+ tabIndex: 0,
1144
+ autoFocus: true,
1145
+ onKeyDown: handleKeyDown,
1146
+ children: /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Dialog, {
1147
+ title,
1148
+ subtitle,
1149
+ onCancel: onDone,
1150
+ color: "background",
1151
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1152
+ children: [
1153
+ "Press ",
1154
+ exitState.keyName,
1155
+ " again to exit"
1156
+ ]
1157
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Byline, {
1158
+ children: [
1159
+ onBack && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1160
+ shortcut: "\u2190",
1161
+ action: "go back"
1162
+ }, undefined, false, undefined, this),
1163
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1164
+ shortcut: "Esc/Enter/Space",
1165
+ action: "close"
1166
+ }, undefined, false, undefined, this),
1167
+ teammate.status === "running" && onKill && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1168
+ shortcut: "x",
1169
+ action: "stop"
1170
+ }, undefined, false, undefined, this),
1171
+ teammate.status === "running" && onForeground && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(KeyboardShortcutHint, {
1172
+ shortcut: "f",
1173
+ action: "foreground"
1174
+ }, undefined, false, undefined, this)
1175
+ ]
1176
+ }, undefined, true, undefined, this),
1177
+ children: [
1178
+ teammate.status === "running" && teammate.progress?.recentActivities && teammate.progress.recentActivities.length > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1179
+ flexDirection: "column",
1180
+ children: [
1181
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1182
+ bold: true,
1183
+ dimColor: true,
1184
+ children: "Progress"
1185
+ }, undefined, false, undefined, this),
1186
+ teammate.progress.recentActivities.map((activity2, i) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1187
+ dimColor: i < teammate.progress.recentActivities.length - 1,
1188
+ wrap: "truncate-end",
1189
+ children: [
1190
+ i === teammate.progress.recentActivities.length - 1 ? "\u203A " : " ",
1191
+ renderToolActivity(activity2, tools, theme)
1192
+ ]
1193
+ }, i, true, undefined, this))
1194
+ ]
1195
+ }, undefined, true, undefined, this),
1196
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1197
+ flexDirection: "column",
1198
+ marginTop: 1,
1199
+ children: [
1200
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1201
+ bold: true,
1202
+ dimColor: true,
1203
+ children: "Prompt"
1204
+ }, undefined, false, undefined, this),
1205
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1206
+ wrap: "wrap",
1207
+ children: displayPrompt
1208
+ }, undefined, false, undefined, this)
1209
+ ]
1210
+ }, undefined, true, undefined, this),
1211
+ teammate.status === "failed" && teammate.error && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedBox_default, {
1212
+ flexDirection: "column",
1213
+ marginTop: 1,
1214
+ children: [
1215
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1216
+ bold: true,
1217
+ color: "error",
1218
+ children: "Error"
1219
+ }, undefined, false, undefined, this),
1220
+ /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ThemedText, {
1221
+ color: "error",
1222
+ wrap: "wrap",
1223
+ children: teammate.error
1224
+ }, undefined, false, undefined, this)
1225
+ ]
1226
+ }, undefined, true, undefined, this)
1227
+ ]
1228
+ }, undefined, true, undefined, this)
1229
+ }, undefined, false, undefined, this);
1230
+ }
1231
+ var import_react3, jsx_dev_runtime7;
1232
+ var init_InProcessTeammateDetailDialog = __esm(() => {
1233
+ init_useElapsedTime();
1234
+ init_src();
1235
+ init_useKeybinding();
1236
+ init_Tool();
1237
+ init_tools();
1238
+ init_format();
1239
+ init_src();
1240
+ init_ink();
1241
+ init_renderToolActivity();
1242
+ init_taskStatusUtils();
1243
+ import_react3 = __toESM(require_react(), 1);
1244
+ jsx_dev_runtime7 = __toESM(require_jsx_dev_runtime(), 1);
1245
+ });
1246
+
1247
+ // src/components/tasks/RemoteSessionDetailDialog.tsx
1248
+ function formatToolUseSummary(name, input) {
1249
+ if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
1250
+ return "Review the plan in CoStrict on the web";
1251
+ }
1252
+ if (!input || typeof input !== "object")
1253
+ return name;
1254
+ if (name === ASK_USER_QUESTION_TOOL_NAME && "questions" in input) {
1255
+ const qs = input.questions;
1256
+ if (Array.isArray(qs) && qs[0] && typeof qs[0] === "object") {
1257
+ 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;
1258
+ if (q) {
1259
+ const oneLine = q.replace(/\s+/g, " ").trim();
1260
+ return `Answer in browser: ${truncateToWidth(oneLine, 50)}`;
1261
+ }
1262
+ }
1263
+ }
1264
+ for (const v of Object.values(input)) {
1265
+ if (typeof v === "string" && v.trim()) {
1266
+ const oneLine = v.replace(/\s+/g, " ").trim();
1267
+ return `${name} ${truncateToWidth(oneLine, 60)}`;
1268
+ }
1269
+ }
1270
+ return name;
1271
+ }
1272
+ function UltraplanSessionDetail({
1273
+ session,
1274
+ onDone,
1275
+ onBack,
1276
+ onKill
1277
+ }) {
1278
+ const running = session.status === "running" || session.status === "pending";
1279
+ const phase = session.ultraplanPhase;
1280
+ const statusText = running ? phase ? PHASE_LABEL[phase] : "running" : session.status;
1281
+ const elapsedTime = useElapsedTime(session.startTime, running, 1000, 0, session.endTime);
1282
+ const { agentsWorking, toolCalls, lastToolCall } = import_react4.useMemo(() => {
1283
+ let spawns = 0;
1284
+ let calls = 0;
1285
+ let lastBlock = null;
1286
+ for (const msg of session.log) {
1287
+ if (msg.type !== "assistant")
1288
+ continue;
1289
+ const content = msg.message?.content ?? [];
1290
+ for (const block of content) {
1291
+ if (block.type !== "tool_use")
1292
+ continue;
1293
+ calls++;
1294
+ lastBlock = block;
1295
+ if (block.name === AGENT_TOOL_NAME || block.name === LEGACY_AGENT_TOOL_NAME) {
1296
+ spawns++;
1297
+ }
1298
+ }
1299
+ }
1300
+ return {
1301
+ agentsWorking: 1 + spawns,
1302
+ toolCalls: calls,
1303
+ lastToolCall: lastBlock ? formatToolUseSummary(lastBlock.name, lastBlock.input) : null
1304
+ };
1305
+ }, [session.log]);
1306
+ const sessionUrl = getRemoteTaskSessionUrl(session.sessionId);
1307
+ const goBackOrClose = onBack ?? (() => onDone("Remote session details dismissed", { display: "system" }));
1308
+ const [confirmingStop, setConfirmingStop] = import_react4.useState(false);
1309
+ if (confirmingStop) {
1310
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1311
+ title: "Stop ultraplan?",
1312
+ onCancel: () => setConfirmingStop(false),
1313
+ color: "background",
1314
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1315
+ flexDirection: "column",
1316
+ gap: 1,
1317
+ children: [
1318
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1319
+ dimColor: true,
1320
+ children: "This will terminate the CoStrict on the web session."
1321
+ }, undefined, false, undefined, this),
1322
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1323
+ options: [
1324
+ { label: "Terminate session", value: "stop" },
1325
+ { label: "Back", value: "back" }
1326
+ ],
1327
+ onChange: (v) => {
1328
+ if (v === "stop") {
1329
+ onKill?.();
1330
+ goBackOrClose();
1331
+ } else {
1332
+ setConfirmingStop(false);
1333
+ }
1334
+ }
1335
+ }, undefined, false, undefined, this)
1336
+ ]
1337
+ }, undefined, true, undefined, this)
1338
+ }, undefined, false, undefined, this);
1339
+ }
1340
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1341
+ title: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1342
+ children: [
1343
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1344
+ color: "background",
1345
+ children: [
1346
+ phase === "plan_ready" ? DIAMOND_FILLED : DIAMOND_OPEN,
1347
+ " "
1348
+ ]
1349
+ }, undefined, true, undefined, this),
1350
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1351
+ bold: true,
1352
+ children: "ultraplan"
1353
+ }, undefined, false, undefined, this),
1354
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1355
+ dimColor: true,
1356
+ children: [
1357
+ " \xB7 ",
1358
+ elapsedTime,
1359
+ " \xB7 ",
1360
+ statusText
1361
+ ]
1362
+ }, undefined, true, undefined, this)
1363
+ ]
1364
+ }, undefined, true, undefined, this),
1365
+ onCancel: goBackOrClose,
1366
+ color: "background",
1367
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1368
+ flexDirection: "column",
1369
+ gap: 1,
1370
+ children: [
1371
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1372
+ children: [
1373
+ phase === "plan_ready" && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1374
+ color: "success",
1375
+ children: [
1376
+ figures_default.tick,
1377
+ " "
1378
+ ]
1379
+ }, undefined, true, undefined, this),
1380
+ agentsWorking,
1381
+ " ",
1382
+ plural(agentsWorking, "agent"),
1383
+ " ",
1384
+ phase ? AGENT_VERB[phase] : "working",
1385
+ " \xB7 ",
1386
+ toolCalls,
1387
+ " tool",
1388
+ " ",
1389
+ plural(toolCalls, "call")
1390
+ ]
1391
+ }, undefined, true, undefined, this),
1392
+ lastToolCall && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1393
+ dimColor: true,
1394
+ children: lastToolCall
1395
+ }, undefined, false, undefined, this),
1396
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1397
+ url: sessionUrl,
1398
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1399
+ dimColor: true,
1400
+ children: sessionUrl
1401
+ }, undefined, false, undefined, this)
1402
+ }, undefined, false, undefined, this),
1403
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1404
+ options: [
1405
+ {
1406
+ label: "Review in CoStrict on the web",
1407
+ value: "open"
1408
+ },
1409
+ ...onKill && running ? [{ label: "Stop ultraplan", value: "stop" }] : [],
1410
+ { label: "Back", value: "back" }
1411
+ ],
1412
+ onChange: (v) => {
1413
+ switch (v) {
1414
+ case "open":
1415
+ openBrowser(sessionUrl);
1416
+ onDone();
1417
+ return;
1418
+ case "stop":
1419
+ setConfirmingStop(true);
1420
+ return;
1421
+ case "back":
1422
+ goBackOrClose();
1423
+ return;
1424
+ }
1425
+ }
1426
+ }, undefined, false, undefined, this)
1427
+ ]
1428
+ }, undefined, true, undefined, this)
1429
+ }, undefined, false, undefined, this);
1430
+ }
1431
+ function StagePipeline({
1432
+ stage,
1433
+ completed,
1434
+ hasProgress
1435
+ }) {
1436
+ const currentIdx = stage ? STAGES.indexOf(stage) : -1;
1437
+ const inSetup = !completed && !hasProgress;
1438
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1439
+ children: [
1440
+ inSetup ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1441
+ color: "background",
1442
+ children: "Setup"
1443
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1444
+ dimColor: true,
1445
+ children: "Setup"
1446
+ }, undefined, false, undefined, this),
1447
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1448
+ dimColor: true,
1449
+ children: " \u2192 "
1450
+ }, undefined, false, undefined, this),
1451
+ STAGES.map((s, i) => {
1452
+ const isCurrent = !completed && !inSetup && i === currentIdx;
1453
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(import_react4.default.Fragment, {
1454
+ children: [
1455
+ i > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1456
+ dimColor: true,
1457
+ children: " \u2192 "
1458
+ }, undefined, false, undefined, this),
1459
+ isCurrent ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1460
+ color: "background",
1461
+ children: STAGE_LABELS[s]
1462
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1463
+ dimColor: true,
1464
+ children: STAGE_LABELS[s]
1465
+ }, undefined, false, undefined, this)
1466
+ ]
1467
+ }, s, true, undefined, this);
1468
+ }),
1469
+ completed && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1470
+ color: "success",
1471
+ children: " \u2713"
1472
+ }, undefined, false, undefined, this)
1473
+ ]
1474
+ }, undefined, true, undefined, this);
1475
+ }
1476
+ function reviewCountsLine(session) {
1477
+ const p = session.reviewProgress;
1478
+ if (!p)
1479
+ return session.status === "completed" ? "done" : "setting up";
1480
+ const verified = p.bugsVerified;
1481
+ const refuted = p.bugsRefuted ?? 0;
1482
+ if (session.status === "completed") {
1483
+ const parts = [`${verified} ${plural(verified, "finding")}`];
1484
+ if (refuted > 0)
1485
+ parts.push(`${refuted} refuted`);
1486
+ return parts.join(" \xB7 ");
1487
+ }
1488
+ return formatReviewStageCounts(p.stage, p.bugsFound, verified, refuted);
1489
+ }
1490
+ function ReviewSessionDetail({
1491
+ session,
1492
+ onDone,
1493
+ onBack,
1494
+ onKill
1495
+ }) {
1496
+ const completed = session.status === "completed";
1497
+ const running = session.status === "running" || session.status === "pending";
1498
+ const [confirmingStop, setConfirmingStop] = import_react4.useState(false);
1499
+ const elapsedTime = useElapsedTime(session.startTime, running, 1000, 0, session.endTime);
1500
+ const handleClose = () => onDone("Remote session details dismissed", { display: "system" });
1501
+ const goBackOrClose = onBack ?? handleClose;
1502
+ const sessionUrl = getRemoteTaskSessionUrl(session.sessionId);
1503
+ const statusLabel = completed ? "ready" : running ? "running" : session.status;
1504
+ if (confirmingStop) {
1505
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1506
+ title: "Stop ultrareview?",
1507
+ onCancel: () => setConfirmingStop(false),
1508
+ color: "background",
1509
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1510
+ flexDirection: "column",
1511
+ gap: 1,
1512
+ children: [
1513
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1514
+ dimColor: true,
1515
+ children: "This archives the remote session and stops local tracking. The review will not complete and any findings so far are discarded."
1516
+ }, undefined, false, undefined, this),
1517
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1518
+ options: [
1519
+ { label: "Stop ultrareview", value: "stop" },
1520
+ { label: "Back", value: "back" }
1521
+ ],
1522
+ onChange: (v) => {
1523
+ if (v === "stop") {
1524
+ onKill?.();
1525
+ goBackOrClose();
1526
+ } else {
1527
+ setConfirmingStop(false);
1528
+ }
1529
+ }
1530
+ }, undefined, false, undefined, this)
1531
+ ]
1532
+ }, undefined, true, undefined, this)
1533
+ }, undefined, false, undefined, this);
1534
+ }
1535
+ const options = completed ? [
1536
+ { label: "Open in CoStrict on the web", value: "open" },
1537
+ { label: "Dismiss", value: "dismiss" }
1538
+ ] : [
1539
+ { label: "Open in CoStrict on the web", value: "open" },
1540
+ ...onKill && running ? [{ label: "Stop ultrareview", value: "stop" }] : [],
1541
+ { label: "Back", value: "back" }
1542
+ ];
1543
+ const handleSelect = (action) => {
1544
+ switch (action) {
1545
+ case "open":
1546
+ openBrowser(sessionUrl);
1547
+ onDone();
1548
+ break;
1549
+ case "stop":
1550
+ setConfirmingStop(true);
1551
+ break;
1552
+ case "back":
1553
+ goBackOrClose();
1554
+ break;
1555
+ case "dismiss":
1556
+ handleClose();
1557
+ break;
1558
+ }
1559
+ };
1560
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1561
+ title: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1562
+ children: [
1563
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1564
+ color: "background",
1565
+ children: [
1566
+ completed ? DIAMOND_FILLED : DIAMOND_OPEN,
1567
+ " "
1568
+ ]
1569
+ }, undefined, true, undefined, this),
1570
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1571
+ bold: true,
1572
+ children: "ultrareview"
1573
+ }, undefined, false, undefined, this),
1574
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1575
+ dimColor: true,
1576
+ children: [
1577
+ " \xB7 ",
1578
+ elapsedTime,
1579
+ " \xB7 ",
1580
+ statusLabel
1581
+ ]
1582
+ }, undefined, true, undefined, this)
1583
+ ]
1584
+ }, undefined, true, undefined, this),
1585
+ onCancel: goBackOrClose,
1586
+ color: "background",
1587
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1588
+ children: [
1589
+ "Press ",
1590
+ exitState.keyName,
1591
+ " again to exit"
1592
+ ]
1593
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Byline, {
1594
+ children: [
1595
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1596
+ shortcut: "Enter",
1597
+ action: "select"
1598
+ }, undefined, false, undefined, this),
1599
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1600
+ shortcut: "Esc",
1601
+ action: "go back"
1602
+ }, undefined, false, undefined, this)
1603
+ ]
1604
+ }, undefined, true, undefined, this),
1605
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1606
+ flexDirection: "column",
1607
+ gap: 1,
1608
+ children: [
1609
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(StagePipeline, {
1610
+ stage: session.reviewProgress?.stage,
1611
+ completed,
1612
+ hasProgress: !!session.reviewProgress
1613
+ }, undefined, false, undefined, this),
1614
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1615
+ flexDirection: "column",
1616
+ children: [
1617
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1618
+ children: reviewCountsLine(session)
1619
+ }, undefined, false, undefined, this),
1620
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1621
+ url: sessionUrl,
1622
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1623
+ dimColor: true,
1624
+ children: sessionUrl
1625
+ }, undefined, false, undefined, this)
1626
+ }, undefined, false, undefined, this)
1627
+ ]
1628
+ }, undefined, true, undefined, this),
1629
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Select, {
1630
+ options,
1631
+ onChange: handleSelect
1632
+ }, undefined, false, undefined, this)
1633
+ ]
1634
+ }, undefined, true, undefined, this)
1635
+ }, undefined, false, undefined, this);
1636
+ }
1637
+ function RemoteSessionDetailDialog({
1638
+ session,
1639
+ toolUseContext,
1640
+ onDone,
1641
+ onBack,
1642
+ onKill
1643
+ }) {
1644
+ const [isTeleporting, setIsTeleporting] = import_react4.useState(false);
1645
+ const [teleportError, setTeleportError] = import_react4.useState(null);
1646
+ const lastMessages = import_react4.useMemo(() => {
1647
+ if (session.isUltraplan || session.isRemoteReview)
1648
+ return [];
1649
+ return normalizeMessages(toInternalMessages(session.log)).filter((_) => _.type !== "progress").slice(-3);
1650
+ }, [session]);
1651
+ if (session.isUltraplan) {
1652
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(UltraplanSessionDetail, {
1653
+ session,
1654
+ onDone,
1655
+ onBack,
1656
+ onKill
1657
+ }, undefined, false, undefined, this);
1658
+ }
1659
+ if (session.isRemoteReview) {
1660
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ReviewSessionDetail, {
1661
+ session,
1662
+ onDone,
1663
+ onBack,
1664
+ onKill
1665
+ }, undefined, false, undefined, this);
1666
+ }
1667
+ const handleClose = () => onDone("Remote session details dismissed", { display: "system" });
1668
+ const handleKeyDown = (e) => {
1669
+ if (e.key === " ") {
1670
+ e.preventDefault();
1671
+ onDone("Remote session details dismissed", { display: "system" });
1672
+ } else if (e.key === "left" && onBack) {
1673
+ e.preventDefault();
1674
+ onBack();
1675
+ } else if (e.key === "t" && !isTeleporting) {
1676
+ e.preventDefault();
1677
+ handleTeleport();
1678
+ } else if (e.key === "return") {
1679
+ e.preventDefault();
1680
+ handleClose();
1681
+ }
1682
+ };
1683
+ async function handleTeleport() {
1684
+ setIsTeleporting(true);
1685
+ setTeleportError(null);
1686
+ try {
1687
+ await teleportResumeCodeSession(session.sessionId);
1688
+ } catch (err) {
1689
+ setTeleportError(errorMessage(err));
1690
+ } finally {
1691
+ setIsTeleporting(false);
1692
+ }
1693
+ }
1694
+ const displayTitle = truncateToWidth(session.title, 50);
1695
+ const displayStatus = session.status === "pending" ? "starting" : session.status;
1696
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1697
+ flexDirection: "column",
1698
+ tabIndex: 0,
1699
+ autoFocus: true,
1700
+ onKeyDown: handleKeyDown,
1701
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Dialog, {
1702
+ title: "Remote session details",
1703
+ onCancel: handleClose,
1704
+ color: "background",
1705
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1706
+ children: [
1707
+ "Press ",
1708
+ exitState.keyName,
1709
+ " again to exit"
1710
+ ]
1711
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Byline, {
1712
+ children: [
1713
+ onBack && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1714
+ shortcut: "\u2190",
1715
+ action: "go back"
1716
+ }, undefined, false, undefined, this),
1717
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1718
+ shortcut: "Esc/Enter/Space",
1719
+ action: "close"
1720
+ }, undefined, false, undefined, this),
1721
+ !isTeleporting && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(KeyboardShortcutHint, {
1722
+ shortcut: "t",
1723
+ action: "teleport"
1724
+ }, undefined, false, undefined, this)
1725
+ ]
1726
+ }, undefined, true, undefined, this),
1727
+ children: [
1728
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1729
+ flexDirection: "column",
1730
+ children: [
1731
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1732
+ children: [
1733
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1734
+ bold: true,
1735
+ children: "Status"
1736
+ }, undefined, false, undefined, this),
1737
+ ":",
1738
+ " ",
1739
+ displayStatus === "running" || displayStatus === "starting" ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1740
+ color: "background",
1741
+ children: displayStatus
1742
+ }, undefined, false, undefined, this) : displayStatus === "completed" ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1743
+ color: "success",
1744
+ children: displayStatus
1745
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1746
+ color: "error",
1747
+ children: displayStatus
1748
+ }, undefined, false, undefined, this)
1749
+ ]
1750
+ }, undefined, true, undefined, this),
1751
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1752
+ children: [
1753
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1754
+ bold: true,
1755
+ children: "Runtime"
1756
+ }, undefined, false, undefined, this),
1757
+ ":",
1758
+ " ",
1759
+ formatDuration((session.endTime ?? Date.now()) - session.startTime)
1760
+ ]
1761
+ }, undefined, true, undefined, this),
1762
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1763
+ wrap: "truncate-end",
1764
+ children: [
1765
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1766
+ bold: true,
1767
+ children: "Title"
1768
+ }, undefined, false, undefined, this),
1769
+ ": ",
1770
+ displayTitle
1771
+ ]
1772
+ }, undefined, true, undefined, this),
1773
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1774
+ children: [
1775
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1776
+ bold: true,
1777
+ children: "Progress"
1778
+ }, undefined, false, undefined, this),
1779
+ ":",
1780
+ " ",
1781
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(RemoteSessionProgress, {
1782
+ session
1783
+ }, undefined, false, undefined, this)
1784
+ ]
1785
+ }, undefined, true, undefined, this),
1786
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1787
+ children: [
1788
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1789
+ bold: true,
1790
+ children: "Session URL"
1791
+ }, undefined, false, undefined, this),
1792
+ ":",
1793
+ " ",
1794
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Link, {
1795
+ url: getRemoteTaskSessionUrl(session.sessionId),
1796
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1797
+ dimColor: true,
1798
+ children: getRemoteTaskSessionUrl(session.sessionId)
1799
+ }, undefined, false, undefined, this)
1800
+ }, undefined, false, undefined, this)
1801
+ ]
1802
+ }, undefined, true, undefined, this)
1803
+ ]
1804
+ }, undefined, true, undefined, this),
1805
+ session.log.length > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1806
+ flexDirection: "column",
1807
+ marginTop: 1,
1808
+ children: [
1809
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1810
+ children: [
1811
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1812
+ bold: true,
1813
+ children: "Recent messages"
1814
+ }, undefined, false, undefined, this),
1815
+ ":"
1816
+ ]
1817
+ }, undefined, true, undefined, this),
1818
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1819
+ flexDirection: "column",
1820
+ height: 10,
1821
+ overflowY: "hidden",
1822
+ children: lastMessages.map((msg, i) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Message, {
1823
+ message: msg,
1824
+ lookups: EMPTY_LOOKUPS,
1825
+ addMargin: i > 0,
1826
+ tools: toolUseContext.options.tools,
1827
+ commands: toolUseContext.options.commands,
1828
+ verbose: toolUseContext.options.verbose,
1829
+ inProgressToolUseIDs: new Set,
1830
+ progressMessagesForMessage: [],
1831
+ shouldAnimate: false,
1832
+ shouldShowDot: false,
1833
+ style: "condensed",
1834
+ isTranscriptMode: false,
1835
+ isStatic: true
1836
+ }, i, false, undefined, this))
1837
+ }, undefined, false, undefined, this),
1838
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1839
+ marginTop: 1,
1840
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1841
+ dimColor: true,
1842
+ italic: true,
1843
+ children: [
1844
+ "Showing last ",
1845
+ lastMessages.length,
1846
+ " of ",
1847
+ session.log.length,
1848
+ " ",
1849
+ "messages"
1850
+ ]
1851
+ }, undefined, true, undefined, this)
1852
+ }, undefined, false, undefined, this)
1853
+ ]
1854
+ }, undefined, true, undefined, this),
1855
+ teleportError && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedBox_default, {
1856
+ marginTop: 1,
1857
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1858
+ color: "error",
1859
+ children: [
1860
+ "Teleport failed: ",
1861
+ teleportError
1862
+ ]
1863
+ }, undefined, true, undefined, this)
1864
+ }, undefined, false, undefined, this),
1865
+ isTeleporting && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ThemedText, {
1866
+ color: "background",
1867
+ children: "Teleporting to session\u2026"
1868
+ }, undefined, false, undefined, this)
1869
+ ]
1870
+ }, undefined, true, undefined, this)
1871
+ }, undefined, false, undefined, this);
1872
+ }
1873
+ var import_react4, jsx_dev_runtime8, PHASE_LABEL, AGENT_VERB, STAGES, STAGE_LABELS;
1874
+ var init_RemoteSessionDetailDialog = __esm(() => {
1875
+ init_figures();
1876
+ init_figures2();
1877
+ init_useElapsedTime();
1878
+ init_src();
1879
+ init_RemoteAgentTask();
1880
+ init_constants();
1881
+ init_prompt();
1882
+ init_constants2();
1883
+ init_browser();
1884
+ init_errors();
1885
+ init_format();
1886
+ init_mappers();
1887
+ init_messages();
1888
+ init_stringUtils();
1889
+ init_teleport();
1890
+ init_select();
1891
+ init_src();
1892
+ init_Message();
1893
+ init_RemoteSessionProgress();
1894
+ import_react4 = __toESM(require_react(), 1);
1895
+ jsx_dev_runtime8 = __toESM(require_jsx_dev_runtime(), 1);
1896
+ PHASE_LABEL = {
1897
+ needs_input: "input required",
1898
+ plan_ready: "ready"
1899
+ };
1900
+ AGENT_VERB = {
1901
+ needs_input: "waiting",
1902
+ plan_ready: "done"
1903
+ };
1904
+ STAGES = ["finding", "verifying", "synthesizing"];
1905
+ STAGE_LABELS = {
1906
+ finding: "Find",
1907
+ verifying: "Verify",
1908
+ synthesizing: "Dedupe"
1909
+ };
1910
+ });
1911
+
1912
+ // src/components/tasks/ShellDetailDialog.tsx
1913
+ async function getTaskOutput(shell) {
1914
+ const path = getTaskOutputPath(shell.id);
1915
+ try {
1916
+ const result = await tailFile(path, SHELL_DETAIL_TAIL_BYTES);
1917
+ return { content: result.content, bytesTotal: result.bytesTotal };
1918
+ } catch {
1919
+ return { content: "", bytesTotal: 0 };
1920
+ }
1921
+ }
1922
+ function ShellDetailDialog({
1923
+ shell,
1924
+ onDone,
1925
+ onKillShell,
1926
+ onBack
1927
+ }) {
1928
+ const { columns } = useTerminalSize();
1929
+ const [outputPromise, setOutputPromise] = import_react5.useState(() => getTaskOutput(shell));
1930
+ const deferredOutputPromise = import_react5.useDeferredValue(outputPromise);
1931
+ import_react5.useEffect(() => {
1932
+ if (shell.status !== "running") {
1933
+ return;
1934
+ }
1935
+ const timer = setInterval((setOutputPromise2, shell2) => setOutputPromise2(getTaskOutput(shell2)), 1000, setOutputPromise, shell);
1936
+ return () => clearInterval(timer);
1937
+ }, [shell.id, shell.status]);
1938
+ const handleClose = () => onDone("Shell details dismissed", { display: "system" });
1939
+ useKeybindings({
1940
+ "confirm:yes": handleClose
1941
+ }, { context: "Confirmation" });
1942
+ const handleKeyDown = (e) => {
1943
+ if (e.key === " ") {
1944
+ e.preventDefault();
1945
+ onDone("Shell details dismissed", { display: "system" });
1946
+ } else if (e.key === "left" && onBack) {
1947
+ e.preventDefault();
1948
+ onBack();
1949
+ } else if (e.key === "x" && shell.status === "running" && onKillShell) {
1950
+ e.preventDefault();
1951
+ onKillShell();
1952
+ }
1953
+ };
1954
+ const isMonitor = shell.kind === "monitor";
1955
+ const displayCommand = truncateToWidth(shell.command, 280);
1956
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
1957
+ flexDirection: "column",
1958
+ tabIndex: 0,
1959
+ autoFocus: true,
1960
+ onKeyDown: handleKeyDown,
1961
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Dialog, {
1962
+ title: isMonitor ? "Monitor details" : "Shell details",
1963
+ onCancel: handleClose,
1964
+ color: "background",
1965
+ inputGuide: (exitState) => exitState.pending ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1966
+ children: [
1967
+ "Press ",
1968
+ exitState.keyName,
1969
+ " again to exit"
1970
+ ]
1971
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Byline, {
1972
+ children: [
1973
+ onBack && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1974
+ shortcut: "\u2190",
1975
+ action: "go back"
1976
+ }, undefined, false, undefined, this),
1977
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1978
+ shortcut: "Esc/Enter/Space",
1979
+ action: "close"
1980
+ }, undefined, false, undefined, this),
1981
+ shell.status === "running" && onKillShell && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(KeyboardShortcutHint, {
1982
+ shortcut: "x",
1983
+ action: "stop"
1984
+ }, undefined, false, undefined, this)
1985
+ ]
1986
+ }, undefined, true, undefined, this),
1987
+ children: [
1988
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
1989
+ flexDirection: "column",
1990
+ children: [
1991
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1992
+ children: [
1993
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1994
+ bold: true,
1995
+ children: "Status:"
1996
+ }, undefined, false, undefined, this),
1997
+ " ",
1998
+ shell.status === "running" ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
1999
+ color: "background",
2000
+ children: [
2001
+ shell.status,
2002
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2003
+ ]
2004
+ }, undefined, true, undefined, this) : shell.status === "completed" ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2005
+ color: "success",
2006
+ children: [
2007
+ shell.status,
2008
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2009
+ ]
2010
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2011
+ color: "error",
2012
+ children: [
2013
+ shell.status,
2014
+ shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`
2015
+ ]
2016
+ }, undefined, true, undefined, this)
2017
+ ]
2018
+ }, undefined, true, undefined, this),
2019
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2020
+ children: [
2021
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2022
+ bold: true,
2023
+ children: "Runtime:"
2024
+ }, undefined, false, undefined, this),
2025
+ " ",
2026
+ formatDuration((shell.endTime ?? Date.now()) - shell.startTime)
2027
+ ]
2028
+ }, undefined, true, undefined, this),
2029
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2030
+ wrap: "wrap",
2031
+ children: [
2032
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2033
+ bold: true,
2034
+ children: isMonitor ? "Script:" : "Command:"
2035
+ }, undefined, false, undefined, this),
2036
+ " ",
2037
+ displayCommand
2038
+ ]
2039
+ }, undefined, true, undefined, this)
2040
+ ]
2041
+ }, undefined, true, undefined, this),
2042
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
2043
+ flexDirection: "column",
2044
+ children: [
2045
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2046
+ bold: true,
2047
+ children: "Output:"
2048
+ }, undefined, false, undefined, this),
2049
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(import_react5.Suspense, {
2050
+ fallback: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2051
+ dimColor: true,
2052
+ children: "Loading output\u2026"
2053
+ }, undefined, false, undefined, this),
2054
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ShellOutputContent, {
2055
+ outputPromise: deferredOutputPromise,
2056
+ columns
2057
+ }, undefined, false, undefined, this)
2058
+ }, undefined, false, undefined, this)
2059
+ ]
2060
+ }, undefined, true, undefined, this)
2061
+ ]
2062
+ }, undefined, true, undefined, this)
2063
+ }, undefined, false, undefined, this);
2064
+ }
2065
+ function ShellOutputContent({
2066
+ outputPromise,
2067
+ columns
2068
+ }) {
2069
+ const { content, bytesTotal } = import_react5.use(outputPromise);
2070
+ if (!content) {
2071
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2072
+ dimColor: true,
2073
+ children: "No output available"
2074
+ }, undefined, false, undefined, this);
2075
+ }
2076
+ const starts = [];
2077
+ let pos = content.length;
2078
+ for (let i = 0;i < 10 && pos > 0; i++) {
2079
+ const prev = content.lastIndexOf(`
2080
+ `, pos - 1);
2081
+ starts.push(prev + 1);
2082
+ pos = prev;
2083
+ }
2084
+ starts.reverse();
2085
+ const isIncomplete = bytesTotal > content.length;
2086
+ const rendered = [];
2087
+ for (let i = 0;i < starts.length; i++) {
2088
+ const start = starts[i];
2089
+ const end = i < starts.length - 1 ? starts[i + 1] - 1 : content.length;
2090
+ const line = content.slice(start, end);
2091
+ if (line)
2092
+ rendered.push(line);
2093
+ }
2094
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(jsx_dev_runtime9.Fragment, {
2095
+ children: [
2096
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedBox_default, {
2097
+ borderStyle: "round",
2098
+ paddingX: 1,
2099
+ flexDirection: "column",
2100
+ height: 12,
2101
+ maxWidth: columns - 6,
2102
+ children: rendered.map((line, i) => /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2103
+ wrap: "truncate-end",
2104
+ children: line
2105
+ }, i, false, undefined, this))
2106
+ }, undefined, false, undefined, this),
2107
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ThemedText, {
2108
+ dimColor: true,
2109
+ italic: true,
2110
+ children: [
2111
+ `Showing ${rendered.length} lines`,
2112
+ isIncomplete ? ` of ${formatFileSize(bytesTotal)}` : ""
2113
+ ]
2114
+ }, undefined, true, undefined, this)
2115
+ ]
2116
+ }, undefined, true, undefined, this);
2117
+ }
2118
+ var import_react5, jsx_dev_runtime9, SHELL_DETAIL_TAIL_BYTES = 8192;
2119
+ var init_ShellDetailDialog = __esm(() => {
2120
+ init_useTerminalSize();
2121
+ init_src();
2122
+ init_useKeybinding();
2123
+ init_format();
2124
+ init_fsOperations();
2125
+ init_diskOutput();
2126
+ init_src();
2127
+ import_react5 = __toESM(require_react(), 1);
2128
+ jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
2129
+ });
2130
+
2131
+ // src/components/tasks/BackgroundTasksDialog.tsx
2132
+ function getSelectableBackgroundTasks(tasks, foregroundedTaskId) {
2133
+ const backgroundTasks = Object.values(tasks ?? {}).filter(isBackgroundTask);
2134
+ return backgroundTasks.filter((task) => !(task.type === "local_agent" && task.id === foregroundedTaskId));
2135
+ }
2136
+ function BackgroundTasksDialog({
2137
+ onDone,
2138
+ toolUseContext,
2139
+ initialDetailTaskId
2140
+ }) {
2141
+ const tasks = useAppState((s) => s.tasks);
2142
+ const foregroundedTaskId = useAppState((s) => s.foregroundedTaskId);
2143
+ const showSpinnerTree = useAppState((s) => s.expandedView) === "teammates";
2144
+ const setAppState = useSetAppState();
2145
+ const killAgentsShortcut = useShortcutDisplay("chat:killAgents", "Chat", "ctrl+x ctrl+k");
2146
+ const typedTasks = tasks;
2147
+ const skippedListOnMount = import_react6.useRef(false);
2148
+ const [viewState, setViewState] = import_react6.useState(() => {
2149
+ if (initialDetailTaskId) {
2150
+ skippedListOnMount.current = true;
2151
+ return { mode: "detail", itemId: initialDetailTaskId };
2152
+ }
2153
+ const allItems = getSelectableBackgroundTasks(typedTasks, foregroundedTaskId);
2154
+ if (allItems.length === 1) {
2155
+ skippedListOnMount.current = true;
2156
+ return { mode: "detail", itemId: allItems[0].id };
2157
+ }
2158
+ return { mode: "list" };
2159
+ });
2160
+ const [selectedIndex, setSelectedIndex] = import_react6.useState(0);
2161
+ useRegisterOverlay("background-tasks-dialog");
2162
+ const {
2163
+ bashTasks,
2164
+ remoteSessions,
2165
+ agentTasks,
2166
+ teammateTasks,
2167
+ workflowTasks,
2168
+ mcpMonitors,
2169
+ dreamTasks,
2170
+ allSelectableItems
2171
+ } = import_react6.useMemo(() => {
2172
+ const backgroundTasks = Object.values(typedTasks ?? {}).filter(isBackgroundTask);
2173
+ const allItems = backgroundTasks.map(toListItem);
2174
+ const sorted = allItems.sort((a, b) => {
2175
+ const aStatus = a.status;
2176
+ const bStatus = b.status;
2177
+ if (aStatus === "running" && bStatus !== "running")
2178
+ return -1;
2179
+ if (aStatus !== "running" && bStatus === "running")
2180
+ return 1;
2181
+ const aTime = "task" in a ? a.task.startTime : 0;
2182
+ const bTime = "task" in b ? b.task.startTime : 0;
2183
+ return bTime - aTime;
2184
+ });
2185
+ const bash = sorted.filter((item) => item.type === "local_bash");
2186
+ const remote = sorted.filter((item) => item.type === "remote_agent");
2187
+ const agent = sorted.filter((item) => item.type === "local_agent" && item.id !== foregroundedTaskId);
2188
+ const workflows = sorted.filter((item) => item.type === "local_workflow");
2189
+ const monitorMcp = sorted.filter((item) => item.type === "monitor_mcp");
2190
+ const dreamTasks2 = sorted.filter((item) => item.type === "dream");
2191
+ const teammates = showSpinnerTree ? [] : sorted.filter((item) => item.type === "in_process_teammate");
2192
+ const leaderItem = teammates.length > 0 ? [
2193
+ {
2194
+ id: "__leader__",
2195
+ type: "leader",
2196
+ label: `@${TEAM_LEAD_NAME}`,
2197
+ status: "running"
2198
+ }
2199
+ ] : [];
2200
+ return {
2201
+ bashTasks: bash,
2202
+ remoteSessions: remote,
2203
+ agentTasks: agent,
2204
+ workflowTasks: workflows,
2205
+ mcpMonitors: monitorMcp,
2206
+ dreamTasks: dreamTasks2,
2207
+ teammateTasks: [...leaderItem, ...teammates],
2208
+ allSelectableItems: [
2209
+ ...leaderItem,
2210
+ ...teammates,
2211
+ ...bash,
2212
+ ...monitorMcp,
2213
+ ...remote,
2214
+ ...agent,
2215
+ ...workflows,
2216
+ ...dreamTasks2
2217
+ ]
2218
+ };
2219
+ }, [typedTasks, foregroundedTaskId, showSpinnerTree]);
2220
+ const currentSelection = allSelectableItems[selectedIndex] ?? null;
2221
+ useKeybindings({
2222
+ "confirm:previous": () => setSelectedIndex((prev) => Math.max(0, prev - 1)),
2223
+ "confirm:next": () => setSelectedIndex((prev) => Math.min(allSelectableItems.length - 1, prev + 1)),
2224
+ "confirm:yes": () => {
2225
+ const current = allSelectableItems[selectedIndex];
2226
+ if (current) {
2227
+ if (current.type === "leader") {
2228
+ exitTeammateView(setAppState);
2229
+ onDone("Viewing leader", { display: "system" });
2230
+ } else {
2231
+ setViewState({ mode: "detail", itemId: current.id });
2232
+ }
2233
+ }
2234
+ }
2235
+ }, { context: "Confirmation", isActive: viewState.mode === "list" });
2236
+ const handleKeyDown = (e) => {
2237
+ if (viewState.mode !== "list")
2238
+ return;
2239
+ if (e.key === "left") {
2240
+ e.preventDefault();
2241
+ onDone("Background tasks dialog dismissed", { display: "system" });
2242
+ return;
2243
+ }
2244
+ const currentSelection2 = allSelectableItems[selectedIndex];
2245
+ if (!currentSelection2)
2246
+ return;
2247
+ if (e.key === "x") {
2248
+ e.preventDefault();
2249
+ if (currentSelection2.type === "local_bash" && currentSelection2.status === "running") {
2250
+ killShellTask(currentSelection2.id);
2251
+ } else if (currentSelection2.type === "local_agent" && currentSelection2.status === "running") {
2252
+ killAgentTask(currentSelection2.id);
2253
+ } else if (currentSelection2.type === "in_process_teammate" && currentSelection2.status === "running") {
2254
+ killTeammateTask(currentSelection2.id);
2255
+ } else if (currentSelection2.type === "local_workflow" && currentSelection2.status === "running" && killWorkflowTask) {
2256
+ killWorkflowTask(currentSelection2.id, setAppState);
2257
+ } else if (currentSelection2.type === "monitor_mcp" && currentSelection2.status === "running" && killMonitorMcp) {
2258
+ killMonitorMcp(currentSelection2.id, setAppState);
2259
+ } else if (currentSelection2.type === "dream" && currentSelection2.status === "running") {
2260
+ killDreamTask(currentSelection2.id);
2261
+ } else if (currentSelection2.type === "remote_agent" && currentSelection2.status === "running") {
2262
+ if (currentSelection2.task.isUltraplan) {
2263
+ stopUltraplan(currentSelection2.id, currentSelection2.task.sessionId, setAppState);
2264
+ } else {
2265
+ killRemoteAgentTask(currentSelection2.id);
2266
+ }
2267
+ }
2268
+ }
2269
+ if (e.key === "f") {
2270
+ if (currentSelection2.type === "in_process_teammate" && currentSelection2.status === "running") {
2271
+ e.preventDefault();
2272
+ enterTeammateView(currentSelection2.id, setAppState);
2273
+ onDone("Viewing teammate", { display: "system" });
2274
+ } else if (currentSelection2.type === "leader") {
2275
+ e.preventDefault();
2276
+ exitTeammateView(setAppState);
2277
+ onDone("Viewing leader", { display: "system" });
2278
+ }
2279
+ }
2280
+ };
2281
+ async function killShellTask(taskId) {
2282
+ await LocalShellTask.kill(taskId, setAppState);
2283
+ }
2284
+ async function killAgentTask(taskId) {
2285
+ await LocalAgentTask.kill(taskId, setAppState);
2286
+ }
2287
+ async function killTeammateTask(taskId) {
2288
+ await InProcessTeammateTask.kill(taskId, setAppState);
2289
+ }
2290
+ async function killDreamTask(taskId) {
2291
+ await DreamTask.kill(taskId, setAppState);
2292
+ }
2293
+ async function killRemoteAgentTask(taskId) {
2294
+ await RemoteAgentTask.kill(taskId, setAppState);
2295
+ }
2296
+ const onDoneEvent = import_react6.useEffectEvent(onDone);
2297
+ import_react6.useEffect(() => {
2298
+ if (viewState.mode !== "list") {
2299
+ const task = (typedTasks ?? {})[viewState.itemId];
2300
+ if (!task || task.type !== "local_workflow" && !isBackgroundTask(task)) {
2301
+ if (skippedListOnMount.current) {
2302
+ onDoneEvent("Background tasks dialog dismissed", {
2303
+ display: "system"
2304
+ });
2305
+ } else {
2306
+ setViewState({ mode: "list" });
2307
+ }
2308
+ }
2309
+ }
2310
+ const totalItems = allSelectableItems.length;
2311
+ if (selectedIndex >= totalItems && totalItems > 0) {
2312
+ setSelectedIndex(totalItems - 1);
2313
+ }
2314
+ }, [viewState, typedTasks, selectedIndex, allSelectableItems, onDoneEvent]);
2315
+ const goBackToList = () => {
2316
+ if (skippedListOnMount.current && allSelectableItems.length <= 1) {
2317
+ onDone("Background tasks dialog dismissed", { display: "system" });
2318
+ } else {
2319
+ skippedListOnMount.current = false;
2320
+ setViewState({ mode: "list" });
2321
+ }
2322
+ };
2323
+ if (viewState.mode !== "list" && typedTasks) {
2324
+ const task = typedTasks[viewState.itemId];
2325
+ if (!task) {
2326
+ return null;
2327
+ }
2328
+ switch (task.type) {
2329
+ case "local_bash":
2330
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ShellDetailDialog, {
2331
+ shell: task,
2332
+ onDone,
2333
+ onKillShell: () => void killShellTask(task.id),
2334
+ onBack: goBackToList
2335
+ }, `shell-${task.id}`, false, undefined, this);
2336
+ case "local_agent":
2337
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(AsyncAgentDetailDialog, {
2338
+ agent: task,
2339
+ onDone,
2340
+ onKillAgent: () => void killAgentTask(task.id),
2341
+ onBack: goBackToList
2342
+ }, `agent-${task.id}`, false, undefined, this);
2343
+ case "remote_agent":
2344
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(RemoteSessionDetailDialog, {
2345
+ session: task,
2346
+ onDone,
2347
+ toolUseContext,
2348
+ onBack: goBackToList,
2349
+ onKill: task.status !== "running" ? undefined : task.isUltraplan ? () => void stopUltraplan(task.id, task.sessionId, setAppState) : () => void killRemoteAgentTask(task.id)
2350
+ }, `session-${task.id}`, false, undefined, this);
2351
+ case "in_process_teammate":
2352
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(InProcessTeammateDetailDialog, {
2353
+ teammate: task,
2354
+ onDone,
2355
+ onKill: task.status === "running" ? () => void killTeammateTask(task.id) : undefined,
2356
+ onBack: goBackToList,
2357
+ onForeground: task.status === "running" ? () => {
2358
+ enterTeammateView(task.id, setAppState);
2359
+ onDone("Viewing teammate", { display: "system" });
2360
+ } : undefined
2361
+ }, `teammate-${task.id}`, false, undefined, this);
2362
+ case "local_workflow":
2363
+ if (!WorkflowDetailDialog)
2364
+ return null;
2365
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(WorkflowDetailDialog, {
2366
+ workflow: task,
2367
+ onDone,
2368
+ onKill: task.status === "running" && killWorkflowTask ? () => killWorkflowTask(task.id, setAppState) : undefined,
2369
+ onSkipAgent: task.status === "running" && skipWorkflowAgent ? (agentId) => skipWorkflowAgent(task.id, agentId, setAppState) : undefined,
2370
+ onRetryAgent: task.status === "running" && retryWorkflowAgent ? (agentId) => retryWorkflowAgent(task.id, agentId, setAppState) : undefined,
2371
+ onBack: goBackToList
2372
+ }, `workflow-${task.id}`, false, undefined, this);
2373
+ case "monitor_mcp":
2374
+ if (!MonitorMcpDetailDialog)
2375
+ return null;
2376
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(MonitorMcpDetailDialog, {
2377
+ task,
2378
+ onKill: task.status === "running" && killMonitorMcp ? () => killMonitorMcp(task.id, setAppState) : undefined,
2379
+ onBack: goBackToList
2380
+ }, `monitor-mcp-${task.id}`, false, undefined, this);
2381
+ case "dream":
2382
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(DreamDetailDialog, {
2383
+ task,
2384
+ onDone: () => onDone("Background tasks dialog dismissed", {
2385
+ display: "system"
2386
+ }),
2387
+ onBack: goBackToList,
2388
+ onKill: task.status === "running" ? () => void killDreamTask(task.id) : undefined
2389
+ }, `dream-${task.id}`, false, undefined, this);
2390
+ }
2391
+ }
2392
+ const runningBashCount = count(bashTasks, (_) => _.status === "running");
2393
+ const runningAgentCount = count(remoteSessions, (_) => _.status === "running" || _.status === "pending") + count(agentTasks, (_) => _.status === "running");
2394
+ const runningTeammateCount = count(teammateTasks, (_) => _.status === "running");
2395
+ const subtitle = intersperse([
2396
+ ...runningTeammateCount > 0 ? [
2397
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2398
+ children: [
2399
+ runningTeammateCount,
2400
+ " ",
2401
+ runningTeammateCount !== 1 ? "agents" : "agent"
2402
+ ]
2403
+ }, "teammates", true, undefined, this)
2404
+ ] : [],
2405
+ ...runningBashCount > 0 ? [
2406
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2407
+ children: [
2408
+ runningBashCount,
2409
+ " ",
2410
+ runningBashCount !== 1 ? "active shells" : "active shell"
2411
+ ]
2412
+ }, "shells", true, undefined, this)
2413
+ ] : [],
2414
+ ...runningAgentCount > 0 ? [
2415
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2416
+ children: [
2417
+ runningAgentCount,
2418
+ " ",
2419
+ runningAgentCount !== 1 ? "active agents" : "active agent"
2420
+ ]
2421
+ }, "agents", true, undefined, this)
2422
+ ] : []
2423
+ ], (index) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2424
+ children: " \xB7 "
2425
+ }, `separator-${index}`, false, undefined, this));
2426
+ const actions = [
2427
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2428
+ shortcut: "\u2191/\u2193",
2429
+ action: "select"
2430
+ }, "upDown", false, undefined, this),
2431
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2432
+ shortcut: "Enter",
2433
+ action: "view"
2434
+ }, "enter", false, undefined, this),
2435
+ ...currentSelection?.type === "in_process_teammate" && currentSelection.status === "running" ? [
2436
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2437
+ shortcut: "f",
2438
+ action: "foreground"
2439
+ }, "foreground", false, undefined, this)
2440
+ ] : [],
2441
+ ...(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_runtime10.jsxDEV(KeyboardShortcutHint, {
2442
+ shortcut: "x",
2443
+ action: "stop"
2444
+ }, "kill", false, undefined, this)] : [],
2445
+ ...agentTasks.some((t) => t.status === "running") ? [
2446
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2447
+ shortcut: killAgentsShortcut,
2448
+ action: "stop all agents"
2449
+ }, "kill-all", false, undefined, this)
2450
+ ] : [],
2451
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(KeyboardShortcutHint, {
2452
+ shortcut: "\u2190/Esc",
2453
+ action: "close"
2454
+ }, "esc", false, undefined, this)
2455
+ ];
2456
+ const handleCancel = () => onDone("Background tasks dialog dismissed", { display: "system" });
2457
+ function renderInputGuide(exitState) {
2458
+ if (exitState.pending) {
2459
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2460
+ children: [
2461
+ "Press ",
2462
+ exitState.keyName,
2463
+ " again to exit"
2464
+ ]
2465
+ }, undefined, true, undefined, this);
2466
+ }
2467
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Byline, {
2468
+ children: actions
2469
+ }, undefined, false, undefined, this);
2470
+ }
2471
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2472
+ flexDirection: "column",
2473
+ tabIndex: 0,
2474
+ autoFocus: true,
2475
+ onKeyDown: handleKeyDown,
2476
+ children: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Dialog, {
2477
+ title: "Background tasks",
2478
+ subtitle: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(jsx_dev_runtime10.Fragment, {
2479
+ children: subtitle
2480
+ }, undefined, false, undefined, this),
2481
+ onCancel: handleCancel,
2482
+ color: "background",
2483
+ inputGuide: renderInputGuide,
2484
+ children: allSelectableItems.length === 0 ? /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2485
+ dimColor: true,
2486
+ children: "No tasks currently running"
2487
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2488
+ flexDirection: "column",
2489
+ children: [
2490
+ teammateTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2491
+ flexDirection: "column",
2492
+ children: [
2493
+ (bashTasks.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0) && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2494
+ dimColor: true,
2495
+ children: [
2496
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2497
+ bold: true,
2498
+ children: [
2499
+ " ",
2500
+ "Agents"
2501
+ ]
2502
+ }, undefined, true, undefined, this),
2503
+ " (",
2504
+ count(teammateTasks, (i) => i.type !== "leader"),
2505
+ ")"
2506
+ ]
2507
+ }, undefined, true, undefined, this),
2508
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2509
+ flexDirection: "column",
2510
+ children: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(TeammateTaskGroups, {
2511
+ teammateTasks,
2512
+ currentSelectionId: currentSelection?.id
2513
+ }, undefined, false, undefined, this)
2514
+ }, undefined, false, undefined, this)
2515
+ ]
2516
+ }, undefined, true, undefined, this),
2517
+ bashTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2518
+ flexDirection: "column",
2519
+ marginTop: teammateTasks.length > 0 ? 1 : 0,
2520
+ children: [
2521
+ (teammateTasks.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0) && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2522
+ dimColor: true,
2523
+ children: [
2524
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2525
+ bold: true,
2526
+ children: [
2527
+ " ",
2528
+ "Shells"
2529
+ ]
2530
+ }, undefined, true, undefined, this),
2531
+ " (",
2532
+ bashTasks.length,
2533
+ ")"
2534
+ ]
2535
+ }, undefined, true, undefined, this),
2536
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2537
+ flexDirection: "column",
2538
+ children: bashTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2539
+ item,
2540
+ isSelected: item.id === currentSelection?.id
2541
+ }, item.id, false, undefined, this))
2542
+ }, undefined, false, undefined, this)
2543
+ ]
2544
+ }, undefined, true, undefined, this),
2545
+ mcpMonitors.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2546
+ flexDirection: "column",
2547
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 ? 1 : 0,
2548
+ children: [
2549
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2550
+ dimColor: true,
2551
+ children: [
2552
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2553
+ bold: true,
2554
+ children: [
2555
+ " ",
2556
+ "Monitors"
2557
+ ]
2558
+ }, undefined, true, undefined, this),
2559
+ " (",
2560
+ mcpMonitors.length,
2561
+ ")"
2562
+ ]
2563
+ }, undefined, true, undefined, this),
2564
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2565
+ flexDirection: "column",
2566
+ children: mcpMonitors.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2567
+ item,
2568
+ isSelected: item.id === currentSelection?.id
2569
+ }, item.id, false, undefined, this))
2570
+ }, undefined, false, undefined, this)
2571
+ ]
2572
+ }, undefined, true, undefined, this),
2573
+ remoteSessions.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2574
+ flexDirection: "column",
2575
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 ? 1 : 0,
2576
+ children: [
2577
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2578
+ dimColor: true,
2579
+ children: [
2580
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2581
+ bold: true,
2582
+ children: [
2583
+ " ",
2584
+ "Remote agents"
2585
+ ]
2586
+ }, undefined, true, undefined, this),
2587
+ " (",
2588
+ remoteSessions.length,
2589
+ ")"
2590
+ ]
2591
+ }, undefined, true, undefined, this),
2592
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2593
+ flexDirection: "column",
2594
+ children: remoteSessions.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2595
+ item,
2596
+ isSelected: item.id === currentSelection?.id
2597
+ }, item.id, false, undefined, this))
2598
+ }, undefined, false, undefined, this)
2599
+ ]
2600
+ }, undefined, true, undefined, this),
2601
+ agentTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2602
+ flexDirection: "column",
2603
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 ? 1 : 0,
2604
+ children: [
2605
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2606
+ dimColor: true,
2607
+ children: [
2608
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2609
+ bold: true,
2610
+ children: [
2611
+ " ",
2612
+ "Local agents"
2613
+ ]
2614
+ }, undefined, true, undefined, this),
2615
+ " (",
2616
+ agentTasks.length,
2617
+ ")"
2618
+ ]
2619
+ }, undefined, true, undefined, this),
2620
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2621
+ flexDirection: "column",
2622
+ children: agentTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2623
+ item,
2624
+ isSelected: item.id === currentSelection?.id
2625
+ }, item.id, false, undefined, this))
2626
+ }, undefined, false, undefined, this)
2627
+ ]
2628
+ }, undefined, true, undefined, this),
2629
+ workflowTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2630
+ flexDirection: "column",
2631
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0 ? 1 : 0,
2632
+ children: [
2633
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2634
+ dimColor: true,
2635
+ children: [
2636
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2637
+ bold: true,
2638
+ children: [
2639
+ " ",
2640
+ "Workflows"
2641
+ ]
2642
+ }, undefined, true, undefined, this),
2643
+ " (",
2644
+ workflowTasks.length,
2645
+ ")"
2646
+ ]
2647
+ }, undefined, true, undefined, this),
2648
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2649
+ flexDirection: "column",
2650
+ children: workflowTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2651
+ item,
2652
+ isSelected: item.id === currentSelection?.id
2653
+ }, item.id, false, undefined, this))
2654
+ }, undefined, false, undefined, this)
2655
+ ]
2656
+ }, undefined, true, undefined, this),
2657
+ dreamTasks.length > 0 && /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2658
+ flexDirection: "column",
2659
+ marginTop: teammateTasks.length > 0 || bashTasks.length > 0 || mcpMonitors.length > 0 || remoteSessions.length > 0 || agentTasks.length > 0 || workflowTasks.length > 0 ? 1 : 0,
2660
+ children: /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2661
+ flexDirection: "column",
2662
+ children: dreamTasks.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2663
+ item,
2664
+ isSelected: item.id === currentSelection?.id
2665
+ }, item.id, false, undefined, this))
2666
+ }, undefined, false, undefined, this)
2667
+ }, undefined, false, undefined, this)
2668
+ ]
2669
+ }, undefined, true, undefined, this)
2670
+ }, undefined, false, undefined, this)
2671
+ }, undefined, false, undefined, this);
2672
+ }
2673
+ function toListItem(task) {
2674
+ switch (task.type) {
2675
+ case "local_bash":
2676
+ return {
2677
+ id: task.id,
2678
+ type: "local_bash",
2679
+ label: task.kind === "monitor" ? task.description : task.command,
2680
+ status: task.status,
2681
+ task
2682
+ };
2683
+ case "remote_agent":
2684
+ return {
2685
+ id: task.id,
2686
+ type: "remote_agent",
2687
+ label: task.title,
2688
+ status: task.status,
2689
+ task
2690
+ };
2691
+ case "local_agent":
2692
+ return {
2693
+ id: task.id,
2694
+ type: "local_agent",
2695
+ label: task.description,
2696
+ status: task.status,
2697
+ task
2698
+ };
2699
+ case "in_process_teammate":
2700
+ return {
2701
+ id: task.id,
2702
+ type: "in_process_teammate",
2703
+ label: `@${task.identity.agentName}`,
2704
+ status: task.status,
2705
+ task
2706
+ };
2707
+ case "local_workflow":
2708
+ return {
2709
+ id: task.id,
2710
+ type: "local_workflow",
2711
+ label: task.summary ?? task.description,
2712
+ status: task.status,
2713
+ task
2714
+ };
2715
+ case "monitor_mcp":
2716
+ return {
2717
+ id: task.id,
2718
+ type: "monitor_mcp",
2719
+ label: task.description,
2720
+ status: task.status,
2721
+ task
2722
+ };
2723
+ case "dream":
2724
+ return {
2725
+ id: task.id,
2726
+ type: "dream",
2727
+ label: task.description,
2728
+ status: task.status,
2729
+ task
2730
+ };
2731
+ }
2732
+ }
2733
+ function Item({
2734
+ item,
2735
+ isSelected
2736
+ }) {
2737
+ const { columns } = useTerminalSize();
2738
+ const maxActivityWidth = Math.max(30, columns - 26);
2739
+ const useGreyPointer = isCoordinatorMode();
2740
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2741
+ flexDirection: "row",
2742
+ children: [
2743
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2744
+ dimColor: useGreyPointer && isSelected,
2745
+ children: isSelected ? figures_default.pointer + " " : " "
2746
+ }, undefined, false, undefined, this),
2747
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2748
+ color: isSelected && !useGreyPointer ? "suggestion" : undefined,
2749
+ children: item.type === "leader" ? /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2750
+ children: [
2751
+ "@",
2752
+ TEAM_LEAD_NAME
2753
+ ]
2754
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(BackgroundTask, {
2755
+ task: item.task,
2756
+ maxActivityWidth
2757
+ }, undefined, false, undefined, this)
2758
+ }, undefined, false, undefined, this)
2759
+ ]
2760
+ }, undefined, true, undefined, this);
2761
+ }
2762
+ function TeammateTaskGroups({
2763
+ teammateTasks,
2764
+ currentSelectionId
2765
+ }) {
2766
+ const leaderItems = teammateTasks.filter((i) => i.type === "leader");
2767
+ const teammateItems = teammateTasks.filter((i) => i.type === "in_process_teammate");
2768
+ const teams = new Map;
2769
+ for (const item of teammateItems) {
2770
+ const teamName = item.task.identity.teamName;
2771
+ const group = teams.get(teamName);
2772
+ if (group) {
2773
+ group.push(item);
2774
+ } else {
2775
+ teams.set(teamName, [item]);
2776
+ }
2777
+ }
2778
+ const teamEntries = [...teams.entries()];
2779
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(jsx_dev_runtime10.Fragment, {
2780
+ children: teamEntries.map(([teamName, items]) => {
2781
+ const memberCount = items.length + leaderItems.length;
2782
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedBox_default, {
2783
+ flexDirection: "column",
2784
+ children: [
2785
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ThemedText, {
2786
+ dimColor: true,
2787
+ children: [
2788
+ " ",
2789
+ "Team: ",
2790
+ teamName,
2791
+ " (",
2792
+ memberCount,
2793
+ ")"
2794
+ ]
2795
+ }, undefined, true, undefined, this),
2796
+ leaderItems.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2797
+ item,
2798
+ isSelected: item.id === currentSelectionId
2799
+ }, `${item.id}-${teamName}`, false, undefined, this)),
2800
+ items.map((item) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Item, {
2801
+ item,
2802
+ isSelected: item.id === currentSelectionId
2803
+ }, item.id, false, undefined, this))
2804
+ ]
2805
+ }, teamName, true, undefined, this);
2806
+ })
2807
+ }, undefined, false, undefined, this);
2808
+ }
2809
+ var import_react6, jsx_dev_runtime10, WorkflowDetailDialog = null, workflowTaskModule = null, killWorkflowTask, skipWorkflowAgent, retryWorkflowAgent, monitorMcpModule = null, killMonitorMcp, MonitorMcpDetailDialog = null;
2810
+ var init_BackgroundTasksDialog = __esm(() => {
2811
+ init_figures();
2812
+ init_coordinatorMode();
2813
+ init_useTerminalSize();
2814
+ init_AppState();
2815
+ init_teammateViewHelpers();
2816
+ init_DreamTask();
2817
+ init_InProcessTeammateTask();
2818
+ init_LocalAgentTask();
2819
+ init_LocalShellTask();
2820
+ init_RemoteAgentTask();
2821
+ init_types();
2822
+ init_array();
2823
+ init_constants3();
2824
+ init_ultraplan();
2825
+ init_overlayContext();
2826
+ init_src();
2827
+ init_useKeybinding();
2828
+ init_useShortcutDisplay();
2829
+ init_array();
2830
+ init_src();
2831
+ init_AsyncAgentDetailDialog();
2832
+ init_BackgroundTask();
2833
+ init_DreamDetailDialog();
2834
+ init_InProcessTeammateDetailDialog();
2835
+ init_RemoteSessionDetailDialog();
2836
+ init_ShellDetailDialog();
2837
+ import_react6 = __toESM(require_react(), 1);
2838
+ jsx_dev_runtime10 = __toESM(require_jsx_dev_runtime(), 1);
2839
+ killWorkflowTask = workflowTaskModule?.killWorkflowTask ?? null;
2840
+ skipWorkflowAgent = workflowTaskModule?.skipWorkflowAgent ?? null;
2841
+ retryWorkflowAgent = workflowTaskModule?.retryWorkflowAgent ?? null;
2842
+ killMonitorMcp = monitorMcpModule?.killMonitorMcp ?? null;
2843
+ });
2844
+
2845
+ export { enterTeammateView, exitTeammateView, stopOrDismissAgent, init_teammateViewHelpers, isTerminalStatus, shouldHideTasksFooter, init_taskStatusUtils, BackgroundTasksDialog, init_BackgroundTasksDialog };