reasonix 0.49.0 → 0.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/dashboard/dist/app.css +1 -0
  2. package/dashboard/dist/app.js +28 -30531
  3. package/dashboard/dist/app.js.map +1 -1
  4. package/dashboard/dist/assets/KaTeX_AMS-Regular.ttf +0 -0
  5. package/dashboard/dist/assets/KaTeX_AMS-Regular.woff +0 -0
  6. package/dashboard/dist/assets/KaTeX_AMS-Regular.woff2 +0 -0
  7. package/dashboard/dist/assets/KaTeX_Caligraphic-Bold.ttf +0 -0
  8. package/dashboard/dist/assets/KaTeX_Caligraphic-Bold.woff +0 -0
  9. package/dashboard/dist/assets/KaTeX_Caligraphic-Bold.woff2 +0 -0
  10. package/dashboard/dist/assets/KaTeX_Caligraphic-Regular.ttf +0 -0
  11. package/dashboard/dist/assets/KaTeX_Caligraphic-Regular.woff +0 -0
  12. package/dashboard/dist/assets/KaTeX_Caligraphic-Regular.woff2 +0 -0
  13. package/dashboard/dist/assets/KaTeX_Fraktur-Bold.ttf +0 -0
  14. package/dashboard/dist/assets/KaTeX_Fraktur-Bold.woff +0 -0
  15. package/dashboard/dist/assets/KaTeX_Fraktur-Bold.woff2 +0 -0
  16. package/dashboard/dist/assets/KaTeX_Fraktur-Regular.ttf +0 -0
  17. package/dashboard/dist/assets/KaTeX_Fraktur-Regular.woff +0 -0
  18. package/dashboard/dist/assets/KaTeX_Fraktur-Regular.woff2 +0 -0
  19. package/dashboard/dist/assets/KaTeX_Main-Bold.ttf +0 -0
  20. package/dashboard/dist/assets/KaTeX_Main-Bold.woff +0 -0
  21. package/dashboard/dist/assets/KaTeX_Main-Bold.woff2 +0 -0
  22. package/dashboard/dist/assets/KaTeX_Main-BoldItalic.ttf +0 -0
  23. package/dashboard/dist/assets/KaTeX_Main-BoldItalic.woff +0 -0
  24. package/dashboard/dist/assets/KaTeX_Main-BoldItalic.woff2 +0 -0
  25. package/dashboard/dist/assets/KaTeX_Main-Italic.ttf +0 -0
  26. package/dashboard/dist/assets/KaTeX_Main-Italic.woff +0 -0
  27. package/dashboard/dist/assets/KaTeX_Main-Italic.woff2 +0 -0
  28. package/dashboard/dist/assets/KaTeX_Main-Regular.ttf +0 -0
  29. package/dashboard/dist/assets/KaTeX_Main-Regular.woff +0 -0
  30. package/dashboard/dist/assets/KaTeX_Main-Regular.woff2 +0 -0
  31. package/dashboard/dist/assets/KaTeX_Math-BoldItalic.ttf +0 -0
  32. package/dashboard/dist/assets/KaTeX_Math-BoldItalic.woff +0 -0
  33. package/dashboard/dist/assets/KaTeX_Math-BoldItalic.woff2 +0 -0
  34. package/dashboard/dist/assets/KaTeX_Math-Italic.ttf +0 -0
  35. package/dashboard/dist/assets/KaTeX_Math-Italic.woff +0 -0
  36. package/dashboard/dist/assets/KaTeX_Math-Italic.woff2 +0 -0
  37. package/dashboard/dist/assets/KaTeX_SansSerif-Bold.ttf +0 -0
  38. package/dashboard/dist/assets/KaTeX_SansSerif-Bold.woff +0 -0
  39. package/dashboard/dist/assets/KaTeX_SansSerif-Bold.woff2 +0 -0
  40. package/dashboard/dist/assets/KaTeX_SansSerif-Italic.ttf +0 -0
  41. package/dashboard/dist/assets/KaTeX_SansSerif-Italic.woff +0 -0
  42. package/dashboard/dist/assets/KaTeX_SansSerif-Italic.woff2 +0 -0
  43. package/dashboard/dist/assets/KaTeX_SansSerif-Regular.ttf +0 -0
  44. package/dashboard/dist/assets/KaTeX_SansSerif-Regular.woff +0 -0
  45. package/dashboard/dist/assets/KaTeX_SansSerif-Regular.woff2 +0 -0
  46. package/dashboard/dist/assets/KaTeX_Script-Regular.ttf +0 -0
  47. package/dashboard/dist/assets/KaTeX_Script-Regular.woff +0 -0
  48. package/dashboard/dist/assets/KaTeX_Script-Regular.woff2 +0 -0
  49. package/dashboard/dist/assets/KaTeX_Size1-Regular.ttf +0 -0
  50. package/dashboard/dist/assets/KaTeX_Size1-Regular.woff +0 -0
  51. package/dashboard/dist/assets/KaTeX_Size1-Regular.woff2 +0 -0
  52. package/dashboard/dist/assets/KaTeX_Size2-Regular.ttf +0 -0
  53. package/dashboard/dist/assets/KaTeX_Size2-Regular.woff +0 -0
  54. package/dashboard/dist/assets/KaTeX_Size2-Regular.woff2 +0 -0
  55. package/dashboard/dist/assets/KaTeX_Size3-Regular.ttf +0 -0
  56. package/dashboard/dist/assets/KaTeX_Size3-Regular.woff +0 -0
  57. package/dashboard/dist/assets/KaTeX_Size4-Regular.ttf +0 -0
  58. package/dashboard/dist/assets/KaTeX_Size4-Regular.woff +0 -0
  59. package/dashboard/dist/assets/KaTeX_Size4-Regular.woff2 +0 -0
  60. package/dashboard/dist/assets/KaTeX_Typewriter-Regular.ttf +0 -0
  61. package/dashboard/dist/assets/KaTeX_Typewriter-Regular.woff +0 -0
  62. package/dashboard/dist/assets/KaTeX_Typewriter-Regular.woff2 +0 -0
  63. package/dashboard/dist/assets/geist-cyrillic-400-normal.woff +0 -0
  64. package/dashboard/dist/assets/geist-cyrillic-400-normal.woff2 +0 -0
  65. package/dashboard/dist/assets/geist-cyrillic-500-normal.woff +0 -0
  66. package/dashboard/dist/assets/geist-cyrillic-500-normal.woff2 +0 -0
  67. package/dashboard/dist/assets/geist-cyrillic-600-normal.woff +0 -0
  68. package/dashboard/dist/assets/geist-cyrillic-600-normal.woff2 +0 -0
  69. package/dashboard/dist/assets/geist-cyrillic-700-normal.woff +0 -0
  70. package/dashboard/dist/assets/geist-cyrillic-700-normal.woff2 +0 -0
  71. package/dashboard/dist/assets/geist-cyrillic-ext-500-normal.woff +0 -0
  72. package/dashboard/dist/assets/geist-cyrillic-ext-600-normal.woff +0 -0
  73. package/dashboard/dist/assets/geist-cyrillic-ext-700-normal.woff +0 -0
  74. package/dashboard/dist/assets/geist-latin-400-normal.woff +0 -0
  75. package/dashboard/dist/assets/geist-latin-400-normal.woff2 +0 -0
  76. package/dashboard/dist/assets/geist-latin-500-normal.woff +0 -0
  77. package/dashboard/dist/assets/geist-latin-500-normal.woff2 +0 -0
  78. package/dashboard/dist/assets/geist-latin-600-normal.woff +0 -0
  79. package/dashboard/dist/assets/geist-latin-600-normal.woff2 +0 -0
  80. package/dashboard/dist/assets/geist-latin-700-normal.woff +0 -0
  81. package/dashboard/dist/assets/geist-latin-700-normal.woff2 +0 -0
  82. package/dashboard/dist/assets/geist-latin-ext-400-normal.woff +0 -0
  83. package/dashboard/dist/assets/geist-latin-ext-400-normal.woff2 +0 -0
  84. package/dashboard/dist/assets/geist-latin-ext-500-normal.woff +0 -0
  85. package/dashboard/dist/assets/geist-latin-ext-500-normal.woff2 +0 -0
  86. package/dashboard/dist/assets/geist-latin-ext-600-normal.woff +0 -0
  87. package/dashboard/dist/assets/geist-latin-ext-600-normal.woff2 +0 -0
  88. package/dashboard/dist/assets/geist-latin-ext-700-normal.woff +0 -0
  89. package/dashboard/dist/assets/geist-latin-ext-700-normal.woff2 +0 -0
  90. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal.woff +0 -0
  91. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal.woff2 +0 -0
  92. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal.woff +0 -0
  93. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal.woff2 +0 -0
  94. package/dashboard/dist/assets/geist-mono-cyrillic-600-normal.woff +0 -0
  95. package/dashboard/dist/assets/geist-mono-cyrillic-600-normal.woff2 +0 -0
  96. package/dashboard/dist/assets/geist-mono-latin-400-normal.woff +0 -0
  97. package/dashboard/dist/assets/geist-mono-latin-400-normal.woff2 +0 -0
  98. package/dashboard/dist/assets/geist-mono-latin-500-normal.woff +0 -0
  99. package/dashboard/dist/assets/geist-mono-latin-500-normal.woff2 +0 -0
  100. package/dashboard/dist/assets/geist-mono-latin-600-normal.woff +0 -0
  101. package/dashboard/dist/assets/geist-mono-latin-600-normal.woff2 +0 -0
  102. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal.woff +0 -0
  103. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal.woff2 +0 -0
  104. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal.woff +0 -0
  105. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal.woff2 +0 -0
  106. package/dashboard/dist/assets/geist-mono-latin-ext-600-normal.woff +0 -0
  107. package/dashboard/dist/assets/geist-mono-latin-ext-600-normal.woff2 +0 -0
  108. package/dashboard/dist/assets/geist-mono-symbols2-400-normal.woff +0 -0
  109. package/dashboard/dist/assets/geist-mono-symbols2-500-normal.woff +0 -0
  110. package/dashboard/dist/assets/geist-mono-symbols2-600-normal.woff +0 -0
  111. package/dashboard/dist/assets/geist-mono-vietnamese-400-normal.woff +0 -0
  112. package/dashboard/dist/assets/geist-mono-vietnamese-500-normal.woff +0 -0
  113. package/dashboard/dist/assets/geist-mono-vietnamese-600-normal.woff +0 -0
  114. package/dashboard/dist/assets/geist-vietnamese-400-normal.woff +0 -0
  115. package/dashboard/dist/assets/geist-vietnamese-500-normal.woff +0 -0
  116. package/dashboard/dist/assets/geist-vietnamese-600-normal.woff +0 -0
  117. package/dashboard/dist/assets/geist-vietnamese-600-normal.woff2 +0 -0
  118. package/dashboard/dist/assets/geist-vietnamese-700-normal.woff +0 -0
  119. package/dashboard/dist/assets/inter-cyrillic-400-normal.woff +0 -0
  120. package/dashboard/dist/assets/inter-cyrillic-400-normal.woff2 +0 -0
  121. package/dashboard/dist/assets/inter-cyrillic-500-normal.woff +0 -0
  122. package/dashboard/dist/assets/inter-cyrillic-500-normal.woff2 +0 -0
  123. package/dashboard/dist/assets/inter-cyrillic-600-normal.woff +0 -0
  124. package/dashboard/dist/assets/inter-cyrillic-600-normal.woff2 +0 -0
  125. package/dashboard/dist/assets/inter-cyrillic-700-normal.woff +0 -0
  126. package/dashboard/dist/assets/inter-cyrillic-700-normal.woff2 +0 -0
  127. package/dashboard/dist/assets/inter-cyrillic-ext-400-normal.woff +0 -0
  128. package/dashboard/dist/assets/inter-cyrillic-ext-400-normal.woff2 +0 -0
  129. package/dashboard/dist/assets/inter-cyrillic-ext-500-normal.woff +0 -0
  130. package/dashboard/dist/assets/inter-cyrillic-ext-500-normal.woff2 +0 -0
  131. package/dashboard/dist/assets/inter-cyrillic-ext-600-normal.woff +0 -0
  132. package/dashboard/dist/assets/inter-cyrillic-ext-600-normal.woff2 +0 -0
  133. package/dashboard/dist/assets/inter-cyrillic-ext-700-normal.woff +0 -0
  134. package/dashboard/dist/assets/inter-cyrillic-ext-700-normal.woff2 +0 -0
  135. package/dashboard/dist/assets/inter-greek-400-normal.woff +0 -0
  136. package/dashboard/dist/assets/inter-greek-400-normal.woff2 +0 -0
  137. package/dashboard/dist/assets/inter-greek-500-normal.woff +0 -0
  138. package/dashboard/dist/assets/inter-greek-500-normal.woff2 +0 -0
  139. package/dashboard/dist/assets/inter-greek-600-normal.woff +0 -0
  140. package/dashboard/dist/assets/inter-greek-600-normal.woff2 +0 -0
  141. package/dashboard/dist/assets/inter-greek-700-normal.woff +0 -0
  142. package/dashboard/dist/assets/inter-greek-700-normal.woff2 +0 -0
  143. package/dashboard/dist/assets/inter-greek-ext-400-normal.woff +0 -0
  144. package/dashboard/dist/assets/inter-greek-ext-400-normal.woff2 +0 -0
  145. package/dashboard/dist/assets/inter-greek-ext-500-normal.woff +0 -0
  146. package/dashboard/dist/assets/inter-greek-ext-500-normal.woff2 +0 -0
  147. package/dashboard/dist/assets/inter-greek-ext-600-normal.woff +0 -0
  148. package/dashboard/dist/assets/inter-greek-ext-600-normal.woff2 +0 -0
  149. package/dashboard/dist/assets/inter-greek-ext-700-normal.woff +0 -0
  150. package/dashboard/dist/assets/inter-greek-ext-700-normal.woff2 +0 -0
  151. package/dashboard/dist/assets/inter-latin-400-normal.woff +0 -0
  152. package/dashboard/dist/assets/inter-latin-400-normal.woff2 +0 -0
  153. package/dashboard/dist/assets/inter-latin-500-normal.woff +0 -0
  154. package/dashboard/dist/assets/inter-latin-500-normal.woff2 +0 -0
  155. package/dashboard/dist/assets/inter-latin-600-normal.woff +0 -0
  156. package/dashboard/dist/assets/inter-latin-600-normal.woff2 +0 -0
  157. package/dashboard/dist/assets/inter-latin-700-normal.woff +0 -0
  158. package/dashboard/dist/assets/inter-latin-700-normal.woff2 +0 -0
  159. package/dashboard/dist/assets/inter-latin-ext-400-normal.woff +0 -0
  160. package/dashboard/dist/assets/inter-latin-ext-400-normal.woff2 +0 -0
  161. package/dashboard/dist/assets/inter-latin-ext-500-normal.woff +0 -0
  162. package/dashboard/dist/assets/inter-latin-ext-500-normal.woff2 +0 -0
  163. package/dashboard/dist/assets/inter-latin-ext-600-normal.woff +0 -0
  164. package/dashboard/dist/assets/inter-latin-ext-600-normal.woff2 +0 -0
  165. package/dashboard/dist/assets/inter-latin-ext-700-normal.woff +0 -0
  166. package/dashboard/dist/assets/inter-latin-ext-700-normal.woff2 +0 -0
  167. package/dashboard/dist/assets/inter-vietnamese-400-normal.woff +0 -0
  168. package/dashboard/dist/assets/inter-vietnamese-400-normal.woff2 +0 -0
  169. package/dashboard/dist/assets/inter-vietnamese-500-normal.woff +0 -0
  170. package/dashboard/dist/assets/inter-vietnamese-500-normal.woff2 +0 -0
  171. package/dashboard/dist/assets/inter-vietnamese-600-normal.woff +0 -0
  172. package/dashboard/dist/assets/inter-vietnamese-600-normal.woff2 +0 -0
  173. package/dashboard/dist/assets/inter-vietnamese-700-normal.woff +0 -0
  174. package/dashboard/dist/assets/inter-vietnamese-700-normal.woff2 +0 -0
  175. package/dashboard/dist/vendor-icons.js +102 -0
  176. package/dashboard/dist/vendor-icons.js.map +1 -0
  177. package/dashboard/dist/vendor-katex.css +1 -0
  178. package/dashboard/dist/vendor-katex.js +258 -0
  179. package/dashboard/dist/vendor-katex.js.map +1 -0
  180. package/dashboard/dist/vendor-markdown.js +36 -0
  181. package/dashboard/dist/vendor-markdown.js.map +1 -0
  182. package/dashboard/dist/vendor-prism.js +15 -0
  183. package/dashboard/dist/vendor-prism.js.map +1 -0
  184. package/dashboard/dist/vendor-react.js +50 -0
  185. package/dashboard/dist/vendor-react.js.map +1 -0
  186. package/dashboard/index.html +4 -3
  187. package/dist/cli/{acp-WFQIC6SO.js → acp-6B25WIFF.js} +48 -49
  188. package/dist/cli/acp-6B25WIFF.js.map +1 -0
  189. package/dist/cli/chat-7WASPB4O.js +50 -0
  190. package/dist/cli/{chunk-QF32ROX2.js → chunk-3KRRTLC5.js} +955 -788
  191. package/dist/cli/chunk-3KRRTLC5.js.map +1 -0
  192. package/dist/cli/{chunk-TEDWJKEI.js → chunk-3RNFYDDM.js} +11 -27
  193. package/dist/cli/chunk-3RNFYDDM.js.map +1 -0
  194. package/dist/cli/{chunk-ZWHSHFDP.js → chunk-6IUMTRFP.js} +35 -7
  195. package/dist/cli/chunk-6IUMTRFP.js.map +1 -0
  196. package/dist/cli/{chunk-GNS7BAT2.js → chunk-7WITYWKN.js} +2 -2
  197. package/dist/cli/{chunk-HIYTRCSW.js → chunk-7YPMTE3U.js} +65 -28
  198. package/dist/cli/chunk-7YPMTE3U.js.map +1 -0
  199. package/dist/cli/{chunk-DFX5ZH5L.js → chunk-AAHB2PFX.js} +2 -2
  200. package/dist/cli/{chunk-PB3MAFEI.js → chunk-AJIZ5KFK.js} +3 -3
  201. package/dist/cli/{chunk-U5XQDCK7.js → chunk-ALCOQP6R.js} +10 -9
  202. package/dist/cli/chunk-ALCOQP6R.js.map +1 -0
  203. package/dist/cli/{chunk-6OWJV3YW.js → chunk-CAGKEGNE.js} +1 -2
  204. package/dist/cli/{chunk-JNTMOX7G.js → chunk-ENFBF6HI.js} +15 -3
  205. package/dist/cli/chunk-ENFBF6HI.js.map +1 -0
  206. package/dist/cli/{chunk-J2IHQGPQ.js → chunk-EZ57UEZQ.js} +2 -2
  207. package/dist/cli/{chunk-QX5TWXRZ.js → chunk-FQSQFCBI.js} +41 -2
  208. package/dist/cli/chunk-FQSQFCBI.js.map +1 -0
  209. package/dist/cli/{chunk-ZAEJWKXB.js → chunk-GMSAB2TC.js} +2 -2
  210. package/dist/cli/{chunk-MQWO32ZD.js → chunk-GPUH2BNM.js} +123 -286
  211. package/dist/cli/chunk-GPUH2BNM.js.map +1 -0
  212. package/dist/cli/{chunk-7AST3QQ3.js → chunk-I4Q3QT4W.js} +2 -2
  213. package/dist/cli/{chunk-O5LIHAMP.js → chunk-I6FBSTTR.js} +3 -3
  214. package/dist/cli/{chunk-AWEULQG6.js → chunk-IBRTU5WO.js} +25 -15
  215. package/dist/cli/{chunk-AWEULQG6.js.map → chunk-IBRTU5WO.js.map} +1 -1
  216. package/dist/cli/{chunk-RRXUIPWG.js → chunk-IK6WWRIX.js} +1 -1
  217. package/dist/cli/chunk-IK6WWRIX.js.map +1 -0
  218. package/dist/cli/{chunk-WMTMMSXU.js → chunk-MXWPAPZW.js} +315 -233
  219. package/dist/cli/chunk-MXWPAPZW.js.map +1 -0
  220. package/dist/cli/{chunk-7JTKBJ2G.js → chunk-NLRC3DWQ.js} +3 -3
  221. package/dist/cli/{chunk-PXBQ6IZ7.js → chunk-OPGWCKKU.js} +2 -2
  222. package/dist/cli/{chunk-23ZPCIPR.js → chunk-OWA42BKS.js} +21 -20
  223. package/dist/cli/chunk-OWA42BKS.js.map +1 -0
  224. package/dist/cli/{chunk-YEF7C4XI.js → chunk-PYIZZAVQ.js} +102 -94
  225. package/dist/cli/chunk-PYIZZAVQ.js.map +1 -0
  226. package/dist/cli/{chunk-EQATK2L2.js → chunk-SVD4UPRQ.js} +4 -3
  227. package/dist/cli/chunk-SVD4UPRQ.js.map +1 -0
  228. package/dist/cli/{chunk-PEMG6CUB.js → chunk-TX652NBA.js} +2 -2
  229. package/dist/cli/{chunk-W46ZMNKO.js → chunk-VVMY4M7J.js} +21 -2
  230. package/dist/cli/chunk-VVMY4M7J.js.map +1 -0
  231. package/dist/cli/{chunk-TAIKVL35.js → chunk-WSBFVOCO.js} +2 -2
  232. package/dist/cli/{chunk-ASOLXV67.js → chunk-X2BQZQEE.js} +3 -3
  233. package/dist/cli/{chunk-E5WCLUIU.js → chunk-XJZWMU5P.js} +2 -2
  234. package/dist/cli/{chunk-MGTBP7GG.js → chunk-XWPZHWC2.js} +20 -7
  235. package/dist/cli/chunk-XWPZHWC2.js.map +1 -0
  236. package/dist/cli/{chunk-JGTX4RRQ.js → chunk-ZAXMJANP.js} +2 -2
  237. package/dist/cli/{code-R4IHI7SR.js → code-TBK2TASK.js} +49 -57
  238. package/dist/cli/code-TBK2TASK.js.map +1 -0
  239. package/dist/cli/{commands-DRHFCYMO.js → commands-NXTKSQTN.js} +4 -4
  240. package/dist/cli/{commit-AG5KB4YP.js → commit-IR5SPP7A.js} +7 -8
  241. package/dist/cli/commit-IR5SPP7A.js.map +1 -0
  242. package/dist/cli/config-XK5WQGTS.js +194 -0
  243. package/dist/cli/{desktop-JGL6GORA.js → desktop-5NTQBADL.js} +200 -113
  244. package/dist/cli/desktop-5NTQBADL.js.map +1 -0
  245. package/dist/cli/{diff-4Z7ETWZO.js → diff-JNYX5BSZ.js} +8 -8
  246. package/dist/cli/{doctor-VA3RHQLB.js → doctor-IKYLUFXX.js} +11 -11
  247. package/dist/cli/{events-VRYXOSKI.js → events-HSC57ONU.js} +12 -8
  248. package/dist/cli/{events-VRYXOSKI.js.map → events-HSC57ONU.js.map} +1 -1
  249. package/dist/cli/index.js +87 -84
  250. package/dist/cli/index.js.map +1 -1
  251. package/dist/cli/{mcp-LZO4HXFA.js → mcp-BDJJWOCD.js} +3 -3
  252. package/dist/cli/{mcp-browse-C3GXVMYZ.js → mcp-browse-NJRZDI6V.js} +8 -8
  253. package/dist/cli/{mcp-inspect-ZMYUNFDS.js → mcp-inspect-Y62NWZQL.js} +7 -6
  254. package/dist/cli/mcp-inspect-Y62NWZQL.js.map +1 -0
  255. package/dist/cli/{prompt-MC3U5KRP.js → prompt-UTOIFUQC.js} +5 -5
  256. package/dist/cli/{prune-sessions-OEPFH4N6.js → prune-sessions-UCUD4XAP.js} +4 -4
  257. package/dist/cli/{replay-4TP7ZUMZ.js → replay-VVIN64MN.js} +10 -19
  258. package/dist/cli/replay-VVIN64MN.js.map +1 -0
  259. package/dist/cli/{run-6MXQYBOE.js → run-76OBDZFB.js} +28 -25
  260. package/dist/cli/run-76OBDZFB.js.map +1 -0
  261. package/dist/cli/{server-Z3IMJNNI.js → server-SZZDKTH2.js} +404 -163
  262. package/dist/cli/server-SZZDKTH2.js.map +1 -0
  263. package/dist/cli/{sessions-NXQ5SAV7.js → sessions-FZTGRCM5.js} +18 -18
  264. package/dist/cli/{setup-LHZELI6I.js → setup-4UNENGOE.js} +14 -40
  265. package/dist/cli/setup-4UNENGOE.js.map +1 -0
  266. package/dist/cli/{stats-SUIJ3QWY.js → stats-F4NDOD7D.js} +6 -6
  267. package/dist/cli/stats-F4NDOD7D.js.map +1 -0
  268. package/dist/cli/version-LUVTWHLL.js +33 -0
  269. package/dist/index.d.ts +325 -299
  270. package/dist/index.js +438 -528
  271. package/dist/index.js.map +1 -1
  272. package/package.json +6 -3
  273. package/scripts/postinstall.mjs +12 -0
  274. package/dist/cli/acp-WFQIC6SO.js.map +0 -1
  275. package/dist/cli/chat-D32JGNVH.js +0 -51
  276. package/dist/cli/chunk-23ZPCIPR.js.map +0 -1
  277. package/dist/cli/chunk-EQATK2L2.js.map +0 -1
  278. package/dist/cli/chunk-HIYTRCSW.js.map +0 -1
  279. package/dist/cli/chunk-JNTMOX7G.js.map +0 -1
  280. package/dist/cli/chunk-LGEKVMMV.js +0 -59
  281. package/dist/cli/chunk-LGEKVMMV.js.map +0 -1
  282. package/dist/cli/chunk-MGTBP7GG.js.map +0 -1
  283. package/dist/cli/chunk-MQWO32ZD.js.map +0 -1
  284. package/dist/cli/chunk-QF32ROX2.js.map +0 -1
  285. package/dist/cli/chunk-QX5TWXRZ.js.map +0 -1
  286. package/dist/cli/chunk-RRXUIPWG.js.map +0 -1
  287. package/dist/cli/chunk-TEDWJKEI.js.map +0 -1
  288. package/dist/cli/chunk-U5XQDCK7.js.map +0 -1
  289. package/dist/cli/chunk-W46ZMNKO.js.map +0 -1
  290. package/dist/cli/chunk-WMTMMSXU.js.map +0 -1
  291. package/dist/cli/chunk-YEF7C4XI.js.map +0 -1
  292. package/dist/cli/chunk-ZWHSHFDP.js.map +0 -1
  293. package/dist/cli/code-R4IHI7SR.js.map +0 -1
  294. package/dist/cli/commit-AG5KB4YP.js.map +0 -1
  295. package/dist/cli/desktop-JGL6GORA.js.map +0 -1
  296. package/dist/cli/mcp-inspect-ZMYUNFDS.js.map +0 -1
  297. package/dist/cli/replay-4TP7ZUMZ.js.map +0 -1
  298. package/dist/cli/run-6MXQYBOE.js.map +0 -1
  299. package/dist/cli/server-Z3IMJNNI.js.map +0 -1
  300. package/dist/cli/setup-LHZELI6I.js.map +0 -1
  301. package/dist/cli/version-BIFONEUB.js +0 -33
  302. /package/dist/cli/{chat-D32JGNVH.js.map → chat-7WASPB4O.js.map} +0 -0
  303. /package/dist/cli/{chunk-GNS7BAT2.js.map → chunk-7WITYWKN.js.map} +0 -0
  304. /package/dist/cli/{chunk-DFX5ZH5L.js.map → chunk-AAHB2PFX.js.map} +0 -0
  305. /package/dist/cli/{chunk-PB3MAFEI.js.map → chunk-AJIZ5KFK.js.map} +0 -0
  306. /package/dist/cli/{chunk-6OWJV3YW.js.map → chunk-CAGKEGNE.js.map} +0 -0
  307. /package/dist/cli/{chunk-J2IHQGPQ.js.map → chunk-EZ57UEZQ.js.map} +0 -0
  308. /package/dist/cli/{chunk-ZAEJWKXB.js.map → chunk-GMSAB2TC.js.map} +0 -0
  309. /package/dist/cli/{chunk-7AST3QQ3.js.map → chunk-I4Q3QT4W.js.map} +0 -0
  310. /package/dist/cli/{chunk-O5LIHAMP.js.map → chunk-I6FBSTTR.js.map} +0 -0
  311. /package/dist/cli/{chunk-7JTKBJ2G.js.map → chunk-NLRC3DWQ.js.map} +0 -0
  312. /package/dist/cli/{chunk-PXBQ6IZ7.js.map → chunk-OPGWCKKU.js.map} +0 -0
  313. /package/dist/cli/{chunk-PEMG6CUB.js.map → chunk-TX652NBA.js.map} +0 -0
  314. /package/dist/cli/{chunk-TAIKVL35.js.map → chunk-WSBFVOCO.js.map} +0 -0
  315. /package/dist/cli/{chunk-ASOLXV67.js.map → chunk-X2BQZQEE.js.map} +0 -0
  316. /package/dist/cli/{chunk-E5WCLUIU.js.map → chunk-XJZWMU5P.js.map} +0 -0
  317. /package/dist/cli/{chunk-JGTX4RRQ.js.map → chunk-ZAXMJANP.js.map} +0 -0
  318. /package/dist/cli/{commands-DRHFCYMO.js.map → commands-NXTKSQTN.js.map} +0 -0
  319. /package/dist/cli/{doctor-VA3RHQLB.js.map → config-XK5WQGTS.js.map} +0 -0
  320. /package/dist/cli/{diff-4Z7ETWZO.js.map → diff-JNYX5BSZ.js.map} +0 -0
  321. /package/dist/cli/{prompt-MC3U5KRP.js.map → doctor-IKYLUFXX.js.map} +0 -0
  322. /package/dist/cli/{mcp-LZO4HXFA.js.map → mcp-BDJJWOCD.js.map} +0 -0
  323. /package/dist/cli/{mcp-browse-C3GXVMYZ.js.map → mcp-browse-NJRZDI6V.js.map} +0 -0
  324. /package/dist/cli/{stats-SUIJ3QWY.js.map → prompt-UTOIFUQC.js.map} +0 -0
  325. /package/dist/cli/{prune-sessions-OEPFH4N6.js.map → prune-sessions-UCUD4XAP.js.map} +0 -0
  326. /package/dist/cli/{sessions-NXQ5SAV7.js.map → sessions-FZTGRCM5.js.map} +0 -0
  327. /package/dist/cli/{version-BIFONEUB.js.map → version-LUVTWHLL.js.map} +0 -0
@@ -1,36 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
3
3
  import {
4
- MemoryStore,
5
- sanitizeMemoryName
6
- } from "./chunk-O5LIHAMP.js";
7
- import {
8
- countTokens,
9
- countTokensBounded,
10
- estimateConversationTokens,
11
- estimateRequestTokens
12
- } from "./chunk-6OWJV3YW.js";
13
- import {
14
- Usage
15
- } from "./chunk-J2IHQGPQ.js";
16
- import {
4
+ COMPACTION_SUMMARY_MARKER,
17
5
  applyEdit,
18
6
  applyMultiEdit,
19
7
  decodeFileBuffer,
20
8
  encodeFile,
21
9
  pauseGate
22
- } from "./chunk-ZWHSHFDP.js";
10
+ } from "./chunk-6IUMTRFP.js";
11
+ import {
12
+ MemoryStore,
13
+ sanitizeMemoryName
14
+ } from "./chunk-I6FBSTTR.js";
23
15
  import {
24
16
  NEGATIVE_CLAIM_RULE,
25
17
  PROJECT_MEMORY_FILES,
26
18
  PROJECT_MEMORY_MAX_CHARS,
27
19
  TUI_FORMATTING_RULES,
28
20
  memoryEnabled
29
- } from "./chunk-JNTMOX7G.js";
21
+ } from "./chunk-ENFBF6HI.js";
22
+ import {
23
+ countTokens,
24
+ countTokensBounded,
25
+ estimateRequestTokens
26
+ } from "./chunk-CAGKEGNE.js";
30
27
  import {
31
28
  formatHookOutcomeMessage,
32
29
  runHooks
33
- } from "./chunk-PB3MAFEI.js";
30
+ } from "./chunk-AJIZ5KFK.js";
34
31
  import {
35
32
  ignoredByLayers,
36
33
  loadGitignoreAt,
@@ -41,17 +38,21 @@ import {
41
38
  archiveSession,
42
39
  loadSessionMessages,
43
40
  loadSessionMeta,
41
+ patchSessionMeta,
44
42
  rewriteSession,
45
43
  timestampSuffix
46
- } from "./chunk-RRXUIPWG.js";
44
+ } from "./chunk-IK6WWRIX.js";
45
+ import {
46
+ Usage
47
+ } from "./chunk-EZ57UEZQ.js";
47
48
  import {
48
49
  DEEPSEEK_CONTEXT_TOKENS,
49
50
  DEFAULT_CONTEXT_TOKENS,
50
51
  SessionStats
51
- } from "./chunk-QX5TWXRZ.js";
52
+ } from "./chunk-FQSQFCBI.js";
52
53
  import {
53
54
  t
54
- } from "./chunk-YEF7C4XI.js";
55
+ } from "./chunk-PYIZZAVQ.js";
55
56
  import {
56
57
  DEFAULT_INDEX_EXCLUDES,
57
58
  ToolRateLimiter,
@@ -66,7 +67,7 @@ import {
66
67
  require_picomatch,
67
68
  webSearchEndpoint,
68
69
  webSearchEngine
69
- } from "./chunk-WMTMMSXU.js";
70
+ } from "./chunk-MXWPAPZW.js";
70
71
  import {
71
72
  __commonJS,
72
73
  __esm,
@@ -6561,6 +6562,9 @@ function plainTextRejectedReason(name, result) {
6561
6562
  if ((name === "edit_file" || name === "write_file") && /rejected this edit/i.test(result)) {
6562
6563
  return "edit-gate";
6563
6564
  }
6565
+ if ((name === "edit_file" || name === "write_file" || name === "multi_edit") && /queued \d+ edits? for review/i.test(result)) {
6566
+ return "edit-gate";
6567
+ }
6564
6568
  if ((name === "edit_file" || name === "multi_edit") && /read_file first/i.test(result)) {
6565
6569
  return "read-before-edit";
6566
6570
  }
@@ -6786,12 +6790,9 @@ var HISTORY_FOLD_AGGRESSIVE_THRESHOLD = 0.78;
6786
6790
  var HISTORY_FOLD_AGGRESSIVE_TAIL_FRACTION = 0.1;
6787
6791
  var HISTORY_FOLD_MIN_SAVINGS_FRACTION = 0.3;
6788
6792
  var FORCE_SUMMARY_THRESHOLD = 0.8;
6789
- var PREFLIGHT_EMERGENCY_THRESHOLD = 0.95;
6790
- var PREFLIGHT_MECHANICAL_TARGET_FRACTION = 0.7;
6791
- var MAX_BODY_BYTES = 7e5;
6792
- var MAX_BODY_BYTES_TARGET = 5e5;
6793
+ var TURN_START_FOLD_THRESHOLD = 0.9;
6793
6794
  var HISTORY_FOLD_SUMMARY_TIMEOUT_MS = 15e3;
6794
- var HISTORY_FOLD_MARKER = "[CONVERSATION HISTORY SUMMARY \u2014 earlier turns folded for context efficiency]\n\n";
6795
+ var HISTORY_FOLD_MARKER = COMPACTION_SUMMARY_MARKER;
6795
6796
  var SKILL_PIN_MEMO_HEADER = "[Active skill memos \u2014 preserved verbatim across the fold:]";
6796
6797
  var SKILL_PIN_REGEX = /<skill-pin name="([^"]+)">\n[\s\S]*?\n<\/skill-pin>/g;
6797
6798
  function buildFoldSummaryInstruction(pinnedSkillNames) {
@@ -6861,28 +6862,13 @@ var ContextManager = class {
6861
6862
  }
6862
6863
  return { kind: "none", ...base };
6863
6864
  }
6864
- /** Local-side preflight before sending a request catches oversized payloads early.
6865
- * Two independent signals trip mechanical truncate: token estimate above the context-window
6866
- * fraction, OR JSON body bytes above the gateway limit (see `MAX_BODY_BYTES`). */
6867
- decidePreflight(messages, toolSpecs, model) {
6865
+ /** Turn-start estimate vs ctxMax caller folds if the ratio crosses
6866
+ * TURN_START_FOLD_THRESHOLD. Replaces the old preflight/mechanical pair. */
6867
+ estimateTurnStart(messages, toolSpecs, model) {
6868
6868
  const ctxMax = DEEPSEEK_CONTEXT_TOKENS[model] ?? DEFAULT_CONTEXT_TOKENS;
6869
6869
  const estimate = estimateRequestTokens(messages, toolSpecs ?? null, true);
6870
- const estimateBytes = Buffer.byteLength(JSON.stringify(messages), "utf8");
6871
- const tokensOver = estimate / ctxMax > PREFLIGHT_EMERGENCY_THRESHOLD;
6872
- const bytesOver = estimateBytes > MAX_BODY_BYTES;
6873
- let trigger = "none";
6874
- if (tokensOver && bytesOver) trigger = "both";
6875
- else if (tokensOver) trigger = "tokens";
6876
- else if (bytesOver) trigger = "bytes";
6877
- return {
6878
- needsAction: tokensOver || bytesOver,
6879
- estimateTokens: estimate,
6880
- estimateBytes,
6881
- ctxMax,
6882
- trigger
6883
- };
6870
+ return { estimateTokens: estimate, ctxMax, ratio: estimate / ctxMax };
6884
6871
  }
6885
- /** Replace older turns with one summary message; keep tail within keepRecentTokens budget. */
6886
6872
  async fold(model, opts) {
6887
6873
  const ctxMax = DEEPSEEK_CONTEXT_TOKENS[model] ?? DEFAULT_CONTEXT_TOKENS;
6888
6874
  const tailBudget = opts?.keepRecentTokens ?? Math.floor(ctxMax * HISTORY_FOLD_TAIL_FRACTION);
@@ -6894,7 +6880,13 @@ var ContextManager = class {
6894
6880
  summaryChars: 0
6895
6881
  };
6896
6882
  if (all.length === 0) return noop;
6897
- const tokenCounts = all.map((m) => countTokensBounded(m.content ?? ""));
6883
+ const tokenCounts = all.map((m) => {
6884
+ let n = countTokensBounded(typeof m.content === "string" ? m.content : "");
6885
+ if (m.role === "assistant" && Array.isArray(m.tool_calls) && m.tool_calls.length > 0) {
6886
+ n += countTokensBounded(JSON.stringify(m.tool_calls));
6887
+ }
6888
+ return n;
6889
+ });
6898
6890
  const totalTokens = tokenCounts.reduce((a, b) => a + b, 0);
6899
6891
  let cumTokens = 0;
6900
6892
  let boundary = all.length;
@@ -6904,6 +6896,7 @@ var ContextManager = class {
6904
6896
  if (all[i].role === "user") boundary = i;
6905
6897
  }
6906
6898
  if (boundary <= 0) return noop;
6899
+ if (opts?.requireTailBoundary && boundary >= all.length) return noop;
6907
6900
  const head = all.slice(0, boundary);
6908
6901
  const tail = all.slice(boundary);
6909
6902
  const headTokens = totalTokens - cumTokens;
@@ -6939,58 +6932,6 @@ ${constraints}` : "";
6939
6932
  summaryChars: summary.content.length
6940
6933
  };
6941
6934
  }
6942
- /** Pure local emergency compaction for preflight: drop oldest log entries and keep a valid tail.
6943
- * Bounded by tokens AND bytes — bytes matter because DeepSeek's gateway 400s on bodies past
6944
- * `MAX_BODY_BYTES` even when the token budget is far from exhausted. */
6945
- mechanicalTruncate(model, opts) {
6946
- const ctxMax = DEEPSEEK_CONTEXT_TOKENS[model] ?? DEFAULT_CONTEXT_TOKENS;
6947
- const targetTokens = opts?.targetTokens ?? Math.floor(ctxMax * PREFLIGHT_MECHANICAL_TARGET_FRACTION);
6948
- const targetBytes = opts?.targetBytes ?? MAX_BODY_BYTES_TARGET;
6949
- const all = this.deps.log.toMessages();
6950
- const noop = {
6951
- folded: false,
6952
- beforeMessages: all.length,
6953
- afterMessages: all.length,
6954
- summaryChars: 0
6955
- };
6956
- if (all.length === 0) return noop;
6957
- const tokenCounts = all.map((m) => estimateConversationTokens([m], true));
6958
- const byteCounts = all.map((m) => Buffer.byteLength(JSON.stringify(m), "utf8"));
6959
- let latestUserBoundary = -1;
6960
- for (let i = all.length - 1; i >= 0; i--) {
6961
- if (all[i].role === "user") {
6962
- latestUserBoundary = i;
6963
- break;
6964
- }
6965
- }
6966
- let cumTokens = 0;
6967
- let cumBytes = 0;
6968
- let boundary = all.length;
6969
- let foundSafeBoundary = false;
6970
- for (let i = all.length - 1; i >= 0; i--) {
6971
- const nextTokens = cumTokens + tokenCounts[i];
6972
- const nextBytes = cumBytes + byteCounts[i];
6973
- if (nextTokens > targetTokens || nextBytes > targetBytes) break;
6974
- cumTokens = nextTokens;
6975
- cumBytes = nextBytes;
6976
- if (all[i].role === "user") {
6977
- boundary = i;
6978
- foundSafeBoundary = true;
6979
- }
6980
- }
6981
- if (boundary <= 0) return noop;
6982
- const replacement = foundSafeBoundary ? all.slice(boundary) : opts?.allowEmpty ? [] : latestUserBoundary >= 0 ? all.slice(latestUserBoundary) : all;
6983
- if (replacement.length === all.length) return noop;
6984
- this.deps.log.compactInPlace(replacement);
6985
- this.persistRewrite(replacement);
6986
- this.deps.onLogRewrite?.();
6987
- return {
6988
- folded: true,
6989
- beforeMessages: all.length,
6990
- afterMessages: replacement.length,
6991
- summaryChars: 0
6992
- };
6993
- }
6994
6935
  /** Drop a trailing in-flight assistant-with-tool_calls before a forced summary. Tail-only mutation; prefix cache safe. */
6995
6936
  trimTrailingToolCalls() {
6996
6937
  const tail = this.deps.log.entries[this.deps.log.entries.length - 1];
@@ -7177,31 +7118,6 @@ function extractDeepSeekErrorMessage(body) {
7177
7118
  return trimmed;
7178
7119
  }
7179
7120
 
7180
- // src/loop/escalation.ts
7181
- var NEEDS_PRO_MARKER_PREFIX = "<<<NEEDS_PRO";
7182
- var NEEDS_PRO_MARKER_RE = /^<<<NEEDS_PRO(?::\s*([^>]*))?>>>/;
7183
- var NEEDS_PRO_BUFFER_CHARS = 256;
7184
- function parseEscalationMarker(content) {
7185
- const m = NEEDS_PRO_MARKER_RE.exec(content.trimStart());
7186
- if (!m) return { matched: false };
7187
- const reason = m[1]?.trim();
7188
- return { matched: true, reason: reason || void 0 };
7189
- }
7190
- function isEscalationRequest(content) {
7191
- return parseEscalationMarker(content).matched;
7192
- }
7193
- function looksLikePartialEscalationMarker(buf) {
7194
- const t2 = buf.trimStart();
7195
- if (t2.length === 0) return true;
7196
- if (t2.length <= NEEDS_PRO_MARKER_PREFIX.length) {
7197
- return NEEDS_PRO_MARKER_PREFIX.startsWith(t2);
7198
- }
7199
- if (!t2.startsWith(NEEDS_PRO_MARKER_PREFIX)) return false;
7200
- const rest = t2.slice(NEEDS_PRO_MARKER_PREFIX.length);
7201
- if (rest[0] !== ">" && rest[0] !== ":") return false;
7202
- return true;
7203
- }
7204
-
7205
7121
  // src/loop/force-summary.ts
7206
7122
  async function* forceSummaryAfterIterLimit(ctx, opts) {
7207
7123
  try {
@@ -7736,7 +7652,6 @@ var ReadTracker = class _ReadTracker {
7736
7652
  };
7737
7653
 
7738
7654
  // src/loop.ts
7739
- var ESCALATION_MODEL = "deepseek-v4-pro";
7740
7655
  var MID_TURN_STEER_WRAPPER = "[Mid-turn steer queued by the user. Do not treat this as a new task; use it only as additional guidance for the current task after completing the current step.]";
7741
7656
  function formatSteerUserMessage(content) {
7742
7657
  return [MID_TURN_STEER_WRAPPER, content].join("\n");
@@ -7756,7 +7671,6 @@ var CacheFirstLoop = class {
7756
7671
  model;
7757
7672
  stream;
7758
7673
  reasoningEffort;
7759
- autoEscalate = true;
7760
7674
  budgetUsd;
7761
7675
  /** One-shot 80% warning latch — cleared by setBudget so a bump re-arms at the new boundary. */
7762
7676
  _budgetWarned = false;
@@ -7772,6 +7686,7 @@ var CacheFirstLoop = class {
7772
7686
  _streamPreference;
7773
7687
  /** Threaded through HTTP + every tool dispatch so Esc cancels in-flight work, not after. */
7774
7688
  _turnAbort = new AbortController();
7689
+ _discardAbortRequested = false;
7775
7690
  /** Authoritative running-id set — UI cards consult this instead of trusting end-event delivery. Insert at dispatch entry, delete in finally. */
7776
7691
  _inflight = new InflightSet();
7777
7692
  /** Typeahead steer messages set by the UI; step() consumes one at each iter boundary. */
@@ -7792,8 +7707,6 @@ var CacheFirstLoop = class {
7792
7707
  get steerConsumed() {
7793
7708
  return this._steerConsumed;
7794
7709
  }
7795
- _proArmedForNextTurn = false;
7796
- _escalateThisTurn = false;
7797
7710
  _turnSelfCorrected = false;
7798
7711
  _foldedThisTurn = false;
7799
7712
  context;
@@ -7809,8 +7722,7 @@ var CacheFirstLoop = class {
7809
7722
  this.prefix = opts.prefix;
7810
7723
  this.tools = opts.tools ?? new ToolRegistry();
7811
7724
  this.model = opts.model ?? "deepseek-v4-flash";
7812
- this.reasoningEffort = opts.reasoningEffort ?? "max";
7813
- if (opts.autoEscalate !== void 0) this.autoEscalate = opts.autoEscalate;
7725
+ this.reasoningEffort = opts.reasoningEffort ?? "high";
7814
7726
  this.budgetUsd = typeof opts.budgetUsd === "number" && opts.budgetUsd > 0 ? opts.budgetUsd : null;
7815
7727
  this.hooks = opts.hooks ?? [];
7816
7728
  this.hookCwd = opts.hookCwd ?? process.cwd();
@@ -7850,6 +7762,7 @@ var CacheFirstLoop = class {
7850
7762
  turnCount: meta.turnCount,
7851
7763
  cacheHitTokens: meta.cacheHitTokens,
7852
7764
  cacheMissTokens: meta.cacheMissTokens,
7765
+ totalCompletionTokens: meta.totalCompletionTokens,
7853
7766
  lastPromptTokens: meta.lastPromptTokens
7854
7767
  });
7855
7768
  }
@@ -7967,35 +7880,15 @@ var CacheFirstLoop = class {
7967
7880
  this.stream = opts.stream;
7968
7881
  }
7969
7882
  if (opts.reasoningEffort !== void 0) this.reasoningEffort = opts.reasoningEffort;
7970
- if (opts.autoEscalate !== void 0) this.autoEscalate = opts.autoEscalate;
7971
7883
  }
7972
7884
  /** `null` disables the cap; any change re-arms the 80% warning. */
7973
7885
  setBudget(usd) {
7974
7886
  this.budgetUsd = typeof usd === "number" && usd > 0 ? usd : null;
7975
7887
  this._budgetWarned = false;
7976
7888
  }
7977
- /** Single-turn upgrade consumed at next step() distinct from `/preset max` (persistent). */
7978
- armProForNextTurn() {
7979
- this._proArmedForNextTurn = true;
7980
- }
7981
- /** Cancel `/pro` arming before the next turn starts. */
7982
- disarmPro() {
7983
- this._proArmedForNextTurn = false;
7984
- }
7985
- /** UI surface — true while `/pro` is queued but hasn't fired yet. */
7986
- get proArmed() {
7987
- return this._proArmedForNextTurn;
7988
- }
7989
- /** UI surface — true while the current turn is running on pro (armed or auto-escalated). */
7990
- get escalatedThisTurn() {
7991
- return this._escalateThisTurn;
7992
- }
7993
- /** UI surface — model id of the call about to run (or running) right now, including escalation. */
7889
+ /** UI surface model id of the call about to run (or running) right now. */
7994
7890
  get currentCallModel() {
7995
- return this.modelForCurrentCall();
7996
- }
7997
- modelForCurrentCall() {
7998
- return this._escalateThisTurn ? ESCALATION_MODEL : this.model;
7891
+ return this.model;
7999
7892
  }
8000
7893
  /** A call counts as mutating when its definition reports `readOnly !== true` and any dynamic `readOnlyCheck` doesn't override that for these args. */
8001
7894
  isMutating(call) {
@@ -8093,9 +7986,24 @@ ${reason}`
8093
7986
  }
8094
7987
  return healed.messages;
8095
7988
  }
8096
- abort() {
7989
+ abort(opts = {}) {
7990
+ if (opts.discardCurrentTurn) this._discardAbortRequested = true;
8097
7991
  this._turnAbort.abort();
8098
7992
  }
7993
+ resetAbortState() {
7994
+ this._turnAbort = new AbortController();
7995
+ this._discardAbortRequested = false;
7996
+ }
7997
+ discardLogFrom(index) {
7998
+ const preserved = this.log.entries.slice(0, index).map((m) => ({ ...m }));
7999
+ this.log.compactInPlace(preserved);
8000
+ if (this.sessionName) {
8001
+ try {
8002
+ rewriteSession(this.sessionName, preserved);
8003
+ } catch {
8004
+ }
8005
+ }
8006
+ }
8099
8007
  /** Drop the last user message + everything after; caller re-sends. Persists to session file. */
8100
8008
  retryLastUser() {
8101
8009
  const entries = this.log.entries;
@@ -8178,38 +8086,54 @@ ${reason}`
8178
8086
  this.scratch.reset();
8179
8087
  this.repair.resetStorm();
8180
8088
  this._turnSelfCorrected = false;
8181
- this._escalateThisTurn = false;
8182
8089
  this._foldedThisTurn = false;
8183
- let armedConsumed = false;
8184
- if (this._proArmedForNextTurn) {
8185
- this._escalateThisTurn = true;
8186
- this._proArmedForNextTurn = false;
8187
- armedConsumed = true;
8188
- }
8189
8090
  const carryAbort = this._turnAbort.signal.aborted;
8190
8091
  this._turnAbort = new AbortController();
8191
8092
  if (carryAbort) this._turnAbort.abort();
8192
8093
  const signal = this._turnAbort.signal;
8193
- if (armedConsumed) {
8194
- yield {
8195
- turn: this._turn,
8196
- role: "warning",
8197
- content: t("loop.proArmed")
8198
- };
8199
- }
8094
+ const turnStartLogIndex = this.log.length;
8200
8095
  this.appendAndPersist({ role: "user", content: userInput });
8201
8096
  const toolSpecs = this.prefix.tools();
8202
8097
  let rateLimitWarningShown = false;
8203
- for (let iter = 0; ; iter++) {
8204
- if (signal.aborted) {
8205
- try {
8098
+ {
8099
+ const turnStart = this.context.estimateTurnStart(
8100
+ this.buildMessages(),
8101
+ this.prefix.toolSpecs,
8102
+ this.model
8103
+ );
8104
+ if (turnStart.ratio > TURN_START_FOLD_THRESHOLD) {
8105
+ yield {
8106
+ turn: this._turn,
8107
+ role: "status",
8108
+ content: t("loop.turnStartFoldStatus")
8109
+ };
8110
+ const result = await this.context.fold(this.model, { requireTailBoundary: true });
8111
+ if (result.folded) {
8112
+ this._foldedThisTurn = true;
8206
8113
  yield {
8207
8114
  turn: this._turn,
8208
8115
  role: "warning",
8209
- content: t("loop.abortedAtIter", { iter })
8116
+ content: t("loop.turnStartFolded", {
8117
+ estimate: turnStart.estimateTokens.toLocaleString(),
8118
+ ctxMax: turnStart.ctxMax.toLocaleString(),
8119
+ pct: Math.round(turnStart.ratio * 100),
8120
+ beforeMessages: result.beforeMessages,
8121
+ afterMessages: result.afterMessages
8122
+ })
8210
8123
  };
8211
- const stoppedMsg = "[aborted by user (Esc) \u2014 no summary produced. Ask again or /retry when ready; prior tool output is still in the log.]";
8212
- this.appendAndPersist(buildSyntheticAssistantMessage(stoppedMsg, this.model));
8124
+ }
8125
+ }
8126
+ }
8127
+ for (let iter = 0; ; iter++) {
8128
+ if (signal.aborted) {
8129
+ try {
8130
+ const discardTurn = this._discardAbortRequested;
8131
+ const stoppedMsg = discardTurn ? "[aborted by user (Esc) \u2014 interrupted turn discarded. Ask again when ready.]" : "[aborted by user (Esc) \u2014 no summary produced. Ask again or /retry when ready; prior tool output is still in the log.]";
8132
+ if (discardTurn) {
8133
+ this.discardLogFrom(turnStartLogIndex);
8134
+ } else {
8135
+ this.appendAndPersist(buildSyntheticAssistantMessage(stoppedMsg, this.model));
8136
+ }
8213
8137
  yield {
8214
8138
  turn: this._turn,
8215
8139
  role: "assistant_final",
@@ -8218,7 +8142,7 @@ ${reason}`
8218
8142
  };
8219
8143
  yield { turn: this._turn, role: "done", content: stoppedMsg };
8220
8144
  } finally {
8221
- this._turnAbort = new AbortController();
8145
+ this.resetAbortState();
8222
8146
  }
8223
8147
  this._steerQueue.length = 0;
8224
8148
  return;
@@ -8245,51 +8169,6 @@ ${reason}`
8245
8169
  content: steer
8246
8170
  };
8247
8171
  }
8248
- {
8249
- const decision2 = this.context.decidePreflight(messages, this.prefix.toolSpecs, this.model);
8250
- if (decision2.needsAction) {
8251
- const { estimateTokens: estimate, estimateBytes, ctxMax } = decision2;
8252
- yield {
8253
- turn: this._turn,
8254
- role: "status",
8255
- content: t("loop.preflightTruncateStatus")
8256
- };
8257
- const result = this.context.mechanicalTruncate(this.model, {
8258
- allowEmpty: false
8259
- });
8260
- if (result.folded) {
8261
- messages = this.buildMessages();
8262
- const after = this.context.decidePreflight(messages, this.prefix.toolSpecs, this.model);
8263
- const stillFull = after.needsAction;
8264
- yield {
8265
- turn: this._turn,
8266
- role: "warning",
8267
- content: t(
8268
- stillFull ? "loop.preflightTruncatedStillFull" : "loop.preflightTruncated",
8269
- {
8270
- estimate: after.estimateTokens.toLocaleString(),
8271
- ctxMax: after.ctxMax.toLocaleString(),
8272
- pct: Math.round(after.estimateTokens / after.ctxMax * 100),
8273
- bodyKB: Math.round(after.estimateBytes / 1024).toLocaleString(),
8274
- beforeMessages: result.beforeMessages,
8275
- afterMessages: result.afterMessages
8276
- }
8277
- )
8278
- };
8279
- } else {
8280
- yield {
8281
- turn: this._turn,
8282
- role: "warning",
8283
- content: t("loop.preflightNoFold", {
8284
- estimate: estimate.toLocaleString(),
8285
- ctxMax: ctxMax.toLocaleString(),
8286
- pct: Math.round(estimate / ctxMax * 100),
8287
- bodyKB: Math.round(estimateBytes / 1024).toLocaleString()
8288
- })
8289
- };
8290
- }
8291
- }
8292
- }
8293
8172
  let assistantContent = "";
8294
8173
  let reasoningContent = "";
8295
8174
  let toolCalls = [];
@@ -8298,10 +8177,7 @@ ${reason}`
8298
8177
  if (this.stream) {
8299
8178
  const callBuf = /* @__PURE__ */ new Map();
8300
8179
  const readyIndices = /* @__PURE__ */ new Set();
8301
- const callModel = this.modelForCurrentCall();
8302
- const bufferForEscalation = this.autoEscalate && callModel !== ESCALATION_MODEL;
8303
- let escalationBuf = "";
8304
- let escalationBufFlushed = false;
8180
+ const callModel = this.model;
8305
8181
  for await (const chunk of this.client.stream({
8306
8182
  model: callModel,
8307
8183
  messages,
@@ -8321,27 +8197,11 @@ ${reason}`
8321
8197
  }
8322
8198
  if (chunk.contentDelta) {
8323
8199
  assistantContent += chunk.contentDelta;
8324
- if (bufferForEscalation && !escalationBufFlushed) {
8325
- escalationBuf += chunk.contentDelta;
8326
- if (isEscalationRequest(escalationBuf)) {
8327
- break;
8328
- }
8329
- if (escalationBuf.length >= NEEDS_PRO_BUFFER_CHARS || !looksLikePartialEscalationMarker(escalationBuf)) {
8330
- escalationBufFlushed = true;
8331
- yield {
8332
- turn: this._turn,
8333
- role: "assistant_delta",
8334
- content: escalationBuf
8335
- };
8336
- escalationBuf = "";
8337
- }
8338
- } else {
8339
- yield {
8340
- turn: this._turn,
8341
- role: "assistant_delta",
8342
- content: chunk.contentDelta
8343
- };
8344
- }
8200
+ yield {
8201
+ turn: this._turn,
8202
+ role: "assistant_delta",
8203
+ content: chunk.contentDelta
8204
+ };
8345
8205
  }
8346
8206
  if (chunk.toolCallDelta) {
8347
8207
  const d = chunk.toolCallDelta;
@@ -8373,17 +8233,8 @@ ${reason}`
8373
8233
  if (chunk.usage) usage = chunk.usage;
8374
8234
  }
8375
8235
  toolCalls = [...callBuf.values()];
8376
- if (bufferForEscalation && !escalationBufFlushed && escalationBuf.length > 0) {
8377
- if (!isEscalationRequest(escalationBuf)) {
8378
- yield {
8379
- turn: this._turn,
8380
- role: "assistant_delta",
8381
- content: escalationBuf
8382
- };
8383
- }
8384
- }
8385
8236
  } else {
8386
- const callModel = this.modelForCurrentCall();
8237
+ const callModel = this.model;
8387
8238
  const resp = await this.client.chat({
8388
8239
  model: callModel,
8389
8240
  messages,
@@ -8399,10 +8250,11 @@ ${reason}`
8399
8250
  }
8400
8251
  } catch (err) {
8401
8252
  if (signal.aborted) {
8253
+ if (this._discardAbortRequested) this.discardLogFrom(turnStartLogIndex);
8402
8254
  try {
8403
8255
  yield { turn: this._turn, role: "done", content: "" };
8404
8256
  } finally {
8405
- this._turnAbort = new AbortController();
8257
+ this.resetAbortState();
8406
8258
  }
8407
8259
  this._steerQueue.length = 0;
8408
8260
  return;
@@ -8417,27 +8269,20 @@ ${reason}`
8417
8269
  this._steerQueue.length = 0;
8418
8270
  return;
8419
8271
  }
8420
- if (this.autoEscalate && this.modelForCurrentCall() !== ESCALATION_MODEL && isEscalationRequest(assistantContent)) {
8421
- const { reason } = parseEscalationMarker(assistantContent);
8422
- this._escalateThisTurn = true;
8423
- const reasonSuffix = reason ? ` \u2014 ${reason}` : "";
8424
- yield {
8425
- turn: this._turn,
8426
- role: "warning",
8427
- content: t("loop.flashEscalation", { model: ESCALATION_MODEL, reasonSuffix })
8428
- };
8429
- assistantContent = "";
8430
- reasoningContent = "";
8431
- toolCalls = [];
8432
- usage = null;
8433
- iter--;
8434
- continue;
8272
+ const turnStats = this.stats.record(this._turn, this.model, usage ?? new Usage());
8273
+ if (this.sessionName) {
8274
+ try {
8275
+ const last = this.stats.turns.length > 0 ? this.stats.turns[this.stats.turns.length - 1] : null;
8276
+ patchSessionMeta(this.sessionName, {
8277
+ totalCostUsd: this.stats.totalCost,
8278
+ cacheHitTokens: this.stats.cumulativeCacheHitTokens,
8279
+ cacheMissTokens: this.stats.cumulativeCacheMissTokens,
8280
+ totalCompletionTokens: this.stats.cumulativeCompletionTokens,
8281
+ lastPromptTokens: last?.usage.promptTokens
8282
+ });
8283
+ } catch {
8284
+ }
8435
8285
  }
8436
- const turnStats = this.stats.record(
8437
- this._turn,
8438
- this.modelForCurrentCall(),
8439
- usage ?? new Usage()
8440
- );
8441
8286
  this.scratch.reasoning = reasoningContent || null;
8442
8287
  const { calls: repairedCalls, report } = this.repair.process(
8443
8288
  toolCalls,
@@ -8445,12 +8290,7 @@ ${reason}`
8445
8290
  assistantContent || null
8446
8291
  );
8447
8292
  this.appendAndPersist(
8448
- buildAssistantMessage(
8449
- assistantContent,
8450
- repairedCalls,
8451
- this.modelForCurrentCall(),
8452
- reasoningContent
8453
- )
8293
+ buildAssistantMessage(assistantContent, repairedCalls, this.model, reasoningContent)
8454
8294
  );
8455
8295
  yield {
8456
8296
  turn: this._turn,
@@ -8463,12 +8303,7 @@ ${reason}`
8463
8303
  if (allSuppressed && !this._turnSelfCorrected) {
8464
8304
  this._turnSelfCorrected = true;
8465
8305
  this.replaceTailAssistantMessage(
8466
- buildAssistantMessage(
8467
- assistantContent,
8468
- toolCalls,
8469
- this.modelForCurrentCall(),
8470
- reasoningContent
8471
- )
8306
+ buildAssistantMessage(assistantContent, toolCalls, this.model, reasoningContent)
8472
8307
  );
8473
8308
  for (const call of toolCalls) {
8474
8309
  this.appendAndPersist({
@@ -8481,6 +8316,7 @@ ${reason}`
8481
8316
  yield {
8482
8317
  turn: this._turn,
8483
8318
  role: "warning",
8319
+ severity: "low",
8484
8320
  content: t("loop.repeatToolCallWarning")
8485
8321
  };
8486
8322
  continue;
@@ -8491,6 +8327,7 @@ ${reason}`
8491
8327
  yield {
8492
8328
  turn: this._turn,
8493
8329
  role: "warning",
8330
+ severity: allSuppressed ? "high" : "low",
8494
8331
  content: `${phrase}${noteTail}`
8495
8332
  };
8496
8333
  }
@@ -12431,4 +12268,4 @@ export {
12431
12268
  he/he.js:
12432
12269
  (*! https://mths.be/he v1.2.0 by @mathias | MIT license *)
12433
12270
  */
12434
- //# sourceMappingURL=chunk-MQWO32ZD.js.map
12271
+ //# sourceMappingURL=chunk-GPUH2BNM.js.map