@cofy-x/dsh-console 0.1.0-alpha.2 → 0.1.0-alpha.4

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 (685) hide show
  1. package/dist/{chunk-JFPTU3O3.js → chunk-ZO6HZW3P.js} +870 -816
  2. package/dist/dsh/index.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/ui/components/layout/resources/pokemon/1.txt +10 -0
  5. package/dist/ui/components/layout/resources/pokemon/10.txt +8 -0
  6. package/dist/ui/components/layout/resources/pokemon/100.txt +7 -0
  7. package/dist/ui/components/layout/resources/pokemon/10002.txt +12 -0
  8. package/dist/ui/components/layout/resources/pokemon/10004.txt +12 -0
  9. package/dist/ui/components/layout/resources/pokemon/10005.txt +12 -0
  10. package/dist/ui/components/layout/resources/pokemon/10006.txt +11 -0
  11. package/dist/ui/components/layout/resources/pokemon/10013.txt +10 -0
  12. package/dist/ui/components/layout/resources/pokemon/10014.txt +11 -0
  13. package/dist/ui/components/layout/resources/pokemon/10015.txt +12 -0
  14. package/dist/ui/components/layout/resources/pokemon/10016.txt +12 -0
  15. package/dist/ui/components/layout/resources/pokemon/10017.txt +12 -0
  16. package/dist/ui/components/layout/resources/pokemon/10018.txt +12 -0
  17. package/dist/ui/components/layout/resources/pokemon/10027.txt +9 -0
  18. package/dist/ui/components/layout/resources/pokemon/10028.txt +10 -0
  19. package/dist/ui/components/layout/resources/pokemon/10029.txt +11 -0
  20. package/dist/ui/components/layout/resources/pokemon/10030.txt +11 -0
  21. package/dist/ui/components/layout/resources/pokemon/10039.txt +11 -0
  22. package/dist/ui/components/layout/resources/pokemon/10042.txt +12 -0
  23. package/dist/ui/components/layout/resources/pokemon/10051.txt +12 -0
  24. package/dist/ui/components/layout/resources/pokemon/10055.txt +12 -0
  25. package/dist/ui/components/layout/resources/pokemon/10059.txt +12 -0
  26. package/dist/ui/components/layout/resources/pokemon/10062.txt +12 -0
  27. package/dist/ui/components/layout/resources/pokemon/10063.txt +12 -0
  28. package/dist/ui/components/layout/resources/pokemon/10064.txt +12 -0
  29. package/dist/ui/components/layout/resources/pokemon/10067.txt +12 -0
  30. package/dist/ui/components/layout/resources/pokemon/10074.txt +12 -0
  31. package/dist/ui/components/layout/resources/pokemon/10076.txt +12 -0
  32. package/dist/ui/components/layout/resources/pokemon/10077.txt +11 -0
  33. package/dist/ui/components/layout/resources/pokemon/10078.txt +12 -0
  34. package/dist/ui/components/layout/resources/pokemon/10080.txt +10 -0
  35. package/dist/ui/components/layout/resources/pokemon/10082.txt +10 -0
  36. package/dist/ui/components/layout/resources/pokemon/10083.txt +10 -0
  37. package/dist/ui/components/layout/resources/pokemon/10084.txt +10 -0
  38. package/dist/ui/components/layout/resources/pokemon/10085.txt +10 -0
  39. package/dist/ui/components/layout/resources/pokemon/10088.txt +12 -0
  40. package/dist/ui/components/layout/resources/pokemon/101.txt +8 -0
  41. package/dist/ui/components/layout/resources/pokemon/102.txt +9 -0
  42. package/dist/ui/components/layout/resources/pokemon/104.txt +10 -0
  43. package/dist/ui/components/layout/resources/pokemon/108.txt +9 -0
  44. package/dist/ui/components/layout/resources/pokemon/11.txt +9 -0
  45. package/dist/ui/components/layout/resources/pokemon/111.txt +10 -0
  46. package/dist/ui/components/layout/resources/pokemon/113.txt +10 -0
  47. package/dist/ui/components/layout/resources/pokemon/114.txt +9 -0
  48. package/dist/ui/components/layout/resources/pokemon/116.txt +9 -0
  49. package/dist/ui/components/layout/resources/pokemon/117.txt +10 -0
  50. package/dist/ui/components/layout/resources/pokemon/118.txt +10 -0
  51. package/dist/ui/components/layout/resources/pokemon/120.txt +9 -0
  52. package/dist/ui/components/layout/resources/pokemon/129.txt +12 -0
  53. package/dist/ui/components/layout/resources/pokemon/13.txt +9 -0
  54. package/dist/ui/components/layout/resources/pokemon/132.txt +7 -0
  55. package/dist/ui/components/layout/resources/pokemon/133-starter.txt +11 -0
  56. package/dist/ui/components/layout/resources/pokemon/133.txt +9 -0
  57. package/dist/ui/components/layout/resources/pokemon/137.txt +9 -0
  58. package/dist/ui/components/layout/resources/pokemon/138.txt +9 -0
  59. package/dist/ui/components/layout/resources/pokemon/139.txt +11 -0
  60. package/dist/ui/components/layout/resources/pokemon/14.txt +9 -0
  61. package/dist/ui/components/layout/resources/pokemon/140.txt +7 -0
  62. package/dist/ui/components/layout/resources/pokemon/147.txt +9 -0
  63. package/dist/ui/components/layout/resources/pokemon/148.txt +11 -0
  64. package/dist/ui/components/layout/resources/pokemon/15.txt +12 -0
  65. package/dist/ui/components/layout/resources/pokemon/152.txt +10 -0
  66. package/dist/ui/components/layout/resources/pokemon/153.txt +12 -0
  67. package/dist/ui/components/layout/resources/pokemon/155.txt +9 -0
  68. package/dist/ui/components/layout/resources/pokemon/156.txt +10 -0
  69. package/dist/ui/components/layout/resources/pokemon/158.txt +9 -0
  70. package/dist/ui/components/layout/resources/pokemon/16.txt +9 -0
  71. package/dist/ui/components/layout/resources/pokemon/162.txt +11 -0
  72. package/dist/ui/components/layout/resources/pokemon/163.txt +10 -0
  73. package/dist/ui/components/layout/resources/pokemon/165.txt +9 -0
  74. package/dist/ui/components/layout/resources/pokemon/166.txt +11 -0
  75. package/dist/ui/components/layout/resources/pokemon/167.txt +7 -0
  76. package/dist/ui/components/layout/resources/pokemon/168.txt +11 -0
  77. package/dist/ui/components/layout/resources/pokemon/169.txt +12 -0
  78. package/dist/ui/components/layout/resources/pokemon/17.txt +10 -0
  79. package/dist/ui/components/layout/resources/pokemon/170.txt +10 -0
  80. package/dist/ui/components/layout/resources/pokemon/171.txt +12 -0
  81. package/dist/ui/components/layout/resources/pokemon/172-spiky-eared.txt +10 -0
  82. package/dist/ui/components/layout/resources/pokemon/172.txt +10 -0
  83. package/dist/ui/components/layout/resources/pokemon/173.txt +8 -0
  84. package/dist/ui/components/layout/resources/pokemon/174.txt +9 -0
  85. package/dist/ui/components/layout/resources/pokemon/175.txt +9 -0
  86. package/dist/ui/components/layout/resources/pokemon/176.txt +11 -0
  87. package/dist/ui/components/layout/resources/pokemon/177.txt +9 -0
  88. package/dist/ui/components/layout/resources/pokemon/179.txt +10 -0
  89. package/dist/ui/components/layout/resources/pokemon/180.txt +11 -0
  90. package/dist/ui/components/layout/resources/pokemon/183.txt +9 -0
  91. package/dist/ui/components/layout/resources/pokemon/187.txt +10 -0
  92. package/dist/ui/components/layout/resources/pokemon/188.txt +9 -0
  93. package/dist/ui/components/layout/resources/pokemon/189.txt +11 -0
  94. package/dist/ui/components/layout/resources/pokemon/19-alola.txt +11 -0
  95. package/dist/ui/components/layout/resources/pokemon/19.txt +11 -0
  96. package/dist/ui/components/layout/resources/pokemon/190.txt +10 -0
  97. package/dist/ui/components/layout/resources/pokemon/191.txt +9 -0
  98. package/dist/ui/components/layout/resources/pokemon/192.txt +11 -0
  99. package/dist/ui/components/layout/resources/pokemon/193.txt +8 -0
  100. package/dist/ui/components/layout/resources/pokemon/194.txt +9 -0
  101. package/dist/ui/components/layout/resources/pokemon/198.txt +11 -0
  102. package/dist/ui/components/layout/resources/pokemon/20-alola.txt +11 -0
  103. package/dist/ui/components/layout/resources/pokemon/20.txt +11 -0
  104. package/dist/ui/components/layout/resources/pokemon/200.txt +10 -0
  105. package/dist/ui/components/layout/resources/pokemon/201-a.txt +11 -0
  106. package/dist/ui/components/layout/resources/pokemon/201-b.txt +11 -0
  107. package/dist/ui/components/layout/resources/pokemon/201-c.txt +10 -0
  108. package/dist/ui/components/layout/resources/pokemon/201-d.txt +10 -0
  109. package/dist/ui/components/layout/resources/pokemon/201-e.txt +10 -0
  110. package/dist/ui/components/layout/resources/pokemon/201-exclamation.txt +10 -0
  111. package/dist/ui/components/layout/resources/pokemon/201-f.txt +10 -0
  112. package/dist/ui/components/layout/resources/pokemon/201-g.txt +11 -0
  113. package/dist/ui/components/layout/resources/pokemon/201-h.txt +10 -0
  114. package/dist/ui/components/layout/resources/pokemon/201-i.txt +10 -0
  115. package/dist/ui/components/layout/resources/pokemon/201-j.txt +10 -0
  116. package/dist/ui/components/layout/resources/pokemon/201-k.txt +10 -0
  117. package/dist/ui/components/layout/resources/pokemon/201-l.txt +10 -0
  118. package/dist/ui/components/layout/resources/pokemon/201-m.txt +10 -0
  119. package/dist/ui/components/layout/resources/pokemon/201-n.txt +7 -0
  120. package/dist/ui/components/layout/resources/pokemon/201-o.txt +10 -0
  121. package/dist/ui/components/layout/resources/pokemon/201-p.txt +10 -0
  122. package/dist/ui/components/layout/resources/pokemon/201-q.txt +8 -0
  123. package/dist/ui/components/layout/resources/pokemon/201-question.txt +11 -0
  124. package/dist/ui/components/layout/resources/pokemon/201-r.txt +9 -0
  125. package/dist/ui/components/layout/resources/pokemon/201-s.txt +12 -0
  126. package/dist/ui/components/layout/resources/pokemon/201-t.txt +10 -0
  127. package/dist/ui/components/layout/resources/pokemon/201-u.txt +8 -0
  128. package/dist/ui/components/layout/resources/pokemon/201-v.txt +9 -0
  129. package/dist/ui/components/layout/resources/pokemon/201-w.txt +9 -0
  130. package/dist/ui/components/layout/resources/pokemon/201-x.txt +7 -0
  131. package/dist/ui/components/layout/resources/pokemon/201-y.txt +10 -0
  132. package/dist/ui/components/layout/resources/pokemon/201-z.txt +10 -0
  133. package/dist/ui/components/layout/resources/pokemon/201.txt +11 -0
  134. package/dist/ui/components/layout/resources/pokemon/203.txt +12 -0
  135. package/dist/ui/components/layout/resources/pokemon/204.txt +10 -0
  136. package/dist/ui/components/layout/resources/pokemon/205.txt +9 -0
  137. package/dist/ui/components/layout/resources/pokemon/207.txt +12 -0
  138. package/dist/ui/components/layout/resources/pokemon/209.txt +10 -0
  139. package/dist/ui/components/layout/resources/pokemon/21.txt +8 -0
  140. package/dist/ui/components/layout/resources/pokemon/210.txt +12 -0
  141. package/dist/ui/components/layout/resources/pokemon/211.txt +11 -0
  142. package/dist/ui/components/layout/resources/pokemon/215.txt +11 -0
  143. package/dist/ui/components/layout/resources/pokemon/216.txt +10 -0
  144. package/dist/ui/components/layout/resources/pokemon/217.txt +12 -0
  145. package/dist/ui/components/layout/resources/pokemon/218.txt +11 -0
  146. package/dist/ui/components/layout/resources/pokemon/219.txt +11 -0
  147. package/dist/ui/components/layout/resources/pokemon/22.txt +11 -0
  148. package/dist/ui/components/layout/resources/pokemon/220.txt +7 -0
  149. package/dist/ui/components/layout/resources/pokemon/221.txt +11 -0
  150. package/dist/ui/components/layout/resources/pokemon/222-galar.txt +10 -0
  151. package/dist/ui/components/layout/resources/pokemon/222.txt +10 -0
  152. package/dist/ui/components/layout/resources/pokemon/223.txt +8 -0
  153. package/dist/ui/components/layout/resources/pokemon/226.txt +10 -0
  154. package/dist/ui/components/layout/resources/pokemon/228.txt +10 -0
  155. package/dist/ui/components/layout/resources/pokemon/229.txt +12 -0
  156. package/dist/ui/components/layout/resources/pokemon/23.txt +11 -0
  157. package/dist/ui/components/layout/resources/pokemon/231.txt +8 -0
  158. package/dist/ui/components/layout/resources/pokemon/232.txt +11 -0
  159. package/dist/ui/components/layout/resources/pokemon/235.txt +11 -0
  160. package/dist/ui/components/layout/resources/pokemon/236.txt +11 -0
  161. package/dist/ui/components/layout/resources/pokemon/238.txt +10 -0
  162. package/dist/ui/components/layout/resources/pokemon/239.txt +10 -0
  163. package/dist/ui/components/layout/resources/pokemon/240.txt +10 -0
  164. package/dist/ui/components/layout/resources/pokemon/244.txt +12 -0
  165. package/dist/ui/components/layout/resources/pokemon/246.txt +10 -0
  166. package/dist/ui/components/layout/resources/pokemon/247.txt +10 -0
  167. package/dist/ui/components/layout/resources/pokemon/25-alola-cap.txt +11 -0
  168. package/dist/ui/components/layout/resources/pokemon/25-hoenn-cap.txt +11 -0
  169. package/dist/ui/components/layout/resources/pokemon/25-kalos-cap.txt +11 -0
  170. package/dist/ui/components/layout/resources/pokemon/25-original-cap.txt +11 -0
  171. package/dist/ui/components/layout/resources/pokemon/25-partner-cap.txt +11 -0
  172. package/dist/ui/components/layout/resources/pokemon/25-sinnoh-cap.txt +11 -0
  173. package/dist/ui/components/layout/resources/pokemon/25-starter.txt +12 -0
  174. package/dist/ui/components/layout/resources/pokemon/25-unova-cap.txt +11 -0
  175. package/dist/ui/components/layout/resources/pokemon/25-world-cap.txt +11 -0
  176. package/dist/ui/components/layout/resources/pokemon/251.txt +9 -0
  177. package/dist/ui/components/layout/resources/pokemon/252.txt +11 -0
  178. package/dist/ui/components/layout/resources/pokemon/253.txt +11 -0
  179. package/dist/ui/components/layout/resources/pokemon/255.txt +10 -0
  180. package/dist/ui/components/layout/resources/pokemon/258.txt +9 -0
  181. package/dist/ui/components/layout/resources/pokemon/259.txt +11 -0
  182. package/dist/ui/components/layout/resources/pokemon/261.txt +9 -0
  183. package/dist/ui/components/layout/resources/pokemon/262.txt +11 -0
  184. package/dist/ui/components/layout/resources/pokemon/263-galar.txt +8 -0
  185. package/dist/ui/components/layout/resources/pokemon/263.txt +8 -0
  186. package/dist/ui/components/layout/resources/pokemon/264-galar.txt +10 -0
  187. package/dist/ui/components/layout/resources/pokemon/264.txt +10 -0
  188. package/dist/ui/components/layout/resources/pokemon/265.txt +9 -0
  189. package/dist/ui/components/layout/resources/pokemon/266.txt +9 -0
  190. package/dist/ui/components/layout/resources/pokemon/267.txt +12 -0
  191. package/dist/ui/components/layout/resources/pokemon/268.txt +9 -0
  192. package/dist/ui/components/layout/resources/pokemon/269.txt +10 -0
  193. package/dist/ui/components/layout/resources/pokemon/27-alola.txt +9 -0
  194. package/dist/ui/components/layout/resources/pokemon/27.txt +9 -0
  195. package/dist/ui/components/layout/resources/pokemon/270.txt +8 -0
  196. package/dist/ui/components/layout/resources/pokemon/271.txt +11 -0
  197. package/dist/ui/components/layout/resources/pokemon/273.txt +9 -0
  198. package/dist/ui/components/layout/resources/pokemon/274.txt +12 -0
  199. package/dist/ui/components/layout/resources/pokemon/276.txt +8 -0
  200. package/dist/ui/components/layout/resources/pokemon/277.txt +10 -0
  201. package/dist/ui/components/layout/resources/pokemon/278.txt +7 -0
  202. package/dist/ui/components/layout/resources/pokemon/28-alola.txt +12 -0
  203. package/dist/ui/components/layout/resources/pokemon/280.txt +9 -0
  204. package/dist/ui/components/layout/resources/pokemon/281.txt +12 -0
  205. package/dist/ui/components/layout/resources/pokemon/283.txt +10 -0
  206. package/dist/ui/components/layout/resources/pokemon/284.txt +12 -0
  207. package/dist/ui/components/layout/resources/pokemon/285.txt +8 -0
  208. package/dist/ui/components/layout/resources/pokemon/287.txt +8 -0
  209. package/dist/ui/components/layout/resources/pokemon/288.txt +11 -0
  210. package/dist/ui/components/layout/resources/pokemon/29.txt +10 -0
  211. package/dist/ui/components/layout/resources/pokemon/290.txt +7 -0
  212. package/dist/ui/components/layout/resources/pokemon/293.txt +8 -0
  213. package/dist/ui/components/layout/resources/pokemon/294.txt +12 -0
  214. package/dist/ui/components/layout/resources/pokemon/296.txt +10 -0
  215. package/dist/ui/components/layout/resources/pokemon/297.txt +12 -0
  216. package/dist/ui/components/layout/resources/pokemon/298.txt +10 -0
  217. package/dist/ui/components/layout/resources/pokemon/299.txt +9 -0
  218. package/dist/ui/components/layout/resources/pokemon/30.txt +11 -0
  219. package/dist/ui/components/layout/resources/pokemon/300.txt +10 -0
  220. package/dist/ui/components/layout/resources/pokemon/301.txt +11 -0
  221. package/dist/ui/components/layout/resources/pokemon/304.txt +6 -0
  222. package/dist/ui/components/layout/resources/pokemon/305.txt +9 -0
  223. package/dist/ui/components/layout/resources/pokemon/306.txt +12 -0
  224. package/dist/ui/components/layout/resources/pokemon/307.txt +10 -0
  225. package/dist/ui/components/layout/resources/pokemon/309.txt +8 -0
  226. package/dist/ui/components/layout/resources/pokemon/311.txt +10 -0
  227. package/dist/ui/components/layout/resources/pokemon/312.txt +10 -0
  228. package/dist/ui/components/layout/resources/pokemon/313.txt +10 -0
  229. package/dist/ui/components/layout/resources/pokemon/314.txt +10 -0
  230. package/dist/ui/components/layout/resources/pokemon/315.txt +11 -0
  231. package/dist/ui/components/layout/resources/pokemon/316.txt +9 -0
  232. package/dist/ui/components/layout/resources/pokemon/317.txt +9 -0
  233. package/dist/ui/components/layout/resources/pokemon/318.txt +10 -0
  234. package/dist/ui/components/layout/resources/pokemon/32.txt +10 -0
  235. package/dist/ui/components/layout/resources/pokemon/320.txt +12 -0
  236. package/dist/ui/components/layout/resources/pokemon/322.txt +9 -0
  237. package/dist/ui/components/layout/resources/pokemon/323.txt +11 -0
  238. package/dist/ui/components/layout/resources/pokemon/325.txt +10 -0
  239. package/dist/ui/components/layout/resources/pokemon/326.txt +10 -0
  240. package/dist/ui/components/layout/resources/pokemon/327-blank.txt +11 -0
  241. package/dist/ui/components/layout/resources/pokemon/327-filled.txt +11 -0
  242. package/dist/ui/components/layout/resources/pokemon/327.txt +11 -0
  243. package/dist/ui/components/layout/resources/pokemon/328.txt +10 -0
  244. package/dist/ui/components/layout/resources/pokemon/329.txt +10 -0
  245. package/dist/ui/components/layout/resources/pokemon/33.txt +11 -0
  246. package/dist/ui/components/layout/resources/pokemon/331.txt +9 -0
  247. package/dist/ui/components/layout/resources/pokemon/333.txt +8 -0
  248. package/dist/ui/components/layout/resources/pokemon/334.txt +12 -0
  249. package/dist/ui/components/layout/resources/pokemon/335.txt +11 -0
  250. package/dist/ui/components/layout/resources/pokemon/336.txt +10 -0
  251. package/dist/ui/components/layout/resources/pokemon/337.txt +12 -0
  252. package/dist/ui/components/layout/resources/pokemon/339.txt +7 -0
  253. package/dist/ui/components/layout/resources/pokemon/341.txt +10 -0
  254. package/dist/ui/components/layout/resources/pokemon/343.txt +11 -0
  255. package/dist/ui/components/layout/resources/pokemon/345.txt +10 -0
  256. package/dist/ui/components/layout/resources/pokemon/346.txt +12 -0
  257. package/dist/ui/components/layout/resources/pokemon/347.txt +10 -0
  258. package/dist/ui/components/layout/resources/pokemon/348.txt +12 -0
  259. package/dist/ui/components/layout/resources/pokemon/349.txt +11 -0
  260. package/dist/ui/components/layout/resources/pokemon/35.txt +10 -0
  261. package/dist/ui/components/layout/resources/pokemon/351-rainy.txt +11 -0
  262. package/dist/ui/components/layout/resources/pokemon/351-snowy.txt +12 -0
  263. package/dist/ui/components/layout/resources/pokemon/351-sunny.txt +10 -0
  264. package/dist/ui/components/layout/resources/pokemon/351.txt +10 -0
  265. package/dist/ui/components/layout/resources/pokemon/352.txt +10 -0
  266. package/dist/ui/components/layout/resources/pokemon/353.txt +10 -0
  267. package/dist/ui/components/layout/resources/pokemon/354.txt +10 -0
  268. package/dist/ui/components/layout/resources/pokemon/355.txt +11 -0
  269. package/dist/ui/components/layout/resources/pokemon/356.txt +12 -0
  270. package/dist/ui/components/layout/resources/pokemon/358.txt +11 -0
  271. package/dist/ui/components/layout/resources/pokemon/360.txt +11 -0
  272. package/dist/ui/components/layout/resources/pokemon/361.txt +10 -0
  273. package/dist/ui/components/layout/resources/pokemon/363.txt +8 -0
  274. package/dist/ui/components/layout/resources/pokemon/364.txt +9 -0
  275. package/dist/ui/components/layout/resources/pokemon/365.txt +11 -0
  276. package/dist/ui/components/layout/resources/pokemon/366.txt +10 -0
  277. package/dist/ui/components/layout/resources/pokemon/367.txt +12 -0
  278. package/dist/ui/components/layout/resources/pokemon/368.txt +11 -0
  279. package/dist/ui/components/layout/resources/pokemon/369.txt +11 -0
  280. package/dist/ui/components/layout/resources/pokemon/37-alola.txt +11 -0
  281. package/dist/ui/components/layout/resources/pokemon/37.txt +10 -0
  282. package/dist/ui/components/layout/resources/pokemon/370.txt +9 -0
  283. package/dist/ui/components/layout/resources/pokemon/371.txt +10 -0
  284. package/dist/ui/components/layout/resources/pokemon/372.txt +11 -0
  285. package/dist/ui/components/layout/resources/pokemon/373.txt +12 -0
  286. package/dist/ui/components/layout/resources/pokemon/374.txt +9 -0
  287. package/dist/ui/components/layout/resources/pokemon/375.txt +11 -0
  288. package/dist/ui/components/layout/resources/pokemon/376.txt +12 -0
  289. package/dist/ui/components/layout/resources/pokemon/377.txt +12 -0
  290. package/dist/ui/components/layout/resources/pokemon/378.txt +12 -0
  291. package/dist/ui/components/layout/resources/pokemon/379.txt +11 -0
  292. package/dist/ui/components/layout/resources/pokemon/380.txt +11 -0
  293. package/dist/ui/components/layout/resources/pokemon/381.txt +11 -0
  294. package/dist/ui/components/layout/resources/pokemon/382.txt +11 -0
  295. package/dist/ui/components/layout/resources/pokemon/383.txt +12 -0
  296. package/dist/ui/components/layout/resources/pokemon/385.txt +10 -0
  297. package/dist/ui/components/layout/resources/pokemon/386-defense.txt +12 -0
  298. package/dist/ui/components/layout/resources/pokemon/386.txt +11 -0
  299. package/dist/ui/components/layout/resources/pokemon/387.txt +11 -0
  300. package/dist/ui/components/layout/resources/pokemon/388.txt +11 -0
  301. package/dist/ui/components/layout/resources/pokemon/389.txt +12 -0
  302. package/dist/ui/components/layout/resources/pokemon/39.txt +10 -0
  303. package/dist/ui/components/layout/resources/pokemon/390.txt +11 -0
  304. package/dist/ui/components/layout/resources/pokemon/391.txt +12 -0
  305. package/dist/ui/components/layout/resources/pokemon/392.txt +12 -0
  306. package/dist/ui/components/layout/resources/pokemon/393.txt +10 -0
  307. package/dist/ui/components/layout/resources/pokemon/394.txt +11 -0
  308. package/dist/ui/components/layout/resources/pokemon/396.txt +9 -0
  309. package/dist/ui/components/layout/resources/pokemon/397.txt +12 -0
  310. package/dist/ui/components/layout/resources/pokemon/399.txt +8 -0
  311. package/dist/ui/components/layout/resources/pokemon/400.txt +11 -0
  312. package/dist/ui/components/layout/resources/pokemon/401.txt +11 -0
  313. package/dist/ui/components/layout/resources/pokemon/402.txt +12 -0
  314. package/dist/ui/components/layout/resources/pokemon/403.txt +11 -0
  315. package/dist/ui/components/layout/resources/pokemon/404.txt +11 -0
  316. package/dist/ui/components/layout/resources/pokemon/406.txt +9 -0
  317. package/dist/ui/components/layout/resources/pokemon/408.txt +10 -0
  318. package/dist/ui/components/layout/resources/pokemon/409.txt +12 -0
  319. package/dist/ui/components/layout/resources/pokemon/41.txt +10 -0
  320. package/dist/ui/components/layout/resources/pokemon/410.txt +10 -0
  321. package/dist/ui/components/layout/resources/pokemon/411.txt +12 -0
  322. package/dist/ui/components/layout/resources/pokemon/412-plant.txt +11 -0
  323. package/dist/ui/components/layout/resources/pokemon/412-sandy.txt +12 -0
  324. package/dist/ui/components/layout/resources/pokemon/412-trash.txt +12 -0
  325. package/dist/ui/components/layout/resources/pokemon/412.txt +11 -0
  326. package/dist/ui/components/layout/resources/pokemon/413-plant.txt +12 -0
  327. package/dist/ui/components/layout/resources/pokemon/413-sandy.txt +12 -0
  328. package/dist/ui/components/layout/resources/pokemon/413-trash.txt +12 -0
  329. package/dist/ui/components/layout/resources/pokemon/413.txt +12 -0
  330. package/dist/ui/components/layout/resources/pokemon/414-plant.txt +10 -0
  331. package/dist/ui/components/layout/resources/pokemon/414.txt +10 -0
  332. package/dist/ui/components/layout/resources/pokemon/415.txt +9 -0
  333. package/dist/ui/components/layout/resources/pokemon/417.txt +12 -0
  334. package/dist/ui/components/layout/resources/pokemon/418.txt +10 -0
  335. package/dist/ui/components/layout/resources/pokemon/419.txt +11 -0
  336. package/dist/ui/components/layout/resources/pokemon/420.txt +9 -0
  337. package/dist/ui/components/layout/resources/pokemon/422-east.txt +10 -0
  338. package/dist/ui/components/layout/resources/pokemon/422-west.txt +10 -0
  339. package/dist/ui/components/layout/resources/pokemon/422.txt +10 -0
  340. package/dist/ui/components/layout/resources/pokemon/425.txt +11 -0
  341. package/dist/ui/components/layout/resources/pokemon/427.txt +11 -0
  342. package/dist/ui/components/layout/resources/pokemon/43.txt +10 -0
  343. package/dist/ui/components/layout/resources/pokemon/430.txt +11 -0
  344. package/dist/ui/components/layout/resources/pokemon/431.txt +11 -0
  345. package/dist/ui/components/layout/resources/pokemon/432.txt +11 -0
  346. package/dist/ui/components/layout/resources/pokemon/433.txt +10 -0
  347. package/dist/ui/components/layout/resources/pokemon/434.txt +10 -0
  348. package/dist/ui/components/layout/resources/pokemon/436.txt +8 -0
  349. package/dist/ui/components/layout/resources/pokemon/438.txt +10 -0
  350. package/dist/ui/components/layout/resources/pokemon/439.txt +11 -0
  351. package/dist/ui/components/layout/resources/pokemon/44.txt +11 -0
  352. package/dist/ui/components/layout/resources/pokemon/440.txt +10 -0
  353. package/dist/ui/components/layout/resources/pokemon/441.txt +11 -0
  354. package/dist/ui/components/layout/resources/pokemon/442.txt +10 -0
  355. package/dist/ui/components/layout/resources/pokemon/443.txt +10 -0
  356. package/dist/ui/components/layout/resources/pokemon/444.txt +11 -0
  357. package/dist/ui/components/layout/resources/pokemon/445.txt +11 -0
  358. package/dist/ui/components/layout/resources/pokemon/446.txt +10 -0
  359. package/dist/ui/components/layout/resources/pokemon/447.txt +9 -0
  360. package/dist/ui/components/layout/resources/pokemon/449.txt +9 -0
  361. package/dist/ui/components/layout/resources/pokemon/450.txt +12 -0
  362. package/dist/ui/components/layout/resources/pokemon/451.txt +11 -0
  363. package/dist/ui/components/layout/resources/pokemon/453.txt +9 -0
  364. package/dist/ui/components/layout/resources/pokemon/455.txt +12 -0
  365. package/dist/ui/components/layout/resources/pokemon/456.txt +9 -0
  366. package/dist/ui/components/layout/resources/pokemon/457.txt +12 -0
  367. package/dist/ui/components/layout/resources/pokemon/458.txt +9 -0
  368. package/dist/ui/components/layout/resources/pokemon/459.txt +10 -0
  369. package/dist/ui/components/layout/resources/pokemon/46.txt +10 -0
  370. package/dist/ui/components/layout/resources/pokemon/466.txt +12 -0
  371. package/dist/ui/components/layout/resources/pokemon/467.txt +11 -0
  372. package/dist/ui/components/layout/resources/pokemon/469.txt +11 -0
  373. package/dist/ui/components/layout/resources/pokemon/47.txt +11 -0
  374. package/dist/ui/components/layout/resources/pokemon/472.txt +11 -0
  375. package/dist/ui/components/layout/resources/pokemon/476.txt +12 -0
  376. package/dist/ui/components/layout/resources/pokemon/480.txt +11 -0
  377. package/dist/ui/components/layout/resources/pokemon/481.txt +11 -0
  378. package/dist/ui/components/layout/resources/pokemon/482.txt +12 -0
  379. package/dist/ui/components/layout/resources/pokemon/485.txt +10 -0
  380. package/dist/ui/components/layout/resources/pokemon/486.txt +12 -0
  381. package/dist/ui/components/layout/resources/pokemon/487-altered.txt +12 -0
  382. package/dist/ui/components/layout/resources/pokemon/487.txt +12 -0
  383. package/dist/ui/components/layout/resources/pokemon/489.txt +9 -0
  384. package/dist/ui/components/layout/resources/pokemon/490.txt +10 -0
  385. package/dist/ui/components/layout/resources/pokemon/492-land.txt +8 -0
  386. package/dist/ui/components/layout/resources/pokemon/492-sky.txt +11 -0
  387. package/dist/ui/components/layout/resources/pokemon/492.txt +8 -0
  388. package/dist/ui/components/layout/resources/pokemon/494.txt +11 -0
  389. package/dist/ui/components/layout/resources/pokemon/495.txt +9 -0
  390. package/dist/ui/components/layout/resources/pokemon/496.txt +10 -0
  391. package/dist/ui/components/layout/resources/pokemon/497.txt +11 -0
  392. package/dist/ui/components/layout/resources/pokemon/498.txt +9 -0
  393. package/dist/ui/components/layout/resources/pokemon/499.txt +11 -0
  394. package/dist/ui/components/layout/resources/pokemon/5.txt +12 -0
  395. package/dist/ui/components/layout/resources/pokemon/50-alola.txt +9 -0
  396. package/dist/ui/components/layout/resources/pokemon/50.txt +7 -0
  397. package/dist/ui/components/layout/resources/pokemon/501.txt +9 -0
  398. package/dist/ui/components/layout/resources/pokemon/502.txt +12 -0
  399. package/dist/ui/components/layout/resources/pokemon/503.txt +12 -0
  400. package/dist/ui/components/layout/resources/pokemon/504.txt +9 -0
  401. package/dist/ui/components/layout/resources/pokemon/505.txt +11 -0
  402. package/dist/ui/components/layout/resources/pokemon/506.txt +9 -0
  403. package/dist/ui/components/layout/resources/pokemon/507.txt +11 -0
  404. package/dist/ui/components/layout/resources/pokemon/509.txt +11 -0
  405. package/dist/ui/components/layout/resources/pokemon/51-alola.txt +12 -0
  406. package/dist/ui/components/layout/resources/pokemon/511.txt +11 -0
  407. package/dist/ui/components/layout/resources/pokemon/513.txt +10 -0
  408. package/dist/ui/components/layout/resources/pokemon/514.txt +11 -0
  409. package/dist/ui/components/layout/resources/pokemon/515.txt +11 -0
  410. package/dist/ui/components/layout/resources/pokemon/516.txt +11 -0
  411. package/dist/ui/components/layout/resources/pokemon/517.txt +7 -0
  412. package/dist/ui/components/layout/resources/pokemon/519.txt +8 -0
  413. package/dist/ui/components/layout/resources/pokemon/52-alola.txt +11 -0
  414. package/dist/ui/components/layout/resources/pokemon/52-galar.txt +11 -0
  415. package/dist/ui/components/layout/resources/pokemon/52.txt +11 -0
  416. package/dist/ui/components/layout/resources/pokemon/520.txt +10 -0
  417. package/dist/ui/components/layout/resources/pokemon/522.txt +11 -0
  418. package/dist/ui/components/layout/resources/pokemon/523.txt +12 -0
  419. package/dist/ui/components/layout/resources/pokemon/524.txt +9 -0
  420. package/dist/ui/components/layout/resources/pokemon/525.txt +11 -0
  421. package/dist/ui/components/layout/resources/pokemon/527.txt +8 -0
  422. package/dist/ui/components/layout/resources/pokemon/529.txt +9 -0
  423. package/dist/ui/components/layout/resources/pokemon/53-alola.txt +11 -0
  424. package/dist/ui/components/layout/resources/pokemon/531.txt +11 -0
  425. package/dist/ui/components/layout/resources/pokemon/532.txt +10 -0
  426. package/dist/ui/components/layout/resources/pokemon/533.txt +12 -0
  427. package/dist/ui/components/layout/resources/pokemon/535.txt +7 -0
  428. package/dist/ui/components/layout/resources/pokemon/536.txt +9 -0
  429. package/dist/ui/components/layout/resources/pokemon/54.txt +11 -0
  430. package/dist/ui/components/layout/resources/pokemon/540.txt +9 -0
  431. package/dist/ui/components/layout/resources/pokemon/541.txt +8 -0
  432. package/dist/ui/components/layout/resources/pokemon/542.txt +11 -0
  433. package/dist/ui/components/layout/resources/pokemon/543.txt +7 -0
  434. package/dist/ui/components/layout/resources/pokemon/544.txt +8 -0
  435. package/dist/ui/components/layout/resources/pokemon/546.txt +7 -0
  436. package/dist/ui/components/layout/resources/pokemon/548.txt +9 -0
  437. package/dist/ui/components/layout/resources/pokemon/550-blue-striped.txt +12 -0
  438. package/dist/ui/components/layout/resources/pokemon/550-red-striped.txt +12 -0
  439. package/dist/ui/components/layout/resources/pokemon/550.txt +12 -0
  440. package/dist/ui/components/layout/resources/pokemon/551.txt +8 -0
  441. package/dist/ui/components/layout/resources/pokemon/552.txt +11 -0
  442. package/dist/ui/components/layout/resources/pokemon/554-galar.txt +8 -0
  443. package/dist/ui/components/layout/resources/pokemon/554.txt +8 -0
  444. package/dist/ui/components/layout/resources/pokemon/555-zen.txt +12 -0
  445. package/dist/ui/components/layout/resources/pokemon/557.txt +9 -0
  446. package/dist/ui/components/layout/resources/pokemon/559.txt +8 -0
  447. package/dist/ui/components/layout/resources/pokemon/56.txt +10 -0
  448. package/dist/ui/components/layout/resources/pokemon/562-galar.txt +8 -0
  449. package/dist/ui/components/layout/resources/pokemon/562.txt +8 -0
  450. package/dist/ui/components/layout/resources/pokemon/564.txt +8 -0
  451. package/dist/ui/components/layout/resources/pokemon/565.txt +11 -0
  452. package/dist/ui/components/layout/resources/pokemon/566.txt +8 -0
  453. package/dist/ui/components/layout/resources/pokemon/567.txt +11 -0
  454. package/dist/ui/components/layout/resources/pokemon/568.txt +9 -0
  455. package/dist/ui/components/layout/resources/pokemon/57.txt +12 -0
  456. package/dist/ui/components/layout/resources/pokemon/570.txt +9 -0
  457. package/dist/ui/components/layout/resources/pokemon/572.txt +10 -0
  458. package/dist/ui/components/layout/resources/pokemon/574.txt +9 -0
  459. package/dist/ui/components/layout/resources/pokemon/575.txt +10 -0
  460. package/dist/ui/components/layout/resources/pokemon/577.txt +7 -0
  461. package/dist/ui/components/layout/resources/pokemon/578.txt +10 -0
  462. package/dist/ui/components/layout/resources/pokemon/58.txt +11 -0
  463. package/dist/ui/components/layout/resources/pokemon/580.txt +10 -0
  464. package/dist/ui/components/layout/resources/pokemon/581.txt +11 -0
  465. package/dist/ui/components/layout/resources/pokemon/582.txt +8 -0
  466. package/dist/ui/components/layout/resources/pokemon/583.txt +11 -0
  467. package/dist/ui/components/layout/resources/pokemon/585-autumn.txt +11 -0
  468. package/dist/ui/components/layout/resources/pokemon/585-spring.txt +11 -0
  469. package/dist/ui/components/layout/resources/pokemon/585-summer.txt +11 -0
  470. package/dist/ui/components/layout/resources/pokemon/585-winter.txt +11 -0
  471. package/dist/ui/components/layout/resources/pokemon/585.txt +11 -0
  472. package/dist/ui/components/layout/resources/pokemon/586-spring.txt +12 -0
  473. package/dist/ui/components/layout/resources/pokemon/586-summer.txt +12 -0
  474. package/dist/ui/components/layout/resources/pokemon/586-winter.txt +12 -0
  475. package/dist/ui/components/layout/resources/pokemon/586.txt +12 -0
  476. package/dist/ui/components/layout/resources/pokemon/588.txt +9 -0
  477. package/dist/ui/components/layout/resources/pokemon/590.txt +9 -0
  478. package/dist/ui/components/layout/resources/pokemon/592.txt +10 -0
  479. package/dist/ui/components/layout/resources/pokemon/594.txt +11 -0
  480. package/dist/ui/components/layout/resources/pokemon/595.txt +8 -0
  481. package/dist/ui/components/layout/resources/pokemon/597.txt +8 -0
  482. package/dist/ui/components/layout/resources/pokemon/599.txt +8 -0
  483. package/dist/ui/components/layout/resources/pokemon/60.txt +8 -0
  484. package/dist/ui/components/layout/resources/pokemon/600.txt +10 -0
  485. package/dist/ui/components/layout/resources/pokemon/602.txt +6 -0
  486. package/dist/ui/components/layout/resources/pokemon/603.txt +10 -0
  487. package/dist/ui/components/layout/resources/pokemon/604.txt +11 -0
  488. package/dist/ui/components/layout/resources/pokemon/605.txt +10 -0
  489. package/dist/ui/components/layout/resources/pokemon/607.txt +9 -0
  490. package/dist/ui/components/layout/resources/pokemon/608.txt +9 -0
  491. package/dist/ui/components/layout/resources/pokemon/61.txt +10 -0
  492. package/dist/ui/components/layout/resources/pokemon/610.txt +10 -0
  493. package/dist/ui/components/layout/resources/pokemon/611.txt +11 -0
  494. package/dist/ui/components/layout/resources/pokemon/613.txt +9 -0
  495. package/dist/ui/components/layout/resources/pokemon/615.txt +10 -0
  496. package/dist/ui/components/layout/resources/pokemon/616.txt +8 -0
  497. package/dist/ui/components/layout/resources/pokemon/618--galar.txt +11 -0
  498. package/dist/ui/components/layout/resources/pokemon/618.txt +11 -0
  499. package/dist/ui/components/layout/resources/pokemon/619.txt +10 -0
  500. package/dist/ui/components/layout/resources/pokemon/622.txt +9 -0
  501. package/dist/ui/components/layout/resources/pokemon/624.txt +10 -0
  502. package/dist/ui/components/layout/resources/pokemon/627.txt +11 -0
  503. package/dist/ui/components/layout/resources/pokemon/629.txt +10 -0
  504. package/dist/ui/components/layout/resources/pokemon/63.txt +11 -0
  505. package/dist/ui/components/layout/resources/pokemon/632.txt +11 -0
  506. package/dist/ui/components/layout/resources/pokemon/633.txt +10 -0
  507. package/dist/ui/components/layout/resources/pokemon/634.txt +11 -0
  508. package/dist/ui/components/layout/resources/pokemon/636.txt +10 -0
  509. package/dist/ui/components/layout/resources/pokemon/648-aria.txt +11 -0
  510. package/dist/ui/components/layout/resources/pokemon/648-pirouette.txt +12 -0
  511. package/dist/ui/components/layout/resources/pokemon/648.txt +11 -0
  512. package/dist/ui/components/layout/resources/pokemon/649-burn.txt +12 -0
  513. package/dist/ui/components/layout/resources/pokemon/649-chill.txt +12 -0
  514. package/dist/ui/components/layout/resources/pokemon/649-douse.txt +12 -0
  515. package/dist/ui/components/layout/resources/pokemon/649-shock.txt +12 -0
  516. package/dist/ui/components/layout/resources/pokemon/649.txt +12 -0
  517. package/dist/ui/components/layout/resources/pokemon/650.txt +11 -0
  518. package/dist/ui/components/layout/resources/pokemon/651.txt +11 -0
  519. package/dist/ui/components/layout/resources/pokemon/652.txt +12 -0
  520. package/dist/ui/components/layout/resources/pokemon/653.txt +10 -0
  521. package/dist/ui/components/layout/resources/pokemon/654.txt +11 -0
  522. package/dist/ui/components/layout/resources/pokemon/655.txt +12 -0
  523. package/dist/ui/components/layout/resources/pokemon/656.txt +10 -0
  524. package/dist/ui/components/layout/resources/pokemon/657.txt +11 -0
  525. package/dist/ui/components/layout/resources/pokemon/658-ash.txt +12 -0
  526. package/dist/ui/components/layout/resources/pokemon/658.txt +11 -0
  527. package/dist/ui/components/layout/resources/pokemon/66.txt +10 -0
  528. package/dist/ui/components/layout/resources/pokemon/661.txt +8 -0
  529. package/dist/ui/components/layout/resources/pokemon/662.txt +10 -0
  530. package/dist/ui/components/layout/resources/pokemon/664.txt +11 -0
  531. package/dist/ui/components/layout/resources/pokemon/665.txt +9 -0
  532. package/dist/ui/components/layout/resources/pokemon/667.txt +10 -0
  533. package/dist/ui/components/layout/resources/pokemon/669-blue.txt +9 -0
  534. package/dist/ui/components/layout/resources/pokemon/669-orange.txt +9 -0
  535. package/dist/ui/components/layout/resources/pokemon/669-red.txt +9 -0
  536. package/dist/ui/components/layout/resources/pokemon/669-white.txt +9 -0
  537. package/dist/ui/components/layout/resources/pokemon/669-yellow.txt +9 -0
  538. package/dist/ui/components/layout/resources/pokemon/669.txt +9 -0
  539. package/dist/ui/components/layout/resources/pokemon/67.txt +11 -0
  540. package/dist/ui/components/layout/resources/pokemon/670-blue.txt +11 -0
  541. package/dist/ui/components/layout/resources/pokemon/670-eternal.txt +11 -0
  542. package/dist/ui/components/layout/resources/pokemon/670-orange.txt +11 -0
  543. package/dist/ui/components/layout/resources/pokemon/670-red.txt +11 -0
  544. package/dist/ui/components/layout/resources/pokemon/670-white.txt +11 -0
  545. package/dist/ui/components/layout/resources/pokemon/670-yellow.txt +11 -0
  546. package/dist/ui/components/layout/resources/pokemon/670.txt +11 -0
  547. package/dist/ui/components/layout/resources/pokemon/672.txt +9 -0
  548. package/dist/ui/components/layout/resources/pokemon/673.txt +11 -0
  549. package/dist/ui/components/layout/resources/pokemon/674.txt +10 -0
  550. package/dist/ui/components/layout/resources/pokemon/677.txt +9 -0
  551. package/dist/ui/components/layout/resources/pokemon/679.txt +12 -0
  552. package/dist/ui/components/layout/resources/pokemon/680.txt +12 -0
  553. package/dist/ui/components/layout/resources/pokemon/682.txt +8 -0
  554. package/dist/ui/components/layout/resources/pokemon/684.txt +8 -0
  555. package/dist/ui/components/layout/resources/pokemon/686.txt +10 -0
  556. package/dist/ui/components/layout/resources/pokemon/688.txt +12 -0
  557. package/dist/ui/components/layout/resources/pokemon/69.txt +8 -0
  558. package/dist/ui/components/layout/resources/pokemon/690.txt +11 -0
  559. package/dist/ui/components/layout/resources/pokemon/692.txt +9 -0
  560. package/dist/ui/components/layout/resources/pokemon/694.txt +9 -0
  561. package/dist/ui/components/layout/resources/pokemon/696.txt +9 -0
  562. package/dist/ui/components/layout/resources/pokemon/697.txt +11 -0
  563. package/dist/ui/components/layout/resources/pokemon/698.txt +12 -0
  564. package/dist/ui/components/layout/resources/pokemon/7.txt +9 -0
  565. package/dist/ui/components/layout/resources/pokemon/70.txt +10 -0
  566. package/dist/ui/components/layout/resources/pokemon/703.txt +7 -0
  567. package/dist/ui/components/layout/resources/pokemon/704.txt +7 -0
  568. package/dist/ui/components/layout/resources/pokemon/705.txt +11 -0
  569. package/dist/ui/components/layout/resources/pokemon/708.txt +11 -0
  570. package/dist/ui/components/layout/resources/pokemon/710-average.txt +10 -0
  571. package/dist/ui/components/layout/resources/pokemon/710-large.txt +10 -0
  572. package/dist/ui/components/layout/resources/pokemon/710-small.txt +9 -0
  573. package/dist/ui/components/layout/resources/pokemon/710-super.txt +11 -0
  574. package/dist/ui/components/layout/resources/pokemon/710.txt +10 -0
  575. package/dist/ui/components/layout/resources/pokemon/711-small.txt +11 -0
  576. package/dist/ui/components/layout/resources/pokemon/712.txt +9 -0
  577. package/dist/ui/components/layout/resources/pokemon/714.txt +10 -0
  578. package/dist/ui/components/layout/resources/pokemon/719.txt +11 -0
  579. package/dist/ui/components/layout/resources/pokemon/72.txt +11 -0
  580. package/dist/ui/components/layout/resources/pokemon/720.txt +10 -0
  581. package/dist/ui/components/layout/resources/pokemon/722.txt +9 -0
  582. package/dist/ui/components/layout/resources/pokemon/723.txt +11 -0
  583. package/dist/ui/components/layout/resources/pokemon/725.txt +11 -0
  584. package/dist/ui/components/layout/resources/pokemon/726.txt +12 -0
  585. package/dist/ui/components/layout/resources/pokemon/728.txt +10 -0
  586. package/dist/ui/components/layout/resources/pokemon/729.txt +12 -0
  587. package/dist/ui/components/layout/resources/pokemon/731.txt +11 -0
  588. package/dist/ui/components/layout/resources/pokemon/732.txt +11 -0
  589. package/dist/ui/components/layout/resources/pokemon/733.txt +11 -0
  590. package/dist/ui/components/layout/resources/pokemon/734.txt +8 -0
  591. package/dist/ui/components/layout/resources/pokemon/735.txt +12 -0
  592. package/dist/ui/components/layout/resources/pokemon/736.txt +7 -0
  593. package/dist/ui/components/layout/resources/pokemon/737.txt +10 -0
  594. package/dist/ui/components/layout/resources/pokemon/739.txt +11 -0
  595. package/dist/ui/components/layout/resources/pokemon/74-alola.txt +8 -0
  596. package/dist/ui/components/layout/resources/pokemon/74.txt +8 -0
  597. package/dist/ui/components/layout/resources/pokemon/740.txt +12 -0
  598. package/dist/ui/components/layout/resources/pokemon/741-baile.txt +10 -0
  599. package/dist/ui/components/layout/resources/pokemon/741-pau.txt +11 -0
  600. package/dist/ui/components/layout/resources/pokemon/741-pom-pom.txt +10 -0
  601. package/dist/ui/components/layout/resources/pokemon/741-sensu.txt +12 -0
  602. package/dist/ui/components/layout/resources/pokemon/741.txt +10 -0
  603. package/dist/ui/components/layout/resources/pokemon/742.txt +10 -0
  604. package/dist/ui/components/layout/resources/pokemon/744-own-tempo.txt +11 -0
  605. package/dist/ui/components/layout/resources/pokemon/744.txt +11 -0
  606. package/dist/ui/components/layout/resources/pokemon/746-solo.txt +7 -0
  607. package/dist/ui/components/layout/resources/pokemon/746.txt +7 -0
  608. package/dist/ui/components/layout/resources/pokemon/747.txt +10 -0
  609. package/dist/ui/components/layout/resources/pokemon/749.txt +12 -0
  610. package/dist/ui/components/layout/resources/pokemon/75-alola.txt +12 -0
  611. package/dist/ui/components/layout/resources/pokemon/75.txt +11 -0
  612. package/dist/ui/components/layout/resources/pokemon/751.txt +10 -0
  613. package/dist/ui/components/layout/resources/pokemon/753.txt +10 -0
  614. package/dist/ui/components/layout/resources/pokemon/755.txt +12 -0
  615. package/dist/ui/components/layout/resources/pokemon/757.txt +9 -0
  616. package/dist/ui/components/layout/resources/pokemon/759.txt +10 -0
  617. package/dist/ui/components/layout/resources/pokemon/761.txt +10 -0
  618. package/dist/ui/components/layout/resources/pokemon/762.txt +12 -0
  619. package/dist/ui/components/layout/resources/pokemon/767.txt +7 -0
  620. package/dist/ui/components/layout/resources/pokemon/769.txt +11 -0
  621. package/dist/ui/components/layout/resources/pokemon/77-galar.txt +11 -0
  622. package/dist/ui/components/layout/resources/pokemon/77.txt +12 -0
  623. package/dist/ui/components/layout/resources/pokemon/771.txt +10 -0
  624. package/dist/ui/components/layout/resources/pokemon/774-blue.txt +9 -0
  625. package/dist/ui/components/layout/resources/pokemon/774-green.txt +9 -0
  626. package/dist/ui/components/layout/resources/pokemon/774-indigo.txt +9 -0
  627. package/dist/ui/components/layout/resources/pokemon/774-orange.txt +9 -0
  628. package/dist/ui/components/layout/resources/pokemon/774-red.txt +9 -0
  629. package/dist/ui/components/layout/resources/pokemon/774-violet.txt +9 -0
  630. package/dist/ui/components/layout/resources/pokemon/774-yellow.txt +9 -0
  631. package/dist/ui/components/layout/resources/pokemon/774.txt +9 -0
  632. package/dist/ui/components/layout/resources/pokemon/775-form-1.txt +10 -0
  633. package/dist/ui/components/layout/resources/pokemon/775.txt +10 -0
  634. package/dist/ui/components/layout/resources/pokemon/779.txt +10 -0
  635. package/dist/ui/components/layout/resources/pokemon/782.txt +12 -0
  636. package/dist/ui/components/layout/resources/pokemon/789.txt +10 -0
  637. package/dist/ui/components/layout/resources/pokemon/79-galar.txt +7 -0
  638. package/dist/ui/components/layout/resources/pokemon/79.txt +11 -0
  639. package/dist/ui/components/layout/resources/pokemon/790.txt +10 -0
  640. package/dist/ui/components/layout/resources/pokemon/793.txt +12 -0
  641. package/dist/ui/components/layout/resources/pokemon/8.txt +11 -0
  642. package/dist/ui/components/layout/resources/pokemon/808.txt +9 -0
  643. package/dist/ui/components/layout/resources/pokemon/81.txt +8 -0
  644. package/dist/ui/components/layout/resources/pokemon/810.txt +12 -0
  645. package/dist/ui/components/layout/resources/pokemon/819.txt +11 -0
  646. package/dist/ui/components/layout/resources/pokemon/821.txt +8 -0
  647. package/dist/ui/components/layout/resources/pokemon/825.txt +11 -0
  648. package/dist/ui/components/layout/resources/pokemon/827.txt +11 -0
  649. package/dist/ui/components/layout/resources/pokemon/829.txt +9 -0
  650. package/dist/ui/components/layout/resources/pokemon/83.txt +11 -0
  651. package/dist/ui/components/layout/resources/pokemon/831.txt +10 -0
  652. package/dist/ui/components/layout/resources/pokemon/833.txt +12 -0
  653. package/dist/ui/components/layout/resources/pokemon/835.txt +10 -0
  654. package/dist/ui/components/layout/resources/pokemon/837.txt +9 -0
  655. package/dist/ui/components/layout/resources/pokemon/838.txt +12 -0
  656. package/dist/ui/components/layout/resources/pokemon/84.txt +9 -0
  657. package/dist/ui/components/layout/resources/pokemon/840.txt +9 -0
  658. package/dist/ui/components/layout/resources/pokemon/843.txt +10 -0
  659. package/dist/ui/components/layout/resources/pokemon/846.txt +8 -0
  660. package/dist/ui/components/layout/resources/pokemon/847.txt +10 -0
  661. package/dist/ui/components/layout/resources/pokemon/848.txt +11 -0
  662. package/dist/ui/components/layout/resources/pokemon/850.txt +5 -0
  663. package/dist/ui/components/layout/resources/pokemon/854.txt +7 -0
  664. package/dist/ui/components/layout/resources/pokemon/856.txt +12 -0
  665. package/dist/ui/components/layout/resources/pokemon/857.txt +11 -0
  666. package/dist/ui/components/layout/resources/pokemon/859.txt +10 -0
  667. package/dist/ui/components/layout/resources/pokemon/86.txt +12 -0
  668. package/dist/ui/components/layout/resources/pokemon/860.txt +12 -0
  669. package/dist/ui/components/layout/resources/pokemon/868.txt +9 -0
  670. package/dist/ui/components/layout/resources/pokemon/871.txt +9 -0
  671. package/dist/ui/components/layout/resources/pokemon/872.txt +7 -0
  672. package/dist/ui/components/layout/resources/pokemon/877-hangry.txt +11 -0
  673. package/dist/ui/components/layout/resources/pokemon/877.txt +11 -0
  674. package/dist/ui/components/layout/resources/pokemon/878.txt +11 -0
  675. package/dist/ui/components/layout/resources/pokemon/88-alola.txt +9 -0
  676. package/dist/ui/components/layout/resources/pokemon/88.txt +9 -0
  677. package/dist/ui/components/layout/resources/pokemon/885.txt +9 -0
  678. package/dist/ui/components/layout/resources/pokemon/886.txt +12 -0
  679. package/dist/ui/components/layout/resources/pokemon/891.txt +11 -0
  680. package/dist/ui/components/layout/resources/pokemon/90.txt +9 -0
  681. package/dist/ui/components/layout/resources/pokemon/92.txt +11 -0
  682. package/dist/ui/components/layout/resources/pokemon/96.txt +11 -0
  683. package/dist/ui/components/layout/resources/pokemon/98.txt +11 -0
  684. package/dist/ui/components/layout/resources/pokemon/manifest.json +9 -0
  685. package/package.json +8 -7
@@ -505,7 +505,7 @@ var SETTINGS_SCHEMA = {
505
505
  description: "The type of ASCII art resources to display in horizontal layout.",
506
506
  showInDialog: true,
507
507
  options: [
508
- { value: "pokemon", label: "Pokemon" },
508
+ { value: "pokemon", label: "Pokefetch Pok\xE9mon" },
509
509
  { value: "custom", label: "Custom Directory" }
510
510
  ]
511
511
  },
@@ -849,7 +849,7 @@ function getSettingsSchema() {
849
849
  function isPlainObject(item) {
850
850
  return !!item && typeof item === "object" && !Array.isArray(item);
851
851
  }
852
- function mergeRecursively(target, source, getMergeStrategyForPath2, path16 = []) {
852
+ function mergeRecursively(target, source, getMergeStrategyForPath2, path15 = []) {
853
853
  for (const key of Object.keys(source)) {
854
854
  if (key === "__proto__") {
855
855
  continue;
@@ -858,7 +858,7 @@ function mergeRecursively(target, source, getMergeStrategyForPath2, path16 = [])
858
858
  if (srcValue === void 0) {
859
859
  continue;
860
860
  }
861
- const newPath = [...path16, key];
861
+ const newPath = [...path15, key];
862
862
  const objValue = target[key];
863
863
  const mergeStrategy = getMergeStrategyForPath2(newPath);
864
864
  if (mergeStrategy === "shallow_merge" /* SHALLOW_MERGE */ && objValue && srcValue) {
@@ -1189,11 +1189,11 @@ function formatValidationError(error, filePath) {
1189
1189
  const MAX_ERRORS_TO_DISPLAY = 5;
1190
1190
  const displayedIssues = error.issues.slice(0, MAX_ERRORS_TO_DISPLAY);
1191
1191
  for (const issue of displayedIssues) {
1192
- const path16 = issue.path.reduce(
1192
+ const path15 = issue.path.reduce(
1193
1193
  (acc, curr) => typeof curr === "number" ? `${acc}[${curr}]` : `${acc ? acc + "." : ""}${curr}`,
1194
1194
  ""
1195
1195
  );
1196
- lines.push(`Error in: ${path16 || "(root)"}`);
1196
+ lines.push(`Error in: ${path15 || "(root)"}`);
1197
1197
  lines.push(` ${issue.message}`);
1198
1198
  if (issue.code === "invalid_type") {
1199
1199
  const expected = issue.expected;
@@ -1275,11 +1275,11 @@ function resolveEnvVarsInObjectInternal(obj, visited, customEnv) {
1275
1275
  var USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
1276
1276
  var USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
1277
1277
  var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
1278
- function getMergeStrategyForPath(path16) {
1278
+ function getMergeStrategyForPath(path15) {
1279
1279
  let current = void 0;
1280
1280
  let currentSchema = getSettingsSchema();
1281
1281
  let parent = void 0;
1282
- for (const key of path16) {
1282
+ for (const key of path15) {
1283
1283
  if (!currentSchema || !currentSchema[key]) {
1284
1284
  if (parent?.additionalProperties?.mergeStrategy) {
1285
1285
  return parent.additionalProperties.mergeStrategy;
@@ -1337,8 +1337,8 @@ function mergeSettings(system, systemDefaults, user, workspace, isTrusted) {
1337
1337
  system
1338
1338
  );
1339
1339
  }
1340
- function setNestedProperty(obj, path16, value) {
1341
- const keys = path16.split(".");
1340
+ function setNestedProperty(obj, path15, value) {
1341
+ const keys = path15.split(".");
1342
1342
  const lastKey = keys.pop();
1343
1343
  if (!lastKey) return;
1344
1344
  let current = obj;
@@ -4587,7 +4587,7 @@ var ToolResultDisplay = ({
4587
4587
  ] });
4588
4588
  case "search-paths":
4589
4589
  return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
4590
- resultDisplay2.paths.map((path16) => /* @__PURE__ */ jsx18(Text15, { children: path16 }, path16)),
4590
+ resultDisplay2.paths.map((path15) => /* @__PURE__ */ jsx18(Text15, { children: path15 }, path15)),
4591
4591
  resultDisplay2.truncated && /* @__PURE__ */ jsxs15(Text15, { dimColor: true, children: [
4592
4592
  "Showing ",
4593
4593
  String(resultDisplay2.paths.length),
@@ -6039,10 +6039,11 @@ import { Box as Box25 } from "ink";
6039
6039
  import { Box as Box21, Text as Text20 } from "ink";
6040
6040
 
6041
6041
  // src/generated/git-commit.ts
6042
- var GIT_COMMIT_INFO = "31b5700";
6042
+ var GIT_COMMIT_INFO = "1318436";
6043
6043
 
6044
6044
  // src/ui/components/dialogs/about-box.tsx
6045
6045
  import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
6046
+ var POKEFETCH_PROJECT_URL = "https://github.com/cofy-x/pokefetch";
6046
6047
  var AboutBox = ({
6047
6048
  cliVersion,
6048
6049
  osVersion,
@@ -6073,6 +6074,13 @@ var AboutBox = ({
6073
6074
  /* @__PURE__ */ jsxs21(Box21, { flexDirection: "row", children: [
6074
6075
  /* @__PURE__ */ jsx27(Box21, { width: "35%", children: /* @__PURE__ */ jsx27(Text20, { bold: true, color: theme.text.link, children: "OS" }) }),
6075
6076
  /* @__PURE__ */ jsx27(Box21, { children: /* @__PURE__ */ jsx27(Text20, { color: theme.text.primary, children: osVersion }) })
6077
+ ] }),
6078
+ /* @__PURE__ */ jsxs21(Box21, { flexDirection: "row", children: [
6079
+ /* @__PURE__ */ jsx27(Box21, { width: "35%", children: /* @__PURE__ */ jsx27(Text20, { bold: true, color: theme.text.link, children: "Header Art" }) }),
6080
+ /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", children: [
6081
+ /* @__PURE__ */ jsx27(Text20, { color: theme.text.primary, children: "Pokefetch by cofy-x" }),
6082
+ /* @__PURE__ */ jsx27(Text20, { color: theme.text.link, children: POKEFETCH_PROJECT_URL })
6083
+ ] })
6076
6084
  ] })
6077
6085
  ]
6078
6086
  }
@@ -6172,24 +6180,81 @@ var getStatusColor = (value, thresholds, options = {}) => {
6172
6180
  // src/ui/state/session-stats.ts
6173
6181
  var computeSessionStats = (metrics) => {
6174
6182
  const { models, tools } = metrics;
6183
+ const totalUncachedInputTokens = Object.values(models).reduce(
6184
+ (acc, model) => acc + model.tokens.inputTokens,
6185
+ 0
6186
+ );
6175
6187
  const totalCacheReadTokens = Object.values(models).reduce(
6176
6188
  (acc, model) => acc + model.tokens.cacheReadTokens,
6177
6189
  0
6178
6190
  );
6191
+ const totalCacheWriteTokens = Object.values(models).reduce(
6192
+ (acc, model) => acc + model.tokens.cacheWriteTokens,
6193
+ 0
6194
+ );
6179
6195
  const totalPromptTokens = Object.values(models).reduce(
6180
6196
  (acc, model) => acc + model.tokens.inputTokens + model.tokens.cacheReadTokens + model.tokens.cacheWriteTokens,
6181
6197
  0
6182
6198
  );
6199
+ const totalOutputTokens = Object.values(models).reduce(
6200
+ (acc, model) => acc + model.tokens.outputTokens,
6201
+ 0
6202
+ );
6203
+ const totalReasoningTokens = Object.values(models).reduce(
6204
+ (acc, model) => acc + model.tokens.reasoningTokens,
6205
+ 0
6206
+ );
6207
+ const totalSessionTokens = Object.values(models).reduce(
6208
+ (acc, model) => acc + model.tokens.totalTokens,
6209
+ 0
6210
+ );
6183
6211
  const cacheEfficiency = totalPromptTokens > 0 ? totalCacheReadTokens / totalPromptTokens * 100 : 0;
6184
6212
  const successRate = tools.totalCalls > 0 ? tools.totalSuccess / tools.totalCalls * 100 : 0;
6185
6213
  return {
6186
6214
  cacheEfficiency,
6187
6215
  successRate,
6216
+ totalUncachedInputTokens,
6188
6217
  totalCacheReadTokens,
6189
- totalPromptTokens
6218
+ totalCacheWriteTokens,
6219
+ totalPromptTokens,
6220
+ totalOutputTokens,
6221
+ totalReasoningTokens,
6222
+ totalSessionTokens
6190
6223
  };
6191
6224
  };
6192
6225
 
6226
+ // src/ui/hooks/terminal/use-terminal-size.ts
6227
+ import { useEffect as useEffect11, useState as useState9 } from "react";
6228
+ function useTerminalSize() {
6229
+ const [size, setSize] = useState9({
6230
+ columns: process.stdout.columns || 60,
6231
+ rows: process.stdout.rows || 20
6232
+ });
6233
+ useEffect11(() => {
6234
+ function updateSize() {
6235
+ setSize({
6236
+ columns: process.stdout.columns || 60,
6237
+ rows: process.stdout.rows || 20
6238
+ });
6239
+ }
6240
+ process.stdout.on("resize", updateSize);
6241
+ return () => {
6242
+ process.stdout.off("resize", updateSize);
6243
+ };
6244
+ }, []);
6245
+ return size;
6246
+ }
6247
+
6248
+ // src/ui/utils/format-token-count.ts
6249
+ function formatTokenCount(tokens) {
6250
+ if (tokens < 1e3) return String(tokens);
6251
+ const divisor = tokens < 1e6 ? 1e3 : 1e6;
6252
+ const suffix = divisor === 1e3 ? "k" : "m";
6253
+ const value = tokens / divisor;
6254
+ const fractionDigits = value < 100 && !Number.isInteger(value) ? 1 : 0;
6255
+ return `${value.toFixed(fractionDigits)}${suffix}`;
6256
+ }
6257
+
6193
6258
  // src/ui/components/stats/stats-display.tsx
6194
6259
  import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
6195
6260
  var StatRow = ({
@@ -6199,56 +6264,86 @@ var StatRow = ({
6199
6264
  /* @__PURE__ */ jsx30(Box22, { width: 22, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.link, children: title }) }),
6200
6265
  children
6201
6266
  ] });
6202
- var ModelUsageTable = ({ models, cacheEfficiency, totalCacheReadTokens }) => {
6267
+ var ModelUsageTable = ({ models, compact }) => {
6203
6268
  const rows = Object.entries(models);
6204
6269
  if (rows.length === 0) return null;
6205
- const cacheColor = getStatusColor(cacheEfficiency, {
6206
- green: CACHE_EFFICIENCY_HIGH,
6207
- yellow: CACHE_EFFICIENCY_MEDIUM
6208
- });
6270
+ if (compact) {
6271
+ return /* @__PURE__ */ jsxs22(Box22, { flexDirection: "column", marginTop: 1, children: [
6272
+ /* @__PURE__ */ jsx30(Box22, { marginBottom: 1, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.accent, children: "Model Usage" }) }),
6273
+ rows.map(([name2, metrics], index) => {
6274
+ const promptTokens = metrics.tokens.inputTokens + metrics.tokens.cacheReadTokens + metrics.tokens.cacheWriteTokens;
6275
+ const totalTokens = metrics.tokens.totalTokens;
6276
+ return /* @__PURE__ */ jsxs22(
6277
+ Box22,
6278
+ {
6279
+ flexDirection: "column",
6280
+ marginTop: index === 0 ? 0 : 1,
6281
+ children: [
6282
+ /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.primary, wrap: "wrap", children: name2 }),
6283
+ /* @__PURE__ */ jsx30(StatRow, { title: "Requests:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.requests }) }),
6284
+ /* @__PURE__ */ jsx30(StatRow, { title: "Input:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.inputTokens.toLocaleString() }) }),
6285
+ /* @__PURE__ */ jsx30(StatRow, { title: "Cache Read:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheReadTokens.toLocaleString() }) }),
6286
+ /* @__PURE__ */ jsx30(StatRow, { title: "Cache Write:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheWriteTokens.toLocaleString() }) }),
6287
+ /* @__PURE__ */ jsx30(StatRow, { title: "Prompt Total:", children: /* @__PURE__ */ jsx30(Text22, { children: promptTokens.toLocaleString() }) }),
6288
+ /* @__PURE__ */ jsx30(StatRow, { title: "Output:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.outputTokens.toLocaleString() }) }),
6289
+ /* @__PURE__ */ jsx30(StatRow, { title: "Reasoning:", children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.accent, children: metrics.tokens.reasoningTokens.toLocaleString() }) }),
6290
+ /* @__PURE__ */ jsx30(StatRow, { title: "Total:", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: totalTokens.toLocaleString() }) })
6291
+ ]
6292
+ },
6293
+ name2
6294
+ );
6295
+ }),
6296
+ /* @__PURE__ */ jsx30(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.secondary, children: "Reasoning tokens are included in Output." }) })
6297
+ ] });
6298
+ }
6209
6299
  return /* @__PURE__ */ jsxs22(Box22, { flexDirection: "column", marginTop: 1, children: [
6210
- /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.primary, children: "Model Usage" }),
6300
+ /* @__PURE__ */ jsx30(Box22, { marginBottom: 1, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.accent, children: "Model Usage" }) }),
6211
6301
  /* @__PURE__ */ jsxs22(Box22, { children: [
6212
- /* @__PURE__ */ jsx30(Box22, { width: 25, children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Model" }) }),
6213
- /* @__PURE__ */ jsx30(Box22, { width: 7, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Reqs" }) }),
6214
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Input" }) }),
6215
- /* @__PURE__ */ jsx30(Box22, { width: 15, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Cache R/W" }) }),
6216
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Output" }) }),
6217
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: "Reasoning" }) })
6302
+ /* @__PURE__ */ jsx30(Box22, { width: 23, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Model" }) }),
6303
+ /* @__PURE__ */ jsx30(Box22, { width: 9, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Requests" }) }),
6304
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Input" }) }),
6305
+ /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Cache Read" }) }),
6306
+ /* @__PURE__ */ jsx30(Box22, { width: 13, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Cache Write" }) }),
6307
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Prompt" }) }),
6308
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Output" }) }),
6309
+ /* @__PURE__ */ jsx30(Box22, { width: 11, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Reasoning" }) }),
6310
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Total" }) })
6218
6311
  ] }),
6219
- rows.map(([name2, metrics]) => /* @__PURE__ */ jsxs22(Box22, { children: [
6220
- /* @__PURE__ */ jsx30(Box22, { width: 25, children: /* @__PURE__ */ jsx30(Text22, { wrap: "truncate-end", children: name2 }) }),
6221
- /* @__PURE__ */ jsx30(Box22, { width: 7, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.requests }) }),
6222
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.inputTokens.toLocaleString() }) }),
6223
- /* @__PURE__ */ jsx30(Box22, { width: 15, justifyContent: "flex-end", children: /* @__PURE__ */ jsxs22(Text22, { children: [
6224
- metrics.tokens.cacheReadTokens.toLocaleString(),
6225
- " / ",
6226
- metrics.tokens.cacheWriteTokens.toLocaleString()
6227
- ] }) }),
6228
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.outputTokens.toLocaleString() }) }),
6229
- /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.reasoningTokens.toLocaleString() }) })
6230
- ] }, name2)),
6231
- totalCacheReadTokens > 0 && /* @__PURE__ */ jsx30(Box22, { marginTop: 1, children: /* @__PURE__ */ jsxs22(Text22, { color: theme.text.secondary, children: [
6232
- "Cache reads: ",
6233
- totalCacheReadTokens.toLocaleString(),
6234
- " tokens (",
6235
- " ",
6236
- /* @__PURE__ */ jsxs22(Text22, { color: cacheColor, children: [
6237
- cacheEfficiency.toFixed(1),
6238
- "%"
6239
- ] }),
6240
- " of prompt tokens)"
6241
- ] }) })
6312
+ rows.map(([name2, metrics]) => {
6313
+ const promptTokens = metrics.tokens.inputTokens + metrics.tokens.cacheReadTokens + metrics.tokens.cacheWriteTokens;
6314
+ const totalTokens = metrics.tokens.totalTokens;
6315
+ return /* @__PURE__ */ jsxs22(Box22, { children: [
6316
+ /* @__PURE__ */ jsx30(Box22, { width: 23, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.primary, wrap: "truncate-end", children: name2 }) }),
6317
+ /* @__PURE__ */ jsx30(Box22, { width: 9, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.requests }) }),
6318
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.inputTokens.toLocaleString() }) }),
6319
+ /* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheReadTokens.toLocaleString() }) }),
6320
+ /* @__PURE__ */ jsx30(Box22, { width: 13, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheWriteTokens.toLocaleString() }) }),
6321
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: promptTokens.toLocaleString() }) }),
6322
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.outputTokens.toLocaleString() }) }),
6323
+ /* @__PURE__ */ jsx30(Box22, { width: 11, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.accent, children: metrics.tokens.reasoningTokens.toLocaleString() }) }),
6324
+ /* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: totalTokens.toLocaleString() }) })
6325
+ ] }, name2);
6326
+ }),
6327
+ /* @__PURE__ */ jsx30(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.secondary, children: "Reasoning tokens are included in Output." }) })
6242
6328
  ] });
6243
6329
  };
6244
6330
  var StatsDisplay = ({ duration, title }) => {
6245
6331
  const { stats } = useSessionStats();
6332
+ const { columns } = useTerminalSize();
6246
6333
  const { models, tools } = stats.metrics;
6247
6334
  const computed = computeSessionStats(stats.metrics);
6248
6335
  const successColor = getStatusColor(computed.successRate, {
6249
6336
  green: TOOL_SUCCESS_RATE_HIGH,
6250
6337
  yellow: TOOL_SUCCESS_RATE_MEDIUM
6251
6338
  });
6339
+ const cacheColor = getStatusColor(computed.cacheEfficiency, {
6340
+ green: CACHE_EFFICIENCY_HIGH,
6341
+ yellow: CACHE_EFFICIENCY_MEDIUM
6342
+ });
6343
+ const validContextWindow = stats.contextWindow !== void 0 && stats.contextWindow > 0 ? stats.contextWindow : void 0;
6344
+ const showLatestPrompt = stats.lastPromptTokenCount > 0 || validContextWindow !== void 0;
6345
+ const contextPercent = validContextWindow === void 0 ? void 0 : Math.round(stats.lastPromptTokenCount / validContextWindow * 100);
6346
+ const latestPrompt = `${formatTokenCount(stats.lastPromptTokenCount)}/${validContextWindow === void 0 ? "?" : formatTokenCount(validContextWindow)}${contextPercent === void 0 ? "" : ` (${contextPercent}%)`}`;
6252
6347
  return /* @__PURE__ */ jsxs22(
6253
6348
  Box22,
6254
6349
  {
@@ -6263,6 +6358,24 @@ var StatsDisplay = ({ duration, title }) => {
6263
6358
  /* @__PURE__ */ jsx30(Box22, { height: 1 }),
6264
6359
  /* @__PURE__ */ jsx30(StatRow, { title: "Session ID:", children: /* @__PURE__ */ jsx30(Text22, { children: stats.sessionId }) }),
6265
6360
  /* @__PURE__ */ jsx30(StatRow, { title: "Wall Time:", children: /* @__PURE__ */ jsx30(Text22, { children: duration }) }),
6361
+ showLatestPrompt && /* @__PURE__ */ jsx30(StatRow, { title: "Latest Prompt:", children: /* @__PURE__ */ jsx30(Text22, { children: latestPrompt }) }),
6362
+ /* @__PURE__ */ jsx30(StatRow, { title: "Session Tokens:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
6363
+ computed.totalSessionTokens.toLocaleString(),
6364
+ " total (",
6365
+ computed.totalPromptTokens.toLocaleString(),
6366
+ " prompt / ",
6367
+ computed.totalOutputTokens.toLocaleString(),
6368
+ " output)"
6369
+ ] }) }),
6370
+ computed.totalCacheReadTokens > 0 && /* @__PURE__ */ jsx30(StatRow, { title: "Cache Read:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
6371
+ computed.totalCacheReadTokens.toLocaleString(),
6372
+ " (",
6373
+ /* @__PURE__ */ jsxs22(Text22, { color: cacheColor, children: [
6374
+ computed.cacheEfficiency.toFixed(1),
6375
+ "%"
6376
+ ] }),
6377
+ " of prompt tokens)"
6378
+ ] }) }),
6266
6379
  /* @__PURE__ */ jsx30(StatRow, { title: "Tool Calls:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
6267
6380
  tools.totalCalls,
6268
6381
  " (",
@@ -6285,8 +6398,7 @@ var StatsDisplay = ({ duration, title }) => {
6285
6398
  ModelUsageTable,
6286
6399
  {
6287
6400
  models,
6288
- cacheEfficiency: computed.cacheEfficiency,
6289
- totalCacheReadTokens: computed.totalCacheReadTokens
6401
+ compact: columns < 120
6290
6402
  }
6291
6403
  )
6292
6404
  ]
@@ -6528,28 +6640,6 @@ var HistoryItemDisplay = ({
6528
6640
  );
6529
6641
  };
6530
6642
 
6531
- // src/ui/hooks/terminal/use-terminal-size.ts
6532
- import { useEffect as useEffect11, useState as useState9 } from "react";
6533
- function useTerminalSize() {
6534
- const [size, setSize] = useState9({
6535
- columns: process.stdout.columns || 60,
6536
- rows: process.stdout.rows || 20
6537
- });
6538
- useEffect11(() => {
6539
- function updateSize() {
6540
- setSize({
6541
- columns: process.stdout.columns || 60,
6542
- rows: process.stdout.rows || 20
6543
- });
6544
- }
6545
- process.stdout.on("resize", updateSize);
6546
- return () => {
6547
- process.stdout.off("resize", updateSize);
6548
- };
6549
- }, []);
6550
- return size;
6551
- }
6552
-
6553
6643
  // src/ui/components/indicators/quitting-display.tsx
6554
6644
  import { jsx as jsx35 } from "react/jsx-runtime";
6555
6645
  var QuittingDisplay = () => {
@@ -6572,7 +6662,7 @@ var QuittingDisplay = () => {
6572
6662
  };
6573
6663
 
6574
6664
  // src/ui/components/layout/screen-reader-app-layout.tsx
6575
- import { Box as Box63 } from "ink";
6665
+ import { Box as Box64 } from "ink";
6576
6666
 
6577
6667
  // src/ui/components/indicators/notifications.tsx
6578
6668
  import { Box as Box27, Text as Text25, useIsScreenReaderEnabled as useIsScreenReaderEnabled3 } from "ink";
@@ -9094,8 +9184,8 @@ function requiresRestart(key) {
9094
9184
  function getDefaultValue(key) {
9095
9185
  return getFlattenedSchema()[key]?.default;
9096
9186
  }
9097
- function getNestedValue(obj, path16) {
9098
- const [first, ...rest] = path16;
9187
+ function getNestedValue(obj, path15) {
9188
+ const [first, ...rest] = path15;
9099
9189
  if (!first || !(first in obj)) {
9100
9190
  return void 0;
9101
9191
  }
@@ -9113,12 +9203,12 @@ function getEffectiveValue(key, settings, mergedSettings) {
9113
9203
  if (!definition) {
9114
9204
  return void 0;
9115
9205
  }
9116
- const path16 = key.split(".");
9117
- let value = getNestedValue(settings, path16);
9206
+ const path15 = key.split(".");
9207
+ let value = getNestedValue(settings, path15);
9118
9208
  if (value !== void 0) {
9119
9209
  return value;
9120
9210
  }
9121
- value = getNestedValue(mergedSettings, path16);
9211
+ value = getNestedValue(mergedSettings, path15);
9122
9212
  if (value !== void 0) {
9123
9213
  return value;
9124
9214
  }
@@ -9128,12 +9218,12 @@ function getDialogSettingKeys() {
9128
9218
  return Object.values(getFlattenedSchema()).filter((definition) => definition.showInDialog !== false).map((definition) => definition.key);
9129
9219
  }
9130
9220
  function settingExistsInScope(key, scopeSettings) {
9131
- const path16 = key.split(".");
9132
- const value = getNestedValue(scopeSettings, path16);
9221
+ const path15 = key.split(".");
9222
+ const value = getNestedValue(scopeSettings, path15);
9133
9223
  return value !== void 0;
9134
9224
  }
9135
- function setNestedValue(obj, path16, value) {
9136
- const [first, ...rest] = path16;
9225
+ function setNestedValue(obj, path15, value) {
9226
+ const [first, ...rest] = path15;
9137
9227
  if (!first) {
9138
9228
  return obj;
9139
9229
  }
@@ -9148,15 +9238,15 @@ function setNestedValue(obj, path16, value) {
9148
9238
  return obj;
9149
9239
  }
9150
9240
  function setPendingSettingValue(key, value, pendingSettings) {
9151
- const path16 = key.split(".");
9241
+ const path15 = key.split(".");
9152
9242
  const newSettings = JSON.parse(JSON.stringify(pendingSettings));
9153
- setNestedValue(newSettings, path16, value);
9243
+ setNestedValue(newSettings, path15, value);
9154
9244
  return newSettings;
9155
9245
  }
9156
9246
  function setPendingSettingValueAny(key, value, pendingSettings) {
9157
- const path16 = key.split(".");
9247
+ const path15 = key.split(".");
9158
9248
  const newSettings = structuredClone(pendingSettings);
9159
- setNestedValue(newSettings, path16, value);
9249
+ setNestedValue(newSettings, path15, value);
9160
9250
  return newSettings;
9161
9251
  }
9162
9252
  function hasRestartRequiredSettings(modifiedSettings) {
@@ -9167,10 +9257,10 @@ function getRestartRequiredFromModified(modifiedSettings) {
9167
9257
  }
9168
9258
  function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSettings, scope) {
9169
9259
  modifiedSettings.forEach((settingKey) => {
9170
- const path16 = settingKey.split(".");
9260
+ const path15 = settingKey.split(".");
9171
9261
  const value = getNestedValue(
9172
9262
  pendingSettings,
9173
- path16
9263
+ path15
9174
9264
  );
9175
9265
  if (value === void 0) {
9176
9266
  return;
@@ -14043,7 +14133,7 @@ var DialogManager = ({ terminalWidth }) => {
14043
14133
 
14044
14134
  // src/ui/components/input/composer.tsx
14045
14135
  import { useState as useState33 } from "react";
14046
- import { Box as Box57, useIsScreenReaderEnabled as useIsScreenReaderEnabled4 } from "ink";
14136
+ import { Box as Box58, useIsScreenReaderEnabled as useIsScreenReaderEnabled4 } from "ink";
14047
14137
 
14048
14138
  // src/ui/components/indicators/loading-indicator.tsx
14049
14139
  import { Box as Box45, Text as Text38 } from "ink";
@@ -16850,7 +16940,7 @@ var InputPrompt = ({
16850
16940
  };
16851
16941
 
16852
16942
  // src/ui/components/layout/footer.tsx
16853
- import { Box as Box53, Text as Text48 } from "ink";
16943
+ import { Box as Box54, Text as Text49 } from "ink";
16854
16944
 
16855
16945
  // src/ui/components/layout/console-summary-display.tsx
16856
16946
  import { Box as Box51, Text as Text45 } from "ink";
@@ -17083,8 +17173,33 @@ var DebugProfiler = ({ compact = false }) => {
17083
17173
  ] }, forceRefresh);
17084
17174
  };
17085
17175
 
17086
- // src/ui/components/layout/footer.tsx
17176
+ // src/ui/components/stats/context-usage-display.tsx
17177
+ import { Box as Box53, Text as Text48 } from "ink";
17087
17178
  import { jsx as jsx68, jsxs as jsxs52 } from "react/jsx-runtime";
17179
+ var WARNING_PERCENT = 70;
17180
+ var ERROR_PERCENT = 85;
17181
+ function ContextUsageDisplay({
17182
+ promptTokens,
17183
+ contextWindow: contextWindow2,
17184
+ compact = false
17185
+ }) {
17186
+ const validContextWindow = contextWindow2 !== void 0 && contextWindow2 > 0 ? contextWindow2 : void 0;
17187
+ if (promptTokens === 0 && validContextWindow === void 0) return null;
17188
+ const percent = validContextWindow === void 0 ? void 0 : promptTokens / validContextWindow * 100;
17189
+ const color = percent !== void 0 && percent >= ERROR_PERCENT ? theme.status.error : percent !== void 0 && percent >= WARNING_PERCENT ? theme.status.warning : theme.text.secondary;
17190
+ const percentage = compact || percent === void 0 ? "" : ` (${Math.round(percent)}%)`;
17191
+ const usage = `${formatTokenCount(promptTokens)}/${validContextWindow === void 0 ? "?" : formatTokenCount(validContextWindow)}`;
17192
+ return /* @__PURE__ */ jsxs52(Box53, { children: [
17193
+ /* @__PURE__ */ jsx68(Text48, { color: theme.text.secondary, children: " | " }),
17194
+ /* @__PURE__ */ jsxs52(Text48, { color, children: [
17195
+ usage,
17196
+ percentage
17197
+ ] })
17198
+ ] });
17199
+ }
17200
+
17201
+ // src/ui/components/layout/footer.tsx
17202
+ import { jsx as jsx69, jsxs as jsxs53 } from "react/jsx-runtime";
17088
17203
  var isDevelopment = process.env["NODE_ENV"] === "development";
17089
17204
  var Footer = () => {
17090
17205
  const uiState = useUIState();
@@ -17120,8 +17235,8 @@ var Footer = () => {
17120
17235
  const justifyContent = hideCWD && hideModelInfo ? "center" : "space-between";
17121
17236
  const displayVimMode = vimEnabled ? vimMode : void 0;
17122
17237
  const showRenderDiagnostics = debugMode || isDevelopment;
17123
- return /* @__PURE__ */ jsxs52(
17124
- Box53,
17238
+ return /* @__PURE__ */ jsxs53(
17239
+ Box54,
17125
17240
  {
17126
17241
  justifyContent,
17127
17242
  width: terminalWidth,
@@ -17129,47 +17244,59 @@ var Footer = () => {
17129
17244
  alignItems: "center",
17130
17245
  paddingX: 1,
17131
17246
  children: [
17132
- (displayVimMode || !hideCWD) && /* @__PURE__ */ jsxs52(Box53, { children: [
17133
- displayVimMode && /* @__PURE__ */ jsxs52(Text48, { color: theme.text.secondary, children: [
17247
+ (displayVimMode || !hideCWD) && /* @__PURE__ */ jsxs53(Box54, { children: [
17248
+ displayVimMode && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.secondary, children: [
17134
17249
  "[",
17135
17250
  displayVimMode,
17136
17251
  "] "
17137
17252
  ] }),
17138
- !hideCWD && (nightly ? /* @__PURE__ */ jsxs52(ThemedGradient, { children: [
17253
+ !hideCWD && (nightly ? /* @__PURE__ */ jsxs53(ThemedGradient, { children: [
17139
17254
  displayPath,
17140
- branchName && /* @__PURE__ */ jsxs52(Text48, { children: [
17255
+ branchName && /* @__PURE__ */ jsxs53(Text49, { children: [
17141
17256
  " (",
17142
17257
  branchName,
17143
17258
  "*)"
17144
17259
  ] })
17145
- ] }) : /* @__PURE__ */ jsxs52(Text48, { color: theme.text.link, children: [
17260
+ ] }) : /* @__PURE__ */ jsxs53(Text49, { color: theme.text.link, children: [
17146
17261
  displayPath,
17147
- branchName && /* @__PURE__ */ jsxs52(Text48, { color: theme.text.secondary, children: [
17262
+ branchName && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.secondary, children: [
17148
17263
  " (",
17149
17264
  branchName,
17150
17265
  "*)"
17151
17266
  ] })
17152
17267
  ] })),
17153
- debugMode && /* @__PURE__ */ jsx68(Text48, { color: theme.status.error, children: " " + (debugMessage || "--debug") })
17268
+ debugMode && /* @__PURE__ */ jsx69(Text49, { color: theme.status.error, children: " " + (debugMessage || "--debug") })
17154
17269
  ] }),
17155
- showRenderDiagnostics && /* @__PURE__ */ jsx68(
17156
- Box53,
17270
+ showRenderDiagnostics && /* @__PURE__ */ jsx69(
17271
+ Box54,
17157
17272
  {
17158
17273
  flexGrow: 1,
17159
17274
  flexShrink: 1,
17160
17275
  justifyContent: "center",
17161
17276
  marginX: terminalWidth >= 120 ? 1 : 0,
17162
- children: /* @__PURE__ */ jsx68(DebugProfiler, { compact: terminalWidth < 120 })
17277
+ children: /* @__PURE__ */ jsx69(DebugProfiler, { compact: terminalWidth < 120 })
17163
17278
  }
17164
17279
  ),
17165
- !hideModelInfo && /* @__PURE__ */ jsxs52(Box53, { alignItems: "center", justifyContent: "flex-end", children: [
17166
- /* @__PURE__ */ jsxs52(Box53, { alignItems: "center", justifyContent: "flex-end", children: [
17167
- /* @__PURE__ */ jsx68(Text48, { color: theme.text.accent, children: model }),
17168
- showMemoryUsage && /* @__PURE__ */ jsx68(MemoryUsageDisplay, {})
17280
+ !hideModelInfo && /* @__PURE__ */ jsxs53(Box54, { alignItems: "center", justifyContent: "flex-end", children: [
17281
+ /* @__PURE__ */ jsxs53(Box54, { alignItems: "center", justifyContent: "flex-end", children: [
17282
+ /* @__PURE__ */ jsx69(Text49, { color: theme.text.accent, children: model }),
17283
+ uiState.currentReasoningEffort && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.link, children: [
17284
+ " ",
17285
+ uiState.currentReasoningEffort
17286
+ ] }),
17287
+ /* @__PURE__ */ jsx69(
17288
+ ContextUsageDisplay,
17289
+ {
17290
+ promptTokens: uiState.sessionStats.lastPromptTokenCount,
17291
+ contextWindow: uiState.sessionStats.contextWindow,
17292
+ compact: terminalWidth < 100
17293
+ }
17294
+ ),
17295
+ showMemoryUsage && /* @__PURE__ */ jsx69(MemoryUsageDisplay, {})
17169
17296
  ] }),
17170
- /* @__PURE__ */ jsx68(Box53, { alignItems: "center", children: !showErrorDetails && errorCount > 0 && /* @__PURE__ */ jsxs52(Box53, { paddingLeft: 1, flexDirection: "row", children: [
17171
- /* @__PURE__ */ jsx68(Text48, { color: theme.ui.comment, children: "| " }),
17172
- /* @__PURE__ */ jsx68(ConsoleSummaryDisplay, { errorCount })
17297
+ /* @__PURE__ */ jsx69(Box54, { alignItems: "center", children: !showErrorDetails && errorCount > 0 && /* @__PURE__ */ jsxs53(Box54, { paddingLeft: 1, flexDirection: "row", children: [
17298
+ /* @__PURE__ */ jsx69(Text49, { color: theme.ui.comment, children: "| " }),
17299
+ /* @__PURE__ */ jsx69(ConsoleSummaryDisplay, { errorCount })
17173
17300
  ] }) })
17174
17301
  ] })
17175
17302
  ]
@@ -17178,8 +17305,8 @@ var Footer = () => {
17178
17305
  };
17179
17306
 
17180
17307
  // src/ui/components/indicators/queued-message-display.tsx
17181
- import { Box as Box54, Text as Text49 } from "ink";
17182
- import { jsx as jsx69, jsxs as jsxs53 } from "react/jsx-runtime";
17308
+ import { Box as Box55, Text as Text50 } from "ink";
17309
+ import { jsx as jsx70, jsxs as jsxs54 } from "react/jsx-runtime";
17183
17310
  var MAX_DISPLAYED_QUEUED_MESSAGES = 3;
17184
17311
  var QueuedMessageDisplay = ({
17185
17312
  messageQueue
@@ -17187,13 +17314,13 @@ var QueuedMessageDisplay = ({
17187
17314
  if (messageQueue.length === 0) {
17188
17315
  return null;
17189
17316
  }
17190
- return /* @__PURE__ */ jsxs53(Box54, { flexDirection: "column", marginTop: 1, children: [
17191
- /* @__PURE__ */ jsx69(Box54, { paddingLeft: 2, children: /* @__PURE__ */ jsx69(Text49, { dimColor: true, children: "Queued (press \u2191 to edit):" }) }),
17317
+ return /* @__PURE__ */ jsxs54(Box55, { flexDirection: "column", marginTop: 1, children: [
17318
+ /* @__PURE__ */ jsx70(Box55, { paddingLeft: 2, children: /* @__PURE__ */ jsx70(Text50, { dimColor: true, children: "Queued (press \u2191 to edit):" }) }),
17192
17319
  messageQueue.slice(0, MAX_DISPLAYED_QUEUED_MESSAGES).map((message, index) => {
17193
17320
  const preview2 = message.replace(/\s+/g, " ");
17194
- return /* @__PURE__ */ jsx69(Box54, { paddingLeft: 4, width: "100%", children: /* @__PURE__ */ jsx69(Text49, { dimColor: true, wrap: "truncate", children: preview2 }) }, index);
17321
+ return /* @__PURE__ */ jsx70(Box55, { paddingLeft: 4, width: "100%", children: /* @__PURE__ */ jsx70(Text50, { dimColor: true, wrap: "truncate", children: preview2 }) }, index);
17195
17322
  }),
17196
- messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && /* @__PURE__ */ jsx69(Box54, { paddingLeft: 4, children: /* @__PURE__ */ jsxs53(Text49, { dimColor: true, children: [
17323
+ messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && /* @__PURE__ */ jsx70(Box55, { paddingLeft: 4, children: /* @__PURE__ */ jsxs54(Text50, { dimColor: true, children: [
17197
17324
  "... (+",
17198
17325
  messageQueue.length - MAX_DISPLAYED_QUEUED_MESSAGES,
17199
17326
  " more)"
@@ -17202,20 +17329,20 @@ var QueuedMessageDisplay = ({
17202
17329
  };
17203
17330
 
17204
17331
  // src/ui/components/help/command-init-display.tsx
17205
- import { Box as Box55, Text as Text50 } from "ink";
17206
- import { jsx as jsx70, jsxs as jsxs54 } from "react/jsx-runtime";
17332
+ import { Box as Box56, Text as Text51 } from "ink";
17333
+ import { jsx as jsx71, jsxs as jsxs55 } from "react/jsx-runtime";
17207
17334
  var CommandInitDisplay = ({
17208
17335
  message = "Loading commands..."
17209
- }) => /* @__PURE__ */ jsx70(Box55, { marginTop: 1, children: /* @__PURE__ */ jsxs54(Text50, { children: [
17210
- /* @__PURE__ */ jsx70(AgentSpinner, {}),
17336
+ }) => /* @__PURE__ */ jsx71(Box56, { marginTop: 1, children: /* @__PURE__ */ jsxs55(Text51, { children: [
17337
+ /* @__PURE__ */ jsx71(AgentSpinner, {}),
17211
17338
  " ",
17212
- /* @__PURE__ */ jsx70(Text50, { color: theme.text.primary, children: message })
17339
+ /* @__PURE__ */ jsx71(Text51, { color: theme.text.primary, children: message })
17213
17340
  ] }) });
17214
17341
 
17215
17342
  // src/ui/components/messages/todo.tsx
17216
- import { Box as Box56, Text as Text51 } from "ink";
17343
+ import { Box as Box57, Text as Text52 } from "ink";
17217
17344
  import { useMemo as useMemo21 } from "react";
17218
- import { jsx as jsx71, jsxs as jsxs55 } from "react/jsx-runtime";
17345
+ import { jsx as jsx72, jsxs as jsxs56 } from "react/jsx-runtime";
17219
17346
  var TodoTitleDisplay = ({ todos }) => {
17220
17347
  const score = useMemo21(() => {
17221
17348
  let total = 0;
@@ -17230,9 +17357,9 @@ var TodoTitleDisplay = ({ todos }) => {
17230
17357
  }
17231
17358
  return `${completed}/${total} completed`;
17232
17359
  }, [todos]);
17233
- return /* @__PURE__ */ jsxs55(Box56, { flexDirection: "row", columnGap: 2, height: 1, children: [
17234
- /* @__PURE__ */ jsx71(Text51, { color: theme.text.primary, bold: true, "aria-label": "Todo list", children: "Todo" }),
17235
- /* @__PURE__ */ jsxs55(Text51, { color: theme.text.secondary, children: [
17360
+ return /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 2, height: 1, children: [
17361
+ /* @__PURE__ */ jsx72(Text52, { color: theme.text.primary, bold: true, "aria-label": "Todo list", children: "Todo" }),
17362
+ /* @__PURE__ */ jsxs56(Text52, { color: theme.text.secondary, children: [
17236
17363
  score,
17237
17364
  " (ctrl+t to toggle)"
17238
17365
  ] })
@@ -17241,14 +17368,14 @@ var TodoTitleDisplay = ({ todos }) => {
17241
17368
  var TodoStatusDisplay = ({ status }) => {
17242
17369
  switch (status) {
17243
17370
  case "completed":
17244
- return /* @__PURE__ */ jsx71(Text51, { color: theme.status.success, "aria-label": "Completed", children: "\u2713" });
17371
+ return /* @__PURE__ */ jsx72(Text52, { color: theme.status.success, "aria-label": "Completed", children: "\u2713" });
17245
17372
  case "in_progress":
17246
- return /* @__PURE__ */ jsx71(Text51, { color: theme.text.accent, "aria-label": "In Progress", children: "\xBB" });
17373
+ return /* @__PURE__ */ jsx72(Text52, { color: theme.text.accent, "aria-label": "In Progress", children: "\xBB" });
17247
17374
  case "pending":
17248
- return /* @__PURE__ */ jsx71(Text51, { color: theme.text.secondary, "aria-label": "Pending", children: "\u2610" });
17375
+ return /* @__PURE__ */ jsx72(Text52, { color: theme.text.secondary, "aria-label": "Pending", children: "\u2610" });
17249
17376
  case "cancelled":
17250
17377
  default:
17251
- return /* @__PURE__ */ jsx71(Text51, { color: theme.status.error, "aria-label": "Cancelled", children: "\u2717" });
17378
+ return /* @__PURE__ */ jsx72(Text52, { color: theme.status.error, "aria-label": "Cancelled", children: "\u2717" });
17252
17379
  }
17253
17380
  };
17254
17381
  var TodoItemDisplay = ({ todo, wrap, role: ariaRole }) => {
@@ -17264,9 +17391,9 @@ var TodoItemDisplay = ({ todo, wrap, role: ariaRole }) => {
17264
17391
  }
17265
17392
  })();
17266
17393
  const strikethrough = todo.status === "cancelled";
17267
- return /* @__PURE__ */ jsxs55(Box56, { flexDirection: "row", columnGap: 1, "aria-role": ariaRole, children: [
17268
- /* @__PURE__ */ jsx71(TodoStatusDisplay, { status: todo.status }),
17269
- /* @__PURE__ */ jsx71(Box56, { flexShrink: 1, children: /* @__PURE__ */ jsx71(Text51, { color: textColor, wrap, strikethrough, children: todo.description }) })
17394
+ return /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 1, "aria-role": ariaRole, children: [
17395
+ /* @__PURE__ */ jsx72(TodoStatusDisplay, { status: todo.status }),
17396
+ /* @__PURE__ */ jsx72(Box57, { flexShrink: 1, children: /* @__PURE__ */ jsx72(Text52, { color: textColor, wrap, strikethrough, children: todo.description }) })
17270
17397
  ] });
17271
17398
  };
17272
17399
  var TodoTray = () => {
@@ -17287,8 +17414,8 @@ var TodoTray = () => {
17287
17414
  if (todos === null || !todos.todos || todos.todos.length === 0 || !uiState.showFullTodos && !hasActiveTodos) {
17288
17415
  return null;
17289
17416
  }
17290
- return /* @__PURE__ */ jsx71(
17291
- Box56,
17417
+ return /* @__PURE__ */ jsx72(
17418
+ Box57,
17292
17419
  {
17293
17420
  borderStyle: "single",
17294
17421
  borderBottom: false,
@@ -17297,47 +17424,47 @@ var TodoTray = () => {
17297
17424
  borderColor: theme.border.default,
17298
17425
  paddingLeft: 1,
17299
17426
  paddingRight: 1,
17300
- children: uiState.showFullTodos ? /* @__PURE__ */ jsxs55(Box56, { flexDirection: "column", rowGap: 1, children: [
17301
- /* @__PURE__ */ jsx71(TodoTitleDisplay, { todos }),
17302
- /* @__PURE__ */ jsx71(TodoListDisplay, { todos })
17303
- ] }) : /* @__PURE__ */ jsxs55(Box56, { flexDirection: "row", columnGap: 1, height: 1, children: [
17304
- /* @__PURE__ */ jsx71(Box56, { flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx71(TodoTitleDisplay, { todos }) }),
17305
- inProgress && /* @__PURE__ */ jsx71(Box56, { flexShrink: 1, flexGrow: 1, children: /* @__PURE__ */ jsx71(TodoItemDisplay, { todo: inProgress, wrap: "truncate" }) })
17427
+ children: uiState.showFullTodos ? /* @__PURE__ */ jsxs56(Box57, { flexDirection: "column", rowGap: 1, children: [
17428
+ /* @__PURE__ */ jsx72(TodoTitleDisplay, { todos }),
17429
+ /* @__PURE__ */ jsx72(TodoListDisplay, { todos })
17430
+ ] }) : /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 1, height: 1, children: [
17431
+ /* @__PURE__ */ jsx72(Box57, { flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx72(TodoTitleDisplay, { todos }) }),
17432
+ inProgress && /* @__PURE__ */ jsx72(Box57, { flexShrink: 1, flexGrow: 1, children: /* @__PURE__ */ jsx72(TodoItemDisplay, { todo: inProgress, wrap: "truncate" }) })
17306
17433
  ] })
17307
17434
  }
17308
17435
  );
17309
17436
  };
17310
- var TodoListDisplay = ({ todos }) => /* @__PURE__ */ jsx71(Box56, { flexDirection: "column", "aria-role": "list", children: todos.todos.map((todo, index) => /* @__PURE__ */ jsx71(TodoItemDisplay, { todo, role: "listitem" }, index)) });
17437
+ var TodoListDisplay = ({ todos }) => /* @__PURE__ */ jsx72(Box57, { flexDirection: "column", "aria-role": "list", children: todos.todos.map((todo, index) => /* @__PURE__ */ jsx72(TodoItemDisplay, { todo, role: "listitem" }, index)) });
17311
17438
 
17312
17439
  // src/ui/components/layout/status-display.tsx
17313
- import { Text as Text52 } from "ink";
17314
- import { jsx as jsx72 } from "react/jsx-runtime";
17440
+ import { Text as Text53 } from "ink";
17441
+ import { jsx as jsx73 } from "react/jsx-runtime";
17315
17442
  var StatusDisplay = () => {
17316
17443
  const uiState = useUIState();
17317
17444
  if (process.env["DSH_CONSOLE_SYSTEM_MD"]) {
17318
- return /* @__PURE__ */ jsx72(Text52, { color: theme.status.error, children: "|\u2310\u25A0_\u25A0|" });
17445
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.status.error, children: "|\u2310\u25A0_\u25A0|" });
17319
17446
  }
17320
17447
  if (uiState.ctrlCPressedOnce) {
17321
- return /* @__PURE__ */ jsx72(Text52, { color: theme.status.warning, children: "Press Ctrl+C again to exit." });
17448
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: "Press Ctrl+C again to exit." });
17322
17449
  }
17323
17450
  if (uiState.warningMessage) {
17324
- return /* @__PURE__ */ jsx72(Text52, { color: theme.status.warning, children: uiState.warningMessage });
17451
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: uiState.warningMessage });
17325
17452
  }
17326
17453
  if (uiState.ctrlDPressedOnce) {
17327
- return /* @__PURE__ */ jsx72(Text52, { color: theme.status.warning, children: "Press Ctrl+D again to exit." });
17454
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: "Press Ctrl+D again to exit." });
17328
17455
  }
17329
17456
  if (uiState.showEscapePrompt) {
17330
17457
  if (uiState.buffer.text.length === 0) return null;
17331
- return /* @__PURE__ */ jsx72(Text52, { color: theme.text.secondary, children: "Press Esc again to clear prompt." });
17458
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.text.secondary, children: "Press Esc again to clear prompt." });
17332
17459
  }
17333
17460
  if (uiState.queueErrorMessage) {
17334
- return /* @__PURE__ */ jsx72(Text52, { color: theme.status.error, children: uiState.queueErrorMessage });
17461
+ return /* @__PURE__ */ jsx73(Text53, { color: theme.status.error, children: uiState.queueErrorMessage });
17335
17462
  }
17336
17463
  return null;
17337
17464
  };
17338
17465
 
17339
17466
  // src/ui/components/input/composer.tsx
17340
- import { jsx as jsx73, jsxs as jsxs56 } from "react/jsx-runtime";
17467
+ import { jsx as jsx74, jsxs as jsxs57 } from "react/jsx-runtime";
17341
17468
  var Composer = ({ isFocused = true }) => {
17342
17469
  const config = useConfig();
17343
17470
  const settings = useSettings();
@@ -17351,26 +17478,26 @@ var Composer = ({ isFocused = true }) => {
17351
17478
  const [, setSuggestionsVisible] = useState33(false);
17352
17479
  const isAlternateBuffer = useAlternateBuffer();
17353
17480
  const suggestionsPosition = isAlternateBuffer ? "above" : "below";
17354
- return /* @__PURE__ */ jsxs56(
17355
- Box57,
17481
+ return /* @__PURE__ */ jsxs57(
17482
+ Box58,
17356
17483
  {
17357
17484
  flexDirection: "column",
17358
17485
  width: uiState.terminalWidth,
17359
17486
  flexGrow: 0,
17360
17487
  flexShrink: 0,
17361
17488
  children: [
17362
- !uiState.embeddedShellFocused && /* @__PURE__ */ jsx73(
17489
+ !uiState.embeddedShellFocused && /* @__PURE__ */ jsx74(
17363
17490
  LoadingIndicator,
17364
17491
  {
17365
17492
  currentLoadingPhrase: config.getAccessibility()?.enableLoadingPhrases === false ? void 0 : uiState.currentLoadingPhrase,
17366
17493
  elapsedTime: uiState.elapsedTime
17367
17494
  }
17368
17495
  ),
17369
- !uiState.slashCommands && /* @__PURE__ */ jsx73(CommandInitDisplay, {}),
17370
- /* @__PURE__ */ jsx73(QueuedMessageDisplay, { messageQueue: uiState.messageQueue }),
17371
- /* @__PURE__ */ jsx73(TodoTray, {}),
17372
- /* @__PURE__ */ jsxs56(
17373
- Box57,
17496
+ !uiState.slashCommands && /* @__PURE__ */ jsx74(CommandInitDisplay, {}),
17497
+ /* @__PURE__ */ jsx74(QueuedMessageDisplay, { messageQueue: uiState.messageQueue }),
17498
+ /* @__PURE__ */ jsx74(TodoTray, {}),
17499
+ /* @__PURE__ */ jsxs57(
17500
+ Box58,
17374
17501
  {
17375
17502
  marginTop: 1,
17376
17503
  justifyContent: "space-between",
@@ -17378,16 +17505,16 @@ var Composer = ({ isFocused = true }) => {
17378
17505
  flexDirection: isNarrow ? "column" : "row",
17379
17506
  alignItems: isNarrow ? "flex-start" : "center",
17380
17507
  children: [
17381
- /* @__PURE__ */ jsx73(Box57, { marginRight: 1, children: /* @__PURE__ */ jsx73(StatusDisplay, {}) }),
17382
- /* @__PURE__ */ jsxs56(Box57, { paddingTop: isNarrow ? 1 : 0, children: [
17383
- uiState.shellModeActive && /* @__PURE__ */ jsx73(ShellModeIndicator, {}),
17384
- !uiState.renderMarkdown && /* @__PURE__ */ jsx73(RawMarkdownIndicator, {})
17508
+ /* @__PURE__ */ jsx74(Box58, { marginRight: 1, children: /* @__PURE__ */ jsx74(StatusDisplay, {}) }),
17509
+ /* @__PURE__ */ jsxs57(Box58, { paddingTop: isNarrow ? 1 : 0, children: [
17510
+ uiState.shellModeActive && /* @__PURE__ */ jsx74(ShellModeIndicator, {}),
17511
+ !uiState.renderMarkdown && /* @__PURE__ */ jsx74(RawMarkdownIndicator, {})
17385
17512
  ] })
17386
17513
  ]
17387
17514
  }
17388
17515
  ),
17389
- uiState.showErrorDetails && /* @__PURE__ */ jsx73(OverflowProvider, { children: /* @__PURE__ */ jsxs56(Box57, { flexDirection: "column", children: [
17390
- /* @__PURE__ */ jsx73(
17516
+ uiState.showErrorDetails && /* @__PURE__ */ jsx74(OverflowProvider, { children: /* @__PURE__ */ jsxs57(Box58, { flexDirection: "column", children: [
17517
+ /* @__PURE__ */ jsx74(
17391
17518
  DetailedMessagesDisplay,
17392
17519
  {
17393
17520
  messages: uiState.filteredConsoleMessages,
@@ -17396,9 +17523,9 @@ var Composer = ({ isFocused = true }) => {
17396
17523
  hasFocus: uiState.showErrorDetails
17397
17524
  }
17398
17525
  ),
17399
- /* @__PURE__ */ jsx73(ShowMoreLines, { constrainHeight: uiState.constrainHeight })
17526
+ /* @__PURE__ */ jsx74(ShowMoreLines, { constrainHeight: uiState.constrainHeight })
17400
17527
  ] }) }),
17401
- uiState.isInputActive && /* @__PURE__ */ jsx73(
17528
+ uiState.isInputActive && /* @__PURE__ */ jsx74(
17402
17529
  InputPrompt,
17403
17530
  {
17404
17531
  buffer: uiState.buffer,
@@ -17425,20 +17552,20 @@ var Composer = ({ isFocused = true }) => {
17425
17552
  onSuggestionsVisibilityChange: setSuggestionsVisible
17426
17553
  }
17427
17554
  ),
17428
- !settings.merged.ui.hideFooter && !isScreenReaderEnabled && /* @__PURE__ */ jsx73(Footer, {})
17555
+ !settings.merged.ui.hideFooter && !isScreenReaderEnabled && /* @__PURE__ */ jsx74(Footer, {})
17429
17556
  ]
17430
17557
  }
17431
17558
  );
17432
17559
  };
17433
17560
 
17434
17561
  // src/ui/components/dialogs/exit-warning.tsx
17435
- import { Box as Box58, Text as Text53 } from "ink";
17436
- import { Fragment as Fragment13, jsx as jsx74, jsxs as jsxs57 } from "react/jsx-runtime";
17562
+ import { Box as Box59, Text as Text54 } from "ink";
17563
+ import { Fragment as Fragment13, jsx as jsx75, jsxs as jsxs58 } from "react/jsx-runtime";
17437
17564
  var ExitWarning = () => {
17438
17565
  const uiState = useUIState();
17439
- return /* @__PURE__ */ jsxs57(Fragment13, { children: [
17440
- uiState.dialogsVisible && uiState.ctrlCPressedOnce && /* @__PURE__ */ jsx74(Box58, { marginTop: 1, children: /* @__PURE__ */ jsx74(Text53, { color: theme.status.warning, children: "Press Ctrl+C again to exit." }) }),
17441
- uiState.dialogsVisible && uiState.ctrlDPressedOnce && /* @__PURE__ */ jsx74(Box58, { marginTop: 1, children: /* @__PURE__ */ jsx74(Text53, { color: theme.status.warning, children: "Press Ctrl+D again to exit." }) })
17566
+ return /* @__PURE__ */ jsxs58(Fragment13, { children: [
17567
+ uiState.dialogsVisible && uiState.ctrlCPressedOnce && /* @__PURE__ */ jsx75(Box59, { marginTop: 1, children: /* @__PURE__ */ jsx75(Text54, { color: theme.status.warning, children: "Press Ctrl+C again to exit." }) }),
17568
+ uiState.dialogsVisible && uiState.ctrlDPressedOnce && /* @__PURE__ */ jsx75(Box59, { marginTop: 1, children: /* @__PURE__ */ jsx75(Text54, { color: theme.status.warning, children: "Press Ctrl+D again to exit." }) })
17442
17569
  ] });
17443
17570
  };
17444
17571
 
@@ -17467,7 +17594,7 @@ import {
17467
17594
  useMemo as useMemo22,
17468
17595
  useSyncExternalStore
17469
17596
  } from "react";
17470
- import { jsx as jsx75 } from "react/jsx-runtime";
17597
+ import { jsx as jsx76 } from "react/jsx-runtime";
17471
17598
  var ApprovalContext = createContext12(
17472
17599
  void 0
17473
17600
  );
@@ -17478,7 +17605,7 @@ var ApprovalRuntimeProvider = ({ runtime, children }) => {
17478
17605
  runtime.getSnapshot
17479
17606
  );
17480
17607
  const value = useMemo22(() => ({ runtime, snapshot }), [runtime, snapshot]);
17481
- return /* @__PURE__ */ jsx75(ApprovalContext.Provider, { value, children });
17608
+ return /* @__PURE__ */ jsx76(ApprovalContext.Provider, { value, children });
17482
17609
  };
17483
17610
  function useApprovalRuntime() {
17484
17611
  const value = useContext13(ApprovalContext);
@@ -17497,7 +17624,7 @@ import {
17497
17624
  useMemo as useMemo23,
17498
17625
  useSyncExternalStore as useSyncExternalStore2
17499
17626
  } from "react";
17500
- import { jsx as jsx76 } from "react/jsx-runtime";
17627
+ import { jsx as jsx77 } from "react/jsx-runtime";
17501
17628
  var UserQuestionContext = createContext13(void 0);
17502
17629
  var UserQuestionRuntimeProvider = ({ runtime, children }) => {
17503
17630
  const snapshot = useSyncExternalStore2(
@@ -17506,7 +17633,7 @@ var UserQuestionRuntimeProvider = ({ runtime, children }) => {
17506
17633
  runtime.getSnapshot
17507
17634
  );
17508
17635
  const value = useMemo23(() => ({ runtime, snapshot }), [runtime, snapshot]);
17509
- return /* @__PURE__ */ jsx76(UserQuestionContext.Provider, { value, children });
17636
+ return /* @__PURE__ */ jsx77(UserQuestionContext.Provider, { value, children });
17510
17637
  };
17511
17638
  function useUserQuestionRuntime() {
17512
17639
  const value = useContext14(UserQuestionContext);
@@ -17519,12 +17646,12 @@ function useUserQuestionRuntime() {
17519
17646
  }
17520
17647
 
17521
17648
  // src/ui/components/dialogs/tool-confirmation-queue.tsx
17522
- import { Box as Box60, Text as Text55 } from "ink";
17649
+ import { Box as Box61, Text as Text56 } from "ink";
17523
17650
 
17524
17651
  // src/ui/components/messages/tool-confirmation-message.tsx
17525
- import { Box as Box59, Text as Text54 } from "ink";
17652
+ import { Box as Box60, Text as Text55 } from "ink";
17526
17653
  import { useMemo as useMemo24 } from "react";
17527
- import { jsx as jsx77, jsxs as jsxs58 } from "react/jsx-runtime";
17654
+ import { jsx as jsx78, jsxs as jsxs59 } from "react/jsx-runtime";
17528
17655
  var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
17529
17656
  useKeypress(
17530
17657
  (key) => {
@@ -17545,14 +17672,14 @@ var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
17545
17672
  ],
17546
17673
  []
17547
17674
  );
17548
- return /* @__PURE__ */ jsxs58(Box59, { flexDirection: "column", paddingBottom: 1, children: [
17549
- request.reason !== void 0 && /* @__PURE__ */ jsx77(Box59, { marginBottom: 1, children: /* @__PURE__ */ jsx77(Text54, { color: theme.text.secondary, children: request.reason }) }),
17550
- /* @__PURE__ */ jsx77(Box59, { marginBottom: 1, children: /* @__PURE__ */ jsxs58(Text54, { color: theme.text.primary, children: [
17675
+ return /* @__PURE__ */ jsxs59(Box60, { flexDirection: "column", paddingBottom: 1, children: [
17676
+ request.reason !== void 0 && /* @__PURE__ */ jsx78(Box60, { marginBottom: 1, children: /* @__PURE__ */ jsx78(Text55, { color: theme.text.secondary, children: request.reason }) }),
17677
+ /* @__PURE__ */ jsx78(Box60, { marginBottom: 1, children: /* @__PURE__ */ jsxs59(Text55, { color: theme.text.primary, children: [
17551
17678
  "Allow ",
17552
- /* @__PURE__ */ jsx77(Text54, { bold: true, children: request.toolName }),
17679
+ /* @__PURE__ */ jsx78(Text55, { bold: true, children: request.toolName }),
17553
17680
  " to continue?"
17554
17681
  ] }) }),
17555
- /* @__PURE__ */ jsx77(
17682
+ /* @__PURE__ */ jsx78(
17556
17683
  RadioButtonSelect,
17557
17684
  {
17558
17685
  items: options,
@@ -17560,14 +17687,14 @@ var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
17560
17687
  isFocused
17561
17688
  }
17562
17689
  ),
17563
- /* @__PURE__ */ jsx77(Text54, { color: theme.text.secondary, children: "Esc cancels this request" })
17690
+ /* @__PURE__ */ jsx78(Text55, { color: theme.text.secondary, children: "Esc cancels this request" })
17564
17691
  ] });
17565
17692
  };
17566
17693
 
17567
17694
  // src/ui/components/dialogs/tool-confirmation-queue.tsx
17568
- import { jsx as jsx78, jsxs as jsxs59 } from "react/jsx-runtime";
17569
- var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond }) => /* @__PURE__ */ jsxs59(
17570
- Box60,
17695
+ import { jsx as jsx79, jsxs as jsxs60 } from "react/jsx-runtime";
17696
+ var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond }) => /* @__PURE__ */ jsxs60(
17697
+ Box61,
17571
17698
  {
17572
17699
  flexDirection: "column",
17573
17700
  borderStyle: "round",
@@ -17576,22 +17703,22 @@ var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond })
17576
17703
  width: terminalWidth,
17577
17704
  flexShrink: 0,
17578
17705
  children: [
17579
- /* @__PURE__ */ jsxs59(Box60, { marginBottom: 1, justifyContent: "space-between", children: [
17580
- /* @__PURE__ */ jsx78(Text55, { color: theme.status.warning, bold: true, children: "Action Required" }),
17581
- /* @__PURE__ */ jsxs59(Text55, { color: theme.text.secondary, children: [
17706
+ /* @__PURE__ */ jsxs60(Box61, { marginBottom: 1, justifyContent: "space-between", children: [
17707
+ /* @__PURE__ */ jsx79(Text56, { color: theme.status.warning, bold: true, children: "Action Required" }),
17708
+ /* @__PURE__ */ jsxs60(Text56, { color: theme.text.secondary, children: [
17582
17709
  index,
17583
17710
  " of ",
17584
17711
  total
17585
17712
  ] })
17586
17713
  ] }),
17587
- /* @__PURE__ */ jsxs59(Box60, { marginBottom: 1, flexDirection: "column", children: [
17588
- /* @__PURE__ */ jsx78(Text55, { color: theme.text.primary, bold: true, children: request.toolName }),
17589
- request.callId !== void 0 && /* @__PURE__ */ jsxs59(Text55, { color: theme.text.secondary, children: [
17714
+ /* @__PURE__ */ jsxs60(Box61, { marginBottom: 1, flexDirection: "column", children: [
17715
+ /* @__PURE__ */ jsx79(Text56, { color: theme.text.primary, bold: true, children: request.toolName }),
17716
+ request.callId !== void 0 && /* @__PURE__ */ jsxs60(Text56, { color: theme.text.secondary, children: [
17590
17717
  "Call ",
17591
17718
  request.callId
17592
17719
  ] })
17593
17720
  ] }),
17594
- /* @__PURE__ */ jsx78(
17721
+ /* @__PURE__ */ jsx79(
17595
17722
  ToolConfirmationMessage,
17596
17723
  {
17597
17724
  request,
@@ -17615,12 +17742,12 @@ import {
17615
17742
  useReducer as useReducer4,
17616
17743
  useContext as useContext15
17617
17744
  } from "react";
17618
- import { Box as Box62, Text as Text57, useStdout as useStdout3 } from "ink";
17745
+ import { Box as Box63, Text as Text58, useStdout as useStdout3 } from "ink";
17619
17746
 
17620
17747
  // src/ui/components/layout/tab-header.tsx
17621
17748
  import React15 from "react";
17622
- import { Text as Text56, Box as Box61 } from "ink";
17623
- import { jsx as jsx79, jsxs as jsxs60 } from "react/jsx-runtime";
17749
+ import { Text as Text57, Box as Box62 } from "ink";
17750
+ import { jsx as jsx80, jsxs as jsxs61 } from "react/jsx-runtime";
17624
17751
  function TabHeader({
17625
17752
  tabs,
17626
17753
  currentIndex,
@@ -17640,16 +17767,16 @@ function TabHeader({
17640
17767
  if (tab.isSpecial) return "\u2261";
17641
17768
  return isCompleted ? "\u2713" : "\u25A1";
17642
17769
  };
17643
- return /* @__PURE__ */ jsxs60(Box61, { flexDirection: "row", marginBottom: 1, children: [
17644
- showArrows && /* @__PURE__ */ jsx79(Text56, { color: theme.text.secondary, children: "\u2190 " }),
17645
- tabs.map((tab, i) => /* @__PURE__ */ jsxs60(React15.Fragment, { children: [
17646
- i > 0 && /* @__PURE__ */ jsx79(Text56, { color: theme.text.secondary, children: " \u2502 " }),
17647
- showStatusIcons && /* @__PURE__ */ jsxs60(Text56, { color: theme.text.secondary, children: [
17770
+ return /* @__PURE__ */ jsxs61(Box62, { flexDirection: "row", marginBottom: 1, children: [
17771
+ showArrows && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: "\u2190 " }),
17772
+ tabs.map((tab, i) => /* @__PURE__ */ jsxs61(React15.Fragment, { children: [
17773
+ i > 0 && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: " \u2502 " }),
17774
+ showStatusIcons && /* @__PURE__ */ jsxs61(Text57, { color: theme.text.secondary, children: [
17648
17775
  getStatusIcon(tab, i),
17649
17776
  " "
17650
17777
  ] }),
17651
- /* @__PURE__ */ jsx79(
17652
- Text56,
17778
+ /* @__PURE__ */ jsx80(
17779
+ Text57,
17653
17780
  {
17654
17781
  color: i === currentIndex ? theme.text.accent : theme.text.secondary,
17655
17782
  bold: i === currentIndex,
@@ -17657,12 +17784,12 @@ function TabHeader({
17657
17784
  }
17658
17785
  )
17659
17786
  ] }, tab.key)),
17660
- showArrows && /* @__PURE__ */ jsx79(Text56, { color: theme.text.secondary, children: " \u2192" })
17787
+ showArrows && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: " \u2192" })
17661
17788
  ] });
17662
17789
  }
17663
17790
 
17664
17791
  // src/ui/components/dialogs/ask-user-dialog.tsx
17665
- import { jsx as jsx80, jsxs as jsxs61 } from "react/jsx-runtime";
17792
+ import { jsx as jsx81, jsxs as jsxs62 } from "react/jsx-runtime";
17666
17793
  var initialState2 = {
17667
17794
  currentQuestionIndex: 0,
17668
17795
  answers: {},
@@ -17776,8 +17903,8 @@ var ReviewView = ({
17776
17903
  },
17777
17904
  { isActive: true }
17778
17905
  );
17779
- return /* @__PURE__ */ jsxs61(
17780
- Box62,
17906
+ return /* @__PURE__ */ jsxs62(
17907
+ Box63,
17781
17908
  {
17782
17909
  flexDirection: "column",
17783
17910
  borderStyle: "round",
@@ -17785,19 +17912,19 @@ var ReviewView = ({
17785
17912
  borderColor: theme.border.default,
17786
17913
  children: [
17787
17914
  progressHeader,
17788
- /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsx80(Text57, { bold: true, color: theme.text.primary, children: "Review your answers:" }) }),
17789
- hasUnanswered && /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsxs61(Text57, { color: theme.status.warning, children: [
17915
+ /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: "Review your answers:" }) }),
17916
+ hasUnanswered && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsxs62(Text58, { color: theme.status.warning, children: [
17790
17917
  "\u26A0 You have ",
17791
17918
  unansweredCount,
17792
17919
  " unanswered question",
17793
17920
  unansweredCount > 1 ? "s" : ""
17794
17921
  ] }) }),
17795
- questions.map((q, i) => /* @__PURE__ */ jsxs61(Box62, { marginBottom: 0, children: [
17796
- /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: q.header }),
17797
- /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: " \u2192 " }),
17798
- /* @__PURE__ */ jsx80(Text57, { color: answers[i] ? theme.text.primary : theme.status.warning, children: (answers[i] ? formatAnswerForReview(q, answers[i]) : void 0) || "(not answered)" })
17922
+ questions.map((q, i) => /* @__PURE__ */ jsxs62(Box63, { marginBottom: 0, children: [
17923
+ /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: q.header }),
17924
+ /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: " \u2192 " }),
17925
+ /* @__PURE__ */ jsx81(Text58, { color: answers[i] ? theme.text.primary : theme.status.warning, children: (answers[i] ? formatAnswerForReview(q, answers[i]) : void 0) || "(not answered)" })
17799
17926
  ] }, i)),
17800
- /* @__PURE__ */ jsx80(Box62, { marginTop: 1, children: /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: "Enter to submit \xB7 Tab/Shift+Tab to edit answers \xB7 Esc to cancel" }) })
17927
+ /* @__PURE__ */ jsx81(Box63, { marginTop: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: "Enter to submit \xB7 Tab/Shift+Tab to edit answers \xB7 Esc to cancel" }) })
17801
17928
  ]
17802
17929
  }
17803
17930
  );
@@ -17862,8 +17989,8 @@ var TextQuestionView = ({
17862
17989
  };
17863
17990
  }, [onEditingCustomOption]);
17864
17991
  const placeholder = question.placeholder || "Enter your response";
17865
- return /* @__PURE__ */ jsxs61(
17866
- Box62,
17992
+ return /* @__PURE__ */ jsxs62(
17993
+ Box63,
17867
17994
  {
17868
17995
  flexDirection: "column",
17869
17996
  borderStyle: "round",
@@ -17871,11 +17998,11 @@ var TextQuestionView = ({
17871
17998
  borderColor: theme.border.default,
17872
17999
  children: [
17873
18000
  progressHeader,
17874
- /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsx80(Text57, { bold: true, color: theme.text.primary, children: question.question }) }),
17875
- question.detail && /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: question.detail }) }),
17876
- /* @__PURE__ */ jsxs61(Box62, { flexDirection: "row", marginBottom: 1, children: [
17877
- /* @__PURE__ */ jsx80(Text57, { color: theme.text.accent, children: "> " }),
17878
- /* @__PURE__ */ jsx80(
18001
+ /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: question.question }) }),
18002
+ question.detail && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: question.detail }) }),
18003
+ /* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", marginBottom: 1, children: [
18004
+ /* @__PURE__ */ jsx81(Text58, { color: theme.text.accent, children: "> " }),
18005
+ /* @__PURE__ */ jsx81(
17879
18006
  TextInput,
17880
18007
  {
17881
18008
  buffer,
@@ -18170,8 +18297,8 @@ var ChoiceQuestionView = ({
18170
18297
  });
18171
18298
  }
18172
18299
  }, [customOptionText, isCustomOptionSelected, question.multiSelect]);
18173
- return /* @__PURE__ */ jsxs61(
18174
- Box62,
18300
+ return /* @__PURE__ */ jsxs62(
18301
+ Box63,
18175
18302
  {
18176
18303
  flexDirection: "column",
18177
18304
  borderStyle: "round",
@@ -18179,13 +18306,13 @@ var ChoiceQuestionView = ({
18179
18306
  borderColor: theme.border.default,
18180
18307
  children: [
18181
18308
  progressHeader,
18182
- /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsx80(Text57, { bold: true, color: theme.text.primary, children: question.question }) }),
18183
- question.detail && /* @__PURE__ */ jsx80(Box62, { marginBottom: 1, children: /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: question.detail }) }),
18184
- question.multiSelect && /* @__PURE__ */ jsxs61(Text57, { color: theme.text.secondary, italic: true, children: [
18309
+ /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: question.question }) }),
18310
+ question.detail && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: question.detail }) }),
18311
+ question.multiSelect && /* @__PURE__ */ jsxs62(Text58, { color: theme.text.secondary, italic: true, children: [
18185
18312
  " ",
18186
18313
  "(Select all that apply)"
18187
18314
  ] }),
18188
- /* @__PURE__ */ jsx80(
18315
+ /* @__PURE__ */ jsx81(
18189
18316
  BaseSelectionList,
18190
18317
  {
18191
18318
  items: selectionItems,
@@ -18198,9 +18325,9 @@ var ChoiceQuestionView = ({
18198
18325
  const showCheck = question.multiSelect && (optionItem.type === "option" || optionItem.type === "other");
18199
18326
  if (optionItem.type === "other") {
18200
18327
  const placeholder = "Enter a custom value";
18201
- return /* @__PURE__ */ jsxs61(Box62, { flexDirection: "row", children: [
18202
- showCheck && /* @__PURE__ */ jsxs61(
18203
- Text57,
18328
+ return /* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", children: [
18329
+ showCheck && /* @__PURE__ */ jsxs62(
18330
+ Text58,
18204
18331
  {
18205
18332
  color: isChecked ? theme.text.accent : theme.text.secondary,
18206
18333
  children: [
@@ -18210,8 +18337,8 @@ var ChoiceQuestionView = ({
18210
18337
  ]
18211
18338
  }
18212
18339
  ),
18213
- /* @__PURE__ */ jsx80(Text57, { color: theme.text.primary, children: " " }),
18214
- /* @__PURE__ */ jsx80(
18340
+ /* @__PURE__ */ jsx81(Text58, { color: theme.text.primary, children: " " }),
18341
+ /* @__PURE__ */ jsx81(
18215
18342
  TextInput,
18216
18343
  {
18217
18344
  buffer: customBuffer,
@@ -18220,14 +18347,14 @@ var ChoiceQuestionView = ({
18220
18347
  onSubmit: () => handleSelect(optionItem)
18221
18348
  }
18222
18349
  ),
18223
- isChecked && !question.multiSelect && /* @__PURE__ */ jsx80(Text57, { color: theme.status.success, children: " \u2713" })
18350
+ isChecked && !question.multiSelect && /* @__PURE__ */ jsx81(Text58, { color: theme.status.success, children: " \u2713" })
18224
18351
  ] });
18225
18352
  }
18226
18353
  const labelColor = isChecked && !question.multiSelect ? theme.status.success : context.isSelected ? context.titleColor : theme.text.primary;
18227
- return /* @__PURE__ */ jsxs61(Box62, { flexDirection: "column", children: [
18228
- /* @__PURE__ */ jsxs61(Box62, { flexDirection: "row", children: [
18229
- showCheck && /* @__PURE__ */ jsxs61(
18230
- Text57,
18354
+ return /* @__PURE__ */ jsxs62(Box63, { flexDirection: "column", children: [
18355
+ /* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", children: [
18356
+ showCheck && /* @__PURE__ */ jsxs62(
18357
+ Text58,
18231
18358
  {
18232
18359
  color: isChecked ? theme.text.accent : theme.text.secondary,
18233
18360
  children: [
@@ -18237,13 +18364,13 @@ var ChoiceQuestionView = ({
18237
18364
  ]
18238
18365
  }
18239
18366
  ),
18240
- /* @__PURE__ */ jsxs61(Text57, { color: labelColor, bold: optionItem.type === "done", children: [
18367
+ /* @__PURE__ */ jsxs62(Text58, { color: labelColor, bold: optionItem.type === "done", children: [
18241
18368
  " ",
18242
18369
  optionItem.label
18243
18370
  ] }),
18244
- isChecked && !question.multiSelect && /* @__PURE__ */ jsx80(Text57, { color: theme.status.success, children: " \u2713" })
18371
+ isChecked && !question.multiSelect && /* @__PURE__ */ jsx81(Text58, { color: theme.status.success, children: " \u2713" })
18245
18372
  ] }),
18246
- optionItem.description && /* @__PURE__ */ jsxs61(Text57, { color: theme.text.secondary, wrap: "wrap", children: [
18373
+ optionItem.description && /* @__PURE__ */ jsxs62(Text58, { color: theme.text.secondary, wrap: "wrap", children: [
18247
18374
  " ",
18248
18375
  optionItem.description
18249
18376
  ] })
@@ -18423,7 +18550,7 @@ var AskUserDialog = ({
18423
18550
  }
18424
18551
  return questionTabs;
18425
18552
  }, [questions]);
18426
- const progressHeader = questions.length > 1 ? /* @__PURE__ */ jsx80(
18553
+ const progressHeader = questions.length > 1 ? /* @__PURE__ */ jsx81(
18427
18554
  TabHeader,
18428
18555
  {
18429
18556
  tabs,
@@ -18432,7 +18559,7 @@ var AskUserDialog = ({
18432
18559
  }
18433
18560
  ) : null;
18434
18561
  if (isOnReviewTab) {
18435
- return /* @__PURE__ */ jsx80(
18562
+ return /* @__PURE__ */ jsx81(
18436
18563
  ReviewView,
18437
18564
  {
18438
18565
  questions,
@@ -18443,9 +18570,9 @@ var AskUserDialog = ({
18443
18570
  );
18444
18571
  }
18445
18572
  if (!currentQuestion) return null;
18446
- const keyboardHints = /* @__PURE__ */ jsx80(Box62, { marginTop: 1, children: /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: currentQuestion.type === "text" || isEditingCustomOption ? questions.length > 1 ? "Enter to submit \xB7 Tab/Shift+Tab to switch questions \xB7 Esc to cancel" : "Enter to submit \xB7 Esc to cancel" : questions.length > 1 ? "Enter to select \xB7 \u2190/\u2192 to switch questions \xB7 Esc to cancel" : "Enter to select \xB7 \u2191/\u2193 to navigate \xB7 Esc to cancel" }) });
18573
+ const keyboardHints = /* @__PURE__ */ jsx81(Box63, { marginTop: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: currentQuestion.type === "text" || isEditingCustomOption ? questions.length > 1 ? "Enter to submit \xB7 Tab/Shift+Tab to switch questions \xB7 Esc to cancel" : "Enter to submit \xB7 Esc to cancel" : questions.length > 1 ? "Enter to select \xB7 \u2190/\u2192 to switch questions \xB7 Esc to cancel" : "Enter to select \xB7 \u2191/\u2193 to navigate \xB7 Esc to cancel" }) });
18447
18574
  if (currentQuestion.type === "text") {
18448
- return /* @__PURE__ */ jsx80(
18575
+ return /* @__PURE__ */ jsx81(
18449
18576
  TextQuestionView,
18450
18577
  {
18451
18578
  question: currentQuestion,
@@ -18460,7 +18587,7 @@ var AskUserDialog = ({
18460
18587
  currentQuestionIndex
18461
18588
  );
18462
18589
  }
18463
- return /* @__PURE__ */ jsx80(
18590
+ return /* @__PURE__ */ jsx81(
18464
18591
  ChoiceQuestionView,
18465
18592
  {
18466
18593
  question: effectiveQuestion,
@@ -18477,7 +18604,7 @@ var AskUserDialog = ({
18477
18604
  };
18478
18605
 
18479
18606
  // src/ui/components/dialogs/user-question-queue.tsx
18480
- import { jsx as jsx81 } from "react/jsx-runtime";
18607
+ import { jsx as jsx82 } from "react/jsx-runtime";
18481
18608
  var UserQuestionQueue = () => {
18482
18609
  const { runtime, snapshot } = useUserQuestionRuntime();
18483
18610
  const request = snapshot.pending[0];
@@ -18500,7 +18627,7 @@ var UserQuestionQueue = () => {
18500
18627
  [request]
18501
18628
  );
18502
18629
  if (request === void 0) return null;
18503
- return /* @__PURE__ */ jsx81(
18630
+ return /* @__PURE__ */ jsx82(
18504
18631
  AskUserDialog,
18505
18632
  {
18506
18633
  questions: [...questions],
@@ -18523,7 +18650,7 @@ var UserQuestionQueue = () => {
18523
18650
  };
18524
18651
 
18525
18652
  // src/ui/components/layout/screen-reader-app-layout.tsx
18526
- import { jsx as jsx82, jsxs as jsxs62 } from "react/jsx-runtime";
18653
+ import { jsx as jsx83, jsxs as jsxs63 } from "react/jsx-runtime";
18527
18654
  var ScreenReaderAppLayout = () => {
18528
18655
  const uiState = useUIState();
18529
18656
  const { rootUiRef, terminalHeight } = uiState;
@@ -18532,18 +18659,18 @@ var ScreenReaderAppLayout = () => {
18532
18659
  const { snapshot: userQuestionSnapshot } = useUserQuestionRuntime();
18533
18660
  const pendingUserQuestion = userQuestionSnapshot.pending[0];
18534
18661
  useFlickerDetector(rootUiRef, terminalHeight);
18535
- return /* @__PURE__ */ jsxs62(
18536
- Box63,
18662
+ return /* @__PURE__ */ jsxs63(
18663
+ Box64,
18537
18664
  {
18538
18665
  flexDirection: "column",
18539
18666
  width: "90%",
18540
18667
  height: "100%",
18541
18668
  ref: uiState.rootUiRef,
18542
18669
  children: [
18543
- /* @__PURE__ */ jsx82(Notifications, {}),
18544
- /* @__PURE__ */ jsx82(Footer, {}),
18545
- /* @__PURE__ */ jsx82(Box63, { flexGrow: 1, overflow: "hidden", children: /* @__PURE__ */ jsx82(MainContent, {}) }),
18546
- pendingApproval !== void 0 ? /* @__PURE__ */ jsx82(
18670
+ /* @__PURE__ */ jsx83(Notifications, {}),
18671
+ /* @__PURE__ */ jsx83(Footer, {}),
18672
+ /* @__PURE__ */ jsx83(Box64, { flexGrow: 1, overflow: "hidden", children: /* @__PURE__ */ jsx83(MainContent, {}) }),
18673
+ pendingApproval !== void 0 ? /* @__PURE__ */ jsx83(
18547
18674
  ToolConfirmationQueue,
18548
18675
  {
18549
18676
  request: pendingApproval,
@@ -18552,34 +18679,34 @@ var ScreenReaderAppLayout = () => {
18552
18679
  terminalWidth: uiState.terminalWidth,
18553
18680
  respond: (response) => approvalRuntime.respond(pendingApproval.id, response)
18554
18681
  }
18555
- ) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx82(UserQuestionQueue, {}) : uiState.dialogsVisible ? /* @__PURE__ */ jsx82(
18682
+ ) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx83(UserQuestionQueue, {}) : uiState.dialogsVisible ? /* @__PURE__ */ jsx83(
18556
18683
  DialogManager,
18557
18684
  {
18558
18685
  terminalWidth: uiState.terminalWidth
18559
18686
  }
18560
- ) : /* @__PURE__ */ jsx82(Composer, {}),
18561
- /* @__PURE__ */ jsx82(ExitWarning, {})
18687
+ ) : /* @__PURE__ */ jsx83(Composer, {}),
18688
+ /* @__PURE__ */ jsx83(ExitWarning, {})
18562
18689
  ]
18563
18690
  }
18564
18691
  );
18565
18692
  };
18566
18693
 
18567
18694
  // src/ui/components/layout/default-app-layout.tsx
18568
- import { Box as Box65 } from "ink";
18695
+ import { Box as Box66 } from "ink";
18569
18696
 
18570
18697
  // src/ui/components/dialogs/copy-mode-warning.tsx
18571
- import { Box as Box64, Text as Text58 } from "ink";
18572
- import { jsx as jsx83 } from "react/jsx-runtime";
18698
+ import { Box as Box65, Text as Text59 } from "ink";
18699
+ import { jsx as jsx84 } from "react/jsx-runtime";
18573
18700
  var CopyModeWarning = () => {
18574
18701
  const { copyModeEnabled } = useUIState();
18575
18702
  if (!copyModeEnabled) {
18576
18703
  return null;
18577
18704
  }
18578
- return /* @__PURE__ */ jsx83(Box64, { children: /* @__PURE__ */ jsx83(Text58, { color: theme.status.warning, children: "In Copy Mode. Press any key to exit." }) });
18705
+ return /* @__PURE__ */ jsx84(Box65, { children: /* @__PURE__ */ jsx84(Text59, { color: theme.status.warning, children: "In Copy Mode. Press any key to exit." }) });
18579
18706
  };
18580
18707
 
18581
18708
  // src/ui/components/layout/default-app-layout.tsx
18582
- import { Fragment as Fragment14, jsx as jsx84, jsxs as jsxs63 } from "react/jsx-runtime";
18709
+ import { Fragment as Fragment14, jsx as jsx85, jsxs as jsxs64 } from "react/jsx-runtime";
18583
18710
  var DefaultAppLayout = () => {
18584
18711
  const uiState = useUIState();
18585
18712
  const isAlternateBuffer = useAlternateBuffer();
@@ -18589,8 +18716,8 @@ var DefaultAppLayout = () => {
18589
18716
  const pendingUserQuestion = userQuestionSnapshot.pending[0];
18590
18717
  const { rootUiRef, terminalHeight } = uiState;
18591
18718
  useFlickerDetector(rootUiRef, terminalHeight);
18592
- return /* @__PURE__ */ jsxs63(
18593
- Box65,
18719
+ return /* @__PURE__ */ jsxs64(
18720
+ Box66,
18594
18721
  {
18595
18722
  flexDirection: "column",
18596
18723
  width: uiState.terminalWidth,
@@ -18601,9 +18728,9 @@ var DefaultAppLayout = () => {
18601
18728
  overflow: "hidden",
18602
18729
  ref: uiState.rootUiRef,
18603
18730
  children: [
18604
- /* @__PURE__ */ jsx84(MainContent, {}),
18605
- /* @__PURE__ */ jsxs63(
18606
- Box65,
18731
+ /* @__PURE__ */ jsx85(MainContent, {}),
18732
+ /* @__PURE__ */ jsxs64(
18733
+ Box66,
18607
18734
  {
18608
18735
  flexDirection: "column",
18609
18736
  ref: uiState.mainControlsRef,
@@ -18611,10 +18738,10 @@ var DefaultAppLayout = () => {
18611
18738
  flexGrow: 0,
18612
18739
  width: uiState.terminalWidth,
18613
18740
  children: [
18614
- /* @__PURE__ */ jsx84(Notifications, {}),
18615
- /* @__PURE__ */ jsx84(CopyModeWarning, {}),
18616
- pendingApproval !== void 0 ? /* @__PURE__ */ jsxs63(Fragment14, { children: [
18617
- /* @__PURE__ */ jsx84(
18741
+ /* @__PURE__ */ jsx85(Notifications, {}),
18742
+ /* @__PURE__ */ jsx85(CopyModeWarning, {}),
18743
+ pendingApproval !== void 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
18744
+ /* @__PURE__ */ jsx85(
18618
18745
  ToolConfirmationQueue,
18619
18746
  {
18620
18747
  request: pendingApproval,
@@ -18624,14 +18751,14 @@ var DefaultAppLayout = () => {
18624
18751
  respond: (response) => approvalRuntime.respond(pendingApproval.id, response)
18625
18752
  }
18626
18753
  ),
18627
- /* @__PURE__ */ jsx84(Composer, { isFocused: false })
18628
- ] }) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx84(UserQuestionQueue, {}) : uiState.customDialog ? uiState.customDialog : uiState.dialogsVisible ? /* @__PURE__ */ jsx84(
18754
+ /* @__PURE__ */ jsx85(Composer, { isFocused: false })
18755
+ ] }) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx85(UserQuestionQueue, {}) : uiState.customDialog ? uiState.customDialog : uiState.dialogsVisible ? /* @__PURE__ */ jsx85(
18629
18756
  DialogManager,
18630
18757
  {
18631
18758
  terminalWidth: uiState.terminalWidth
18632
18759
  }
18633
- ) : /* @__PURE__ */ jsx84(Composer, { isFocused: true }),
18634
- /* @__PURE__ */ jsx84(ExitWarning, {})
18760
+ ) : /* @__PURE__ */ jsx85(Composer, { isFocused: true }),
18761
+ /* @__PURE__ */ jsx85(ExitWarning, {})
18635
18762
  ]
18636
18763
  }
18637
18764
  )
@@ -18641,23 +18768,23 @@ var DefaultAppLayout = () => {
18641
18768
  };
18642
18769
 
18643
18770
  // src/ui/components/indicators/alternate-buffer-quitting-display.tsx
18644
- import { Box as Box66, Text as Text59 } from "ink";
18645
- import { jsx as jsx85, jsxs as jsxs64 } from "react/jsx-runtime";
18771
+ import { Box as Box67, Text as Text60 } from "ink";
18772
+ import { jsx as jsx86, jsxs as jsxs65 } from "react/jsx-runtime";
18646
18773
  var AlternateBufferQuittingDisplay = () => {
18647
18774
  const { version } = useAppContext();
18648
18775
  const uiState = useUIState();
18649
18776
  const { snapshot: approvalSnapshot } = useApprovalRuntime();
18650
18777
  const pendingApproval = approvalSnapshot.pending[0];
18651
- return /* @__PURE__ */ jsxs64(
18652
- Box66,
18778
+ return /* @__PURE__ */ jsxs65(
18779
+ Box67,
18653
18780
  {
18654
18781
  flexDirection: "column",
18655
18782
  flexShrink: 0,
18656
18783
  flexGrow: 0,
18657
18784
  width: uiState.terminalWidth,
18658
18785
  children: [
18659
- /* @__PURE__ */ jsx85(AppHeader, { version }, "app-header"),
18660
- uiState.history.map((h) => /* @__PURE__ */ jsx85(
18786
+ /* @__PURE__ */ jsx86(AppHeader, { version }, "app-header"),
18787
+ uiState.history.map((h) => /* @__PURE__ */ jsx86(
18661
18788
  HistoryItemDisplay,
18662
18789
  {
18663
18790
  terminalWidth: uiState.mainAreaWidth,
@@ -18669,7 +18796,7 @@ var AlternateBufferQuittingDisplay = () => {
18669
18796
  },
18670
18797
  h.id
18671
18798
  )),
18672
- uiState.pendingHistoryItems.map((item, i) => /* @__PURE__ */ jsx85(
18799
+ uiState.pendingHistoryItems.map((item, i) => /* @__PURE__ */ jsx86(
18673
18800
  HistoryItemDisplay,
18674
18801
  {
18675
18802
  availableTerminalHeight: void 0,
@@ -18682,31 +18809,31 @@ var AlternateBufferQuittingDisplay = () => {
18682
18809
  },
18683
18810
  i
18684
18811
  )),
18685
- pendingApproval !== void 0 && /* @__PURE__ */ jsxs64(Box66, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: [
18686
- /* @__PURE__ */ jsx85(Text59, { color: theme.status.warning, bold: true, children: "Action Required (was prompted):" }),
18687
- /* @__PURE__ */ jsx85(Text59, { color: theme.text.primary, children: pendingApproval.toolName }),
18688
- pendingApproval.reason !== void 0 && /* @__PURE__ */ jsx85(Text59, { color: theme.text.secondary, children: pendingApproval.reason })
18812
+ pendingApproval !== void 0 && /* @__PURE__ */ jsxs65(Box67, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: [
18813
+ /* @__PURE__ */ jsx86(Text60, { color: theme.status.warning, bold: true, children: "Action Required (was prompted):" }),
18814
+ /* @__PURE__ */ jsx86(Text60, { color: theme.text.primary, children: pendingApproval.toolName }),
18815
+ pendingApproval.reason !== void 0 && /* @__PURE__ */ jsx86(Text60, { color: theme.text.secondary, children: pendingApproval.reason })
18689
18816
  ] }),
18690
- /* @__PURE__ */ jsx85(QuittingDisplay, {})
18817
+ /* @__PURE__ */ jsx86(QuittingDisplay, {})
18691
18818
  ]
18692
18819
  }
18693
18820
  );
18694
18821
  };
18695
18822
 
18696
18823
  // src/ui/app.tsx
18697
- import { jsx as jsx86 } from "react/jsx-runtime";
18824
+ import { jsx as jsx87 } from "react/jsx-runtime";
18698
18825
  var App = () => {
18699
18826
  const uiState = useUIState();
18700
18827
  const isAlternateBuffer = useAlternateBuffer();
18701
18828
  const isScreenReaderEnabled = useIsScreenReaderEnabled5();
18702
18829
  if (uiState.quittingMessages) {
18703
18830
  if (isAlternateBuffer) {
18704
- return /* @__PURE__ */ jsx86(StreamingContext.Provider, { value: uiState.streamingState, children: /* @__PURE__ */ jsx86(AlternateBufferQuittingDisplay, {}) });
18831
+ return /* @__PURE__ */ jsx87(StreamingContext.Provider, { value: uiState.streamingState, children: /* @__PURE__ */ jsx87(AlternateBufferQuittingDisplay, {}) });
18705
18832
  } else {
18706
- return /* @__PURE__ */ jsx86(QuittingDisplay, {});
18833
+ return /* @__PURE__ */ jsx87(QuittingDisplay, {});
18707
18834
  }
18708
18835
  }
18709
- return /* @__PURE__ */ jsx86(StreamingContext.Provider, { value: uiState.streamingState, children: isScreenReaderEnabled ? /* @__PURE__ */ jsx86(ScreenReaderAppLayout, {}) : /* @__PURE__ */ jsx86(DefaultAppLayout, {}) });
18836
+ return /* @__PURE__ */ jsx87(StreamingContext.Provider, { value: uiState.streamingState, children: isScreenReaderEnabled ? /* @__PURE__ */ jsx87(ScreenReaderAppLayout, {}) : /* @__PURE__ */ jsx87(DefaultAppLayout, {}) });
18710
18837
  };
18711
18838
 
18712
18839
  // src/ui/app-container.tsx
@@ -18850,6 +18977,17 @@ import { arch, platform as platform2, release } from "node:os";
18850
18977
  function modelSelectionLabel(selection) {
18851
18978
  return `${selection.provider}/${selection.model}`;
18852
18979
  }
18980
+ function modelReasoningEffortLabel(selection) {
18981
+ const reasoning = selection.reasoning;
18982
+ if (reasoning === void 0) return void 0;
18983
+ const selected = reasoning.selectedEffort;
18984
+ if (selected === void 0) {
18985
+ return reasoning.efforts.find(
18986
+ (effort) => effort.id === reasoning.defaultEffort
18987
+ )?.name ?? "Provider default";
18988
+ }
18989
+ return reasoning.efforts.find((effort) => effort.id === selected)?.name ?? selected;
18990
+ }
18853
18991
 
18854
18992
  // src/ui/commands/about-command.ts
18855
18993
  var aboutCommand = {
@@ -18940,272 +19078,17 @@ var vimCommand = {
18940
19078
  }
18941
19079
  };
18942
19080
 
18943
- // src/terminal/setup.ts
18944
- import { promises as fs9 } from "node:fs";
18945
- import * as os3 from "node:os";
18946
- import * as path11 from "node:path";
18947
- import { exec } from "node:child_process";
18948
- import { promisify } from "node:util";
18949
- var VSCODE_SHIFT_ENTER_SEQUENCE = "\\\r\n";
18950
- var execAsync = promisify(exec);
18951
- function stripJsonComments2(content) {
18952
- return content.replace(/^\s*\/\/.*$/gm, "");
18953
- }
18954
- function getTerminalProgram() {
18955
- const termProgram = process.env["TERM_PROGRAM"];
18956
- if (process.env["CURSOR_TRACE_ID"] || process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("cursor")) {
18957
- return "cursor";
18958
- }
18959
- if (process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("windsurf")) {
18960
- return "windsurf";
18961
- }
18962
- if (process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("antigravity")) {
18963
- return "antigravity";
18964
- }
18965
- if (termProgram === "vscode" || process.env["VSCODE_GIT_IPC_HANDLE"]) {
18966
- return "vscode";
18967
- }
18968
- return null;
18969
- }
18970
- async function detectTerminal() {
18971
- const envTerminal = getTerminalProgram();
18972
- if (envTerminal) {
18973
- return envTerminal;
18974
- }
18975
- if (os3.platform() !== "win32") {
18976
- try {
18977
- const { stdout } = await execAsync("ps -o comm= -p $PPID");
18978
- const parentName = stdout.trim();
18979
- if (parentName.includes("windsurf") || parentName.includes("Windsurf"))
18980
- return "windsurf";
18981
- if (parentName.includes("antigravity") || parentName.includes("Antigravity"))
18982
- return "antigravity";
18983
- if (parentName.includes("cursor") || parentName.includes("Cursor"))
18984
- return "cursor";
18985
- if (parentName.includes("code") || parentName.includes("Code"))
18986
- return "vscode";
18987
- } catch (error) {
18988
- debugLogger.debug("Parent process detection failed:", error);
18989
- }
18990
- }
18991
- return null;
18992
- }
18993
- async function backupFile(filePath) {
18994
- try {
18995
- const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
18996
- const backupPath = `${filePath}.backup.${timestamp}`;
18997
- await fs9.copyFile(filePath, backupPath);
18998
- } catch (error) {
18999
- debugLogger.warn(`Failed to create backup of ${filePath}:`, error);
19000
- }
19001
- }
19002
- function getVSCodeStyleConfigDir(appName) {
19003
- const platform4 = os3.platform();
19004
- if (platform4 === "darwin") {
19005
- return path11.join(
19006
- homedir(),
19007
- "Library",
19008
- "Application Support",
19009
- appName,
19010
- "User"
19011
- );
19012
- } else if (platform4 === "win32") {
19013
- if (!process.env["APPDATA"]) {
19014
- return null;
19015
- }
19016
- return path11.join(process.env["APPDATA"], appName, "User");
19017
- } else {
19018
- return path11.join(homedir(), ".config", appName, "User");
19019
- }
19020
- }
19021
- async function configureVSCodeStyle(terminalName, appName) {
19022
- const configDir = getVSCodeStyleConfigDir(appName);
19023
- if (!configDir) {
19024
- return {
19025
- success: false,
19026
- message: `Could not determine ${terminalName} config path on Windows: APPDATA environment variable is not set.`
19027
- };
19028
- }
19029
- const keybindingsFile = path11.join(configDir, "keybindings.json");
19030
- try {
19031
- await fs9.mkdir(configDir, { recursive: true });
19032
- let keybindings = [];
19033
- try {
19034
- const content = await fs9.readFile(keybindingsFile, "utf8");
19035
- await backupFile(keybindingsFile);
19036
- try {
19037
- const cleanContent = stripJsonComments2(content);
19038
- const parsedContent = JSON.parse(cleanContent);
19039
- if (!Array.isArray(parsedContent)) {
19040
- return {
19041
- success: false,
19042
- message: `${terminalName} keybindings.json exists but is not a valid JSON array. Please fix the file manually or delete it to allow automatic configuration.
19043
- File: ${keybindingsFile}`
19044
- };
19045
- }
19046
- keybindings = parsedContent;
19047
- } catch (parseError) {
19048
- return {
19049
- success: false,
19050
- message: `Failed to parse ${terminalName} keybindings.json. The file contains invalid JSON.
19051
- Please fix the file manually or delete it to allow automatic configuration.
19052
- File: ${keybindingsFile}
19053
- Error: ${parseError}`
19054
- };
19055
- }
19056
- } catch {
19057
- }
19058
- const shiftEnterBinding = {
19059
- key: "shift+enter",
19060
- command: "workbench.action.terminal.sendSequence",
19061
- when: "terminalFocus",
19062
- args: { text: VSCODE_SHIFT_ENTER_SEQUENCE }
19063
- };
19064
- const ctrlEnterBinding = {
19065
- key: "ctrl+enter",
19066
- command: "workbench.action.terminal.sendSequence",
19067
- when: "terminalFocus",
19068
- args: { text: VSCODE_SHIFT_ENTER_SEQUENCE }
19069
- };
19070
- const hasOurShiftEnter = keybindings.some((kb) => {
19071
- const binding = kb;
19072
- return binding.key === "shift+enter" && binding.command === "workbench.action.terminal.sendSequence" && binding.args?.text === "\\\r\n";
19073
- });
19074
- const hasOurCtrlEnter = keybindings.some((kb) => {
19075
- const binding = kb;
19076
- return binding.key === "ctrl+enter" && binding.command === "workbench.action.terminal.sendSequence" && binding.args?.text === "\\\r\n";
19077
- });
19078
- if (hasOurShiftEnter && hasOurCtrlEnter) {
19079
- return {
19080
- success: true,
19081
- message: `${terminalName} keybindings already configured.`
19082
- };
19083
- }
19084
- const existingShiftEnter = keybindings.find((kb) => {
19085
- const binding = kb;
19086
- return binding.key === "shift+enter";
19087
- });
19088
- const existingCtrlEnter = keybindings.find((kb) => {
19089
- const binding = kb;
19090
- return binding.key === "ctrl+enter";
19091
- });
19092
- if (existingShiftEnter || existingCtrlEnter) {
19093
- const messages = [];
19094
- if (existingShiftEnter && !hasOurShiftEnter) {
19095
- messages.push(`- Shift+Enter binding already exists`);
19096
- }
19097
- if (existingCtrlEnter && !hasOurCtrlEnter) {
19098
- messages.push(`- Ctrl+Enter binding already exists`);
19099
- }
19100
- if (messages.length > 0) {
19101
- return {
19102
- success: false,
19103
- message: `Existing keybindings detected. Will not modify to avoid conflicts.
19104
- ` + messages.join("\n") + `
19105
- Please check and modify manually if needed: ${keybindingsFile}`
19106
- };
19107
- }
19108
- }
19109
- if (!hasOurShiftEnter) keybindings.unshift(shiftEnterBinding);
19110
- if (!hasOurCtrlEnter) keybindings.unshift(ctrlEnterBinding);
19111
- await fs9.writeFile(keybindingsFile, JSON.stringify(keybindings, null, 4));
19112
- return {
19113
- success: true,
19114
- message: `Added Shift+Enter and Ctrl+Enter keybindings to ${terminalName}.
19115
- Modified: ${keybindingsFile}`,
19116
- requiresRestart: true
19117
- };
19118
- } catch (error) {
19119
- return {
19120
- success: false,
19121
- message: `Failed to configure ${terminalName}.
19122
- File: ${keybindingsFile}
19123
- Error: ${error}`
19124
- };
19125
- }
19126
- }
19127
- async function configureVSCode() {
19128
- return configureVSCodeStyle("VS Code", "Code");
19129
- }
19130
- async function configureCursor() {
19131
- return configureVSCodeStyle("Cursor", "Cursor");
19132
- }
19133
- async function configureWindsurf() {
19134
- return configureVSCodeStyle("Windsurf", "Windsurf");
19135
- }
19136
- async function configureAntigravity() {
19137
- return configureVSCodeStyle("Antigravity", "Antigravity");
19138
- }
19139
- async function terminalSetup() {
19140
- if (terminalCapabilityManager.isKittyProtocolEnabled()) {
19141
- return {
19142
- success: true,
19143
- message: "Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter)."
19144
- };
19145
- }
19146
- const terminal = await detectTerminal();
19147
- if (!terminal) {
19148
- return {
19149
- success: false,
19150
- message: "Could not detect terminal type. Supported terminals: VS Code, Cursor, Windsurf, and Antigravity."
19151
- };
19152
- }
19153
- switch (terminal) {
19154
- case "vscode":
19155
- return configureVSCode();
19156
- case "cursor":
19157
- return configureCursor();
19158
- case "windsurf":
19159
- return configureWindsurf();
19160
- case "antigravity":
19161
- return configureAntigravity();
19162
- default:
19163
- return {
19164
- success: false,
19165
- message: `Terminal "${terminal}" is not supported yet.`
19166
- };
19167
- }
19168
- }
19169
-
19170
- // src/ui/commands/terminal-setup-command.ts
19171
- var terminalSetupCommand = {
19172
- name: "terminal-setup",
19173
- description: "Configure terminal keybindings for multiline input (VS Code, Cursor, Windsurf)",
19174
- kind: "built-in" /* BUILT_IN */,
19175
- autoExecute: true,
19176
- action: async () => {
19177
- try {
19178
- const result = await terminalSetup();
19179
- let content = result.message;
19180
- if (result.requiresRestart) {
19181
- content += "\n\nPlease restart your terminal for the changes to take effect.";
19182
- }
19183
- return {
19184
- type: "message",
19185
- content,
19186
- messageType: result.success ? "info" : "error"
19187
- };
19188
- } catch (error) {
19189
- return {
19190
- type: "message",
19191
- content: `Failed to configure terminal: ${error}`,
19192
- messageType: "error"
19193
- };
19194
- }
19195
- }
19196
- };
19197
-
19198
19081
  // src/ui/commands/model-command.ts
19199
19082
  import React16 from "react";
19200
19083
 
19201
19084
  // src/ui/components/dialogs/model-dialog.tsx
19202
19085
  import { useCallback as useCallback32, useEffect as useEffect39, useMemo as useMemo28, useRef as useRef19, useState as useState36 } from "react";
19203
- import { Box as Box68, Text as Text61 } from "ink";
19086
+ import { Box as Box69, Text as Text62 } from "ink";
19204
19087
 
19205
19088
  // src/ui/components/dialogs/provider-setup-dialog.tsx
19206
19089
  import { useEffect as useEffect38, useRef as useRef18, useState as useState35 } from "react";
19207
- import { Box as Box67, Text as Text60 } from "ink";
19208
- import { jsx as jsx87, jsxs as jsxs65 } from "react/jsx-runtime";
19090
+ import { Box as Box68, Text as Text61 } from "ink";
19091
+ import { jsx as jsx88, jsxs as jsxs66 } from "react/jsx-runtime";
19209
19092
  function ProviderSetupDialog({
19210
19093
  runtime,
19211
19094
  provider,
@@ -19307,8 +19190,8 @@ function ProviderSetupDialog({
19307
19190
  const fieldLabel = credential.endsWith("_API_KEY") ? "API key" : "Credential";
19308
19191
  const canWrite = view?.writable === true;
19309
19192
  const isReadOnly = view !== void 0 && view.status !== "unsupported" && view.status !== "error" && !view.writable;
19310
- return /* @__PURE__ */ jsxs65(
19311
- Box67,
19193
+ return /* @__PURE__ */ jsxs66(
19194
+ Box68,
19312
19195
  {
19313
19196
  borderStyle: "round",
19314
19197
  borderColor: theme.border.default,
@@ -19317,45 +19200,45 @@ function ProviderSetupDialog({
19317
19200
  paddingY: 1,
19318
19201
  width: "100%",
19319
19202
  children: [
19320
- /* @__PURE__ */ jsxs65(Box67, { justifyContent: "space-between", children: [
19321
- /* @__PURE__ */ jsxs65(Text60, { bold: true, color: theme.text.accent, children: [
19203
+ /* @__PURE__ */ jsxs66(Box68, { justifyContent: "space-between", children: [
19204
+ /* @__PURE__ */ jsxs66(Text61, { bold: true, color: theme.text.accent, children: [
19322
19205
  "Configure ",
19323
19206
  label
19324
19207
  ] }),
19325
- /* @__PURE__ */ jsxs65(Text60, { color: theme.text.secondary, children: [
19326
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.primary, children: "Esc" }),
19208
+ /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
19209
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
19327
19210
  " ",
19328
19211
  reason === "first-run" ? "Cancel" : "Close"
19329
19212
  ] })
19330
19213
  ] }),
19331
- /* @__PURE__ */ jsxs65(Box67, { marginTop: 1, flexDirection: "column", children: [
19332
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.primary, children: reason === "first-run" ? `Enter your ${label} API key to continue.` : `Enter a replacement credential for ${label}.` }),
19333
- /* @__PURE__ */ jsxs65(Text60, { color: theme.text.secondary, children: [
19214
+ /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
19215
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: reason === "first-run" ? `Enter your ${label} API key to continue.` : `Enter a replacement credential for ${label}.` }),
19216
+ /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
19334
19217
  "Alternatively, set ",
19335
19218
  credential,
19336
19219
  " before starting DSH Console."
19337
19220
  ] })
19338
19221
  ] }),
19339
- !view && !error && /* @__PURE__ */ jsx87(Box67, { marginTop: 1, children: /* @__PURE__ */ jsx87(Text60, { color: theme.text.secondary, children: "Checking provider setup..." }) }),
19340
- view?.status === "configured" && /* @__PURE__ */ jsx87(Box67, { marginTop: 1, children: /* @__PURE__ */ jsxs65(Text60, { color: theme.status.success, children: [
19222
+ !view && !error && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Checking provider setup..." }) }),
19223
+ view?.status === "configured" && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsxs66(Text61, { color: theme.status.success, children: [
19341
19224
  "Configured from ",
19342
19225
  view.source ?? "DSH credential storage",
19343
19226
  "."
19344
19227
  ] }) }),
19345
- (view?.status === "unsupported" || view?.status === "error") && view.message && /* @__PURE__ */ jsx87(Box67, { marginTop: 1, children: /* @__PURE__ */ jsx87(Text60, { color: theme.status.warning, children: view.message }) }),
19346
- isReadOnly && /* @__PURE__ */ jsx87(Box67, { marginTop: 1, children: /* @__PURE__ */ jsxs65(Text60, { color: theme.status.warning, children: [
19228
+ (view?.status === "unsupported" || view?.status === "error") && view.message && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.warning, children: view.message }) }),
19229
+ isReadOnly && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsxs66(Text61, { color: theme.status.warning, children: [
19347
19230
  credential,
19348
19231
  " is supplied by a read-only source. Change that source and restart DSH Console."
19349
19232
  ] }) }),
19350
- canWrite && /* @__PURE__ */ jsxs65(Box67, { marginTop: 1, flexDirection: "column", children: [
19351
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.primary, children: fieldLabel }),
19352
- /* @__PURE__ */ jsx87(
19353
- Box67,
19233
+ canWrite && /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
19234
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: fieldLabel }),
19235
+ /* @__PURE__ */ jsx88(
19236
+ Box68,
19354
19237
  {
19355
19238
  borderStyle: "single",
19356
19239
  borderColor: saving ? theme.border.default : theme.text.accent,
19357
19240
  paddingX: 1,
19358
- children: /* @__PURE__ */ jsx87(Text60, { color: theme.text.primary, children: secret.length === 0 ? /* @__PURE__ */ jsxs65(Text60, { color: theme.text.secondary, children: [
19241
+ children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: secret.length === 0 ? /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
19359
19242
  "Paste your ",
19360
19243
  label,
19361
19244
  " API key"
@@ -19363,37 +19246,37 @@ function ProviderSetupDialog({
19363
19246
  }
19364
19247
  )
19365
19248
  ] }),
19366
- error && /* @__PURE__ */ jsx87(Box67, { marginTop: 1, children: /* @__PURE__ */ jsx87(Text60, { color: theme.status.error, children: error }) }),
19367
- canWrite ? /* @__PURE__ */ jsxs65(Box67, { marginTop: 1, flexDirection: "column", children: [
19368
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.secondary, children: "Stored through the configured DSH credential service. Never added to prompts, sessions, history, or logs." }),
19369
- /* @__PURE__ */ jsxs65(Box67, { marginTop: 1, children: [
19370
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.accent, children: "Enter" }),
19371
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.primary, children: " Save and continue" }),
19372
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.secondary, children: " " }),
19373
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.primary, children: "Esc" }),
19374
- /* @__PURE__ */ jsxs65(Text60, { color: theme.text.secondary, children: [
19249
+ error && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.error, children: error }) }),
19250
+ canWrite ? /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
19251
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Stored through the configured DSH credential service. Never added to prompts, sessions, history, or logs." }),
19252
+ /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, children: [
19253
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.accent, children: "Enter" }),
19254
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: " Save and continue" }),
19255
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " " }),
19256
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
19257
+ /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
19375
19258
  " ",
19376
19259
  reason === "first-run" ? "Cancel" : "Close"
19377
19260
  ] }),
19378
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.secondary, children: " " }),
19379
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.primary, children: "Ctrl+C" }),
19380
- /* @__PURE__ */ jsxs65(Text60, { color: theme.text.secondary, children: [
19261
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " " }),
19262
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Ctrl+C" }),
19263
+ /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
19381
19264
  " ",
19382
19265
  secret.length > 0 ? "Clear" : "Cancel"
19383
19266
  ] })
19384
19267
  ] })
19385
- ] }) : /* @__PURE__ */ jsxs65(Box67, { marginTop: 1, children: [
19386
- /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.primary, children: "Esc" }),
19387
- /* @__PURE__ */ jsx87(Text60, { color: theme.text.secondary, children: " Close" })
19268
+ ] }) : /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, children: [
19269
+ /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
19270
+ /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " Close" })
19388
19271
  ] }),
19389
- saving && /* @__PURE__ */ jsx87(Text60, { bold: true, color: theme.text.accent, children: "Saving credential..." })
19272
+ saving && /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.accent, children: "Saving credential..." })
19390
19273
  ]
19391
19274
  }
19392
19275
  );
19393
19276
  }
19394
19277
 
19395
19278
  // src/ui/components/dialogs/model-dialog.tsx
19396
- import { Fragment as Fragment15, jsx as jsx88, jsxs as jsxs66 } from "react/jsx-runtime";
19279
+ import { Fragment as Fragment15, jsx as jsx89, jsxs as jsxs67 } from "react/jsx-runtime";
19397
19280
  function capabilityLabel(model) {
19398
19281
  return model.inputModalities.includes("image") ? "Text + Vision" : "Text";
19399
19282
  }
@@ -19413,6 +19296,7 @@ function ModelDialog({
19413
19296
  const [checkingProvider, setCheckingProvider] = useState36(false);
19414
19297
  const [error, setError] = useState36();
19415
19298
  const [setupSelection, setSetupSelection] = useState36();
19299
+ const [reasoningSelection, setReasoningSelection] = useState36();
19416
19300
  const providerCheckRef = useRef19(void 0);
19417
19301
  useEffect39(() => {
19418
19302
  const controller = new AbortController();
@@ -19460,7 +19344,11 @@ function ModelDialog({
19460
19344
  setSwitching(true);
19461
19345
  setError(void 0);
19462
19346
  try {
19463
- const activated = await runtime.setModel(selection.provider, selection.model);
19347
+ const activated = await runtime.setModel({
19348
+ provider: selection.provider,
19349
+ model: selection.model,
19350
+ ...selection.reasoning?.selectedEffort === void 0 ? {} : { reasoningEffort: selection.reasoning.selectedEffort }
19351
+ });
19464
19352
  onSwitched(activated);
19465
19353
  } catch (cause) {
19466
19354
  setError(cause instanceof Error ? cause.message : String(cause));
@@ -19473,7 +19361,7 @@ function ModelDialog({
19473
19361
  );
19474
19362
  const finishSelection = useCallback32(
19475
19363
  (selection) => {
19476
- if (selection.provider === current.provider && selection.model === current.model) {
19364
+ if (selection.provider === current.provider && selection.model === current.model && selection.reasoning?.selectedEffort === current.reasoning?.selectedEffort) {
19477
19365
  onClose();
19478
19366
  return;
19479
19367
  }
@@ -19483,7 +19371,24 @@ function ModelDialog({
19483
19371
  }
19484
19372
  void switchModel(selection);
19485
19373
  },
19486
- [current.model, current.provider, onClose, runtime, switchModel]
19374
+ [
19375
+ current.model,
19376
+ current.provider,
19377
+ current.reasoning?.selectedEffort,
19378
+ onClose,
19379
+ runtime,
19380
+ switchModel
19381
+ ]
19382
+ );
19383
+ const continueSelection = useCallback32(
19384
+ (selection) => {
19385
+ if (selection.reasoning?.efforts.length) {
19386
+ setReasoningSelection(selection);
19387
+ return;
19388
+ }
19389
+ finishSelection(selection);
19390
+ },
19391
+ [finishSelection]
19487
19392
  );
19488
19393
  const selectModel = useCallback32(
19489
19394
  async (selection) => {
@@ -19521,9 +19426,9 @@ function ModelDialog({
19521
19426
  }
19522
19427
  }
19523
19428
  }
19524
- finishSelection(selection);
19429
+ continueSelection(selection);
19525
19430
  },
19526
- [finishSelection, providerSetupRuntime]
19431
+ [continueSelection, providerSetupRuntime]
19527
19432
  );
19528
19433
  useKeypress(
19529
19434
  (key) => {
@@ -19533,12 +19438,13 @@ function ModelDialog({
19533
19438
  return;
19534
19439
  }
19535
19440
  if (pending) setPending(void 0);
19441
+ else if (reasoningSelection) setReasoningSelection(void 0);
19536
19442
  else onClose();
19537
19443
  },
19538
19444
  { isActive: setupSelection === void 0 }
19539
19445
  );
19540
19446
  if (setupSelection) {
19541
- return /* @__PURE__ */ jsx88(
19447
+ return /* @__PURE__ */ jsx89(
19542
19448
  ProviderSetupDialog,
19543
19449
  {
19544
19450
  runtime: providerSetupRuntime,
@@ -19547,13 +19453,87 @@ function ModelDialog({
19547
19453
  onConfigured: () => {
19548
19454
  const selection = setupSelection;
19549
19455
  setSetupSelection(void 0);
19550
- finishSelection(selection);
19456
+ continueSelection(selection);
19551
19457
  }
19552
19458
  }
19553
19459
  );
19554
19460
  }
19555
- return /* @__PURE__ */ jsxs66(
19556
- Box68,
19461
+ if (reasoningSelection?.reasoning) {
19462
+ const reasoning = reasoningSelection.reasoning;
19463
+ const defaultName = reasoning.efforts.find(
19464
+ (effort) => effort.id === reasoning.defaultEffort
19465
+ )?.name;
19466
+ const selectedEffort = reasoningSelection.provider === current.provider && reasoningSelection.model === current.model ? current.reasoning?.selectedEffort : void 0;
19467
+ const effortItems = [
19468
+ {
19469
+ key: "provider-default",
19470
+ value: void 0,
19471
+ label: `Provider default${defaultName ? ` (${defaultName})` : ""}`
19472
+ },
19473
+ ...reasoning.efforts.map((effort) => ({
19474
+ key: effort.id,
19475
+ value: effort.id,
19476
+ label: effort.name
19477
+ }))
19478
+ ];
19479
+ const initialEffortIndex = Math.max(
19480
+ 0,
19481
+ effortItems.findIndex((item) => item.value === selectedEffort)
19482
+ );
19483
+ return /* @__PURE__ */ jsxs67(
19484
+ Box69,
19485
+ {
19486
+ borderStyle: "round",
19487
+ borderColor: theme.border.default,
19488
+ flexDirection: "column",
19489
+ paddingX: 1,
19490
+ paddingY: 1,
19491
+ width: "100%",
19492
+ children: [
19493
+ /* @__PURE__ */ jsxs67(Box69, { justifyContent: "space-between", children: [
19494
+ /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: "Select Reasoning Effort" }),
19495
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Esc to models" })
19496
+ ] }),
19497
+ /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "row", children: [
19498
+ /* @__PURE__ */ jsx89(Box69, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx89(
19499
+ RadioButtonSelect,
19500
+ {
19501
+ items: effortItems,
19502
+ initialIndex: initialEffortIndex,
19503
+ onSelect: (reasoningEffort) => {
19504
+ setReasoningSelection(void 0);
19505
+ finishSelection({
19506
+ ...reasoningSelection,
19507
+ reasoning: {
19508
+ ...reasoning,
19509
+ ...reasoningEffort === void 0 ? { selectedEffort: void 0 } : { selectedEffort: reasoningEffort }
19510
+ }
19511
+ });
19512
+ },
19513
+ isFocused: !switching,
19514
+ showNumbers: false
19515
+ }
19516
+ ) }),
19517
+ /* @__PURE__ */ jsxs67(Box69, { width: "45%", paddingLeft: 2, flexDirection: "column", children: [
19518
+ /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: reasoningSelection.name }),
19519
+ /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
19520
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Current choice" }),
19521
+ /* @__PURE__ */ jsx89(Text62, { children: modelReasoningEffortLabel({
19522
+ ...reasoningSelection,
19523
+ reasoning: { ...reasoning, selectedEffort }
19524
+ }) }),
19525
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Behavior" }),
19526
+ /* @__PURE__ */ jsx89(Text62, { wrap: "wrap", children: "Provider default follows the model adapter. An explicit effort remains fixed for this Agent and future Sessions." })
19527
+ ] })
19528
+ ] })
19529
+ ] }),
19530
+ /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to select." }) })
19531
+ ]
19532
+ }
19533
+ );
19534
+ }
19535
+ return /* @__PURE__ */ jsxs67(
19536
+ Box69,
19557
19537
  {
19558
19538
  borderStyle: "round",
19559
19539
  borderColor: theme.border.default,
@@ -19562,13 +19542,13 @@ function ModelDialog({
19562
19542
  paddingY: 1,
19563
19543
  width: "100%",
19564
19544
  children: [
19565
- /* @__PURE__ */ jsxs66(Box68, { justifyContent: "space-between", children: [
19566
- /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Select DSH Model" }),
19567
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Esc to close" })
19545
+ /* @__PURE__ */ jsxs67(Box69, { justifyContent: "space-between", children: [
19546
+ /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: "Select DSH Model" }),
19547
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Esc to close" })
19568
19548
  ] }),
19569
- error && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.error, children: error }) }),
19570
- loading ? /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Loading models..." }) }) : models.length === 0 ? /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.warning, children: "No DSH models are available." }) }) : /* @__PURE__ */ jsxs66(Box68, { flexDirection: "row", marginTop: 1, children: [
19571
- /* @__PURE__ */ jsx88(Box68, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx88(
19549
+ error && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.error, children: error }) }),
19550
+ loading ? /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Loading models..." }) }) : models.length === 0 ? /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.warning, children: "No DSH models are available." }) }) : /* @__PURE__ */ jsxs67(Box69, { flexDirection: "row", marginTop: 1, children: [
19551
+ /* @__PURE__ */ jsx89(Box69, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx89(
19572
19552
  RadioButtonSelect,
19573
19553
  {
19574
19554
  items,
@@ -19581,28 +19561,28 @@ function ModelDialog({
19581
19561
  renderItem: (item, { titleColor }) => {
19582
19562
  const model = item.value;
19583
19563
  const isCurrent = model.provider === current.provider && model.model === current.model;
19584
- return /* @__PURE__ */ jsxs66(Text61, { color: titleColor, wrap: "truncate", children: [
19564
+ return /* @__PURE__ */ jsxs67(Text62, { color: titleColor, wrap: "truncate", children: [
19585
19565
  model.name,
19586
19566
  " ",
19587
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: model.provider }),
19588
- model.inputModalities.includes("image") && /* @__PURE__ */ jsx88(Text61, { color: theme.status.success, children: " Vision" }),
19589
- isCurrent && /* @__PURE__ */ jsx88(Text61, { color: theme.text.accent, children: " Current" })
19567
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: model.provider }),
19568
+ model.inputModalities.includes("image") && /* @__PURE__ */ jsx89(Text62, { color: theme.status.success, children: " Vision" }),
19569
+ isCurrent && /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: " Current" })
19590
19570
  ] });
19591
19571
  }
19592
19572
  },
19593
19573
  items.map((item) => item.key).join("|")
19594
19574
  ) }),
19595
- /* @__PURE__ */ jsx88(Box68, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs66(Fragment15, { children: [
19596
- /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.status.warning, children: "Start a new Session?" }),
19597
- /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
19598
- /* @__PURE__ */ jsxs66(Text61, { children: [
19575
+ /* @__PURE__ */ jsx89(Box69, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs67(Fragment15, { children: [
19576
+ /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.status.warning, children: "Start a new Session?" }),
19577
+ /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
19578
+ /* @__PURE__ */ jsxs67(Text62, { children: [
19599
19579
  "Changing to ",
19600
19580
  pending.name,
19601
19581
  " creates a new DSH Agent and Session."
19602
19582
  ] }),
19603
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "The existing transcript remains visible but is not sent to the new model." })
19583
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "The existing transcript remains visible but is not sent to the new model." })
19604
19584
  ] }),
19605
- /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(
19585
+ /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(
19606
19586
  RadioButtonSelect,
19607
19587
  {
19608
19588
  items: [
@@ -19617,21 +19597,23 @@ function ModelDialog({
19617
19597
  showNumbers: false
19618
19598
  }
19619
19599
  ) })
19620
- ] }) : /* @__PURE__ */ jsxs66(Fragment15, { children: [
19621
- /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: highlighted.name }),
19622
- /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
19623
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Provider" }),
19624
- /* @__PURE__ */ jsx88(Text61, { children: highlighted.provider }),
19625
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Model ID" }),
19626
- /* @__PURE__ */ jsx88(Text61, { wrap: "wrap", children: highlighted.model }),
19627
- /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Input" }),
19628
- /* @__PURE__ */ jsx88(Text61, { color: highlighted.inputModalities.includes("image") ? theme.status.success : theme.text.primary, children: capabilityLabel(highlighted) })
19600
+ ] }) : /* @__PURE__ */ jsxs67(Fragment15, { children: [
19601
+ /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: highlighted.name }),
19602
+ /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
19603
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Provider" }),
19604
+ /* @__PURE__ */ jsx89(Text62, { children: highlighted.provider }),
19605
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Model ID" }),
19606
+ /* @__PURE__ */ jsx89(Text62, { wrap: "wrap", children: highlighted.model }),
19607
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Input" }),
19608
+ /* @__PURE__ */ jsx89(Text62, { color: highlighted.inputModalities.includes("image") ? theme.status.success : theme.text.primary, children: capabilityLabel(highlighted) }),
19609
+ /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Context window" }),
19610
+ /* @__PURE__ */ jsx89(Text62, { children: highlighted.contextWindow === void 0 ? "Not disclosed" : `${formatTokenCount(highlighted.contextWindow)} tokens` })
19629
19611
  ] }),
19630
- switching && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.accent, children: "Creating new Agent..." }) }),
19631
- checkingProvider && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.accent, children: "Checking provider setup..." }) })
19612
+ switching && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: "Creating new Agent..." }) }),
19613
+ checkingProvider && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: "Checking provider setup..." }) })
19632
19614
  ] }) })
19633
19615
  ] }),
19634
- /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to select." }) })
19616
+ /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to select." }) })
19635
19617
  ]
19636
19618
  }
19637
19619
  );
@@ -19678,8 +19660,8 @@ import React17 from "react";
19678
19660
 
19679
19661
  // src/ui/components/dialogs/provider-dialog.tsx
19680
19662
  import { useEffect as useEffect40, useMemo as useMemo29, useState as useState37 } from "react";
19681
- import { Box as Box69, Text as Text62 } from "ink";
19682
- import { Fragment as Fragment16, jsx as jsx89, jsxs as jsxs67 } from "react/jsx-runtime";
19663
+ import { Box as Box70, Text as Text63 } from "ink";
19664
+ import { Fragment as Fragment16, jsx as jsx90, jsxs as jsxs68 } from "react/jsx-runtime";
19683
19665
  function statusLabel(status) {
19684
19666
  switch (status) {
19685
19667
  case "configured":
@@ -19770,7 +19752,7 @@ function ProviderDialog({
19770
19752
  );
19771
19753
  const currentProvider = runtime.getSnapshot().current.provider;
19772
19754
  if (editing) {
19773
- return /* @__PURE__ */ jsx89(
19755
+ return /* @__PURE__ */ jsx90(
19774
19756
  ProviderSetupDialog,
19775
19757
  {
19776
19758
  runtime,
@@ -19788,8 +19770,8 @@ function ProviderDialog({
19788
19770
  }
19789
19771
  );
19790
19772
  }
19791
- return /* @__PURE__ */ jsxs67(
19792
- Box69,
19773
+ return /* @__PURE__ */ jsxs68(
19774
+ Box70,
19793
19775
  {
19794
19776
  borderStyle: "round",
19795
19777
  borderColor: theme.border.default,
@@ -19798,18 +19780,18 @@ function ProviderDialog({
19798
19780
  paddingY: 1,
19799
19781
  width: "100%",
19800
19782
  children: [
19801
- /* @__PURE__ */ jsxs67(Box69, { justifyContent: "space-between", children: [
19802
- /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.accent, children: "DSH Providers" }),
19803
- /* @__PURE__ */ jsxs67(Text62, { color: theme.text.secondary, children: [
19804
- /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: "Esc" }),
19783
+ /* @__PURE__ */ jsxs68(Box70, { justifyContent: "space-between", children: [
19784
+ /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.accent, children: "DSH Providers" }),
19785
+ /* @__PURE__ */ jsxs68(Text63, { color: theme.text.secondary, children: [
19786
+ /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.primary, children: "Esc" }),
19805
19787
  " Close"
19806
19788
  ] })
19807
19789
  ] }),
19808
- error && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.error, children: error }) }),
19809
- loading && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Loading providers..." }) }),
19810
- !loading && providers.length === 0 && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.warning, children: "No DSH-managed providers are available." }) }),
19811
- providers.length > 0 && highlighted && /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, children: [
19812
- /* @__PURE__ */ jsx89(Box69, { width: "55%", paddingRight: 2, children: /* @__PURE__ */ jsx89(
19790
+ error && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.error, children: error }) }),
19791
+ loading && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Loading providers..." }) }),
19792
+ !loading && providers.length === 0 && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: "No DSH-managed providers are available." }) }),
19793
+ providers.length > 0 && highlighted && /* @__PURE__ */ jsxs68(Box70, { marginTop: 1, children: [
19794
+ /* @__PURE__ */ jsx90(Box70, { width: "55%", paddingRight: 2, children: /* @__PURE__ */ jsx90(
19813
19795
  RadioButtonSelect,
19814
19796
  {
19815
19797
  items,
@@ -19822,45 +19804,45 @@ function ProviderDialog({
19822
19804
  },
19823
19805
  showScrollArrows: true,
19824
19806
  maxItemsToShow: 12,
19825
- renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs67(Text62, { color: titleColor, wrap: "truncate", children: [
19807
+ renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs68(Text63, { color: titleColor, wrap: "truncate", children: [
19826
19808
  item.value.displayName,
19827
19809
  " ",
19828
- /* @__PURE__ */ jsx89(Text62, { color: statusColor(item.value.status), children: statusLabel(item.value.status) }),
19829
- item.value.provider === currentProvider && /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: " Current" })
19810
+ /* @__PURE__ */ jsx90(Text63, { color: statusColor(item.value.status), children: statusLabel(item.value.status) }),
19811
+ item.value.provider === currentProvider && /* @__PURE__ */ jsx90(Text63, { color: theme.text.accent, children: " Current" })
19830
19812
  ] })
19831
19813
  }
19832
19814
  ) }),
19833
- /* @__PURE__ */ jsxs67(Box69, { width: "45%", paddingLeft: 2, flexDirection: "column", children: [
19834
- /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: highlighted.displayName }),
19835
- /* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
19836
- /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Provider" }),
19837
- /* @__PURE__ */ jsx89(Text62, { children: highlighted.provider }),
19838
- /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Status" }),
19839
- /* @__PURE__ */ jsx89(Text62, { color: statusColor(highlighted.status), children: statusLabel(highlighted.status) }),
19840
- highlighted.credentialLabel && /* @__PURE__ */ jsxs67(Fragment16, { children: [
19841
- /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Credential" }),
19842
- /* @__PURE__ */ jsx89(Text62, { children: highlighted.credentialLabel })
19815
+ /* @__PURE__ */ jsxs68(Box70, { width: "45%", paddingLeft: 2, flexDirection: "column", children: [
19816
+ /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.primary, children: highlighted.displayName }),
19817
+ /* @__PURE__ */ jsxs68(Box70, { marginTop: 1, flexDirection: "column", children: [
19818
+ /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Provider" }),
19819
+ /* @__PURE__ */ jsx90(Text63, { children: highlighted.provider }),
19820
+ /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Status" }),
19821
+ /* @__PURE__ */ jsx90(Text63, { color: statusColor(highlighted.status), children: statusLabel(highlighted.status) }),
19822
+ highlighted.credentialLabel && /* @__PURE__ */ jsxs68(Fragment16, { children: [
19823
+ /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Credential" }),
19824
+ /* @__PURE__ */ jsx90(Text63, { children: highlighted.credentialLabel })
19843
19825
  ] }),
19844
- highlighted.source && /* @__PURE__ */ jsxs67(Fragment16, { children: [
19845
- /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Source" }),
19846
- /* @__PURE__ */ jsx89(Text62, { children: highlighted.source })
19826
+ highlighted.source && /* @__PURE__ */ jsxs68(Fragment16, { children: [
19827
+ /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Source" }),
19828
+ /* @__PURE__ */ jsx90(Text63, { children: highlighted.source })
19847
19829
  ] }),
19848
- highlighted.message && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.warning, children: highlighted.message }) }),
19849
- !highlighted.writable && highlighted.status !== "unsupported" && highlighted.status !== "error" && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.warning, children: "This credential comes from a read-only source. Update it outside DSH Console." }) })
19830
+ highlighted.message && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: highlighted.message }) }),
19831
+ !highlighted.writable && highlighted.status !== "unsupported" && highlighted.status !== "error" && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: "This credential comes from a read-only source. Update it outside DSH Console." }) })
19850
19832
  ] })
19851
19833
  ] })
19852
19834
  ] }),
19853
- providers.length > 0 && highlighted && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: highlighted.writable && highlighted.status !== "unsupported" ? /* @__PURE__ */ jsxs67(Fragment16, { children: [
19854
- /* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.accent, children: "Enter" }),
19855
- /* @__PURE__ */ jsxs67(Text62, { color: theme.text.primary, children: [
19835
+ providers.length > 0 && highlighted && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: highlighted.writable && highlighted.status !== "unsupported" ? /* @__PURE__ */ jsxs68(Fragment16, { children: [
19836
+ /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.accent, children: "Enter" }),
19837
+ /* @__PURE__ */ jsxs68(Text63, { color: theme.text.primary, children: [
19856
19838
  " ",
19857
19839
  highlighted.status === "configured" ? "Replace credential" : "Configure provider"
19858
19840
  ] }),
19859
- /* @__PURE__ */ jsxs67(Text62, { color: theme.text.secondary, children: [
19841
+ /* @__PURE__ */ jsxs68(Text63, { color: theme.text.secondary, children: [
19860
19842
  " ",
19861
19843
  "Use \u2191/\u2193 to navigate"
19862
19844
  ] })
19863
- ] }) : /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Use \u2191/\u2193 to inspect providers. This credential cannot be changed here." }) })
19845
+ ] }) : /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Use \u2191/\u2193 to inspect providers. This credential cannot be changed here." }) })
19864
19846
  ]
19865
19847
  }
19866
19848
  );
@@ -19913,8 +19895,8 @@ import React18 from "react";
19913
19895
 
19914
19896
  // src/ui/components/dialogs/session-dialog.tsx
19915
19897
  import { useCallback as useCallback33, useEffect as useEffect41, useMemo as useMemo30, useRef as useRef20, useState as useState38 } from "react";
19916
- import { Box as Box70, Text as Text63 } from "ink";
19917
- import { Fragment as Fragment17, jsx as jsx90, jsxs as jsxs68 } from "react/jsx-runtime";
19898
+ import { Box as Box71, Text as Text64 } from "ink";
19899
+ import { Fragment as Fragment17, jsx as jsx91, jsxs as jsxs69 } from "react/jsx-runtime";
19918
19900
  function shortId(id) {
19919
19901
  const start2 = id.startsWith("dsh-console-") ? "dsh-console-".length : 0;
19920
19902
  return id.slice(start2, start2 + 12);
@@ -19981,14 +19963,14 @@ function SessionDialog({ runtime, onClose }) {
19981
19963
  if (pending) setPending(void 0);
19982
19964
  else onClose();
19983
19965
  }, { isActive: true });
19984
- return /* @__PURE__ */ jsxs68(Box70, { borderStyle: "round", borderColor: theme.border.default, flexDirection: "column", paddingX: 1, paddingY: 1, width: "100%", children: [
19985
- /* @__PURE__ */ jsxs68(Box70, { justifyContent: "space-between", children: [
19986
- /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.primary, children: "DSH Sessions" }),
19987
- /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Esc to close" })
19966
+ return /* @__PURE__ */ jsxs69(Box71, { borderStyle: "round", borderColor: theme.border.default, flexDirection: "column", paddingX: 1, paddingY: 1, width: "100%", children: [
19967
+ /* @__PURE__ */ jsxs69(Box71, { justifyContent: "space-between", children: [
19968
+ /* @__PURE__ */ jsx91(Text64, { bold: true, color: theme.text.primary, children: "DSH Sessions" }),
19969
+ /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Esc to close" })
19988
19970
  ] }),
19989
- error && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.error, children: error }) }),
19990
- loading ? /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Loading Sessions..." }) }) : sessions.length === 0 ? /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "No resumable Sessions." }) }) : /* @__PURE__ */ jsxs68(Box70, { flexDirection: "row", marginTop: 1, children: [
19991
- /* @__PURE__ */ jsx90(Box70, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx90(
19971
+ error && /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.status.error, children: error }) }),
19972
+ loading ? /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Loading Sessions..." }) }) : sessions.length === 0 ? /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "No resumable Sessions." }) }) : /* @__PURE__ */ jsxs69(Box71, { flexDirection: "row", marginTop: 1, children: [
19973
+ /* @__PURE__ */ jsx91(Box71, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx91(
19992
19974
  RadioButtonSelect,
19993
19975
  {
19994
19976
  items,
@@ -19998,20 +19980,20 @@ function SessionDialog({ runtime, onClose }) {
19998
19980
  isFocused: !pending && !switching,
19999
19981
  showScrollArrows: true,
20000
19982
  maxItemsToShow: 12,
20001
- renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs68(Text63, { color: titleColor, wrap: "truncate", children: [
19983
+ renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs69(Text64, { color: titleColor, wrap: "truncate", children: [
20002
19984
  sessionLabel(item.value),
20003
- item.value.current && /* @__PURE__ */ jsx90(Text63, { color: theme.text.accent, children: " Current" }),
20004
- !item.value.current && !item.value.resumable && /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: " Not resumable" })
19985
+ item.value.current && /* @__PURE__ */ jsx91(Text64, { color: theme.text.accent, children: " Current" }),
19986
+ !item.value.current && !item.value.resumable && /* @__PURE__ */ jsx91(Text64, { color: theme.status.warning, children: " Not resumable" })
20005
19987
  ] })
20006
19988
  }
20007
19989
  ) }),
20008
- /* @__PURE__ */ jsx90(Box70, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs68(Fragment17, { children: [
20009
- /* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.status.warning, children: "Resume this Session?" }),
20010
- /* @__PURE__ */ jsxs68(Box70, { marginTop: 1, flexDirection: "column", children: [
20011
- /* @__PURE__ */ jsx90(Text63, { children: sessionLabel(pending) }),
20012
- /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "The current transcript will be replaced." })
19990
+ /* @__PURE__ */ jsx91(Box71, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs69(Fragment17, { children: [
19991
+ /* @__PURE__ */ jsx91(Text64, { bold: true, color: theme.status.warning, children: "Resume this Session?" }),
19992
+ /* @__PURE__ */ jsxs69(Box71, { marginTop: 1, flexDirection: "column", children: [
19993
+ /* @__PURE__ */ jsx91(Text64, { children: sessionLabel(pending) }),
19994
+ /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "The current transcript will be replaced." })
20013
19995
  ] }),
20014
- /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(
19996
+ /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(
20015
19997
  RadioButtonSelect,
20016
19998
  {
20017
19999
  items: [
@@ -20023,21 +20005,21 @@ function SessionDialog({ runtime, onClose }) {
20023
20005
  showNumbers: false
20024
20006
  }
20025
20007
  ) })
20026
- ] }) : highlighted ? /* @__PURE__ */ jsxs68(Fragment17, { children: [
20027
- /* @__PURE__ */ jsx90(Text63, { bold: true, children: sessionLabel(highlighted) }),
20028
- /* @__PURE__ */ jsxs68(Box70, { marginTop: 1, flexDirection: "column", children: [
20029
- /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Created" }),
20030
- /* @__PURE__ */ jsx90(Text63, { children: new Date(highlighted.createdAt).toLocaleString() }),
20031
- !highlighted.resumable && highlighted.resumeUnavailableReason && /* @__PURE__ */ jsxs68(Fragment17, { children: [
20032
- /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Resume status" }),
20033
- /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: highlighted.resumeUnavailableReason })
20008
+ ] }) : highlighted ? /* @__PURE__ */ jsxs69(Fragment17, { children: [
20009
+ /* @__PURE__ */ jsx91(Text64, { bold: true, children: sessionLabel(highlighted) }),
20010
+ /* @__PURE__ */ jsxs69(Box71, { marginTop: 1, flexDirection: "column", children: [
20011
+ /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Created" }),
20012
+ /* @__PURE__ */ jsx91(Text64, { children: new Date(highlighted.createdAt).toLocaleString() }),
20013
+ !highlighted.resumable && highlighted.resumeUnavailableReason && /* @__PURE__ */ jsxs69(Fragment17, { children: [
20014
+ /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Resume status" }),
20015
+ /* @__PURE__ */ jsx91(Text64, { color: theme.status.warning, children: highlighted.resumeUnavailableReason })
20034
20016
  ] }),
20035
- /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Session ID" }),
20036
- /* @__PURE__ */ jsx90(Text63, { wrap: "wrap", children: highlighted.id })
20017
+ /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Session ID" }),
20018
+ /* @__PURE__ */ jsx91(Text64, { wrap: "wrap", children: highlighted.id })
20037
20019
  ] })
20038
20020
  ] }) : null })
20039
20021
  ] }),
20040
- /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to resume." }) })
20022
+ /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to resume." }) })
20041
20023
  ] });
20042
20024
  }
20043
20025
 
@@ -20129,11 +20111,11 @@ import React19 from "react";
20129
20111
 
20130
20112
  // src/ui/components/dialogs/tools-dialog.tsx
20131
20113
  import { useEffect as useEffect42, useMemo as useMemo31, useState as useState39, useSyncExternalStore as useSyncExternalStore3 } from "react";
20132
- import { Box as Box72, Text as Text65 } from "ink";
20114
+ import { Box as Box73, Text as Text66 } from "ink";
20133
20115
 
20134
20116
  // src/ui/components/shared/descriptive-radio-button-select.tsx
20135
- import { Text as Text64, Box as Box71 } from "ink";
20136
- import { jsx as jsx91, jsxs as jsxs69 } from "react/jsx-runtime";
20117
+ import { Text as Text65, Box as Box72 } from "ink";
20118
+ import { jsx as jsx92, jsxs as jsxs70 } from "react/jsx-runtime";
20137
20119
  function DescriptiveRadioButtonSelect({
20138
20120
  items,
20139
20121
  initialIndex = 0,
@@ -20144,7 +20126,7 @@ function DescriptiveRadioButtonSelect({
20144
20126
  showScrollArrows = false,
20145
20127
  maxItemsToShow = 10
20146
20128
  }) {
20147
- return /* @__PURE__ */ jsx91(
20129
+ return /* @__PURE__ */ jsx92(
20148
20130
  BaseSelectionList,
20149
20131
  {
20150
20132
  items,
@@ -20155,16 +20137,16 @@ function DescriptiveRadioButtonSelect({
20155
20137
  showNumbers,
20156
20138
  showScrollArrows,
20157
20139
  maxItemsToShow,
20158
- renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs69(Box71, { flexDirection: "column", children: [
20159
- /* @__PURE__ */ jsx91(Text64, { color: titleColor, children: item.title }),
20160
- item.description && /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: item.description })
20140
+ renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs70(Box72, { flexDirection: "column", children: [
20141
+ /* @__PURE__ */ jsx92(Text65, { color: titleColor, children: item.title }),
20142
+ item.description && /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: item.description })
20161
20143
  ] }, item.key)
20162
20144
  }
20163
20145
  );
20164
20146
  }
20165
20147
 
20166
20148
  // src/ui/components/dialogs/tools-dialog.tsx
20167
- import { Fragment as Fragment18, jsx as jsx92, jsxs as jsxs70 } from "react/jsx-runtime";
20149
+ import { Fragment as Fragment18, jsx as jsx93, jsxs as jsxs71 } from "react/jsx-runtime";
20168
20150
  function summary(description) {
20169
20151
  const line = description.replace(/\s+/g, " ").trim();
20170
20152
  return line.length > 90 ? `${line.slice(0, 89)}...` : line;
@@ -20195,8 +20177,8 @@ function ToolsDialog({ runtime, onClose }) {
20195
20177
  })),
20196
20178
  [snapshot.tools]
20197
20179
  );
20198
- return /* @__PURE__ */ jsxs70(
20199
- Box72,
20180
+ return /* @__PURE__ */ jsxs71(
20181
+ Box73,
20200
20182
  {
20201
20183
  borderStyle: "round",
20202
20184
  borderColor: theme.border.default,
@@ -20205,16 +20187,16 @@ function ToolsDialog({ runtime, onClose }) {
20205
20187
  paddingY: 1,
20206
20188
  width: "100%",
20207
20189
  children: [
20208
- /* @__PURE__ */ jsxs70(Box72, { justifyContent: "space-between", children: [
20209
- /* @__PURE__ */ jsxs70(Text65, { bold: true, color: theme.text.primary, children: [
20190
+ /* @__PURE__ */ jsxs71(Box73, { justifyContent: "space-between", children: [
20191
+ /* @__PURE__ */ jsxs71(Text66, { bold: true, color: theme.text.primary, children: [
20210
20192
  "DSH Tools (",
20211
20193
  snapshot.tools.length,
20212
20194
  ")"
20213
20195
  ] }),
20214
- /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: "Esc to close" })
20196
+ /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Esc to close" })
20215
20197
  ] }),
20216
- snapshot.tools.length === 0 ? /* @__PURE__ */ jsx92(Box72, { marginTop: 1, children: /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: "No tools are visible to the current Agent." }) }) : /* @__PURE__ */ jsxs70(Box72, { flexDirection: "row", marginTop: 1, children: [
20217
- /* @__PURE__ */ jsx92(Box72, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx92(
20198
+ snapshot.tools.length === 0 ? /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "No tools are visible to the current Agent." }) }) : /* @__PURE__ */ jsxs71(Box73, { flexDirection: "row", marginTop: 1, children: [
20199
+ /* @__PURE__ */ jsx93(Box73, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx93(
20218
20200
  DescriptiveRadioButtonSelect,
20219
20201
  {
20220
20202
  items,
@@ -20225,26 +20207,26 @@ function ToolsDialog({ runtime, onClose }) {
20225
20207
  maxItemsToShow: 10
20226
20208
  }
20227
20209
  ) }),
20228
- /* @__PURE__ */ jsx92(Box72, { width: "45%", paddingLeft: 2, flexDirection: "column", children: selected && /* @__PURE__ */ jsxs70(Fragment18, { children: [
20229
- /* @__PURE__ */ jsx92(Text65, { bold: true, color: theme.text.accent, children: selected.name }),
20230
- /* @__PURE__ */ jsx92(Box72, { marginTop: 1, children: /* @__PURE__ */ jsx92(Text65, { wrap: "wrap", children: selected.description }) }),
20231
- /* @__PURE__ */ jsxs70(Box72, { marginTop: 1, flexDirection: "column", children: [
20232
- /* @__PURE__ */ jsx92(Text65, { bold: true, color: theme.text.primary, children: "Parameters" }),
20233
- selected.parameters.length === 0 ? /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: "None" }) : selected.parameters.map((parameter) => /* @__PURE__ */ jsxs70(Box72, { flexDirection: "column", children: [
20234
- /* @__PURE__ */ jsxs70(Text65, { color: theme.text.link, children: [
20210
+ /* @__PURE__ */ jsx93(Box73, { width: "45%", paddingLeft: 2, flexDirection: "column", children: selected && /* @__PURE__ */ jsxs71(Fragment18, { children: [
20211
+ /* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.accent, children: selected.name }),
20212
+ /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { wrap: "wrap", children: selected.description }) }),
20213
+ /* @__PURE__ */ jsxs71(Box73, { marginTop: 1, flexDirection: "column", children: [
20214
+ /* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.primary, children: "Parameters" }),
20215
+ selected.parameters.length === 0 ? /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "None" }) : selected.parameters.map((parameter) => /* @__PURE__ */ jsxs71(Box73, { flexDirection: "column", children: [
20216
+ /* @__PURE__ */ jsxs71(Text66, { color: theme.text.link, children: [
20235
20217
  parameter.name,
20236
20218
  " ",
20237
- /* @__PURE__ */ jsxs70(Text65, { color: theme.text.secondary, children: [
20219
+ /* @__PURE__ */ jsxs71(Text66, { color: theme.text.secondary, children: [
20238
20220
  parameter.type,
20239
20221
  parameter.required ? " required" : " optional"
20240
20222
  ] })
20241
20223
  ] }),
20242
- parameter.description && /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: parameter.description })
20224
+ parameter.description && /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: parameter.description })
20243
20225
  ] }, parameter.name))
20244
20226
  ] })
20245
20227
  ] }) })
20246
20228
  ] }),
20247
- snapshot.tools.length > 0 && /* @__PURE__ */ jsx92(Box72, { marginTop: 1, children: /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: "Use Up/Down to inspect the current Agent's tool catalog." }) })
20229
+ snapshot.tools.length > 0 && /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Use Up/Down to inspect the current Agent's tool catalog." }) })
20248
20230
  ]
20249
20231
  }
20250
20232
  );
@@ -20287,8 +20269,8 @@ import React20 from "react";
20287
20269
 
20288
20270
  // src/ui/components/dialogs/permission-dialog.tsx
20289
20271
  import { useCallback as useCallback34, useMemo as useMemo32, useState as useState40, useSyncExternalStore as useSyncExternalStore4 } from "react";
20290
- import { Box as Box73, Text as Text66 } from "ink";
20291
- import { Fragment as Fragment19, jsx as jsx93, jsxs as jsxs71 } from "react/jsx-runtime";
20272
+ import { Box as Box74, Text as Text67 } from "ink";
20273
+ import { Fragment as Fragment19, jsx as jsx94, jsxs as jsxs72 } from "react/jsx-runtime";
20292
20274
  function PermissionDialog({
20293
20275
  runtime,
20294
20276
  onClose,
@@ -20350,8 +20332,8 @@ function PermissionDialog({
20350
20332
  },
20351
20333
  { isActive: true }
20352
20334
  );
20353
- return /* @__PURE__ */ jsxs71(
20354
- Box73,
20335
+ return /* @__PURE__ */ jsxs72(
20336
+ Box74,
20355
20337
  {
20356
20338
  borderStyle: "round",
20357
20339
  borderColor: theme.border.default,
@@ -20360,13 +20342,13 @@ function PermissionDialog({
20360
20342
  paddingY: 1,
20361
20343
  width: "100%",
20362
20344
  children: [
20363
- /* @__PURE__ */ jsxs71(Box73, { justifyContent: "space-between", children: [
20364
- /* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.primary, children: "Select DSH Permission" }),
20365
- /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Esc to close" })
20345
+ /* @__PURE__ */ jsxs72(Box74, { justifyContent: "space-between", children: [
20346
+ /* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.text.primary, children: "Select DSH Permission" }),
20347
+ /* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: "Esc to close" })
20366
20348
  ] }),
20367
- error && /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.status.error, children: error }) }),
20368
- !snapshot.available ? /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.status.warning, children: "DSH permission presets are unavailable." }) }) : snapshot.options.length === 0 ? /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.status.warning, children: "No permission presets are available." }) }) : /* @__PURE__ */ jsxs71(Box73, { flexDirection: "row", marginTop: 1, children: [
20369
- /* @__PURE__ */ jsx93(Box73, { width: "50%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx93(
20349
+ error && /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.error, children: error }) }),
20350
+ !snapshot.available ? /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.warning, children: "DSH permission presets are unavailable." }) }) : snapshot.options.length === 0 ? /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.warning, children: "No permission presets are available." }) }) : /* @__PURE__ */ jsxs72(Box74, { flexDirection: "row", marginTop: 1, children: [
20351
+ /* @__PURE__ */ jsx94(Box74, { width: "50%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx94(
20370
20352
  RadioButtonSelect,
20371
20353
  {
20372
20354
  items,
@@ -20375,17 +20357,17 @@ function PermissionDialog({
20375
20357
  onSelect: selectPermission,
20376
20358
  isFocused: !pending && !snapshot.busy,
20377
20359
  showNumbers: false,
20378
- renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs71(Text66, { color: titleColor, wrap: "truncate", children: [
20360
+ renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs72(Text67, { color: titleColor, wrap: "truncate", children: [
20379
20361
  item.value.name,
20380
- item.value.value === snapshot.currentValue && /* @__PURE__ */ jsx93(Text66, { color: theme.text.accent, children: " Current" })
20362
+ item.value.value === snapshot.currentValue && /* @__PURE__ */ jsx94(Text67, { color: theme.text.accent, children: " Current" })
20381
20363
  ] })
20382
20364
  },
20383
20365
  items.map((item) => item.key).join("|")
20384
20366
  ) }),
20385
- /* @__PURE__ */ jsx93(Box73, { width: "50%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs71(Fragment19, { children: [
20386
- /* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.status.warning, children: "Enable Full access?" }),
20387
- /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { children: "This allows commands to run without workspace sandbox restrictions or approval prompts." }) }),
20388
- /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(
20367
+ /* @__PURE__ */ jsx94(Box74, { width: "50%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs72(Fragment19, { children: [
20368
+ /* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.status.warning, children: "Enable Full access?" }),
20369
+ /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { children: "This allows commands to run without workspace sandbox restrictions or approval prompts." }) }),
20370
+ /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(
20389
20371
  RadioButtonSelect,
20390
20372
  {
20391
20373
  items: [
@@ -20400,14 +20382,14 @@ function PermissionDialog({
20400
20382
  showNumbers: false
20401
20383
  }
20402
20384
  ) })
20403
- ] }) : selected ? /* @__PURE__ */ jsxs71(Fragment19, { children: [
20404
- /* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.primary, children: selected.name }),
20405
- /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: selected.value }),
20406
- /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { children: selected.description ?? "No description is available for this preset." }) }),
20407
- snapshot.busy && /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.accent, children: "Applying permission..." }) })
20385
+ ] }) : selected ? /* @__PURE__ */ jsxs72(Fragment19, { children: [
20386
+ /* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.text.primary, children: selected.name }),
20387
+ /* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: selected.value }),
20388
+ /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { children: selected.description ?? "No description is available for this preset." }) }),
20389
+ snapshot.busy && /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.text.accent, children: "Applying permission..." }) })
20408
20390
  ] }) : null })
20409
20391
  ] }),
20410
- /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Changes apply to the current DSH Session immediately. No restart required." }) })
20392
+ /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: "Changes apply to the current DSH Session immediately. No restart required." }) })
20411
20393
  ]
20412
20394
  }
20413
20395
  );
@@ -20523,7 +20505,6 @@ var BuiltinCommandLoader = class {
20523
20505
  themeCommand,
20524
20506
  settingsCommand,
20525
20507
  vimCommand,
20526
- terminalSetupCommand,
20527
20508
  modelCommand,
20528
20509
  providerCommand,
20529
20510
  permissionCommand,
@@ -20848,8 +20829,8 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
20848
20829
  // src/ui/app-container.tsx
20849
20830
  import { useStdout as useStdout4, useStdin as useStdin4 } from "ink";
20850
20831
  import ansiEscapes from "ansi-escapes";
20851
- import * as fs13 from "node:fs";
20852
- import { basename as basename2, join as join6 } from "node:path";
20832
+ import * as fs12 from "node:fs";
20833
+ import { basename as basename2, join as join5 } from "node:path";
20853
20834
 
20854
20835
  // src/ui/hooks/commands/use-settings-command.ts
20855
20836
  import { useState as useState42, useCallback as useCallback36 } from "react";
@@ -21509,9 +21490,9 @@ function useVim(buffer, onSubmit) {
21509
21490
 
21510
21491
  // src/ui/hooks/session/use-git-branch-name.ts
21511
21492
  import { useState as useState44, useEffect as useEffect45, useCallback as useCallback39 } from "react";
21512
- import fs10 from "node:fs";
21493
+ import fs9 from "node:fs";
21513
21494
  import fsPromises2 from "node:fs/promises";
21514
- import path12 from "node:path";
21495
+ import path11 from "node:path";
21515
21496
  function useGitBranchName(cwd) {
21516
21497
  const [branchName, setBranchName] = useState44(void 0);
21517
21498
  const fetchBranchName = useCallback39(async () => {
@@ -21538,14 +21519,14 @@ function useGitBranchName(cwd) {
21538
21519
  }, [cwd, setBranchName]);
21539
21520
  useEffect45(() => {
21540
21521
  fetchBranchName();
21541
- const gitLogsHeadPath = path12.join(cwd, ".git", "logs", "HEAD");
21522
+ const gitLogsHeadPath = path11.join(cwd, ".git", "logs", "HEAD");
21542
21523
  let watcher;
21543
21524
  let cancelled = false;
21544
21525
  const setupWatcher = async () => {
21545
21526
  try {
21546
- await fsPromises2.access(gitLogsHeadPath, fs10.constants.F_OK);
21527
+ await fsPromises2.access(gitLogsHeadPath, fs9.constants.F_OK);
21547
21528
  if (cancelled) return;
21548
- watcher = fs10.watch(gitLogsHeadPath, (eventType) => {
21529
+ watcher = fs9.watch(gitLogsHeadPath, (eventType) => {
21549
21530
  if (eventType === "change" || eventType === "rename") {
21550
21531
  fetchBranchName();
21551
21532
  }
@@ -22093,8 +22074,8 @@ function useInputHistoryStore() {
22093
22074
 
22094
22075
  // src/services/prompt-history-store.ts
22095
22076
  import { randomUUID } from "node:crypto";
22096
- import { promises as fs11 } from "node:fs";
22097
- import path13 from "node:path";
22077
+ import { promises as fs10 } from "node:fs";
22078
+ import path12 from "node:path";
22098
22079
  var MAX_HISTORY_ENTRIES = 1e3;
22099
22080
  function isPromptHistoryEntry(value) {
22100
22081
  if (!value || typeof value !== "object") return false;
@@ -22135,7 +22116,7 @@ var PromptHistoryStore = class {
22135
22116
  if (this.entries) return this.entries;
22136
22117
  try {
22137
22118
  const parsed = JSON.parse(
22138
- await fs11.readFile(this.filePath, "utf8")
22119
+ await fs10.readFile(this.filePath, "utf8")
22139
22120
  );
22140
22121
  if (!Array.isArray(parsed) || !parsed.every(isPromptHistoryEntry)) {
22141
22122
  await this.backUpInvalidFile();
@@ -22157,17 +22138,17 @@ var PromptHistoryStore = class {
22157
22138
  }
22158
22139
  async backUpInvalidFile() {
22159
22140
  const backupPath = `${this.filePath}.invalid.${Date.now()}.bak`;
22160
- await fs11.rename(this.filePath, backupPath).catch(() => {
22141
+ await fs10.rename(this.filePath, backupPath).catch(() => {
22161
22142
  });
22162
22143
  }
22163
22144
  async writeAtomically(entries) {
22164
- await fs11.mkdir(path13.dirname(this.filePath), { recursive: true });
22145
+ await fs10.mkdir(path12.dirname(this.filePath), { recursive: true });
22165
22146
  const temporaryPath = `${this.filePath}.${process.pid}.${randomUUID()}.tmp`;
22166
22147
  try {
22167
- await fs11.writeFile(temporaryPath, JSON.stringify(entries), "utf8");
22168
- await fs11.rename(temporaryPath, this.filePath);
22148
+ await fs10.writeFile(temporaryPath, JSON.stringify(entries), "utf8");
22149
+ await fs10.rename(temporaryPath, this.filePath);
22169
22150
  } finally {
22170
- await fs11.rm(temporaryPath, { force: true }).catch(() => {
22151
+ await fs10.rm(temporaryPath, { force: true }).catch(() => {
22171
22152
  });
22172
22153
  }
22173
22154
  }
@@ -22240,9 +22221,9 @@ var useShellInactivityStatus = ({
22240
22221
  // src/ui/hooks/input/use-local-shell-command.ts
22241
22222
  import { useCallback as useCallback44, useEffect as useEffect53, useRef as useRef29, useState as useState52 } from "react";
22242
22223
  import crypto2 from "node:crypto";
22243
- import fs12 from "node:fs";
22244
- import os4 from "node:os";
22245
- import path14 from "node:path";
22224
+ import fs11 from "node:fs";
22225
+ import os3 from "node:os";
22226
+ import path13 from "node:path";
22246
22227
  function outputDisplay(output) {
22247
22228
  return typeof output === "string" ? { type: "text", content: output } : { type: "ansi", content: output };
22248
22229
  }
@@ -22295,9 +22276,9 @@ function useLocalShellCommand({
22295
22276
  let cumulativeOutput = "";
22296
22277
  let binaryOutput = false;
22297
22278
  let binaryBytes = 0;
22298
- if (os4.platform() !== "win32") {
22299
- pwdFilePath = path14.join(
22300
- os4.tmpdir(),
22279
+ if (os3.platform() !== "win32") {
22280
+ pwdFilePath = path13.join(
22281
+ os3.tmpdir(),
22301
22282
  `dsh_console_shell_pwd_${crypto2.randomBytes(6).toString("hex")}.tmp`
22302
22283
  );
22303
22284
  const terminated = command.endsWith(";") || command.endsWith("&") ? command : `${command};`;
@@ -22398,7 +22379,7 @@ function useLocalShellCommand({
22398
22379
  if (mountedRef.current) setPendingItem(null);
22399
22380
  if (pwdFilePath !== void 0) {
22400
22381
  try {
22401
- fs12.unlinkSync(pwdFilePath);
22382
+ fs11.unlinkSync(pwdFilePath);
22402
22383
  } catch (error) {
22403
22384
  if (error.code !== "ENOENT") {
22404
22385
  onDebugMessage(`Unable to remove shell state file: ${String(error)}`);
@@ -22449,8 +22430,8 @@ ${output}`;
22449
22430
  output = `Command exited with code ${result.exitCode}.
22450
22431
  ${output}`;
22451
22432
  }
22452
- if (pwdFilePath !== void 0 && fs12.existsSync(pwdFilePath)) {
22453
- const finalDir = fs12.readFileSync(pwdFilePath, "utf8").trim();
22433
+ if (pwdFilePath !== void 0 && fs11.existsSync(pwdFilePath)) {
22434
+ const finalDir = fs11.readFileSync(pwdFilePath, "utf8").trim();
22454
22435
  if (finalDir && finalDir !== targetDir) {
22455
22436
  output = `WARNING: shell mode is stateless; the directory change to '${finalDir}' will not persist.
22456
22437
 
@@ -22465,7 +22446,7 @@ ${output}`;
22465
22446
  }
22466
22447
 
22467
22448
  // src/ui/app-container.tsx
22468
- import { jsx as jsx94 } from "react/jsx-runtime";
22449
+ import { jsx as jsx95 } from "react/jsx-runtime";
22469
22450
  var SHELL_WIDTH_FRACTION = 0.89;
22470
22451
  var SHELL_HEIGHT_PADDING = 10;
22471
22452
  var noopExternalStoreSubscribe = () => () => {
@@ -22636,6 +22617,7 @@ var AppContainer = (props) => {
22636
22617
  [modelSelectionRuntime]
22637
22618
  );
22638
22619
  const currentModel = modelSelectionSnapshot ? modelSelectionLabel(modelSelectionSnapshot.current) : "DSH default";
22620
+ const currentReasoningEffort = modelSelectionSnapshot ? modelReasoningEffortLabel(modelSelectionSnapshot.current) : void 0;
22639
22621
  const providerSetupSnapshot = useSyncExternalStore5(
22640
22622
  providerSetupRuntime?.subscribe ?? noopExternalStoreSubscribe,
22641
22623
  providerSetupRuntime?.getSnapshot ?? emptyProviderSetupSnapshot,
@@ -22644,7 +22626,7 @@ var AppContainer = (props) => {
22644
22626
  const [providerSetupDismissed, setProviderSetupDismissed] = useState53(false);
22645
22627
  const promptHistory = useMemo34(
22646
22628
  () => new PromptHistoryStore(
22647
- join6(config.storage.getProjectTempDir(), "prompt_history.json")
22629
+ join5(config.storage.getProjectTempDir(), "prompt_history.json")
22648
22630
  ),
22649
22631
  [config.storage]
22650
22632
  );
@@ -22685,7 +22667,7 @@ var AppContainer = (props) => {
22685
22667
  const staticAreaMaxItemHeight = Math.max(terminalHeight * 4, 100);
22686
22668
  const isValidPath = useCallback45((filePath) => {
22687
22669
  try {
22688
- return fs13.existsSync(filePath) && fs13.statSync(filePath).isFile();
22670
+ return fs12.existsSync(filePath) && fs12.statSync(filePath).isFile();
22689
22671
  } catch (_e) {
22690
22672
  return false;
22691
22673
  }
@@ -23025,7 +23007,7 @@ ${queuedText}` : queuedText;
23025
23007
  return;
23026
23008
  }
23027
23009
  setCustomDialog(
23028
- /* @__PURE__ */ jsx94(
23010
+ /* @__PURE__ */ jsx95(
23029
23011
  ProviderSetupDialog,
23030
23012
  {
23031
23013
  runtime: providerSetupRuntime,
@@ -23421,6 +23403,7 @@ ${queuedText}` : queuedText;
23421
23403
  messageQueue,
23422
23404
  queueErrorMessage,
23423
23405
  currentModel,
23406
+ currentReasoningEffort,
23424
23407
  errorCount,
23425
23408
  availableTerminalHeight,
23426
23409
  mainAreaWidth,
@@ -23494,6 +23477,7 @@ ${queuedText}` : queuedText;
23494
23477
  mainControlsRef,
23495
23478
  rootUiRef,
23496
23479
  currentModel,
23480
+ currentReasoningEffort,
23497
23481
  activePtyId,
23498
23482
  historyManager,
23499
23483
  embeddedShellFocused,
@@ -23547,14 +23531,14 @@ ${queuedText}` : queuedText;
23547
23531
  setEmbeddedShellFocused
23548
23532
  ]
23549
23533
  );
23550
- return /* @__PURE__ */ jsx94(UIStateContext.Provider, { value: uiState, children: /* @__PURE__ */ jsx94(UIActionsContext.Provider, { value: uiActions, children: /* @__PURE__ */ jsx94(ConfigContext.Provider, { value: config, children: /* @__PURE__ */ jsx94(
23534
+ return /* @__PURE__ */ jsx95(UIStateContext.Provider, { value: uiState, children: /* @__PURE__ */ jsx95(UIActionsContext.Provider, { value: uiActions, children: /* @__PURE__ */ jsx95(ConfigContext.Provider, { value: config, children: /* @__PURE__ */ jsx95(
23551
23535
  AppContext.Provider,
23552
23536
  {
23553
23537
  value: {
23554
23538
  version: props.version,
23555
23539
  startupWarnings: props.startupWarnings || []
23556
23540
  },
23557
- children: /* @__PURE__ */ jsx94(ApprovalRuntimeProvider, { runtime: approvalRuntime, children: /* @__PURE__ */ jsx94(UserQuestionRuntimeProvider, { runtime: userQuestionRuntime, children: /* @__PURE__ */ jsx94(ShellFocusContext.Provider, { value: isFocused, children: /* @__PURE__ */ jsx94(App, {}) }) }) })
23541
+ children: /* @__PURE__ */ jsx95(ApprovalRuntimeProvider, { runtime: approvalRuntime, children: /* @__PURE__ */ jsx95(UserQuestionRuntimeProvider, { runtime: userQuestionRuntime, children: /* @__PURE__ */ jsx95(ShellFocusContext.Provider, { value: isFocused, children: /* @__PURE__ */ jsx95(App, {}) }) }) })
23558
23542
  }
23559
23543
  ) }) }) });
23560
23544
  };
@@ -23562,7 +23546,7 @@ ${queuedText}` : queuedText;
23562
23546
  // src/ui/root.tsx
23563
23547
  import React21 from "react";
23564
23548
  import { render } from "ink";
23565
- import { jsx as jsx95 } from "react/jsx-runtime";
23549
+ import { jsx as jsx96 } from "react/jsx-runtime";
23566
23550
  var SLOW_RENDER_MS = 200;
23567
23551
  function validateDnsResolutionOrder(order) {
23568
23552
  const defaultValue = "ipv4first";
@@ -23610,17 +23594,17 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
23610
23594
  const version = await getVersion();
23611
23595
  const AppWrapper = () => {
23612
23596
  useKittyKeyboardProtocol();
23613
- return /* @__PURE__ */ jsx95(SettingsContext.Provider, { value: settings, children: /* @__PURE__ */ jsx95(
23597
+ return /* @__PURE__ */ jsx96(SettingsContext.Provider, { value: settings, children: /* @__PURE__ */ jsx96(
23614
23598
  KeypressProvider,
23615
23599
  {
23616
23600
  config,
23617
23601
  debugKeystrokeLogging: settings.merged.general.debugKeystrokeLogging,
23618
- children: /* @__PURE__ */ jsx95(
23602
+ children: /* @__PURE__ */ jsx96(
23619
23603
  MouseProvider,
23620
23604
  {
23621
23605
  mouseEventsEnabled,
23622
23606
  debugKeystrokeLogging: settings.merged.general.debugKeystrokeLogging,
23623
- children: /* @__PURE__ */ jsx95(ScrollProvider, { children: /* @__PURE__ */ jsx95(SessionStatsProvider, { conversationRuntime, children: /* @__PURE__ */ jsx95(VimModeProvider, { settings, children: /* @__PURE__ */ jsx95(
23607
+ children: /* @__PURE__ */ jsx96(ScrollProvider, { children: /* @__PURE__ */ jsx96(SessionStatsProvider, { conversationRuntime, children: /* @__PURE__ */ jsx96(VimModeProvider, { settings, children: /* @__PURE__ */ jsx96(
23624
23608
  AppContainer,
23625
23609
  {
23626
23610
  config,
@@ -23648,7 +23632,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
23648
23632
  };
23649
23633
  const { stdout: inkStdout, stderr: inkStderr } = createWorkingStdio();
23650
23634
  const instance = render(
23651
- process.env["DEBUG"] ? /* @__PURE__ */ jsx95(React21.StrictMode, { children: /* @__PURE__ */ jsx95(AppWrapper, {}) }) : /* @__PURE__ */ jsx95(AppWrapper, {}),
23635
+ process.env["DEBUG"] ? /* @__PURE__ */ jsx96(React21.StrictMode, { children: /* @__PURE__ */ jsx96(AppWrapper, {}) }) : /* @__PURE__ */ jsx96(AppWrapper, {}),
23652
23636
  {
23653
23637
  stdout: inkStdout,
23654
23638
  stderr: inkStderr,
@@ -23839,10 +23823,11 @@ function mergeToolPresentation(existing, next) {
23839
23823
  return { ...existing, ...next };
23840
23824
  }
23841
23825
  var DshSessionProjector = class {
23842
- constructor(sessionId = "dsh-console", model = "default", toolPresenter) {
23826
+ constructor(sessionId = "dsh-console", model = "default", toolPresenter, contextWindow2) {
23843
23827
  this.sessionId = sessionId;
23844
23828
  this.model = model;
23845
23829
  this.toolPresenter = toolPresenter;
23830
+ this.contextWindow = contextWindow2;
23846
23831
  }
23847
23832
  snapshot = {
23848
23833
  messages: [],
@@ -23863,7 +23848,8 @@ var DshSessionProjector = class {
23863
23848
  getSessionStats = () => ({
23864
23849
  sessionId: this.sessionId,
23865
23850
  metrics: this.metrics,
23866
- lastPromptTokenCount: this.lastPromptTokenCount
23851
+ lastPromptTokenCount: this.lastPromptTokenCount,
23852
+ ...this.contextWindow === void 0 ? {} : { contextWindow: this.contextWindow }
23867
23853
  });
23868
23854
  subscribe = (listener) => {
23869
23855
  this.listeners.add(listener);
@@ -24219,7 +24205,8 @@ var DshPromptCompletionRuntime = class {
24219
24205
  meta: { cwd: process.cwd() },
24220
24206
  agentOptions: {
24221
24207
  provider: selection.provider,
24222
- model: selection.model
24208
+ model: selection.model,
24209
+ ...selection.reasoningEffort === void 0 ? {} : { reasoningEffort: selection.reasoningEffort }
24223
24210
  },
24224
24211
  signal,
24225
24212
  setup: (agentCtx) => {
@@ -24280,8 +24267,8 @@ var DshPromptCompletionRuntime = class {
24280
24267
  };
24281
24268
 
24282
24269
  // src/dsh/prompt-input-runtime.ts
24283
- import { promises as fs14 } from "node:fs";
24284
- import path15 from "node:path";
24270
+ import { promises as fs13 } from "node:fs";
24271
+ import path14 from "node:path";
24285
24272
  var MAX_FILES = 50;
24286
24273
  var MAX_FILE_BYTES = 256 * 1024;
24287
24274
  var MAX_TOTAL_BYTES = 1024 * 1024;
@@ -24315,8 +24302,8 @@ function throwIfAborted(signal) {
24315
24302
  if (signal.aborted) throw abortError();
24316
24303
  }
24317
24304
  function isWithin(root, candidate) {
24318
- const relative2 = path15.relative(root, candidate);
24319
- return relative2 === "" || !relative2.startsWith("..") && !path15.isAbsolute(relative2);
24305
+ const relative2 = path14.relative(root, candidate);
24306
+ return relative2 === "" || !relative2.startsWith("..") && !path14.isAbsolute(relative2);
24320
24307
  }
24321
24308
  function parseReferences(text) {
24322
24309
  const references = [];
@@ -24345,14 +24332,14 @@ function parseReferences(text) {
24345
24332
  return references;
24346
24333
  }
24347
24334
  async function resolveReference(value, workspaceRoots, clipboardRoots) {
24348
- const candidates = path15.isAbsolute(value) ? [path15.resolve(value)] : workspaceRoots.map((root) => path15.resolve(root, value));
24335
+ const candidates = path14.isAbsolute(value) ? [path14.resolve(value)] : workspaceRoots.map((root) => path14.resolve(root, value));
24349
24336
  const isAllowedLexically = candidates.some(
24350
24337
  (candidate) => workspaceRoots.some((root) => isWithin(root, candidate)) || clipboardRoots.some((root) => isWithin(root, candidate))
24351
24338
  );
24352
24339
  if (!isAllowedLexically) throw new Error(`File reference is outside the workspace: @${value}`);
24353
24340
  for (const candidate of candidates) {
24354
24341
  try {
24355
- const realCandidate = await fs14.realpath(candidate);
24342
+ const realCandidate = await fs13.realpath(candidate);
24356
24343
  const workspaceRoot = workspaceRoots.find((root) => isWithin(root, realCandidate));
24357
24344
  if (workspaceRoot) return { path: realCandidate, kind: "workspace-file" };
24358
24345
  const clipboardRoot = clipboardRoots.find((root) => isWithin(root, realCandidate));
@@ -24368,20 +24355,20 @@ async function resolveReference(value, workspaceRoots, clipboardRoots) {
24368
24355
  async function collectFiles(candidate, root, signal, output) {
24369
24356
  throwIfAborted(signal);
24370
24357
  if (output.length >= MAX_FILES) return;
24371
- const stats = await fs14.lstat(candidate);
24358
+ const stats = await fs13.lstat(candidate);
24372
24359
  if (stats.isSymbolicLink()) return;
24373
24360
  if (stats.isFile()) {
24374
- if (!IMAGE_MEDIA_TYPES.has(path15.extname(candidate).toLowerCase())) output.push(candidate);
24361
+ if (!IMAGE_MEDIA_TYPES.has(path14.extname(candidate).toLowerCase())) output.push(candidate);
24375
24362
  return;
24376
24363
  }
24377
24364
  if (!stats.isDirectory()) return;
24378
- const entries = await fs14.readdir(candidate, { withFileTypes: true });
24365
+ const entries = await fs13.readdir(candidate, { withFileTypes: true });
24379
24366
  entries.sort((left, right) => left.name.localeCompare(right.name));
24380
24367
  for (const entry of entries) {
24381
24368
  if (output.length >= MAX_FILES) return;
24382
24369
  if (entry.name.startsWith(".")) continue;
24383
24370
  if (entry.isDirectory() && SKIPPED_DIRECTORIES.has(entry.name)) continue;
24384
- const child = path15.join(candidate, entry.name);
24371
+ const child = path14.join(candidate, entry.name);
24385
24372
  if (isWithin(root, child)) await collectFiles(child, root, signal, output);
24386
24373
  }
24387
24374
  }
@@ -24401,12 +24388,12 @@ var WorkspacePromptInputRuntime = class {
24401
24388
  }) {
24402
24389
  if (this.disposed) throw new Error("Prompt input runtime has been disposed.");
24403
24390
  throwIfAborted(signal);
24404
- const roots = await Promise.all(workspaceRoots.map((root) => fs14.realpath(root)));
24391
+ const roots = await Promise.all(workspaceRoots.map((root) => fs13.realpath(root)));
24405
24392
  const clipboardRoots = await Promise.all(clipboardImageRoots.map(async (root) => {
24406
24393
  try {
24407
- return await fs14.realpath(root);
24394
+ return await fs13.realpath(root);
24408
24395
  } catch (error) {
24409
- if (error.code === "ENOENT") return path15.resolve(root);
24396
+ if (error.code === "ENOENT") return path14.resolve(root);
24410
24397
  throw error;
24411
24398
  }
24412
24399
  }));
@@ -24417,14 +24404,14 @@ var WorkspacePromptInputRuntime = class {
24417
24404
  throwIfAborted(signal);
24418
24405
  const resolved = await resolveReference(reference.value, roots, clipboardRoots);
24419
24406
  if (!resolved) continue;
24420
- const stats = await fs14.stat(resolved.path);
24421
- const extension = path15.extname(resolved.path).toLowerCase();
24407
+ const stats = await fs13.stat(resolved.path);
24408
+ const extension = path14.extname(resolved.path).toLowerCase();
24422
24409
  const mediaType = IMAGE_MEDIA_TYPES.get(extension);
24423
24410
  if (stats.isFile() && mediaType) {
24424
24411
  images.set(reference.start, {
24425
24412
  type: "image-source",
24426
24413
  source: { kind: resolved.kind, path: resolved.path },
24427
- displayName: path15.basename(resolved.path),
24414
+ displayName: path14.basename(resolved.path),
24428
24415
  declaredMediaType: mediaType
24429
24416
  });
24430
24417
  continue;
@@ -24441,7 +24428,7 @@ var WorkspacePromptInputRuntime = class {
24441
24428
  if (stats.size > MAX_FILE_BYTES) {
24442
24429
  throw new Error(`Referenced text file is too large: @${reference.value}`);
24443
24430
  }
24444
- const candidate = await fs14.readFile(resolved.path, { signal });
24431
+ const candidate = await fs13.readFile(resolved.path, { signal });
24445
24432
  try {
24446
24433
  if (candidate.includes(0)) throw new Error("binary");
24447
24434
  new TextDecoder("utf-8", { fatal: true }).decode(candidate);
@@ -24469,9 +24456,9 @@ var WorkspacePromptInputRuntime = class {
24469
24456
  let totalBytes = 0;
24470
24457
  for (const { file, root } of uniqueFiles) {
24471
24458
  throwIfAborted(signal);
24472
- const stats = await fs14.stat(file);
24459
+ const stats = await fs13.stat(file);
24473
24460
  if (stats.size > MAX_FILE_BYTES || totalBytes + stats.size > MAX_TOTAL_BYTES) continue;
24474
- const buffer = await fs14.readFile(file, { signal });
24461
+ const buffer = await fs13.readFile(file, { signal });
24475
24462
  if (buffer.includes(0)) continue;
24476
24463
  let content2;
24477
24464
  try {
@@ -24480,7 +24467,7 @@ var WorkspacePromptInputRuntime = class {
24480
24467
  continue;
24481
24468
  }
24482
24469
  totalBytes += stats.size;
24483
- const label = path15.relative(root, file).split(path15.sep).join("/");
24470
+ const label = path14.relative(root, file).split(path14.sep).join("/");
24484
24471
  sections.push(`Content from @${label}:
24485
24472
  ${content2}`);
24486
24473
  }
@@ -24685,7 +24672,7 @@ var DshToolPresentationAdapter = class {
24685
24672
  };
24686
24673
 
24687
24674
  // src/dsh/attachment-input-adapter.ts
24688
- import { promises as fs15 } from "node:fs";
24675
+ import { promises as fs14 } from "node:fs";
24689
24676
  import { isImageAdmissionError } from "@deepseek-ai/dsh-attachment";
24690
24677
  var IMAGE_MEDIA_TYPES2 = /* @__PURE__ */ new Set([
24691
24678
  "image/png",
@@ -24718,7 +24705,7 @@ var DshAttachmentInputAdapter = class {
24718
24705
  signal.throwIfAborted();
24719
24706
  const images = imageParts(content);
24720
24707
  const inputs = await Promise.all(images.map(async (part) => ({
24721
- data: new Uint8Array(await fs15.readFile(part.source.path, { signal })),
24708
+ data: new Uint8Array(await fs14.readFile(part.source.path, { signal })),
24722
24709
  mediaType: imageMediaType(part.declaredMediaType),
24723
24710
  name: part.displayName
24724
24711
  })));
@@ -24746,17 +24733,48 @@ var DshAttachmentInputAdapter = class {
24746
24733
  import { unlink as unlink3 } from "node:fs/promises";
24747
24734
 
24748
24735
  // src/dsh/model-selection-runtime.ts
24736
+ import { ReasoningEffortId } from "@deepseek-ai/dsh-llm";
24749
24737
  function inputModalities(model) {
24750
24738
  return (model.inputModalities ?? ["text"]).filter(
24751
24739
  (modality) => modality === "text" || modality === "image"
24752
24740
  );
24753
24741
  }
24754
- function modelSelectionView(model) {
24742
+ function contextWindow(model) {
24743
+ return "context" in model ? model.context?.contextWindow : void 0;
24744
+ }
24745
+ function modelSelectionView(model, selectedEffort) {
24746
+ const resolvedContextWindow = contextWindow(model);
24747
+ const reasoning = "reasoning" in model ? model.reasoning : void 0;
24748
+ if (selectedEffort !== void 0 && !reasoning?.efforts.some((effort) => String(effort.id) === selectedEffort)) {
24749
+ throw new Error(
24750
+ `Reasoning effort ${selectedEffort} is not available for ${model.provider}/${model.id}.`
24751
+ );
24752
+ }
24755
24753
  return {
24756
24754
  provider: model.provider,
24757
24755
  model: model.id,
24758
24756
  name: model.name,
24759
- inputModalities: inputModalities(model)
24757
+ inputModalities: inputModalities(model),
24758
+ ...resolvedContextWindow === void 0 ? {} : { contextWindow: resolvedContextWindow },
24759
+ ...reasoning === void 0 ? {} : {
24760
+ reasoning: {
24761
+ efforts: reasoning.efforts.map((effort) => ({
24762
+ id: String(effort.id),
24763
+ name: effort.name,
24764
+ ...effort.description === void 0 ? {} : { description: effort.description }
24765
+ })),
24766
+ ...reasoning.defaultEffort === void 0 ? {} : { defaultEffort: String(reasoning.defaultEffort) },
24767
+ ...selectedEffort === void 0 ? {} : { selectedEffort }
24768
+ }
24769
+ }
24770
+ };
24771
+ }
24772
+ function modelSelectionFromView(selection) {
24773
+ const reasoningEffort = selection.reasoning?.selectedEffort;
24774
+ return {
24775
+ provider: selection.provider,
24776
+ model: selection.model,
24777
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort: ReasoningEffortId(reasoningEffort) }
24760
24778
  };
24761
24779
  }
24762
24780
  var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
@@ -24771,7 +24789,10 @@ var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
24771
24789
  snapshot;
24772
24790
  static async create(llm, defaults, activate, conversationExists, signal) {
24773
24791
  const selection = defaults.currentSelection();
24774
- const current = modelSelectionView(await llm.resolveModelInfo(selection.provider, selection.model, signal));
24792
+ const current = modelSelectionView(
24793
+ await llm.resolveModelInfo(selection.provider, selection.model, signal),
24794
+ selection.reasoningEffort === void 0 ? void 0 : String(selection.reasoningEffort)
24795
+ );
24775
24796
  signal?.throwIfAborted();
24776
24797
  return new _DshModelSelectionRuntime(llm, defaults, activate, conversationExists, current);
24777
24798
  }
@@ -24791,23 +24812,41 @@ var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
24791
24812
  })
24792
24813
  );
24793
24814
  signal?.throwIfAborted();
24794
- return models.flat().map(modelSelectionView);
24815
+ return Promise.all(
24816
+ models.flat().map(async (model) => {
24817
+ signal?.throwIfAborted();
24818
+ try {
24819
+ const resolved = await this.llm.resolveModelInfo(
24820
+ model.provider,
24821
+ model.id,
24822
+ signal
24823
+ );
24824
+ signal?.throwIfAborted();
24825
+ return modelSelectionView(resolved);
24826
+ } catch (cause) {
24827
+ signal?.throwIfAborted();
24828
+ if (cause instanceof Error && cause.name === "AbortError") throw cause;
24829
+ return modelSelectionView(model);
24830
+ }
24831
+ })
24832
+ );
24795
24833
  }
24796
24834
  hasConversation = () => this.conversationExists();
24797
- async setModel(provider, model, signal) {
24798
- const resolved = modelSelectionView(await this.llm.resolveModelInfo(provider, model, signal));
24835
+ async setModel(selection, signal) {
24836
+ const resolved = modelSelectionView(
24837
+ await this.llm.resolveModelInfo(selection.provider, selection.model, signal),
24838
+ selection.reasoningEffort
24839
+ );
24799
24840
  signal?.throwIfAborted();
24800
24841
  const previousDefault = this.snapshot.default;
24801
- await this.defaults.saveSelection({ provider, model });
24842
+ const selected = modelSelectionFromView(resolved);
24843
+ await this.defaults.saveSelection(selected);
24802
24844
  try {
24803
24845
  signal?.throwIfAborted();
24804
- await this.activate({ provider, model });
24846
+ await this.activate(selected);
24805
24847
  } catch (cause) {
24806
24848
  try {
24807
- await this.defaults.saveSelection({
24808
- provider: previousDefault.provider,
24809
- model: previousDefault.model
24810
- });
24849
+ await this.defaults.saveSelection(modelSelectionFromView(previousDefault));
24811
24850
  } catch (rollbackError) {
24812
24851
  throw new AggregateError(
24813
24852
  [cause, rollbackError],
@@ -24934,7 +24973,7 @@ var DshSessionManagementRuntime = class {
24934
24973
  signal?.throwIfAborted();
24935
24974
  const current = this.callbacks.currentSelection();
24936
24975
  const sessionId = await this.callbacks.createFresh(
24937
- { provider: current.provider, model: current.model },
24976
+ modelSelectionFromView(current),
24938
24977
  signal
24939
24978
  );
24940
24979
  this.commitCurrentSession(sessionId);
@@ -24970,10 +25009,14 @@ var DshSessionManagementRuntime = class {
24970
25009
  signal
24971
25010
  );
24972
25011
  signal?.throwIfAborted();
24973
- const selected = modelSelectionView(resolved);
25012
+ const explicitReasoningEffort = header.adapterDefaults?.reasoningEffort ? void 0 : header.config.reasoningEffort;
25013
+ const selected = modelSelectionView(
25014
+ resolved,
25015
+ explicitReasoningEffort === void 0 ? void 0 : String(explicitReasoningEffort)
25016
+ );
24974
25017
  const resumedSessionId = await this.callbacks.resume(
24975
25018
  id,
24976
- { provider: selected.provider, model: selected.model },
25019
+ modelSelectionFromView(selected),
24977
25020
  signal
24978
25021
  );
24979
25022
  this.callbacks.adoptCurrentModel(selected);
@@ -25441,9 +25484,9 @@ function throwIfAborted2(signal) {
25441
25484
  throw new DOMException("The operation was aborted.", "AbortError");
25442
25485
  }
25443
25486
  }
25444
- function valueAtPath(value, path16) {
25487
+ function valueAtPath(value, path15) {
25445
25488
  let current = value;
25446
- for (const segment of path16) {
25489
+ for (const segment of path15) {
25447
25490
  if (typeof current !== "object" || current === null) return void 0;
25448
25491
  current = current[segment];
25449
25492
  }
@@ -25677,7 +25720,17 @@ async function start(ctx, config) {
25677
25720
  const promptInputRuntime = new WorkspacePromptInputRuntime();
25678
25721
  const attachmentInput = new DshAttachmentInputAdapter(attachments);
25679
25722
  const createActiveConversation = async (selected, options = {}) => {
25680
- const agentOptions = { provider: selected.provider, model: selected.model };
25723
+ const modelInfo = await llm.resolveModelInfo(
25724
+ selected.provider,
25725
+ selected.model,
25726
+ options.signal
25727
+ );
25728
+ options.signal?.throwIfAborted();
25729
+ const agentOptions = {
25730
+ provider: selected.provider,
25731
+ model: selected.model,
25732
+ ...selected.reasoningEffort === void 0 ? {} : { reasoningEffort: selected.reasoningEffort }
25733
+ };
25681
25734
  const setup = (agentCtx) => {
25682
25735
  const ref = {
25683
25736
  current: selected,
@@ -25702,7 +25755,8 @@ async function start(ctx, config) {
25702
25755
  const projector = new DshSessionProjector(
25703
25756
  String(handle.agent.session.id),
25704
25757
  String(selected.model),
25705
- new DshToolPresentationAdapter(tools, handle.agent)
25758
+ new DshToolPresentationAdapter(tools, handle.agent),
25759
+ modelInfo.context?.contextWindow
25706
25760
  );
25707
25761
  if (options.resumeSessionId !== void 0)
25708
25762
  projector.replay(handle.agent.session.events);