claude-code-best 1.1.0 → 1.2.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 (542) hide show
  1. package/README.md +66 -75
  2. package/dist/chunk-03hxwxzh.js +344 -0
  3. package/dist/chunk-07069jq1.js +30 -0
  4. package/dist/{chunk-kq098bkj.js → chunk-08g51x43.js} +254 -320
  5. package/dist/{chunk-7tqhx6dr.js → chunk-093r60b7.js} +109 -213
  6. package/dist/{chunk-ahjgghpe.js → chunk-0aya4737.js} +1 -1
  7. package/dist/{chunk-b4mnbry0.js → chunk-0fsdxz74.js} +4 -4
  8. package/dist/chunk-0jzdwbdc.js +14 -0
  9. package/dist/chunk-0mbxeb5q.js +406 -0
  10. package/dist/chunk-0pryepme.js +66 -0
  11. package/dist/chunk-0qsm7jac.js +169 -0
  12. package/dist/{chunk-1cbn5kxf.js → chunk-0rpb2bdp.js} +3 -2
  13. package/dist/chunk-0se7sxd4.js +38 -0
  14. package/dist/{chunk-3m7ge6tj.js → chunk-0xnepnph.js} +14 -12
  15. package/dist/{chunk-q7tvkc86.js → chunk-0zsam7pn.js} +10 -115
  16. package/dist/{chunk-44fpr6jq.js → chunk-168xb8v1.js} +4 -2
  17. package/dist/{chunk-bj0rvnjw.js → chunk-19h3a9pw.js} +40 -30
  18. package/dist/chunk-19wjkpe7.js +115 -0
  19. package/dist/{chunk-wsqhnjj3.js → chunk-1atfzck5.js} +24 -24
  20. package/dist/{chunk-0e1xsncc.js → chunk-1cwdhk7a.js} +1 -1
  21. package/dist/{chunk-c8jv6rtj.js → chunk-1hq59w8z.js} +78 -69
  22. package/dist/chunk-1qzk963z.js +108 -0
  23. package/dist/{chunk-fk06pejm.js → chunk-1rrmvwjn.js} +9 -9
  24. package/dist/{chunk-d18z9pna.js → chunk-1thgdca1.js} +2 -2
  25. package/dist/chunk-1tjnmcw7.js +68 -0
  26. package/dist/chunk-1xj83yc8.js +219 -0
  27. package/dist/chunk-21j2jfen.js +435 -0
  28. package/dist/{chunk-wc6wwwyb.js → chunk-21z7acxh.js} +3 -3
  29. package/dist/chunk-22gbbc5x.js +313 -0
  30. package/dist/chunk-238g70xa.js +1 -1
  31. package/dist/{chunk-vpb723tx.js → chunk-23ad5t92.js} +5 -5
  32. package/dist/{chunk-vbbf707n.js → chunk-24r3gfks.js} +39 -29
  33. package/dist/chunk-24sahbec.js +71 -0
  34. package/dist/chunk-28az45r7.js +112 -0
  35. package/dist/{chunk-9g827w4j.js → chunk-2q39ej51.js} +6 -6
  36. package/dist/chunk-2qwgfjcj.js +5370 -0
  37. package/dist/{chunk-0cpnzx7t.js → chunk-2rgvd09y.js} +118 -151
  38. package/dist/chunk-2wq8q15s.js +475 -0
  39. package/dist/{chunk-bqq4zamw.js → chunk-2ys5wcxk.js} +3 -3
  40. package/dist/{chunk-t24ytdcw.js → chunk-31nce7eh.js} +12 -10
  41. package/dist/chunk-31q6p2ke.js +123 -0
  42. package/dist/chunk-3394wc12.js +1024 -0
  43. package/dist/{chunk-33khw5gy.js → chunk-365zvqv3.js} +7 -7
  44. package/dist/{chunk-9g2ncq68.js → chunk-36gkb95k.js} +124 -128
  45. package/dist/{chunk-khdjg2v9.js → chunk-37y42ayh.js} +39 -29
  46. package/dist/chunk-3816xd5p.js +195 -0
  47. package/dist/chunk-3a6bynts.js +656 -0
  48. package/dist/{chunk-qvd0k5dn.js → chunk-3avfhw6x.js} +190 -348
  49. package/dist/{chunk-660kcy7p.js → chunk-3b25ycrx.js} +14 -8
  50. package/dist/chunk-3b4xhwhp.js +113 -0
  51. package/dist/chunk-3fjzvf0e.js +128 -0
  52. package/dist/chunk-3fvc0a79.js +67 -0
  53. package/dist/chunk-3g50kcwk.js +513 -0
  54. package/dist/chunk-3jnmy0nd.js +114 -0
  55. package/dist/chunk-3jzsxj3v.js +310 -0
  56. package/dist/{chunk-frbv3xqa.js → chunk-3mpfxbab.js} +2 -2
  57. package/dist/{chunk-aqa7w38f.js → chunk-3v03e2kz.js} +5 -5
  58. package/dist/chunk-3x5hdd5g.js +1030 -0
  59. package/dist/{chunk-mecs0gpc.js → chunk-3xv7rjsy.js} +14 -11
  60. package/dist/{chunk-j3215c49.js → chunk-3ygnhge8.js} +232 -372
  61. package/dist/chunk-42x5tjk2.js +42 -0
  62. package/dist/chunk-430tvx8d.js +110 -0
  63. package/dist/{chunk-dh6c8y1j.js → chunk-43h8sw5x.js} +3 -3
  64. package/dist/chunk-44d150tz.js +1175 -0
  65. package/dist/chunk-45dj834r.js +115 -0
  66. package/dist/{chunk-yhd82045.js → chunk-46fcr28b.js} +30 -9
  67. package/dist/{chunk-wm2f2f1z.js → chunk-474y75ga.js} +2 -2
  68. package/dist/{chunk-6fkwz9yk.js → chunk-478rpnqm.js} +8 -8
  69. package/dist/{chunk-83z0wrnz.js → chunk-47j9e6m2.js} +2 -2
  70. package/dist/chunk-47wqjw88.js +112 -0
  71. package/dist/{chunk-v4t6dyyh.js → chunk-4cp6193g.js} +2 -2
  72. package/dist/chunk-4h102wt5.js +65 -0
  73. package/dist/{chunk-3mgywd32.js → chunk-4hv90qcz.js} +1 -1
  74. package/dist/chunk-4k2270je.js +295 -0
  75. package/dist/{chunk-2wcbcdky.js → chunk-4k842par.js} +5 -5
  76. package/dist/chunk-4nspekjp.js +69 -0
  77. package/dist/chunk-4pjqtps4.js +151 -0
  78. package/dist/chunk-4sehjy27.js +112 -0
  79. package/dist/{chunk-pgnnrm2v.js → chunk-4t86n23n.js} +21 -17
  80. package/dist/{chunk-2de1vaxf.js → chunk-4whfjn78.js} +68 -78
  81. package/dist/{chunk-41mpwc8h.js → chunk-53c9gb9c.js} +19 -15
  82. package/dist/chunk-53kt8caz.js +122 -0
  83. package/dist/chunk-5a6ahhvy.js +594 -0
  84. package/dist/{chunk-12pv5fez.js → chunk-5gbqknz6.js} +10 -8
  85. package/dist/{chunk-hfzj1m07.js → chunk-5kkvfgzs.js} +14 -5
  86. package/dist/{chunk-4ycz58wj.js → chunk-5pxygepg.js} +68 -8
  87. package/dist/{chunk-2w8633e3.js → chunk-5rgbq3kf.js} +61 -100
  88. package/dist/{chunk-ggqx30m9.js → chunk-5z28bqne.js} +23 -311
  89. package/dist/{chunk-7ejt5gqq.js → chunk-5z8w2q5k.js} +65 -48
  90. package/dist/chunk-60k6v40t.js +70 -0
  91. package/dist/{chunk-p7g7pf3f.js → chunk-61ahbn23.js} +8 -6
  92. package/dist/{chunk-rmbp2das.js → chunk-64pp4hsr.js} +21 -19
  93. package/dist/{chunk-0sb5scxx.js → chunk-652wnf1z.js} +5 -5
  94. package/dist/{chunk-q25bjaev.js → chunk-677as3nh.js} +2 -2
  95. package/dist/{chunk-xs0hwvpa.js → chunk-68pfxvxt.js} +14 -9
  96. package/dist/{chunk-epmheefa.js → chunk-69hys77v.js} +8 -8
  97. package/dist/{chunk-427m88ms.js → chunk-6p1cptq5.js} +9 -9
  98. package/dist/{chunk-0nqrscrr.js → chunk-6p3mtny2.js} +5 -5
  99. package/dist/{chunk-v1mgv1et.js → chunk-6p4cyhb3.js} +4 -3
  100. package/dist/{chunk-m17y8b22.js → chunk-6rxz872v.js} +39 -29
  101. package/dist/chunk-6sjxvthw.js +106 -0
  102. package/dist/{chunk-6mz58s8p.js → chunk-6xana182.js} +18 -14
  103. package/dist/{chunk-vaebptnz.js → chunk-6zn3fm1k.js} +39 -29
  104. package/dist/chunk-704jkbsp.js +183 -0
  105. package/dist/chunk-71sf47by.js +154 -0
  106. package/dist/chunk-73a5g713.js +78 -0
  107. package/dist/chunk-78p7h20f.js +259 -0
  108. package/dist/chunk-7a3b1d4s.js +75 -0
  109. package/dist/{chunk-fpf4cgbt.js → chunk-7bfach0x.js} +9 -9
  110. package/dist/{chunk-ckcagq32.js → chunk-7gqf9wej.js} +5 -5
  111. package/dist/{chunk-sa7nc0vv.js → chunk-7y25wk51.js} +1 -1
  112. package/dist/{chunk-vyd8jzde.js → chunk-81v55vtd.js} +96 -85
  113. package/dist/{chunk-dv1wfr85.js → chunk-8225arm6.js} +5 -4
  114. package/dist/chunk-86715d2d.js +186 -0
  115. package/dist/chunk-8ah9easf.js +365 -0
  116. package/dist/{chunk-rwexx5ns.js → chunk-8baq1s87.js} +1 -3
  117. package/dist/chunk-8fy8hx84.js +386 -0
  118. package/dist/{chunk-4pbx3g7s.js → chunk-8g747a8x.js} +1 -1
  119. package/dist/{chunk-xyqr1cww.js → chunk-8me0yq6v.js} +12 -12
  120. package/dist/{chunk-sdj9b9wh.js → chunk-8pn8tvgg.js} +9 -154
  121. package/dist/chunk-8qxyxgkb.js +161 -0
  122. package/dist/{chunk-ecsw41df.js → chunk-8xs4yp9x.js} +85 -77
  123. package/dist/{chunk-24x87knx.js → chunk-9000dg9h.js} +1327 -2882
  124. package/dist/{chunk-bmvb57qb.js → chunk-905d2hee.js} +5 -5
  125. package/dist/chunk-90qsc60s.js +378 -0
  126. package/dist/chunk-92x6xgex.js +265 -0
  127. package/dist/{chunk-jknt3rxg.js → chunk-9ctg4x6c.js} +7 -9
  128. package/dist/chunk-9e4z7dx7.js +389 -0
  129. package/dist/chunk-9hy6ejmp.js +151 -0
  130. package/dist/chunk-9jvggd30.js +173 -0
  131. package/dist/{chunk-z9tgzh90.js → chunk-9m729tsn.js} +46 -35
  132. package/dist/chunk-9r90d3jt.js +121 -0
  133. package/dist/chunk-9rx2m3cb.js +124 -0
  134. package/dist/chunk-9sr2etaw.js +110 -0
  135. package/dist/chunk-9z8hzgve.js +68 -0
  136. package/dist/{chunk-yxnwsp4f.js → chunk-9zy607vw.js} +8 -6
  137. package/dist/chunk-a0bz6g5e.js +63 -0
  138. package/dist/chunk-a136cvvz.js +27 -0
  139. package/dist/{chunk-n5t9m8h9.js → chunk-a1bjde7d.js} +7 -7
  140. package/dist/{chunk-mvss16tj.js → chunk-a2aj2mtb.js} +414 -636
  141. package/dist/{chunk-8hsyagr8.js → chunk-a3sfy6as.js} +1 -1
  142. package/dist/{chunk-8hq5kk3y.js → chunk-a4twdmhf.js} +3 -2
  143. package/dist/chunk-ae76ded0.js +30 -0
  144. package/dist/chunk-aegyxcne.js +111 -0
  145. package/dist/chunk-aj1dcvrh.js +131 -0
  146. package/dist/{chunk-1yabrspp.js → chunk-amxm6996.js} +2 -2
  147. package/dist/{chunk-t6h4wf3k.js → chunk-ar39mr9c.js} +11 -11
  148. package/dist/{chunk-r6b58y3x.js → chunk-ase86y73.js} +1 -3
  149. package/dist/chunk-asfxrz4f.js +94 -0
  150. package/dist/chunk-axj46c2c.js +196 -0
  151. package/dist/{chunk-m5eb5pt2.js → chunk-ayz6f38j.js} +6 -6
  152. package/dist/{chunk-5b7119h5.js → chunk-b00zd850.js} +8 -6
  153. package/dist/chunk-b2abjkf7.js +126 -0
  154. package/dist/{chunk-8bedvdm1.js → chunk-b81hd3m6.js} +1 -1
  155. package/dist/chunk-bcfd2zw7.js +20 -0
  156. package/dist/{chunk-n5516f5q.js → chunk-bd8zk9tn.js} +4 -4
  157. package/dist/chunk-bhdt6k7w.js +15 -0
  158. package/dist/{chunk-jy35mvy3.js → chunk-bmjmrk76.js} +7 -7
  159. package/dist/chunk-bqaqz1j1.js +126 -0
  160. package/dist/chunk-bsbmmfyt.js +17 -0
  161. package/dist/{chunk-snvypj85.js → chunk-bt64sq5y.js} +3 -2
  162. package/dist/{chunk-zq9xa1xe.js → chunk-bwevztsj.js} +109 -141
  163. package/dist/{chunk-vyc0rjyx.js → chunk-bwg7582d.js} +1 -1
  164. package/dist/{chunk-3be7ka25.js → chunk-bxcfz5gy.js} +1 -1
  165. package/dist/chunk-c2mn2fyg.js +1406 -0
  166. package/dist/chunk-c2tw0dep.js +1811 -0
  167. package/dist/{chunk-402jrnj6.js → chunk-c5bngssh.js} +8 -8
  168. package/dist/chunk-c6sjhj89.js +1284 -0
  169. package/dist/chunk-cb2hpe6k.js +443 -0
  170. package/dist/{chunk-91r0z5qq.js → chunk-ccr1s7qs.js} +1152 -1771
  171. package/dist/chunk-cewqh6rb.js +111 -0
  172. package/dist/{chunk-k9a8jemz.js → chunk-cg01f3ez.js} +7 -7
  173. package/dist/{chunk-f64npa3b.js → chunk-chsyvavm.js} +704 -4
  174. package/dist/{chunk-z8nbjar4.js → chunk-cmcbatgz.js} +7 -5
  175. package/dist/chunk-cnsj3vq2.js +35 -0
  176. package/dist/{chunk-rj86xm6z.js → chunk-cpwe0yw7.js} +1 -1
  177. package/dist/chunk-cqjmxeqv.js +269 -0
  178. package/dist/{chunk-qpm1tmzz.js → chunk-crefny3c.js} +125 -193
  179. package/dist/{chunk-ks0m9njy.js → chunk-d2jekryq.js} +8 -8
  180. package/dist/chunk-d4mdda98.js +94 -0
  181. package/dist/{chunk-26wtxbdc.js → chunk-d7886r6a.js} +6928 -6928
  182. package/dist/chunk-dfkgpfaj.js +135 -0
  183. package/dist/{chunk-9mfbqw9k.js → chunk-dm3n2qgd.js} +4 -4
  184. package/dist/chunk-dnj95atq.js +66 -0
  185. package/dist/{chunk-vjc1svpc.js → chunk-dqgzpb0q.js} +87 -77
  186. package/dist/chunk-drenq3c7.js +383 -0
  187. package/dist/chunk-drkm8yx2.js +34 -0
  188. package/dist/{chunk-ra8fbt9p.js → chunk-dvjzq9x9.js} +543 -874
  189. package/dist/{chunk-w7h2yphx.js → chunk-dwekpr47.js} +2 -2
  190. package/dist/{chunk-49k5ktrj.js → chunk-e18dg1md.js} +31 -16
  191. package/dist/chunk-e396ak46.js +111 -0
  192. package/dist/{chunk-r55r29js.js → chunk-e3c32vwa.js} +191 -276
  193. package/dist/chunk-e3m7kqkb.js +1185 -0
  194. package/dist/{chunk-9cc60ae5.js → chunk-ea9m4e0k.js} +79 -70
  195. package/dist/chunk-ecsa9nd5.js +63 -0
  196. package/dist/{chunk-cmdsbsb6.js → chunk-edzkkadh.js} +2 -2
  197. package/dist/chunk-ek1jasqg.js +142 -0
  198. package/dist/chunk-ep0hwv07.js +126 -0
  199. package/dist/{chunk-cs6y2pc9.js → chunk-ergam9ft.js} +5 -5
  200. package/dist/{chunk-ptwn7qw7.js → chunk-f2k8b4nd.js} +38 -10
  201. package/dist/{chunk-h0rbjg6x.js → chunk-f2mhrmww.js} +8 -1
  202. package/dist/{chunk-s84smrx4.js → chunk-f32cksgw.js} +155 -190
  203. package/dist/{chunk-vzqrbsd1.js → chunk-f69rgsm2.js} +5 -5
  204. package/dist/{chunk-f3bapa1x.js → chunk-f6rbj3gz.js} +12 -7
  205. package/dist/chunk-f7n3xete.js +113 -0
  206. package/dist/chunk-fbest4vx.js +109 -0
  207. package/dist/{chunk-v0wa5ref.js → chunk-fdtcb8qr.js} +13 -555
  208. package/dist/chunk-feh2j8m2.js +136 -0
  209. package/dist/chunk-feyzykye.js +10 -0
  210. package/dist/chunk-fkkysfev.js +158 -0
  211. package/dist/chunk-fn510gqw.js +216 -0
  212. package/dist/{chunk-ch53fgm5.js → chunk-ft9qsa01.js} +13 -11
  213. package/dist/chunk-fw0ckaxh.js +109 -0
  214. package/dist/{chunk-kd97kxjn.js → chunk-fz0ch109.js} +3 -2
  215. package/dist/{chunk-ks0dm6t3.js → chunk-fzn524wa.js} +17 -71
  216. package/dist/chunk-g1k68z1b.js +15 -0
  217. package/dist/{chunk-9t1x831d.js → chunk-g5nb4xhz.js} +86 -74
  218. package/dist/chunk-g82mdy27.js +429 -0
  219. package/dist/{chunk-68qevppc.js → chunk-g8sz060e.js} +82 -72
  220. package/dist/chunk-g9f19ttm.js +15 -0
  221. package/dist/{chunk-zz21rvr7.js → chunk-gdqxtdh4.js} +9 -6
  222. package/dist/chunk-get9fk3h.js +74 -0
  223. package/dist/{chunk-4x5ym4h2.js → chunk-gf6qjt7j.js} +130 -16
  224. package/dist/{chunk-bq6x1ehp.js → chunk-gpz0ddyz.js} +8 -8
  225. package/dist/{chunk-mwp7sj0q.js → chunk-gs5eeqmc.js} +110336 -114801
  226. package/dist/{chunk-qqfa0dqg.js → chunk-h4b85amj.js} +20 -32
  227. package/dist/{chunk-j4c8s7tn.js → chunk-h5zv78zq.js} +9 -6
  228. package/dist/{chunk-cgn27dqf.js → chunk-ha5d5zfj.js} +3 -3
  229. package/dist/{chunk-crr52hf4.js → chunk-han7cwc0.js} +14 -12
  230. package/dist/{chunk-dnyeb288.js → chunk-hbv0tk35.js} +74 -106
  231. package/dist/{chunk-nxsh6de2.js → chunk-hcgkak1j.js} +20 -125
  232. package/dist/{chunk-224x480q.js → chunk-hd1p4hrd.js} +8 -6
  233. package/dist/{chunk-tjaqa99q.js → chunk-hezj20qy.js} +3 -3
  234. package/dist/{chunk-z7pr85qw.js → chunk-hfdyez7b.js} +3 -3
  235. package/dist/chunk-hh7hqa2c.js +272 -0
  236. package/dist/chunk-hk4a2sks.js +83 -0
  237. package/dist/{chunk-5zh1fbrj.js → chunk-hq85v2s7.js} +3 -3
  238. package/dist/chunk-hr06142m.js +117 -0
  239. package/dist/chunk-j1b3r6v6.js +66 -0
  240. package/dist/{chunk-v8xem37v.js → chunk-j2fgn3kq.js} +8 -6
  241. package/dist/chunk-j2wgj22c.js +441 -0
  242. package/dist/{chunk-9gbamk79.js → chunk-j5bth84e.js} +5 -1
  243. package/dist/{chunk-vratq94g.js → chunk-j9gxwbe3.js} +1 -1
  244. package/dist/{chunk-cettj572.js → chunk-ja87jt56.js} +7 -131
  245. package/dist/{chunk-3r24h7t6.js → chunk-jaaxk89e.js} +1 -1
  246. package/dist/{chunk-f4jcw0ea.js → chunk-jaew3662.js} +18 -14
  247. package/dist/{chunk-e1ge9n4d.js → chunk-jb2nh0m0.js} +2 -2
  248. package/dist/{chunk-f9b4wb89.js → chunk-jb4fc073.js} +84 -75
  249. package/dist/chunk-jba8f3hz.js +108 -0
  250. package/dist/{chunk-er9vzjac.js → chunk-jbt0jgtc.js} +16 -14
  251. package/dist/{chunk-v399mzxk.js → chunk-jf0p00fz.js} +2 -2
  252. package/dist/{chunk-vygf94dw.js → chunk-jg4ge4de.js} +78 -69
  253. package/dist/chunk-jkvy2cmt.js +346 -0
  254. package/dist/{chunk-80qg1pzv.js → chunk-jmdy5vdy.js} +11 -9
  255. package/dist/{chunk-dqh7e4mt.js → chunk-jn08nxj8.js} +52 -42
  256. package/dist/{chunk-av73dywf.js → chunk-jna2tcvj.js} +8 -8
  257. package/dist/chunk-jwh384j5.js +126 -0
  258. package/dist/chunk-jwx2scxy.js +222 -0
  259. package/dist/{chunk-41xeh3t9.js → chunk-jy6c07wa.js} +4 -4
  260. package/dist/{chunk-ctmt7xh1.js → chunk-jy77nthd.js} +740 -907
  261. package/dist/{chunk-hzttn8j7.js → chunk-jyjpaqbt.js} +139 -135
  262. package/dist/chunk-jztjnw31.js +147 -0
  263. package/dist/chunk-k0jhzcwg.js +2540 -0
  264. package/dist/{chunk-myzwt5yw.js → chunk-k0kwfqr8.js} +9 -15
  265. package/dist/{chunk-bqfnp99q.js → chunk-k3s4yk22.js} +1 -1
  266. package/dist/{chunk-1dyeexvn.js → chunk-kd3mmsd2.js} +4 -4
  267. package/dist/{chunk-x51h62jq.js → chunk-ke78h68m.js} +78 -69
  268. package/dist/{chunk-1xkekb9y.js → chunk-kfd89dsd.js} +5 -3
  269. package/dist/chunk-ksvvwa9w.js +111 -0
  270. package/dist/{chunk-jy35z4n0.js → chunk-m1z5td19.js} +9 -9
  271. package/dist/{chunk-jafes477.js → chunk-m2bcpk8j.js} +4 -3
  272. package/dist/{chunk-n6fbyke9.js → chunk-m2mzpskw.js} +3 -3
  273. package/dist/{chunk-s2dmn3yg.js → chunk-m47q5mxt.js} +5 -5
  274. package/dist/{chunk-s7qj2hg5.js → chunk-m8vyp6rw.js} +2 -2
  275. package/dist/chunk-mm4m13ng.js +881 -0
  276. package/dist/{chunk-ghr4s9g6.js → chunk-mq1qrwhq.js} +79 -70
  277. package/dist/{chunk-45e9mkyr.js → chunk-mqqw60br.js} +43 -83
  278. package/dist/chunk-mtcdknc8.js +2842 -0
  279. package/dist/{chunk-cvge4pvp.js → chunk-mzd6frw6.js} +2 -2
  280. package/dist/{chunk-n2874aq5.js → chunk-n1neft0d.js} +13 -7
  281. package/dist/{chunk-bcrxtdcy.js → chunk-n2mysxn1.js} +40 -30
  282. package/dist/chunk-n4wkxbq0.js +365 -0
  283. package/dist/chunk-n57dw6h9.js +128 -0
  284. package/dist/chunk-n5wf3b82.js +118 -0
  285. package/dist/{chunk-zgrg0wk3.js → chunk-n7ce94nd.js} +27 -67
  286. package/dist/{chunk-me2ef6g4.js → chunk-n8mpqdje.js} +1 -1
  287. package/dist/{chunk-g5sg6y9q.js → chunk-na2e0dfj.js} +82 -72
  288. package/dist/chunk-netzwgv1.js +154 -0
  289. package/dist/{chunk-xszk7n10.js → chunk-nh3cd07f.js} +1 -1
  290. package/dist/{chunk-5tx8dsy0.js → chunk-npjsp3z3.js} +10493 -18453
  291. package/dist/{chunk-5hva0tsg.js → chunk-p2yv7m0g.js} +6 -6
  292. package/dist/chunk-p4rmbc1e.js +409 -0
  293. package/dist/chunk-p7jdncj4.js +122 -0
  294. package/dist/{chunk-zk2wsm7d.js → chunk-p7vkh4wx.js} +2 -2
  295. package/dist/{chunk-da4ve9t5.js → chunk-p8crqj70.js} +10 -10
  296. package/dist/{chunk-hy3g1nv8.js → chunk-prw4xz5q.js} +9 -7
  297. package/dist/{chunk-zsfxha74.js → chunk-pshjyzq4.js} +8 -7
  298. package/dist/{chunk-684kdqez.js → chunk-q08sb44h.js} +203 -304
  299. package/dist/{chunk-n7158r58.js → chunk-q78bgdtk.js} +79 -70
  300. package/dist/{chunk-e5pntxye.js → chunk-q7tpyeb3.js} +6 -4
  301. package/dist/{chunk-7ymfj7m3.js → chunk-q82r31er.js} +1 -1
  302. package/dist/chunk-qajrkk97.js +298 -0
  303. package/dist/chunk-qbrsmra3.js +23 -0
  304. package/dist/chunk-qhfn4vgv.js +66 -0
  305. package/dist/{chunk-d7mx1phm.js → chunk-qndzvkdx.js} +61 -103
  306. package/dist/{chunk-35y0r56v.js → chunk-qtfc6wdh.js} +1 -4
  307. package/dist/{chunk-v9y80148.js → chunk-qwcnwn5t.js} +100 -191
  308. package/dist/chunk-qwehvedn.js +440 -0
  309. package/dist/{chunk-2cgdr2n7.js → chunk-qwk9fq7r.js} +78 -69
  310. package/dist/chunk-qy75c2vm.js +70 -0
  311. package/dist/{chunk-rryx19hp.js → chunk-r2k2jy0y.js} +2 -2
  312. package/dist/chunk-r47p0ff0.js +61 -0
  313. package/dist/{chunk-t3bf8hcf.js → chunk-r5tk54yt.js} +2 -2
  314. package/dist/{chunk-bt9krt49.js → chunk-r8q993g6.js} +38 -32
  315. package/dist/{chunk-veb0gkcf.js → chunk-ra2rykps.js} +78 -69
  316. package/dist/{chunk-gbcqdr0x.js → chunk-rav5xp8h.js} +1 -1
  317. package/dist/chunk-rbe0tcn9.js +120 -0
  318. package/dist/chunk-rd5cfz3k.js +68 -0
  319. package/dist/{chunk-cenpqc2t.js → chunk-rdvaan98.js} +8 -6
  320. package/dist/{chunk-dr4qq42x.js → chunk-rgbbtszq.js} +9 -9
  321. package/dist/chunk-rjsb9s3q.js +206 -0
  322. package/dist/{chunk-fdwa7gem.js → chunk-rkak3kjw.js} +7 -7
  323. package/dist/{chunk-a6s8wnhe.js → chunk-rnam0xc5.js} +4 -4
  324. package/dist/chunk-rqkqbppr.js +112 -0
  325. package/dist/{chunk-ye18m1zb.js → chunk-rqvqqrpg.js} +38 -8
  326. package/dist/{chunk-rw466wqn.js → chunk-rvkvehat.js} +5284 -3093
  327. package/dist/chunk-s1baskk7.js +14 -0
  328. package/dist/{chunk-jt0pha6y.js → chunk-s5gnvx67.js} +227 -198
  329. package/dist/chunk-s7dtt7tw.js +109 -0
  330. package/dist/chunk-s9ftt1fh.js +135 -0
  331. package/dist/chunk-sc6sy490.js +240 -0
  332. package/dist/chunk-sh9er84d.js +1073 -0
  333. package/dist/{chunk-faycqscv.js → chunk-sk9xag9g.js} +2 -2
  334. package/dist/{chunk-zpc0kwkb.js → chunk-t0g8wbcq.js} +7 -7
  335. package/dist/chunk-tbgm1v8n.js +146 -0
  336. package/dist/{chunk-35b0ek0j.js → chunk-tcdv4gp8.js} +13 -9
  337. package/dist/{chunk-mt25echc.js → chunk-tezak8rx.js} +1 -1
  338. package/dist/chunk-thk6yn51.js +154 -0
  339. package/dist/{chunk-s2gm9vfk.js → chunk-tkf24yhv.js} +7 -7
  340. package/dist/{chunk-6td4c2eq.js → chunk-tkrjcekq.js} +54 -72
  341. package/dist/{chunk-9rcbyag3.js → chunk-tmdbrszg.js} +2 -2
  342. package/dist/chunk-tw2g1yhq.js +118 -0
  343. package/dist/chunk-twzjxwhf.js +182 -0
  344. package/dist/{chunk-m94pnhfa.js → chunk-v4e4f711.js} +39 -29
  345. package/dist/{chunk-b51jjfh5.js → chunk-v5k7zmqm.js} +43 -32
  346. package/dist/chunk-var1et7e.js +66 -0
  347. package/dist/chunk-vd11xbz3.js +304 -0
  348. package/dist/{chunk-hqmz36b3.js → chunk-vf612n57.js} +21 -101
  349. package/dist/chunk-vfhqj46w.js +144 -0
  350. package/dist/chunk-vkxx8ymr.js +2377 -0
  351. package/dist/{chunk-n9x557ea.js → chunk-vs094cby.js} +2332 -4220
  352. package/dist/{chunk-dxc7begm.js → chunk-vtb8z6as.js} +14 -10
  353. package/dist/{chunk-x51mdzqq.js → chunk-vzd3cjy9.js} +3 -3
  354. package/dist/chunk-w2es9743.js +439 -0
  355. package/dist/{chunk-8z039kef.js → chunk-w92b262y.js} +53 -54
  356. package/dist/chunk-wa1dpga1.js +236 -0
  357. package/dist/{chunk-qf2v384j.js → chunk-wbmacbfb.js} +9 -7
  358. package/dist/{chunk-ryj80g9p.js → chunk-wbn46nb4.js} +136 -178
  359. package/dist/{chunk-t9z6njcr.js → chunk-wtycm8km.js} +9 -9
  360. package/dist/{chunk-q6rax9kh.js → chunk-wymtgh88.js} +5 -5
  361. package/dist/{chunk-pa7saazk.js → chunk-x0aj8rh8.js} +28 -56
  362. package/dist/{chunk-1szr63w0.js → chunk-x69w7xr7.js} +86 -74
  363. package/dist/{chunk-k5gdea6r.js → chunk-x6qmm22r.js} +84 -75
  364. package/dist/{chunk-zrse3zpz.js → chunk-xbprynsc.js} +18 -46
  365. package/dist/chunk-xc0v11v6.js +914 -0
  366. package/dist/chunk-xed18bb5.js +233 -0
  367. package/dist/{chunk-gjyc3293.js → chunk-xj76qk4z.js} +288 -499
  368. package/dist/chunk-xmd9eezd.js +83 -0
  369. package/dist/chunk-xrzrbw0f.js +142 -0
  370. package/dist/{chunk-fzxg8v1y.js → chunk-xycy3c8q.js} +15 -12
  371. package/dist/chunk-y0m0rd5v.js +140 -0
  372. package/dist/chunk-y2vtmzre.js +137 -0
  373. package/dist/{chunk-vybkxr18.js → chunk-y5z1cjbk.js} +42 -32
  374. package/dist/chunk-y60q54ph.js +111 -0
  375. package/dist/{chunk-d7vv2ydf.js → chunk-y78t50v0.js} +2 -2
  376. package/dist/{chunk-xkr7as9h.js → chunk-y9bgt2k1.js} +13 -9
  377. package/dist/chunk-ycwdzwz5.js +233 -0
  378. package/dist/chunk-yfyc2y1v.js +136 -0
  379. package/dist/chunk-yg6gtf9j.js +152 -0
  380. package/dist/{chunk-kyer92r4.js → chunk-yk8vcecd.js} +33 -5
  381. package/dist/{chunk-hkn7tzgv.js → chunk-ym5r3jnk.js} +1 -1
  382. package/dist/chunk-yr6gqw17.js +132 -0
  383. package/dist/chunk-yw62vhjz.js +445 -0
  384. package/dist/{chunk-athjeyrt.js → chunk-yw79dz62.js} +4 -4
  385. package/dist/{chunk-5mrhhmas.js → chunk-yx64nmbh.js} +8 -5
  386. package/dist/chunk-yy232vtj.js +84 -0
  387. package/dist/chunk-z1bs6d7k.js +24 -0
  388. package/dist/chunk-z4mgvsdj.js +456 -0
  389. package/dist/chunk-z6e5jp2w.js +119 -0
  390. package/dist/{chunk-t7cbhqd2.js → chunk-z6zt2ns7.js} +111 -123
  391. package/dist/chunk-z735r3p2.js +114 -0
  392. package/dist/{chunk-rjz6btwk.js → chunk-z7ssqvt6.js} +4972 -4638
  393. package/dist/{chunk-bpts9jbq.js → chunk-z8nv1ah0.js} +39 -31
  394. package/dist/chunk-z9mbssbe.js +128 -0
  395. package/dist/chunk-zdctabq6.js +264 -0
  396. package/dist/{chunk-ve60fbtd.js → chunk-ze6zvkg6.js} +2 -2
  397. package/dist/{chunk-t0rgmccj.js → chunk-zejm280k.js} +1 -1
  398. package/dist/{chunk-krstc7m7.js → chunk-zfapazzd.js} +15 -11
  399. package/dist/{chunk-2j0j79p0.js → chunk-zg4ae27v.js} +8 -8
  400. package/dist/chunk-zqxe8qnw.js +3590 -0
  401. package/dist/{chunk-q6dpqj3z.js → chunk-zs2ddzfv.js} +10 -7
  402. package/dist/chunk-zy80g72r.js +512 -0
  403. package/dist/{chunk-g3t0act8.js → chunk-zzm33q8x.js} +1 -1
  404. package/dist/{chunk-s8fzxy94.js → chunk-zzzc1ead.js} +17 -13
  405. package/dist/cli.js +63 -11
  406. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  407. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  408. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  409. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  410. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  411. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  412. package/package.json +8 -5
  413. package/scripts/postinstall.cjs +319 -0
  414. package/dist/chunk-0291smg3.js +0 -42
  415. package/dist/chunk-04g2ty3v.js +0 -104
  416. package/dist/chunk-069x95ne.js +0 -764
  417. package/dist/chunk-06x02eab.js +0 -655
  418. package/dist/chunk-09pjmga5.js +0 -713
  419. package/dist/chunk-0g90je6r.js +0 -145
  420. package/dist/chunk-0paqc2yw.js +0 -15
  421. package/dist/chunk-0rddv9vb.js +0 -328
  422. package/dist/chunk-162w6yv3.js +0 -756
  423. package/dist/chunk-1gjbaa3n.js +0 -128
  424. package/dist/chunk-23wg4mnt.js +0 -404
  425. package/dist/chunk-2gbjtg7c.js +0 -102
  426. package/dist/chunk-2v1q0ezq.js +0 -102
  427. package/dist/chunk-37n7jkxe.js +0 -436
  428. package/dist/chunk-38svjnh4.js +0 -158
  429. package/dist/chunk-3bg1089y.js +0 -616
  430. package/dist/chunk-3d8ck5ne.js +0 -112
  431. package/dist/chunk-3g6rf9sz.js +0 -106
  432. package/dist/chunk-3x3rr2n5.js +0 -57
  433. package/dist/chunk-4f6q3d38.js +0 -117
  434. package/dist/chunk-4h57km3m.js +0 -74
  435. package/dist/chunk-4kyh2618.js +0 -99
  436. package/dist/chunk-4w9vc9vc.js +0 -119
  437. package/dist/chunk-53hqpp5z.js +0 -208
  438. package/dist/chunk-5deqy8r0.js +0 -143
  439. package/dist/chunk-5m2rmc2k.js +0 -128
  440. package/dist/chunk-5wp9pkpt.js +0 -539
  441. package/dist/chunk-5ym9f6w3.js +0 -263
  442. package/dist/chunk-6f938733.js +0 -1027
  443. package/dist/chunk-6nenxecd.js +0 -115
  444. package/dist/chunk-6rja0h86.js +0 -1593
  445. package/dist/chunk-70q6dp4d.js +0 -96
  446. package/dist/chunk-7bn0wzs3.js +0 -1493
  447. package/dist/chunk-7e2e0bfm.js +0 -65
  448. package/dist/chunk-7ywadnax.js +0 -490
  449. package/dist/chunk-7z33j54s.js +0 -142
  450. package/dist/chunk-8yvfkzyh.js +0 -58
  451. package/dist/chunk-9abpx1kv.js +0 -2833
  452. package/dist/chunk-9ks2nswb.js +0 -114
  453. package/dist/chunk-9wrds5tr.js +0 -109
  454. package/dist/chunk-ab2twken.js +0 -102
  455. package/dist/chunk-abncjeag.js +0 -97
  456. package/dist/chunk-am6w4x6y.js +0 -103
  457. package/dist/chunk-b1xt9jqg.js +0 -28
  458. package/dist/chunk-b73bd7db.js +0 -496
  459. package/dist/chunk-bc7nvynh.js +0 -195
  460. package/dist/chunk-br17dhef.js +0 -103
  461. package/dist/chunk-c3k0sdey.js +0 -281
  462. package/dist/chunk-c909bmyv.js +0 -103
  463. package/dist/chunk-cftsv9w4.js +0 -129
  464. package/dist/chunk-cj1a7npk.js +0 -99
  465. package/dist/chunk-cpma9zs5.js +0 -335
  466. package/dist/chunk-cyscs4k5.js +0 -1330
  467. package/dist/chunk-czr7y063.js +0 -348
  468. package/dist/chunk-d93sndem.js +0 -372
  469. package/dist/chunk-ddz8xbpd.js +0 -481
  470. package/dist/chunk-dkhqx4hk.js +0 -84
  471. package/dist/chunk-dsrharmv.js +0 -359
  472. package/dist/chunk-eqmy5d05.js +0 -56
  473. package/dist/chunk-f2crxw2c.js +0 -5400
  474. package/dist/chunk-f8zga40p.js +0 -234
  475. package/dist/chunk-fbgm2ym6.js +0 -990
  476. package/dist/chunk-fcbbsswe.js +0 -119
  477. package/dist/chunk-fda654nt.js +0 -6121
  478. package/dist/chunk-ffmv9ezj.js +0 -104
  479. package/dist/chunk-fmjte7md.js +0 -38
  480. package/dist/chunk-fqtwqxxc.js +0 -293
  481. package/dist/chunk-g8k85nkd.js +0 -802
  482. package/dist/chunk-ge4ak7dj.js +0 -127
  483. package/dist/chunk-gpqemecy.js +0 -126
  484. package/dist/chunk-h19p6s3b.js +0 -131
  485. package/dist/chunk-j0sk1rct.js +0 -998
  486. package/dist/chunk-j1wfpa1a.js +0 -70
  487. package/dist/chunk-j829fx31.js +0 -3458
  488. package/dist/chunk-jqctzrvd.js +0 -722
  489. package/dist/chunk-jx817w05.js +0 -11
  490. package/dist/chunk-ka6sab33.js +0 -174
  491. package/dist/chunk-krjsvmwp.js +0 -101
  492. package/dist/chunk-kvpe50pm.js +0 -311
  493. package/dist/chunk-mez504fj.js +0 -113
  494. package/dist/chunk-mj6wbrae.js +0 -105
  495. package/dist/chunk-n0k8xrey.js +0 -319
  496. package/dist/chunk-n0pg2kpe.js +0 -122
  497. package/dist/chunk-n4qtqkp0.js +0 -295
  498. package/dist/chunk-n9meha2m.js +0 -73
  499. package/dist/chunk-ndk7q5n3.js +0 -169
  500. package/dist/chunk-ng6n9t4h.js +0 -56
  501. package/dist/chunk-p3pz13x2.js +0 -1933
  502. package/dist/chunk-p9ez6zgq.js +0 -2656
  503. package/dist/chunk-ph750kx1.js +0 -550
  504. package/dist/chunk-pxb99zqs.js +0 -117
  505. package/dist/chunk-q1yqc5n3.js +0 -100
  506. package/dist/chunk-q5b91nhh.js +0 -40
  507. package/dist/chunk-qtfqk0jr.js +0 -131
  508. package/dist/chunk-qzfmdh1t.js +0 -388
  509. package/dist/chunk-r3cv0j9n.js +0 -456
  510. package/dist/chunk-rx0pbgym.js +0 -97
  511. package/dist/chunk-s624rd5j.js +0 -531
  512. package/dist/chunk-satndwqj.js +0 -285
  513. package/dist/chunk-ssrxnkd1.js +0 -109
  514. package/dist/chunk-t2pgctqx.js +0 -106
  515. package/dist/chunk-t7sgwf31.js +0 -644
  516. package/dist/chunk-tth904tj.js +0 -53
  517. package/dist/chunk-typpbjhy.js +0 -128
  518. package/dist/chunk-vp6nrhdq.js +0 -102
  519. package/dist/chunk-vtjm53nt.js +0 -432
  520. package/dist/chunk-w412n7tq.js +0 -469
  521. package/dist/chunk-w4153rky.js +0 -1885
  522. package/dist/chunk-wdgv15as.js +0 -212
  523. package/dist/chunk-wgn9kydv.js +0 -58
  524. package/dist/chunk-whknbrk0.js +0 -184
  525. package/dist/chunk-x1k8e1xc.js +0 -56
  526. package/dist/chunk-x45xx6sc.js +0 -105
  527. package/dist/chunk-x4xvqbe5.js +0 -1166
  528. package/dist/chunk-x8b7vft8.js +0 -132
  529. package/dist/chunk-xaycc8qe.js +0 -44
  530. package/dist/chunk-xd4785ks.js +0 -73
  531. package/dist/chunk-xjxgmxhq.js +0 -463
  532. package/dist/chunk-xx2x3tz9.js +0 -166
  533. package/dist/chunk-y2j23eem.js +0 -101
  534. package/dist/chunk-y83j09wv.js +0 -123
  535. package/dist/chunk-yh8460pb.js +0 -119
  536. package/dist/chunk-z6nhchdb.js +0 -60
  537. package/dist/chunk-zbt73sj7.js +0 -192
  538. package/dist/chunk-zmwaatmq.js +0 -118
  539. package/dist/chunk-zvdg9tex.js +0 -135
  540. package/dist/chunk-zwa780cx.js +0 -584
  541. package/dist/{chunk-whvdag1y.js → chunk-3bfs3x0h.js} +9 -9
  542. package/dist/{chunk-27xc1csx.js → chunk-dggvswz1.js} +3 -3
@@ -0,0 +1,1811 @@
1
+ // @bun
2
+ import {
3
+ Fuse,
4
+ init_fuse
5
+ } from "./chunk-c6sjhj89.js";
6
+ import {
7
+ Messages,
8
+ init_Messages
9
+ } from "./chunk-9000dg9h.js";
10
+ import {
11
+ init_SearchBox
12
+ } from "./chunk-s1baskk7.js";
13
+ import {
14
+ init_useSearchInput,
15
+ useSearchInput
16
+ } from "./chunk-ja87jt56.js";
17
+ import {
18
+ ConfigurableShortcutHint,
19
+ Select,
20
+ Spinner,
21
+ TextInput,
22
+ getAllBaseTools,
23
+ getFirstMeaningfulUserMessageTextContent,
24
+ getSessionIdFromLog,
25
+ getTheme,
26
+ getWorktreePaths,
27
+ init_ConfigurableShortcutHint,
28
+ init_Spinner,
29
+ init_TextInput,
30
+ init_getWorktreePaths,
31
+ init_select,
32
+ init_sessionStorage,
33
+ init_shellQuote,
34
+ init_sideQuery,
35
+ init_theme,
36
+ init_tools1 as init_tools,
37
+ init_useTerminalSize,
38
+ isCustomTitleEnabled,
39
+ isLiteLog,
40
+ loadFullLog,
41
+ quote,
42
+ saveCustomTitle,
43
+ sideQuery
44
+ } from "./chunk-gs5eeqmc.js";
45
+ import {
46
+ init_useExitOnCtrlCDWithKeybindings,
47
+ useExitOnCtrlCDWithKeybindings
48
+ } from "./chunk-5pxygepg.js";
49
+ import {
50
+ init_useKeybinding
51
+ } from "./chunk-0jzdwbdc.js";
52
+ import {
53
+ getSmallFastModel,
54
+ init_model
55
+ } from "./chunk-a2aj2mtb.js";
56
+ import {
57
+ count,
58
+ init_array
59
+ } from "./chunk-1cwdhk7a.js";
60
+ import {
61
+ formatLogMetadata,
62
+ formatRelativeTimeAgo,
63
+ init_format,
64
+ truncateToWidth
65
+ } from "./chunk-z4mgvsdj.js";
66
+ import {
67
+ Byline,
68
+ Divider,
69
+ KeyboardShortcutHint,
70
+ LoadingState,
71
+ SearchBox,
72
+ ThemedBox_default,
73
+ ThemedText,
74
+ applyColor,
75
+ init_source,
76
+ init_src,
77
+ source_default,
78
+ stringWidth,
79
+ useKeybinding,
80
+ useTerminalFocus,
81
+ useTerminalSize,
82
+ useTheme,
83
+ use_input_default
84
+ } from "./chunk-rvkvehat.js";
85
+ import {
86
+ require_jsx_dev_runtime,
87
+ require_react
88
+ } from "./chunk-g338npwr.js";
89
+ import {
90
+ init_analytics,
91
+ logEvent
92
+ } from "./chunk-f2mhrmww.js";
93
+ import {
94
+ getBranch,
95
+ init_git
96
+ } from "./chunk-rgbbtszq.js";
97
+ import {
98
+ getLogDisplayTitle,
99
+ init_log,
100
+ logError
101
+ } from "./chunk-61ahbn23.js";
102
+ import {
103
+ figures_default,
104
+ init_figures
105
+ } from "./chunk-qajrkk97.js";
106
+ import {
107
+ init_debug,
108
+ init_slowOperations,
109
+ jsonParse,
110
+ logForDebugging
111
+ } from "./chunk-hcgkak1j.js";
112
+ import {
113
+ getOriginalCwd,
114
+ getSessionId,
115
+ init_state
116
+ } from "./chunk-h4b85amj.js";
117
+ import {
118
+ __esm,
119
+ __toESM
120
+ } from "./chunk-qp2qdcda.js";
121
+
122
+ // src/components/SessionPreview.tsx
123
+ function SessionPreview({
124
+ log,
125
+ onExit,
126
+ onSelect
127
+ }) {
128
+ const [fullLog, setFullLog] = import_react.default.useState(null);
129
+ import_react.default.useEffect(() => {
130
+ setFullLog(null);
131
+ if (isLiteLog(log)) {
132
+ loadFullLog(log).then(setFullLog);
133
+ }
134
+ }, [log]);
135
+ const isLoading = isLiteLog(log) && fullLog === null;
136
+ const displayLog = fullLog ?? log;
137
+ const conversationId = getSessionIdFromLog(displayLog) || "";
138
+ const tools = getAllBaseTools();
139
+ useKeybinding("confirm:no", onExit, { context: "Confirmation" });
140
+ const handleSelect = import_react.useCallback(() => {
141
+ onSelect(fullLog ?? log);
142
+ }, [onSelect, fullLog, log]);
143
+ useKeybinding("confirm:yes", handleSelect, { context: "Confirmation" });
144
+ if (isLoading) {
145
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedBox_default, {
146
+ flexDirection: "column",
147
+ padding: 1,
148
+ children: [
149
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(LoadingState, {
150
+ message: "Loading session\u2026"
151
+ }, undefined, false, undefined, this),
152
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedText, {
153
+ dimColor: true,
154
+ children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Byline, {
155
+ children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ConfigurableShortcutHint, {
156
+ action: "confirm:no",
157
+ context: "Confirmation",
158
+ fallback: "Esc",
159
+ description: "cancel"
160
+ }, undefined, false, undefined, this)
161
+ }, undefined, false, undefined, this)
162
+ }, undefined, false, undefined, this)
163
+ ]
164
+ }, undefined, true, undefined, this);
165
+ }
166
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedBox_default, {
167
+ flexDirection: "column",
168
+ children: [
169
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Messages, {
170
+ messages: displayLog.messages,
171
+ tools,
172
+ commands: [],
173
+ verbose: true,
174
+ toolJSX: null,
175
+ toolUseConfirmQueue: [],
176
+ inProgressToolUseIDs: new Set,
177
+ isMessageSelectorVisible: false,
178
+ conversationId,
179
+ screen: "transcript",
180
+ streamingToolUses: [],
181
+ showAllInTranscript: true,
182
+ isLoading: false
183
+ }, undefined, false, undefined, this),
184
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedBox_default, {
185
+ flexShrink: 0,
186
+ flexDirection: "column",
187
+ borderTopDimColor: true,
188
+ borderBottom: false,
189
+ borderLeft: false,
190
+ borderRight: false,
191
+ borderStyle: "single",
192
+ paddingLeft: 2,
193
+ children: [
194
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedText, {
195
+ children: [
196
+ formatRelativeTimeAgo(displayLog.modified),
197
+ " \xB7",
198
+ " ",
199
+ displayLog.messageCount,
200
+ " messages",
201
+ displayLog.gitBranch ? ` \xB7 ${displayLog.gitBranch}` : ""
202
+ ]
203
+ }, undefined, true, undefined, this),
204
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemedText, {
205
+ dimColor: true,
206
+ children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Byline, {
207
+ children: [
208
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(KeyboardShortcutHint, {
209
+ shortcut: "Enter",
210
+ action: "resume"
211
+ }, undefined, false, undefined, this),
212
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ConfigurableShortcutHint, {
213
+ action: "confirm:no",
214
+ context: "Confirmation",
215
+ fallback: "Esc",
216
+ description: "cancel"
217
+ }, undefined, false, undefined, this)
218
+ ]
219
+ }, undefined, true, undefined, this)
220
+ }, undefined, false, undefined, this)
221
+ ]
222
+ }, undefined, true, undefined, this)
223
+ ]
224
+ }, undefined, true, undefined, this);
225
+ }
226
+ var import_react, jsx_dev_runtime;
227
+ var init_SessionPreview = __esm(() => {
228
+ init_src();
229
+ init_useKeybinding();
230
+ init_tools();
231
+ init_format();
232
+ init_sessionStorage();
233
+ init_ConfigurableShortcutHint();
234
+ init_Messages();
235
+ import_react = __toESM(require_react(), 1);
236
+ jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
237
+ });
238
+
239
+ // src/components/TagTabs.tsx
240
+ function getTabWidth(tab, maxWidth) {
241
+ if (tab === ALL_TAB_LABEL) {
242
+ return ALL_TAB_LABEL.length + TAB_PADDING;
243
+ }
244
+ const tagWidth = stringWidth(tab);
245
+ const effectiveTagWidth = maxWidth ? Math.min(tagWidth, maxWidth - TAB_PADDING - HASH_PREFIX_LENGTH) : tagWidth;
246
+ return Math.max(0, effectiveTagWidth) + TAB_PADDING + HASH_PREFIX_LENGTH;
247
+ }
248
+ function truncateTag(tag, maxWidth) {
249
+ const availableForTag = maxWidth - TAB_PADDING - HASH_PREFIX_LENGTH;
250
+ if (stringWidth(tag) <= availableForTag) {
251
+ return tag;
252
+ }
253
+ if (availableForTag <= 1) {
254
+ return tag.charAt(0);
255
+ }
256
+ return truncateToWidth(tag, availableForTag);
257
+ }
258
+ function TagTabs({
259
+ tabs,
260
+ selectedIndex,
261
+ availableWidth,
262
+ showAllProjects = false
263
+ }) {
264
+ const resumeLabel = showAllProjects ? "Resume (All Projects)" : "Resume";
265
+ const resumeLabelWidth = resumeLabel.length + 1;
266
+ const rightHintWidth = Math.max(RIGHT_HINT_WIDTH_WITH_COUNT, RIGHT_HINT_WIDTH_NO_COUNT);
267
+ const maxTabsWidth = availableWidth - resumeLabelWidth - rightHintWidth - 2;
268
+ const safeSelectedIndex = Math.max(0, Math.min(selectedIndex, tabs.length - 1));
269
+ const maxSingleTabWidth = Math.max(20, Math.floor(maxTabsWidth / 2));
270
+ const tabWidths = tabs.map((tab) => getTabWidth(tab, maxSingleTabWidth));
271
+ let startIndex = 0;
272
+ let endIndex = tabs.length;
273
+ const totalTabsWidth = tabWidths.reduce((sum, w, i) => sum + w + (i < tabWidths.length - 1 ? 1 : 0), 0);
274
+ if (totalTabsWidth > maxTabsWidth) {
275
+ const effectiveMaxWidth = maxTabsWidth - LEFT_ARROW_WIDTH;
276
+ let windowWidth = tabWidths[safeSelectedIndex] ?? 0;
277
+ startIndex = safeSelectedIndex;
278
+ endIndex = safeSelectedIndex + 1;
279
+ while (startIndex > 0 || endIndex < tabs.length) {
280
+ const canExpandLeft = startIndex > 0;
281
+ const canExpandRight = endIndex < tabs.length;
282
+ if (canExpandLeft) {
283
+ const leftWidth = (tabWidths[startIndex - 1] ?? 0) + 1;
284
+ if (windowWidth + leftWidth <= effectiveMaxWidth) {
285
+ startIndex--;
286
+ windowWidth += leftWidth;
287
+ continue;
288
+ }
289
+ }
290
+ if (canExpandRight) {
291
+ const rightWidth = (tabWidths[endIndex] ?? 0) + 1;
292
+ if (windowWidth + rightWidth <= effectiveMaxWidth) {
293
+ endIndex++;
294
+ windowWidth += rightWidth;
295
+ continue;
296
+ }
297
+ }
298
+ break;
299
+ }
300
+ }
301
+ const hiddenLeft = startIndex;
302
+ const hiddenRight = tabs.length - endIndex;
303
+ const visibleTabs = tabs.slice(startIndex, endIndex);
304
+ const visibleIndices = visibleTabs.map((_, i) => startIndex + i);
305
+ return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedBox_default, {
306
+ flexDirection: "row",
307
+ gap: 1,
308
+ children: [
309
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
310
+ color: "suggestion",
311
+ children: resumeLabel
312
+ }, undefined, false, undefined, this),
313
+ hiddenLeft > 0 && /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
314
+ dimColor: true,
315
+ children: [
316
+ LEFT_ARROW_PREFIX,
317
+ hiddenLeft
318
+ ]
319
+ }, undefined, true, undefined, this),
320
+ visibleTabs.map((tab, i) => {
321
+ const actualIndex = visibleIndices[i];
322
+ const isSelected = actualIndex === safeSelectedIndex;
323
+ const displayText = tab === ALL_TAB_LABEL ? tab : `#${truncateTag(tab, maxSingleTabWidth - TAB_PADDING)}`;
324
+ return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
325
+ backgroundColor: isSelected ? "suggestion" : undefined,
326
+ color: isSelected ? "inverseText" : undefined,
327
+ bold: isSelected,
328
+ children: [
329
+ " ",
330
+ displayText,
331
+ " "
332
+ ]
333
+ }, tab, true, undefined, this);
334
+ }),
335
+ hiddenRight > 0 ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
336
+ dimColor: true,
337
+ children: [
338
+ RIGHT_HINT_WITH_COUNT_PREFIX,
339
+ hiddenRight,
340
+ RIGHT_HINT_SUFFIX
341
+ ]
342
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(ThemedText, {
343
+ dimColor: true,
344
+ children: RIGHT_HINT_NO_COUNT
345
+ }, undefined, false, undefined, this)
346
+ ]
347
+ }, undefined, true, undefined, this);
348
+ }
349
+ var jsx_dev_runtime2, ALL_TAB_LABEL = "All", TAB_PADDING = 2, HASH_PREFIX_LENGTH = 1, LEFT_ARROW_PREFIX = "\u2190 ", RIGHT_HINT_WITH_COUNT_PREFIX = "\u2192", RIGHT_HINT_SUFFIX = " (tab to cycle)", RIGHT_HINT_NO_COUNT = "(tab to cycle)", MAX_OVERFLOW_DIGITS = 2, LEFT_ARROW_WIDTH, RIGHT_HINT_WIDTH_WITH_COUNT, RIGHT_HINT_WIDTH_NO_COUNT;
350
+ var init_TagTabs = __esm(() => {
351
+ init_src();
352
+ init_format();
353
+ jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
354
+ LEFT_ARROW_WIDTH = LEFT_ARROW_PREFIX.length + MAX_OVERFLOW_DIGITS + 1;
355
+ RIGHT_HINT_WIDTH_WITH_COUNT = RIGHT_HINT_WITH_COUNT_PREFIX.length + MAX_OVERFLOW_DIGITS + RIGHT_HINT_SUFFIX.length;
356
+ RIGHT_HINT_WIDTH_NO_COUNT = RIGHT_HINT_NO_COUNT.length;
357
+ });
358
+
359
+ // src/components/ui/TreeSelect.tsx
360
+ function TreeSelect({
361
+ nodes,
362
+ onSelect,
363
+ onCancel,
364
+ onFocus,
365
+ focusNodeId,
366
+ visibleOptionCount,
367
+ layout = "expanded",
368
+ isDisabled = false,
369
+ hideIndexes = false,
370
+ isNodeExpanded,
371
+ onExpand,
372
+ onCollapse,
373
+ getParentPrefix,
374
+ getChildPrefix,
375
+ onUpFromFirstItem
376
+ }) {
377
+ const [internalExpandedIds, setInternalExpandedIds] = import_react2.default.useState(new Set);
378
+ const isProgrammaticFocusRef = import_react2.default.useRef(false);
379
+ const lastFocusedIdRef = import_react2.default.useRef(null);
380
+ const isExpanded = import_react2.default.useCallback((nodeId) => {
381
+ if (isNodeExpanded) {
382
+ return isNodeExpanded(nodeId);
383
+ }
384
+ return internalExpandedIds.has(nodeId);
385
+ }, [isNodeExpanded, internalExpandedIds]);
386
+ const flattenedNodes = import_react2.default.useMemo(() => {
387
+ const result = [];
388
+ function traverse(node, depth, parentId) {
389
+ const hasChildren = !!node.children && node.children.length > 0;
390
+ const nodeIsExpanded = isExpanded(node.id);
391
+ result.push({
392
+ node,
393
+ depth,
394
+ isExpanded: nodeIsExpanded,
395
+ hasChildren,
396
+ parentId
397
+ });
398
+ if (hasChildren && nodeIsExpanded && node.children) {
399
+ for (const child of node.children) {
400
+ traverse(child, depth + 1, node.id);
401
+ }
402
+ }
403
+ }
404
+ for (const node of nodes) {
405
+ traverse(node, 0);
406
+ }
407
+ return result;
408
+ }, [nodes, isExpanded]);
409
+ const defaultGetParentPrefix = import_react2.default.useCallback((isExpanded2) => isExpanded2 ? "\u25BC " : "\u25B6 ", []);
410
+ const defaultGetChildPrefix = import_react2.default.useCallback((_depth) => " \u25B8 ", []);
411
+ const parentPrefixFn = getParentPrefix ?? defaultGetParentPrefix;
412
+ const childPrefixFn = getChildPrefix ?? defaultGetChildPrefix;
413
+ const buildLabel = import_react2.default.useCallback((flatNode) => {
414
+ let prefix = "";
415
+ if (flatNode.hasChildren) {
416
+ prefix = parentPrefixFn(flatNode.isExpanded);
417
+ } else if (flatNode.depth > 0) {
418
+ prefix = childPrefixFn(flatNode.depth);
419
+ }
420
+ return prefix + flatNode.node.label;
421
+ }, [parentPrefixFn, childPrefixFn]);
422
+ const options = import_react2.default.useMemo(() => {
423
+ return flattenedNodes.map((flatNode) => ({
424
+ label: buildLabel(flatNode),
425
+ description: flatNode.node.description,
426
+ dimDescription: flatNode.node.dimDescription ?? true,
427
+ value: flatNode.node.id
428
+ }));
429
+ }, [flattenedNodes, buildLabel]);
430
+ const nodeMap = import_react2.default.useMemo(() => {
431
+ const map = new Map;
432
+ flattenedNodes.forEach((fn) => map.set(fn.node.id, fn.node));
433
+ return map;
434
+ }, [flattenedNodes]);
435
+ const findFlattenedNode = import_react2.default.useCallback((nodeId) => {
436
+ return flattenedNodes.find((fn) => fn.node.id === nodeId);
437
+ }, [flattenedNodes]);
438
+ const toggleExpand = import_react2.default.useCallback((nodeId, shouldExpand) => {
439
+ const flatNode = findFlattenedNode(nodeId);
440
+ if (!flatNode || !flatNode.hasChildren)
441
+ return;
442
+ if (shouldExpand) {
443
+ if (onExpand) {
444
+ onExpand(nodeId);
445
+ } else {
446
+ setInternalExpandedIds((prev) => new Set(prev).add(nodeId));
447
+ }
448
+ } else {
449
+ if (onCollapse) {
450
+ onCollapse(nodeId);
451
+ } else {
452
+ setInternalExpandedIds((prev) => {
453
+ const newSet = new Set(prev);
454
+ newSet.delete(nodeId);
455
+ return newSet;
456
+ });
457
+ }
458
+ }
459
+ }, [findFlattenedNode, onExpand, onCollapse]);
460
+ const handleKeyDown = (e) => {
461
+ if (!focusNodeId || isDisabled)
462
+ return;
463
+ const flatNode = findFlattenedNode(focusNodeId);
464
+ if (!flatNode)
465
+ return;
466
+ if (e.key === "right" && flatNode.hasChildren) {
467
+ e.preventDefault();
468
+ toggleExpand(focusNodeId, true);
469
+ } else if (e.key === "left") {
470
+ if (flatNode.hasChildren && flatNode.isExpanded) {
471
+ e.preventDefault();
472
+ toggleExpand(focusNodeId, false);
473
+ } else if (flatNode.parentId !== undefined) {
474
+ e.preventDefault();
475
+ isProgrammaticFocusRef.current = true;
476
+ toggleExpand(flatNode.parentId, false);
477
+ if (onFocus) {
478
+ const parentNode = nodeMap.get(flatNode.parentId);
479
+ if (parentNode) {
480
+ onFocus(parentNode);
481
+ }
482
+ }
483
+ }
484
+ }
485
+ };
486
+ const handleChange = import_react2.default.useCallback((nodeId) => {
487
+ const node = nodeMap.get(nodeId);
488
+ if (!node)
489
+ return;
490
+ onSelect(node);
491
+ }, [nodeMap, onSelect]);
492
+ const handleFocus = import_react2.default.useCallback((nodeId) => {
493
+ if (isProgrammaticFocusRef.current) {
494
+ isProgrammaticFocusRef.current = false;
495
+ return;
496
+ }
497
+ if (lastFocusedIdRef.current === nodeId) {
498
+ return;
499
+ }
500
+ lastFocusedIdRef.current = nodeId;
501
+ if (onFocus) {
502
+ const node = nodeMap.get(nodeId);
503
+ if (node) {
504
+ onFocus(node);
505
+ }
506
+ }
507
+ }, [onFocus, nodeMap]);
508
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(ThemedBox_default, {
509
+ tabIndex: 0,
510
+ autoFocus: true,
511
+ onKeyDown: handleKeyDown,
512
+ children: /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Select, {
513
+ options,
514
+ onChange: handleChange,
515
+ onFocus: handleFocus,
516
+ onCancel,
517
+ defaultFocusValue: focusNodeId,
518
+ visibleOptionCount,
519
+ layout,
520
+ isDisabled,
521
+ hideIndexes,
522
+ onUpFromFirstItem
523
+ }, undefined, false, undefined, this)
524
+ }, undefined, false, undefined, this);
525
+ }
526
+ var import_react2, jsx_dev_runtime3;
527
+ var init_TreeSelect = __esm(() => {
528
+ init_src();
529
+ init_select();
530
+ import_react2 = __toESM(require_react(), 1);
531
+ jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
532
+ });
533
+
534
+ // src/components/LogSelector.tsx
535
+ function normalizeAndTruncateToWidth(text, maxWidth) {
536
+ const normalized = text.replace(/\s+/g, " ").trim();
537
+ return truncateToWidth(normalized, maxWidth);
538
+ }
539
+ function formatSnippet({ before, match, after }, highlightColor) {
540
+ return source_default.dim(before) + highlightColor(match) + source_default.dim(after);
541
+ }
542
+ function extractSnippet(text, query, contextChars) {
543
+ const matchIndex = text.toLowerCase().indexOf(query.toLowerCase());
544
+ if (matchIndex === -1)
545
+ return null;
546
+ const matchEnd = matchIndex + query.length;
547
+ const snippetStart = Math.max(0, matchIndex - contextChars);
548
+ const snippetEnd = Math.min(text.length, matchEnd + contextChars);
549
+ const beforeRaw = text.slice(snippetStart, matchIndex);
550
+ const matchText = text.slice(matchIndex, matchEnd);
551
+ const afterRaw = text.slice(matchEnd, snippetEnd);
552
+ return {
553
+ before: (snippetStart > 0 ? "\u2026" : "") + beforeRaw.replace(/\s+/g, " ").trimStart(),
554
+ match: matchText.trim(),
555
+ after: afterRaw.replace(/\s+/g, " ").trimEnd() + (snippetEnd < text.length ? "\u2026" : "")
556
+ };
557
+ }
558
+ function buildLogLabel(log, maxLabelWidth, options) {
559
+ const {
560
+ isGroupHeader = false,
561
+ isChild = false,
562
+ forkCount = 0
563
+ } = options || {};
564
+ const prefixWidth = isGroupHeader && forkCount > 0 ? PARENT_PREFIX_WIDTH : isChild ? CHILD_PREFIX_WIDTH : 0;
565
+ const sessionCountSuffix = isGroupHeader && forkCount > 0 ? ` (+${forkCount} other ${forkCount === 1 ? "session" : "sessions"})` : "";
566
+ const sidechainSuffix = log.isSidechain ? " (sidechain)" : "";
567
+ const maxSummaryWidth = maxLabelWidth - prefixWidth - sidechainSuffix.length - sessionCountSuffix.length;
568
+ const truncatedSummary = normalizeAndTruncateToWidth(getLogDisplayTitle(log), maxSummaryWidth);
569
+ return `${truncatedSummary}${sidechainSuffix}${sessionCountSuffix}`;
570
+ }
571
+ function buildLogMetadata(log, options) {
572
+ const { isChild = false, showProjectPath = false } = options || {};
573
+ const childPadding = isChild ? " " : "";
574
+ const baseMetadata = formatLogMetadata(log);
575
+ const projectSuffix = showProjectPath && log.projectPath ? ` \xB7 ${log.projectPath}` : "";
576
+ return childPadding + baseMetadata + projectSuffix;
577
+ }
578
+ function LogSelector({
579
+ logs,
580
+ maxHeight = Infinity,
581
+ forceWidth,
582
+ onCancel,
583
+ onSelect,
584
+ onLogsChanged,
585
+ onLoadMore,
586
+ initialSearchQuery,
587
+ showAllProjects = false,
588
+ onToggleAllProjects,
589
+ onAgenticSearch
590
+ }) {
591
+ const terminalSize = useTerminalSize();
592
+ const columns = forceWidth === undefined ? terminalSize.columns : forceWidth;
593
+ const exitState = useExitOnCtrlCDWithKeybindings(onCancel);
594
+ const isTerminalFocused = useTerminalFocus();
595
+ const isResumeWithRenameEnabled = isCustomTitleEnabled();
596
+ const isDeepSearchEnabled = process.env.USER_TYPE === "ant";
597
+ const [themeName] = useTheme();
598
+ const theme = getTheme(themeName);
599
+ const highlightColor = import_react3.default.useMemo(() => (text) => applyColor(text, theme.warning), [theme.warning]);
600
+ const isAgenticSearchEnabled = process.env.USER_TYPE === "ant";
601
+ const [currentBranch, setCurrentBranch] = import_react3.default.useState(null);
602
+ const [branchFilterEnabled, setBranchFilterEnabled] = import_react3.default.useState(false);
603
+ const [showAllWorktrees, setShowAllWorktrees] = import_react3.default.useState(false);
604
+ const [hasMultipleWorktrees, setHasMultipleWorktrees] = import_react3.default.useState(false);
605
+ const currentCwd = import_react3.default.useMemo(() => getOriginalCwd(), []);
606
+ const [renameValue, setRenameValue] = import_react3.default.useState("");
607
+ const [renameCursorOffset, setRenameCursorOffset] = import_react3.default.useState(0);
608
+ const [expandedGroupSessionIds, setExpandedGroupSessionIds] = import_react3.default.useState(new Set);
609
+ const [focusedNode, setFocusedNode] = import_react3.default.useState(null);
610
+ const [focusedIndex, setFocusedIndex] = import_react3.default.useState(1);
611
+ const [viewMode, setViewMode] = import_react3.default.useState("list");
612
+ const [previewLog, setPreviewLog] = import_react3.default.useState(null);
613
+ const prevFocusedIdRef = import_react3.default.useRef(null);
614
+ const [selectedTagIndex, setSelectedTagIndex] = import_react3.default.useState(0);
615
+ const [agenticSearchState, setAgenticSearchState] = import_react3.default.useState({ status: "idle" });
616
+ const [isAgenticSearchOptionFocused, setIsAgenticSearchOptionFocused] = import_react3.default.useState(false);
617
+ const agenticSearchAbortRef = import_react3.default.useRef(null);
618
+ const {
619
+ query: searchQuery,
620
+ setQuery: setSearchQuery,
621
+ cursorOffset: searchCursorOffset
622
+ } = useSearchInput({
623
+ isActive: viewMode === "search" && agenticSearchState.status !== "searching",
624
+ onExit: () => {
625
+ setViewMode("list");
626
+ logEvent("tengu_session_search_toggled", { enabled: false });
627
+ },
628
+ onExitUp: () => {
629
+ setViewMode("list");
630
+ logEvent("tengu_session_search_toggled", { enabled: false });
631
+ },
632
+ passthroughCtrlKeys: ["n"],
633
+ initialQuery: initialSearchQuery || ""
634
+ });
635
+ const deferredSearchQuery = import_react3.default.useDeferredValue(searchQuery);
636
+ const [debouncedDeepSearchQuery, setDebouncedDeepSearchQuery] = import_react3.default.useState("");
637
+ import_react3.default.useEffect(() => {
638
+ if (!deferredSearchQuery) {
639
+ setDebouncedDeepSearchQuery("");
640
+ return;
641
+ }
642
+ const timeoutId = setTimeout(setDebouncedDeepSearchQuery, 300, deferredSearchQuery);
643
+ return () => clearTimeout(timeoutId);
644
+ }, [deferredSearchQuery]);
645
+ const [deepSearchResults, setDeepSearchResults] = import_react3.default.useState(null);
646
+ const [isSearching, setIsSearching] = import_react3.default.useState(false);
647
+ import_react3.default.useEffect(() => {
648
+ getBranch().then((branch) => setCurrentBranch(branch));
649
+ getWorktreePaths(currentCwd).then((paths) => {
650
+ setHasMultipleWorktrees(paths.length > 1);
651
+ });
652
+ }, [currentCwd]);
653
+ const searchableTextByLog = import_react3.default.useMemo(() => new Map(logs.map((log) => [log, buildSearchableText(log)])), [logs]);
654
+ const fuseIndex = import_react3.default.useMemo(() => {
655
+ if (!isDeepSearchEnabled)
656
+ return null;
657
+ const logsWithText = logs.map((log) => ({
658
+ log,
659
+ searchableText: searchableTextByLog.get(log) ?? ""
660
+ })).filter((item) => item.searchableText);
661
+ return new Fuse(logsWithText, {
662
+ keys: ["searchableText"],
663
+ threshold: FUSE_THRESHOLD,
664
+ ignoreLocation: true,
665
+ includeScore: true
666
+ });
667
+ }, [logs, searchableTextByLog, isDeepSearchEnabled]);
668
+ const uniqueTags = import_react3.default.useMemo(() => getUniqueTags(logs), [logs]);
669
+ const hasTags = uniqueTags.length > 0;
670
+ const tagTabs = import_react3.default.useMemo(() => hasTags ? ["All", ...uniqueTags] : [], [hasTags, uniqueTags]);
671
+ const effectiveTagIndex = tagTabs.length > 0 && selectedTagIndex < tagTabs.length ? selectedTagIndex : 0;
672
+ const selectedTab = tagTabs[effectiveTagIndex];
673
+ const tagFilter = selectedTab === "All" ? undefined : selectedTab;
674
+ const tagTabsLines = hasTags ? 1 : 0;
675
+ const baseFilteredLogs = import_react3.default.useMemo(() => {
676
+ let filtered = logs;
677
+ if (isResumeWithRenameEnabled) {
678
+ filtered = logs.filter((log) => {
679
+ const currentSessionId = getSessionId();
680
+ const logSessionId = getSessionIdFromLog(log);
681
+ const isCurrentSession = currentSessionId && logSessionId === currentSessionId;
682
+ if (isCurrentSession) {
683
+ return true;
684
+ }
685
+ if (log.customTitle) {
686
+ return true;
687
+ }
688
+ const fromMessages = getFirstMeaningfulUserMessageTextContent(log.messages);
689
+ if (fromMessages) {
690
+ return true;
691
+ }
692
+ if (log.firstPrompt || log.customTitle) {
693
+ return true;
694
+ }
695
+ return false;
696
+ });
697
+ }
698
+ if (tagFilter !== undefined) {
699
+ filtered = filtered.filter((log) => log.tag === tagFilter);
700
+ }
701
+ if (branchFilterEnabled && currentBranch) {
702
+ filtered = filtered.filter((log) => log.gitBranch === currentBranch);
703
+ }
704
+ if (hasMultipleWorktrees && !showAllWorktrees) {
705
+ filtered = filtered.filter((log) => log.projectPath === currentCwd);
706
+ }
707
+ return filtered;
708
+ }, [
709
+ logs,
710
+ isResumeWithRenameEnabled,
711
+ tagFilter,
712
+ branchFilterEnabled,
713
+ currentBranch,
714
+ hasMultipleWorktrees,
715
+ showAllWorktrees,
716
+ currentCwd
717
+ ]);
718
+ const titleFilteredLogs = import_react3.default.useMemo(() => {
719
+ if (!searchQuery) {
720
+ return baseFilteredLogs;
721
+ }
722
+ const query = searchQuery.toLowerCase();
723
+ return baseFilteredLogs.filter((log) => {
724
+ const displayedTitle = getLogDisplayTitle(log).toLowerCase();
725
+ const branch = (log.gitBranch || "").toLowerCase();
726
+ const tag = (log.tag || "").toLowerCase();
727
+ const prInfo = log.prNumber ? `pr #${log.prNumber} ${log.prRepository || ""}`.toLowerCase() : "";
728
+ return displayedTitle.includes(query) || branch.includes(query) || tag.includes(query) || prInfo.includes(query);
729
+ });
730
+ }, [baseFilteredLogs, searchQuery]);
731
+ import_react3.default.useEffect(() => {
732
+ if (isDeepSearchEnabled && deferredSearchQuery && deferredSearchQuery !== debouncedDeepSearchQuery) {
733
+ setIsSearching(true);
734
+ }
735
+ }, [deferredSearchQuery, debouncedDeepSearchQuery, isDeepSearchEnabled]);
736
+ import_react3.default.useEffect(() => {
737
+ if (!isDeepSearchEnabled || !debouncedDeepSearchQuery || !fuseIndex) {
738
+ setDeepSearchResults(null);
739
+ setIsSearching(false);
740
+ return;
741
+ }
742
+ const timeoutId = setTimeout((fuseIndex2, debouncedDeepSearchQuery2, setDeepSearchResults2, setIsSearching2) => {
743
+ const results = fuseIndex2.search(debouncedDeepSearchQuery2);
744
+ results.sort((a, b) => {
745
+ const aTime = new Date(a.item.log.modified).getTime();
746
+ const bTime = new Date(b.item.log.modified).getTime();
747
+ const timeDiff = bTime - aTime;
748
+ if (Math.abs(timeDiff) > DATE_TIE_THRESHOLD_MS) {
749
+ return timeDiff;
750
+ }
751
+ return (a.score ?? 1) - (b.score ?? 1);
752
+ });
753
+ setDeepSearchResults2({
754
+ results: results.map((r) => ({
755
+ log: r.item.log,
756
+ score: r.score,
757
+ searchableText: r.item.searchableText
758
+ })),
759
+ query: debouncedDeepSearchQuery2
760
+ });
761
+ setIsSearching2(false);
762
+ }, 0, fuseIndex, debouncedDeepSearchQuery, setDeepSearchResults, setIsSearching);
763
+ return () => {
764
+ clearTimeout(timeoutId);
765
+ };
766
+ }, [debouncedDeepSearchQuery, fuseIndex, isDeepSearchEnabled]);
767
+ const { filteredLogs, snippets } = import_react3.default.useMemo(() => {
768
+ const snippetMap = new Map;
769
+ let filtered = titleFilteredLogs;
770
+ if (deepSearchResults && debouncedDeepSearchQuery && deepSearchResults.query === debouncedDeepSearchQuery) {
771
+ for (const result of deepSearchResults.results) {
772
+ if (result.searchableText) {
773
+ const snippet = extractSnippet(result.searchableText, debouncedDeepSearchQuery, SNIPPET_CONTEXT_CHARS);
774
+ if (snippet) {
775
+ snippetMap.set(result.log, snippet);
776
+ }
777
+ }
778
+ }
779
+ const titleMatchIds = new Set(filtered.map((log) => log.messages[0]?.uuid));
780
+ const transcriptOnlyMatches = deepSearchResults.results.map((r) => r.log).filter((log) => !titleMatchIds.has(log.messages[0]?.uuid));
781
+ filtered = [...filtered, ...transcriptOnlyMatches];
782
+ }
783
+ return { filteredLogs: filtered, snippets: snippetMap };
784
+ }, [titleFilteredLogs, deepSearchResults, debouncedDeepSearchQuery]);
785
+ const displayedLogs = import_react3.default.useMemo(() => {
786
+ if (agenticSearchState.status === "results" && agenticSearchState.results.length > 0) {
787
+ return agenticSearchState.results;
788
+ }
789
+ return filteredLogs;
790
+ }, [agenticSearchState, filteredLogs]);
791
+ const maxLabelWidth = Math.max(30, columns - 4);
792
+ const treeNodes = import_react3.default.useMemo(() => {
793
+ if (!isResumeWithRenameEnabled) {
794
+ return [];
795
+ }
796
+ const sessionGroups = groupLogsBySessionId(displayedLogs);
797
+ return Array.from(sessionGroups.entries()).map(([sessionId, groupLogs]) => {
798
+ const latestLog = groupLogs[0];
799
+ const indexInFiltered = displayedLogs.indexOf(latestLog);
800
+ const snippet = snippets.get(latestLog);
801
+ const snippetStr = snippet ? formatSnippet(snippet, highlightColor) : null;
802
+ if (groupLogs.length === 1) {
803
+ const metadata = buildLogMetadata(latestLog, {
804
+ showProjectPath: showAllProjects
805
+ });
806
+ return {
807
+ id: `log:${sessionId}:0`,
808
+ value: { log: latestLog, indexInFiltered },
809
+ label: buildLogLabel(latestLog, maxLabelWidth),
810
+ description: snippetStr ? `${metadata}
811
+ ${snippetStr}` : metadata,
812
+ dimDescription: true
813
+ };
814
+ }
815
+ const forkCount = groupLogs.length - 1;
816
+ const children = groupLogs.slice(1).map((log, index) => {
817
+ const childIndexInFiltered = displayedLogs.indexOf(log);
818
+ const childSnippet = snippets.get(log);
819
+ const childSnippetStr = childSnippet ? formatSnippet(childSnippet, highlightColor) : null;
820
+ const childMetadata = buildLogMetadata(log, {
821
+ isChild: true,
822
+ showProjectPath: showAllProjects
823
+ });
824
+ return {
825
+ id: `log:${sessionId}:${index + 1}`,
826
+ value: { log, indexInFiltered: childIndexInFiltered },
827
+ label: buildLogLabel(log, maxLabelWidth, { isChild: true }),
828
+ description: childSnippetStr ? `${childMetadata}
829
+ ${childSnippetStr}` : childMetadata,
830
+ dimDescription: true
831
+ };
832
+ });
833
+ const parentMetadata = buildLogMetadata(latestLog, {
834
+ showProjectPath: showAllProjects
835
+ });
836
+ return {
837
+ id: `group:${sessionId}`,
838
+ value: { log: latestLog, indexInFiltered },
839
+ label: buildLogLabel(latestLog, maxLabelWidth, {
840
+ isGroupHeader: true,
841
+ forkCount
842
+ }),
843
+ description: snippetStr ? `${parentMetadata}
844
+ ${snippetStr}` : parentMetadata,
845
+ dimDescription: true,
846
+ children
847
+ };
848
+ });
849
+ }, [
850
+ isResumeWithRenameEnabled,
851
+ displayedLogs,
852
+ maxLabelWidth,
853
+ showAllProjects,
854
+ snippets,
855
+ highlightColor
856
+ ]);
857
+ const flatOptions = import_react3.default.useMemo(() => {
858
+ if (isResumeWithRenameEnabled) {
859
+ return [];
860
+ }
861
+ return displayedLogs.map((log, index) => {
862
+ const rawSummary = getLogDisplayTitle(log);
863
+ const summaryWithSidechain = rawSummary + (log.isSidechain ? " (sidechain)" : "");
864
+ const summary = normalizeAndTruncateToWidth(summaryWithSidechain, maxLabelWidth);
865
+ const baseDescription = formatLogMetadata(log);
866
+ const projectSuffix = showAllProjects && log.projectPath ? ` \xB7 ${log.projectPath}` : "";
867
+ const snippet = snippets.get(log);
868
+ const snippetStr = snippet ? formatSnippet(snippet, highlightColor) : null;
869
+ return {
870
+ label: summary,
871
+ description: snippetStr ? `${baseDescription}${projectSuffix}
872
+ ${snippetStr}` : baseDescription + projectSuffix,
873
+ dimDescription: true,
874
+ value: index.toString()
875
+ };
876
+ });
877
+ }, [
878
+ isResumeWithRenameEnabled,
879
+ displayedLogs,
880
+ highlightColor,
881
+ maxLabelWidth,
882
+ showAllProjects,
883
+ snippets
884
+ ]);
885
+ const focusedLog = focusedNode?.value.log ?? null;
886
+ const getExpandCollapseHint = () => {
887
+ if (!isResumeWithRenameEnabled || !focusedLog)
888
+ return "";
889
+ const sessionId = getSessionIdFromLog(focusedLog);
890
+ if (!sessionId)
891
+ return "";
892
+ const sessionLogs = displayedLogs.filter((log) => getSessionIdFromLog(log) === sessionId);
893
+ const hasMultipleLogs = sessionLogs.length > 1;
894
+ if (!hasMultipleLogs)
895
+ return "";
896
+ const isExpanded = expandedGroupSessionIds.has(sessionId);
897
+ const isChildNode = sessionLogs.indexOf(focusedLog) > 0;
898
+ if (isChildNode) {
899
+ return "\u2190 to collapse";
900
+ }
901
+ return isExpanded ? "\u2190 to collapse" : "\u2192 to expand";
902
+ };
903
+ const handleRenameSubmit = import_react3.default.useCallback(async () => {
904
+ const sessionId = focusedLog ? getSessionIdFromLog(focusedLog) : undefined;
905
+ if (!focusedLog || !sessionId) {
906
+ setViewMode("list");
907
+ setRenameValue("");
908
+ return;
909
+ }
910
+ if (renameValue.trim()) {
911
+ await saveCustomTitle(sessionId, renameValue.trim(), focusedLog.fullPath);
912
+ if (isResumeWithRenameEnabled && onLogsChanged) {
913
+ onLogsChanged();
914
+ }
915
+ }
916
+ setViewMode("list");
917
+ setRenameValue("");
918
+ }, [focusedLog, renameValue, onLogsChanged, isResumeWithRenameEnabled]);
919
+ const exitSearchMode = import_react3.default.useCallback(() => {
920
+ setViewMode("list");
921
+ logEvent("tengu_session_search_toggled", { enabled: false });
922
+ }, []);
923
+ const enterSearchMode = import_react3.default.useCallback(() => {
924
+ setViewMode("search");
925
+ logEvent("tengu_session_search_toggled", { enabled: true });
926
+ }, []);
927
+ const handleAgenticSearch = import_react3.default.useCallback(async () => {
928
+ if (!searchQuery.trim() || !onAgenticSearch || !isAgenticSearchEnabled) {
929
+ return;
930
+ }
931
+ agenticSearchAbortRef.current?.abort();
932
+ const abortController = new AbortController;
933
+ agenticSearchAbortRef.current = abortController;
934
+ setAgenticSearchState({ status: "searching" });
935
+ logEvent("tengu_agentic_search_started", {
936
+ query_length: searchQuery.length
937
+ });
938
+ try {
939
+ const results = await onAgenticSearch(searchQuery, logs, abortController.signal);
940
+ if (abortController.signal.aborted) {
941
+ return;
942
+ }
943
+ setAgenticSearchState({ status: "results", results, query: searchQuery });
944
+ logEvent("tengu_agentic_search_completed", {
945
+ query_length: searchQuery.length,
946
+ results_count: results.length
947
+ });
948
+ } catch (error) {
949
+ if (abortController.signal.aborted) {
950
+ return;
951
+ }
952
+ setAgenticSearchState({
953
+ status: "error",
954
+ message: error instanceof Error ? error.message : "Search failed"
955
+ });
956
+ logEvent("tengu_agentic_search_error", {
957
+ query_length: searchQuery.length
958
+ });
959
+ }
960
+ }, [searchQuery, onAgenticSearch, isAgenticSearchEnabled, logs]);
961
+ import_react3.default.useEffect(() => {
962
+ if (agenticSearchState.status !== "idle" && agenticSearchState.status !== "searching") {
963
+ if (agenticSearchState.status === "results" && agenticSearchState.query !== searchQuery || agenticSearchState.status === "error") {
964
+ setAgenticSearchState({ status: "idle" });
965
+ }
966
+ }
967
+ }, [searchQuery, agenticSearchState]);
968
+ import_react3.default.useEffect(() => {
969
+ return () => {
970
+ agenticSearchAbortRef.current?.abort();
971
+ };
972
+ }, []);
973
+ const prevAgenticStatusRef = import_react3.default.useRef(agenticSearchState.status);
974
+ import_react3.default.useEffect(() => {
975
+ const prevStatus = prevAgenticStatusRef.current;
976
+ prevAgenticStatusRef.current = agenticSearchState.status;
977
+ if (prevStatus === "searching" && agenticSearchState.status === "results") {
978
+ if (isResumeWithRenameEnabled && treeNodes.length > 0) {
979
+ setFocusedNode(treeNodes[0]);
980
+ } else if (!isResumeWithRenameEnabled && displayedLogs.length > 0) {
981
+ const firstLog = displayedLogs[0];
982
+ setFocusedNode({
983
+ id: "0",
984
+ value: { log: firstLog, indexInFiltered: 0 },
985
+ label: ""
986
+ });
987
+ }
988
+ }
989
+ }, [
990
+ agenticSearchState.status,
991
+ isResumeWithRenameEnabled,
992
+ treeNodes,
993
+ displayedLogs
994
+ ]);
995
+ const handleFlatOptionsSelectFocus = import_react3.default.useCallback((value) => {
996
+ const index = parseInt(value, 10);
997
+ const log = displayedLogs[index];
998
+ if (!log || prevFocusedIdRef.current === index.toString()) {
999
+ return;
1000
+ }
1001
+ prevFocusedIdRef.current = index.toString();
1002
+ setFocusedNode({
1003
+ id: index.toString(),
1004
+ value: { log, indexInFiltered: index },
1005
+ label: ""
1006
+ });
1007
+ setFocusedIndex(index + 1);
1008
+ }, [displayedLogs]);
1009
+ const handleTreeSelectFocus = import_react3.default.useCallback((node) => {
1010
+ setFocusedNode(node);
1011
+ const index = displayedLogs.findIndex((log) => getSessionIdFromLog(log) === getSessionIdFromLog(node.value.log));
1012
+ if (index >= 0) {
1013
+ setFocusedIndex(index + 1);
1014
+ }
1015
+ }, [displayedLogs]);
1016
+ useKeybinding("confirm:no", () => {
1017
+ agenticSearchAbortRef.current?.abort();
1018
+ setAgenticSearchState({ status: "idle" });
1019
+ logEvent("tengu_agentic_search_cancelled", {});
1020
+ }, {
1021
+ context: "Confirmation",
1022
+ isActive: viewMode !== "preview" && agenticSearchState.status === "searching"
1023
+ });
1024
+ useKeybinding("confirm:no", () => {
1025
+ setViewMode("list");
1026
+ setRenameValue("");
1027
+ }, {
1028
+ context: "Settings",
1029
+ isActive: viewMode === "rename" && agenticSearchState.status !== "searching"
1030
+ });
1031
+ useKeybinding("confirm:no", () => {
1032
+ setSearchQuery("");
1033
+ setIsAgenticSearchOptionFocused(false);
1034
+ onCancel?.();
1035
+ }, {
1036
+ context: "Confirmation",
1037
+ isActive: viewMode !== "preview" && viewMode !== "rename" && viewMode !== "search" && isAgenticSearchOptionFocused && agenticSearchState.status !== "searching"
1038
+ });
1039
+ use_input_default((input, key) => {
1040
+ if (viewMode === "preview") {
1041
+ return;
1042
+ }
1043
+ if (agenticSearchState.status === "searching") {
1044
+ return;
1045
+ }
1046
+ if (viewMode === "rename") {} else if (viewMode === "search") {
1047
+ if (input.toLowerCase() === "n" && key.ctrl) {
1048
+ exitSearchMode();
1049
+ } else if (key.return || key.downArrow) {
1050
+ if (searchQuery.trim() && onAgenticSearch && isAgenticSearchEnabled && agenticSearchState.status !== "results") {
1051
+ setIsAgenticSearchOptionFocused(true);
1052
+ }
1053
+ }
1054
+ } else {
1055
+ if (isAgenticSearchOptionFocused) {
1056
+ if (key.return) {
1057
+ handleAgenticSearch();
1058
+ setIsAgenticSearchOptionFocused(false);
1059
+ return;
1060
+ } else if (key.downArrow) {
1061
+ setIsAgenticSearchOptionFocused(false);
1062
+ return;
1063
+ } else if (key.upArrow) {
1064
+ setViewMode("search");
1065
+ setIsAgenticSearchOptionFocused(false);
1066
+ return;
1067
+ }
1068
+ }
1069
+ if (hasTags && key.tab) {
1070
+ const offset = key.shift ? -1 : 1;
1071
+ setSelectedTagIndex((prev) => {
1072
+ const current = prev < tagTabs.length ? prev : 0;
1073
+ const newIndex = (current + tagTabs.length + offset) % tagTabs.length;
1074
+ const newTab = tagTabs[newIndex];
1075
+ logEvent("tengu_session_tag_filter_changed", {
1076
+ is_all: newTab === "All",
1077
+ tag_count: uniqueTags.length
1078
+ });
1079
+ return newIndex;
1080
+ });
1081
+ return;
1082
+ }
1083
+ const keyIsNotCtrlOrMeta = !key.ctrl && !key.meta;
1084
+ const lowerInput = input.toLowerCase();
1085
+ if (lowerInput === "a" && key.ctrl && onToggleAllProjects) {
1086
+ onToggleAllProjects();
1087
+ logEvent("tengu_session_all_projects_toggled", {
1088
+ enabled: !showAllProjects
1089
+ });
1090
+ } else if (lowerInput === "b" && key.ctrl) {
1091
+ const newEnabled = !branchFilterEnabled;
1092
+ setBranchFilterEnabled(newEnabled);
1093
+ logEvent("tengu_session_branch_filter_toggled", {
1094
+ enabled: newEnabled
1095
+ });
1096
+ } else if (lowerInput === "w" && key.ctrl && hasMultipleWorktrees) {
1097
+ const newValue = !showAllWorktrees;
1098
+ setShowAllWorktrees(newValue);
1099
+ logEvent("tengu_session_worktree_filter_toggled", {
1100
+ enabled: newValue
1101
+ });
1102
+ } else if (lowerInput === "/" && keyIsNotCtrlOrMeta) {
1103
+ setViewMode("search");
1104
+ logEvent("tengu_session_search_toggled", { enabled: true });
1105
+ } else if (lowerInput === "r" && key.ctrl && focusedLog) {
1106
+ setViewMode("rename");
1107
+ setRenameValue("");
1108
+ logEvent("tengu_session_rename_started", {});
1109
+ } else if (lowerInput === "v" && key.ctrl && focusedLog) {
1110
+ setPreviewLog(focusedLog);
1111
+ setViewMode("preview");
1112
+ logEvent("tengu_session_preview_opened", {
1113
+ messageCount: focusedLog.messageCount
1114
+ });
1115
+ } else if (focusedLog && keyIsNotCtrlOrMeta && input.length > 0 && !/^\s+$/.test(input)) {
1116
+ setViewMode("search");
1117
+ setSearchQuery(input);
1118
+ logEvent("tengu_session_search_toggled", { enabled: true });
1119
+ }
1120
+ }
1121
+ }, { isActive: true });
1122
+ const filterIndicators = [];
1123
+ if (branchFilterEnabled && currentBranch) {
1124
+ filterIndicators.push(currentBranch);
1125
+ }
1126
+ if (hasMultipleWorktrees && !showAllWorktrees) {
1127
+ filterIndicators.push("current worktree");
1128
+ }
1129
+ const showAdditionalFilterLine = filterIndicators.length > 0 && viewMode !== "search";
1130
+ const searchBoxLines = 3;
1131
+ const headerLines = 5 + searchBoxLines + (showAdditionalFilterLine ? 1 : 0) + tagTabsLines;
1132
+ const footerLines = 2;
1133
+ const visibleCount = Math.max(1, Math.floor((maxHeight - headerLines - footerLines) / 3));
1134
+ import_react3.default.useEffect(() => {
1135
+ if (!onLoadMore)
1136
+ return;
1137
+ const buffer = visibleCount * 2;
1138
+ if (focusedIndex + buffer >= displayedLogs.length) {
1139
+ onLoadMore(visibleCount * 3);
1140
+ }
1141
+ }, [focusedIndex, visibleCount, displayedLogs.length, onLoadMore]);
1142
+ if (logs.length === 0) {
1143
+ return null;
1144
+ }
1145
+ if (viewMode === "preview" && previewLog && isResumeWithRenameEnabled) {
1146
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SessionPreview, {
1147
+ log: previewLog,
1148
+ onExit: () => {
1149
+ setViewMode("list");
1150
+ setPreviewLog(null);
1151
+ },
1152
+ onSelect
1153
+ }, undefined, false, undefined, this);
1154
+ }
1155
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1156
+ flexDirection: "column",
1157
+ height: maxHeight - 1,
1158
+ children: [
1159
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1160
+ flexShrink: 0,
1161
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Divider, {
1162
+ color: "suggestion"
1163
+ }, undefined, false, undefined, this)
1164
+ }, undefined, false, undefined, this),
1165
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1166
+ flexShrink: 0,
1167
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1168
+ children: " "
1169
+ }, undefined, false, undefined, this)
1170
+ }, undefined, false, undefined, this),
1171
+ hasTags ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TagTabs, {
1172
+ tabs: tagTabs,
1173
+ selectedIndex: effectiveTagIndex,
1174
+ availableWidth: columns,
1175
+ showAllProjects
1176
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1177
+ flexShrink: 0,
1178
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1179
+ bold: true,
1180
+ color: "suggestion",
1181
+ children: [
1182
+ "Resume Session",
1183
+ viewMode === "list" && displayedLogs.length > visibleCount && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1184
+ dimColor: true,
1185
+ children: [
1186
+ " ",
1187
+ "(",
1188
+ focusedIndex,
1189
+ " of ",
1190
+ displayedLogs.length,
1191
+ ")"
1192
+ ]
1193
+ }, undefined, true, undefined, this)
1194
+ ]
1195
+ }, undefined, true, undefined, this)
1196
+ }, undefined, false, undefined, this),
1197
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SearchBox, {
1198
+ query: searchQuery,
1199
+ isFocused: viewMode === "search",
1200
+ isTerminalFocused,
1201
+ cursorOffset: searchCursorOffset
1202
+ }, undefined, false, undefined, this),
1203
+ filterIndicators.length > 0 && viewMode !== "search" && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1204
+ flexShrink: 0,
1205
+ paddingLeft: 2,
1206
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1207
+ dimColor: true,
1208
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1209
+ children: filterIndicators
1210
+ }, undefined, false, undefined, this)
1211
+ }, undefined, false, undefined, this)
1212
+ }, undefined, false, undefined, this),
1213
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1214
+ flexShrink: 0,
1215
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1216
+ children: " "
1217
+ }, undefined, false, undefined, this)
1218
+ }, undefined, false, undefined, this),
1219
+ agenticSearchState.status === "searching" && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1220
+ paddingLeft: 1,
1221
+ flexShrink: 0,
1222
+ children: [
1223
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Spinner, {}, undefined, false, undefined, this),
1224
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1225
+ children: " Searching\u2026"
1226
+ }, undefined, false, undefined, this)
1227
+ ]
1228
+ }, undefined, true, undefined, this),
1229
+ agenticSearchState.status === "results" && agenticSearchState.results.length > 0 && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1230
+ paddingLeft: 1,
1231
+ marginBottom: 1,
1232
+ flexShrink: 0,
1233
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1234
+ dimColor: true,
1235
+ italic: true,
1236
+ children: "Claude found these results:"
1237
+ }, undefined, false, undefined, this)
1238
+ }, undefined, false, undefined, this),
1239
+ agenticSearchState.status === "results" && agenticSearchState.results.length === 0 && filteredLogs.length === 0 && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1240
+ paddingLeft: 1,
1241
+ marginBottom: 1,
1242
+ flexShrink: 0,
1243
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1244
+ dimColor: true,
1245
+ italic: true,
1246
+ children: "No matching sessions found."
1247
+ }, undefined, false, undefined, this)
1248
+ }, undefined, false, undefined, this),
1249
+ agenticSearchState.status === "error" && filteredLogs.length === 0 && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1250
+ paddingLeft: 1,
1251
+ marginBottom: 1,
1252
+ flexShrink: 0,
1253
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1254
+ dimColor: true,
1255
+ italic: true,
1256
+ children: "No matching sessions found."
1257
+ }, undefined, false, undefined, this)
1258
+ }, undefined, false, undefined, this),
1259
+ Boolean(searchQuery.trim()) && onAgenticSearch && isAgenticSearchEnabled && agenticSearchState.status !== "searching" && agenticSearchState.status !== "results" && agenticSearchState.status !== "error" && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1260
+ flexShrink: 0,
1261
+ flexDirection: "column",
1262
+ children: [
1263
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1264
+ flexDirection: "row",
1265
+ gap: 1,
1266
+ children: [
1267
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1268
+ color: isAgenticSearchOptionFocused ? "suggestion" : undefined,
1269
+ children: isAgenticSearchOptionFocused ? figures_default.pointer : " "
1270
+ }, undefined, false, undefined, this),
1271
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1272
+ color: isAgenticSearchOptionFocused ? "suggestion" : undefined,
1273
+ bold: isAgenticSearchOptionFocused,
1274
+ children: "Search deeply using Claude \u2192"
1275
+ }, undefined, false, undefined, this)
1276
+ ]
1277
+ }, undefined, true, undefined, this),
1278
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1279
+ height: 1
1280
+ }, undefined, false, undefined, this)
1281
+ ]
1282
+ }, undefined, true, undefined, this),
1283
+ agenticSearchState.status === "searching" ? null : viewMode === "rename" && focusedLog ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1284
+ paddingLeft: 2,
1285
+ flexDirection: "column",
1286
+ children: [
1287
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1288
+ bold: true,
1289
+ children: "Rename session:"
1290
+ }, undefined, false, undefined, this),
1291
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1292
+ paddingTop: 1,
1293
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TextInput, {
1294
+ value: renameValue,
1295
+ onChange: setRenameValue,
1296
+ onSubmit: handleRenameSubmit,
1297
+ placeholder: getLogDisplayTitle(focusedLog, "Enter new session name"),
1298
+ columns,
1299
+ cursorOffset: renameCursorOffset,
1300
+ onChangeCursorOffset: setRenameCursorOffset,
1301
+ showCursor: true
1302
+ }, undefined, false, undefined, this)
1303
+ }, undefined, false, undefined, this)
1304
+ ]
1305
+ }, undefined, true, undefined, this) : isResumeWithRenameEnabled ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TreeSelect, {
1306
+ nodes: treeNodes,
1307
+ onSelect: (node) => {
1308
+ onSelect(node.value.log);
1309
+ },
1310
+ onFocus: handleTreeSelectFocus,
1311
+ onCancel,
1312
+ focusNodeId: focusedNode?.id,
1313
+ visibleOptionCount: visibleCount,
1314
+ layout: "expanded",
1315
+ isDisabled: viewMode === "search" || isAgenticSearchOptionFocused,
1316
+ hideIndexes: false,
1317
+ isNodeExpanded: (nodeId) => {
1318
+ if (viewMode === "search" || branchFilterEnabled) {
1319
+ return true;
1320
+ }
1321
+ const sessionId = typeof nodeId === "string" && nodeId.startsWith("group:") ? nodeId.substring(6) : null;
1322
+ return sessionId ? expandedGroupSessionIds.has(sessionId) : false;
1323
+ },
1324
+ onExpand: (nodeId) => {
1325
+ const sessionId = typeof nodeId === "string" && nodeId.startsWith("group:") ? nodeId.substring(6) : null;
1326
+ if (sessionId) {
1327
+ setExpandedGroupSessionIds((prev) => new Set(prev).add(sessionId));
1328
+ logEvent("tengu_session_group_expanded", {});
1329
+ }
1330
+ },
1331
+ onCollapse: (nodeId) => {
1332
+ const sessionId = typeof nodeId === "string" && nodeId.startsWith("group:") ? nodeId.substring(6) : null;
1333
+ if (sessionId) {
1334
+ setExpandedGroupSessionIds((prev) => {
1335
+ const newSet = new Set(prev);
1336
+ newSet.delete(sessionId);
1337
+ return newSet;
1338
+ });
1339
+ }
1340
+ },
1341
+ onUpFromFirstItem: enterSearchMode
1342
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Select, {
1343
+ options: flatOptions,
1344
+ onChange: (value) => {
1345
+ const itemIndex = parseInt(value, 10);
1346
+ const log = displayedLogs[itemIndex];
1347
+ if (log) {
1348
+ onSelect(log);
1349
+ }
1350
+ },
1351
+ visibleOptionCount: visibleCount,
1352
+ onCancel,
1353
+ onFocus: handleFlatOptionsSelectFocus,
1354
+ defaultFocusValue: focusedNode?.id.toString(),
1355
+ layout: "expanded",
1356
+ isDisabled: viewMode === "search" || isAgenticSearchOptionFocused,
1357
+ onUpFromFirstItem: enterSearchMode
1358
+ }, undefined, false, undefined, this),
1359
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedBox_default, {
1360
+ paddingLeft: 2,
1361
+ children: exitState.pending ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1362
+ dimColor: true,
1363
+ children: [
1364
+ "Press ",
1365
+ exitState.keyName,
1366
+ " again to exit"
1367
+ ]
1368
+ }, undefined, true, undefined, this) : viewMode === "rename" ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1369
+ dimColor: true,
1370
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1371
+ children: [
1372
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1373
+ shortcut: "Enter",
1374
+ action: "save"
1375
+ }, undefined, false, undefined, this),
1376
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ConfigurableShortcutHint, {
1377
+ action: "confirm:no",
1378
+ context: "Confirmation",
1379
+ fallback: "Esc",
1380
+ description: "cancel"
1381
+ }, undefined, false, undefined, this)
1382
+ ]
1383
+ }, undefined, true, undefined, this)
1384
+ }, undefined, false, undefined, this) : agenticSearchState.status === "searching" ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1385
+ dimColor: true,
1386
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1387
+ children: [
1388
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1389
+ children: "Searching with Claude\u2026"
1390
+ }, undefined, false, undefined, this),
1391
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ConfigurableShortcutHint, {
1392
+ action: "confirm:no",
1393
+ context: "Confirmation",
1394
+ fallback: "Esc",
1395
+ description: "cancel"
1396
+ }, undefined, false, undefined, this)
1397
+ ]
1398
+ }, undefined, true, undefined, this)
1399
+ }, undefined, false, undefined, this) : isAgenticSearchOptionFocused ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1400
+ dimColor: true,
1401
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1402
+ children: [
1403
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1404
+ shortcut: "Enter",
1405
+ action: "search"
1406
+ }, undefined, false, undefined, this),
1407
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1408
+ shortcut: "\u2193",
1409
+ action: "skip"
1410
+ }, undefined, false, undefined, this),
1411
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ConfigurableShortcutHint, {
1412
+ action: "confirm:no",
1413
+ context: "Confirmation",
1414
+ fallback: "Esc",
1415
+ description: "cancel"
1416
+ }, undefined, false, undefined, this)
1417
+ ]
1418
+ }, undefined, true, undefined, this)
1419
+ }, undefined, false, undefined, this) : viewMode === "search" ? /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1420
+ dimColor: true,
1421
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1422
+ children: [
1423
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1424
+ children: isSearching && isDeepSearchEnabled ? "Searching\u2026" : "Type to Search"
1425
+ }, undefined, false, undefined, this),
1426
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1427
+ shortcut: "Enter",
1428
+ action: "select"
1429
+ }, undefined, false, undefined, this),
1430
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ConfigurableShortcutHint, {
1431
+ action: "confirm:no",
1432
+ context: "Confirmation",
1433
+ fallback: "Esc",
1434
+ description: "clear"
1435
+ }, undefined, false, undefined, this)
1436
+ ]
1437
+ }, undefined, true, undefined, this)
1438
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1439
+ dimColor: true,
1440
+ children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Byline, {
1441
+ children: [
1442
+ onToggleAllProjects && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1443
+ shortcut: "Ctrl+A",
1444
+ action: `show ${showAllProjects ? "current dir" : "all projects"}`
1445
+ }, undefined, false, undefined, this),
1446
+ currentBranch && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1447
+ shortcut: "Ctrl+B",
1448
+ action: "toggle branch"
1449
+ }, undefined, false, undefined, this),
1450
+ hasMultipleWorktrees && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1451
+ shortcut: "Ctrl+W",
1452
+ action: `show ${showAllWorktrees ? "current worktree" : "all worktrees"}`
1453
+ }, undefined, false, undefined, this),
1454
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1455
+ shortcut: "Ctrl+V",
1456
+ action: "preview"
1457
+ }, undefined, false, undefined, this),
1458
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(KeyboardShortcutHint, {
1459
+ shortcut: "Ctrl+R",
1460
+ action: "rename"
1461
+ }, undefined, false, undefined, this),
1462
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1463
+ children: "Type to search"
1464
+ }, undefined, false, undefined, this),
1465
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ConfigurableShortcutHint, {
1466
+ action: "confirm:no",
1467
+ context: "Confirmation",
1468
+ fallback: "Esc",
1469
+ description: "cancel"
1470
+ }, undefined, false, undefined, this),
1471
+ getExpandCollapseHint() && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(ThemedText, {
1472
+ children: getExpandCollapseHint()
1473
+ }, undefined, false, undefined, this)
1474
+ ]
1475
+ }, undefined, true, undefined, this)
1476
+ }, undefined, false, undefined, this)
1477
+ }, undefined, false, undefined, this)
1478
+ ]
1479
+ }, undefined, true, undefined, this);
1480
+ }
1481
+ function extractSearchableText(message) {
1482
+ if (message.type !== "user" && message.type !== "assistant") {
1483
+ return "";
1484
+ }
1485
+ const content = "message" in message ? message.message?.content : undefined;
1486
+ if (!content)
1487
+ return "";
1488
+ if (typeof content === "string") {
1489
+ return content;
1490
+ }
1491
+ if (Array.isArray(content)) {
1492
+ return content.map((block) => {
1493
+ if (typeof block === "string")
1494
+ return block;
1495
+ if ("text" in block && typeof block.text === "string")
1496
+ return block.text;
1497
+ return "";
1498
+ }).filter(Boolean).join(" ");
1499
+ }
1500
+ return "";
1501
+ }
1502
+ function buildSearchableText(log) {
1503
+ const searchableMessages = log.messages.length <= DEEP_SEARCH_MAX_MESSAGES ? log.messages : [
1504
+ ...log.messages.slice(0, DEEP_SEARCH_CROP_SIZE),
1505
+ ...log.messages.slice(-DEEP_SEARCH_CROP_SIZE)
1506
+ ];
1507
+ const messageText = searchableMessages.map(extractSearchableText).filter(Boolean).join(" ");
1508
+ const metadata = [
1509
+ log.customTitle,
1510
+ log.summary,
1511
+ log.firstPrompt,
1512
+ log.gitBranch,
1513
+ log.tag,
1514
+ log.prNumber ? `PR #${log.prNumber}` : undefined,
1515
+ log.prRepository
1516
+ ].filter(Boolean).join(" ");
1517
+ const fullText = `${metadata} ${messageText}`.trim();
1518
+ return fullText.length > DEEP_SEARCH_MAX_TEXT_LENGTH ? fullText.slice(0, DEEP_SEARCH_MAX_TEXT_LENGTH) : fullText;
1519
+ }
1520
+ function groupLogsBySessionId(filteredLogs) {
1521
+ const groups = new Map;
1522
+ for (const log of filteredLogs) {
1523
+ const sessionId = getSessionIdFromLog(log);
1524
+ if (sessionId) {
1525
+ const existing = groups.get(sessionId);
1526
+ if (existing) {
1527
+ existing.push(log);
1528
+ } else {
1529
+ groups.set(sessionId, [log]);
1530
+ }
1531
+ }
1532
+ }
1533
+ groups.forEach((logs) => logs.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime()));
1534
+ return groups;
1535
+ }
1536
+ function getUniqueTags(logs) {
1537
+ const tags = new Set;
1538
+ for (const log of logs) {
1539
+ if (log.tag) {
1540
+ tags.add(log.tag);
1541
+ }
1542
+ }
1543
+ return Array.from(tags).sort((a, b) => a.localeCompare(b));
1544
+ }
1545
+ var import_react3, jsx_dev_runtime4, PARENT_PREFIX_WIDTH = 2, CHILD_PREFIX_WIDTH = 4, DEEP_SEARCH_MAX_MESSAGES = 2000, DEEP_SEARCH_CROP_SIZE = 1000, DEEP_SEARCH_MAX_TEXT_LENGTH = 50000, FUSE_THRESHOLD = 0.3, DATE_TIE_THRESHOLD_MS, SNIPPET_CONTEXT_CHARS = 50;
1546
+ var init_LogSelector = __esm(() => {
1547
+ init_source();
1548
+ init_figures();
1549
+ init_fuse();
1550
+ init_state();
1551
+ init_useExitOnCtrlCDWithKeybindings();
1552
+ init_useSearchInput();
1553
+ init_useTerminalSize();
1554
+ init_src();
1555
+ init_useKeybinding();
1556
+ init_analytics();
1557
+ init_format();
1558
+ init_getWorktreePaths();
1559
+ init_git();
1560
+ init_log();
1561
+ init_sessionStorage();
1562
+ init_theme();
1563
+ init_ConfigurableShortcutHint();
1564
+ init_select();
1565
+ init_SearchBox();
1566
+ init_SessionPreview();
1567
+ init_Spinner();
1568
+ init_TagTabs();
1569
+ init_TextInput();
1570
+ init_TreeSelect();
1571
+ import_react3 = __toESM(require_react(), 1);
1572
+ jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
1573
+ DATE_TIE_THRESHOLD_MS = 60 * 1000;
1574
+ });
1575
+
1576
+ // src/utils/agenticSessionSearch.ts
1577
+ function extractMessageText(message) {
1578
+ if (message.type !== "user" && message.type !== "assistant") {
1579
+ return "";
1580
+ }
1581
+ const content = "message" in message ? message.message?.content : undefined;
1582
+ if (!content)
1583
+ return "";
1584
+ if (typeof content === "string") {
1585
+ return content;
1586
+ }
1587
+ if (Array.isArray(content)) {
1588
+ return content.map((block) => {
1589
+ if (typeof block === "string")
1590
+ return block;
1591
+ if ("text" in block && typeof block.text === "string")
1592
+ return block.text;
1593
+ return "";
1594
+ }).filter(Boolean).join(" ");
1595
+ }
1596
+ return "";
1597
+ }
1598
+ function extractTranscript(messages) {
1599
+ if (messages.length === 0)
1600
+ return "";
1601
+ const messagesToScan = messages.length <= MAX_MESSAGES_TO_SCAN ? messages : [
1602
+ ...messages.slice(0, MAX_MESSAGES_TO_SCAN / 2),
1603
+ ...messages.slice(-MAX_MESSAGES_TO_SCAN / 2)
1604
+ ];
1605
+ const text = messagesToScan.map(extractMessageText).filter(Boolean).join(" ").replace(/\s+/g, " ").trim();
1606
+ return text.length > MAX_TRANSCRIPT_CHARS ? text.slice(0, MAX_TRANSCRIPT_CHARS) + "\u2026" : text;
1607
+ }
1608
+ function logContainsQuery(log, queryLower) {
1609
+ const title = getLogDisplayTitle(log).toLowerCase();
1610
+ if (title.includes(queryLower))
1611
+ return true;
1612
+ if (log.customTitle?.toLowerCase().includes(queryLower))
1613
+ return true;
1614
+ if (log.tag?.toLowerCase().includes(queryLower))
1615
+ return true;
1616
+ if (log.gitBranch?.toLowerCase().includes(queryLower))
1617
+ return true;
1618
+ if (log.summary?.toLowerCase().includes(queryLower))
1619
+ return true;
1620
+ if (log.firstPrompt?.toLowerCase().includes(queryLower))
1621
+ return true;
1622
+ if (log.messages && log.messages.length > 0) {
1623
+ const transcript = extractTranscript(log.messages).toLowerCase();
1624
+ if (transcript.includes(queryLower))
1625
+ return true;
1626
+ }
1627
+ return false;
1628
+ }
1629
+ async function agenticSessionSearch(query, logs, signal) {
1630
+ if (!query.trim() || logs.length === 0) {
1631
+ return [];
1632
+ }
1633
+ const queryLower = query.toLowerCase();
1634
+ const matchingLogs = logs.filter((log) => logContainsQuery(log, queryLower));
1635
+ let logsToSearch;
1636
+ if (matchingLogs.length >= MAX_SESSIONS_TO_SEARCH) {
1637
+ logsToSearch = matchingLogs.slice(0, MAX_SESSIONS_TO_SEARCH);
1638
+ } else {
1639
+ const nonMatchingLogs = logs.filter((log) => !logContainsQuery(log, queryLower));
1640
+ const remainingSlots = MAX_SESSIONS_TO_SEARCH - matchingLogs.length;
1641
+ logsToSearch = [
1642
+ ...matchingLogs,
1643
+ ...nonMatchingLogs.slice(0, remainingSlots)
1644
+ ];
1645
+ }
1646
+ logForDebugging(`Agentic search: ${logsToSearch.length}/${logs.length} logs, query="${query}", ` + `matching: ${matchingLogs.length}, with messages: ${count(logsToSearch, (l) => l.messages?.length > 0)}`);
1647
+ const logsWithTranscriptsPromises = logsToSearch.map(async (log) => {
1648
+ if (isLiteLog(log)) {
1649
+ try {
1650
+ return await loadFullLog(log);
1651
+ } catch (error) {
1652
+ logError(error);
1653
+ return log;
1654
+ }
1655
+ }
1656
+ return log;
1657
+ });
1658
+ const logsWithTranscripts = await Promise.all(logsWithTranscriptsPromises);
1659
+ logForDebugging(`Agentic search: loaded ${count(logsWithTranscripts, (l) => l.messages?.length > 0)}/${logsToSearch.length} logs with transcripts`);
1660
+ const sessionList = logsWithTranscripts.map((log, index) => {
1661
+ const parts = [`${index}:`];
1662
+ const displayTitle = getLogDisplayTitle(log);
1663
+ parts.push(displayTitle);
1664
+ if (log.customTitle && log.customTitle !== displayTitle) {
1665
+ parts.push(`[custom title: ${log.customTitle}]`);
1666
+ }
1667
+ if (log.tag) {
1668
+ parts.push(`[tag: ${log.tag}]`);
1669
+ }
1670
+ if (log.gitBranch) {
1671
+ parts.push(`[branch: ${log.gitBranch}]`);
1672
+ }
1673
+ if (log.summary) {
1674
+ parts.push(`- Summary: ${log.summary}`);
1675
+ }
1676
+ if (log.firstPrompt && log.firstPrompt !== "No prompt") {
1677
+ parts.push(`- First message: ${log.firstPrompt.slice(0, 300)}`);
1678
+ }
1679
+ if (log.messages && log.messages.length > 0) {
1680
+ const transcript = extractTranscript(log.messages);
1681
+ if (transcript) {
1682
+ parts.push(`- Transcript: ${transcript}`);
1683
+ }
1684
+ }
1685
+ return parts.join(" ");
1686
+ }).join(`
1687
+ `);
1688
+ const userMessage = `Sessions:
1689
+ ${sessionList}
1690
+
1691
+ Search query: "${query}"
1692
+
1693
+ Find the sessions that are most relevant to this query.`;
1694
+ logForDebugging(`Agentic search prompt (first 500 chars): ${userMessage.slice(0, 500)}...`);
1695
+ try {
1696
+ const model = getSmallFastModel();
1697
+ logForDebugging(`Agentic search using model: ${model}`);
1698
+ const response = await sideQuery({
1699
+ model,
1700
+ system: SESSION_SEARCH_SYSTEM_PROMPT,
1701
+ messages: [{ role: "user", content: userMessage }],
1702
+ signal,
1703
+ querySource: "session_search"
1704
+ });
1705
+ const textContent = response.content.find((block) => block.type === "text");
1706
+ if (!textContent || textContent.type !== "text") {
1707
+ logForDebugging("No text content in agentic search response");
1708
+ return [];
1709
+ }
1710
+ logForDebugging(`Agentic search response: ${textContent.text}`);
1711
+ const jsonMatch = textContent.text.match(/\{[\s\S]*\}/);
1712
+ if (!jsonMatch) {
1713
+ logForDebugging("Could not find JSON in agentic search response");
1714
+ return [];
1715
+ }
1716
+ const result = jsonParse(jsonMatch[0]);
1717
+ const relevantIndices = result.relevant_indices || [];
1718
+ const relevantLogs = relevantIndices.filter((index) => index >= 0 && index < logsWithTranscripts.length).map((index) => logsWithTranscripts[index]);
1719
+ logForDebugging(`Agentic search found ${relevantLogs.length} relevant sessions`);
1720
+ return relevantLogs;
1721
+ } catch (error) {
1722
+ logError(error);
1723
+ logForDebugging(`Agentic search error: ${error}`);
1724
+ return [];
1725
+ }
1726
+ }
1727
+ var MAX_TRANSCRIPT_CHARS = 2000, MAX_MESSAGES_TO_SCAN = 100, MAX_SESSIONS_TO_SEARCH = 100, SESSION_SEARCH_SYSTEM_PROMPT = `Your goal is to find relevant sessions based on a user's search query.
1728
+
1729
+ You will be given a list of sessions with their metadata and a search query. Identify which sessions are most relevant to the query.
1730
+
1731
+ Each session may include:
1732
+ - Title (display name or custom title)
1733
+ - Tag (user-assigned category, shown as [tag: name] - users tag sessions with /tag command to categorize them)
1734
+ - Branch (git branch name, shown as [branch: name])
1735
+ - Summary (AI-generated summary)
1736
+ - First message (beginning of the conversation)
1737
+ - Transcript (excerpt of conversation content)
1738
+
1739
+ IMPORTANT: Tags are user-assigned labels that indicate the session's topic or category. If the query matches a tag exactly or partially, those sessions should be highly prioritized.
1740
+
1741
+ For each session, consider (in order of priority):
1742
+ 1. Exact tag matches (highest priority - user explicitly categorized this session)
1743
+ 2. Partial tag matches or tag-related terms
1744
+ 3. Title matches (custom titles or first message content)
1745
+ 4. Branch name matches
1746
+ 5. Summary and transcript content matches
1747
+ 6. Semantic similarity and related concepts
1748
+
1749
+ CRITICAL: Be VERY inclusive in your matching. Include sessions that:
1750
+ - Contain the query term anywhere in any field
1751
+ - Are semantically related to the query (e.g., "testing" matches sessions about "tests", "unit tests", "QA", etc.)
1752
+ - Discuss topics that could be related to the query
1753
+ - Have transcripts that mention the concept even in passing
1754
+
1755
+ When in doubt, INCLUDE the session. It's better to return too many results than too few. The user can easily scan through results, but missing relevant sessions is frustrating.
1756
+
1757
+ Return sessions ordered by relevance (most relevant first). If truly no sessions have ANY connection to the query, return an empty array - but this should be rare.
1758
+
1759
+ Respond with ONLY the JSON object, no markdown formatting:
1760
+ {"relevant_indices": [2, 5, 0]}`;
1761
+ var init_agenticSessionSearch = __esm(() => {
1762
+ init_array();
1763
+ init_debug();
1764
+ init_log();
1765
+ init_model();
1766
+ init_sessionStorage();
1767
+ init_sideQuery();
1768
+ init_slowOperations();
1769
+ });
1770
+
1771
+ // src/utils/crossProjectResume.ts
1772
+ import { sep } from "path";
1773
+ function checkCrossProjectResume(log, showAllProjects, worktreePaths) {
1774
+ const currentCwd = getOriginalCwd();
1775
+ if (!showAllProjects || !log.projectPath || log.projectPath === currentCwd) {
1776
+ return { isCrossProject: false };
1777
+ }
1778
+ if (process.env.USER_TYPE !== "ant") {
1779
+ const sessionId2 = getSessionIdFromLog(log);
1780
+ const command2 = `cd ${quote([log.projectPath])} && claude --resume ${sessionId2}`;
1781
+ return {
1782
+ isCrossProject: true,
1783
+ isSameRepoWorktree: false,
1784
+ command: command2,
1785
+ projectPath: log.projectPath
1786
+ };
1787
+ }
1788
+ const isSameRepo = worktreePaths.some((wt) => log.projectPath === wt || log.projectPath.startsWith(wt + sep));
1789
+ if (isSameRepo) {
1790
+ return {
1791
+ isCrossProject: true,
1792
+ isSameRepoWorktree: true,
1793
+ projectPath: log.projectPath
1794
+ };
1795
+ }
1796
+ const sessionId = getSessionIdFromLog(log);
1797
+ const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`;
1798
+ return {
1799
+ isCrossProject: true,
1800
+ isSameRepoWorktree: false,
1801
+ command,
1802
+ projectPath: log.projectPath
1803
+ };
1804
+ }
1805
+ var init_crossProjectResume = __esm(() => {
1806
+ init_state();
1807
+ init_shellQuote();
1808
+ init_sessionStorage();
1809
+ });
1810
+
1811
+ export { LogSelector, init_LogSelector, agenticSessionSearch, init_agenticSessionSearch, checkCrossProjectResume, init_crossProjectResume };