@kingsoftcloud/ksadk-web 0.2.7

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 (469) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +202 -0
  3. package/README.md +72 -0
  4. package/dist-ksadk/assets/ArtifactsPanel-CMS54WAp.js +1 -0
  5. package/dist-ksadk/assets/CodeBlock-CHZaDmho.js +9 -0
  6. package/dist-ksadk/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  7. package/dist-ksadk/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  8. package/dist-ksadk/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  9. package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  10. package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  11. package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  12. package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  13. package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  14. package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  15. package/dist-ksadk/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  16. package/dist-ksadk/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  17. package/dist-ksadk/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  18. package/dist-ksadk/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  19. package/dist-ksadk/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  20. package/dist-ksadk/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  21. package/dist-ksadk/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  22. package/dist-ksadk/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  23. package/dist-ksadk/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  24. package/dist-ksadk/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  25. package/dist-ksadk/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  26. package/dist-ksadk/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  27. package/dist-ksadk/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  28. package/dist-ksadk/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  29. package/dist-ksadk/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  30. package/dist-ksadk/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  31. package/dist-ksadk/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  32. package/dist-ksadk/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  33. package/dist-ksadk/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  34. package/dist-ksadk/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  35. package/dist-ksadk/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  36. package/dist-ksadk/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  37. package/dist-ksadk/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  38. package/dist-ksadk/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  39. package/dist-ksadk/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  40. package/dist-ksadk/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  41. package/dist-ksadk/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  42. package/dist-ksadk/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  43. package/dist-ksadk/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  44. package/dist-ksadk/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  45. package/dist-ksadk/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  46. package/dist-ksadk/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  47. package/dist-ksadk/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  48. package/dist-ksadk/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  49. package/dist-ksadk/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  50. package/dist-ksadk/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  51. package/dist-ksadk/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  52. package/dist-ksadk/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  53. package/dist-ksadk/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  54. package/dist-ksadk/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  55. package/dist-ksadk/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  56. package/dist-ksadk/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  57. package/dist-ksadk/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  58. package/dist-ksadk/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  59. package/dist-ksadk/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  60. package/dist-ksadk/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  61. package/dist-ksadk/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  62. package/dist-ksadk/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  63. package/dist-ksadk/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  64. package/dist-ksadk/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  65. package/dist-ksadk/assets/MathMessageMarkdown-Cx9VSNQ8.js +8 -0
  66. package/dist-ksadk/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
  67. package/dist-ksadk/assets/MermaidBlock-CV56XpfU.js +303 -0
  68. package/dist-ksadk/assets/NativeTerminalPanel-BrbZygfC.js +1 -0
  69. package/dist-ksadk/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
  70. package/dist-ksadk/assets/addon-fit-DthTIhi3.js +1 -0
  71. package/dist-ksadk/assets/apl-CnwPGSsG.js +1 -0
  72. package/dist-ksadk/assets/arc-D3eSpKQi.js +1 -0
  73. package/dist-ksadk/assets/architecture-7EHR7CIX-aKvaoHF-.js +1 -0
  74. package/dist-ksadk/assets/architectureDiagram-3BPJPVTR-DLe5RfvU.js +36 -0
  75. package/dist-ksadk/assets/asciiarmor-qTkVPQu6.js +1 -0
  76. package/dist-ksadk/assets/asn1-Dr8qZg38.js +1 -0
  77. package/dist-ksadk/assets/asterisk-Bja0s6e1.js +1 -0
  78. package/dist-ksadk/assets/blockDiagram-GPEHLZMM-jrFAO8Bq.js +132 -0
  79. package/dist-ksadk/assets/brainfuck-D5EjA2JK.js +1 -0
  80. package/dist-ksadk/assets/c4Diagram-AAUBKEIU-BFwiG9fe.js +10 -0
  81. package/dist-ksadk/assets/channel-BNEchGhD.js +1 -0
  82. package/dist-ksadk/assets/chunk-2J33WTMH-5Qlobtnj.js +1 -0
  83. package/dist-ksadk/assets/chunk-4BX2VUAB-ou66Tq9f.js +1 -0
  84. package/dist-ksadk/assets/chunk-55IACEB6-CDvMSeFu.js +1 -0
  85. package/dist-ksadk/assets/chunk-727SXJPM-t3ZfYPXH.js +206 -0
  86. package/dist-ksadk/assets/chunk-AQP2D5EJ-CqPYcHtF.js +231 -0
  87. package/dist-ksadk/assets/chunk-FMBD7UC4-C79rRamw.js +15 -0
  88. package/dist-ksadk/assets/chunk-ND2GUHAM-EqP27pbM.js +1 -0
  89. package/dist-ksadk/assets/chunk-QZHKN3VN-DVqYdfgL.js +1 -0
  90. package/dist-ksadk/assets/classDiagram-4FO5ZUOK-DoFK3UDf.js +1 -0
  91. package/dist-ksadk/assets/classDiagram-v2-Q7XG4LA2-DoFK3UDf.js +1 -0
  92. package/dist-ksadk/assets/clike-DHH8Ad3s.js +1 -0
  93. package/dist-ksadk/assets/clojure-BflJGmDX.js +1 -0
  94. package/dist-ksadk/assets/cmake-CyVbuzPu.js +1 -0
  95. package/dist-ksadk/assets/cobol-B_OZ4V-R.js +1 -0
  96. package/dist-ksadk/assets/coffeescript-B2pKbFk8.js +1 -0
  97. package/dist-ksadk/assets/commonlisp-CcllspGY.js +1 -0
  98. package/dist-ksadk/assets/cose-bilkent-S5V4N54A-QMqM6zta.js +1 -0
  99. package/dist-ksadk/assets/crystal-M5-qzICs.js +1 -0
  100. package/dist-ksadk/assets/css-CYpP4FRV.js +1 -0
  101. package/dist-ksadk/assets/cypher-p9eYesGn.js +1 -0
  102. package/dist-ksadk/assets/cytoscape.esm-DelgaX4f.js +321 -0
  103. package/dist-ksadk/assets/d-BhMjBjQP.js +1 -0
  104. package/dist-ksadk/assets/dagre-BM42HDAG-CEakrtKq.js +4 -0
  105. package/dist-ksadk/assets/dagre-Bx709z4p.js +1 -0
  106. package/dist-ksadk/assets/defaultLocale-C8Fc0cco.js +1 -0
  107. package/dist-ksadk/assets/diagram-2AECGRRQ-BxdbhhCX.js +43 -0
  108. package/dist-ksadk/assets/diagram-5GNKFQAL-DBpIlxtZ.js +10 -0
  109. package/dist-ksadk/assets/diagram-KO2AKTUF-D4COO3HT.js +3 -0
  110. package/dist-ksadk/assets/diagram-LMA3HP47-DBSZ6aUz.js +24 -0
  111. package/dist-ksadk/assets/diagram-OG6HWLK6-CxLsy00E.js +24 -0
  112. package/dist-ksadk/assets/diff-ChtP43wD.js +1 -0
  113. package/dist-ksadk/assets/dist-6WsdpRSO.js +1 -0
  114. package/dist-ksadk/assets/dist-BEmeO2N2.js +1 -0
  115. package/dist-ksadk/assets/dist-BOHSAqwD.js +6 -0
  116. package/dist-ksadk/assets/dist-BWf6mC8G.js +1 -0
  117. package/dist-ksadk/assets/dist-BeLlHcxS.js +1 -0
  118. package/dist-ksadk/assets/dist-C4IRfjf3.js +1 -0
  119. package/dist-ksadk/assets/dist-CJmvMGxs.js +1 -0
  120. package/dist-ksadk/assets/dist-CTCQXcX7.js +1 -0
  121. package/dist-ksadk/assets/dist-CXnbkk51.js +2 -0
  122. package/dist-ksadk/assets/dist-Cpz8Cm0v.js +1 -0
  123. package/dist-ksadk/assets/dist-CqCrM4le.js +1 -0
  124. package/dist-ksadk/assets/dist-Cqzpy7oO.js +1 -0
  125. package/dist-ksadk/assets/dist-Cxij5I4C.js +23 -0
  126. package/dist-ksadk/assets/dist-DGm-pByN.js +1 -0
  127. package/dist-ksadk/assets/dist-D_gCRUxt.js +1 -0
  128. package/dist-ksadk/assets/dist-DelwQd2b.js +1 -0
  129. package/dist-ksadk/assets/dist-DqLb8QP7.js +1 -0
  130. package/dist-ksadk/assets/dist-DxJZpRF1.js +1 -0
  131. package/dist-ksadk/assets/dist-JOlStfdO.js +11 -0
  132. package/dist-ksadk/assets/dist-O8eCswTX.js +9 -0
  133. package/dist-ksadk/assets/dist-aq2knWnw.js +1 -0
  134. package/dist-ksadk/assets/dist-z5-DHNYg.js +1 -0
  135. package/dist-ksadk/assets/dockerfile-BLkNEvjs.js +1 -0
  136. package/dist-ksadk/assets/dtd-DTF72YNO.js +1 -0
  137. package/dist-ksadk/assets/dylan-C6jEEEk-.js +1 -0
  138. package/dist-ksadk/assets/ebnf-D4c0_ac3.js +1 -0
  139. package/dist-ksadk/assets/ecl-BSZaIHnp.js +1 -0
  140. package/dist-ksadk/assets/eiffel-BEjRio4Q.js +1 -0
  141. package/dist-ksadk/assets/elm-Cshzl8qu.js +1 -0
  142. package/dist-ksadk/assets/erDiagram-TEJ5UH35-CsjpG1Xb.js +85 -0
  143. package/dist-ksadk/assets/erlang-DaB2Rkuy.js +1 -0
  144. package/dist-ksadk/assets/eventmodeling-FCH6USID-CnNj0sZg.js +1 -0
  145. package/dist-ksadk/assets/factor-D7LVTn2l.js +1 -0
  146. package/dist-ksadk/assets/fcl-ClOhbFR7.js +1 -0
  147. package/dist-ksadk/assets/flowDiagram-I6XJVG4X-DZo3QdjC.js +162 -0
  148. package/dist-ksadk/assets/forth-Cezjo90N.js +1 -0
  149. package/dist-ksadk/assets/fortran-Bt6PBEDR.js +1 -0
  150. package/dist-ksadk/assets/ganttDiagram-6RSMTGT7-BGeXMpCW.js +292 -0
  151. package/dist-ksadk/assets/gas-BHEdbvp9.js +1 -0
  152. package/dist-ksadk/assets/gherkin-oBAE_ms0.js +1 -0
  153. package/dist-ksadk/assets/gitGraph-WXDBUCRP-CYAnXGvP.js +1 -0
  154. package/dist-ksadk/assets/gitGraphDiagram-PVQCEYII-CEgx70IJ.js +106 -0
  155. package/dist-ksadk/assets/graphlib-B8gBHxth.js +1 -0
  156. package/dist-ksadk/assets/groovy-BC3IOsC8.js +1 -0
  157. package/dist-ksadk/assets/haskell-BRsoo5mP.js +1 -0
  158. package/dist-ksadk/assets/haxe-DIz0ZZqd.js +1 -0
  159. package/dist-ksadk/assets/http-CLVgA2GD.js +1 -0
  160. package/dist-ksadk/assets/idl-BUZw3wgd.js +1 -0
  161. package/dist-ksadk/assets/index-CAl5bzeo.css +1 -0
  162. package/dist-ksadk/assets/index-DiS5sSwc.js +165 -0
  163. package/dist-ksadk/assets/info-J43DQDTF-CqhaeVQF.js +1 -0
  164. package/dist-ksadk/assets/infoDiagram-5YYISTIA-D7Mjh6YU.js +2 -0
  165. package/dist-ksadk/assets/init-D6jRqBbL.js +1 -0
  166. package/dist-ksadk/assets/ishikawaDiagram-YF4QCWOH-Dd4tDuCg.js +70 -0
  167. package/dist-ksadk/assets/javascript-9Tg8ixDm.js +1 -0
  168. package/dist-ksadk/assets/journeyDiagram-JHISSGLW-D8l_bo2Y.js +139 -0
  169. package/dist-ksadk/assets/julia-CQfgDRfP.js +1 -0
  170. package/dist-ksadk/assets/kanban-definition-UN3LZRKU-CPTqBqad.js +89 -0
  171. package/dist-ksadk/assets/katex-Cj6SHGk0.js +265 -0
  172. package/dist-ksadk/assets/linear-CtOo2EUV.js +1 -0
  173. package/dist-ksadk/assets/livescript-BXxG0Yva.js +1 -0
  174. package/dist-ksadk/assets/lua-CiA1ziua.js +1 -0
  175. package/dist-ksadk/assets/mathematica-u8YMmbU0.js +1 -0
  176. package/dist-ksadk/assets/mbox-BEMVcqjs.js +1 -0
  177. package/dist-ksadk/assets/mermaid-parser.core-BeKhTKTv.js +161 -0
  178. package/dist-ksadk/assets/mindmap-definition-RKZ34NQL-Cyeeb4Uv.js +96 -0
  179. package/dist-ksadk/assets/mirc-C9zpzAZU.js +1 -0
  180. package/dist-ksadk/assets/mllike-B45xgp2S.js +1 -0
  181. package/dist-ksadk/assets/modelica-CqHI_q-D.js +1 -0
  182. package/dist-ksadk/assets/mscgen-qgSLujhx.js +1 -0
  183. package/dist-ksadk/assets/mumps-CW_TBmxz.js +1 -0
  184. package/dist-ksadk/assets/nginx-BMaDbqW3.js +1 -0
  185. package/dist-ksadk/assets/nsis-AQ_alPln.js +1 -0
  186. package/dist-ksadk/assets/ntriples-d28e9m0E.js +1 -0
  187. package/dist-ksadk/assets/octave-D2Q8cUp1.js +1 -0
  188. package/dist-ksadk/assets/ordinal-hYBb2elL.js +1 -0
  189. package/dist-ksadk/assets/oz-BwTct_5T.js +1 -0
  190. package/dist-ksadk/assets/packet-YPE3B663-D42EsLYz.js +1 -0
  191. package/dist-ksadk/assets/pascal-Dp_KdFgX.js +1 -0
  192. package/dist-ksadk/assets/perl-CdEHsPfU.js +1 -0
  193. package/dist-ksadk/assets/pie-LRSECV5Y-Cgre-V_q.js +1 -0
  194. package/dist-ksadk/assets/pieDiagram-4H26LBE5-CYoruq9a.js +30 -0
  195. package/dist-ksadk/assets/pig-AF4Hwhju.js +1 -0
  196. package/dist-ksadk/assets/powershell-CzG71I4L.js +1 -0
  197. package/dist-ksadk/assets/properties-C357ku5U.js +1 -0
  198. package/dist-ksadk/assets/protobuf-D1ij_kNL.js +1 -0
  199. package/dist-ksadk/assets/pug-Bugr-47h.js +1 -0
  200. package/dist-ksadk/assets/puppet-B4hC2X4m.js +1 -0
  201. package/dist-ksadk/assets/python-BqYw9LYJ.js +1 -0
  202. package/dist-ksadk/assets/q-B9NhS7L_.js +1 -0
  203. package/dist-ksadk/assets/quadrantDiagram-W4KKPZXB-9Iyq0jYH.js +7 -0
  204. package/dist-ksadk/assets/r-DADKenSm.js +1 -0
  205. package/dist-ksadk/assets/radar-GUYGQ44K-_FsLsLP1.js +1 -0
  206. package/dist-ksadk/assets/requirementDiagram-4Y6WPE33-Dm-mLxH0.js +84 -0
  207. package/dist-ksadk/assets/rpm-gpDK5sbt.js +1 -0
  208. package/dist-ksadk/assets/ruby-DsYpTuWg.js +1 -0
  209. package/dist-ksadk/assets/sankeyDiagram-5OEKKPKP-BhpH0-7G.js +40 -0
  210. package/dist-ksadk/assets/sas-C2OyD2Y6.js +1 -0
  211. package/dist-ksadk/assets/scheme-CyDdOh7e.js +1 -0
  212. package/dist-ksadk/assets/sequenceDiagram-3UESZ5HK-DUPsgMMP.js +162 -0
  213. package/dist-ksadk/assets/shell-Du5Qg9im.js +1 -0
  214. package/dist-ksadk/assets/sieve-BAxa3IjF.js +1 -0
  215. package/dist-ksadk/assets/simple-mode-DRpGK0lJ.js +1 -0
  216. package/dist-ksadk/assets/smalltalk-BLp5-jwC.js +1 -0
  217. package/dist-ksadk/assets/solr-BBopId9w.js +1 -0
  218. package/dist-ksadk/assets/sparql-Dz-mlCAC.js +1 -0
  219. package/dist-ksadk/assets/spreadsheet-CTIncYxj.js +1 -0
  220. package/dist-ksadk/assets/sql-DcCJ9jop.js +1 -0
  221. package/dist-ksadk/assets/stateDiagram-AJRCARHV-XbM4cbgm.js +1 -0
  222. package/dist-ksadk/assets/stateDiagram-v2-BHNVJYJU-C1h6ve7b.js +1 -0
  223. package/dist-ksadk/assets/stex-sDrdk2BW.js +1 -0
  224. package/dist-ksadk/assets/stylus-DLLZ8dgm.js +1 -0
  225. package/dist-ksadk/assets/swift-DKB6_1j6.js +1 -0
  226. package/dist-ksadk/assets/tcl-BGfruO1u.js +1 -0
  227. package/dist-ksadk/assets/textile-DWBqthVk.js +1 -0
  228. package/dist-ksadk/assets/tiddlywiki-VlUiK86J.js +1 -0
  229. package/dist-ksadk/assets/tiki-CxVlf5KZ.js +1 -0
  230. package/dist-ksadk/assets/timeline-definition-PNZ67QCA-Tday4gED.js +120 -0
  231. package/dist-ksadk/assets/toml-LvoKBwCs.js +1 -0
  232. package/dist-ksadk/assets/treeView-BLDUP644-5bkV6oHA.js +1 -0
  233. package/dist-ksadk/assets/treemap-LRROVOQU-Ck8wquEY.js +1 -0
  234. package/dist-ksadk/assets/troff-C2dAgh7P.js +1 -0
  235. package/dist-ksadk/assets/ttcn-BePYh-hG.js +1 -0
  236. package/dist-ksadk/assets/ttcn-cfg-CY0aot7Q.js +1 -0
  237. package/dist-ksadk/assets/turtle-BDLWE2cD.js +1 -0
  238. package/dist-ksadk/assets/vb-BthdM_4N.js +1 -0
  239. package/dist-ksadk/assets/vbscript-D9f6rSsU.js +1 -0
  240. package/dist-ksadk/assets/velocity-CqftRsjg.js +1 -0
  241. package/dist-ksadk/assets/vennDiagram-CIIHVFJN-BOg1GA8S.js +34 -0
  242. package/dist-ksadk/assets/verilog-D-x6ne0Z.js +1 -0
  243. package/dist-ksadk/assets/vhdl-CMrOq2q1.js +1 -0
  244. package/dist-ksadk/assets/wardley-L42UT6IY-DPQZ7fpa.js +1 -0
  245. package/dist-ksadk/assets/wardleyDiagram-YWT4CUSO-Cy5RnJwi.js +78 -0
  246. package/dist-ksadk/assets/webidl-D5jiJvOU.js +1 -0
  247. package/dist-ksadk/assets/xquery-fj_R-kMw.js +1 -0
  248. package/dist-ksadk/assets/xterm-DooSxjI5.js +36 -0
  249. package/dist-ksadk/assets/xychartDiagram-2RQKCTM6-DHamdSL0.js +7 -0
  250. package/dist-ksadk/assets/yacas-CXXgtw0p.js +1 -0
  251. package/dist-ksadk/assets/z80-CL1naaMV.js +1 -0
  252. package/dist-ksadk/favicon.svg +1 -0
  253. package/dist-ksadk/icons.svg +24 -0
  254. package/dist-ksadk/index.html +14 -0
  255. package/dist-lib/App.d.ts +12 -0
  256. package/dist-lib/App.d.ts.map +1 -0
  257. package/dist-lib/ArtifactsPanel-DFx9Y2xE.js +57 -0
  258. package/dist-lib/CodeBlock-liGJ8t29.js +94 -0
  259. package/dist-lib/MathMessageMarkdown-hWMdpCVN.js +73 -0
  260. package/dist-lib/MermaidBlock-BFNE1NN8.js +33 -0
  261. package/dist-lib/NativeTerminalPanel-q4ECX8EX.js +391 -0
  262. package/dist-lib/WorkspacePanelContainer-26j9UzyY.js +2813 -0
  263. package/dist-lib/api/bootstrap.d.ts +2 -0
  264. package/dist-lib/api/bootstrap.d.ts.map +1 -0
  265. package/dist-lib/api/checkpoints.d.ts +38 -0
  266. package/dist-lib/api/checkpoints.d.ts.map +1 -0
  267. package/dist-lib/api/client.d.ts +35 -0
  268. package/dist-lib/api/client.d.ts.map +1 -0
  269. package/dist-lib/api/events.d.ts +2 -0
  270. package/dist-lib/api/events.d.ts.map +1 -0
  271. package/dist-lib/api/model.d.ts +2 -0
  272. package/dist-lib/api/model.d.ts.map +1 -0
  273. package/dist-lib/api/run.d.ts +4 -0
  274. package/dist-lib/api/run.d.ts.map +1 -0
  275. package/dist-lib/api/session.d.ts +23 -0
  276. package/dist-lib/api/session.d.ts.map +1 -0
  277. package/dist-lib/api/upload.d.ts +12 -0
  278. package/dist-lib/api/upload.d.ts.map +1 -0
  279. package/dist-lib/api/workspace.d.ts +8 -0
  280. package/dist-lib/api/workspace.d.ts.map +1 -0
  281. package/dist-lib/artifact-BfFsPe5A.js +19 -0
  282. package/dist-lib/capabilities-CiyyeRQ9.js +78 -0
  283. package/dist-lib/capabilities.js +16 -0
  284. package/dist-lib/components/ErrorBoundary.d.ts +17 -0
  285. package/dist-lib/components/ErrorBoundary.d.ts.map +1 -0
  286. package/dist-lib/components/MessageMarkdown.d.ts +5 -0
  287. package/dist-lib/components/MessageMarkdown.d.ts.map +1 -0
  288. package/dist-lib/components/ToastContainer.d.ts +2 -0
  289. package/dist-lib/components/ToastContainer.d.ts.map +1 -0
  290. package/dist-lib/components/artifacts/ArtifactsPanel.d.ts +2 -0
  291. package/dist-lib/components/artifacts/ArtifactsPanel.d.ts.map +1 -0
  292. package/dist-lib/components/chat/AttachmentPreview.d.ts +11 -0
  293. package/dist-lib/components/chat/AttachmentPreview.d.ts.map +1 -0
  294. package/dist-lib/components/chat/ChatComposer.d.ts +26 -0
  295. package/dist-lib/components/chat/ChatComposer.d.ts.map +1 -0
  296. package/dist-lib/components/chat/ChatHeader.d.ts +41 -0
  297. package/dist-lib/components/chat/ChatHeader.d.ts.map +1 -0
  298. package/dist-lib/components/chat/ChatMessageList.d.ts +36 -0
  299. package/dist-lib/components/chat/ChatMessageList.d.ts.map +1 -0
  300. package/dist-lib/components/chat/ChatSidebar.d.ts +14 -0
  301. package/dist-lib/components/chat/ChatSidebar.d.ts.map +1 -0
  302. package/dist-lib/components/chat/ConnectedComposer.d.ts +10 -0
  303. package/dist-lib/components/chat/ConnectedComposer.d.ts.map +1 -0
  304. package/dist-lib/components/chat/ConnectedMessageList.d.ts +27 -0
  305. package/dist-lib/components/chat/ConnectedMessageList.d.ts.map +1 -0
  306. package/dist-lib/components/chat/ConnectedSidebar.d.ts +10 -0
  307. package/dist-lib/components/chat/ConnectedSidebar.d.ts.map +1 -0
  308. package/dist-lib/components/chat/types.d.ts +126 -0
  309. package/dist-lib/components/chat/types.d.ts.map +1 -0
  310. package/dist-lib/components/markdown/CodeBlock.d.ts +8 -0
  311. package/dist-lib/components/markdown/CodeBlock.d.ts.map +1 -0
  312. package/dist-lib/components/markdown/MathMessageMarkdown.d.ts +8 -0
  313. package/dist-lib/components/markdown/MathMessageMarkdown.d.ts.map +1 -0
  314. package/dist-lib/components/markdown/MermaidBlock.d.ts +7 -0
  315. package/dist-lib/components/markdown/MermaidBlock.d.ts.map +1 -0
  316. package/dist-lib/components/native/NativeRuntimeLauncher.d.ts +20 -0
  317. package/dist-lib/components/native/NativeRuntimeLauncher.d.ts.map +1 -0
  318. package/dist-lib/components/native/NativeTerminalPanel.d.ts +15 -0
  319. package/dist-lib/components/native/NativeTerminalPanel.d.ts.map +1 -0
  320. package/dist-lib/components/ui/dialog.d.ts +20 -0
  321. package/dist-lib/components/ui/dialog.d.ts.map +1 -0
  322. package/dist-lib/components/ui/sheet.d.ts +28 -0
  323. package/dist-lib/components/ui/sheet.d.ts.map +1 -0
  324. package/dist-lib/components/workspace/FileEditor.d.ts +12 -0
  325. package/dist-lib/components/workspace/FileEditor.d.ts.map +1 -0
  326. package/dist-lib/components/workspace/FilePreview.d.ts +11 -0
  327. package/dist-lib/components/workspace/FilePreview.d.ts.map +1 -0
  328. package/dist-lib/components/workspace/HtmlPreview.d.ts +13 -0
  329. package/dist-lib/components/workspace/HtmlPreview.d.ts.map +1 -0
  330. package/dist-lib/components/workspace/MarkdownPreview.d.ts +11 -0
  331. package/dist-lib/components/workspace/MarkdownPreview.d.ts.map +1 -0
  332. package/dist-lib/components/workspace/WorkspacePanel.d.ts +15 -0
  333. package/dist-lib/components/workspace/WorkspacePanel.d.ts.map +1 -0
  334. package/dist-lib/components/workspace/WorkspacePanelContainer.d.ts +27 -0
  335. package/dist-lib/components/workspace/WorkspacePanelContainer.d.ts.map +1 -0
  336. package/dist-lib/components.js +99 -0
  337. package/dist-lib/core/api/facade.d.ts +96 -0
  338. package/dist-lib/core/api/facade.d.ts.map +1 -0
  339. package/dist-lib/core/api/types.d.ts +108 -0
  340. package/dist-lib/core/api/types.d.ts.map +1 -0
  341. package/dist-lib/core/capability/registry.d.ts +9 -0
  342. package/dist-lib/core/capability/registry.d.ts.map +1 -0
  343. package/dist-lib/core/capability/types.d.ts +13 -0
  344. package/dist-lib/core/capability/types.d.ts.map +1 -0
  345. package/dist-lib/core/run/dispatcher.d.ts +4 -0
  346. package/dist-lib/core/run/dispatcher.d.ts.map +1 -0
  347. package/dist-lib/core/run/engine.d.ts +53 -0
  348. package/dist-lib/core/run/engine.d.ts.map +1 -0
  349. package/dist-lib/core/run/index.d.ts +4 -0
  350. package/dist-lib/core/run/index.d.ts.map +1 -0
  351. package/dist-lib/core/run/types.d.ts +117 -0
  352. package/dist-lib/core/run/types.d.ts.map +1 -0
  353. package/dist-lib/core/stream/chat-completions-protocol.d.ts +8 -0
  354. package/dist-lib/core/stream/chat-completions-protocol.d.ts.map +1 -0
  355. package/dist-lib/core/stream/index.d.ts +4 -0
  356. package/dist-lib/core/stream/index.d.ts.map +1 -0
  357. package/dist-lib/core/stream/responses-protocol.d.ts +8 -0
  358. package/dist-lib/core/stream/responses-protocol.d.ts.map +1 -0
  359. package/dist-lib/core/stream/types.d.ts +43 -0
  360. package/dist-lib/core/stream/types.d.ts.map +1 -0
  361. package/dist-lib/core/transport/sse-parser.d.ts +7 -0
  362. package/dist-lib/core/transport/sse-parser.d.ts.map +1 -0
  363. package/dist-lib/core/transport/sse-transport.d.ts +22 -0
  364. package/dist-lib/core/transport/sse-transport.d.ts.map +1 -0
  365. package/dist-lib/core/transport/types.d.ts +20 -0
  366. package/dist-lib/core/transport/types.d.ts.map +1 -0
  367. package/dist-lib/favicon.svg +1 -0
  368. package/dist-lib/hooks/useBootstrap.d.ts +6 -0
  369. package/dist-lib/hooks/useBootstrap.d.ts.map +1 -0
  370. package/dist-lib/hooks/useFeedback.d.ts +24 -0
  371. package/dist-lib/hooks/useFeedback.d.ts.map +1 -0
  372. package/dist-lib/hooks/useResponsiveViewport.d.ts +7 -0
  373. package/dist-lib/hooks/useResponsiveViewport.d.ts.map +1 -0
  374. package/dist-lib/hooks/useRunAgent.d.ts +34 -0
  375. package/dist-lib/hooks/useRunAgent.d.ts.map +1 -0
  376. package/dist-lib/hooks/useSessionLifecycle.d.ts +22 -0
  377. package/dist-lib/hooks/useSessionLifecycle.d.ts.map +1 -0
  378. package/dist-lib/icons.svg +24 -0
  379. package/dist-lib/lib/utils.d.ts +3 -0
  380. package/dist-lib/lib/utils.d.ts.map +1 -0
  381. package/dist-lib/public/capabilities.d.ts +5 -0
  382. package/dist-lib/public/capabilities.d.ts.map +1 -0
  383. package/dist-lib/public/components.d.ts +12 -0
  384. package/dist-lib/public/components.d.ts.map +1 -0
  385. package/dist-lib/public/runtime.d.ts +11 -0
  386. package/dist-lib/public/runtime.d.ts.map +1 -0
  387. package/dist-lib/public/styles.d.ts +2 -0
  388. package/dist-lib/public/styles.d.ts.map +1 -0
  389. package/dist-lib/public/types.d.ts +6 -0
  390. package/dist-lib/public/types.d.ts.map +1 -0
  391. package/dist-lib/runtime.js +3464 -0
  392. package/dist-lib/stores/artifact.d.ts +13 -0
  393. package/dist-lib/stores/artifact.d.ts.map +1 -0
  394. package/dist-lib/stores/bootstrap.d.ts +23 -0
  395. package/dist-lib/stores/bootstrap.d.ts.map +1 -0
  396. package/dist-lib/stores/checkpoint.d.ts +48 -0
  397. package/dist-lib/stores/checkpoint.d.ts.map +1 -0
  398. package/dist-lib/stores/message.d.ts +11 -0
  399. package/dist-lib/stores/message.d.ts.map +1 -0
  400. package/dist-lib/stores/model.d.ts +19 -0
  401. package/dist-lib/stores/model.d.ts.map +1 -0
  402. package/dist-lib/stores/session.d.ts +14 -0
  403. package/dist-lib/stores/session.d.ts.map +1 -0
  404. package/dist-lib/stores/streaming.d.ts +49 -0
  405. package/dist-lib/stores/streaming.d.ts.map +1 -0
  406. package/dist-lib/stores/ui.d.ts +55 -0
  407. package/dist-lib/stores/ui.d.ts.map +1 -0
  408. package/dist-lib/styles.css +2 -0
  409. package/dist-lib/styles.js +0 -0
  410. package/dist-lib/types/api.d.ts +2 -0
  411. package/dist-lib/types/api.d.ts.map +1 -0
  412. package/dist-lib/types/bootstrap.d.ts +7 -0
  413. package/dist-lib/types/bootstrap.d.ts.map +1 -0
  414. package/dist-lib/types/capabilities.d.ts +47 -0
  415. package/dist-lib/types/capabilities.d.ts.map +1 -0
  416. package/dist-lib/types/input.d.ts +12 -0
  417. package/dist-lib/types/input.d.ts.map +1 -0
  418. package/dist-lib/types/session-events.d.ts +51 -0
  419. package/dist-lib/types/session-events.d.ts.map +1 -0
  420. package/dist-lib/types.js +0 -0
  421. package/dist-lib/utils/attachment.d.ts +4 -0
  422. package/dist-lib/utils/attachment.d.ts.map +1 -0
  423. package/dist-lib/utils/capabilities.d.ts +5 -0
  424. package/dist-lib/utils/capabilities.d.ts.map +1 -0
  425. package/dist-lib/utils/chunk-load-error.d.ts +2 -0
  426. package/dist-lib/utils/chunk-load-error.d.ts.map +1 -0
  427. package/dist-lib/utils/clipboard.d.ts +9 -0
  428. package/dist-lib/utils/clipboard.d.ts.map +1 -0
  429. package/dist-lib/utils/context.d.ts +23 -0
  430. package/dist-lib/utils/context.d.ts.map +1 -0
  431. package/dist-lib/utils/error.d.ts +2 -0
  432. package/dist-lib/utils/error.d.ts.map +1 -0
  433. package/dist-lib/utils/feedback.d.ts +90 -0
  434. package/dist-lib/utils/feedback.d.ts.map +1 -0
  435. package/dist-lib/utils/layout-constants.d.ts +13 -0
  436. package/dist-lib/utils/layout-constants.d.ts.map +1 -0
  437. package/dist-lib/utils/markdown.d.ts +2 -0
  438. package/dist-lib/utils/markdown.d.ts.map +1 -0
  439. package/dist-lib/utils/mobile-layout.d.ts +19 -0
  440. package/dist-lib/utils/mobile-layout.d.ts.map +1 -0
  441. package/dist-lib/utils/model-options.d.ts +15 -0
  442. package/dist-lib/utils/model-options.d.ts.map +1 -0
  443. package/dist-lib/utils/native-platform.d.ts +20 -0
  444. package/dist-lib/utils/native-platform.d.ts.map +1 -0
  445. package/dist-lib/utils/responses-stream.d.ts +13 -0
  446. package/dist-lib/utils/responses-stream.d.ts.map +1 -0
  447. package/dist-lib/utils/run-state.d.ts +3 -0
  448. package/dist-lib/utils/run-state.d.ts.map +1 -0
  449. package/dist-lib/utils/sandbox.d.ts +19 -0
  450. package/dist-lib/utils/sandbox.d.ts.map +1 -0
  451. package/dist-lib/utils/session-events.d.ts +40 -0
  452. package/dist-lib/utils/session-events.d.ts.map +1 -0
  453. package/dist-lib/utils/session-helpers.d.ts +6 -0
  454. package/dist-lib/utils/session-helpers.d.ts.map +1 -0
  455. package/dist-lib/utils/session-list.d.ts +9 -0
  456. package/dist-lib/utils/session-list.d.ts.map +1 -0
  457. package/dist-lib/utils/session.d.ts +5 -0
  458. package/dist-lib/utils/session.d.ts.map +1 -0
  459. package/dist-lib/utils/stream-control.d.ts +2 -0
  460. package/dist-lib/utils/stream-control.d.ts.map +1 -0
  461. package/dist-lib/utils/stream-parsing.d.ts +8 -0
  462. package/dist-lib/utils/stream-parsing.d.ts.map +1 -0
  463. package/dist-lib/utils/terminal-session.d.ts +10 -0
  464. package/dist-lib/utils/terminal-session.d.ts.map +1 -0
  465. package/dist-lib/utils/tool-display.d.ts +3 -0
  466. package/dist-lib/utils/tool-display.d.ts.map +1 -0
  467. package/dist-lib/utils/workspace.d.ts +52 -0
  468. package/dist-lib/utils/workspace.d.ts.map +1 -0
  469. package/package.json +131 -0
@@ -0,0 +1,3464 @@
1
+ import { i as e, t } from "./capabilities-CiyyeRQ9.js";
2
+ import { A as n, D as r, E as i, O as a, T as o, _ as s, b as c, c as l, d as u, g as d, h as f, k as p, l as m, m as h, n as g, o as _, p as v, r as ee, s as te, t as y, u as b, v as x, w as ne, x as S, y as C } from "./WorkspacePanelContainer-26j9UzyY.js";
3
+ import { t as re } from "./artifact-BfFsPe5A.js";
4
+ import { X as ie } from "lucide-react";
5
+ import { Fragment as ae, jsx as w, jsxs as T } from "react/jsx-runtime";
6
+ import * as E from "react";
7
+ import D, { Suspense as oe, useCallback as O, useEffect as k, useMemo as se, useRef as A, useState as ce } from "react";
8
+ import * as j from "@radix-ui/react-dialog";
9
+ import { create as M } from "zustand";
10
+ //#region src/stores/bootstrap.ts
11
+ var N = M()((t) => ({
12
+ agentId: "default-agent",
13
+ agentName: "Agent",
14
+ agentFramework: "",
15
+ capabilities: e({}),
16
+ apiFormats: ["responses", "chat_completions"],
17
+ accessMode: "Owner",
18
+ workspaceFiles: null,
19
+ setAgentId: (e) => t({ agentId: e }),
20
+ setAgentName: (e) => t({ agentName: e }),
21
+ setAgentFramework: (e) => t({ agentFramework: e }),
22
+ setCapabilities: (e) => t({ capabilities: e }),
23
+ setApiFormats: (e) => t({ apiFormats: e }),
24
+ setAccessMode: (e) => t({ accessMode: e }),
25
+ setWorkspaceFiles: (e) => t({ workspaceFiles: e })
26
+ }));
27
+ //#endregion
28
+ //#region src/stores/model.ts
29
+ function le(e, t) {
30
+ let n = /* @__PURE__ */ new Map();
31
+ for (let t of e) t?.id && n.set(t.id, t);
32
+ for (let e of t) e?.id && n.set(e.id, {
33
+ ...n.get(e.id) || {},
34
+ ...e
35
+ });
36
+ return Array.from(n.values()).sort((e, t) => e.id.localeCompare(t.id));
37
+ }
38
+ var P = M()((e) => ({
39
+ availableModels: [],
40
+ selectedModel: "",
41
+ modelSource: "",
42
+ modelCatalogLoaded: !1,
43
+ thinkingMode: "auto",
44
+ upsertModels: (t) => e((e) => ({ availableModels: le(e.availableModels, t) })),
45
+ setSelectedModel: (t) => e({ selectedModel: t }),
46
+ setModelSource: (t) => e({ modelSource: t }),
47
+ setModelCatalogLoaded: (t) => e({ modelCatalogLoaded: t }),
48
+ setThinkingMode: (t) => e({ thinkingMode: t })
49
+ })), ue = (e) => !!(e && e.status !== "completed" && e.status !== "failed" && e.status !== "stopped"), F = M()((e, t) => ({
50
+ isStreaming: !1,
51
+ currentRunId: "",
52
+ stopRequested: !1,
53
+ activity: null,
54
+ sessionActivities: {},
55
+ setStreaming: (t) => e({ isStreaming: t }),
56
+ setSessionStreaming: (t, n) => e((e) => {
57
+ let r = String(t || "");
58
+ return r ? n ? { isStreaming: !0 } : e.sessionActivities[r] ? { isStreaming: Object.entries(e.sessionActivities).some(([e, t]) => e !== r && ue(t)) } : { isStreaming: Object.values(e.sessionActivities).some(ue) } : { isStreaming: n };
59
+ }),
60
+ isSessionStreaming: (e) => ue(t().getSessionActivity(e)),
61
+ getSessionActivity: (e) => {
62
+ let n = String(e || "");
63
+ return n && t().sessionActivities[n] || null;
64
+ },
65
+ setCurrentRunId: (t) => e({ currentRunId: t }),
66
+ requestStop: () => e({ stopRequested: !0 }),
67
+ beginActivity: (t) => e({
68
+ stopRequested: !1,
69
+ activity: {
70
+ runId: t.runId,
71
+ source: t.source || "run",
72
+ status: t.status || "running",
73
+ phase: t.phase,
74
+ detail: t.detail,
75
+ startedAt: Date.now(),
76
+ lastEventAt: Date.now(),
77
+ eventCount: 0
78
+ }
79
+ }),
80
+ updateActivity: (t) => e((e) => {
81
+ let n = String(t.sessionId || ""), r = n ? e.sessionActivities[n] : e.activity, i = r ? {
82
+ ...r,
83
+ source: t.source || r.source,
84
+ status: t.status || r.status,
85
+ phase: t.phase || r.phase,
86
+ detail: t.detail === void 0 ? r.detail : t.detail,
87
+ lastEventAt: Date.now(),
88
+ eventCount: r.eventCount + (t.countEvent === !1 ? 0 : 1)
89
+ } : {
90
+ source: t.source || "run",
91
+ status: t.status || "running",
92
+ phase: t.phase || "正在运行",
93
+ detail: t.detail,
94
+ startedAt: Date.now(),
95
+ lastEventAt: Date.now(),
96
+ eventCount: t.countEvent === !1 ? 0 : 1
97
+ };
98
+ return n ? {
99
+ isStreaming: i.status !== "completed" && i.status !== "failed" && i.status !== "stopped" ? !0 : Object.entries(e.sessionActivities).some(([e, t]) => e !== n && t.status !== "completed" && t.status !== "failed" && t.status !== "stopped"),
100
+ sessionActivities: {
101
+ ...e.sessionActivities,
102
+ [n]: i
103
+ },
104
+ activity: i
105
+ } : { activity: i };
106
+ }),
107
+ stopActivity: (t) => e((e) => ({
108
+ isStreaming: !1,
109
+ stopRequested: !0,
110
+ activity: e.activity ? {
111
+ ...e.activity,
112
+ status: "stopped",
113
+ phase: "已断开输出流",
114
+ detail: t || "前端已断开本次输出流;后台运行可稍后通过会话记录继续查看。",
115
+ lastEventAt: Date.now()
116
+ } : null
117
+ })),
118
+ stopSessionActivity: (t, n) => e((e) => {
119
+ let r = String(t || "");
120
+ if (!r) return {};
121
+ let i = e.sessionActivities[r];
122
+ if (!i) return {};
123
+ let a = {
124
+ ...i,
125
+ status: "stopped",
126
+ phase: "已断开输出流",
127
+ detail: n || "前端已断开本次输出流;后台运行可稍后通过会话记录继续查看。",
128
+ lastEventAt: Date.now()
129
+ }, o = {
130
+ ...e.sessionActivities,
131
+ [r]: a
132
+ };
133
+ return {
134
+ isStreaming: Object.entries(o).some(([e, t]) => e !== r && t.status !== "completed" && t.status !== "failed" && t.status !== "stopped"),
135
+ activity: a,
136
+ sessionActivities: o
137
+ };
138
+ }),
139
+ clearActivity: () => e({ activity: null }),
140
+ clearSessionActivity: (t) => e((e) => {
141
+ let n = String(t || "");
142
+ if (!n) return {};
143
+ let { [n]: r, ...i } = e.sessionActivities;
144
+ return {
145
+ sessionActivities: i,
146
+ isStreaming: Object.values(i).some((e) => e.status !== "completed" && e.status !== "failed" && e.status !== "stopped"),
147
+ activity: e.activity === r ? null : e.activity
148
+ };
149
+ }),
150
+ resetRun: () => e({
151
+ isStreaming: !1,
152
+ currentRunId: "",
153
+ stopRequested: !1,
154
+ activity: null,
155
+ sessionActivities: {}
156
+ })
157
+ }));
158
+ //#endregion
159
+ //#region src/stores/session.ts
160
+ function de(e) {
161
+ let t = e.UpdatedAt;
162
+ if (typeof t == "string") {
163
+ let e = Date.parse(t);
164
+ return Number.isNaN(e) ? 0 : e;
165
+ }
166
+ return typeof t == "number" ? t : 0;
167
+ }
168
+ function fe(e, t) {
169
+ let n = /* @__PURE__ */ new Map();
170
+ for (let t of e) t?.SessionId && n.set(t.SessionId, t);
171
+ for (let e of t) e?.SessionId && n.set(e.SessionId, {
172
+ ...n.get(e.SessionId) || {},
173
+ ...e
174
+ });
175
+ return Array.from(n.values()).sort((e, t) => de(t) - de(e));
176
+ }
177
+ var I = M()((e) => ({
178
+ sessions: [],
179
+ currentSessionId: null,
180
+ setSessions: (t) => e({ sessions: t }),
181
+ setCurrentSessionId: (t) => e({ currentSessionId: t }),
182
+ upsertSessions: (t) => e((e) => ({ sessions: fe(e.sessions, t) })),
183
+ removeSession: (t) => e((e) => ({ sessions: e.sessions.filter((e) => e.SessionId !== t) }))
184
+ })), pe = .28;
185
+ function me(e, t = 768) {
186
+ return Number(e) <= t;
187
+ }
188
+ function L({ isMobile: e, desktopSidebarOpen: t, mobileSidebarOpen: n }) {
189
+ return {
190
+ desktopSidebarVisible: !e && !!t,
191
+ mobileDrawerVisible: !!(e && n)
192
+ };
193
+ }
194
+ function he({ isMobile: e, viewportHeight: t, desktopMaxHeight: n = 160 }) {
195
+ if (!e) return n;
196
+ let r = Number(t);
197
+ if (!Number.isFinite(r) || r <= 0) return n;
198
+ let i = Math.floor(r * pe);
199
+ return Math.max(120, Math.min(n, i));
200
+ }
201
+ //#endregion
202
+ //#region src/utils/session.js
203
+ var R = "ksadk:webui:selected-session:";
204
+ function z(e) {
205
+ return String(e || "").trim() || "default-agent";
206
+ }
207
+ function B(e) {
208
+ if (e && typeof e.getItem == "function") return e;
209
+ try {
210
+ if (typeof window < "u" && window.localStorage) return window.localStorage;
211
+ } catch {}
212
+ return null;
213
+ }
214
+ function ge(e) {
215
+ return `${R}${z(e)}`;
216
+ }
217
+ function _e(e, t) {
218
+ let n = B(t);
219
+ if (!n) return null;
220
+ try {
221
+ return String(n.getItem(ge(e)) || "").trim() || null;
222
+ } catch {
223
+ return null;
224
+ }
225
+ }
226
+ function ve(e, t, n) {
227
+ let r = B(n);
228
+ if (!r) return;
229
+ let i = ge(e), a = String(t || "").trim();
230
+ try {
231
+ if (a) {
232
+ r.setItem(i, a);
233
+ return;
234
+ }
235
+ r.removeItem(i);
236
+ } catch {}
237
+ }
238
+ function ye(e, t) {
239
+ if (!Array.isArray(e) || e.length === 0) return null;
240
+ let n = String(t || "").trim();
241
+ if (n && e.some((e) => String(e?.SessionId || "").trim() === n)) return n;
242
+ for (let t of e) {
243
+ let e = String(t?.SessionId || "").trim();
244
+ if (e) return e;
245
+ }
246
+ return null;
247
+ }
248
+ //#endregion
249
+ //#region src/utils/native-platform.js
250
+ var be = new Map([["openclaw", "OpenClaw"], ["hermes", "Hermes"]]);
251
+ function xe(e) {
252
+ return String(e || "").trim().toLowerCase();
253
+ }
254
+ function Se(e) {
255
+ return String(e || "").trim().toLowerCase();
256
+ }
257
+ function Ce(e) {
258
+ try {
259
+ return new URL("/", e).toString();
260
+ } catch {
261
+ return "/";
262
+ }
263
+ }
264
+ function we({ capability: e, agentFramework: t, accessMode: n, origin: r }) {
265
+ let i = xe(n);
266
+ if (i !== "owner" && i !== "private" || !e?.Enabled) return null;
267
+ let a = be.get(Se(t)) || "运行时";
268
+ return {
269
+ href: typeof e.Href == "string" && e.Href ? new URL(e.Href, Ce(r)).toString() : Ce(r),
270
+ label: typeof e.Label == "string" && e.Label ? e.Label : "管理平台",
271
+ title: `打开 ${a} 原生管理平台`
272
+ };
273
+ }
274
+ //#endregion
275
+ //#region src/utils/model-options.js
276
+ var Te = new Set([
277
+ "auto",
278
+ "enabled",
279
+ "disabled"
280
+ ]);
281
+ function Ee(e) {
282
+ let t = String(e || "").trim().toLowerCase();
283
+ return Te.has(t) ? t : "auto";
284
+ }
285
+ function De(e) {
286
+ let t = Ee(e);
287
+ if (t === "disabled") return { thinking: { type: "disabled" } };
288
+ if (t === "enabled") return { thinking: { type: "enabled" } };
289
+ }
290
+ //#endregion
291
+ //#region src/hooks/useResponsiveViewport.ts
292
+ function Oe() {
293
+ return typeof window > "u" ? 900 : Math.round(window.visualViewport?.height || window.innerHeight || 900);
294
+ }
295
+ function ke() {
296
+ return typeof window > "u" ? {
297
+ isMobile: !1,
298
+ viewportHeight: 900
299
+ } : {
300
+ isMobile: me(window.innerWidth, 768),
301
+ viewportHeight: Oe()
302
+ };
303
+ }
304
+ function Ae() {
305
+ let [e, t] = ce(() => ke());
306
+ return k(() => {
307
+ if (typeof window > "u") return;
308
+ let e = window.matchMedia("(max-width: 768px)"), n = () => {
309
+ t(ke());
310
+ };
311
+ n();
312
+ let r = typeof e.addEventListener == "function" ? (e.addEventListener("change", n), () => e.removeEventListener("change", n)) : (e.addListener(n), () => e.removeListener(n));
313
+ return window.addEventListener("resize", n), window.visualViewport?.addEventListener("resize", n), () => {
314
+ r(), window.removeEventListener("resize", n), window.visualViewport?.removeEventListener("resize", n);
315
+ };
316
+ }, []), e;
317
+ }
318
+ //#endregion
319
+ //#region src/api/client.ts
320
+ var V = class extends Error {
321
+ code;
322
+ detail;
323
+ constructor(e, t, n) {
324
+ super(t), this.name = "ApiError", this.code = e, this.detail = n;
325
+ }
326
+ }, je = class extends Error {
327
+ constructor(e = "请求已取消") {
328
+ super(e), this.name = "CancelledError";
329
+ }
330
+ }, H = "/agentengine/api/v1";
331
+ async function Me(e) {
332
+ let t;
333
+ try {
334
+ t = await e.json();
335
+ } catch {
336
+ throw new V(-2, "响应格式异常");
337
+ }
338
+ if (!e.ok) throw new V(e.status, t?.Message || `HTTP ${e.status}`, t);
339
+ if (t?.Code !== void 0 && t.Code !== 0) throw new V(t.Code, t.Message || "请求失败", t);
340
+ return t.Data;
341
+ }
342
+ function U(e) {
343
+ throw e instanceof DOMException && e.name === "AbortError" ? new je() : e;
344
+ }
345
+ async function W(e, t, n) {
346
+ let r;
347
+ try {
348
+ r = await fetch(`${H}/${e}`, {
349
+ method: "POST",
350
+ headers: { "Content-Type": "application/json" },
351
+ body: JSON.stringify(t),
352
+ signal: n?.signal
353
+ });
354
+ } catch (e) {
355
+ throw U(e);
356
+ }
357
+ return Me(r);
358
+ }
359
+ async function Ne(e, t, n) {
360
+ let r;
361
+ try {
362
+ r = await fetch(`${H}/${e}`, {
363
+ method: "POST",
364
+ body: t,
365
+ signal: n?.signal
366
+ });
367
+ } catch (e) {
368
+ throw U(e);
369
+ }
370
+ return Me(r);
371
+ }
372
+ async function Pe(e, t, n) {
373
+ let r = new URLSearchParams(t).toString(), i = r ? `${H}/${e}?${r}` : `${H}/${e}`, a;
374
+ try {
375
+ a = await fetch(i, { signal: n?.signal });
376
+ } catch (e) {
377
+ throw U(e);
378
+ }
379
+ if (!a.ok) throw new V(a.status, `资源获取失败: ${a.statusText}`);
380
+ try {
381
+ return n?.asText ? await a.text() : await a.blob();
382
+ } catch {
383
+ throw new V(-3, "文件读取失败");
384
+ }
385
+ }
386
+ async function Fe(e, t, n) {
387
+ let r;
388
+ try {
389
+ r = await fetch(`${H}/${e}`, {
390
+ method: "POST",
391
+ headers: {
392
+ "Content-Type": "application/json",
393
+ Accept: "text/event-stream"
394
+ },
395
+ body: JSON.stringify(t),
396
+ signal: n?.signal
397
+ });
398
+ } catch (e) {
399
+ throw U(e);
400
+ }
401
+ if (!r.ok) throw new V(r.status, `流式请求失败: ${r.statusText}`);
402
+ if (!r.body) throw new V(-1, "无法获取响应流");
403
+ return r.body;
404
+ }
405
+ async function Ie(e, t, n) {
406
+ let r = new URLSearchParams(t).toString(), i = r ? `${H}/${e}?${r}` : `${H}/${e}`, a;
407
+ try {
408
+ a = await fetch(i, {
409
+ headers: { Accept: "text/event-stream" },
410
+ signal: n?.signal
411
+ });
412
+ } catch (e) {
413
+ throw U(e);
414
+ }
415
+ if (!a.ok) throw new V(a.status, `流式订阅失败: ${a.statusText}`);
416
+ if (!a.body) throw new V(-1, "无法获取响应流");
417
+ return a.body;
418
+ }
419
+ //#endregion
420
+ //#region src/api/bootstrap.ts
421
+ async function Le() {
422
+ return W("GetAgentUiBootstrap", {});
423
+ }
424
+ //#endregion
425
+ //#region src/api/model.ts
426
+ async function Re(e) {
427
+ return W("ListAgentModels", { AgentId: e });
428
+ }
429
+ //#endregion
430
+ //#region src/hooks/useBootstrap.ts
431
+ function ze(e) {
432
+ if (!Array.isArray(e)) return ["responses", "chat_completions"];
433
+ let t = e.filter((e) => e === "responses" || e === "chat_completions");
434
+ return t.length > 0 ? t : ["responses", "chat_completions"];
435
+ }
436
+ async function Be(e) {
437
+ try {
438
+ let t = await Re(e), n = t?.Models;
439
+ Array.isArray(n) && P.getState().upsertModels(n);
440
+ let r = t;
441
+ r?.Current && P.getState().setSelectedModel(String(r.Current)), r?.Source && P.getState().setModelSource(String(r.Source));
442
+ } catch (e) {
443
+ console.error("Failed to fetch models:", e);
444
+ } finally {
445
+ P.getState().setModelCatalogLoaded(!0);
446
+ }
447
+ }
448
+ function Ve(n) {
449
+ k(() => {
450
+ (async () => {
451
+ try {
452
+ let r = await Le(), i = r, a = i?.Agent, o = String(a?.AgentId || "default-agent");
453
+ if (N.getState().setAgentId(o), a?.Name) {
454
+ let e = String(a.Name);
455
+ N.getState().setAgentName(e), document.title = e;
456
+ }
457
+ let s = String(a?.Framework || "").trim().toLowerCase();
458
+ N.getState().setAgentFramework(s);
459
+ let c = e(r);
460
+ N.getState().setCapabilities(c), N.getState().setApiFormats(ze(c.HostedChat.ApiFormats)), N.getState().setAccessMode(String(i?.AccessMode || "Owner"));
461
+ let l = c.WorkspaceFiles && i?.WorkspaceFiles ? i.WorkspaceFiles : null;
462
+ N.getState().setWorkspaceFiles(l), l || _.getState().setWorkspacePanelOpen(!1), t(c) && n.fetchSessions(o, _e(o));
463
+ let u = i?.Model;
464
+ u?.id && (P.getState().setSelectedModel(u.id), P.getState().upsertModels([u]), P.getState().setModelSource(u.source || "")), Be(o);
465
+ } catch (t) {
466
+ console.error("Failed to fetch bootstrap:", t), N.getState().setCapabilities(e({ Data: {
467
+ Agent: { Framework: "" },
468
+ ApiFormats: ["responses", "chat_completions"],
469
+ Capabilities: {}
470
+ } })), n.fetchSessions("default-agent", _e("default-agent")), Be("default-agent");
471
+ }
472
+ })();
473
+ }, []);
474
+ }
475
+ //#endregion
476
+ //#region src/stores/message.ts
477
+ var G = M()((e) => ({
478
+ messages: [],
479
+ setMessages: (t) => e({ messages: t }),
480
+ patchMessages: (t) => e((e) => ({ messages: t(e.messages) }))
481
+ }));
482
+ //#endregion
483
+ //#region src/utils/responses-stream.js
484
+ function He() {
485
+ return {
486
+ toolNames: /* @__PURE__ */ new Map(),
487
+ toolArguments: /* @__PURE__ */ new Map(),
488
+ callIds: /* @__PURE__ */ new Map(),
489
+ currentResponseId: ""
490
+ };
491
+ }
492
+ function Ue(e) {
493
+ return typeof e == "string" ? e : Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : e && typeof e == "object" && typeof e.text == "string" ? e.text : "").join("") : e && typeof e == "object" && typeof e.text == "string" ? e.text : "";
494
+ }
495
+ function K(e) {
496
+ return e == null ? "" : typeof e == "string" ? e : typeof e == "object" ? JSON.stringify(e, null, 2) : String(e);
497
+ }
498
+ function q(...e) {
499
+ for (let t of e) {
500
+ let e = Ue(t);
501
+ if (e) return e;
502
+ }
503
+ return "";
504
+ }
505
+ function We(e, t) {
506
+ return String(e?.id || e?.item_id || e?.call_id || t?.item_id || t?.call_id || t?.output_index || "");
507
+ }
508
+ function Ge(e, t, n, r, i) {
509
+ t && (e.toolNames.set(t, r), e.toolArguments.set(t, i));
510
+ let a = String(n?.call_id || "");
511
+ a && (e.callIds.set(a, t || r), e.toolNames.set(a, r), e.toolArguments.set(a, i));
512
+ }
513
+ function Ke(e, t, n, r = "tool") {
514
+ let i = String(n?.call_id || "");
515
+ return String(n?.name || n?.tool_name || (t ? e.toolNames.get(t) : "") || (i ? e.toolNames.get(i) : "") || r);
516
+ }
517
+ function qe(e) {
518
+ if (!e || typeof e != "object") return "";
519
+ let t = Ue(e.content);
520
+ return q(e.output_text, e.text, e.summary_text, e.summary, e.delta, t);
521
+ }
522
+ function Je(e) {
523
+ let t = e?.response && typeof e.response == "object" ? e.response : e, n = q(t?.output_text, t?.text);
524
+ if (n) return n;
525
+ let r = Array.isArray(t?.output) ? t.output : [];
526
+ for (let e of r) {
527
+ let t = qe(e);
528
+ if (t) return t;
529
+ }
530
+ return "";
531
+ }
532
+ function Ye(e) {
533
+ let t = e?.response && typeof e.response == "object" ? e.response : e;
534
+ return Array.isArray(t?.output) ? t.output : [];
535
+ }
536
+ function Xe({ data: e, state: t, status: n }) {
537
+ let r = e?.item || e?.output_item || e || {}, i = String(r.type || "").trim(), a = We(r, e);
538
+ if (i === "function_call") {
539
+ let e = Ke(t, a, r), i = K(r.arguments ?? r.args ?? r.input);
540
+ return Ge(t, a, r, e, i), [{
541
+ type: "tool_upsert",
542
+ name: e,
543
+ args: i,
544
+ status: n
545
+ }];
546
+ }
547
+ if (i === "function_call_output") return [{
548
+ type: "tool_result",
549
+ name: Ke(t, a, r),
550
+ output: K(r.output ?? r.result ?? r.content)
551
+ }];
552
+ if (i === "mcp_approval_request") return [{
553
+ type: "tool_upsert",
554
+ name: String(r.name || "approval"),
555
+ args: K(r.arguments ?? r.args),
556
+ status: "paused",
557
+ approvalRequestId: String(r.id || r.approval_request_id || ""),
558
+ previousResponseId: String(e?.response_id || t.currentResponseId || ""),
559
+ serverLabel: String(r.server_label || "")
560
+ }];
561
+ if (i === "reasoning" || i === "reasoning_summary" || i === "reasoning_summary_text") {
562
+ let e = qe(r);
563
+ return e ? [{
564
+ type: "reasoning_delta",
565
+ text: e
566
+ }] : [];
567
+ }
568
+ if (i === "message") {
569
+ let e = qe(r);
570
+ return e ? [{
571
+ type: n === "completed" ? "text_final" : "text_delta",
572
+ text: e
573
+ }] : [];
574
+ }
575
+ return [];
576
+ }
577
+ function Ze({ eventName: e, data: t, state: n }) {
578
+ let r = String(t?.type || e || "").trim(), i = String(t?.id || t?.response?.id || t?.response_id || "");
579
+ if (i.startsWith("resp_") && (n.currentResponseId = i), r === "response.tool_call") return [{
580
+ type: "tool_upsert",
581
+ name: String(t?.name || t?.tool_name || "tool"),
582
+ args: K(t?.args ?? t?.arguments),
583
+ status: "running"
584
+ }];
585
+ if (r === "response.tool_result" || r === "response.ksadk.tool_result") return [{
586
+ type: "tool_result",
587
+ name: String(t?.name || t?.tool_name || "tool"),
588
+ output: K(t?.output ?? t?.result)
589
+ }];
590
+ if (r === "response.output_item.added") return Xe({
591
+ data: t,
592
+ state: n,
593
+ status: "running"
594
+ });
595
+ if (r === "response.output_item.done") return Xe({
596
+ data: t,
597
+ state: n,
598
+ status: "completed"
599
+ });
600
+ if (r === "response.function_call_arguments.delta") {
601
+ let e = String(t?.item_id || t?.call_id || ""), r = Ke(n, e, t), i = `${n.toolArguments.get(e) || ""}${String(t?.delta || "")}`;
602
+ return n.toolArguments.set(e, i), [{
603
+ type: "tool_upsert",
604
+ name: r,
605
+ args: i,
606
+ status: "running"
607
+ }];
608
+ }
609
+ if (r === "response.function_call_arguments.done") {
610
+ let e = String(t?.item_id || t?.call_id || ""), r = Ke(n, e, t), i = K(t?.arguments ?? n.toolArguments.get(e));
611
+ return n.toolArguments.set(e, i), [{
612
+ type: "tool_upsert",
613
+ name: r,
614
+ args: i,
615
+ status: "running"
616
+ }];
617
+ }
618
+ if (r === "response.reasoning.delta" || r === "response.reasoning_text.delta" || r === "response.reasoning_summary.delta" || r === "response.reasoning_summary_text.delta") {
619
+ let e = q(t?.delta, t?.text);
620
+ return e ? [{
621
+ type: "reasoning_delta",
622
+ text: e
623
+ }] : [];
624
+ }
625
+ if (r === "response.output_text.delta") {
626
+ let e = q(t?.delta, t?.text);
627
+ return e ? [{
628
+ type: "text_delta",
629
+ text: e
630
+ }] : [];
631
+ }
632
+ if (r === "response.output_text.done") {
633
+ let e = q(t?.text, t?.delta);
634
+ return e ? [{
635
+ type: "text_final",
636
+ text: e
637
+ }] : [];
638
+ }
639
+ if (r === "response.content_part.delta") {
640
+ let e = String(t?.part?.type || t?.delta?.type || t?.content_type || ""), n = q(t?.delta?.text, t?.delta, t?.text);
641
+ return n ? e.includes("reasoning") ? [{
642
+ type: "reasoning_delta",
643
+ text: n
644
+ }] : [{
645
+ type: "text_delta",
646
+ text: n
647
+ }] : [];
648
+ }
649
+ if (r === "response.completed") {
650
+ let e = Je(t), r = Ye(t).flatMap((e) => Xe({
651
+ data: {
652
+ ...t,
653
+ item: e
654
+ },
655
+ state: n,
656
+ status: "completed"
657
+ })), i = r.some((e) => e.type === "text_final");
658
+ return [
659
+ ...r,
660
+ ...e && !i ? [{
661
+ type: "text_final",
662
+ text: e
663
+ }] : [],
664
+ {
665
+ type: "terminal",
666
+ status: "completed"
667
+ }
668
+ ];
669
+ }
670
+ if (r === "response.failed") return [{
671
+ type: "failed",
672
+ message: t?.error?.message || "Agent 运行失败"
673
+ }, {
674
+ type: "terminal",
675
+ status: "failed"
676
+ }];
677
+ if (r === "response.incomplete") return [{ type: "incomplete" }, {
678
+ type: "terminal",
679
+ status: "incomplete"
680
+ }];
681
+ if (r === "response.cancelled") return [{
682
+ type: "terminal",
683
+ status: "cancelled"
684
+ }];
685
+ if (r === "response.approval_request" || r === "response.ksadk.approval_request") {
686
+ let e = t?.interrupt_info && typeof t.interrupt_info == "object" ? t.interrupt_info : {};
687
+ return [{
688
+ type: "approval_request",
689
+ approvalRequestId: String(e.approval_request_id || e.id || ""),
690
+ previousResponseId: String(t?.response_id || n.currentResponseId || "")
691
+ }];
692
+ }
693
+ let a = t?.content?.parts?.[0]?.text;
694
+ return a && !t?.actions?.finishReason ? [{
695
+ type: "text_delta",
696
+ text: String(a)
697
+ }] : [];
698
+ }
699
+ //#endregion
700
+ //#region src/core/stream/responses-protocol.ts
701
+ var Qe = class {
702
+ id = "responses";
703
+ createState() {
704
+ return He();
705
+ }
706
+ parse(e, t) {
707
+ return Ze({
708
+ eventName: e.eventName,
709
+ data: e.data,
710
+ state: t
711
+ }).map((e) => {
712
+ if (e.type === "tool_upsert") {
713
+ let { approvalRequestId: t, previousResponseId: n, serverLabel: r, ...i } = e;
714
+ return {
715
+ ...i,
716
+ extra: {
717
+ ...t ? { approvalRequestId: t } : {},
718
+ ...n ? { previousResponseId: n } : {},
719
+ ...r ? { serverLabel: r } : {}
720
+ }
721
+ };
722
+ }
723
+ return e;
724
+ });
725
+ }
726
+ };
727
+ //#endregion
728
+ //#region src/utils/stream-parsing.ts
729
+ function $e(e) {
730
+ return typeof e == "string" ? e : Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : e && typeof e == "object" && "text" in e && typeof e.text == "string" ? e.text : "").join("") : "";
731
+ }
732
+ function et(e) {
733
+ return e && typeof e == "object" ? e : {};
734
+ }
735
+ function tt(e) {
736
+ let t = et(e).choices, n = et(Array.isArray(t) ? t[0] : null), r = et(n.delta), i = et(n.message);
737
+ return {
738
+ content: $e(r.content),
739
+ reasoning: $e(r.reasoning_content),
740
+ finalText: $e(i.content)
741
+ };
742
+ }
743
+ //#endregion
744
+ //#region src/core/stream/chat-completions-protocol.ts
745
+ var nt = class {
746
+ id = "chat_completions";
747
+ createState() {
748
+ return {};
749
+ }
750
+ parse(e) {
751
+ let t = e.data;
752
+ if (typeof t != "object" || !t) return [];
753
+ let n = tt(t), r = [];
754
+ return n.reasoning && r.push({
755
+ type: "reasoning_delta",
756
+ text: n.reasoning
757
+ }), n.content && r.push({
758
+ type: "text_delta",
759
+ text: n.content
760
+ }), n.finalText && r.push({
761
+ type: "text_final",
762
+ text: n.finalText
763
+ }), r;
764
+ }
765
+ }, rt = /* @__PURE__ */ new Map();
766
+ rt.set("responses", new Qe()), rt.set("chat_completions", new nt());
767
+ function it(e) {
768
+ return rt.get(e) || rt.get("responses");
769
+ }
770
+ //#endregion
771
+ //#region src/utils/stream-control.js
772
+ function at(e = []) {
773
+ return e.some((e) => {
774
+ if (e?.type !== "terminal") return !1;
775
+ let t = String(e.status || "").toLowerCase();
776
+ return t === "failed" || t === "incomplete" || t === "cancelled";
777
+ });
778
+ }
779
+ //#endregion
780
+ //#region src/core/transport/sse-parser.ts
781
+ function ot(e) {
782
+ let t = [], n = e.trim();
783
+ if (!n) return t;
784
+ let r = n.split("\n");
785
+ if (r.every((e) => e.startsWith(":"))) return t.push({
786
+ eventName: "__ping__",
787
+ data: null
788
+ }), t;
789
+ let i = "message", a = [];
790
+ for (let e of r) e.startsWith(":") || (e.startsWith("event:") ? i = e.substring(6).trim() || "message" : e.startsWith("data:") && a.push(e.substring(5).trim()));
791
+ let o = a.join("\n").trim();
792
+ if (o === "[DONE]") return t.push({
793
+ eventName: "__done__",
794
+ data: null
795
+ }), t;
796
+ if (!o) return t;
797
+ try {
798
+ let e = JSON.parse(o);
799
+ t.push({
800
+ eventName: i,
801
+ data: e
802
+ });
803
+ } catch {
804
+ t.push({
805
+ eventName: i,
806
+ data: o
807
+ });
808
+ }
809
+ return t;
810
+ }
811
+ function st(e) {
812
+ let t = e.split("\n\n");
813
+ return {
814
+ chunks: t,
815
+ remainder: t.pop() || ""
816
+ };
817
+ }
818
+ //#endregion
819
+ //#region src/utils/error.ts
820
+ function ct(e) {
821
+ return e instanceof Error ? e.message : String(e);
822
+ }
823
+ var lt = 1280;
824
+ function ut(e) {
825
+ let { apiFormats: t } = e;
826
+ return t.includes("responses") ? "responses" : t.includes("chat_completions") ? "chat_completions" : "responses";
827
+ }
828
+ function dt(e, t, n) {
829
+ let r = Math.min(lt, Math.max(420, t - n - 360));
830
+ return Math.min(Math.max(e, 420), r);
831
+ }
832
+ //#endregion
833
+ //#region src/core/run/engine.ts
834
+ var ft = new Set([
835
+ "completed",
836
+ "failed",
837
+ "error",
838
+ "cancelled",
839
+ "canceled",
840
+ "aborted"
841
+ ]);
842
+ function pt(e) {
843
+ if (e.EventType !== "run_status") return null;
844
+ let t = String(e.Content?.status || "").trim().toLowerCase();
845
+ return ft.has(t) ? t : null;
846
+ }
847
+ function mt(e, t) {
848
+ let n = String(t?.type || e || "").trim();
849
+ if (n === "response.created") return {
850
+ phase: "运行已创建",
851
+ status: "running"
852
+ };
853
+ if (n === "response.in_progress") return {
854
+ phase: "等待运行时输出",
855
+ status: "waiting"
856
+ };
857
+ if (n === "response.output_item.added") {
858
+ let e = t?.item;
859
+ return e?.type === "function_call" ? {
860
+ phase: `调用工具 ${e.name || "tool"}`,
861
+ status: "running"
862
+ } : String(e?.type || "").includes("reasoning") ? {
863
+ phase: "生成思考过程",
864
+ status: "running"
865
+ } : {
866
+ phase: "生成回复内容",
867
+ status: "running"
868
+ };
869
+ }
870
+ return n.includes("reasoning") ? {
871
+ phase: "生成思考过程",
872
+ status: "running"
873
+ } : n.includes("function_call") || n === "response.tool_call" ? {
874
+ phase: "调用工具",
875
+ status: "running"
876
+ } : n.includes("tool_result") ? {
877
+ phase: "收到工具结果",
878
+ status: "running"
879
+ } : n.includes("output_text") || n.includes("content_part") ? {
880
+ phase: "生成回复内容",
881
+ status: "running"
882
+ } : n === "response.completed" ? {
883
+ phase: "运行完成",
884
+ status: "completed"
885
+ } : n === "response.failed" ? {
886
+ phase: "运行失败",
887
+ status: "failed"
888
+ } : n === "response.incomplete" ? {
889
+ phase: "运行中断",
890
+ status: "failed"
891
+ } : null;
892
+ }
893
+ function ht() {
894
+ let e = globalThis.crypto;
895
+ return e && typeof e.randomUUID == "function" ? `run_${e.randomUUID()}` : `run_${Date.now()}_${Math.random().toString(16).slice(2)}`;
896
+ }
897
+ var gt = {
898
+ idle: [
899
+ "creating-session",
900
+ "uploading-files",
901
+ "connecting",
902
+ "error"
903
+ ],
904
+ "creating-session": [
905
+ "uploading-files",
906
+ "connecting",
907
+ "error",
908
+ "idle"
909
+ ],
910
+ "uploading-files": [
911
+ "connecting",
912
+ "error",
913
+ "idle"
914
+ ],
915
+ connecting: [
916
+ "streaming",
917
+ "error",
918
+ "idle"
919
+ ],
920
+ streaming: [
921
+ "completing",
922
+ "stopping",
923
+ "recovering",
924
+ "error"
925
+ ],
926
+ stopping: ["cancelled", "idle"],
927
+ completing: ["idle"],
928
+ recovering: [
929
+ "streaming",
930
+ "error",
931
+ "idle"
932
+ ],
933
+ error: ["connecting", "idle"],
934
+ cancelled: ["idle"]
935
+ }, _t = class {
936
+ _stage = "idle";
937
+ listeners = /* @__PURE__ */ new Set();
938
+ abortController = null;
939
+ activeCompactionId = null;
940
+ activeSessionId = null;
941
+ api;
942
+ config = {
943
+ agentId: "default-agent",
944
+ apiFormats: ["responses"],
945
+ agentFramework: "",
946
+ selectedModel: "",
947
+ thinkingMode: "auto"
948
+ };
949
+ constructor(e) {
950
+ this.api = e;
951
+ }
952
+ get stage() {
953
+ return this._stage;
954
+ }
955
+ updateConfig(e) {
956
+ this.config = {
957
+ ...e,
958
+ apiFormats: [...e.apiFormats]
959
+ };
960
+ }
961
+ emit(e) {
962
+ let t = "sessionId" in e ? e : {
963
+ ...e,
964
+ sessionId: this.activeSessionId
965
+ };
966
+ for (let e of this.listeners) e(t);
967
+ }
968
+ setStage(e) {
969
+ let t = gt[this._stage];
970
+ t && !t.includes(e) && console.warn(`[RunEngine] Invalid transition: ${this._stage} → ${e}`), this._stage = e, this.emit({
971
+ type: "stage_changed",
972
+ stage: e
973
+ });
974
+ }
975
+ subscribe(e) {
976
+ return this.listeners.add(e), () => {
977
+ this.listeners.delete(e);
978
+ };
979
+ }
980
+ start(e) {
981
+ if (this._stage !== "idle") return !1;
982
+ this.abortController = new AbortController();
983
+ let t = e.responsesInput !== void 0;
984
+ return (async () => {
985
+ let n = e.sessionId || null;
986
+ try {
987
+ let r = !1;
988
+ n ||= await this.createSession(e), n ||= `default-session-${Date.now()}`, this.activeSessionId = n;
989
+ let i = await this.uploadFiles(e, t);
990
+ this.setStage("connecting"), this.emit({
991
+ type: "activity",
992
+ phase: "连接运行时",
993
+ status: "connecting",
994
+ countEvent: !1
995
+ });
996
+ let a = t ? "responses" : ut({
997
+ agentFramework: this.config.agentFramework,
998
+ apiFormats: this.config.apiFormats
999
+ }), o = it(a), s = o.createState(), c = ht();
1000
+ F.getState().setCurrentRunId(c);
1001
+ let l = this.buildRequestBody(n, a, t, e, i, c), u = await this.api.runAgent(l, { signal: this.abortController?.signal });
1002
+ this.setStage("streaming"), this.emit({
1003
+ type: "activity",
1004
+ phase: "等待首个输出",
1005
+ status: "waiting",
1006
+ countEvent: !1
1007
+ });
1008
+ let d = `msg-${Date.now()}`, f = await this.consumeStream(u, o, s, d);
1009
+ if (!f.receivedData && !e.sessionId && !r && (r = !0, n = await this.createSession(e), n)) {
1010
+ this.activeSessionId = n, l.SessionId = n, this.setStage("connecting"), this.emit({
1011
+ type: "activity",
1012
+ phase: "重建会话后重新连接",
1013
+ status: "connecting",
1014
+ countEvent: !1
1015
+ });
1016
+ let e = await this.api.runAgent(l, { signal: this.abortController?.signal });
1017
+ this.setStage("streaming"), this.emit({
1018
+ type: "activity",
1019
+ phase: "等待首个输出",
1020
+ status: "waiting",
1021
+ countEvent: !1
1022
+ });
1023
+ let t = `msg-${Date.now()}`;
1024
+ f.terminalStatus = (await this.consumeStream(e, o, s, t)).terminalStatus;
1025
+ }
1026
+ if (f.terminalStatus === "cancelled") {
1027
+ this.setStage("stopping"), F.getState().stopActivity("运行时已取消本次执行。"), this.emit({
1028
+ type: "activity",
1029
+ phase: "运行已取消",
1030
+ status: "stopped",
1031
+ countEvent: !1
1032
+ }), this.setStage("cancelled");
1033
+ return;
1034
+ }
1035
+ if (f.terminalStatus && f.terminalStatus !== "completed") {
1036
+ this.setStage("error"), this.emit({
1037
+ type: "activity",
1038
+ phase: f.terminalStatus === "incomplete" ? "运行中断" : "运行失败",
1039
+ status: "failed",
1040
+ countEvent: !1
1041
+ });
1042
+ return;
1043
+ }
1044
+ this.setStage("completing"), this.emit({
1045
+ type: "activity",
1046
+ phase: "运行完成",
1047
+ status: "completed",
1048
+ countEvent: !1
1049
+ }), this.emit({ type: "stream_ended" });
1050
+ } catch (e) {
1051
+ this.failCompaction(), e instanceof DOMException && e.name === "AbortError" || (console.error("[RunEngine] start() error:", e), e instanceof TypeError && e.message.includes("fetch") ? (this.setStage("recovering"), this.emit({
1052
+ type: "activity",
1053
+ phase: "网络异常,尝试重连",
1054
+ status: "waiting",
1055
+ countEvent: !1
1056
+ })) : (this.setStage("error"), this.emit({
1057
+ type: "error",
1058
+ error: e instanceof Error ? e : Error(String(e))
1059
+ })));
1060
+ } finally {
1061
+ F.getState().setStreaming(!1), this.setStage("idle"), this.activeCompactionId = null, this.activeSessionId = null, e.onSettled?.(n);
1062
+ }
1063
+ })(), !0;
1064
+ }
1065
+ stop() {
1066
+ this._stage !== "idle" && (this.setStage("stopping"), this.abortController?.abort(), F.getState().stopActivity(), F.getState().setCurrentRunId(""), this.setStage("cancelled"), this.emit({
1067
+ type: "system_message",
1068
+ content: "已停止接收本次输出;如果运行时不支持取消,后台执行可能仍会继续。"
1069
+ }));
1070
+ }
1071
+ disconnect() {
1072
+ this._stage !== "idle" && (this.abortController?.abort(), F.getState().setStreaming(!1), F.getState().clearActivity(), this._stage = "idle", this.activeCompactionId = null, this.activeSessionId = null);
1073
+ }
1074
+ async cancelRemote(e) {
1075
+ try {
1076
+ await this.api.cancelRun(this.config.agentId, e);
1077
+ } catch (e) {
1078
+ console.warn("[RunEngine] cancelRemote failed:", e);
1079
+ }
1080
+ this.stop();
1081
+ }
1082
+ resumeRun(e) {
1083
+ this.abortController?.abort(), this.abortController = new AbortController(), this.activeSessionId = e.sessionId, F.getState().setCurrentRunId(e.invocationId), this.setStage("connecting"), this.emit({
1084
+ type: "activity",
1085
+ phase: "恢复运行事件订阅",
1086
+ status: "connecting",
1087
+ countEvent: !1
1088
+ }), (async () => {
1089
+ let t = null;
1090
+ try {
1091
+ let n = await this.api.subscribeRunEvents({
1092
+ sessionId: e.sessionId,
1093
+ invocationId: e.invocationId,
1094
+ afterSeqId: e.afterSeqId
1095
+ }, { signal: this.abortController?.signal });
1096
+ this.setStage("streaming"), this.emit({
1097
+ type: "activity",
1098
+ phase: "等待恢复事件",
1099
+ status: "waiting",
1100
+ countEvent: !1
1101
+ });
1102
+ let r = n.getReader(), i = new TextDecoder(), a = "";
1103
+ for (;;) {
1104
+ let { value: e, done: n } = await r.read();
1105
+ if (n) break;
1106
+ a += i.decode(e, { stream: !0 });
1107
+ let { chunks: o, remainder: s } = st(a);
1108
+ a = s;
1109
+ for (let e of o) {
1110
+ if (!e.trim()) continue;
1111
+ let n = ot(e);
1112
+ for (let e of n) e.eventName !== "__done__" && (this.emit({
1113
+ type: "activity",
1114
+ phase: "收到恢复事件",
1115
+ status: "running"
1116
+ }), this.emit({
1117
+ type: "stream_event",
1118
+ event: e.data
1119
+ }), t = pt(e.data) || t);
1120
+ }
1121
+ }
1122
+ this.setStage("completing"), t === "cancelled" || t === "canceled" || t === "aborted" ? this.emit({
1123
+ type: "activity",
1124
+ phase: "后台长任务已取消",
1125
+ status: "stopped",
1126
+ countEvent: !1
1127
+ }) : t === "failed" || t === "error" ? this.emit({
1128
+ type: "activity",
1129
+ phase: "后台长任务失败",
1130
+ status: "failed",
1131
+ countEvent: !1
1132
+ }) : this.emit({
1133
+ type: "activity",
1134
+ phase: "后台长任务已完成",
1135
+ status: "completed",
1136
+ countEvent: !1
1137
+ }), this.emit({ type: "stream_ended" }), e.onSessionReloadNeeded?.();
1138
+ } catch (e) {
1139
+ e instanceof DOMException && e.name === "AbortError" || console.error("Failed to subscribe to run events:", e);
1140
+ } finally {
1141
+ F.getState().setStreaming(!1), F.getState().setCurrentRunId(""), this.setStage("idle"), this.activeSessionId = null;
1142
+ }
1143
+ })();
1144
+ }
1145
+ resumeCheckpoint(e) {
1146
+ if (this._stage !== "idle") return !1;
1147
+ this.abortController = new AbortController(), this.activeSessionId = e.sessionId;
1148
+ let t = ht();
1149
+ return F.getState().setCurrentRunId(t), (async () => {
1150
+ try {
1151
+ if (this.setStage("connecting"), this.emit({
1152
+ type: "activity",
1153
+ source: "restore",
1154
+ phase: "从 checkpoint 恢复运行",
1155
+ status: "connecting",
1156
+ countEvent: !1
1157
+ }), this.config.checkpointResumePreviewEnabled) try {
1158
+ let t = (await this.api.previewCheckpointResume({
1159
+ agentId: this.config.agentId,
1160
+ sessionId: e.sessionId,
1161
+ runId: e.runId,
1162
+ checkpointId: e.checkpointId
1163
+ }, { signal: this.abortController?.signal })).Preview?.Risk?.Level || "unknown";
1164
+ this.emit({
1165
+ type: "activity",
1166
+ source: "restore",
1167
+ phase: `恢复预览完成:${String(t)} 风险`,
1168
+ status: "waiting",
1169
+ countEvent: !1
1170
+ });
1171
+ } catch (e) {
1172
+ console.warn("[RunEngine] checkpoint resume preview failed:", e);
1173
+ }
1174
+ let n = await this.api.resumeRun({
1175
+ agentId: this.config.agentId,
1176
+ sessionId: e.sessionId,
1177
+ runId: e.runId,
1178
+ checkpointId: e.checkpointId,
1179
+ resumeAttemptId: e.resumeAttemptId,
1180
+ invocationId: t
1181
+ }, { signal: this.abortController?.signal }), r = it("responses"), i = r.createState();
1182
+ this.setStage("streaming"), this.emit({
1183
+ type: "activity",
1184
+ source: "restore",
1185
+ phase: "等待恢复输出",
1186
+ status: "waiting",
1187
+ countEvent: !1
1188
+ });
1189
+ let a = `msg-${Date.now()}`, o = await this.consumeStream(n, r, i, a);
1190
+ if (o.terminalStatus && o.terminalStatus !== "completed") {
1191
+ if (o.terminalStatus === "cancelled") {
1192
+ this.setStage("stopping"), F.getState().stopActivity("运行时已取消本次恢复。"), this.emit({
1193
+ type: "activity",
1194
+ source: "restore",
1195
+ phase: "恢复已取消",
1196
+ status: "stopped",
1197
+ countEvent: !1
1198
+ }), this.setStage("cancelled");
1199
+ return;
1200
+ }
1201
+ this.setStage("error"), this.emit({
1202
+ type: "activity",
1203
+ source: "restore",
1204
+ phase: o.terminalStatus === "incomplete" ? "恢复中断" : "恢复失败",
1205
+ status: "failed",
1206
+ countEvent: !1
1207
+ });
1208
+ return;
1209
+ }
1210
+ this.setStage("completing"), this.emit({
1211
+ type: "activity",
1212
+ source: "restore",
1213
+ phase: "恢复完成",
1214
+ status: "completed",
1215
+ countEvent: !1
1216
+ }), this.emit({ type: "stream_ended" });
1217
+ } catch (e) {
1218
+ e instanceof DOMException && e.name === "AbortError" || (console.error("[RunEngine] resumeCheckpoint() error:", e), this.setStage("error"), this.emit({
1219
+ type: "error",
1220
+ error: e instanceof Error ? e : Error(String(e))
1221
+ }));
1222
+ } finally {
1223
+ F.getState().setStreaming(!1), F.getState().setCurrentRunId(""), this.setStage("idle"), this.activeSessionId = null, e.onSettled?.(e.sessionId);
1224
+ }
1225
+ })(), !0;
1226
+ }
1227
+ async createSession(e) {
1228
+ this.setStage("creating-session");
1229
+ try {
1230
+ let t = (await this.api.createSession(this.config.agentId, { signal: this.abortController?.signal })).SessionId || null;
1231
+ return t && (e.onSessionCreated?.(t), e.onSessionUpsert?.(t)), t;
1232
+ } catch (e) {
1233
+ return e instanceof DOMException && e.name === "AbortError" || console.error("Failed to create session:", e), null;
1234
+ }
1235
+ }
1236
+ async uploadFiles(e, t) {
1237
+ let n = [];
1238
+ if (t || e.attachments.length === 0) return n;
1239
+ this.setStage("uploading-files");
1240
+ for (let t of e.attachments) {
1241
+ if (t.size > 100 * 1024 * 1024) {
1242
+ this.emit({
1243
+ type: "system_message",
1244
+ content: `【系统提示】文件 ${t.name} 超过 100MB 限制,未发送。`
1245
+ });
1246
+ continue;
1247
+ }
1248
+ if (t.type.startsWith("image/")) {
1249
+ try {
1250
+ n.push({
1251
+ type: "input_image",
1252
+ image_url: await this.imageFileToDataUrl(t)
1253
+ });
1254
+ } catch (e) {
1255
+ this.emit({
1256
+ type: "system_message",
1257
+ content: `【系统提示】图片 ${t.name} 读取失败,原因: ${ct(e)}`
1258
+ });
1259
+ }
1260
+ continue;
1261
+ }
1262
+ let e = new FormData();
1263
+ e.append("file", t);
1264
+ try {
1265
+ let r = await this.api.uploadFile(e, { signal: this.abortController?.signal });
1266
+ r?.FileData?.fileUri && n.push({
1267
+ type: "input_file",
1268
+ filename: r.FileData.displayName || t.name,
1269
+ file_url: r.FileData.fileUri
1270
+ });
1271
+ } catch (e) {
1272
+ this.emit({
1273
+ type: "system_message",
1274
+ content: `【系统提示】文件 ${t.name} 上传失败,原因: ${ct(e)}`
1275
+ });
1276
+ }
1277
+ }
1278
+ return n;
1279
+ }
1280
+ async imageFileToDataUrl(e) {
1281
+ let t = new Uint8Array(await e.arrayBuffer()), n = "", r = 32768;
1282
+ for (let e = 0; e < t.length; e += r) n += String.fromCharCode(...t.subarray(e, e + r));
1283
+ return `data:${e.type || "application/octet-stream"};base64,${btoa(n)}`;
1284
+ }
1285
+ buildRequestBody(e, t, n, r, i, a) {
1286
+ let o = {
1287
+ AgentId: this.config.agentId,
1288
+ SessionId: e,
1289
+ InvocationId: a,
1290
+ Stream: !0,
1291
+ ApiFormat: t,
1292
+ Model: this.config.selectedModel || void 0,
1293
+ ModelOptions: De(Ee(this.config.thinkingMode))
1294
+ };
1295
+ if (n) o.ResponsesInput = r.responsesInput, o.PreviousResponseId = r.previousResponseId;
1296
+ else {
1297
+ let e = [{
1298
+ type: "input_text",
1299
+ text: r.text.trim()
1300
+ }];
1301
+ e.push(...i), t === "responses" && (o.ResponsesInput = [{
1302
+ role: "user",
1303
+ content: e
1304
+ }]), o.Messages = [{
1305
+ role: "user",
1306
+ content: e
1307
+ }];
1308
+ }
1309
+ return o;
1310
+ }
1311
+ async consumeStream(e, t, n, r) {
1312
+ let i = e.getReader(), a = new TextDecoder(), o = "", s = !1, c = !1;
1313
+ try {
1314
+ for (;;) {
1315
+ let { value: e, done: l } = await i.read();
1316
+ if (l) break;
1317
+ s = !0, c || (c = !0, this.emit({
1318
+ type: "assistant_message_created",
1319
+ messageId: r
1320
+ })), o += a.decode(e, { stream: !0 });
1321
+ let { chunks: u, remainder: d } = st(o);
1322
+ o = d;
1323
+ for (let e of u) {
1324
+ if (!e.trim()) continue;
1325
+ if (this.isCompactionChunk(e)) {
1326
+ let t = ot(e);
1327
+ for (let e of t) e.eventName.startsWith("response.compaction") && this.upsertCompactionMessage({
1328
+ ...e.data,
1329
+ phase: e.eventName.split(".").pop()
1330
+ });
1331
+ continue;
1332
+ }
1333
+ let a = ot(e), o = !1, c;
1334
+ for (let e of a) {
1335
+ if (e.eventName === "__done__") {
1336
+ o = !0;
1337
+ continue;
1338
+ }
1339
+ let i = mt(e.eventName, e.data);
1340
+ i && this.emit({
1341
+ type: "activity",
1342
+ ...i
1343
+ });
1344
+ let a = t.parse(e, n);
1345
+ for (let e of a) this.dispatchAction(e, r);
1346
+ if (at(a)) {
1347
+ o = !0;
1348
+ let e = a.find((e) => e.type === "terminal");
1349
+ c = e && "status" in e ? String(e.status || "") : void 0;
1350
+ }
1351
+ }
1352
+ if (o) return i.cancel().catch(() => {}), {
1353
+ receivedData: s,
1354
+ terminalStatus: c
1355
+ };
1356
+ }
1357
+ }
1358
+ } catch (e) {
1359
+ if (!(e instanceof DOMException && e.name === "AbortError")) throw e;
1360
+ }
1361
+ return { receivedData: s };
1362
+ }
1363
+ isCompactionChunk(e) {
1364
+ return e.includes("response.compaction.start") || e.includes("response.compaction.done") || e.includes("response.compaction.failed");
1365
+ }
1366
+ dispatchAction(e, t) {
1367
+ switch (e.type) {
1368
+ case "text_delta":
1369
+ this.emit({
1370
+ type: "text_delta",
1371
+ messageId: t,
1372
+ delta: e.text
1373
+ });
1374
+ break;
1375
+ case "text_final":
1376
+ this.emit({
1377
+ type: "text_final",
1378
+ messageId: t,
1379
+ text: e.text
1380
+ });
1381
+ break;
1382
+ case "reasoning_delta":
1383
+ this.emit({
1384
+ type: "reasoning_delta",
1385
+ messageId: t,
1386
+ delta: e.text
1387
+ });
1388
+ break;
1389
+ case "tool_upsert":
1390
+ this.emit({
1391
+ type: "tool_upsert",
1392
+ messageId: t,
1393
+ name: e.name,
1394
+ args: e.args,
1395
+ status: e.status,
1396
+ extra: e.extra
1397
+ });
1398
+ break;
1399
+ case "tool_result":
1400
+ this.emit({
1401
+ type: "tool_result",
1402
+ messageId: t,
1403
+ name: e.name,
1404
+ output: e.output
1405
+ });
1406
+ break;
1407
+ case "approval_request":
1408
+ this.emit({
1409
+ type: "system_message",
1410
+ content: "本次运行需要人工审批后才能继续。"
1411
+ });
1412
+ break;
1413
+ case "incomplete":
1414
+ this.emit({
1415
+ type: "system_message",
1416
+ content: "本次运行已中断,需要人工确认后继续。"
1417
+ });
1418
+ break;
1419
+ case "failed":
1420
+ this.emit({
1421
+ type: "text_final",
1422
+ messageId: t,
1423
+ text: `生成失败:${e.message}`
1424
+ });
1425
+ break;
1426
+ case "terminal":
1427
+ this.emit({
1428
+ type: "terminal",
1429
+ status: e.status
1430
+ });
1431
+ break;
1432
+ case "compaction":
1433
+ this.emit({
1434
+ type: "compaction",
1435
+ phase: e.phase,
1436
+ trigger: e.trigger,
1437
+ compactedUntilSeqId: e.compactedUntilSeqId
1438
+ });
1439
+ break;
1440
+ }
1441
+ }
1442
+ upsertCompactionMessage(e) {
1443
+ let t = typeof e.eventName == "string" ? e.eventName.split(".").pop() : void 0, n = String(e.phase || t || "start");
1444
+ this.emit({
1445
+ type: "compaction",
1446
+ phase: n,
1447
+ trigger: e.trigger ? String(e.trigger) : void 0,
1448
+ compactedUntilSeqId: e.compacted_until_seq_id ? Number(e.compacted_until_seq_id) : void 0
1449
+ }), n !== "start" && (this.activeCompactionId = null);
1450
+ }
1451
+ failCompaction() {
1452
+ this.activeCompactionId &&= (this.emit({
1453
+ type: "compaction",
1454
+ phase: "failed"
1455
+ }), null);
1456
+ }
1457
+ }, vt = [], yt = [];
1458
+ function J(e) {
1459
+ return typeof e == "string" ? e.trim() : "";
1460
+ }
1461
+ function bt(e) {
1462
+ let t = typeof e == "number" ? e : Number(e);
1463
+ return Number.isFinite(t) ? t : void 0;
1464
+ }
1465
+ function xt(e) {
1466
+ return typeof e == "string" || typeof e == "number" ? e : void 0;
1467
+ }
1468
+ function Y(e) {
1469
+ return e && typeof e == "object" && !Array.isArray(e) ? e : void 0;
1470
+ }
1471
+ function St(e) {
1472
+ return e !== null;
1473
+ }
1474
+ function Ct(e) {
1475
+ return e !== null;
1476
+ }
1477
+ function wt(e) {
1478
+ return [...e].sort((e, t) => {
1479
+ let n = t.seqId ?? -1, r = e.seqId ?? -1;
1480
+ return n === r ? (Date.parse(String(t.timestamp || "")) || 0) - (Date.parse(String(e.timestamp || "")) || 0) : n - r;
1481
+ });
1482
+ }
1483
+ function Tt(e) {
1484
+ return [...e].sort((e, t) => {
1485
+ let n = t.seqId ?? -1, r = e.seqId ?? -1;
1486
+ return n === r ? (Date.parse(String(t.timestamp || "")) || 0) - (Date.parse(String(e.timestamp || "")) || 0) : n - r;
1487
+ });
1488
+ }
1489
+ function Et(e) {
1490
+ return wt(e)[0]?.runId || "";
1491
+ }
1492
+ function Dt(e) {
1493
+ let t = Et(e);
1494
+ return t ? e.filter((e) => e.runId === t) : [];
1495
+ }
1496
+ function Ot(e) {
1497
+ let t = Y(e);
1498
+ if (!t) return null;
1499
+ let n = Y(t.Metadata ?? t.metadata), r = Y(t.Content ?? t.content), i = J(t.CheckpointId ?? t.checkpointId ?? t.checkpoint_id ?? n?.checkpoint_id ?? n?.checkpointId ?? r?.checkpoint_id ?? r?.checkpointId), a = J(t.RunId ?? t.runId ?? t.run_id ?? n?.run_id ?? n?.runId ?? r?.run_id ?? r?.runId);
1500
+ return !i || !a ? null : {
1501
+ checkpointId: i,
1502
+ runId: a,
1503
+ sessionId: J(t.SessionId ?? t.sessionId ?? t.session_id) || void 0,
1504
+ invocationId: J(t.InvocationId ?? t.invocationId ?? t.invocation_id) || void 0,
1505
+ seqId: bt(t.SeqId ?? t.seqId ?? t.seq_id),
1506
+ timestamp: xt(t.Timestamp ?? t.timestamp ?? t.CreatedAt ?? t.createdAt),
1507
+ framework: J(t.Framework ?? t.framework ?? n?.framework ?? r?.framework) || void 0,
1508
+ frameworkRef: Y(t.FrameworkRef ?? t.frameworkRef ?? t.framework_ref ?? n?.framework_ref ?? n?.frameworkRef),
1509
+ phase: J(t.Phase ?? t.phase ?? n?.phase ?? r?.phase) || void 0,
1510
+ stage: J(t.Stage ?? t.stage ?? n?.stage ?? n?.title) || void 0,
1511
+ summary: J(t.Summary ?? t.summary ?? n?.summary ?? n?.description) || void 0,
1512
+ nextAction: J(t.NextAction ?? t.nextAction ?? t.next_action ?? n?.nextAction ?? n?.next_action) || void 0,
1513
+ status: J(t.Status ?? t.status ?? n?.status ?? r?.status) || void 0,
1514
+ metadata: n
1515
+ };
1516
+ }
1517
+ function kt(e) {
1518
+ let t = Y(e);
1519
+ if (!t) return null;
1520
+ let n = J(t.ReceiptId ?? t.receiptId ?? t.receipt_id), r = J(t.IdempotencyKey ?? t.idempotencyKey ?? t.idempotency_key), i = J(t.ToolName ?? t.toolName ?? t.tool_name);
1521
+ return !n || !r || !i ? null : {
1522
+ receiptId: n,
1523
+ idempotencyKey: r,
1524
+ toolName: i,
1525
+ toolCallId: J(t.ToolCallId ?? t.toolCallId ?? t.tool_call_id) || void 0,
1526
+ runId: J(t.RunId ?? t.runId ?? t.run_id) || void 0,
1527
+ checkpointId: J(t.CheckpointId ?? t.checkpointId ?? t.checkpoint_id) || void 0,
1528
+ sessionId: J(t.SessionId ?? t.sessionId ?? t.session_id) || void 0,
1529
+ invocationId: J(t.InvocationId ?? t.invocationId ?? t.invocation_id) || void 0,
1530
+ seqId: bt(t.SeqId ?? t.seqId ?? t.seq_id),
1531
+ timestamp: xt(t.Timestamp ?? t.timestamp ?? t.CreatedAt ?? t.createdAt),
1532
+ status: J(t.Status ?? t.status) || void 0,
1533
+ replayed: !!(t.Replayed ?? t.replayed),
1534
+ metadata: Y(t.Metadata ?? t.metadata)
1535
+ };
1536
+ }
1537
+ var X = M()((e, t) => ({
1538
+ checkpointsBySessionId: {},
1539
+ toolReceiptsBySessionId: {},
1540
+ setSessionCheckpoints: (t, n) => e((e) => ({ checkpointsBySessionId: {
1541
+ ...e.checkpointsBySessionId,
1542
+ [t]: wt(Dt(n.map(Ot).filter(St).map((e) => ({
1543
+ ...e,
1544
+ sessionId: e.sessionId || t
1545
+ }))))
1546
+ } })),
1547
+ upsertSessionCheckpoint: (t, n) => {
1548
+ let r = Ot(n);
1549
+ r && e((e) => {
1550
+ let n = e.checkpointsBySessionId[t] || [];
1551
+ r.sessionId = r.sessionId || t;
1552
+ let i = new Map(n.map((e) => [e.checkpointId, e]));
1553
+ i.set(r.checkpointId, {
1554
+ ...i.get(r.checkpointId),
1555
+ ...r
1556
+ });
1557
+ let a = Dt([...i.values()]);
1558
+ return { checkpointsBySessionId: {
1559
+ ...e.checkpointsBySessionId,
1560
+ [t]: wt(a)
1561
+ } };
1562
+ });
1563
+ },
1564
+ getSessionCheckpoints: (e) => {
1565
+ let n = String(e || "");
1566
+ return n && t().checkpointsBySessionId[n] || vt;
1567
+ },
1568
+ setSessionToolReceipts: (t, n) => e((e) => ({ toolReceiptsBySessionId: {
1569
+ ...e.toolReceiptsBySessionId,
1570
+ [t]: Tt(n.map(kt).filter(Ct).map((e) => ({
1571
+ ...e,
1572
+ sessionId: e.sessionId || t
1573
+ })))
1574
+ } })),
1575
+ getSessionToolReceipts: (e) => {
1576
+ let n = String(e || "");
1577
+ return n && t().toolReceiptsBySessionId[n] || yt;
1578
+ },
1579
+ clearSessionCheckpoints: (t) => e((e) => {
1580
+ let n = String(t || "");
1581
+ if (!n) return {
1582
+ checkpointsBySessionId: {},
1583
+ toolReceiptsBySessionId: {}
1584
+ };
1585
+ let { [n]: r, ...i } = e.checkpointsBySessionId, { [n]: a, ...o } = e.toolReceiptsBySessionId;
1586
+ return {
1587
+ checkpointsBySessionId: i,
1588
+ toolReceiptsBySessionId: o
1589
+ };
1590
+ })
1591
+ })), At = new Set([
1592
+ "completed",
1593
+ "failed",
1594
+ "error",
1595
+ "cancelled",
1596
+ "canceled",
1597
+ "aborted"
1598
+ ]);
1599
+ function jt(e) {
1600
+ return typeof e == "string" ? e : Array.isArray(e) ? e.map((e) => typeof e == "string" ? e : e && typeof e == "object" && typeof e.text == "string" ? e.text : "").join("") : "";
1601
+ }
1602
+ function Mt(e) {
1603
+ let t = String(e || "").trim();
1604
+ return t ? `/agentengine/api/v1/AttachmentContent?FileUri=${encodeURIComponent(t)}` : "";
1605
+ }
1606
+ function Nt(e) {
1607
+ return String(e || "").match(/^data:([^;,]+)/)?.[1] || "";
1608
+ }
1609
+ function Pt(e, t) {
1610
+ let n = String(e || "").trim(), r = String(t || "").trim();
1611
+ return !n || !r || n === r ? !0 : n.endsWith("/*") ? r.startsWith(n.slice(0, -1)) : r.endsWith("/*") ? n.startsWith(r.slice(0, -1)) : !1;
1612
+ }
1613
+ function Ft(e) {
1614
+ let t = e?.Content?.parts || [], n = [], r = /* @__PURE__ */ new Map(), i = (e) => {
1615
+ let t = `${e.fileUri || e.url || e.name}|${e.type}`;
1616
+ r.has(t) || r.set(t, e);
1617
+ };
1618
+ for (let e of t) {
1619
+ if (e?.type === "input_text" || e?.text) {
1620
+ n.push(e.text || "");
1621
+ continue;
1622
+ }
1623
+ if (e?.type === "input_file" && e.inlineData) {
1624
+ i({
1625
+ name: e.inlineData.displayName || "attachment",
1626
+ url: `data:${e.inlineData.mimeType || "application/octet-stream"};base64,${e.inlineData.data}`,
1627
+ type: e.inlineData.mimeType || "application/octet-stream"
1628
+ });
1629
+ continue;
1630
+ }
1631
+ if (e?.type === "input_file" && typeof e.file_data == "string" && e.file_data) {
1632
+ i({
1633
+ name: e.filename || e.displayName || e.display_name || "attachment",
1634
+ url: `data:${e.mime_type || e.mimeType || "application/octet-stream"};base64,${e.file_data}`,
1635
+ type: e.mime_type || e.mimeType || "application/octet-stream"
1636
+ });
1637
+ continue;
1638
+ }
1639
+ if (e?.type === "input_file" && typeof e.file_url == "string" && e.file_url.trim()) {
1640
+ let t = e.file_url.trim();
1641
+ i({
1642
+ name: e.filename || e.displayName || e.display_name || "attachment",
1643
+ url: Mt(t),
1644
+ type: e.mime_type || e.mimeType || "application/octet-stream",
1645
+ fileUri: t
1646
+ });
1647
+ continue;
1648
+ }
1649
+ if (e?.type === "input_image" || e?.type === "image_url") {
1650
+ let t = typeof e.image_url == "string" ? e.image_url : e.image_url?.url;
1651
+ t && i({
1652
+ name: e.filename || e.displayName || e.display_name || "uploaded_image",
1653
+ url: t,
1654
+ type: e.mime_type || e.mimeType || Nt(t) || "image/*"
1655
+ });
1656
+ continue;
1657
+ }
1658
+ if (e?.type === "input_file" && e.fileData) {
1659
+ let t = String(e.fileData.fileUri || "").trim();
1660
+ i({
1661
+ name: e.fileData.displayName || "attachment",
1662
+ url: Mt(t),
1663
+ type: e.fileData.mimeType || "application/octet-stream",
1664
+ fileUri: t
1665
+ });
1666
+ }
1667
+ }
1668
+ let a = Array.isArray(e?.Metadata?.attachments) ? e.Metadata.attachments : [];
1669
+ for (let e of a) {
1670
+ let t = String(e.file_uri || "").trim(), n = {
1671
+ name: e.display_name || "attachment",
1672
+ url: Mt(t),
1673
+ type: e.mime_type || "application/octet-stream",
1674
+ fileUri: t
1675
+ };
1676
+ !n.url && !n.fileUri && Array.from(r.values()).some((e) => e.name === n.name && Pt(e.type, n.type) && (e.url || e.fileUri)) || i(n);
1677
+ }
1678
+ let o = Array.from(r.values());
1679
+ return {
1680
+ text: n.join(""),
1681
+ attachments: o.length > 0 ? o : void 0
1682
+ };
1683
+ }
1684
+ function It(e) {
1685
+ let t = e?.Metadata?.responses_output;
1686
+ if (!Array.isArray(t)) return {};
1687
+ let n = He(), r = Ze({
1688
+ eventName: "response.completed",
1689
+ data: { response: {
1690
+ id: String(e.Metadata?.response_id || ""),
1691
+ output: t
1692
+ } },
1693
+ state: n
1694
+ }), i = "", a = {};
1695
+ for (let e of r) {
1696
+ if (e.type === "reasoning_delta") {
1697
+ i += e.text;
1698
+ continue;
1699
+ }
1700
+ if (e.type === "tool_upsert") {
1701
+ a[e.name] = {
1702
+ ...a[e.name] || {
1703
+ name: e.name,
1704
+ args: ""
1705
+ },
1706
+ name: e.name,
1707
+ args: e.args,
1708
+ status: e.status,
1709
+ ...e.approvalRequestId ? { approvalRequestId: e.approvalRequestId } : {},
1710
+ ...e.previousResponseId ? { previousResponseId: e.previousResponseId } : {},
1711
+ ...e.serverLabel ? { serverLabel: e.serverLabel } : {},
1712
+ ...e.approvalRequestId ? { approvalStatus: "pending" } : {}
1713
+ };
1714
+ continue;
1715
+ }
1716
+ e.type === "tool_result" && (a[e.name] = {
1717
+ ...a[e.name] || {
1718
+ name: e.name,
1719
+ args: ""
1720
+ },
1721
+ name: e.name,
1722
+ output: e.output,
1723
+ status: v(e.output) ? "error" : "completed"
1724
+ });
1725
+ }
1726
+ return {
1727
+ ...i ? { reasoning: i } : {},
1728
+ ...Object.keys(a).length > 0 ? { tools: a } : {}
1729
+ };
1730
+ }
1731
+ function Lt(e, t, n) {
1732
+ return t === "running" ? e === "prompt_too_long" ? "检测到上下文过长,正在自动压缩历史后重试" : "正在自动压缩上下文" : n ? e === "prompt_too_long" ? "上下文过长,系统已自动压缩历史并重试" : "系统已自动压缩较早的对话上下文" : t === "failed" ? "自动压缩上下文未完成" : e === "prompt_too_long" ? "已完成上下文压缩,并继续当前回复" : "已完成上下文压缩";
1733
+ }
1734
+ function Rt(e, t) {
1735
+ return [
1736
+ e,
1737
+ t.content || "",
1738
+ t.reasoning || ""
1739
+ ].join("\0");
1740
+ }
1741
+ function zt(e) {
1742
+ return e?.Metadata?.responses_mirror === !0 || String(e?.Metadata?.responses_mirror || "").trim().toLowerCase() === "true";
1743
+ }
1744
+ function Bt(e) {
1745
+ if (e?.EventType !== "user_message") return "";
1746
+ let t = Ft(e), n = (t.attachments || []).map((e) => [
1747
+ e.name || "",
1748
+ e.fileUri || "",
1749
+ e.url || "",
1750
+ e.type || ""
1751
+ ].join("")).sort().join("");
1752
+ return [String(t.text || "").trim(), n].join("\0");
1753
+ }
1754
+ function Vt(e) {
1755
+ return e?.EventType === "assistant_stream_snapshot";
1756
+ }
1757
+ function Ht(e) {
1758
+ let t = Number(e?.SeqId || 0);
1759
+ if (Number.isFinite(t) && t > 0) return t;
1760
+ let n = Number(e?.Timestamp || 0);
1761
+ return Number.isFinite(n) ? n : 0;
1762
+ }
1763
+ function Ut(e) {
1764
+ if (typeof e == "string") return e;
1765
+ if (e == null) return "";
1766
+ try {
1767
+ return JSON.stringify(e, null, 2);
1768
+ } catch {
1769
+ return String(e);
1770
+ }
1771
+ }
1772
+ function Wt(e) {
1773
+ let t = String(e?.EventType || "");
1774
+ if (t !== "tool_call" && t !== "tool_result") return null;
1775
+ let n = String(e.Metadata?.tool_name || e.Metadata?.name || e.Metadata?.function_name || jt(e.Content?.parts) || "tool").trim() || "tool", r = {
1776
+ name: n,
1777
+ args: "",
1778
+ status: "running"
1779
+ }, i = t === "tool_result" ? (() => {
1780
+ let t = Ut(e.Metadata?.tool_output ?? e.Metadata?.output ?? e.Metadata?.result ?? jt(e.Content?.parts));
1781
+ return {
1782
+ ...r,
1783
+ output: t,
1784
+ status: v(t) ? "error" : "completed"
1785
+ };
1786
+ })() : {
1787
+ ...r,
1788
+ args: Ut(e.Metadata?.tool_args ?? e.Metadata?.arguments ?? e.Metadata?.args ?? {})
1789
+ };
1790
+ return {
1791
+ id: e.EventId || String(Date.now() + Math.random()),
1792
+ role: "model",
1793
+ content: "",
1794
+ timestamp: e.Timestamp || Date.now(),
1795
+ eventType: t,
1796
+ tools: { [n]: i }
1797
+ };
1798
+ }
1799
+ function Gt(e = {}, t = {}) {
1800
+ let n = { ...e || {} };
1801
+ for (let [e, r] of Object.entries(t || {})) n[e] = {
1802
+ ...n[e] || {},
1803
+ ...r || {},
1804
+ name: e,
1805
+ args: r?.args || n[e]?.args || ""
1806
+ };
1807
+ return n;
1808
+ }
1809
+ function Kt(e = {}, t = "") {
1810
+ let n = String(t || "").trim().toLowerCase(), r = n === "completed" ? "completed" : At.has(n) ? "error" : "";
1811
+ if (!r) return e;
1812
+ let i = !1, a = {};
1813
+ for (let [t, n] of Object.entries(e || {})) n?.status === "running" ? (i = !0, a[t] = {
1814
+ ...n,
1815
+ status: r
1816
+ }) : a[t] = n;
1817
+ return i ? a : e;
1818
+ }
1819
+ function qt(e, t) {
1820
+ return {
1821
+ ...e,
1822
+ reasoning: Jt(e.reasoning, t.reasoning),
1823
+ tools: {
1824
+ ...e.tools || {},
1825
+ ...t.tools || {}
1826
+ },
1827
+ eventId: t.eventId || e.eventId,
1828
+ responseId: t.responseId || e.responseId,
1829
+ traceId: t.traceId || e.traceId,
1830
+ rootSpanId: t.rootSpanId || e.rootSpanId,
1831
+ timestamp: Math.max(Number(e.timestamp || 0), Number(t.timestamp || 0)) || t.timestamp || e.timestamp,
1832
+ id: t.responseId || t.reasoning || t.tools ? t.id : e.id
1833
+ };
1834
+ }
1835
+ function Jt(e = "", t = "") {
1836
+ let n = String(e || ""), r = String(t || "");
1837
+ return n ? !r || n.endsWith(r) ? n : r.startsWith(n) ? r : `${n}${r}` : r;
1838
+ }
1839
+ function Yt(e) {
1840
+ return {
1841
+ id: e.id,
1842
+ role: "system",
1843
+ eventType: "context_checkpoint",
1844
+ status: e.status,
1845
+ trigger: e.trigger,
1846
+ compactedUntilSeqId: e.compactedUntilSeqId,
1847
+ summary: e.summary,
1848
+ historical: e.historical,
1849
+ timestamp: e.timestamp,
1850
+ content: Lt(e.trigger, e.status, e.historical)
1851
+ };
1852
+ }
1853
+ function Xt(e) {
1854
+ let t = e?.EventType || "";
1855
+ if (t === "run_status") return e.Content?.status === "failed" ? {
1856
+ id: e.EventId || String(Date.now() + Math.random()),
1857
+ role: "system",
1858
+ content: e.Content?.detail || "本轮运行失败。",
1859
+ eventType: t,
1860
+ status: "failed",
1861
+ timestamp: e.Timestamp || Date.now()
1862
+ } : e.Content?.status === "cancelled" ? {
1863
+ id: e.EventId || String(Date.now() + Math.random()),
1864
+ role: "system",
1865
+ content: e.Content?.detail || "本轮输出已停止。",
1866
+ eventType: t,
1867
+ status: "cancelled",
1868
+ timestamp: e.Timestamp || Date.now()
1869
+ } : null;
1870
+ if (t === "context_checkpoint") {
1871
+ let t = Ft(e);
1872
+ return Yt({
1873
+ id: e.EventId || String(Date.now() + Math.random()),
1874
+ timestamp: e.Timestamp || Date.now(),
1875
+ status: "completed",
1876
+ trigger: String(e.Metadata?.trigger || "auto"),
1877
+ compactedUntilSeqId: Number(e.Metadata?.compacted_until_seq_id || 0) || void 0,
1878
+ summary: t.text || void 0,
1879
+ historical: !0
1880
+ });
1881
+ }
1882
+ if (t === "reasoning") {
1883
+ let n = Ft(e).text || jt(e.Metadata?.reasoning);
1884
+ return n ? {
1885
+ id: e.EventId || String(Date.now() + Math.random()),
1886
+ role: "model",
1887
+ content: "",
1888
+ reasoning: n,
1889
+ timestamp: e.Timestamp || Date.now(),
1890
+ eventType: t
1891
+ } : null;
1892
+ }
1893
+ if (t === "tool_call" || t === "tool_result") return Wt(e);
1894
+ if (t !== "user_message" && t !== "assistant_message" && t !== "assistant_stream_snapshot") return null;
1895
+ let n = Ft(e), r = t === "assistant_message" ? It(e) : {};
1896
+ if (!n.text && !n.attachments?.length && !r.reasoning && !r.tools) return null;
1897
+ let i = String(e.Metadata?.response_id || e.Metadata?.ResponseId || "").trim(), a = String(e.Metadata?.trace_id || e.Metadata?.TraceId || "").trim(), o = String(e.Metadata?.root_span_id || e.Metadata?.rootSpanId || e.Metadata?.RootSpanId || "").trim();
1898
+ return {
1899
+ id: e.EventId || String(Date.now() + Math.random()),
1900
+ role: t === "user_message" ? "user" : "model",
1901
+ content: n.text,
1902
+ timestamp: e.Timestamp || Date.now(),
1903
+ eventType: t,
1904
+ eventId: e.EventId || void 0,
1905
+ responseId: i || void 0,
1906
+ traceId: a || void 0,
1907
+ rootSpanId: o || void 0,
1908
+ attachments: n.attachments,
1909
+ ...r
1910
+ };
1911
+ }
1912
+ function Zt(e = []) {
1913
+ let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), s = Array.isArray(e) ? e : [], c = [];
1914
+ for (let e of s) {
1915
+ let t = String(e?.EventId || "").trim();
1916
+ if (t) {
1917
+ if (o.has(t)) continue;
1918
+ o.add(t);
1919
+ }
1920
+ c.push(e);
1921
+ }
1922
+ let l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set(), d = /* @__PURE__ */ new Map();
1923
+ for (let e of c) {
1924
+ if (e?.EventType !== "user_message" || zt(e)) {
1925
+ if (e?.EventType === "assistant_message") {
1926
+ let t = String(e.InvocationId || "").trim();
1927
+ t && u.add(t);
1928
+ }
1929
+ if (Vt(e)) {
1930
+ let t = String(e.InvocationId || "").trim();
1931
+ if (t) {
1932
+ let n = d.get(t);
1933
+ (!n || Ht(e) >= Ht(n)) && d.set(t, e);
1934
+ }
1935
+ }
1936
+ continue;
1937
+ }
1938
+ let t = Bt(e);
1939
+ t && l.add(t);
1940
+ }
1941
+ let f = c.filter((e) => {
1942
+ if (Vt(e)) {
1943
+ let t = String(e.InvocationId || "").trim();
1944
+ return t ? u.has(t) ? !1 : d.get(t) === e : !0;
1945
+ }
1946
+ if (e?.EventType !== "user_message" || !zt(e)) return !0;
1947
+ let t = Bt(e);
1948
+ return !t || !l.has(t);
1949
+ });
1950
+ for (let e of f) {
1951
+ let a = String(e.InvocationId || "").trim();
1952
+ a && e.EventType === "user_message" && i.add(a), a && [
1953
+ "assistant_message",
1954
+ "assistant_stream_snapshot",
1955
+ "reasoning",
1956
+ "tool_call"
1957
+ ].includes(String(e.EventType || "")) && r.add(a), e.EventType === "run_status" && a && (t.set(a, String(e.Content?.status || "").trim()), n.set(a, e));
1958
+ }
1959
+ let p = [], m = /* @__PURE__ */ new Map(), h = null, g = /* @__PURE__ */ new Map(), _ = (e) => {
1960
+ let t = String(e?.responseId || "").trim(), n = t ? m.get(t) : void 0;
1961
+ if (n !== void 0) {
1962
+ p[n] = qt(p[n], e);
1963
+ return;
1964
+ }
1965
+ t && m.set(t, p.length), p.push(e);
1966
+ }, v = () => {
1967
+ h &&= (_(h), null);
1968
+ }, ee = (e) => {
1969
+ let n = String(e || "").trim();
1970
+ if (!n) return {};
1971
+ let r = g.get(n);
1972
+ return r ? (g.delete(n), { tools: Kt(r.tools, t.get(n)) }) : {};
1973
+ };
1974
+ for (let e of f) {
1975
+ if (e.EventType === "run_status") continue;
1976
+ let t = Xt(e);
1977
+ if (!t) continue;
1978
+ if (t.eventType === "tool_call" || t.eventType === "tool_result") {
1979
+ let n = String(e.InvocationId || "").trim();
1980
+ if (!n) {
1981
+ v(), _(t);
1982
+ continue;
1983
+ }
1984
+ let r = g.get(n);
1985
+ g.set(n, {
1986
+ ...r || {
1987
+ id: t.id,
1988
+ role: "model",
1989
+ content: "",
1990
+ timestamp: t.timestamp,
1991
+ invocationId: n
1992
+ },
1993
+ timestamp: Math.max(Number(r?.timestamp || 0), Number(t.timestamp || 0)),
1994
+ tools: Gt(r?.tools, t.tools)
1995
+ });
1996
+ continue;
1997
+ }
1998
+ if (t.eventType === "reasoning") {
1999
+ let n = String(e.InvocationId || "").trim();
2000
+ if (h && n && h.invocationId === n) {
2001
+ h.reasoning = `${h.reasoning || ""}${t.reasoning || ""}`, h.timestamp = t.timestamp;
2002
+ continue;
2003
+ }
2004
+ v(), h = {
2005
+ ...t,
2006
+ ...n ? { invocationId: n } : {}
2007
+ };
2008
+ continue;
2009
+ }
2010
+ let n = t.eventType === "assistant_message" || t.eventType === "assistant_stream_snapshot";
2011
+ if (n && h) {
2012
+ let n = String(e.InvocationId || "").trim(), r = Rt(n, t);
2013
+ if (t.eventType === "assistant_message" && n && a.has(r)) {
2014
+ h = null;
2015
+ continue;
2016
+ }
2017
+ t.eventType === "assistant_message" && n && a.add(r), _({
2018
+ ...t,
2019
+ ...ee(n),
2020
+ reasoning: Jt(h.reasoning, t.reasoning)
2021
+ }), h = null;
2022
+ continue;
2023
+ }
2024
+ if (v(), n) {
2025
+ let n = String(e.InvocationId || "").trim(), r = Rt(n, t);
2026
+ if (t.eventType === "assistant_message" && n && a.has(r)) continue;
2027
+ t.eventType === "assistant_message" && n && a.add(r), _({
2028
+ ...t,
2029
+ ...ee(n)
2030
+ });
2031
+ continue;
2032
+ }
2033
+ _(t);
2034
+ }
2035
+ v();
2036
+ for (let [e, n] of g.entries()) _({
2037
+ ...n,
2038
+ tools: Kt(n.tools, t.get(e))
2039
+ });
2040
+ for (let [e, a] of t.entries()) {
2041
+ if (a !== "in_progress" || r.has(e) || !i.has(e)) continue;
2042
+ let t = n.get(e) || {};
2043
+ _({
2044
+ id: `run-placeholder-${e}`,
2045
+ role: "model",
2046
+ content: "",
2047
+ status: "running",
2048
+ eventType: "run_status",
2049
+ timestamp: t.Timestamp || Date.now()
2050
+ });
2051
+ }
2052
+ return p.map(({ invocationId: e, ...t }) => t);
2053
+ }
2054
+ function Qt(e = [], t = []) {
2055
+ let n = [], r = /* @__PURE__ */ new Set();
2056
+ for (let i of [...Array.isArray(e) ? e : [], ...Array.isArray(t) ? t : []]) {
2057
+ let e = String(i?.EventId || "").trim();
2058
+ if (e) {
2059
+ if (r.has(e)) continue;
2060
+ r.add(e);
2061
+ }
2062
+ n.push(i);
2063
+ }
2064
+ return n.sort((e, t) => {
2065
+ let n = Number(e?.SeqId || 0), r = Number(t?.SeqId || 0);
2066
+ return Number.isFinite(n) && Number.isFinite(r) && n !== r ? n - r : Number(e?.Timestamp || 0) - Number(t?.Timestamp || 0);
2067
+ });
2068
+ }
2069
+ function $t(e = []) {
2070
+ return (Array.isArray(e) ? e : []).reduce((e, t) => {
2071
+ let n = Number(t.SeqId || 0);
2072
+ return Number.isFinite(n) ? Math.max(e, n) : e;
2073
+ }, 0);
2074
+ }
2075
+ function en(e) {
2076
+ return e?.EventType === "run_status" ? At.has(String(e.Content?.status || "").trim().toLowerCase()) : !1;
2077
+ }
2078
+ //#endregion
2079
+ //#region src/core/run/dispatcher.ts
2080
+ var Z = !1, tn = new Set(["completed"]), nn = new Set([
2081
+ "failed",
2082
+ "error",
2083
+ "cancelled",
2084
+ "canceled",
2085
+ "aborted",
2086
+ "incomplete"
2087
+ ]);
2088
+ function Q(e) {
2089
+ Z || (Z = !0, G.getState().patchMessages((t) => [...t, {
2090
+ id: e,
2091
+ role: "model",
2092
+ content: "",
2093
+ timestamp: Date.now(),
2094
+ reasoning: ""
2095
+ }]));
2096
+ }
2097
+ function rn(e) {
2098
+ let t = String(e || "").trim().toLowerCase(), n = tn.has(t) ? "completed" : nn.has(t) ? "error" : null;
2099
+ n && G.getState().patchMessages((e) => e.map((e) => {
2100
+ if (!e.tools) return e;
2101
+ let t = !1, r = Object.fromEntries(Object.entries(e.tools).map(([e, r]) => r.status === "running" ? (t = !0, [e, {
2102
+ ...r,
2103
+ status: n
2104
+ }]) : [e, r]));
2105
+ return t ? {
2106
+ ...e,
2107
+ tools: r
2108
+ } : e;
2109
+ }));
2110
+ }
2111
+ function an(e) {
2112
+ if (e.sessionId && I.getState().currentSessionId !== e.sessionId) {
2113
+ e.type === "stage_changed" && (e.stage === "completing" || e.stage === "error" || e.stage === "cancelled") && (Z = !1);
2114
+ return;
2115
+ }
2116
+ let t = G.getState();
2117
+ switch (e.type) {
2118
+ case "activity":
2119
+ F.getState().updateActivity({
2120
+ sessionId: e.sessionId,
2121
+ source: e.source,
2122
+ status: e.status,
2123
+ phase: e.phase,
2124
+ detail: e.detail,
2125
+ countEvent: e.countEvent
2126
+ });
2127
+ break;
2128
+ case "user_message_added":
2129
+ t.patchMessages((t) => [...t, {
2130
+ id: e.messageId,
2131
+ role: "user",
2132
+ content: "",
2133
+ timestamp: Date.now()
2134
+ }]);
2135
+ break;
2136
+ case "assistant_message_created":
2137
+ Q(e.messageId);
2138
+ break;
2139
+ case "text_delta":
2140
+ Q(e.messageId), t.patchMessages((t) => t.map((t) => t.id === e.messageId ? {
2141
+ ...t,
2142
+ content: t.content + e.delta
2143
+ } : t));
2144
+ break;
2145
+ case "text_final":
2146
+ Q(e.messageId), t.patchMessages((t) => t.map((t) => t.id === e.messageId ? {
2147
+ ...t,
2148
+ content: e.text
2149
+ } : t));
2150
+ break;
2151
+ case "reasoning_delta":
2152
+ Q(e.messageId), t.patchMessages((t) => t.map((t) => t.id === e.messageId ? {
2153
+ ...t,
2154
+ reasoning: (t.reasoning || "") + e.delta
2155
+ } : t));
2156
+ break;
2157
+ case "tool_upsert":
2158
+ Q(e.messageId), t.patchMessages((t) => t.map((t) => t.id === e.messageId ? {
2159
+ ...t,
2160
+ tools: {
2161
+ ...t.tools || {},
2162
+ [e.name]: {
2163
+ ...t.tools?.[e.name] || {
2164
+ name: e.name,
2165
+ args: ""
2166
+ },
2167
+ name: e.name,
2168
+ args: e.args,
2169
+ status: e.status,
2170
+ ...e.extra || {},
2171
+ ...e.extra?.approvalRequestId ? { approvalStatus: "pending" } : {}
2172
+ }
2173
+ }
2174
+ } : t));
2175
+ break;
2176
+ case "tool_result":
2177
+ Q(e.messageId), t.patchMessages((t) => t.map((t) => t.id === e.messageId ? {
2178
+ ...t,
2179
+ tools: {
2180
+ ...t.tools || {},
2181
+ [e.name]: {
2182
+ ...t.tools?.[e.name] || {
2183
+ name: e.name,
2184
+ args: ""
2185
+ },
2186
+ output: e.output,
2187
+ status: v(e.output) ? "error" : "completed"
2188
+ }
2189
+ }
2190
+ } : t));
2191
+ break;
2192
+ case "system_message":
2193
+ t.patchMessages((t) => [...t, {
2194
+ id: String(Date.now() + Math.random()),
2195
+ role: "system",
2196
+ content: e.content,
2197
+ timestamp: Date.now()
2198
+ }]);
2199
+ break;
2200
+ case "compaction": {
2201
+ let n = `compaction-${Date.now()}`, r = e.phase === "start" ? "running" : e.phase === "failed" ? "failed" : "completed", i = Yt({
2202
+ id: n,
2203
+ timestamp: Date.now(),
2204
+ status: r,
2205
+ trigger: e.trigger,
2206
+ compactedUntilSeqId: e.compactedUntilSeqId
2207
+ });
2208
+ t.patchMessages((e) => e.findIndex((e) => e.id === n) < 0 ? [...e, i] : e.map((e) => e.id === n ? {
2209
+ ...e,
2210
+ ...i
2211
+ } : e));
2212
+ break;
2213
+ }
2214
+ case "stage_changed":
2215
+ e.stage === "streaming" || e.stage === "connecting" ? F.getState().setSessionStreaming(e.sessionId, !0) : (e.stage === "completing" || e.stage === "error" || e.stage === "cancelled") && (F.getState().setSessionStreaming(e.sessionId, !1), Z = !1);
2216
+ break;
2217
+ case "stream_ended":
2218
+ F.getState().setSessionStreaming(e.sessionId, !1), globalThis.setTimeout(() => {
2219
+ let t = F.getState();
2220
+ t.getSessionActivity(e.sessionId)?.status === "completed" && t.clearSessionActivity(e.sessionId);
2221
+ }, 2400), Z = !1;
2222
+ break;
2223
+ case "error":
2224
+ F.getState().setSessionStreaming(e.sessionId, !1), F.getState().updateActivity({
2225
+ sessionId: e.sessionId,
2226
+ status: "failed",
2227
+ phase: "连接断开或生成出错",
2228
+ countEvent: !1
2229
+ }), t.patchMessages((e) => [...e, {
2230
+ id: String(Date.now()),
2231
+ role: "model",
2232
+ content: "连接断开或生成出错。",
2233
+ timestamp: Date.now()
2234
+ }]), Z = !1;
2235
+ break;
2236
+ case "terminal":
2237
+ rn(e.status);
2238
+ break;
2239
+ case "stream_event":
2240
+ if (e.event.EventType === "run_checkpoint" && X.getState().upsertSessionCheckpoint(e.sessionId || e.event.SessionId, e.event), e.event.EventType === "run_status") {
2241
+ let t = String(e.event.Content?.status || "").trim().toLowerCase();
2242
+ t === "completed" ? F.getState().updateActivity({
2243
+ sessionId: e.sessionId || e.event.SessionId,
2244
+ status: "completed",
2245
+ phase: "后台长任务已完成",
2246
+ countEvent: !1
2247
+ }) : t === "cancelled" || t === "canceled" || t === "aborted" ? F.getState().updateActivity({
2248
+ sessionId: e.sessionId || e.event.SessionId,
2249
+ status: "stopped",
2250
+ phase: "后台长任务已取消",
2251
+ countEvent: !1
2252
+ }) : (t === "failed" || t === "error") && F.getState().updateActivity({
2253
+ sessionId: e.sessionId || e.event.SessionId,
2254
+ status: "failed",
2255
+ phase: "后台长任务失败",
2256
+ countEvent: !1
2257
+ });
2258
+ }
2259
+ break;
2260
+ }
2261
+ }
2262
+ function on() {
2263
+ Z = !1;
2264
+ }
2265
+ //#endregion
2266
+ //#region src/hooks/useRunAgent.ts
2267
+ function sn(e) {
2268
+ let t = A(/* @__PURE__ */ new Map()), n = A(() => {}), { agentId: r, apiFormats: i, agentFramework: a, selectedModel: o, thinkingMode: s, currentSessionIdRef: c, queuedDraftRef: l, onRunSettled: u, uiCapabilities: d } = e, f = O((e) => {
2269
+ e.updateConfig({
2270
+ agentId: r,
2271
+ apiFormats: i,
2272
+ agentFramework: a,
2273
+ selectedModel: o,
2274
+ thinkingMode: s,
2275
+ checkpointResumePreviewEnabled: !!d.RunLifecycle?.CheckpointResumePreview
2276
+ });
2277
+ }, [
2278
+ r,
2279
+ i,
2280
+ a,
2281
+ o,
2282
+ s,
2283
+ d.RunLifecycle?.CheckpointResumePreview
2284
+ ]), p = O((n) => {
2285
+ let r = String(n || "new-session"), i = t.current.get(r);
2286
+ return i ? f(i) : (i = new _t(e.api), f(i), i.subscribe(an), t.current.set(r, i)), i;
2287
+ }, [e.api, f]);
2288
+ k(() => {
2289
+ for (let e of t.current.values()) f(e);
2290
+ }, [f]);
2291
+ let m = O((e) => {
2292
+ l.current.push(e), _.getState().setQueuedDrafts((t) => [...t, e]);
2293
+ }, [l]), h = O((e) => {
2294
+ let i = c.current, a = p(i);
2295
+ if (a.stage !== "idle") return !1;
2296
+ on(), _.getState().setMobileActionsOpen(!1), F.getState().setSessionStreaming(i, !0);
2297
+ let o = e.text.trim(), s = String(Date.now()), l = e.attachments.map((e) => ({
2298
+ name: e.name,
2299
+ url: URL.createObjectURL(e),
2300
+ type: e.type || "application/octet-stream"
2301
+ }));
2302
+ (o || l.length > 0) && G.getState().patchMessages((e) => [...e, {
2303
+ id: s,
2304
+ role: "user",
2305
+ content: o,
2306
+ timestamp: Date.now(),
2307
+ attachments: l.length ? l : void 0
2308
+ }]);
2309
+ let d = a.start({
2310
+ text: e.text,
2311
+ attachments: e.attachments,
2312
+ responsesInput: e.responsesInput,
2313
+ previousResponseId: e.previousResponseId,
2314
+ sessionId: i,
2315
+ onSessionCreated: (e) => {
2316
+ I.getState().upsertSessions([{
2317
+ SessionId: e,
2318
+ UpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
2319
+ }]), c.current = e, ve(r, e), I.getState().setCurrentSessionId(e), i !== e && t.current.set(e, a);
2320
+ },
2321
+ onSessionUpsert: () => {},
2322
+ onSettled: (e) => {
2323
+ u?.(e), n.current();
2324
+ }
2325
+ });
2326
+ return d || F.getState().setSessionStreaming(i, !1), d;
2327
+ }, [
2328
+ r,
2329
+ c,
2330
+ p,
2331
+ u
2332
+ ]);
2333
+ return k(() => {
2334
+ n.current = () => {
2335
+ let e = l.current.shift();
2336
+ if (!e) {
2337
+ _.getState().setQueuedDrafts([]);
2338
+ return;
2339
+ }
2340
+ _.getState().setQueuedDrafts((e) => e.slice(1)), queueMicrotask(() => {
2341
+ h(e) || (l.current.unshift(e), _.getState().setQueuedDrafts((t) => [e, ...t]));
2342
+ });
2343
+ };
2344
+ }, [l, h]), {
2345
+ submitDraft: O(async (e, t, n, r) => {
2346
+ let i = {
2347
+ text: e,
2348
+ attachments: t,
2349
+ responsesInput: n,
2350
+ previousResponseId: r
2351
+ };
2352
+ if (p(c.current).stage !== "idle" && F.getState().isSessionStreaming(c.current)) {
2353
+ n === void 0 && m({
2354
+ text: e,
2355
+ attachments: t
2356
+ });
2357
+ return;
2358
+ }
2359
+ !h(i) && n === void 0 && m({
2360
+ text: e,
2361
+ attachments: t
2362
+ });
2363
+ }, [
2364
+ c,
2365
+ m,
2366
+ p,
2367
+ h
2368
+ ]),
2369
+ stopGeneration: O(() => {
2370
+ p(c.current).stop();
2371
+ }, [c, p]),
2372
+ disconnectRun: O(() => {
2373
+ p(c.current).disconnect();
2374
+ }, [c, p]),
2375
+ resumeCheckpoint: O((e) => {
2376
+ let t = p(e.sessionId);
2377
+ if (t.stage !== "idle") return !1;
2378
+ on(), _.getState().setMobileActionsOpen(!1), F.getState().setSessionStreaming(e.sessionId, !0);
2379
+ let r = t.resumeCheckpoint({
2380
+ ...e,
2381
+ onSettled: (e) => {
2382
+ u?.(e), n.current();
2383
+ }
2384
+ });
2385
+ return r || F.getState().setSessionStreaming(e.sessionId, !1), r;
2386
+ }, [p, u]),
2387
+ resetCompaction: O(() => {
2388
+ on();
2389
+ }, [])
2390
+ };
2391
+ }
2392
+ //#endregion
2393
+ //#region src/hooks/useFeedback.ts
2394
+ function cn(e) {
2395
+ let { agentId: t, currentSessionId: n, isStreaming: r, api: i, submitDraft: a } = e;
2396
+ return {
2397
+ submitResponseFeedback: O(async (e) => {
2398
+ if (!n) return;
2399
+ let r = null;
2400
+ G.getState().patchMessages((t) => {
2401
+ let n = h(t, {
2402
+ messageId: e.message.id,
2403
+ rating: e.rating,
2404
+ comment: e.comment || ""
2405
+ });
2406
+ return r = n.previousFeedback, n.nextMessages;
2407
+ });
2408
+ try {
2409
+ let r = C((await i.upsertResponseFeedback(d({
2410
+ agentId: t,
2411
+ sessionId: n,
2412
+ message: e.message,
2413
+ rating: e.rating,
2414
+ comment: e.comment || ""
2415
+ })))?.Feedback);
2416
+ r && G.getState().patchMessages((t) => x(t, {
2417
+ messageId: e.message.id,
2418
+ feedback: r
2419
+ }));
2420
+ } catch (t) {
2421
+ console.error("Failed to submit response feedback:", t), G.getState().patchMessages((t) => c(t, {
2422
+ messageId: e.message.id,
2423
+ previousFeedback: r
2424
+ }));
2425
+ }
2426
+ }, [
2427
+ t,
2428
+ n,
2429
+ i
2430
+ ]),
2431
+ deleteResponseFeedback: O(async (e) => {
2432
+ if (!n) return;
2433
+ let r = e.feedback ? { ...e.feedback } : null;
2434
+ G.getState().patchMessages((t) => s(t, { messageId: e.id }));
2435
+ try {
2436
+ await i.deleteResponseFeedback(f({
2437
+ agentId: t,
2438
+ sessionId: n,
2439
+ message: e
2440
+ }));
2441
+ } catch (t) {
2442
+ console.error("Failed to delete response feedback:", t), G.getState().patchMessages((t) => c(t, {
2443
+ messageId: e.id,
2444
+ previousFeedback: r
2445
+ }));
2446
+ }
2447
+ }, [
2448
+ t,
2449
+ n,
2450
+ i
2451
+ ]),
2452
+ respondToApproval: O((e) => {
2453
+ !e.approvalRequestId || r || (G.getState().patchMessages((t) => t.map((t) => ({
2454
+ ...t,
2455
+ tools: t.tools ? Object.fromEntries(Object.entries(t.tools).map(([t, n]) => [t, n.approvalRequestId === e.approvalRequestId ? {
2456
+ ...n,
2457
+ approvalStatus: e.approve ? "approved" : "rejected"
2458
+ } : n])) : t.tools
2459
+ }))), G.getState().patchMessages((t) => [...t, {
2460
+ id: String(Date.now() + Math.random()),
2461
+ role: "system",
2462
+ content: e.approve ? "已批准工具调用,正在继续运行。" : "已拒绝工具调用,正在通知运行时。",
2463
+ timestamp: Date.now()
2464
+ }]), a("", [], [{
2465
+ type: "mcp_approval_response",
2466
+ approval_request_id: e.approvalRequestId,
2467
+ approve: e.approve
2468
+ }], e.previousResponseId));
2469
+ }, [r, a])
2470
+ };
2471
+ }
2472
+ //#endregion
2473
+ //#region src/utils/run-state.js
2474
+ function ln(e) {
2475
+ return String(e?.InvocationId || e?.invocation_id || e?.invocationId || "").trim();
2476
+ }
2477
+ function un(e) {
2478
+ let t = e?.Timestamp ?? e?.timestamp ?? e?.created_at ?? e?.CreatedAt;
2479
+ if (typeof t == "number" && Number.isFinite(t)) return t > 1e11 ? t : t * 1e3;
2480
+ if (typeof t == "string") {
2481
+ let e = Date.parse(t);
2482
+ return Number.isNaN(e) ? 0 : e;
2483
+ }
2484
+ return 0;
2485
+ }
2486
+ function dn(e) {
2487
+ return String(e?.EventType || e?.event_type || "").trim();
2488
+ }
2489
+ function fn(e = [], t = {}) {
2490
+ let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = Array.isArray(e) ? e : [], a = Number.isFinite(Number(t.now)) ? Number(t.now) : Date.now(), o = Number.isFinite(Number(t.staleAfterMs)) ? Number(t.staleAfterMs) : 1800 * 1e3;
2491
+ for (let e of i) {
2492
+ let t = ln(e);
2493
+ if (!t) continue;
2494
+ let i = un(e);
2495
+ i && r.set(t, Math.max(r.get(t) || 0, i)), dn(e) === "run_status" && n.set(t, String(e?.Content?.status || e?.content?.status || "").trim());
2496
+ }
2497
+ return Array.from(n.entries()).filter(([e, t]) => {
2498
+ let n = r.get(e) || 0, i = n > 0 && a - n > o;
2499
+ return t === "in_progress" && !i;
2500
+ }).map(([e]) => e);
2501
+ }
2502
+ //#endregion
2503
+ //#region src/hooks/useSessionLifecycle.ts
2504
+ var pn = 9e4;
2505
+ function mn(e) {
2506
+ if (e.EventType !== "run_status") return null;
2507
+ let t = String(e.Content?.status || "").trim().toLowerCase();
2508
+ return t === "completed" ? {
2509
+ status: "completed",
2510
+ phase: "后台长任务已完成"
2511
+ } : t === "cancelled" || t === "canceled" || t === "aborted" ? {
2512
+ status: "stopped",
2513
+ phase: "后台长任务已取消"
2514
+ } : t === "failed" || t === "error" ? {
2515
+ status: "failed",
2516
+ phase: "后台长任务失败"
2517
+ } : null;
2518
+ }
2519
+ function hn(e) {
2520
+ let { agentId: t, api: n, isMobile: r, resetCompaction: i, uiCapabilities: a, disconnectRun: o } = e, s = A(e.currentSessionId), c = A(e.agentId), l = A(null), d = A(null), f = A(null), p = O(async (e, t, r) => {
2521
+ let i = r.filter((e) => S(e, !1, !1));
2522
+ if (!i.length) return;
2523
+ let a = await Promise.all(i.map(async (r) => {
2524
+ try {
2525
+ let i = await n.getResponseFeedback({
2526
+ AgentId: e,
2527
+ SessionId: t,
2528
+ ResponseId: r.responseId,
2529
+ EventId: r.eventId
2530
+ }), a = i?.Feedback ? C(i.Feedback) : null;
2531
+ return a ? {
2532
+ messageId: r.id,
2533
+ feedback: a
2534
+ } : null;
2535
+ } catch (e) {
2536
+ return console.error("Failed to load response feedback:", e), null;
2537
+ }
2538
+ }));
2539
+ if (s.current !== t) return;
2540
+ let o = new Map(a.filter((e) => !!e).map((e) => [e.messageId, e.feedback]));
2541
+ o.size && G.getState().patchMessages((e) => e.map((e) => o.has(e.id) ? {
2542
+ ...e,
2543
+ feedback: o.get(e.id)
2544
+ } : e));
2545
+ }, [n]), m = O(async (e) => {
2546
+ l.current?.abort();
2547
+ let t = new AbortController();
2548
+ l.current = t;
2549
+ let r = !1, i = !1, a = () => {
2550
+ l.current !== t || t.signal.aborted || t.abort();
2551
+ }, o = globalThis.setTimeout(() => {
2552
+ a();
2553
+ }, pn);
2554
+ try {
2555
+ let a = (await n.subscribeRunEvents({
2556
+ sessionId: e.sessionId,
2557
+ invocationId: e.invocationId,
2558
+ afterSeqId: e.afterSeqId
2559
+ }, { signal: t.signal })).getReader(), o = new TextDecoder(), s = "", c = Array.isArray(e.initialEvents) ? e.initialEvents : [];
2560
+ for (F.getState().setCurrentRunId(e.invocationId), F.getState().updateActivity({
2561
+ sessionId: e.sessionId,
2562
+ status: "running",
2563
+ phase: "后台长任务运行中",
2564
+ detail: e.invocationId,
2565
+ countEvent: !1
2566
+ }); !i;) {
2567
+ let { value: t, done: n } = await a.read();
2568
+ if (n) break;
2569
+ s += o.decode(t, { stream: !0 });
2570
+ let l = s.split("\n\n");
2571
+ s = l.pop() || "";
2572
+ for (let t of l) {
2573
+ if (!t.trim()) continue;
2574
+ let n = [];
2575
+ for (let e of t.split("\n")) e.startsWith("data:") && n.push(e.substring(5).trim());
2576
+ let a = n.join("\n").trim();
2577
+ if (!a || a === "[DONE]") {
2578
+ i = a === "[DONE]", r ||= i;
2579
+ continue;
2580
+ }
2581
+ try {
2582
+ let t = JSON.parse(a);
2583
+ c = Qt(c, [t]), i ||= en(t), r ||= i, t.EventType === "run_checkpoint" && X.getState().upsertSessionCheckpoint(e.sessionId, t);
2584
+ let n = mn(t);
2585
+ n && F.getState().updateActivity({
2586
+ sessionId: e.sessionId,
2587
+ status: n.status,
2588
+ phase: n.phase,
2589
+ detail: e.invocationId,
2590
+ countEvent: !1
2591
+ });
2592
+ let o = Zt(c);
2593
+ G.getState().setMessages(o);
2594
+ } catch (e) {
2595
+ console.warn("Failed to parse run event data", a, e);
2596
+ }
2597
+ }
2598
+ }
2599
+ } catch (e) {
2600
+ e instanceof DOMException && e.name === "AbortError" || console.error("Failed to subscribe run events:", e);
2601
+ } finally {
2602
+ globalThis.clearTimeout(o), l.current === t && (l.current = null), F.getState().setCurrentRunId(""), r && s.current === e.sessionId && d.current?.(e.sessionId), f.current?.(c.current, e.sessionId);
2603
+ }
2604
+ }, [n]), h = O(async (e) => {
2605
+ s.current = e, I.getState().setCurrentSessionId(e), i(), l.current?.abort(), r && _.getState().setMobileSidebarOpen(!1);
2606
+ try {
2607
+ let t = await n.listSessionEvents(e), r = N.getState().capabilities || a;
2608
+ r.RunLifecycle.Enabled && r.RunLifecycle.Checkpoints ? (n.listSessionCheckpoints({
2609
+ agentId: c.current,
2610
+ sessionId: e
2611
+ }).then((t) => {
2612
+ X.getState().setSessionCheckpoints(e, t.Checkpoints || []);
2613
+ }).catch((t) => {
2614
+ console.warn("[SessionLifecycle] checkpoint load failed:", t), X.getState().setSessionCheckpoints(e, []);
2615
+ }), n.listToolReceipts({
2616
+ agentId: c.current,
2617
+ sessionId: e
2618
+ }).then((t) => {
2619
+ X.getState().setSessionToolReceipts(e, t.ToolReceipts || []);
2620
+ }).catch((t) => {
2621
+ console.warn("[SessionLifecycle] tool receipt load failed:", t), X.getState().setSessionToolReceipts(e, []);
2622
+ })) : X.getState().clearSessionCheckpoints(e);
2623
+ let i = t;
2624
+ if (i?.Events) {
2625
+ let t = i.Events, n = Zt(t);
2626
+ G.getState().setMessages(n), p(c.current, e, n);
2627
+ let a = fn(t, {
2628
+ now: Date.now(),
2629
+ staleAfterMs: 1800 * 1e3
2630
+ }), o = $t(t);
2631
+ r.RunLifecycle.Enabled && r.RunLifecycle.Resume && a[0] && m({
2632
+ sessionId: e,
2633
+ invocationId: a[0],
2634
+ afterSeqId: o,
2635
+ initialEvents: t
2636
+ });
2637
+ } else G.getState().setMessages([]), X.getState().setSessionCheckpoints(e, []), X.getState().setSessionToolReceipts(e, []);
2638
+ } catch (e) {
2639
+ console.error("Failed to load session events:", e);
2640
+ }
2641
+ }, [
2642
+ n,
2643
+ r,
2644
+ p,
2645
+ i,
2646
+ m,
2647
+ a.RunLifecycle.Enabled,
2648
+ a.RunLifecycle.Checkpoints,
2649
+ a.RunLifecycle.Resume
2650
+ ]), g = O(async (e = "default-agent", t = null) => {
2651
+ try {
2652
+ let r = await n.listSessions(e), i = u(I.getState().sessions, r);
2653
+ I.getState().setSessions(i);
2654
+ let a = s.current, o = ye(i, a || t || _e(e));
2655
+ o && o !== a ? h(o) : !o && a && (s.current = null, I.getState().setCurrentSessionId(null), G.getState().setMessages([]), X.getState().clearSessionCheckpoints());
2656
+ } catch (e) {
2657
+ if (e instanceof je) return;
2658
+ console.error("Failed to fetch sessions:", e);
2659
+ }
2660
+ }, [n, h]);
2661
+ return k(() => {
2662
+ d.current = h;
2663
+ }, [h]), k(() => {
2664
+ f.current = g;
2665
+ }, [g]), {
2666
+ fetchSessions: g,
2667
+ loadSession: h,
2668
+ createNewSession: O(async () => {
2669
+ try {
2670
+ o?.();
2671
+ let e = (await n.createSession(t)).SessionId;
2672
+ e && (I.getState().upsertSessions([{
2673
+ SessionId: e,
2674
+ UpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
2675
+ }]), s.current = e, I.getState().setCurrentSessionId(e), G.getState().setMessages([]), X.getState().setSessionCheckpoints(e, []), X.getState().setSessionToolReceipts(e, []), r && (_.getState().setMobileSidebarOpen(!1), _.getState().setMobileActionsOpen(!1)), g(t, e));
2676
+ } catch (e) {
2677
+ if (e instanceof je) return;
2678
+ console.error("Failed to create session:", e);
2679
+ }
2680
+ }, [
2681
+ t,
2682
+ n,
2683
+ o,
2684
+ g,
2685
+ r
2686
+ ]),
2687
+ deleteSession: O(async (e) => {
2688
+ try {
2689
+ await n.deleteSession(e), I.getState().removeSession(e), s.current === e && (s.current = null, G.getState().setMessages([]), X.getState().clearSessionCheckpoints(e), I.getState().setCurrentSessionId(null), g(t));
2690
+ } catch (e) {
2691
+ if (e instanceof je) return;
2692
+ console.error("Failed to delete session", e);
2693
+ }
2694
+ }, [
2695
+ t,
2696
+ n,
2697
+ g
2698
+ ]),
2699
+ currentSessionIdRef: s,
2700
+ agentIdRef: c,
2701
+ runSubscriptionAbortRef: l
2702
+ };
2703
+ }
2704
+ //#endregion
2705
+ //#region src/components/chat/ConnectedSidebar.tsx
2706
+ function gn({ uiCapabilities: e, createNewSession: s, deleteSession: c, loadSession: u }) {
2707
+ let d = I((e) => e.sessions), f = I((e) => e.currentSessionId), p = _((e) => e.sidebarOpen), m = _((e) => e.mobileSidebarOpen), { isMobile: h } = Ae(), g = t(e), { desktopSidebarVisible: v } = L({
2708
+ isMobile: h,
2709
+ desktopSidebarOpen: p,
2710
+ mobileSidebarOpen: m
2711
+ });
2712
+ return g ? h ? /* @__PURE__ */ w(o, {
2713
+ open: m,
2714
+ onOpenChange: (e) => _.getState().setMobileSidebarOpen(e),
2715
+ children: /* @__PURE__ */ T(i, {
2716
+ side: "left",
2717
+ className: "w-[88vw] max-w-sm border-slate-200 bg-slate-50 p-0 dark:border-slate-800 dark:bg-slate-950",
2718
+ children: [
2719
+ /* @__PURE__ */ w(a, {
2720
+ className: "sr-only",
2721
+ children: "历史记录"
2722
+ }),
2723
+ /* @__PURE__ */ w(r, {
2724
+ className: "sr-only",
2725
+ children: "查看和切换历史对话。"
2726
+ }),
2727
+ /* @__PURE__ */ w(l, {
2728
+ sessions: d,
2729
+ currentSessionId: f,
2730
+ onCreateNewSession: s,
2731
+ onSelectSession: u,
2732
+ onDeleteSession: c,
2733
+ sessionTitle: b
2734
+ })
2735
+ ]
2736
+ })
2737
+ }) : /* @__PURE__ */ w("aside", {
2738
+ className: n("flex-shrink-0 overflow-hidden border-r border-slate-200 transition-[width] duration-300 ease-in-out dark:border-slate-800", v ? "w-[280px]" : "w-0 border-r-0"),
2739
+ children: /* @__PURE__ */ w(l, {
2740
+ sessions: d,
2741
+ currentSessionId: f,
2742
+ onCreateNewSession: s,
2743
+ onSelectSession: u,
2744
+ onDeleteSession: c,
2745
+ sessionTitle: b
2746
+ })
2747
+ }) : null;
2748
+ }
2749
+ //#endregion
2750
+ //#region src/components/ui/dialog.tsx
2751
+ var _n = j.Root, vn = j.Portal, yn = E.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ w(j.Overlay, {
2752
+ ref: r,
2753
+ className: n("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", e),
2754
+ ...t
2755
+ }));
2756
+ yn.displayName = j.Overlay.displayName;
2757
+ var bn = E.forwardRef(({ className: e, children: t, ...r }, i) => /* @__PURE__ */ T(vn, { children: [/* @__PURE__ */ w(yn, {}), /* @__PURE__ */ T(j.Content, {
2758
+ ref: i,
2759
+ className: n("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", e),
2760
+ ...r,
2761
+ children: [t, /* @__PURE__ */ T(j.Close, {
2762
+ className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
2763
+ children: [/* @__PURE__ */ w(ie, { className: "h-4 w-4" }), /* @__PURE__ */ w("span", {
2764
+ className: "sr-only",
2765
+ children: "Close"
2766
+ })]
2767
+ })]
2768
+ })] }));
2769
+ bn.displayName = j.Content.displayName;
2770
+ var xn = ({ className: e, ...t }) => /* @__PURE__ */ w("div", {
2771
+ className: n("flex flex-col space-y-1.5 text-center sm:text-left", e),
2772
+ ...t
2773
+ });
2774
+ xn.displayName = "DialogHeader";
2775
+ var Sn = ({ className: e, ...t }) => /* @__PURE__ */ w("div", {
2776
+ className: n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", e),
2777
+ ...t
2778
+ });
2779
+ Sn.displayName = "DialogFooter";
2780
+ var Cn = E.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ w(j.Title, {
2781
+ ref: r,
2782
+ className: n("text-lg font-semibold leading-none tracking-tight", e),
2783
+ ...t
2784
+ }));
2785
+ Cn.displayName = j.Title.displayName;
2786
+ var wn = E.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ w(j.Description, {
2787
+ ref: r,
2788
+ className: n("text-sm text-muted-foreground", e),
2789
+ ...t
2790
+ }));
2791
+ wn.displayName = j.Description.displayName;
2792
+ //#endregion
2793
+ //#region src/components/chat/AttachmentPreview.tsx
2794
+ function Tn(e, t) {
2795
+ if (!(!t || e)) return {
2796
+ width: `min(${t.width}px, calc(100vw - 5rem))`,
2797
+ height: `min(${t.height}px, calc(100vh - 9rem))`
2798
+ };
2799
+ }
2800
+ function En(e, t) {
2801
+ if (!(!t || e)) return { width: `min(${t.width + 32}px, calc(100vw - 3rem))` };
2802
+ }
2803
+ function Dn({ attachment: e, isMobile: t, previewImageSize: r, onClose: i, onImageLoad: a }) {
2804
+ return /* @__PURE__ */ w(_n, {
2805
+ open: !!e?.url,
2806
+ onOpenChange: (e) => !e && i(),
2807
+ children: /* @__PURE__ */ T(bn, {
2808
+ className: n("gap-0 overflow-hidden border-slate-700 bg-slate-950 p-0 text-slate-100 shadow-2xl [&>button]:right-3 [&>button]:top-3 [&>button]:rounded-md [&>button]:border [&>button]:border-slate-700 [&>button]:bg-slate-900/70 [&>button]:p-1.5 [&>button]:text-slate-200 [&>button]:opacity-100", t ? "left-0 top-0 h-[var(--app-height)] max-h-[var(--app-height)] w-screen max-w-none translate-x-0 translate-y-0 rounded-none border-0" : "max-h-[calc(100vh-2rem)] max-w-[calc(100vw-2rem)] rounded-2xl"),
2809
+ style: En(t, r),
2810
+ children: [/* @__PURE__ */ w("div", {
2811
+ className: "flex items-center gap-3 border-b border-slate-800 px-4 py-3 pr-16",
2812
+ children: /* @__PURE__ */ w(Cn, {
2813
+ className: "truncate text-sm font-medium",
2814
+ children: e?.name || "附件预览"
2815
+ })
2816
+ }), /* @__PURE__ */ w("div", {
2817
+ className: n("flex items-center justify-center overflow-auto bg-slate-950", t ? "h-full p-4 pb-[calc(var(--safe-area-bottom)+1rem)]" : "max-h-[calc(100vh-7rem)] p-4"),
2818
+ children: e ? e.type.startsWith("image/") ? /* @__PURE__ */ w("img", {
2819
+ src: e.url,
2820
+ alt: e.name,
2821
+ className: n("object-contain", t ? "h-auto max-h-full w-full max-w-full" : "h-auto w-auto max-h-[calc(100vh-9rem)] max-w-[calc(100vw-5rem)]"),
2822
+ style: Tn(t, r),
2823
+ onLoad: (e) => {
2824
+ let t = e.currentTarget;
2825
+ a({
2826
+ width: t.naturalWidth,
2827
+ height: t.naturalHeight
2828
+ });
2829
+ }
2830
+ }) : /* @__PURE__ */ w("iframe", {
2831
+ src: e.url,
2832
+ title: e.name,
2833
+ className: "h-full min-h-[24rem] w-full rounded-xl border border-slate-800 bg-white"
2834
+ }) : null
2835
+ })]
2836
+ })
2837
+ });
2838
+ }
2839
+ //#endregion
2840
+ //#region src/utils/context.js
2841
+ function On(e) {
2842
+ if (typeof e == "number" && Number.isFinite(e) && e > 0) return e;
2843
+ if (typeof e == "string" && e.trim()) {
2844
+ let t = Number(e);
2845
+ if (Number.isFinite(t) && t > 0) return t;
2846
+ }
2847
+ return null;
2848
+ }
2849
+ function kn(e) {
2850
+ return /[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/u.test(e);
2851
+ }
2852
+ function $(e) {
2853
+ let t = String(e || "").trim();
2854
+ if (!t) return 0;
2855
+ let n = 0, r = 0;
2856
+ for (let e of t) {
2857
+ if (kn(e)) {
2858
+ n += 1;
2859
+ continue;
2860
+ }
2861
+ r += 1;
2862
+ }
2863
+ return Math.max(1, n + Math.ceil(r / 4));
2864
+ }
2865
+ function An(e) {
2866
+ if (!e) return 0;
2867
+ if (e.role === "system") return e.eventType === "context_checkpoint" ? $(e.summary || "") : 0;
2868
+ let t = $(e.content || "");
2869
+ return e.tools && (t += Object.values(e.tools).reduce((e, t) => e + $(t?.name || "") + $(t?.args || "") + $(t?.output || ""), 0)), t;
2870
+ }
2871
+ function jn(e) {
2872
+ return e ? On(e.context_window_tokens) ?? On(e?.limits?.context_window_tokens) : null;
2873
+ }
2874
+ function Mn(e) {
2875
+ return e ? On(e.auto_compact_threshold_percentage) ?? 84 : 84;
2876
+ }
2877
+ function Nn({ messages: e, draftInput: t, selectedModel: n }) {
2878
+ let r = jn(n);
2879
+ if (!r) return null;
2880
+ let i = [...e || []].reverse().find((e) => e?.role === "system" && e?.eventType === "context_checkpoint" && e?.status === "running");
2881
+ if (i) {
2882
+ let e = An(i);
2883
+ return {
2884
+ label: "正在压缩上下文…",
2885
+ phase: "compressing",
2886
+ usedTokens: e,
2887
+ contextWindowTokens: r,
2888
+ percent: Math.min(100, Math.max(0, Math.round(e / r * 100)))
2889
+ };
2890
+ }
2891
+ let a = (e || []).reduce((e, t) => e + An(t), 0) + $(t || "");
2892
+ if (a <= 0) return null;
2893
+ let o = Math.min(100, Math.max(0, Math.round(a / r * 100)));
2894
+ return o >= Mn(n) ? {
2895
+ label: `估算上下文 ${o}% · 即将压缩`,
2896
+ phase: "warning",
2897
+ percent: o,
2898
+ usedTokens: a,
2899
+ contextWindowTokens: r
2900
+ } : {
2901
+ label: `估算上下文 ${o}%`,
2902
+ phase: "normal",
2903
+ percent: o,
2904
+ usedTokens: a,
2905
+ contextWindowTokens: r
2906
+ };
2907
+ }
2908
+ //#endregion
2909
+ //#region src/components/chat/ConnectedMessageList.tsx
2910
+ function Pn({ agentName: e, isMobile: t, onDeleteFeedback: n, onSubmitFeedback: r, onRespondToApproval: i, onStopGeneration: a, onCancelRemote: o, checkpointResumeEnabled: s = !1, onResumeCheckpoint: c }) {
2911
+ let l = G((e) => e.messages), u = I((e) => e.currentSessionId), d = F((e) => !!(e.getSessionActivity(u) && e.isSessionStreaming(u))), f = F((e) => e.getSessionActivity(u)), p = X((e) => e.getSessionCheckpoints(u)), h = _((e) => e.input), g = P((e) => e.availableModels), v = P((e) => e.selectedModel), ee = _((e) => e.previewAttachment), te = _((e) => e.previewImageSize), y = A(null), b = A(!0), x = A(!1), ne = A(0), S = A(d), C = se(() => g.find((e) => e.id === v) || null, [g, v]), re = se(() => Nn({
2912
+ messages: l,
2913
+ draftInput: h,
2914
+ selectedModel: C
2915
+ }), [
2916
+ h,
2917
+ l,
2918
+ C
2919
+ ]);
2920
+ return k(() => {
2921
+ S.current = d;
2922
+ }, [d]), k(() => {
2923
+ let e = y.current;
2924
+ if (!e) return;
2925
+ let t = () => {
2926
+ let t = e.scrollHeight - e.scrollTop - e.clientHeight, n = e.scrollTop < ne.current - 2;
2927
+ if (ne.current = e.scrollTop, S.current && n) {
2928
+ x.current = !0, b.current = !1;
2929
+ return;
2930
+ }
2931
+ if (x.current) {
2932
+ let e = t <= 12;
2933
+ x.current = !e, b.current = e;
2934
+ return;
2935
+ }
2936
+ b.current = t < 96;
2937
+ };
2938
+ return t(), e.addEventListener("scroll", t, { passive: !0 }), () => e.removeEventListener("scroll", t);
2939
+ }, []), k(() => {
2940
+ let e = y.current;
2941
+ !e || !b.current || (e.scrollTop = e.scrollHeight, ne.current = e.scrollTop);
2942
+ }, [l, d]), /* @__PURE__ */ T(ae, { children: [/* @__PURE__ */ w(m, {
2943
+ agentName: e,
2944
+ isMobile: t,
2945
+ isStreaming: d,
2946
+ activity: f,
2947
+ contextIndicator: re,
2948
+ messages: l,
2949
+ onDeleteFeedback: n,
2950
+ onOpenAttachmentPreview: (e) => {
2951
+ _.getState().setPreviewAttachment(e), _.getState().setPreviewImageSize(null);
2952
+ },
2953
+ onRespondToApproval: i,
2954
+ onSubmitFeedback: r,
2955
+ onStopGeneration: a,
2956
+ onCancelRemote: o,
2957
+ checkpoints: s ? p : [],
2958
+ onResumeCheckpoint: c,
2959
+ scrollRef: y
2960
+ }), /* @__PURE__ */ w(Dn, {
2961
+ attachment: ee,
2962
+ isMobile: t,
2963
+ previewImageSize: te,
2964
+ onClose: () => {
2965
+ _.getState().setPreviewAttachment(null), _.getState().setPreviewImageSize(null);
2966
+ },
2967
+ onImageLoad: (e) => _.getState().setPreviewImageSize(e)
2968
+ })] });
2969
+ }
2970
+ //#endregion
2971
+ //#region src/utils/attachment.ts
2972
+ function Fn(e) {
2973
+ return [
2974
+ e.name,
2975
+ e.size,
2976
+ e.lastModified,
2977
+ e.type
2978
+ ].join(":");
2979
+ }
2980
+ function In(e, t) {
2981
+ let n = /* @__PURE__ */ new Map();
2982
+ for (let t of e) n.set(Fn(t), t);
2983
+ for (let e of t) n.set(Fn(e), e);
2984
+ return Array.from(n.values());
2985
+ }
2986
+ function Ln(e) {
2987
+ return Array.from(e.clipboardData.items || []).filter((e) => e.kind === "file").map((e) => e.getAsFile()).filter((e) => !!e);
2988
+ }
2989
+ //#endregion
2990
+ //#region src/components/chat/ConnectedComposer.tsx
2991
+ function Rn({ composerMaxHeight: e, submitDraft: t, stopGeneration: n, cancelRemote: r, isMobile: i }) {
2992
+ let a = _((e) => e.input), o = _((e) => e.attachments), s = I((e) => e.currentSessionId), c = F((e) => !!(e.getSessionActivity(s) && e.isSessionStreaming(s))), l = _((e) => e.queuedDrafts), u = G((e) => e.messages), d = P((e) => e.availableModels), f = P((e) => e.selectedModel), m = A(null), h = A(null), g = se(() => d.find((e) => e.id === f) || null, [d, f]), v = se(() => Nn({
2993
+ messages: u,
2994
+ draftInput: a,
2995
+ selectedModel: g
2996
+ }), [
2997
+ a,
2998
+ u,
2999
+ g
3000
+ ]), ee = O((e, n) => {
3001
+ !e && n.length === 0 || (_.getState().setInput(""), _.getState().setAttachments([]), t(e, n));
3002
+ }, [t]);
3003
+ k(() => {
3004
+ h.current && (h.current.style.height = "auto", h.current.style.height = `${Math.min(h.current.scrollHeight, e)}px`);
3005
+ }, [a, e]);
3006
+ let te = (t) => {
3007
+ _.getState().setInput(t.target.value), t.target.style.height = "auto", t.target.style.height = `${Math.min(t.target.scrollHeight, e)}px`;
3008
+ }, y = (e) => {
3009
+ e.length && _.getState().setAttachments((t) => In(t, e));
3010
+ };
3011
+ return /* @__PURE__ */ w(p, {
3012
+ attachments: o,
3013
+ composerContextIndicator: v,
3014
+ composerMaxHeight: e,
3015
+ fileInputRef: m,
3016
+ input: a,
3017
+ isMobile: i,
3018
+ isStreaming: c,
3019
+ queuedDrafts: l,
3020
+ onAppendAttachments: y,
3021
+ onInputChange: te,
3022
+ onPaste: (e) => {
3023
+ let t = Ln(e);
3024
+ t.length && (e.preventDefault(), e.stopPropagation(), y(t));
3025
+ },
3026
+ onRemoveAttachment: (e) => _.getState().setAttachments((t) => t.filter((t, n) => n !== e)),
3027
+ onStopGeneration: n,
3028
+ onCancelRemote: r,
3029
+ onSubmit: ee,
3030
+ textareaRef: h
3031
+ });
3032
+ }
3033
+ //#endregion
3034
+ //#region src/api/session.ts
3035
+ async function zn(e, t) {
3036
+ return (await W("ListSessions", { AgentId: e }, t)).Sessions ?? [];
3037
+ }
3038
+ async function Bn(e, t) {
3039
+ return (await W("CreateSession", { AgentId: e }, t)).Session;
3040
+ }
3041
+ async function Vn(e, t) {
3042
+ await W("DeleteSession", { SessionId: e }, t);
3043
+ }
3044
+ //#endregion
3045
+ //#region src/api/events.ts
3046
+ async function Hn(e) {
3047
+ return W("ListSessionEvents", { SessionId: e });
3048
+ }
3049
+ //#endregion
3050
+ //#region src/api/run.ts
3051
+ async function Un(e, t) {
3052
+ return Fe("RunAgent", e, t);
3053
+ }
3054
+ //#endregion
3055
+ //#region src/api/checkpoints.ts
3056
+ async function Wn(e, t) {
3057
+ let n = {
3058
+ AgentId: e.agentId,
3059
+ SessionId: e.sessionId
3060
+ };
3061
+ return e.runId && (n.RunId = e.runId), W("ListSessionCheckpoints", n, t);
3062
+ }
3063
+ async function Gn(e, t) {
3064
+ return W("PreviewCheckpointResume", {
3065
+ AgentId: e.agentId,
3066
+ SessionId: e.sessionId,
3067
+ RunId: e.runId,
3068
+ CheckpointId: e.checkpointId
3069
+ }, t);
3070
+ }
3071
+ async function Kn(e, t) {
3072
+ let n = {
3073
+ AgentId: e.agentId,
3074
+ SessionId: e.sessionId
3075
+ };
3076
+ return e.runId && (n.RunId = e.runId), e.checkpointId && (n.CheckpointId = e.checkpointId), W("ListToolReceipts", n, t);
3077
+ }
3078
+ async function qn(e, t) {
3079
+ let n = {
3080
+ AgentId: e.agentId,
3081
+ SessionId: e.sessionId,
3082
+ RunId: e.runId,
3083
+ CheckpointId: e.checkpointId,
3084
+ Stream: !0
3085
+ };
3086
+ return e.resumeAttemptId && (n.ResumeAttemptId = e.resumeAttemptId), e.invocationId && (n.InvocationId = e.invocationId), Fe("ResumeRun", n, t);
3087
+ }
3088
+ //#endregion
3089
+ //#region src/api/workspace.ts
3090
+ async function Jn(e, t, n) {
3091
+ return W("ListWorkspaceFiles", {
3092
+ AgentId: e,
3093
+ Path: t,
3094
+ Recursive: n
3095
+ });
3096
+ }
3097
+ async function Yn(e) {
3098
+ return Ne("AddWorkspaceFile", e);
3099
+ }
3100
+ async function Xn(e, t) {
3101
+ return W("DeleteWorkspaceFile", {
3102
+ AgentId: e,
3103
+ Path: t
3104
+ });
3105
+ }
3106
+ async function Zn(e, t, n) {
3107
+ return Pe("GetWorkspaceFileContent", {
3108
+ AgentId: e,
3109
+ FilePath: t
3110
+ }, {
3111
+ signal: n?.signal,
3112
+ asText: n?.asText ?? !0
3113
+ });
3114
+ }
3115
+ //#endregion
3116
+ //#region src/api/upload.ts
3117
+ async function Qn(e, t) {
3118
+ return Ne("UploadFile", e, t);
3119
+ }
3120
+ //#endregion
3121
+ //#region src/core/api/facade.ts
3122
+ var $n = class {
3123
+ async listSessions(e, t) {
3124
+ return await zn(e, t);
3125
+ }
3126
+ async createSession(e, t) {
3127
+ return { SessionId: (await Bn(e, t)).SessionId };
3128
+ }
3129
+ async deleteSession(e, t) {
3130
+ await Vn(e, t);
3131
+ }
3132
+ async listSessionEvents(e) {
3133
+ return Hn(e);
3134
+ }
3135
+ async listSessionCheckpoints(e, t) {
3136
+ return Wn(e, t);
3137
+ }
3138
+ async previewCheckpointResume(e, t) {
3139
+ return Gn(e, t);
3140
+ }
3141
+ async listToolReceipts(e, t) {
3142
+ return Kn(e, t);
3143
+ }
3144
+ async runAgent(e, t) {
3145
+ return Un(e, t);
3146
+ }
3147
+ async resumeRun(e, t) {
3148
+ return qn(e, t);
3149
+ }
3150
+ async subscribeRunEvents(e, t) {
3151
+ return Ie("SubscribeRunEvents", {
3152
+ SessionId: e.sessionId,
3153
+ InvocationId: e.invocationId,
3154
+ AfterSeqId: String(e.afterSeqId)
3155
+ }, t);
3156
+ }
3157
+ async cancelRun(e, t, n) {
3158
+ return W("CancelRun", {
3159
+ AgentId: e,
3160
+ InvocationId: t
3161
+ }, n);
3162
+ }
3163
+ async getResponseFeedback(e, t) {
3164
+ return W("GetResponseFeedback", e, t);
3165
+ }
3166
+ async upsertResponseFeedback(e, t) {
3167
+ return W("UpsertResponseFeedback", e, t);
3168
+ }
3169
+ async deleteResponseFeedback(e, t) {
3170
+ await W("DeleteResponseFeedback", e, t);
3171
+ }
3172
+ async listWorkspaceFiles(e, t, n) {
3173
+ return Jn(e, t, n);
3174
+ }
3175
+ async addWorkspaceFile(e) {
3176
+ return Yn(e);
3177
+ }
3178
+ async deleteWorkspaceFile(e, t) {
3179
+ await Xn(e, t);
3180
+ }
3181
+ async getWorkspaceFileContent(e, t, n) {
3182
+ return Zn(e, t, n);
3183
+ }
3184
+ async listAgentModels(e) {
3185
+ return Re(e);
3186
+ }
3187
+ async getAgentUiBootstrap() {
3188
+ return Le();
3189
+ }
3190
+ async uploadFile(e, t) {
3191
+ return Qn(e, t);
3192
+ }
3193
+ }, er = new $n(), tr = D.lazy(() => import("./ArtifactsPanel-DFx9Y2xE.js").then((e) => ({ default: e.ArtifactsPanel })));
3194
+ function nr({ apiAdapter: e, routeShell: n } = {}) {
3195
+ let r = e || er, i = N((e) => e.agentId), a = I((e) => e.currentSessionId), o = F((e) => e.isStreaming), s = _((e) => e.sidebarOpen), c = _((e) => e.mobileSidebarOpen), l = _((e) => e.mobileActionsOpen), u = N((e) => e.agentName), d = P((e) => e.selectedModel), f = P((e) => e.availableModels), p = P((e) => e.modelSource), m = P((e) => e.modelCatalogLoaded), h = P((e) => e.thinkingMode), v = N((e) => e.agentFramework), b = N((e) => e.workspaceFiles), x = N((e) => e.accessMode), S = _((e) => e.workspacePanelOpen), C = _((e) => e.workspacePanelWidth), ie = _((e) => e.workspacePanelFullscreen), E = N((e) => e.apiFormats), D = N((e) => e.capabilities), se = re((e) => e.visible && !!e.content), ce = A([]), j = A(null), { isMobile: M, viewportHeight: le } = Ae(), ue = he({
3196
+ isMobile: M,
3197
+ viewportHeight: le
3198
+ }), { fetchSessions: de, loadSession: fe, createNewSession: pe, deleteSession: me, currentSessionIdRef: L, agentIdRef: R, runSubscriptionAbortRef: z } = hn({
3199
+ agentId: i,
3200
+ currentSessionId: a,
3201
+ isMobile: M,
3202
+ uiCapabilities: D,
3203
+ api: r,
3204
+ resetCompaction: () => {},
3205
+ disconnectRun: () => j.current?.()
3206
+ }), B = O((e) => {
3207
+ if (!e) return;
3208
+ let t = () => {
3209
+ de(R.current, e), L.current === e && !F.getState().isStreaming && fe(e);
3210
+ };
3211
+ queueMicrotask(t), window.setTimeout(t, 1800), window.setTimeout(t, 5e3);
3212
+ }, [
3213
+ R,
3214
+ L,
3215
+ de,
3216
+ fe
3217
+ ]), { submitDraft: ge, stopGeneration: _e, disconnectRun: ye, resumeCheckpoint: be } = sn({
3218
+ agentId: i,
3219
+ currentSessionId: a,
3220
+ agentFramework: v,
3221
+ apiFormats: E,
3222
+ selectedModel: d,
3223
+ thinkingMode: h,
3224
+ uiCapabilities: D,
3225
+ isMobile: M,
3226
+ api: r,
3227
+ currentSessionIdRef: L,
3228
+ agentIdRef: R,
3229
+ queuedDraftRef: ce,
3230
+ onRunSettled: B
3231
+ });
3232
+ k(() => {
3233
+ j.current = ye;
3234
+ }, [ye]);
3235
+ let xe = O(() => {
3236
+ z.current?.abort(), F.getState().stopActivity(), _e();
3237
+ }, [z, _e]), Se = O(async () => {
3238
+ let e = F.getState().currentRunId;
3239
+ if (e) try {
3240
+ await r.cancelRun(i, e), F.getState().updateActivity({
3241
+ sessionId: L.current,
3242
+ status: "waiting",
3243
+ phase: "取消请求已发送",
3244
+ detail: "等待运行时停在最近 checkpoint",
3245
+ countEvent: !1
3246
+ });
3247
+ } catch (e) {
3248
+ console.warn("[App] cancelRun failed:", e), F.getState().updateActivity({
3249
+ sessionId: L.current,
3250
+ status: "failed",
3251
+ phase: "取消请求失败",
3252
+ detail: e instanceof Error ? e.message : String(e),
3253
+ countEvent: !1
3254
+ });
3255
+ }
3256
+ B(L.current);
3257
+ }, [
3258
+ r,
3259
+ i,
3260
+ L,
3261
+ B
3262
+ ]), { submitResponseFeedback: Ce, deleteResponseFeedback: Te, respondToApproval: De } = cn({
3263
+ agentId: i,
3264
+ currentSessionId: a,
3265
+ isStreaming: o,
3266
+ api: r,
3267
+ submitDraft: ge
3268
+ });
3269
+ Ve({ fetchSessions: de }), k(() => {
3270
+ R.current = i, L.current = a, ve(i, a);
3271
+ }, [
3272
+ i,
3273
+ a,
3274
+ R,
3275
+ L
3276
+ ]), k(() => {
3277
+ M ? _.getState().setWorkspacePanelFullscreen(!1) : (_.getState().setMobileSidebarOpen(!1), _.getState().setMobileActionsOpen(!1));
3278
+ }, [M]), k(() => {
3279
+ S || _.getState().setWorkspacePanelFullscreen(!1);
3280
+ }, [S]), k(() => () => {
3281
+ z.current?.abort();
3282
+ }, [z]);
3283
+ let Oe = t(D), ke = !!D.Thinking, V = g({
3284
+ workspaceFiles: b,
3285
+ accessMode: x
3286
+ }), je = ee({ isMobile: M }), H = we({
3287
+ capability: D.NativeDashboard,
3288
+ agentFramework: v,
3289
+ accessMode: x,
3290
+ origin: window.location.origin
3291
+ }), Me = !Oe, U = v === "openclaw" ? "OpenClaw" : v === "hermes" ? "Hermes" : "原生运行时", W = (f.find((e) => e.id === d) || null)?.display_name || d || "", Ne = !M && s && Oe, Pe = /* @__PURE__ */ T("div", {
3292
+ className: "flex h-[var(--app-height)] min-h-[var(--app-height)] overflow-hidden bg-white font-sans text-slate-800 dark:bg-slate-900 dark:text-slate-200",
3293
+ children: [
3294
+ /* @__PURE__ */ w(gn, {
3295
+ uiCapabilities: D,
3296
+ createNewSession: pe,
3297
+ deleteSession: me,
3298
+ loadSession: fe
3299
+ }),
3300
+ /* @__PURE__ */ T("main", {
3301
+ className: "relative flex min-w-0 flex-1 flex-col bg-white dark:bg-slate-900",
3302
+ children: [/* @__PURE__ */ w(ne, {
3303
+ agentName: u,
3304
+ currentSessionId: a,
3305
+ nativeLauncherMode: Me,
3306
+ isMobile: M,
3307
+ sidebarOpen: s,
3308
+ mobileSidebarOpen: c,
3309
+ onToggleSidebar: () => {
3310
+ M ? _.getState().toggleMobileSidebar() : _.getState().toggleSidebar();
3311
+ },
3312
+ availableModels: f,
3313
+ selectedModel: d,
3314
+ onSelectModel: (e) => {
3315
+ P.getState().setSelectedModel(e), M && _.getState().setMobileActionsOpen(!1);
3316
+ },
3317
+ selectedModelLabel: W,
3318
+ modelCatalogLoaded: m,
3319
+ modelSource: p,
3320
+ thinkingEnabled: ke,
3321
+ thinkingMode: h,
3322
+ onSelectThinkingMode: (e) => P.getState().setThinkingMode(Ee(e)),
3323
+ mobileActionsOpen: l,
3324
+ onMobileActionsOpenChange: (e) => _.getState().setMobileActionsOpen(e),
3325
+ workspaceEnabled: V,
3326
+ onOpenWorkspace: () => _.getState().setWorkspacePanelOpen(!0),
3327
+ nativeManagementLink: H,
3328
+ nativeTerminal: D.NativeTerminal
3329
+ }), Me ? /* @__PURE__ */ w(te, {
3330
+ productLabel: U,
3331
+ nativeManagementLink: H,
3332
+ nativeTerminal: D.NativeTerminal,
3333
+ workspaceEnabled: V,
3334
+ onOpenWorkspace: () => _.getState().setWorkspacePanelOpen(!0)
3335
+ }) : /* @__PURE__ */ T(ae, { children: [/* @__PURE__ */ w(Pn, {
3336
+ agentName: u,
3337
+ isMobile: M,
3338
+ onDeleteFeedback: Te,
3339
+ onSubmitFeedback: Ce,
3340
+ onRespondToApproval: De,
3341
+ onStopGeneration: xe,
3342
+ onCancelRemote: D.StopRun ? Se : void 0,
3343
+ checkpointResumeEnabled: D.RunLifecycle.Enabled && D.RunLifecycle.Checkpoints && D.RunLifecycle.CheckpointResume,
3344
+ onResumeCheckpoint: be
3345
+ }), /* @__PURE__ */ w(Rn, {
3346
+ composerMaxHeight: ue,
3347
+ submitDraft: ge,
3348
+ stopGeneration: xe,
3349
+ cancelRemote: D.StopRun ? Se : void 0,
3350
+ isMobile: M
3351
+ })] })]
3352
+ }),
3353
+ /* @__PURE__ */ w(y, {
3354
+ agentId: i,
3355
+ capability: b,
3356
+ workspacePanelOpen: S,
3357
+ workspacePanelWidth: C,
3358
+ workspacePanelFullscreen: ie,
3359
+ isMobile: M,
3360
+ workspaceEnabled: V,
3361
+ workspaceFiles: b,
3362
+ workspacePanelPresentation: je,
3363
+ closeWorkspacePanel: () => {
3364
+ _.getState().setWorkspacePanelFullscreen(!1), _.getState().setWorkspacePanelOpen(!1);
3365
+ },
3366
+ handleWorkspacePanelResizeStart: (e) => {
3367
+ if (ie || M) return;
3368
+ e.preventDefault();
3369
+ let t = e.clientX, n = C, r = Oe && Ne ? 280 : 0, i = document.body.style.cursor, a = document.body.style.userSelect;
3370
+ document.body.style.cursor = "col-resize", document.body.style.userSelect = "none";
3371
+ let o = (e) => {
3372
+ let i = n + t - e.clientX;
3373
+ _.getState().setWorkspacePanelWidth(dt(i, window.innerWidth, r));
3374
+ }, s = () => {
3375
+ document.body.style.cursor = i, document.body.style.userSelect = a, window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", s), window.removeEventListener("pointercancel", s);
3376
+ };
3377
+ window.addEventListener("pointermove", o), window.addEventListener("pointerup", s), window.addEventListener("pointercancel", s);
3378
+ },
3379
+ api: r
3380
+ }),
3381
+ se && /* @__PURE__ */ w(oe, {
3382
+ fallback: null,
3383
+ children: /* @__PURE__ */ w(tr, {})
3384
+ })
3385
+ ]
3386
+ });
3387
+ return n ? /* @__PURE__ */ w(n, { children: Pe }) : Pe;
3388
+ }
3389
+ //#endregion
3390
+ //#region src/core/transport/sse-transport.ts
3391
+ function rr(e, t) {
3392
+ if (e.eventName === "__ping__") {
3393
+ F.getState().updateActivity({ countEvent: !1 });
3394
+ return;
3395
+ }
3396
+ t.onEvent(e);
3397
+ }
3398
+ var ir = class {
3399
+ protocol = "sse-post";
3400
+ async connect(e, t) {
3401
+ let n = (await Fe(e.action, e.body || {}, { signal: e.signal })).getReader(), r = new TextDecoder(), i = "", a = !1;
3402
+ return (async () => {
3403
+ try {
3404
+ for (; !a;) {
3405
+ let { value: e, done: a } = await n.read();
3406
+ if (a) break;
3407
+ i += r.decode(e, { stream: !0 });
3408
+ let { chunks: o, remainder: s } = st(i);
3409
+ i = s;
3410
+ for (let e of o) {
3411
+ if (!e.trim()) continue;
3412
+ let n = ot(e);
3413
+ for (let e of n) {
3414
+ if (e.eventName === "__done__") {
3415
+ t.onComplete();
3416
+ return;
3417
+ }
3418
+ rr(e, t);
3419
+ }
3420
+ }
3421
+ }
3422
+ t.onComplete();
3423
+ } catch (e) {
3424
+ a || t.onError(e instanceof Error ? e : Error(String(e)));
3425
+ }
3426
+ })(), () => {
3427
+ a = !0, n.cancel().catch(() => {});
3428
+ };
3429
+ }
3430
+ }, ar = class {
3431
+ protocol = "sse-get";
3432
+ async connect(e, t) {
3433
+ let n = (await Ie(e.action, e.params || {}, { signal: e.signal })).getReader(), r = new TextDecoder(), i = "", a = !1;
3434
+ return (async () => {
3435
+ try {
3436
+ for (; !a;) {
3437
+ let { value: e, done: a } = await n.read();
3438
+ if (a) break;
3439
+ i += r.decode(e, { stream: !0 });
3440
+ let { chunks: o, remainder: s } = st(i);
3441
+ i = s;
3442
+ for (let e of o) {
3443
+ if (!e.trim()) continue;
3444
+ let n = ot(e);
3445
+ for (let e of n) {
3446
+ if (e.eventName === "__done__") {
3447
+ t.onComplete();
3448
+ return;
3449
+ }
3450
+ rr(e, t);
3451
+ }
3452
+ }
3453
+ }
3454
+ t.onComplete();
3455
+ } catch (e) {
3456
+ a || t.onError(e instanceof Error ? e : Error(String(e)));
3457
+ }
3458
+ })(), () => {
3459
+ a = !0, n.cancel().catch(() => {});
3460
+ };
3461
+ }
3462
+ };
3463
+ //#endregion
3464
+ export { nr as AgentWorkbench, $n as ApiFacadeImpl, _t as RunEngineImpl, ar as SseGetTransport, ir as SsePostTransport, it as createProtocol };