@prismshadow/penguin-server 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/README.md +3 -0
  2. package/dist/api/types.d.ts +552 -49
  3. package/dist/chunk-KQQ3HSTK.js +568 -0
  4. package/dist/chunk-KQQ3HSTK.js.map +1 -0
  5. package/dist/hmr/manifest.d.ts +54 -0
  6. package/dist/hmr/manifest.js +27 -0
  7. package/dist/hmr/manifest.js.map +1 -0
  8. package/dist/index.js +4495 -1041
  9. package/dist/index.js.map +1 -1
  10. package/dist/reset-admin-password.d.ts +28 -0
  11. package/dist/reset-admin-password.js +39 -0
  12. package/dist/reset-admin-password.js.map +1 -0
  13. package/package.json +15 -3
  14. package/web-dist/assets/addon-fit-ClUHZ6NU.js +1 -0
  15. package/web-dist/assets/addon-web-links-BKMSMMvN.js +1 -0
  16. package/web-dist/assets/cpp-DIPi6g--.js +1 -0
  17. package/web-dist/assets/highlighter-Cp5vYdaX.js +152 -0
  18. package/web-dist/assets/index-BJNmFD1m.js +187 -0
  19. package/web-dist/assets/index-BneOZQwC.css +1 -0
  20. package/web-dist/assets/ruby-B13GW9FM.js +1 -0
  21. package/web-dist/assets/xterm-j28bzvOQ.js +9 -0
  22. package/web-dist/index.html +2 -2
  23. package/web-dist/assets/abap-BdImnpbu.js +0 -1
  24. package/web-dist/assets/actionscript-3-CoDkCxhg.js +0 -1
  25. package/web-dist/assets/ada-bCR0ucgS.js +0 -1
  26. package/web-dist/assets/andromeeda-C4gqWexZ.js +0 -1
  27. package/web-dist/assets/angular-html-DA-rfuFy.js +0 -1
  28. package/web-dist/assets/angular-ts-BrjP3tb8.js +0 -1
  29. package/web-dist/assets/apache-Pmp26Uib.js +0 -1
  30. package/web-dist/assets/apex-Dqspr-GT.js +0 -1
  31. package/web-dist/assets/apl-CORt7UWP.js +0 -1
  32. package/web-dist/assets/applescript-Co6uUVPk.js +0 -1
  33. package/web-dist/assets/ara-BRHolxvo.js +0 -1
  34. package/web-dist/assets/asciidoc-Ve4PFQV2.js +0 -1
  35. package/web-dist/assets/asm-D_Q5rh1f.js +0 -1
  36. package/web-dist/assets/astro-HNnZUWAn.js +0 -1
  37. package/web-dist/assets/aurora-x-D-2ljcwZ.js +0 -1
  38. package/web-dist/assets/awk-DMzUqQB5.js +0 -1
  39. package/web-dist/assets/ayu-dark-DYE7WIF3.js +0 -1
  40. package/web-dist/assets/ayu-light-BA47KaF1.js +0 -1
  41. package/web-dist/assets/ayu-mirage-32ctXXKs.js +0 -1
  42. package/web-dist/assets/ballerina-BFfxhgS-.js +0 -1
  43. package/web-dist/assets/bat-BkioyH1T.js +0 -1
  44. package/web-dist/assets/beancount-k_qm7-4y.js +0 -1
  45. package/web-dist/assets/berry-uYugtg8r.js +0 -1
  46. package/web-dist/assets/bibtex-CHM0blh-.js +0 -1
  47. package/web-dist/assets/bicep-Bmn6On1c.js +0 -1
  48. package/web-dist/assets/bird2-BIv1doCn.js +0 -1
  49. package/web-dist/assets/blade-2xfisSek.js +0 -1
  50. package/web-dist/assets/bsl-BO_Y6i37.js +0 -1
  51. package/web-dist/assets/c3-MRO5bC_T.js +0 -1
  52. package/web-dist/assets/cadence-Bv_4Rxtq.js +0 -1
  53. package/web-dist/assets/cairo-KRGpt6FW.js +0 -1
  54. package/web-dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
  55. package/web-dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
  56. package/web-dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
  57. package/web-dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
  58. package/web-dist/assets/clarity-D53aC0YG.js +0 -1
  59. package/web-dist/assets/clojure-P80f7IUj.js +0 -1
  60. package/web-dist/assets/cmake-D1j8_8rp.js +0 -1
  61. package/web-dist/assets/cobol-nBiQ_Alo.js +0 -1
  62. package/web-dist/assets/codeowners-Bp6g37R7.js +0 -1
  63. package/web-dist/assets/codeql-DsOJ9woJ.js +0 -1
  64. package/web-dist/assets/coffee-Ch7k5sss.js +0 -1
  65. package/web-dist/assets/common-lisp-Cg-RD9OK.js +0 -1
  66. package/web-dist/assets/coq-DkFqJrB1.js +0 -1
  67. package/web-dist/assets/cpp-UfJy6YNI.js +0 -1
  68. package/web-dist/assets/crystal-DGywbUpC.js +0 -1
  69. package/web-dist/assets/csharp-DSvCPggb.js +0 -1
  70. package/web-dist/assets/csv-fuZLfV_i.js +0 -1
  71. package/web-dist/assets/cue-D82EKSYY.js +0 -1
  72. package/web-dist/assets/cypher-COkxafJQ.js +0 -1
  73. package/web-dist/assets/d-85-TOEBH.js +0 -1
  74. package/web-dist/assets/dark-plus-C3mMm8J8.js +0 -1
  75. package/web-dist/assets/dart-bE4Kk8sk.js +0 -1
  76. package/web-dist/assets/dax-CEL-wOlO.js +0 -1
  77. package/web-dist/assets/desktop-BmXAJ9_W.js +0 -1
  78. package/web-dist/assets/docker-BcOcwvcX.js +0 -1
  79. package/web-dist/assets/dotenv-Da5cRb03.js +0 -1
  80. package/web-dist/assets/dracula-BzJJZx-M.js +0 -1
  81. package/web-dist/assets/dracula-soft-BXkSAIEj.js +0 -1
  82. package/web-dist/assets/dream-maker-BtqSS_iP.js +0 -1
  83. package/web-dist/assets/edge-FbVlp4U3.js +0 -1
  84. package/web-dist/assets/elixir-CkH2-t6x.js +0 -1
  85. package/web-dist/assets/elm-DbKCFpqz.js +0 -1
  86. package/web-dist/assets/emacs-lisp-CXvaQtF9.js +0 -1
  87. package/web-dist/assets/erb-Dm6A9KJ5.js +0 -1
  88. package/web-dist/assets/erlang-DsQrWhSR.js +0 -1
  89. package/web-dist/assets/everforest-dark-BgDCqdQA.js +0 -1
  90. package/web-dist/assets/everforest-light-C8M2exoo.js +0 -1
  91. package/web-dist/assets/fennel-BYunw83y.js +0 -1
  92. package/web-dist/assets/fish-BvzEVeQv.js +0 -1
  93. package/web-dist/assets/fluent-C4IJs8-o.js +0 -1
  94. package/web-dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
  95. package/web-dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
  96. package/web-dist/assets/fsharp-CXgrBDvD.js +0 -1
  97. package/web-dist/assets/gdresource-BOOCDP_w.js +0 -1
  98. package/web-dist/assets/gdscript-C5YyOfLZ.js +0 -1
  99. package/web-dist/assets/gdshader-DkwncUOv.js +0 -1
  100. package/web-dist/assets/genie-D0YGMca9.js +0 -1
  101. package/web-dist/assets/gherkin-DyxjwDmM.js +0 -1
  102. package/web-dist/assets/git-commit-F4YmCXRG.js +0 -1
  103. package/web-dist/assets/git-rebase-r7XF79zn.js +0 -1
  104. package/web-dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
  105. package/web-dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  106. package/web-dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  107. package/web-dist/assets/github-light-default-D7oLnXFd.js +0 -1
  108. package/web-dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  109. package/web-dist/assets/gleam-BspZqrRM.js +0 -1
  110. package/web-dist/assets/glimmer-js-ByusRIyA.js +0 -1
  111. package/web-dist/assets/glimmer-ts-BfAWNZQY.js +0 -1
  112. package/web-dist/assets/glsl-DplSGwfg.js +0 -1
  113. package/web-dist/assets/gn-n2N0HUVH.js +0 -1
  114. package/web-dist/assets/gnuplot-DdkO51Og.js +0 -1
  115. package/web-dist/assets/graphql-ChdNCCLP.js +0 -1
  116. package/web-dist/assets/groovy-gcz8RCvz.js +0 -1
  117. package/web-dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
  118. package/web-dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
  119. package/web-dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
  120. package/web-dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
  121. package/web-dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
  122. package/web-dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
  123. package/web-dist/assets/hack-DbPARsA_.js +0 -1
  124. package/web-dist/assets/haml-D5jkg6IW.js +0 -1
  125. package/web-dist/assets/handlebars-BpdQsYii.js +0 -1
  126. package/web-dist/assets/haskell-Df6bDoY_.js +0 -1
  127. package/web-dist/assets/haxe-CzTSHFRz.js +0 -1
  128. package/web-dist/assets/hcl-BWvSN4gD.js +0 -1
  129. package/web-dist/assets/hjson-D5-asLiD.js +0 -1
  130. package/web-dist/assets/hlsl-D3lLCCz7.js +0 -1
  131. package/web-dist/assets/horizon-BUw7H-hv.js +0 -1
  132. package/web-dist/assets/horizon-bright-CUuTKBJd.js +0 -1
  133. package/web-dist/assets/houston-DnULxvSX.js +0 -1
  134. package/web-dist/assets/html-derivative-DlHx6ybY.js +0 -1
  135. package/web-dist/assets/http-jrhK8wxY.js +0 -1
  136. package/web-dist/assets/hurl-irOxFIW8.js +0 -1
  137. package/web-dist/assets/hxml-Bvhsp5Yf.js +0 -1
  138. package/web-dist/assets/hy-DFXneXwc.js +0 -1
  139. package/web-dist/assets/imba-DGztddWO.js +0 -1
  140. package/web-dist/assets/index-B3puu-Hr.js +0 -153
  141. package/web-dist/assets/index-CaDuyrN0.css +0 -1
  142. package/web-dist/assets/index-rgHg3m6g.js +0 -181
  143. package/web-dist/assets/jinja-f2NsQr07.js +0 -1
  144. package/web-dist/assets/jison-wvAkD_A8.js +0 -1
  145. package/web-dist/assets/json5-C9tS-k6U.js +0 -1
  146. package/web-dist/assets/jsonc-Des-eS-w.js +0 -1
  147. package/web-dist/assets/jsonl-DcaNXYhu.js +0 -1
  148. package/web-dist/assets/jsonnet-DFQXde-d.js +0 -1
  149. package/web-dist/assets/jssm-C2t-YnRu.js +0 -1
  150. package/web-dist/assets/julia-D7OTSIA_.js +0 -1
  151. package/web-dist/assets/just-CUsbIsdP.js +0 -1
  152. package/web-dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  153. package/web-dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  154. package/web-dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
  155. package/web-dist/assets/kdl-DV7GczEv.js +0 -1
  156. package/web-dist/assets/kotlin-BdnUsdx6.js +0 -1
  157. package/web-dist/assets/kusto-wEQ09or8.js +0 -1
  158. package/web-dist/assets/laserwave-DUszq2jm.js +0 -1
  159. package/web-dist/assets/latex-CaSxy8MP.js +0 -1
  160. package/web-dist/assets/lean-BZvkOJ9d.js +0 -1
  161. package/web-dist/assets/less-B1dDrJ26.js +0 -1
  162. package/web-dist/assets/light-plus-B7mTdjB0.js +0 -1
  163. package/web-dist/assets/liquid-C0sCDyMI.js +0 -1
  164. package/web-dist/assets/llvm-DjAJT7YJ.js +0 -1
  165. package/web-dist/assets/logo-BtOb2qkB.js +0 -1
  166. package/web-dist/assets/lua-BaeVxFsk.js +0 -1
  167. package/web-dist/assets/luau-KW6xsasC.js +0 -1
  168. package/web-dist/assets/make-CHLpvVh8.js +0 -1
  169. package/web-dist/assets/marko-DjSrsDqO.js +0 -1
  170. package/web-dist/assets/material-theme-D5KoaKCx.js +0 -1
  171. package/web-dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
  172. package/web-dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  173. package/web-dist/assets/material-theme-ocean-CyktbL80.js +0 -1
  174. package/web-dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  175. package/web-dist/assets/matlab-D7o27uSR.js +0 -1
  176. package/web-dist/assets/mdc-DTYItulj.js +0 -1
  177. package/web-dist/assets/mdx-Cmh6b_Ma.js +0 -1
  178. package/web-dist/assets/mermaid-mWjccvbQ.js +0 -1
  179. package/web-dist/assets/min-dark-CafNBF8u.js +0 -1
  180. package/web-dist/assets/min-light-CTRr51gU.js +0 -1
  181. package/web-dist/assets/mipsasm-CKIfxQSi.js +0 -1
  182. package/web-dist/assets/mojo-rZm6bMo-.js +0 -1
  183. package/web-dist/assets/monokai-D4h5O-jR.js +0 -1
  184. package/web-dist/assets/moonbit-_H4v1dQx.js +0 -1
  185. package/web-dist/assets/move-IF9eRakj.js +0 -1
  186. package/web-dist/assets/narrat-DRg8JJMk.js +0 -1
  187. package/web-dist/assets/nextflow-C-mBbutL.js +0 -1
  188. package/web-dist/assets/nextflow-groovy-vE_lwT2v.js +0 -1
  189. package/web-dist/assets/nginx-BpAMiNFr.js +0 -1
  190. package/web-dist/assets/night-owl-C39BiMTA.js +0 -1
  191. package/web-dist/assets/night-owl-light-CMTm3GFP.js +0 -1
  192. package/web-dist/assets/nim-BIad80T-.js +0 -1
  193. package/web-dist/assets/nix-CwoSXNpI.js +0 -1
  194. package/web-dist/assets/nord-Ddv68eIx.js +0 -1
  195. package/web-dist/assets/nushell-Cz2AlsmD.js +0 -1
  196. package/web-dist/assets/objective-c-DXmwc3jG.js +0 -1
  197. package/web-dist/assets/objective-cpp-CLxacb5B.js +0 -1
  198. package/web-dist/assets/ocaml-C0hk2d4L.js +0 -1
  199. package/web-dist/assets/odin-BBf5iR-q.js +0 -1
  200. package/web-dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
  201. package/web-dist/assets/one-light-C3Wv6jpd.js +0 -1
  202. package/web-dist/assets/openscad-C4EeE6gA.js +0 -1
  203. package/web-dist/assets/pascal-D93ZcfNL.js +0 -1
  204. package/web-dist/assets/perl-B9cMNwum.js +0 -1
  205. package/web-dist/assets/pkl-u5AG7uiY.js +0 -1
  206. package/web-dist/assets/plastic-3e1v2bzS.js +0 -1
  207. package/web-dist/assets/plsql-ChMvpjG-.js +0 -1
  208. package/web-dist/assets/po-BTJTHyun.js +0 -1
  209. package/web-dist/assets/poimandres-CS3Unz2-.js +0 -1
  210. package/web-dist/assets/polar-C0HS_06l.js +0 -1
  211. package/web-dist/assets/postcss-CXtECtnM.js +0 -1
  212. package/web-dist/assets/powerquery-CEu0bR-o.js +0 -1
  213. package/web-dist/assets/powershell-Dpen1YoG.js +0 -1
  214. package/web-dist/assets/prisma-Dd19v3D-.js +0 -1
  215. package/web-dist/assets/prolog-CbFg5uaA.js +0 -1
  216. package/web-dist/assets/proto-C7zT0LnQ.js +0 -1
  217. package/web-dist/assets/pug-DKIMFp6K.js +0 -1
  218. package/web-dist/assets/puppet-BMWR74SV.js +0 -1
  219. package/web-dist/assets/purescript-CklMAg4u.js +0 -1
  220. package/web-dist/assets/qml-3beO22l8.js +0 -1
  221. package/web-dist/assets/qmldir-C8lEn-DE.js +0 -1
  222. package/web-dist/assets/qss-IeuSbFQv.js +0 -1
  223. package/web-dist/assets/r-Dspwwk_N.js +0 -1
  224. package/web-dist/assets/racket-BqYA7rlc.js +0 -1
  225. package/web-dist/assets/raku-DXvB9xmW.js +0 -1
  226. package/web-dist/assets/razor-BjBPvh-w.js +0 -1
  227. package/web-dist/assets/red-bN70gL4F.js +0 -1
  228. package/web-dist/assets/reg-C-SQnVFl.js +0 -1
  229. package/web-dist/assets/regexp-CDVJQ6XC.js +0 -1
  230. package/web-dist/assets/rel-C3B-1QV4.js +0 -1
  231. package/web-dist/assets/riscv-BM1_JUlF.js +0 -1
  232. package/web-dist/assets/ron-D8l8udqQ.js +0 -1
  233. package/web-dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
  234. package/web-dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
  235. package/web-dist/assets/rose-pine-qdsjHGoJ.js +0 -1
  236. package/web-dist/assets/rosmsg-BJDFO7_C.js +0 -1
  237. package/web-dist/assets/rst-CpCqk9r5.js +0 -1
  238. package/web-dist/assets/ruby-DyJCeAvU.js +0 -1
  239. package/web-dist/assets/sas-DEy46yEz.js +0 -1
  240. package/web-dist/assets/sass-Cj5Yp3dK.js +0 -1
  241. package/web-dist/assets/scala-C151Ov-r.js +0 -1
  242. package/web-dist/assets/scheme-C98Dy4si.js +0 -1
  243. package/web-dist/assets/scss-D5BDwBP9.js +0 -1
  244. package/web-dist/assets/sdbl-DVxCFoDh.js +0 -1
  245. package/web-dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
  246. package/web-dist/assets/shellsession-BADoaaVG.js +0 -1
  247. package/web-dist/assets/slack-dark-BthQWCQV.js +0 -1
  248. package/web-dist/assets/slack-ochin-DqwNpetd.js +0 -1
  249. package/web-dist/assets/smalltalk-BERRCDM3.js +0 -1
  250. package/web-dist/assets/snazzy-light-Bw305WKR.js +0 -1
  251. package/web-dist/assets/solarized-dark-DXbdFlpD.js +0 -1
  252. package/web-dist/assets/solarized-light-L9t79GZl.js +0 -1
  253. package/web-dist/assets/solidity-rGO070M0.js +0 -1
  254. package/web-dist/assets/soy-8wufbnw4.js +0 -1
  255. package/web-dist/assets/sparql-rVzFXLq3.js +0 -1
  256. package/web-dist/assets/splunk-BtCnVYZw.js +0 -1
  257. package/web-dist/assets/ssh-config-_ykCGR6B.js +0 -1
  258. package/web-dist/assets/stata-DI20mbqo.js +0 -1
  259. package/web-dist/assets/stylus-BEDo0Tqx.js +0 -1
  260. package/web-dist/assets/surrealql-Bq5Q-fJD.js +0 -1
  261. package/web-dist/assets/svelte-Cy7k_4gC.js +0 -1
  262. package/web-dist/assets/swift-D82vCrfD.js +0 -1
  263. package/web-dist/assets/synthwave-84-CbfX1IO0.js +0 -1
  264. package/web-dist/assets/system-verilog-CnnmHF94.js +0 -1
  265. package/web-dist/assets/systemd-4A_iFExJ.js +0 -1
  266. package/web-dist/assets/talonscript-CkByrt1z.js +0 -1
  267. package/web-dist/assets/tasl-QIJgUcNo.js +0 -1
  268. package/web-dist/assets/tcl-dwOrl1Do.js +0 -1
  269. package/web-dist/assets/templ-DhtptRzy.js +0 -1
  270. package/web-dist/assets/terraform-BETggiCN.js +0 -1
  271. package/web-dist/assets/tex-idrVyKtj.js +0 -1
  272. package/web-dist/assets/tokyo-night-hegEt444.js +0 -1
  273. package/web-dist/assets/ts-tags-D351s5mN.js +0 -1
  274. package/web-dist/assets/tsv-B_m7g4N7.js +0 -1
  275. package/web-dist/assets/turtle-BsS91CYL.js +0 -1
  276. package/web-dist/assets/twig-CW1WmMYd.js +0 -1
  277. package/web-dist/assets/typespec-CAFt9gP4.js +0 -1
  278. package/web-dist/assets/typst-DHCkPAjA.js +0 -1
  279. package/web-dist/assets/v-BcVCzyr7.js +0 -1
  280. package/web-dist/assets/vala-CsfeWuGM.js +0 -1
  281. package/web-dist/assets/vb-D17OF-Vu.js +0 -1
  282. package/web-dist/assets/verilog-BQ8w6xss.js +0 -1
  283. package/web-dist/assets/vesper-DRje8inN.js +0 -1
  284. package/web-dist/assets/vhdl-CeAyd5Ju.js +0 -1
  285. package/web-dist/assets/viml-CJc9bBzg.js +0 -1
  286. package/web-dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
  287. package/web-dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
  288. package/web-dist/assets/vitesse-light-CVO1_9PV.js +0 -1
  289. package/web-dist/assets/vue-D2xRrEX4.js +0 -1
  290. package/web-dist/assets/vue-html-AaS7Mt5G.js +0 -1
  291. package/web-dist/assets/vue-vine-BoDAl6tE.js +0 -1
  292. package/web-dist/assets/vyper-CDx5xZoG.js +0 -1
  293. package/web-dist/assets/wasm-CG6Dc4jp.js +0 -1
  294. package/web-dist/assets/wasm-MzD3tlZU.js +0 -1
  295. package/web-dist/assets/wenyan-BV7otONQ.js +0 -1
  296. package/web-dist/assets/wgsl-Dx-B1_4e.js +0 -1
  297. package/web-dist/assets/wikitext-BhOHFoWU.js +0 -1
  298. package/web-dist/assets/wit-5i3qLPDT.js +0 -1
  299. package/web-dist/assets/wolfram-lXgVvXCa.js +0 -1
  300. package/web-dist/assets/xsl-CtQFsRM5.js +0 -1
  301. package/web-dist/assets/zenscript-DVFEvuxE.js +0 -1
  302. package/web-dist/assets/zig-VOosw3JB.js +0 -1
@@ -1,4 +1,4 @@
1
- import { OmniMessage, ToolCallPayload } from '@prismshadow/penguin-core/omnimessage';
1
+ import { OmniMessage, ToolCallPayload, CompactionMode } from '@prismshadow/penguin-core/omnimessage';
2
2
  import { ThinkingLevelName, ToolDefinitionConfig, MCPServerConfig } from '@prismshadow/penguin-core/interfaces';
3
3
 
4
4
  /**
@@ -72,6 +72,38 @@ interface MeResponse {
72
72
  * token) may omit it.
73
73
  */
74
74
  sessionVia: "password" | "desktop";
75
+ /**
76
+ * The upload limits currently in force, so the composer can refuse an oversize pick before
77
+ * reading it and can name the real number in the message. They are admin-settable and ride
78
+ * `/api/me` rather than `/api/admin/settings` because every user's composer needs them, not
79
+ * just an admin's.
80
+ */
81
+ uploadLimits: UploadLimits;
82
+ }
83
+ /**
84
+ * Upload limits as the web app sees them: whole MB, the same unit the admin form uses, so the
85
+ * number in the error message is the number the admin typed.
86
+ */
87
+ interface UploadLimits {
88
+ /** Per-file cap for composer file attachments. */
89
+ attachmentMaxMb: number;
90
+ /** Per-message total of decoded attachment bytes. */
91
+ attachmentTotalMb: number;
92
+ /** Per-message file count. Fixed server-side, not admin-settable. */
93
+ attachmentMaxCount: number;
94
+ /**
95
+ * Per-image cap for images that ride the conversation inline. Fixed server-side and
96
+ * deliberately far below the attachment cap — an inline image enters the conversation and the
97
+ * Trace, where its size is paid again on every history page and every resume.
98
+ */
99
+ imageMaxMb: number;
100
+ /**
101
+ * The range the two admin-settable limits may be set to. Carried here so the admin form states
102
+ * the real bounds without compiling its own copy of them — the server is the only place that
103
+ * decides how large an upload it can survive.
104
+ */
105
+ attachmentLimitMinMb: number;
106
+ attachmentLimitMaxMb: number;
75
107
  }
76
108
  interface PasswordChangeRequest {
77
109
  /** Omitted only by desktop-established sessions (desktop mode); required otherwise. */
@@ -119,11 +151,23 @@ interface ServerSettings {
119
151
  */
120
152
  proxyForAgent: boolean;
121
153
  /**
122
- * The shared explicit proxy address (canonical `http(s)://host[:port]`), or null =
123
- * follow the proxy environment variables. When set it takes precedence over
124
- * HTTP_PROXY / HTTPS_PROXY wherever the owning switch is on.
154
+ * The shared explicit proxy address (a canonical URL — http(s):// or socks5:// /
155
+ * socks://), or null = follow the proxy environment variables. When set it takes
156
+ * precedence over HTTP_PROXY / HTTPS_PROXY wherever the owning switch is on.
125
157
  */
126
158
  proxyUrl: string | null;
159
+ /**
160
+ * Per-file cap for composer file attachments, in whole MB (default 100). Applies to the very
161
+ * next upload — the validators read it per request, nothing is snapshotted at boot.
162
+ */
163
+ attachmentMaxMb: number;
164
+ /**
165
+ * Per-message total of decoded attachment bytes, in whole MB (default 120). Never below
166
+ * `attachmentMaxMb`, so a message may always carry one full-size attachment. The global request
167
+ * body cap is derived from this value (base64 inflates it by 4/3, plus headroom for one inline
168
+ * image and the JSON framing), which is why raising it needs no separate setting.
169
+ */
170
+ attachmentTotalMb: number;
127
171
  }
128
172
  interface ServerSettingsResponse {
129
173
  settings: ServerSettings;
@@ -133,12 +177,38 @@ interface ServerSettingsUpdateRequest {
133
177
  proxyForApp?: boolean;
134
178
  proxyForAgent?: boolean;
135
179
  /**
136
- * New proxy address. Accepted forms: `http://host[:port]`, `https://host[:port]`, or
137
- * bare `host[:port]` (normalized to `http://…` — only normalized values are stored,
138
- * and the response echoes the stored form). Empty/whitespace-only or null clears the
139
- * address (follow the environment variables); anything else is 400 `invalid_proxy_url`.
180
+ * New proxy address. Accepted forms: any proxy URL undici's dispatcher takes —
181
+ * `http://`, `https://`, `socks5://` / `socks://`, credentials allowed — or bare
182
+ * `host[:port]` (normalized to `http://…`; only normalized values are stored, and the
183
+ * response echoes the stored form). Empty/whitespace-only or null clears the address
184
+ * (follow the environment variables); anything else is 400 `invalid_proxy_url`.
140
185
  */
141
186
  proxyUrl?: string | null;
187
+ /**
188
+ * New per-file attachment cap in whole MB. Must be an integer between 1 and 200; anything else
189
+ * — a fraction, a string, 102400 for "100GB" — is 400 `invalid_attachment_limit` and writes
190
+ * nothing.
191
+ */
192
+ attachmentMaxMb?: number;
193
+ /**
194
+ * New per-message total attachment cap in whole MB. Same 1..200 integer range, and additionally
195
+ * must not be below the *effective* per-file cap (the value in the same PUT, or the stored one
196
+ * when this PUT does not change it) — a total below the per-file cap would make a legal single
197
+ * attachment unsendable. Violations are 400 `invalid_attachment_limit`.
198
+ */
199
+ attachmentTotalMb?: number;
200
+ }
201
+ /**
202
+ * One draft-screen shortcut: a prompt the user wrote, filed under a name they chose. Clicking it
203
+ * fills the composer exactly like a built-in example does, and sends nothing. Deliberately holds
204
+ * no Skill list — a saved prompt is not authored against a known Skill catalog the way a shipped
205
+ * example is, and the Agent it will run under is picked after the click.
206
+ */
207
+ interface DraftShortcut {
208
+ /** Stable client-generated id: what an edit or a delete addresses the row by. Unique per user. */
209
+ id: string;
210
+ title: string;
211
+ prompt: string;
142
212
  }
143
213
  /** User UI preferences (SQLite ui_prefs, free-form JSON; known keys declared here). */
144
214
  interface UiPrefs {
@@ -154,6 +224,13 @@ interface UiPrefs {
154
224
  showCliSessions?: boolean;
155
225
  /** The initial-password notice banner (app layout) was permanently dismissed by the user. */
156
226
  initialPasswordBannerDismissed?: boolean;
227
+ /**
228
+ * The draft screen's user-defined shortcuts, in display order. Replaced whole on every write
229
+ * (the merge is shallow, so the array is one field like any other) and bounded on write by
230
+ * services/draft-shortcuts.ts — count, title length and prompt length — because this is the one
231
+ * known key holding user-authored text rather than a flag or an id.
232
+ */
233
+ draftShortcuts?: DraftShortcut[];
157
234
  [key: string]: unknown;
158
235
  }
159
236
  interface PrefsResponse {
@@ -236,7 +313,7 @@ interface ModelInfo {
236
313
  /** Display name: explicit TOML field (user-edited) takes priority, then the built-in catalog; falls back to unset (frontend shows modelId). */
237
314
  displayName?: string;
238
315
  contextWindow?: number;
239
- /** AgentHub client protocol (`openai`, etc.); defaults to AgentHub inferring it from modelId. */
316
+ /** AgentHub client protocol (`openai-chat`, `openai-responses`, etc.); defaults to AgentHub inferring it from modelId. */
240
317
  clientType?: string;
241
318
  /**
242
319
  * Whether image input (vision/multimodal) is supported: the TOML `vision` annotation takes
@@ -251,9 +328,24 @@ interface ModelInfo {
251
328
  * seeded per-Agent default (32000), which cannot fit into e.g. a 32k context window.
252
329
  */
253
330
  maxTokens?: number;
331
+ /**
332
+ * Per-model fast mode (TOML `fast_mode` annotation; user-only, never preset by the
333
+ * built-in catalog): when true, session requests opt into the provider's faster serving
334
+ * tier at premium pricing (AgentHub UniConfig `fast_mode`). Only `true` is reported;
335
+ * unset = off. Models without a fast tier reject requests carrying it.
336
+ */
337
+ fastMode?: boolean;
254
338
  pricing?: ModelPricingDto;
255
339
  /** Environment variable name to fall back to when api_key is empty (e.g. ANTHROPIC_API_KEY); unset if no known fallback. */
256
340
  envKey?: string;
341
+ /**
342
+ * Masked preview (same rule as `credential.apiKeyMasked`) of the value the server process
343
+ * currently holds for `envKey` — the plaintext is never serialized. Reported only for
344
+ * first-party official entries (vendor group, catalog shape unmodified); gateway, custom
345
+ * and user-defined groups never carry it. Absent = the variable is unset or empty, or the
346
+ * entry is not first-party.
347
+ */
348
+ envKeyMasked?: string;
257
349
  credential?: CredentialInfo;
258
350
  isDefault: boolean;
259
351
  }
@@ -293,6 +385,8 @@ interface ModelUpdateEntry {
293
385
  vision?: boolean;
294
386
  /** Per-model max output tokens, a positive integer (wins over the Agent config); omitted = inherit the Agent value (the annotation is cleared). */
295
387
  maxTokens?: number;
388
+ /** Per-model fast mode: only `true` is persisted; omitted or `false` clears the annotation (absent = off). */
389
+ fastMode?: boolean;
296
390
  pricing?: ModelPricingDto;
297
391
  /** Providing it overwrites and updates createdAt; omitting it keeps the existing value. */
298
392
  apiKey?: string;
@@ -333,6 +427,45 @@ interface ModelTestRequest {
333
427
  baseUrl?: string | null;
334
428
  /** AgentHub client protocol; required for unsaved custom models (otherwise the id can't be auto-routed). */
335
429
  clientType?: string;
430
+ /**
431
+ * Test with fast mode (the frontend always sends the form's current value, so an unsaved
432
+ * toggle — either direction — is what gets tested); omitted falls back to the stored
433
+ * annotation. Lets "Test connection" surface a fast-mode rejection before saving.
434
+ */
435
+ fastMode?: boolean;
436
+ }
437
+ /**
438
+ * Vision capability probe: sends one 1x1 image and a one-word prompt on this model's
439
+ * credential, to decide whether the models dialog's "supports vision" switch should be
440
+ * turned on. The body mirrors the connectivity test (same paired reference and same
441
+ * not-yet-saved overrides), so an unsaved model can be probed before it exists on disk.
442
+ *
443
+ * Unlike protocol detection this is a real, billed completion — an image request cannot be
444
+ * shaped to cost nothing — so it only ever runs when the user presses the control.
445
+ */
446
+ interface ModelVisionDetectRequest {
447
+ provider: string;
448
+ modelId: string;
449
+ /** Newly entered API key (plaintext); the stored one backs the probe when omitted. */
450
+ apiKey?: string;
451
+ /** "Clear saved API key" is checked: do not fall back to the stored key. */
452
+ clearApiKey?: boolean;
453
+ /** Form's current base URL; null means "explicitly none" (as in the connectivity test). */
454
+ baseUrl?: string | null;
455
+ /** Protocol to speak, when the form has one; otherwise the stored/auto-routed client. */
456
+ clientType?: string;
457
+ }
458
+ /**
459
+ * Vision probe verdict. `supported` = the model took the image and answered; `unsupported`
460
+ * = it answered specifically that it will not take an image (a definitive negative, not an
461
+ * error); `failed` = the probe never got a usable answer (auth, network, an unrelated
462
+ * error), so nothing about the capability was learned and the setting is left alone.
463
+ */
464
+ type ModelVisionOutcome = "supported" | "unsupported" | "failed";
465
+ /** Vision probe result; `message` carries the truncated provider error for the failed case. */
466
+ interface ModelVisionDetectResponse {
467
+ outcome: ModelVisionOutcome;
468
+ message?: string;
336
469
  }
337
470
  /**
338
471
  * Connectivity test result: carries round-trip latency when ok, and a reason on failure
@@ -353,6 +486,71 @@ interface ModelTestResponse {
353
486
  tps?: number;
354
487
  message?: string;
355
488
  }
489
+ /**
490
+ * Protocol auto-detection (POST /api/projects/:p/models/detect, owner): probes which of
491
+ * AgentHub's generic protocol clients a custom base URL serves — `openai-responses` first,
492
+ * then `ant-messages`, then `openai-chat` — and reports the first hit. Used by the custom
493
+ * model dialog to fill `clientType` from the endpoint itself; costs no tokens (each probe
494
+ * is a minimal invalid request whose error reveals the protocol shape).
495
+ */
496
+ interface ModelProtocolDetectRequest {
497
+ /** Base URL to probe (as typed in the form); each probe appends its protocol path. */
498
+ baseUrl: string;
499
+ /** Newly entered API key (plaintext); used for probe auth if provided. Detection also works keyless: a protocol-shaped 401/403 still proves the route. */
500
+ apiKey?: string;
501
+ /** "Clear saved API key" is checked: do not fall back to the stored key (probe the current draft). */
502
+ clearApiKey?: boolean;
503
+ /** Optional paired reference: when it names a stored entry and no apiKey is given, that entry's saved key backs the probes (mirrors the connectivity test). */
504
+ provider?: string;
505
+ modelId?: string;
506
+ }
507
+ /**
508
+ * One probe's outcome: `served` = the route answered in an API shape (including auth
509
+ * failures — 401/403 with a protocol-shaped body proves the route exists);
510
+ * `route_missing` = 404/405; `server_error` = 5xx (proves nothing about the path);
511
+ * `junk` = HTML / non-JSON / JSON matching no API shape; `timeout` / `network_error` =
512
+ * the request itself failed.
513
+ */
514
+ type ProtocolProbeOutcome = "served" | "route_missing" | "server_error" | "junk" | "timeout" | "network_error";
515
+ /** One probe, for debugging display: the probed URL derives from baseUrl only (never contains the key). */
516
+ interface ModelProtocolProbeDto {
517
+ /** AgentHub client type this probe stands for (`openai-responses` / `ant-messages` / `openai-chat`). */
518
+ clientType: string;
519
+ /** Full URL probed (base URL + the protocol's path). */
520
+ url: string;
521
+ outcome: ProtocolProbeOutcome;
522
+ /** HTTP status, when a response arrived at all. */
523
+ status?: number;
524
+ }
525
+ /** Detection result: probes run sequentially and stop at the first served protocol, so `probes` lists only the ones actually run, in order. */
526
+ interface ModelProtocolDetectResponse {
527
+ /** The first protocol the endpoint serves (an AgentHub client type); absent when none of the three matched. */
528
+ detected?: string;
529
+ probes: ModelProtocolProbeDto[];
530
+ }
531
+ /**
532
+ * Endpoint model listing (POST /api/projects/:p/models/list, owner): given a base URL and
533
+ * the protocol `/detect` reported, returns every model id the endpoint serves (AgentHub's
534
+ * `listModels()` on the routed client). Used by the add-group dialog to import a provider's
535
+ * whole listing in one go; the ids come back in the endpoint's own order.
536
+ */
537
+ interface EndpointModelListRequest {
538
+ /** Endpoint base URL (as typed in the add-group dialog). */
539
+ baseUrl: string;
540
+ /** AgentHub client type to speak (normally a detected generic protocol; whole-endpoint listings need one). */
541
+ clientType: string;
542
+ /** Newly entered API key (plaintext); omitted = the SDK's environment fallback for the protocol. */
543
+ apiKey?: string;
544
+ }
545
+ /** Listing outcome: model ids on success, a truncated provider/SDK reason otherwise. */
546
+ interface EndpointModelListResponse {
547
+ ok: boolean;
548
+ /** The model ids the endpoint serves, in the order the endpoint returned them (ok only). */
549
+ models?: string[];
550
+ /** The routed client has no models endpoint (AgentHub UnsupportedOperationError) — callers offer the manual path. */
551
+ unsupported?: boolean;
552
+ message?: string;
553
+ }
356
554
  /**
357
555
  * PUT /api/projects/:p/models/default (owner): narrow default-model switch — flips the same
358
556
  * top-level `default_model` the models page's whole-table PUT writes, without resending the
@@ -385,10 +583,40 @@ interface ChatDefaultsDto {
385
583
  /**
386
584
  * Fallback thinking level for Agents whose config has no explicit `model.thinking_level`
387
585
  * (resolution chain: Agent explicit > this project default > built-in "medium"). Never
388
- * "none" — only the four selectable tiers.
586
+ * "none" — only the selectable tiers.
389
587
  */
390
588
  thinkingLevel?: Exclude<ThinkingLevelName, "none">;
391
589
  }
590
+ /**
591
+ * One deny rule of the sandbox command policy — plain project-editable data. The factory
592
+ * rules are seeded into new projects and carry no special status thereafter: every rule
593
+ * can be edited, disabled, or deleted.
594
+ */
595
+ interface CommandPolicyRuleDto {
596
+ name: string;
597
+ /** JavaScript regex source, matched against the whitespace-normalized command. */
598
+ pattern: string;
599
+ /** What the rule catches (free text). */
600
+ description?: string;
601
+ /** Per-rule switch, effective value (defaults on). */
602
+ enabled: boolean;
603
+ }
604
+ /**
605
+ * Per-Project sandbox command policy: deny rules for shell commands, evaluated ahead of
606
+ * the approval mode (a hit is denied even under allow-all). Serves as the GET response and
607
+ * the PUT response. The PUT request body carries `enabled?` plus the full `rules` list
608
+ * (required — a PUT always materializes the list into the config, model-presets style);
609
+ * per-rule `enabled` may be omitted there and defaults to on. Owner-only to write; any
610
+ * member may read.
611
+ */
612
+ interface CommandPolicyDto {
613
+ /** Effective master switch; an absent stored value reads as true (the policy defaults on). */
614
+ enabled: boolean;
615
+ /** The effective rule list — the factory set when the project predates seeding and has none stored. */
616
+ rules: CommandPolicyRuleDto[];
617
+ /** The factory set, served for the settings UI's "restore defaults". */
618
+ defaultRules: CommandPolicyRuleDto[];
619
+ }
392
620
  /** Read-only vault entry display: key name + masked value; plaintext is never sent. */
393
621
  interface VaultEntryInfo {
394
622
  key: string;
@@ -596,6 +824,8 @@ interface MemoryScopeInfo {
596
824
  workspacePath?: string;
597
825
  /** Number of Markdown topic files in the directory (the `MEMORY.md` index not counted). */
598
826
  fileCount: number;
827
+ /** Whether the directory holds a `MEMORY.md` index, so an import confirmation can say whether one would be replaced. */
828
+ hasIndex: boolean;
599
829
  /** Most recent topic-file mtime in the directory (ISO 8601); unset when the directory holds no topic file. */
600
830
  updatedAt?: string;
601
831
  }
@@ -635,6 +865,64 @@ interface MemoryFileResponse {
635
865
  file: MemoryFileInfo;
636
866
  content: string;
637
867
  }
868
+ /** One topic file inside a transfer document: the name it had in its scope, and its whole text. */
869
+ interface MemoryTransferFile {
870
+ /** File name inside the scope directory, e.g. `prefers-pnpm.md` — a name, never a path. */
871
+ name: string;
872
+ /** The file's full Markdown text, frontmatter included. */
873
+ content: string;
874
+ }
875
+ /**
876
+ * GET …/memory/scopes/:key/export, and the body a POST …/import carries back: everything one
877
+ * scope holds, as one JSON document — the topic files and the scope's own `MEMORY.md`.
878
+ */
879
+ interface MemoryScopeExport {
880
+ /** Format marker, so a foreign JSON file is refused with a clear reason rather than half-imported. */
881
+ format: "penguin-memory-scope";
882
+ /** Document version. A reader accepts exactly this; a later format bumps it and states its own compatibility. */
883
+ version: 1;
884
+ /** The scope this was exported from. Informational: an import writes into the scope its URL names. */
885
+ scopeKey: string;
886
+ kind: MemoryScopeInfo["kind"];
887
+ /** The Workspace the source scope stood for, when it had a `.workspace` marker. */
888
+ workspacePath?: string;
889
+ /** When the document was produced (ISO 8601). */
890
+ exportedAt: string;
891
+ /** The scope's `MEMORY.md`, or null when the scope has none. Only the index reaches the model's context. */
892
+ index: string | null;
893
+ files: MemoryTransferFile[];
894
+ }
895
+ /**
896
+ * What an import does with a name the target scope already holds:
897
+ * - `skip` — keep what is on disk, write only names the scope does not have (destroys nothing);
898
+ * - `overwrite` — replace a same-named file's content;
899
+ * - `replace` — additionally delete every topic file the document does not carry.
900
+ * The two destructive modes require `confirm`.
901
+ */
902
+ type MemoryImportMode = "skip" | "overwrite" | "replace";
903
+ /** POST …/memory/scopes/:key/import */
904
+ interface MemoryImportRequest {
905
+ /** Defaults to `skip`. */
906
+ mode?: MemoryImportMode;
907
+ /** Required by `overwrite` and `replace`; without it they are refused with 409 `memory_import_confirm_required`. */
908
+ confirm?: boolean;
909
+ payload: MemoryScopeExport;
910
+ }
911
+ /** What one import did, name by name, so the UI can report it rather than claim success. */
912
+ interface MemoryImportResponse {
913
+ scopeKey: string;
914
+ mode: MemoryImportMode;
915
+ /** Names written that the scope did not have. */
916
+ added: string[];
917
+ /** Names whose existing content was replaced. */
918
+ overwritten: string[];
919
+ /** Names left untouched because the scope already had them (`skip` only). */
920
+ skipped: string[];
921
+ /** Names deleted because `replace` dropped everything the document did not carry. */
922
+ removed: string[];
923
+ /** Whether the scope's `MEMORY.md` was written or extended. */
924
+ indexWritten: boolean;
925
+ }
638
926
  interface SessionInfo {
639
927
  sessionId: string;
640
928
  projectId: string;
@@ -645,11 +933,35 @@ interface SessionInfo {
645
933
  modelId: string;
646
934
  workspace: string;
647
935
  approvalMode: ApprovalMode;
936
+ /**
937
+ * Thinking level pinned for this Session (set via PATCH; the Web App's in-chat picker).
938
+ * Unset = never pinned: runs that carry no level of their own fall back to the Agent
939
+ * config's `model.thinking_level`, so config edits keep taking effect. Once pinned it
940
+ * survives reloads and applies to every later run of this Session, and an Agent-config
941
+ * change no longer moves it.
942
+ */
943
+ thinkingLevel?: ThinkingLevelName;
648
944
  /** Short title auto-generated by the model after the first turn; unset until generated (frontend shows "New Chat"). */
649
945
  title?: string;
650
946
  /** Session source (for list badges/folders), derived from core session_meta — the single source of truth (not stored in the DB); unset for user-created sessions. */
651
947
  source?: SessionSource;
652
948
  createdAt: string;
949
+ /**
950
+ * Last activity the server drove for this Session (ISO 8601, same convention as
951
+ * createdAt), monotonic — it never moves backwards. Set to createdAt at creation, then
952
+ * stamped when a run starts and again when it ends; a run here is one Task, one
953
+ * compaction, or one whole goal loop (every round of a goal belongs to a single run, so
954
+ * an N-round goal stamps twice, not 2N times).
955
+ *
956
+ * Two kinds of row therefore stay at createdAt no matter how busy they look: Sessions
957
+ * adopted from a CLI Trace (this server drives none of their runs) and subagent rows
958
+ * (their work is driven through the parent Session's entry). Reading real activity for
959
+ * those would mean consulting the Trace tree, which this field deliberately does not do.
960
+ *
961
+ * Rows that predate the field are backfilled once at startup from the Session's most
962
+ * recent request timestamp, falling back to createdAt.
963
+ */
964
+ lastActiveAt: string;
653
965
  status: SessionStatus;
654
966
  /** Number of approvals awaiting human decision (a persisted count outside server events, for list badges). */
655
967
  pendingApprovalCount: number;
@@ -719,11 +1031,36 @@ interface SessionCreateRequest {
719
1031
  interface SessionCreateResponse {
720
1032
  session: SessionInfo;
721
1033
  }
1034
+ /** Immutable location of one record in a Session's append-only Trace. */
1035
+ interface TracePosition {
1036
+ /** Trace shard index (`001` on disk becomes `1`). */
1037
+ fileIndex: number;
1038
+ /** Zero-based record ordinal within the parsed shard. */
1039
+ ordinal: number;
1040
+ }
1041
+ /** History-only transport metadata; `tracePosition` is never persisted into Trace JSONL. */
1042
+ type HistoryMessage = OmniMessage & {
1043
+ tracePosition?: TracePosition;
1044
+ };
1045
+ interface SessionForkRequest {
1046
+ /** The final root assistant text record of the completed Task to keep. */
1047
+ position: TracePosition;
1048
+ }
1049
+ interface SessionForkResponse {
1050
+ session: SessionInfo;
1051
+ }
722
1052
  interface SessionResponse {
723
1053
  session: SessionInfo;
724
1054
  }
725
1055
  interface SessionPatchRequest {
726
1056
  approvalMode?: ApprovalMode;
1057
+ /**
1058
+ * Pin this Session's thinking level (`none | low | medium | high | xhigh | max`, anything else
1059
+ * is a 400). It applies to every later run of the Session that doesn't carry its own
1060
+ * level, and replaces the Agent-config fallback for this Session. There is no unpin:
1061
+ * the picker only offers concrete levels.
1062
+ */
1063
+ thinkingLevel?: ThinkingLevelName;
727
1064
  /** Archive / unarchive (default list hides archived). */
728
1065
  archived?: boolean;
729
1066
  /** Manual rename; non-empty string, overrides the auto-generated title. */
@@ -791,7 +1128,7 @@ interface MessagesPageInfo {
791
1128
  }
792
1129
  /** Message history: the full messages and events from concatenating all of this Session's Trace files in order (excludes partial_*). */
793
1130
  interface MessagesResponse {
794
- messages: OmniMessage[];
1131
+ messages: HistoryMessage[];
795
1132
  /**
796
1133
  * Present only while the Session is running/compacting: the in-progress stream tail
797
1134
  * (open streaming fragments + the channel cursor they cover), so a client joining
@@ -814,17 +1151,26 @@ interface MessagesResponse {
814
1151
  type TaskInputPart = {
815
1152
  type: "text";
816
1153
  text: string;
817
- } | {
1154
+ }
1155
+ /**
1156
+ * An image that rides the conversation inline, as a base64 `data:` URL or an http(s) URL.
1157
+ * A data URL is capped at 20MB (413 `image_too_large`) — a fixed limit that does NOT follow
1158
+ * the admin-settable attachment cap, because an inline image is written into the Trace and
1159
+ * read back on every history page and every resume.
1160
+ */
1161
+ | {
818
1162
  type: "image_url";
819
1163
  imageUrl: string;
820
1164
  }
821
1165
  /**
822
1166
  * File attachment (the composer's "+" menu): `dataUrl` is a base64 `data:` URL of the
823
- * file's bytes, capped at 10MB each (413 `file_too_large` beyond that; the request as a
824
- * whole still has to fit the global 20MB body limit). The server writes it into the
825
- * Session scratchpad under a sanitized name and appends an `[attached file: <path>]` line
826
- * to the message text — the bytes never enter the conversation, the model opens the file
827
- * by path. `fileName` is the original name (no path separators, no `..`).
1167
+ * file's bytes, capped per file and per message by the admin-settable upload limits
1168
+ * (defaults 100MB / 120MB; 413 `file_too_large` / `payload_too_large` / `too_many_files`,
1169
+ * and the request as a whole still has to fit the body cap those limits derive). The
1170
+ * server writes it into the Session scratchpad under a sanitized name and appends an
1171
+ * `[attached file: <path>]` line to the message text — the bytes never enter the
1172
+ * conversation, the model opens the file by path. `fileName` is the original name (no path
1173
+ * separators, no `..`).
828
1174
  */
829
1175
  | {
830
1176
  type: "file";
@@ -835,9 +1181,10 @@ interface TaskCreateRequest {
835
1181
  input: TaskInputPart[];
836
1182
  /**
837
1183
  * Thinking level for this Task's LLM requests (a per-turn parameter; one of
838
- * `none | low | medium | high | xhigh`, anything else is a 400). Omitted = falls back to
839
- * the session's default (the Agent config's `model.thinking_level`). A queued follow-up
840
- * (`queueIfBusy`) keeps its level and applies it when it auto-starts.
1184
+ * `none | low | medium | high | xhigh | max`, anything else is a 400). Omitted = falls back to
1185
+ * the Session's pinned level (`SessionInfo.thinkingLevel`) and, when that is unset too,
1186
+ * to the Agent config's `model.thinking_level`. A queued follow-up (`queueIfBusy`) keeps
1187
+ * its level and applies it when it auto-starts.
841
1188
  */
842
1189
  thinkingLevel?: ThinkingLevelName;
843
1190
  /**
@@ -912,6 +1259,8 @@ interface SteerRequest {
912
1259
  * stream, and the whole list drops when the run exits (core discards undelivered steering).
913
1260
  */
914
1261
  interface PendingSteeringInfo {
1262
+ /** Server-assigned id, stable for the entry's queued lifetime: the handle DELETE /steer/:steerId recalls it by. */
1263
+ id: string;
915
1264
  /** The message text as accepted (trimmed); may be empty when images/files carry the message. */
916
1265
  text: string;
917
1266
  /** Number of images that rode along. */
@@ -919,6 +1268,43 @@ interface PendingSteeringInfo {
919
1268
  /** Number of file attachments that rode along. */
920
1269
  files: number;
921
1270
  }
1271
+ /**
1272
+ * One follow-up task queued with `queueIfBusy` but not yet auto-started. Carried on
1273
+ * `task_state` events and the SSE subscribe snapshot (like `pendingSteering`) so the
1274
+ * composer can show each queued message's content with a recall affordance; entries leave
1275
+ * the list when they auto-start on idle — or when DELETE /follow-ups/:followUpId recalls one.
1276
+ */
1277
+ interface PendingFollowUpInfo {
1278
+ /** Server-assigned id, stable for the entry's queued lifetime: the handle DELETE /follow-ups/:followUpId recalls it by. */
1279
+ id: string;
1280
+ /** The queued input's text parts, joined; may be empty when images/files carry the message. */
1281
+ text: string;
1282
+ /** Number of images in the queued input. */
1283
+ images: number;
1284
+ /** Number of file attachments in the queued input. */
1285
+ files: number;
1286
+ }
1287
+ /**
1288
+ * Response of the two recall endpoints — DELETE /api/sessions/:id/steer/:steerId and
1289
+ * DELETE /api/sessions/:id/follow-ups/:followUpId: the withdrawn message's original content,
1290
+ * for the composer to restore into the input box for editing and resending (#287). File
1291
+ * attachments are read back from the Session scratchpad (then deleted from it); one that
1292
+ * disappeared meanwhile is omitted rather than failing the recall. 409 `not_pending` when
1293
+ * the entry is no longer queued — steering already delivered to the model, or a follow-up
1294
+ * already auto-started (or unknown id either way).
1295
+ */
1296
+ interface RecalledMessageResponse {
1297
+ text: string;
1298
+ /** The images as submitted (`data:` / http(s) URLs). */
1299
+ images: string[];
1300
+ /** The file attachments, re-encoded as base64 data URLs (the shape the composer submits them in). */
1301
+ files: {
1302
+ fileName: string;
1303
+ dataUrl: string;
1304
+ }[];
1305
+ /** Follow-up recall only: the per-turn thinking level the entry was queued with, when one was. */
1306
+ thinkingLevel?: ThinkingLevelName;
1307
+ }
922
1308
  interface ApprovalDecisionRequest {
923
1309
  decision: "allow" | "deny";
924
1310
  }
@@ -944,6 +1330,8 @@ interface SessionProcessInfo {
944
1330
  cwd: string;
945
1331
  startedAt: string;
946
1332
  running: boolean;
1333
+ /** The service the process serves, when detected: the last local URL its output printed, else an origin probed from its listening ports. */
1334
+ serviceUrl?: string;
947
1335
  }
948
1336
  interface SessionProcessesResponse {
949
1337
  processes: SessionProcessInfo[];
@@ -966,6 +1354,8 @@ type ServerEvent =
966
1354
  queued?: number;
967
1355
  /** Steering messages queued but not yet delivered (absent = none): lets the composer's hint and its content survive reloads. */
968
1356
  pendingSteering?: PendingSteeringInfo[];
1357
+ /** Queued follow-up tasks awaiting auto-start (absent = none): per-entry content + recall handle, alongside the `queued` count. */
1358
+ pendingFollowUps?: PendingFollowUpInfo[];
969
1359
  }
970
1360
  /** The model-generated title after the first turn has been persisted (for in-place list updates). */
971
1361
  | {
@@ -973,6 +1363,32 @@ type ServerEvent =
973
1363
  sessionId: string;
974
1364
  title: string;
975
1365
  }
1366
+ /**
1367
+ * The user-channel counterpart of `task_state`: the same run-state flip, named by
1368
+ * `sessionId`, delivered on GET /api/events.
1369
+ *
1370
+ * `task_state` is session-scoped and deliberately carries no id, so it only ever reaches the
1371
+ * one conversation a tab has subscribed to — every OTHER row in that tab's Session list would
1372
+ * otherwise keep whatever status its last list fetch returned. This event exists so the list
1373
+ * can stay live without polling; the per-Session contract is unchanged.
1374
+ *
1375
+ * `lastActiveAt` and `hasTrace` are the row's own fields as they stand after the flip, both
1376
+ * written just before publishing (`markDriven` at run start sets has_trace and stamps
1377
+ * last_active_at; `touchLastActive` stamps again at run end). They are what let a list act on
1378
+ * the flip without refetching: the stamp separates "this finished while I was looking
1379
+ * elsewhere" from "this finished before I last looked", and `hasTrace` separates a Session
1380
+ * that has now run from one that never has — a first run would otherwise settle back into the
1381
+ * blank "never ran" row the client still believes in.
1382
+ *
1383
+ * Published only to the user channels of the Project's owner and members.
1384
+ */
1385
+ | {
1386
+ type: "session_state";
1387
+ sessionId: string;
1388
+ state: SessionStatus;
1389
+ lastActiveAt: string;
1390
+ hasTrace: boolean;
1391
+ }
976
1392
  /** Last-Event-ID has been evicted from the buffer: the frontend should re-fetch the history endpoint before continuing to consume this connection. */
977
1393
  | {
978
1394
  type: "resync_required";
@@ -991,6 +1407,11 @@ type ServerEvent =
991
1407
  | {
992
1408
  type: "hello";
993
1409
  }
1410
+ /** The served web assets were hot-swapped by a platform upgrade: clients reload to pick them up. */
1411
+ | {
1412
+ type: "web_updated";
1413
+ rev: string;
1414
+ }
994
1415
  /** New session registered (pushed over the parent session's channel for subagent sessions): frontend refreshes the list in place. */
995
1416
  | {
996
1417
  type: "session_created";
@@ -1093,12 +1514,22 @@ interface TraceTaskStats {
1093
1514
  taskIndex: number;
1094
1515
  /**
1095
1516
  * This turn is a **compaction turn** (compaction forms its own turn); the UI marks it with
1096
- * a "Compaction" badge accordingly. It's treated the same as a user turn: it has Token /
1517
+ * a badge accordingly. It's treated the same as a user turn: it has Token /
1097
1518
  * cost / duration / TPS, and **counts normally toward global stats** — the global totals are
1098
1519
  * just the sum of the per-turn cards below, the two scopes match, so adding up the per-turn
1099
1520
  * numbers must equal the total.
1100
1521
  */
1101
1522
  compaction?: boolean;
1523
+ /**
1524
+ * Which kind of compaction turn it is, from the turn's `compaction_begin`. Additive beside
1525
+ * the flag rather than folded into it: `compaction` stays the sole gate on "is this a
1526
+ * compaction turn", so a client that only knows the boolean keeps working unchanged, and one
1527
+ * that reads this can name the turn for what it did — the two modes are different operations,
1528
+ * and only `summarize` actually compacts anything (`discard` drops the old context outright).
1529
+ * Absent on a turn analyzed before this field existed, or whose `compaction_begin` carried no
1530
+ * mode; treat an absent value as `summarize`, which is what the badge said before the split.
1531
+ */
1532
+ compactionMode?: CompactionMode;
1102
1533
  /**
1103
1534
  * This turn's message index range within the **entire file** (inclusive). A single
1104
1535
  * sequential scan on the server tells which turn each message belongs to; the frontend
@@ -1358,35 +1789,47 @@ interface UsageGroupRow {
1358
1789
  cost: number | null;
1359
1790
  hasUncosted: boolean;
1360
1791
  }
1361
- interface UsageTrendPoint {
1362
- date: string;
1363
- total: number;
1364
- cost: number | null;
1365
- /** Daily Token buckets (for the cost center's "Token Changes" stacked chart: cacheRead/cacheWrite/output). */
1792
+ /** Time-series precision for the usage series (`granularity` query parameter). `minute` requires the `fromTs`/`toTs` window bounds. */
1793
+ type UsageGranularity = "minute" | "hour" | "day" | "week" | "month";
1794
+ /**
1795
+ * One bucket of the usage time series (for the cost center's time-series charts).
1796
+ * Buckets are zero-filled across the whole requested range, so consecutive points
1797
+ * are always adjacent in time. Bucket keys by granularity: minute
1798
+ * `yyyy-mm-ddThh:mm` and hour `yyyy-mm-ddThh:00` (server-local clock), day
1799
+ * `yyyy-mm-dd`, week the ISO week's Monday `yyyy-mm-dd`, month `yyyy-mm`.
1800
+ */
1801
+ interface UsageSeriesPoint {
1802
+ bucket: string;
1366
1803
  cacheRead: number;
1367
1804
  cacheWrite: number;
1368
1805
  output: number;
1806
+ total: number;
1807
+ /** Cost converted at query time (USD); null when no priced Model contributed. */
1808
+ cost: number | null;
1809
+ requests: number;
1810
+ /** Successful requests in the bucket. */
1811
+ completed: number;
1812
+ /** Success-rate denominator: all requests minus aborted (a user interruption is not a model failure). */
1813
+ denominator: number;
1369
1814
  }
1370
- /** Invocation count per Agent (for the cost center's "Agent Invocation Count" chart). */
1371
- interface UsageAgentCount {
1815
+ /**
1816
+ * One entity's per-bucket request and success counts, aligned index-for-index
1817
+ * with `series` (the requests-and-success-rate chart draws one such entity —
1818
+ * or stacks them all). `denominator` excludes aborted, same as elsewhere.
1819
+ */
1820
+ interface UsageEntitySeriesCounts {
1821
+ requests: number[];
1822
+ completed: number[];
1823
+ denominator: number[];
1824
+ }
1825
+ /** Per-Agent counts per bucket. */
1826
+ interface UsageAgentSeries extends UsageEntitySeriesCounts {
1372
1827
  agentId: string;
1373
- requests: number;
1374
- total: number;
1375
1828
  }
1376
- /** Request success rate per Model (for the cost center's "Model Success Rate" chart; rows broken down by (provider, modelId)). */
1377
- interface UsageSuccessRate {
1829
+ /** Per-Model counts per bucket (entity identity is the (provider, modelId) pair). */
1830
+ interface UsageModelSeries extends UsageEntitySeriesCounts {
1378
1831
  provider: string;
1379
1832
  modelId: string;
1380
- /** Number of successful requests. */
1381
- completed: number;
1382
- /** Success rate denominator = all requests − aborted (user-initiated interruption isn't a model failure and shouldn't lower the success rate). */
1383
- total: number;
1384
- /** Count of user interruptions (excluded from success rate, shown separately). */
1385
- aborted: number;
1386
- /** Failure breakdown (shown on hover; unknown statuses count toward total but not these three). */
1387
- failed: number;
1388
- timeout: number;
1389
- malformed: number;
1390
1833
  }
1391
1834
  /** Occurrence count of an error for a given source · code (the "most common" metric in the stats center's error panel). */
1392
1835
  interface UsageErrorCount {
@@ -1439,12 +1882,27 @@ interface UsageResponse {
1439
1882
  };
1440
1883
  groupBy: UsageGroupBy;
1441
1884
  groups: UsageGroupRow[];
1442
- /** Daily trend for the last 30 days (includes Token buckets and cost; affected by agent/model filters). */
1443
- trend: UsageTrendPoint[];
1444
- /** Invocation count per Agent (affected by date/model filters). */
1445
- byAgent: UsageAgentCount[];
1446
- /** Raw success rate counts per Model (affected by date/agent filters). */
1447
- success: UsageSuccessRate[];
1885
+ /** Effective precision of `series` (the validated `granularity` query parameter; defaults to day). */
1886
+ granularity: UsageGranularity;
1887
+ /**
1888
+ * Usage time series over the requested from/to range (defaulting to the last 30
1889
+ * days), zero-filled at `granularity`; affected by agent/model filters. Carries
1890
+ * everything the time-series charts draw: Token buckets, cost, request count,
1891
+ * and per-bucket success counts.
1892
+ */
1893
+ series: UsageSeriesPoint[];
1894
+ /**
1895
+ * Per-Agent counts per bucket, aligned index-for-index with `series`, sorted
1896
+ * by total requests descending. Unaffected by the agent filter — the by-Agent
1897
+ * chart draws the whole breakdown — but affected by date/model filters.
1898
+ */
1899
+ byAgentSeries: UsageAgentSeries[];
1900
+ /**
1901
+ * Per-Model counts per bucket, aligned index-for-index with `series`, sorted
1902
+ * by total requests descending. Unaffected by the model filter — the by-Model
1903
+ * chart draws the whole breakdown — but affected by date/agent filters.
1904
+ */
1905
+ byModelSeries: UsageModelSeries[];
1448
1906
  /** Server-side error capture stats (affected by date/agent filters; unaffected by model filter). */
1449
1907
  errors: UsageErrors;
1450
1908
  /** List of Agent ids that have appeared in this Project (for the filter dropdown; unaffected by current filters). */
@@ -1663,6 +2121,51 @@ interface UpdateCheckResponse {
1663
2121
  /** Why the lookup failed: unreachable network / GitHub rate limit / unusable response. */
1664
2122
  error?: "network" | "rate_limited" | "bad_response";
1665
2123
  }
2124
+ /**
2125
+ * The desktop shell's updater snapshot, pushed to the embedded server over the
2126
+ * utilityProcess message channel and served at GET /api/desktop/update. `state` is the
2127
+ * discriminator; the optional fields belong to the states named on them.
2128
+ *
2129
+ * A `downloaded` build stays the reported state until it is installed: a later periodic
2130
+ * check (or its failure) must not hide the actionable "restart to install" step.
2131
+ */
2132
+ interface DesktopUpdateStatus {
2133
+ /** Installed shell version (Electron app.getVersion()). */
2134
+ appVersion: string;
2135
+ /**
2136
+ * Bumped by the shell on every updater event it folds, whether or not the visible
2137
+ * state changed. A row-initiated check settles when the seq has moved past its
2138
+ * at-click value and the state is no longer `checking` — snapshot equality can't
2139
+ * carry that signal (a check that ends where it started is byte-identical).
2140
+ */
2141
+ seq?: number;
2142
+ state: "idle" | "checking" | "up-to-date" | "downloading" | "downloaded" | "error" | "unsupported";
2143
+ /** Newer release being fetched / ready to install (`downloading`, `downloaded`). */
2144
+ version?: string;
2145
+ /** Download progress 0–100 (`downloading`). */
2146
+ percent?: number;
2147
+ /** Updater failure text (`error`). */
2148
+ message?: string;
2149
+ /** Why this install form cannot update itself (`unsupported`): dev run, or a Linux install that is not an AppImage (e.g. .deb — the system package manager owns it). */
2150
+ reason?: "dev" | "linux-not-appimage";
2151
+ }
2152
+ /**
2153
+ * GET /api/desktop/update (desktop-shell sessions only): the latest shell snapshot.
2154
+ * `status` is null until the shell's first push lands (a beat after server start).
2155
+ */
2156
+ interface DesktopUpdateStatusResponse {
2157
+ status: DesktopUpdateStatus | null;
2158
+ }
2159
+ /** Shell → server push over the utilityProcess message channel. */
2160
+ interface DesktopUpdaterStatusMessage {
2161
+ type: "desktop-updater-status";
2162
+ status: DesktopUpdateStatus;
2163
+ }
2164
+ /** Server → shell command over the utilityProcess message channel (relayed from POST /api/desktop/update/check|install). */
2165
+ interface DesktopUpdaterCommandMessage {
2166
+ type: "desktop-updater-command";
2167
+ action: "check" | "install";
2168
+ }
1666
2169
  /**
1667
2170
  * POST /api/version/update (admin only): runs the CLI self-update (`penguin update --yes`)
1668
2171
  * on the server host. `unsupported` covers both a server not launched via the CLI and the
@@ -1678,4 +2181,4 @@ interface UpdateRunResponse {
1678
2181
  needsRestart: boolean;
1679
2182
  }
1680
2183
 
1681
- export type { AdminPasswordResetRequest, AdminUserCreateRequest, AdminUserCreateResponse, AdminUsersResponse, AgentCompactionConfigDto, AgentConfigDto, AgentConfigResponse, AgentConfigUpdateRequest, AgentCreateRequest, AgentCreateResponse, AgentImportRequest, AgentImportResponse, AgentKernelUpdateResponse, AgentMemoryConfigDto, AgentModelConfigDto, AgentSchedulesConfigDto, AgentSkillsConfigDto, AgentSkillsResponse, AgentSummary, AgentTraceDateGroup, AgentTraceFileRef, AgentTraceSessionEntry, AgentTraceSessionFile, AgentTraceSessionGroup, AgentTracesResponse, AgentVaultConfigDto, AgentsResponse, ApprovalDecisionRequest, ApprovalMode, AuthLoginRequest, AuthResponse, BenchmarkCaseScore, BenchmarkCaseSummary, BenchmarkCasesResponse, BenchmarkEvaluation, BenchmarkRunScore, BenchmarkSummary, BenchmarksResponse, CaseMaterial, ChatDefaultsDto, CredentialInfo, DefaultModelResponse, DefaultModelUpdateRequest, DirEntryInfo, DirListResponse, ErrorBody, FilesStatRequest, FilesStatResponse, GoalResponse, GoalServerEvent, GoalStateView, McpServerTestResponse, MeResponse, MemberAddRequest, MemberAddResponse, MemberInfo, MembersResponse, MemoryFileInfo, MemoryFileResponse, MemoryFilesResponse, MemoryOverviewResponse, MemoryScopeInfo, MessagesLiveTail, MessagesPageInfo, MessagesResponse, ModelInfo, ModelPricingDto, ModelRefDto, ModelTestRequest, ModelTestResponse, ModelUpdateEntry, ModelsResponse, ModelsUpdateRequest, PasswordChangeRequest, PendingSteeringInfo, PrefsResponse, ProjectCreateRequest, ProjectCreateResponse, ProjectRole, ProjectSummary, ProjectUpdateRequest, ProjectUpdateResponse, ProjectsResponse, RequestSpan, RetryNowResponse, ScheduleItem, ScheduleServerEvent, ScheduleStatus, ScheduleUpsertRequest, SchedulesResponse, ServerEvent, ServerSettings, ServerSettingsResponse, ServerSettingsUpdateRequest, SessionCategory, SessionCategoryCounts, SessionCreateRequest, SessionCreateResponse, SessionInfo, SessionPatchRequest, SessionProcessInfo, SessionProcessesResponse, SessionResponse, SessionSource, SessionStatus, SessionTracesResponse, SessionsResponse, SkillArchiveInstallRequest, SkillGroupItem, SkillInstallRequest, SkillLibraryResponse, SkillMetadataItem, SteerRequest, TaskCreateRequest, TaskCreateResponse, TaskInputPart, ToolCallSpan, TraceAnalysisResponse, TraceEventsResponse, TraceFileInfo, TraceImportRequest, TraceImportResponse, TraceModelSegment, TraceOtherSpan, TraceTaskStats, TraceToolSpan, UiPrefs, UpdateCheckResponse, UpdateRunResponse, UsageAgentCount, UsageBucket, UsageErrorCount, UsageErrorItem, UsageErrors, UsageErrorsPage, UsageGroupBy, UsageGroupRow, UsageResponse, UsageSuccessRate, UsageTrendPoint, UsageTrendPointInTrace, UserInfo, VaultEntryInfo, VaultEntryUpdate, VaultResponse, VaultUpdateRequest, VersionResponse, WorkspaceFileEntry, WorkspaceFilesResponse };
2184
+ export type { AdminPasswordResetRequest, AdminUserCreateRequest, AdminUserCreateResponse, AdminUsersResponse, AgentCompactionConfigDto, AgentConfigDto, AgentConfigResponse, AgentConfigUpdateRequest, AgentCreateRequest, AgentCreateResponse, AgentImportRequest, AgentImportResponse, AgentKernelUpdateResponse, AgentMemoryConfigDto, AgentModelConfigDto, AgentSchedulesConfigDto, AgentSkillsConfigDto, AgentSkillsResponse, AgentSummary, AgentTraceDateGroup, AgentTraceFileRef, AgentTraceSessionEntry, AgentTraceSessionFile, AgentTraceSessionGroup, AgentTracesResponse, AgentVaultConfigDto, AgentsResponse, ApprovalDecisionRequest, ApprovalMode, AuthLoginRequest, AuthResponse, BenchmarkCaseScore, BenchmarkCaseSummary, BenchmarkCasesResponse, BenchmarkEvaluation, BenchmarkRunScore, BenchmarkSummary, BenchmarksResponse, CaseMaterial, ChatDefaultsDto, CommandPolicyDto, CommandPolicyRuleDto, CredentialInfo, DefaultModelResponse, DefaultModelUpdateRequest, DesktopUpdateStatus, DesktopUpdateStatusResponse, DesktopUpdaterCommandMessage, DesktopUpdaterStatusMessage, DirEntryInfo, DirListResponse, DraftShortcut, EndpointModelListRequest, EndpointModelListResponse, ErrorBody, FilesStatRequest, FilesStatResponse, GoalResponse, GoalServerEvent, GoalStateView, HistoryMessage, McpServerTestResponse, MeResponse, MemberAddRequest, MemberAddResponse, MemberInfo, MembersResponse, MemoryFileInfo, MemoryFileResponse, MemoryFilesResponse, MemoryImportMode, MemoryImportRequest, MemoryImportResponse, MemoryOverviewResponse, MemoryScopeExport, MemoryScopeInfo, MemoryTransferFile, MessagesLiveTail, MessagesPageInfo, MessagesResponse, ModelInfo, ModelPricingDto, ModelProtocolDetectRequest, ModelProtocolDetectResponse, ModelProtocolProbeDto, ModelRefDto, ModelTestRequest, ModelTestResponse, ModelUpdateEntry, ModelVisionDetectRequest, ModelVisionDetectResponse, ModelVisionOutcome, ModelsResponse, ModelsUpdateRequest, PasswordChangeRequest, PendingFollowUpInfo, PendingSteeringInfo, PrefsResponse, ProjectCreateRequest, ProjectCreateResponse, ProjectRole, ProjectSummary, ProjectUpdateRequest, ProjectUpdateResponse, ProjectsResponse, ProtocolProbeOutcome, RecalledMessageResponse, RequestSpan, RetryNowResponse, ScheduleItem, ScheduleServerEvent, ScheduleStatus, ScheduleUpsertRequest, SchedulesResponse, ServerEvent, ServerSettings, ServerSettingsResponse, ServerSettingsUpdateRequest, SessionCategory, SessionCategoryCounts, SessionCreateRequest, SessionCreateResponse, SessionForkRequest, SessionForkResponse, SessionInfo, SessionPatchRequest, SessionProcessInfo, SessionProcessesResponse, SessionResponse, SessionSource, SessionStatus, SessionTracesResponse, SessionsResponse, SkillArchiveInstallRequest, SkillGroupItem, SkillInstallRequest, SkillLibraryResponse, SkillMetadataItem, SteerRequest, TaskCreateRequest, TaskCreateResponse, TaskInputPart, ToolCallSpan, TraceAnalysisResponse, TraceEventsResponse, TraceFileInfo, TraceImportRequest, TraceImportResponse, TraceModelSegment, TraceOtherSpan, TracePosition, TraceTaskStats, TraceToolSpan, UiPrefs, UpdateCheckResponse, UpdateRunResponse, UploadLimits, UsageAgentSeries, UsageBucket, UsageEntitySeriesCounts, UsageErrorCount, UsageErrorItem, UsageErrors, UsageErrorsPage, UsageGranularity, UsageGroupBy, UsageGroupRow, UsageModelSeries, UsageResponse, UsageSeriesPoint, UsageTrendPointInTrace, UserInfo, VaultEntryInfo, VaultEntryUpdate, VaultResponse, VaultUpdateRequest, VersionResponse, WorkspaceFileEntry, WorkspaceFilesResponse };