miko-code 0.1.0

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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/bin/miko +10 -0
  4. package/dist/client/antigravity.webp +0 -0
  5. package/dist/client/assets/abap-BdImnpbu.js +1 -0
  6. package/dist/client/assets/actionscript-3-CoDkCxhg.js +1 -0
  7. package/dist/client/assets/ada-bCR0ucgS.js +1 -0
  8. package/dist/client/assets/andromeeda-C4gqWexZ.js +1 -0
  9. package/dist/client/assets/angular-html-CU67Zn6k.js +1 -0
  10. package/dist/client/assets/angular-ts-BwZT4LLn.js +1 -0
  11. package/dist/client/assets/apache-Pmp26Uib.js +1 -0
  12. package/dist/client/assets/apex-D8_7TLub.js +1 -0
  13. package/dist/client/assets/apl-dKokRX4l.js +1 -0
  14. package/dist/client/assets/applescript-Co6uUVPk.js +1 -0
  15. package/dist/client/assets/ara-BRHolxvo.js +1 -0
  16. package/dist/client/assets/asciidoc-Ve4PFQV2.js +1 -0
  17. package/dist/client/assets/asm-D_Q5rh1f.js +1 -0
  18. package/dist/client/assets/astro-CbQHKStN.js +1 -0
  19. package/dist/client/assets/aurora-x-D-2ljcwZ.js +1 -0
  20. package/dist/client/assets/awk-DMzUqQB5.js +1 -0
  21. package/dist/client/assets/ayu-dark-DYE7WIF3.js +1 -0
  22. package/dist/client/assets/ayu-light-BA47KaF1.js +1 -0
  23. package/dist/client/assets/ayu-mirage-32ctXXKs.js +1 -0
  24. package/dist/client/assets/ballerina-BFfxhgS-.js +1 -0
  25. package/dist/client/assets/bat-BkioyH1T.js +1 -0
  26. package/dist/client/assets/beancount-k_qm7-4y.js +1 -0
  27. package/dist/client/assets/berry-uYugtg8r.js +1 -0
  28. package/dist/client/assets/bibtex-CHM0blh-.js +1 -0
  29. package/dist/client/assets/bicep-Bmn6On1c.js +1 -0
  30. package/dist/client/assets/bird2-DPOp833l.js +1 -0
  31. package/dist/client/assets/blade-D4QpJJKB.js +1 -0
  32. package/dist/client/assets/bsl-BO_Y6i37.js +1 -0
  33. package/dist/client/assets/c-BIGW1oBm.js +1 -0
  34. package/dist/client/assets/c3-eo99z4R2.js +1 -0
  35. package/dist/client/assets/cadence-Bv_4Rxtq.js +1 -0
  36. package/dist/client/assets/cairo-KRGpt6FW.js +1 -0
  37. package/dist/client/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  38. package/dist/client/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  39. package/dist/client/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  40. package/dist/client/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  41. package/dist/client/assets/clarity-D53aC0YG.js +1 -0
  42. package/dist/client/assets/clojure-P80f7IUj.js +1 -0
  43. package/dist/client/assets/cmake-D1j8_8rp.js +1 -0
  44. package/dist/client/assets/cobol-nwyudZeR.js +1 -0
  45. package/dist/client/assets/codeowners-Bp6g37R7.js +1 -0
  46. package/dist/client/assets/codeql-DsOJ9woJ.js +1 -0
  47. package/dist/client/assets/coffee-Ch7k5sss.js +1 -0
  48. package/dist/client/assets/common-lisp-Cg-RD9OK.js +1 -0
  49. package/dist/client/assets/coq-DkFqJrB1.js +1 -0
  50. package/dist/client/assets/cpp-CofmeUqb.js +1 -0
  51. package/dist/client/assets/crystal-tKQVLTB8.js +1 -0
  52. package/dist/client/assets/csharp-COcwbKMJ.js +1 -0
  53. package/dist/client/assets/css-DPfMkruS.js +1 -0
  54. package/dist/client/assets/csv-fuZLfV_i.js +1 -0
  55. package/dist/client/assets/cue-D82EKSYY.js +1 -0
  56. package/dist/client/assets/cypher-COkxafJQ.js +1 -0
  57. package/dist/client/assets/d-85-TOEBH.js +1 -0
  58. package/dist/client/assets/dark-plus-C3mMm8J8.js +1 -0
  59. package/dist/client/assets/dart-CF10PKvl.js +1 -0
  60. package/dist/client/assets/dax-CEL-wOlO.js +1 -0
  61. package/dist/client/assets/desktop-BmXAJ9_W.js +1 -0
  62. package/dist/client/assets/diff-D97Zzqfu.js +1 -0
  63. package/dist/client/assets/docker-BcOcwvcX.js +1 -0
  64. package/dist/client/assets/dotenv-Da5cRb03.js +1 -0
  65. package/dist/client/assets/dracula-BzJJZx-M.js +1 -0
  66. package/dist/client/assets/dracula-soft-BXkSAIEj.js +1 -0
  67. package/dist/client/assets/dream-maker-BtqSS_iP.js +1 -0
  68. package/dist/client/assets/edge-BkV0erSs.js +1 -0
  69. package/dist/client/assets/elixir-CDX3lj18.js +1 -0
  70. package/dist/client/assets/elm-DbKCFpqz.js +1 -0
  71. package/dist/client/assets/emacs-lisp-C9XAeP06.js +1 -0
  72. package/dist/client/assets/erb-B12qg9BL.js +1 -0
  73. package/dist/client/assets/erlang-DsQrWhSR.js +1 -0
  74. package/dist/client/assets/everforest-dark-BgDCqdQA.js +1 -0
  75. package/dist/client/assets/everforest-light-C8M2exoo.js +1 -0
  76. package/dist/client/assets/fennel-BYunw83y.js +1 -0
  77. package/dist/client/assets/fish-BvzEVeQv.js +1 -0
  78. package/dist/client/assets/fluent-C4IJs8-o.js +1 -0
  79. package/dist/client/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  80. package/dist/client/assets/fortran-free-form-BxgE0vQu.js +1 -0
  81. package/dist/client/assets/fsharp-CXgrBDvD.js +1 -0
  82. package/dist/client/assets/gdresource-BOOCDP_w.js +1 -0
  83. package/dist/client/assets/gdscript-C5YyOfLZ.js +1 -0
  84. package/dist/client/assets/gdshader-DkwncUOv.js +1 -0
  85. package/dist/client/assets/genie-D0YGMca9.js +1 -0
  86. package/dist/client/assets/gherkin-DyxjwDmM.js +1 -0
  87. package/dist/client/assets/git-commit-F4YmCXRG.js +1 -0
  88. package/dist/client/assets/git-rebase-r7XF79zn.js +1 -0
  89. package/dist/client/assets/github-dark-DHJKELXO.js +1 -0
  90. package/dist/client/assets/github-dark-default-Cuk6v7N8.js +1 -0
  91. package/dist/client/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  92. package/dist/client/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  93. package/dist/client/assets/github-light-DAi9KRSo.js +1 -0
  94. package/dist/client/assets/github-light-default-D7oLnXFd.js +1 -0
  95. package/dist/client/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  96. package/dist/client/assets/gleam-BspZqrRM.js +1 -0
  97. package/dist/client/assets/glimmer-js-Rg0-pVw9.js +1 -0
  98. package/dist/client/assets/glimmer-ts-U6CK756n.js +1 -0
  99. package/dist/client/assets/glsl-DplSGwfg.js +1 -0
  100. package/dist/client/assets/gn-n2N0HUVH.js +1 -0
  101. package/dist/client/assets/gnuplot-DdkO51Og.js +1 -0
  102. package/dist/client/assets/go-CxLEBnE3.js +1 -0
  103. package/dist/client/assets/graphql-ChdNCCLP.js +1 -0
  104. package/dist/client/assets/groovy-gcz8RCvz.js +1 -0
  105. package/dist/client/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  106. package/dist/client/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  107. package/dist/client/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  108. package/dist/client/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  109. package/dist/client/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  110. package/dist/client/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  111. package/dist/client/assets/hack-CaT9iCJl.js +1 -0
  112. package/dist/client/assets/haml-B8DHNrY2.js +1 -0
  113. package/dist/client/assets/handlebars-BL8al0AC.js +1 -0
  114. package/dist/client/assets/haskell-Df6bDoY_.js +1 -0
  115. package/dist/client/assets/haxe-CzTSHFRz.js +1 -0
  116. package/dist/client/assets/hcl-BWvSN4gD.js +1 -0
  117. package/dist/client/assets/hjson-D5-asLiD.js +1 -0
  118. package/dist/client/assets/hlsl-D3lLCCz7.js +1 -0
  119. package/dist/client/assets/horizon-BUw7H-hv.js +1 -0
  120. package/dist/client/assets/horizon-bright-Cn-bp-IR.js +1 -0
  121. package/dist/client/assets/houston-DnULxvSX.js +1 -0
  122. package/dist/client/assets/html-GMplVEZG.js +1 -0
  123. package/dist/client/assets/html-derivative-BFtXZ54Q.js +1 -0
  124. package/dist/client/assets/http-jrhK8wxY.js +1 -0
  125. package/dist/client/assets/hurl-irOxFIW8.js +1 -0
  126. package/dist/client/assets/hxml-Bvhsp5Yf.js +1 -0
  127. package/dist/client/assets/hy-DFXneXwc.js +1 -0
  128. package/dist/client/assets/imba-DGztddWO.js +1 -0
  129. package/dist/client/assets/index-C07zYq_-.css +32 -0
  130. package/dist/client/assets/index-Ce3hNHfL.js +2351 -0
  131. package/dist/client/assets/ini-BEwlwnbL.js +1 -0
  132. package/dist/client/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  133. package/dist/client/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  134. package/dist/client/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  135. package/dist/client/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  136. package/dist/client/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  137. package/dist/client/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  138. package/dist/client/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  139. package/dist/client/assets/java-CylS5w8V.js +1 -0
  140. package/dist/client/assets/javascript-wDzz0qaB.js +1 -0
  141. package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  142. package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  143. package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  144. package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  145. package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  146. package/dist/client/assets/jinja-4LBKfQ-Z.js +1 -0
  147. package/dist/client/assets/jison-wvAkD_A8.js +1 -0
  148. package/dist/client/assets/json-Cp-IABpG.js +1 -0
  149. package/dist/client/assets/json5-C9tS-k6U.js +1 -0
  150. package/dist/client/assets/jsonc-Des-eS-w.js +1 -0
  151. package/dist/client/assets/jsonl-DcaNXYhu.js +1 -0
  152. package/dist/client/assets/jsonnet-DFQXde-d.js +1 -0
  153. package/dist/client/assets/jssm-C2t-YnRu.js +1 -0
  154. package/dist/client/assets/jsx-g9-lgVsj.js +1 -0
  155. package/dist/client/assets/julia-CxzCAyBv.js +1 -0
  156. package/dist/client/assets/just-Cw27pwNe.js +1 -0
  157. package/dist/client/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  158. package/dist/client/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  159. package/dist/client/assets/kanagawa-wave-DWedfzmr.js +1 -0
  160. package/dist/client/assets/kdl-DV7GczEv.js +1 -0
  161. package/dist/client/assets/kotlin-BdnUsdx6.js +1 -0
  162. package/dist/client/assets/kusto-DZf3V79B.js +1 -0
  163. package/dist/client/assets/laserwave-DUszq2jm.js +1 -0
  164. package/dist/client/assets/latex-CWtU0Tv5.js +1 -0
  165. package/dist/client/assets/lean-BZvkOJ9d.js +1 -0
  166. package/dist/client/assets/less-B1dDrJ26.js +1 -0
  167. package/dist/client/assets/light-plus-B7mTdjB0.js +1 -0
  168. package/dist/client/assets/liquid-DYVedYrR.js +1 -0
  169. package/dist/client/assets/llvm-DjAJT7YJ.js +1 -0
  170. package/dist/client/assets/log-2UxHyX5q.js +1 -0
  171. package/dist/client/assets/logo-BtOb2qkB.js +1 -0
  172. package/dist/client/assets/lua-BaeVxFsk.js +1 -0
  173. package/dist/client/assets/luau-C-HG3fhB.js +1 -0
  174. package/dist/client/assets/make-CHLpvVh8.js +1 -0
  175. package/dist/client/assets/markdown-Cvjx9yec.js +1 -0
  176. package/dist/client/assets/marko-CnJfTvn9.js +1 -0
  177. package/dist/client/assets/material-theme-D5KoaKCx.js +1 -0
  178. package/dist/client/assets/material-theme-darker-BfHTSMKl.js +1 -0
  179. package/dist/client/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  180. package/dist/client/assets/material-theme-ocean-CyktbL80.js +1 -0
  181. package/dist/client/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  182. package/dist/client/assets/matlab-D7o27uSR.js +1 -0
  183. package/dist/client/assets/mdc-BMNejdWA.js +1 -0
  184. package/dist/client/assets/mdx-Cmh6b_Ma.js +1 -0
  185. package/dist/client/assets/mermaid-mWjccvbQ.js +1 -0
  186. package/dist/client/assets/min-dark-CafNBF8u.js +1 -0
  187. package/dist/client/assets/min-light-CTRr51gU.js +1 -0
  188. package/dist/client/assets/mipsasm-CKIfxQSi.js +1 -0
  189. package/dist/client/assets/mojo-rZm6bMo-.js +1 -0
  190. package/dist/client/assets/monokai-D4h5O-jR.js +1 -0
  191. package/dist/client/assets/moonbit-_H4v1dQx.js +1 -0
  192. package/dist/client/assets/move-IF9eRakj.js +1 -0
  193. package/dist/client/assets/narrat-DRg8JJMk.js +1 -0
  194. package/dist/client/assets/nextflow-Zz6hmt5N.js +1 -0
  195. package/dist/client/assets/nextflow-groovy-BeH2EWoN.js +1 -0
  196. package/dist/client/assets/nginx-BpAMiNFr.js +1 -0
  197. package/dist/client/assets/night-owl-C39BiMTA.js +1 -0
  198. package/dist/client/assets/night-owl-light-CMTm3GFP.js +1 -0
  199. package/dist/client/assets/nim-CVrawwO9.js +1 -0
  200. package/dist/client/assets/nix-CwoSXNpI.js +1 -0
  201. package/dist/client/assets/nord-Ddv68eIx.js +1 -0
  202. package/dist/client/assets/nushell-Cz2AlsmD.js +1 -0
  203. package/dist/client/assets/objective-c-DXmwc3jG.js +1 -0
  204. package/dist/client/assets/objective-cpp-CLxacb5B.js +1 -0
  205. package/dist/client/assets/ocaml-C0hk2d4L.js +1 -0
  206. package/dist/client/assets/odin-BBf5iR-q.js +1 -0
  207. package/dist/client/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  208. package/dist/client/assets/one-light-C3Wv6jpd.js +1 -0
  209. package/dist/client/assets/openscad-C4EeE6gA.js +1 -0
  210. package/dist/client/assets/pascal-D93ZcfNL.js +1 -0
  211. package/dist/client/assets/perl-C0TMdlhV.js +1 -0
  212. package/dist/client/assets/php-Dhbhpdrm.js +1 -0
  213. package/dist/client/assets/pierre-dark-DF2SEV7i.js +1 -0
  214. package/dist/client/assets/pierre-light-DOlZxES8.js +1 -0
  215. package/dist/client/assets/pkl-u5AG7uiY.js +1 -0
  216. package/dist/client/assets/plastic-3e1v2bzS.js +1 -0
  217. package/dist/client/assets/plsql-ChMvpjG-.js +1 -0
  218. package/dist/client/assets/po-BTJTHyun.js +1 -0
  219. package/dist/client/assets/poimandres-CS3Unz2-.js +1 -0
  220. package/dist/client/assets/polar-C0HS_06l.js +1 -0
  221. package/dist/client/assets/postcss-CXtECtnM.js +1 -0
  222. package/dist/client/assets/powerquery-CEu0bR-o.js +1 -0
  223. package/dist/client/assets/powershell-Dpen1YoG.js +1 -0
  224. package/dist/client/assets/prisma-Dd19v3D-.js +1 -0
  225. package/dist/client/assets/prolog-CbFg5uaA.js +1 -0
  226. package/dist/client/assets/proto-C7zT0LnQ.js +1 -0
  227. package/dist/client/assets/pug-CGlum2m_.js +1 -0
  228. package/dist/client/assets/puppet-BMWR74SV.js +1 -0
  229. package/dist/client/assets/purescript-CklMAg4u.js +1 -0
  230. package/dist/client/assets/python-B6aJPvgy.js +1 -0
  231. package/dist/client/assets/qml-3beO22l8.js +1 -0
  232. package/dist/client/assets/qmldir-C8lEn-DE.js +1 -0
  233. package/dist/client/assets/qss-IeuSbFQv.js +1 -0
  234. package/dist/client/assets/r-Dspwwk_N.js +1 -0
  235. package/dist/client/assets/racket-BqYA7rlc.js +1 -0
  236. package/dist/client/assets/raku-DXvB9xmW.js +1 -0
  237. package/dist/client/assets/razor-Uh8Bk_45.js +1 -0
  238. package/dist/client/assets/red-bN70gL4F.js +1 -0
  239. package/dist/client/assets/reg-C-SQnVFl.js +1 -0
  240. package/dist/client/assets/regexp-CDVJQ6XC.js +1 -0
  241. package/dist/client/assets/rel-C3B-1QV4.js +1 -0
  242. package/dist/client/assets/riscv-BM1_JUlF.js +1 -0
  243. package/dist/client/assets/ron-D8l8udqQ.js +1 -0
  244. package/dist/client/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  245. package/dist/client/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  246. package/dist/client/assets/rose-pine-qdsjHGoJ.js +1 -0
  247. package/dist/client/assets/rosmsg-BJDFO7_C.js +1 -0
  248. package/dist/client/assets/rst-BrH8l1NY.js +1 -0
  249. package/dist/client/assets/ruby-Dw2BHqvy.js +1 -0
  250. package/dist/client/assets/rust-B1yitclQ.js +1 -0
  251. package/dist/client/assets/sas-cz2c8ADy.js +1 -0
  252. package/dist/client/assets/sass-Cj5Yp3dK.js +1 -0
  253. package/dist/client/assets/scala-C151Ov-r.js +1 -0
  254. package/dist/client/assets/scheme-C98Dy4si.js +1 -0
  255. package/dist/client/assets/scratchpad-page-DcMny6uZ.js +1 -0
  256. package/dist/client/assets/scss-OYdSNvt2.js +1 -0
  257. package/dist/client/assets/sdbl-DVxCFoDh.js +1 -0
  258. package/dist/client/assets/shaderlab-Dg9Lc6iA.js +1 -0
  259. package/dist/client/assets/shellscript-Yzrsuije.js +1 -0
  260. package/dist/client/assets/shellsession-BADoaaVG.js +1 -0
  261. package/dist/client/assets/slack-dark-BthQWCQV.js +1 -0
  262. package/dist/client/assets/slack-ochin-DqwNpetd.js +1 -0
  263. package/dist/client/assets/smalltalk-BERRCDM3.js +1 -0
  264. package/dist/client/assets/snazzy-light-Bw305WKR.js +1 -0
  265. package/dist/client/assets/solarized-dark-DXbdFlpD.js +1 -0
  266. package/dist/client/assets/solarized-light-L9t79GZl.js +1 -0
  267. package/dist/client/assets/solidity-rGO070M0.js +1 -0
  268. package/dist/client/assets/soy-Brmx7dQM.js +1 -0
  269. package/dist/client/assets/sparql-rVzFXLq3.js +1 -0
  270. package/dist/client/assets/splunk-BtCnVYZw.js +1 -0
  271. package/dist/client/assets/sql-BLtJtn59.js +1 -0
  272. package/dist/client/assets/ssh-config-_ykCGR6B.js +1 -0
  273. package/dist/client/assets/stata-BH5u7GGu.js +1 -0
  274. package/dist/client/assets/stylus-BEDo0Tqx.js +1 -0
  275. package/dist/client/assets/surrealql-Bq5Q-fJD.js +1 -0
  276. package/dist/client/assets/svelte-C_ipcX3V.js +1 -0
  277. package/dist/client/assets/swift-D82vCrfD.js +1 -0
  278. package/dist/client/assets/synthwave-84-CbfX1IO0.js +1 -0
  279. package/dist/client/assets/system-verilog-CnnmHF94.js +1 -0
  280. package/dist/client/assets/systemd-4A_iFExJ.js +1 -0
  281. package/dist/client/assets/talonscript-CkByrt1z.js +1 -0
  282. package/dist/client/assets/tasl-QIJgUcNo.js +1 -0
  283. package/dist/client/assets/tcl-dwOrl1Do.js +1 -0
  284. package/dist/client/assets/templ-P3uqSqPl.js +1 -0
  285. package/dist/client/assets/terraform-BETggiCN.js +1 -0
  286. package/dist/client/assets/tex-idrVyKtj.js +1 -0
  287. package/dist/client/assets/tokyo-night-hegEt444.js +1 -0
  288. package/dist/client/assets/toml-vGWfd6FD.js +1 -0
  289. package/dist/client/assets/ts-tags-zn1MmPIZ.js +1 -0
  290. package/dist/client/assets/tsv-B_m7g4N7.js +1 -0
  291. package/dist/client/assets/tsx-COt5Ahok.js +1 -0
  292. package/dist/client/assets/turtle-BsS91CYL.js +1 -0
  293. package/dist/client/assets/twig-DNn4PbVi.js +1 -0
  294. package/dist/client/assets/typescript-BPQ3VLAy.js +1 -0
  295. package/dist/client/assets/typespec-BGHnOYBU.js +1 -0
  296. package/dist/client/assets/typst-DHCkPAjA.js +1 -0
  297. package/dist/client/assets/v-BcVCzyr7.js +1 -0
  298. package/dist/client/assets/vala-CsfeWuGM.js +1 -0
  299. package/dist/client/assets/vb-D17OF-Vu.js +1 -0
  300. package/dist/client/assets/verilog-BQ8w6xss.js +1 -0
  301. package/dist/client/assets/vesper-DU1UobuO.js +1 -0
  302. package/dist/client/assets/vhdl-CeAyd5Ju.js +1 -0
  303. package/dist/client/assets/viml-CJc9bBzg.js +1 -0
  304. package/dist/client/assets/vitesse-black-Bkuqu6BP.js +1 -0
  305. package/dist/client/assets/vitesse-dark-D0r3Knsf.js +1 -0
  306. package/dist/client/assets/vitesse-light-CVO1_9PV.js +1 -0
  307. package/dist/client/assets/vue-DN_0RTcg.js +1 -0
  308. package/dist/client/assets/vue-html-AaS7Mt5G.js +1 -0
  309. package/dist/client/assets/vue-vine-CQOfvN7w.js +1 -0
  310. package/dist/client/assets/vyper-CDx5xZoG.js +1 -0
  311. package/dist/client/assets/wasm-CG6Dc4jp.js +1 -0
  312. package/dist/client/assets/wasm-MzD3tlZU.js +1 -0
  313. package/dist/client/assets/wenyan-BV7otONQ.js +1 -0
  314. package/dist/client/assets/wgsl-Dx-B1_4e.js +1 -0
  315. package/dist/client/assets/wikitext-BhOHFoWU.js +1 -0
  316. package/dist/client/assets/wit-5i3qLPDT.js +1 -0
  317. package/dist/client/assets/wolfram-lXgVvXCa.js +1 -0
  318. package/dist/client/assets/xml-sdJ4AIDG.js +1 -0
  319. package/dist/client/assets/xsl-CtQFsRM5.js +1 -0
  320. package/dist/client/assets/yaml-Buea-lGh.js +1 -0
  321. package/dist/client/assets/zenscript-DVFEvuxE.js +1 -0
  322. package/dist/client/assets/zig-VOosw3JB.js +1 -0
  323. package/dist/client/cursor.png +0 -0
  324. package/dist/client/favicon.svg +17 -0
  325. package/dist/client/finder.png +0 -0
  326. package/dist/client/icons/claude.svg +1 -0
  327. package/dist/client/icons/openai.svg +1 -0
  328. package/dist/client/images/github.png +0 -0
  329. package/dist/client/index.html +15 -0
  330. package/dist/client/logo.svg +17 -0
  331. package/dist/client/terminal.png +0 -0
  332. package/dist/client/vscode.png +0 -0
  333. package/dist/client/warp.png +0 -0
  334. package/package.json +107 -0
  335. package/src/server/agent-instruction-attachments.ts +458 -0
  336. package/src/server/agent.ts +1879 -0
  337. package/src/server/cli-runtime.ts +418 -0
  338. package/src/server/cli-supervisor.ts +90 -0
  339. package/src/server/cli.ts +102 -0
  340. package/src/server/codex-app-server-protocol.ts +478 -0
  341. package/src/server/codex-app-server.ts +1645 -0
  342. package/src/server/data-dir-lock.ts +128 -0
  343. package/src/server/diff-store.ts +1587 -0
  344. package/src/server/durable-file.ts +74 -0
  345. package/src/server/event-store.ts +1448 -0
  346. package/src/server/event.ts +249 -0
  347. package/src/server/external-file-access.ts +48 -0
  348. package/src/server/external-open.ts +259 -0
  349. package/src/server/generate-title.ts +75 -0
  350. package/src/server/git-refresh-poller.ts +92 -0
  351. package/src/server/github-rest-client.ts +176 -0
  352. package/src/server/harness-types.ts +24 -0
  353. package/src/server/keybindings.ts +203 -0
  354. package/src/server/machine-name.ts +22 -0
  355. package/src/server/paths.ts +51 -0
  356. package/src/server/pr-manager.ts +1204 -0
  357. package/src/server/pr-refresh-poller.ts +126 -0
  358. package/src/server/process-utils.ts +18 -0
  359. package/src/server/provider-catalog.ts +90 -0
  360. package/src/server/quick-response.ts +274 -0
  361. package/src/server/read-models.ts +311 -0
  362. package/src/server/restart.ts +33 -0
  363. package/src/server/scratchpad-manager.ts +87 -0
  364. package/src/server/server.ts +759 -0
  365. package/src/server/share.ts +126 -0
  366. package/src/server/terminal-manager.ts +371 -0
  367. package/src/server/update-manager.ts +250 -0
  368. package/src/server/uploads.ts +191 -0
  369. package/src/server/workspace-file-search.ts +191 -0
  370. package/src/server/workspace-manager.ts +627 -0
  371. package/src/server/workspace-polling.ts +10 -0
  372. package/src/server/ws-router.ts +1039 -0
  373. package/src/shared/branding.ts +69 -0
  374. package/src/shared/dev-ports.ts +100 -0
  375. package/src/shared/ports.ts +2 -0
  376. package/src/shared/protocol.ts +217 -0
  377. package/src/shared/tools.ts +324 -0
  378. package/src/shared/types.ts +1220 -0
  379. package/tsconfig.json +35 -0
@@ -0,0 +1,1220 @@
1
+ export type AgentProvider = 'claude' | 'codex';
2
+
3
+ export type AttachmentKind = 'image' | 'file';
4
+
5
+ export interface ChatAttachment {
6
+ id: string;
7
+ kind: AttachmentKind;
8
+ displayName: string;
9
+ absolutePath: string;
10
+ relativePath: string;
11
+ contentUrl: string;
12
+ mimeType: string;
13
+ size: number;
14
+ }
15
+
16
+ export type PromptPart =
17
+ | { type: 'text'; text: string }
18
+ | { type: 'mention'; path: string; label?: string }
19
+ | { type: 'attachment'; attachmentId: string }
20
+ | { type: 'pasted_text'; id: string; text: string };
21
+
22
+ export interface InternalUserAttachmentsData {
23
+ userText: string;
24
+ attachments: ChatAttachment[];
25
+ llmHintText: string;
26
+ }
27
+
28
+ export interface ProviderModelOption {
29
+ id: string;
30
+ label: string;
31
+ supportsEffort: boolean;
32
+ contextWindowOptions?: readonly ProviderContextWindowOption[];
33
+ badge?: 'NEW';
34
+ }
35
+
36
+ export interface ProviderEffortOption {
37
+ id: string;
38
+ label: string;
39
+ }
40
+
41
+ export interface ProviderContextWindowOption {
42
+ id: ClaudeContextWindow;
43
+ label: string;
44
+ }
45
+
46
+ export const CLAUDE_REASONING_OPTIONS = [
47
+ { id: 'low', label: 'Low' },
48
+ { id: 'medium', label: 'Medium' },
49
+ { id: 'high', label: 'High' },
50
+ { id: 'max', label: 'Max' },
51
+ ] as const satisfies readonly ProviderEffortOption[];
52
+
53
+ export const CODEX_REASONING_OPTIONS = [
54
+ { id: 'minimal', label: 'Minimal' },
55
+ { id: 'low', label: 'Low' },
56
+ { id: 'medium', label: 'Medium' },
57
+ { id: 'high', label: 'High' },
58
+ { id: 'xhigh', label: 'XHigh' },
59
+ ] as const satisfies readonly ProviderEffortOption[];
60
+
61
+ export type ClaudeReasoningEffort = (typeof CLAUDE_REASONING_OPTIONS)[number]['id'];
62
+ export type CodexReasoningEffort = (typeof CODEX_REASONING_OPTIONS)[number]['id'];
63
+ export type ClaudeContextWindow = '200k' | '1m';
64
+ export type ServiceTier = 'fast';
65
+
66
+ export interface ClaudeModelOptions {
67
+ reasoningEffort: ClaudeReasoningEffort;
68
+ contextWindow: ClaudeContextWindow;
69
+ }
70
+
71
+ export interface CodexModelOptions {
72
+ reasoningEffort: CodexReasoningEffort;
73
+ fastMode: boolean;
74
+ }
75
+
76
+ export interface ProviderModelOptionsByProvider {
77
+ claude: ClaudeModelOptions;
78
+ codex: CodexModelOptions;
79
+ }
80
+
81
+ export type ModelOptions = Partial<{
82
+ [K in AgentProvider]: Partial<ProviderModelOptionsByProvider[K]>;
83
+ }>;
84
+
85
+ export const DEFAULT_CLAUDE_MODEL_OPTIONS = {
86
+ reasoningEffort: 'high',
87
+ contextWindow: '200k',
88
+ } as const satisfies ClaudeModelOptions;
89
+
90
+ export const DEFAULT_CODEX_MODEL_OPTIONS = {
91
+ reasoningEffort: 'high',
92
+ fastMode: false,
93
+ } as const satisfies CodexModelOptions;
94
+
95
+ export function isClaudeReasoningEffort(value: unknown): value is ClaudeReasoningEffort {
96
+ return CLAUDE_REASONING_OPTIONS.some((option) => option.id === value);
97
+ }
98
+
99
+ export function isCodexReasoningEffort(value: unknown): value is CodexReasoningEffort {
100
+ return CODEX_REASONING_OPTIONS.some((option) => option.id === value);
101
+ }
102
+
103
+ export const CLAUDE_CONTEXT_WINDOW_OPTIONS = [
104
+ { id: '200k', label: '200k' },
105
+ { id: '1m', label: '1M' },
106
+ ] as const satisfies readonly ProviderContextWindowOption[];
107
+
108
+ export function isClaudeContextWindow(value: unknown): value is ClaudeContextWindow {
109
+ return CLAUDE_CONTEXT_WINDOW_OPTIONS.some((option) => option.id === value);
110
+ }
111
+
112
+ export interface ProviderCatalogEntry {
113
+ id: AgentProvider;
114
+ label: string;
115
+ defaultModel: string;
116
+ defaultEffort?: string;
117
+ supportsPlanMode: boolean;
118
+ models: ProviderModelOption[];
119
+ efforts: ProviderEffortOption[];
120
+ }
121
+
122
+ export const PROVIDERS: ProviderCatalogEntry[] = [
123
+ {
124
+ id: 'claude',
125
+ label: 'Claude',
126
+ defaultModel: 'claude-sonnet-4-6',
127
+ defaultEffort: 'high',
128
+ supportsPlanMode: true,
129
+ // `id` values are runtime model ids accepted by the installed Claude Code harness.
130
+ // 1M context is a session beta (`context-1m-2025-08-07`); models that support it expose
131
+ // `contextWindowOptions` so the composer can offer a 1M variant row.
132
+ models: [
133
+ { id: 'claude-fable-5', label: 'Fable 5', supportsEffort: true, badge: 'NEW' },
134
+ {
135
+ id: 'claude-opus-4-8',
136
+ label: 'Opus 4.8',
137
+ supportsEffort: true,
138
+ badge: 'NEW',
139
+ contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS],
140
+ },
141
+ {
142
+ id: 'claude-opus-4-6',
143
+ label: 'Opus 4.6',
144
+ supportsEffort: true,
145
+ contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS],
146
+ },
147
+ {
148
+ id: 'claude-sonnet-4-6',
149
+ label: 'Sonnet 4.6',
150
+ supportsEffort: true,
151
+ contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS],
152
+ },
153
+ { id: 'claude-haiku-4-5', label: 'Haiku 4.5', supportsEffort: true },
154
+ ],
155
+ efforts: [...CLAUDE_REASONING_OPTIONS],
156
+ },
157
+ {
158
+ id: 'codex',
159
+ label: 'Codex',
160
+ defaultModel: 'gpt-5.5',
161
+ supportsPlanMode: true,
162
+ models: [
163
+ { id: 'gpt-5.5', label: 'GPT-5.5', supportsEffort: false },
164
+ { id: 'gpt-5.4', label: 'GPT-5.4', supportsEffort: false },
165
+ ],
166
+ efforts: [],
167
+ },
168
+ ];
169
+
170
+ export function getProviderCatalog(provider: AgentProvider): ProviderCatalogEntry {
171
+ const entry = PROVIDERS.find((candidate) => candidate.id === provider);
172
+ if (!entry) {
173
+ throw new Error(`Unknown provider: ${provider}`);
174
+ }
175
+ return entry;
176
+ }
177
+
178
+ export function getClaudeModelOption(modelId: string): ProviderModelOption | undefined {
179
+ return getProviderCatalog('claude').models.find((candidate) => candidate.id === modelId);
180
+ }
181
+
182
+ export function getClaudeContextWindowOptions(
183
+ modelId: string,
184
+ ): readonly ProviderContextWindowOption[] {
185
+ return getClaudeModelOption(modelId)?.contextWindowOptions ?? [];
186
+ }
187
+
188
+ export function normalizeClaudeContextWindow(
189
+ modelId: string,
190
+ contextWindow?: unknown,
191
+ ): ClaudeContextWindow {
192
+ const options = getClaudeContextWindowOptions(modelId);
193
+ if (options.length === 0) return DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow;
194
+
195
+ return options.some((option) => option.id === contextWindow)
196
+ ? (contextWindow as ClaudeContextWindow)
197
+ : DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow;
198
+ }
199
+
200
+ export function resolveClaudeContextWindowTokens(contextWindow: ClaudeContextWindow): number {
201
+ switch (contextWindow) {
202
+ case '1m':
203
+ return 1_000_000;
204
+ case '200k':
205
+ return 200_000;
206
+ default:
207
+ return 200_000;
208
+ }
209
+ }
210
+
211
+ export type MikoStatus = 'idle' | 'starting' | 'running' | 'waiting_for_user' | 'failed';
212
+
213
+ export interface DirectorySummary {
214
+ id: string;
215
+ localPath: string;
216
+ title: string;
217
+ githubOwner: string;
218
+ githubRepo: string;
219
+ defaultBranchName: 'main';
220
+ createdAt: number;
221
+ updatedAt: number;
222
+ }
223
+
224
+ export type WorkspaceReviewState = 'in_progress' | 'in_review' | 'done' | 'closed';
225
+ export type WorkspaceVisibilityState = 'active' | 'archived';
226
+ export type WorkspaceSetupState = 'creating' | 'ready' | 'failed';
227
+ export type WorkspacePullRequestStatus = 'open' | 'merged' | 'closed';
228
+ export type WorkspaceHealthState =
229
+ | 'healthy'
230
+ | 'source_missing'
231
+ | 'workspace_missing'
232
+ | 'git_invalid'
233
+ | 'worktree_mismatch'
234
+ | 'branch_missing'
235
+ | 'detached_head'
236
+ | 'repo_mismatch';
237
+
238
+ export interface WorkspacePullRequestSummary {
239
+ number: number;
240
+ status: WorkspacePullRequestStatus;
241
+ title?: string;
242
+ body?: string;
243
+ url?: string;
244
+ headRefName?: string;
245
+ baseRefName?: string;
246
+ ciStatus?: 'unknown' | 'pending' | 'passing' | 'failing';
247
+ isDraft?: boolean;
248
+ mergeStateStatus?: string;
249
+ hasMergeConflicts?: boolean;
250
+ unresolvedCommentCount?: number;
251
+ additions?: number;
252
+ deletions?: number;
253
+ createdAt?: number;
254
+ lastObservedAt: number;
255
+ /**
256
+ * Snapshot of the PR's changed files at the time it was observed. Persisted so the
257
+ * right-sidebar Changes list survives a merge/close, when live PR refresh is skipped
258
+ * and the local branch...main diff has collapsed to empty.
259
+ */
260
+ files?: WorkspaceDiffFile[];
261
+ comments?: PullRequestCommentSnapshot[];
262
+ checks?: PullRequestCheckSnapshot[];
263
+ }
264
+
265
+ export interface WorkspaceSummary {
266
+ id: string;
267
+ directoryId: string;
268
+ localPath: string;
269
+ branchName: string;
270
+ setupState: WorkspaceSetupState;
271
+ setupError?: string;
272
+ reviewState: WorkspaceReviewState;
273
+ visibilityState: WorkspaceVisibilityState;
274
+ hasUnreadAgentResult: boolean;
275
+ pullRequest?: WorkspacePullRequestSummary;
276
+ createdAt: number;
277
+ updatedAt: number;
278
+ }
279
+
280
+ export interface SessionSummary {
281
+ id: string;
282
+ workspaceId: string;
283
+ title: string;
284
+ createdAt: number;
285
+ updatedAt: number;
286
+ provider: AgentProvider | null;
287
+ planMode: boolean;
288
+ sessionToken: string | null;
289
+ lastMessageAt?: number;
290
+ lastAssistantPreview?: string;
291
+ lastTurnOutcome: 'success' | 'failed' | 'cancelled' | null;
292
+ }
293
+
294
+ export type WorkspaceSidebarIndicator =
295
+ | 'none'
296
+ | 'workspace_creating'
297
+ | 'workspace_failed'
298
+ | 'agent_active'
299
+ | 'commit_and_push'
300
+ | 'create_pr'
301
+ | 'pr_opened'
302
+ | 'draft_pr'
303
+ | 'ci_failed'
304
+ | 'merge_conflicts'
305
+ | 'merged'
306
+ | 'closed';
307
+
308
+ export interface SidebarWorkspaceRow {
309
+ _id: string;
310
+ _creationTime: number;
311
+ workspaceId: string;
312
+ createdAt: number;
313
+ updatedAt: number;
314
+ displayName: string;
315
+ reviewState: WorkspaceReviewState;
316
+ visibilityState: WorkspaceVisibilityState;
317
+ indicator: WorkspaceSidebarIndicator;
318
+ hasUnreadAgentResult: boolean;
319
+ hasActiveSession: boolean;
320
+ localPath: string;
321
+ branchName: string;
322
+ githubOwner: string;
323
+ githubRepo: string;
324
+ defaultBranchName: 'main';
325
+ hasPullRequest: boolean;
326
+ prNumber?: number;
327
+ prTitle?: string;
328
+ prUrl?: string;
329
+ prCreatedAt?: number;
330
+ hasDirtyFiles: boolean;
331
+ hasUnpushedCommits: boolean;
332
+ displayDiffStats: { additions: number; deletions: number };
333
+ lastActivityAt?: number;
334
+ lastSessionId?: string;
335
+ lastSessionTitle?: string;
336
+ lastAssistantPreview?: string;
337
+ }
338
+
339
+ export interface SidebarDirectoryGroup {
340
+ groupKey: string;
341
+ directoryId: string;
342
+ localPath: string;
343
+ title: string;
344
+ createdAt: number;
345
+ updatedAt: number;
346
+ avatarUrl?: string;
347
+ workspaces: SidebarWorkspaceRow[];
348
+ }
349
+
350
+ export interface SidebarSnapshot {
351
+ directoryGroups: SidebarDirectoryGroup[];
352
+ }
353
+
354
+ export interface DirectoryListSnapshot {
355
+ machine: {
356
+ id: 'local';
357
+ displayName: string;
358
+ };
359
+ directories: DirectorySummary[];
360
+ workspaces: WorkspaceSummary[];
361
+ }
362
+
363
+ export type UpdateStatus =
364
+ | 'idle'
365
+ | 'checking'
366
+ | 'available'
367
+ | 'up_to_date'
368
+ | 'updating'
369
+ | 'restart_pending'
370
+ | 'error';
371
+
372
+ export interface UpdateSnapshot {
373
+ currentVersion: string;
374
+ latestVersion: string | null;
375
+ status: UpdateStatus;
376
+ updateAvailable: boolean;
377
+ lastCheckedAt: number | null;
378
+ error: string | null;
379
+ installAction: 'restart' | 'reload';
380
+ }
381
+
382
+ export type UpdateInstallErrorCode = 'version_not_live_yet' | 'install_failed' | 'command_missing';
383
+
384
+ export interface UpdateInstallResult {
385
+ ok: boolean;
386
+ action: 'restart' | 'realod';
387
+ errorCode: UpdateInstallErrorCode | null;
388
+ userTitle: string | null;
389
+ userMessage: string | null;
390
+ }
391
+
392
+ export type KeybindingAction =
393
+ | 'toggleLeftSidebar'
394
+ | 'toggleEmbeddedTerminal'
395
+ | 'toggleRightSidebar'
396
+ | 'addSplitTerminal'
397
+ | 'createSessionInCurrentWorkspace'
398
+ | 'createWorkspaceInCurrentDirectory'
399
+ | 'switchToNextWorkspace';
400
+
401
+ export const DEFAULT_KEYBINDINGS: Record<KeybindingAction, string[]> = {
402
+ toggleLeftSidebar: ['cmd+shift+b', 'ctrl+shift+b'],
403
+ toggleEmbeddedTerminal: ['cmd+j', 'ctrl+`'],
404
+ toggleRightSidebar: ['cmd+b', 'ctrl+b'],
405
+ addSplitTerminal: ['cmd+/', 'ctrl+/'],
406
+ createSessionInCurrentWorkspace: ['cmd+alt+n'],
407
+ createWorkspaceInCurrentDirectory: ['cmd+alt+shift+n'],
408
+ switchToNextWorkspace: ['cmd+alt+down', 'ctrl+alt+down'],
409
+ };
410
+
411
+ export interface KeybindingsSnapshot {
412
+ bindings: Record<KeybindingAction, string[]>;
413
+ warning: string | null;
414
+ filePathDisplay: string;
415
+ }
416
+
417
+ export interface McpServerInfo {
418
+ name: string;
419
+ status: string;
420
+ error?: string;
421
+ }
422
+
423
+ export interface AccountInfo {
424
+ email?: string;
425
+ organization?: string;
426
+ subscriptionType?: string;
427
+ tokenSource?: string;
428
+ apiKeySource?: string;
429
+ }
430
+
431
+ export interface AskUserQuestionOption {
432
+ label: string;
433
+ description?: string;
434
+ }
435
+
436
+ export interface AskUserQuestionItem {
437
+ id?: string;
438
+ question: string;
439
+ header?: string;
440
+ options?: AskUserQuestionOption[];
441
+ multiSelect?: boolean;
442
+ }
443
+
444
+ export type AskUserQuestionAnswerMap = Record<string, string[]>;
445
+
446
+ export interface TodoItem {
447
+ content: string;
448
+ status: 'pending' | 'in_progress' | 'completed';
449
+ activeForm: string;
450
+ }
451
+
452
+ interface TranscriptEntryBase {
453
+ _id: string;
454
+ messageId?: string;
455
+ createdAt: number;
456
+ hidden?: boolean;
457
+ debugRaw?: string;
458
+ }
459
+
460
+ interface ToolCallBase<Tkind extends string, TInput> {
461
+ kind: 'tool';
462
+ toolKind: Tkind;
463
+ toolName: string;
464
+ toolId: string;
465
+ input: TInput;
466
+ rawInput?: Record<string, unknown>;
467
+ }
468
+
469
+ export interface AskUserQuestionToolCall
470
+ extends ToolCallBase<'ask_user_question', { questions: AskUserQuestionItem[] }> {}
471
+
472
+ export interface ExitPlanModeToolCall
473
+ extends ToolCallBase<'exit_plan_mode', { plan?: string; summary?: string }> {}
474
+
475
+ export interface TodoWriteToolCall extends ToolCallBase<'todo_write', { todos: TodoItem[] }> {}
476
+
477
+ export interface SkillToolCall extends ToolCallBase<'skill', { skill: string }> {}
478
+
479
+ export interface GlobToolCall extends ToolCallBase<'glob', { pattern: string }> {}
480
+
481
+ export interface GrepToolCall
482
+ extends ToolCallBase<'grep', { pattern: string; outputMode?: string }> {}
483
+
484
+ export interface BashToolCall
485
+ extends ToolCallBase<
486
+ 'bash',
487
+ { command: string; description?: string; timeoutMs?: number; runInBackground?: boolean }
488
+ > {}
489
+
490
+ export interface WebSearchToolCall extends ToolCallBase<'web_search', { query: string }> {}
491
+
492
+ export interface ReadFileToolCall extends ToolCallBase<'read_file', { filePath: string }> {}
493
+
494
+ export interface WriteFileToolCall
495
+ extends ToolCallBase<'write_file', { filePath: string; content: string }> {}
496
+
497
+ export interface EditFileToolCall
498
+ extends ToolCallBase<'edit_file', { filePath: string; oldString: string; newString: string }> {}
499
+
500
+ export interface DeleteFileToolCall
501
+ extends ToolCallBase<'delete_file', { filePath: string; oldString?: string }> {}
502
+
503
+ export interface SubAgentTaskToolCall
504
+ extends ToolCallBase<'subagent_task', { subagentType?: string }> {}
505
+
506
+ export interface McpGenericToolCall
507
+ extends ToolCallBase<
508
+ 'mcp_generic',
509
+ { server: string; tool: string; payload: Record<string, unknown> }
510
+ > {}
511
+
512
+ export interface UnknownToolCall
513
+ extends ToolCallBase<'unknown_tool', { payload: Record<string, unknown> }> {}
514
+
515
+ export type NormalizedToolCall =
516
+ | AskUserQuestionToolCall
517
+ | ExitPlanModeToolCall
518
+ | TodoWriteToolCall
519
+ | SkillToolCall
520
+ | GlobToolCall
521
+ | GrepToolCall
522
+ | BashToolCall
523
+ | WebSearchToolCall
524
+ | ReadFileToolCall
525
+ | WriteFileToolCall
526
+ | EditFileToolCall
527
+ | DeleteFileToolCall
528
+ | SubAgentTaskToolCall
529
+ | McpGenericToolCall
530
+ | UnknownToolCall;
531
+
532
+ export interface ToolResultEntry extends TranscriptEntryBase {
533
+ kind: 'tool_result';
534
+ toolId: string;
535
+ content: unknown;
536
+ isError?: false;
537
+ }
538
+
539
+ export interface UserPromptEntry extends TranscriptEntryBase {
540
+ kind: 'user_prompt';
541
+ content: string;
542
+ attachments?: ChatAttachment[];
543
+ parts?: PromptPart[];
544
+ }
545
+
546
+ export interface SystemInitEntry extends TranscriptEntryBase {
547
+ kind: 'system_init';
548
+ provider: AgentProvider;
549
+ model: string;
550
+ tools: string[];
551
+ agents: string[];
552
+ slashCommands: string[];
553
+ mcpServers: McpServerInfo[];
554
+ }
555
+
556
+ export interface AccountInfoEntry extends TranscriptEntryBase {
557
+ kind: 'account_info';
558
+ accountInfo: AccountInfo;
559
+ }
560
+
561
+ export interface AssistantTextEntry extends TranscriptEntryBase {
562
+ kind: 'assistant_text';
563
+ text: string;
564
+ }
565
+
566
+ export interface ToolCallEntry extends TranscriptEntryBase {
567
+ kind: 'tool_call';
568
+ tool: NormalizedToolCall;
569
+ }
570
+
571
+ export interface ResultEntry extends TranscriptEntryBase {
572
+ kind: 'result';
573
+ subtype: 'success' | 'error' | 'cancelled';
574
+ isError: boolean;
575
+ durationMs: number;
576
+ result: string;
577
+ costUsd?: number;
578
+ }
579
+
580
+ export interface StatusEntry extends TranscriptEntryBase {
581
+ kind: 'status';
582
+ status: string;
583
+ }
584
+
585
+ export interface ContextWindowUsageSnapshot {
586
+ usedTokens: number;
587
+ totalProcessedTokens?: number;
588
+ maxTokens?: number;
589
+ inputTokens?: number;
590
+ cachedInputTokens?: number;
591
+ outputTokens?: number;
592
+ reasoningOutputTokens?: number;
593
+ lastUsedTokens?: number;
594
+ lastInputTokens?: number;
595
+ lastCachedInputTokens?: number;
596
+ lastOutputTokens?: number;
597
+ lastReasoningOutputTokens?: number;
598
+ toolUses?: number;
599
+ durationMs?: number;
600
+ compactsAutomatically: boolean;
601
+ }
602
+
603
+ export interface WorkspaceDiffFile {
604
+ path: string;
605
+ changeType: 'added' | 'deleted' | 'modified' | 'renamed';
606
+ isUntracked: boolean;
607
+ additions: number;
608
+ deletions: number;
609
+ patchDigest: string;
610
+ patch?: string;
611
+ mimeType?: string;
612
+ size?: number;
613
+ }
614
+
615
+ export interface WorkspaceDiffPatchResult {
616
+ path: string;
617
+ patch: string;
618
+ patchDigest: string;
619
+ }
620
+
621
+ export interface WorkspaceTextFilePreviewResult {
622
+ kind: 'text';
623
+ path: string;
624
+ name: string;
625
+ contents: string;
626
+ mimeType: string;
627
+ size: number;
628
+ encoding: 'utf-8';
629
+ cacheKey: string;
630
+ }
631
+
632
+ export interface WorkspaceImageFilePreviewResult {
633
+ kind: 'image';
634
+ path: string;
635
+ name: string;
636
+ contentUrl: string;
637
+ mimeType: string;
638
+ size: number;
639
+ cacheKey: string;
640
+ }
641
+
642
+ export interface WorkspaceBinaryFilePreviewResult {
643
+ kind: 'binary';
644
+ path: string;
645
+ name: string;
646
+ mimeType: string;
647
+ size: number;
648
+ cacheKey: string;
649
+ }
650
+
651
+ export type WorkspaceFileContentsResult =
652
+ | WorkspaceTextFilePreviewResult
653
+ | WorkspaceImageFilePreviewResult
654
+ | WorkspaceBinaryFilePreviewResult;
655
+
656
+ export interface WorkspaceFileSearchResult {
657
+ id: string;
658
+ name: string;
659
+ relativePath: string;
660
+ }
661
+
662
+ export interface WorkspaceBranchHistoryEntry {
663
+ sha: string;
664
+ summary: string;
665
+ description: string;
666
+ authorName?: string;
667
+ authoredAt: string;
668
+ tags: string[];
669
+ githubUrl?: string;
670
+ }
671
+
672
+ export interface WorkspaceBranchHistorySnapshot {
673
+ entries: WorkspaceBranchHistoryEntry[];
674
+ }
675
+
676
+ export type WorkspaceBranchListEntryKind = 'local' | 'remote' | 'pull_request';
677
+
678
+ export interface WorkspaceBranchListEntry {
679
+ id: string;
680
+ kind: WorkspaceBranchListEntryKind;
681
+ name: string;
682
+ displayName: string;
683
+ updatedAt?: string;
684
+ description?: string;
685
+ prNumber?: number;
686
+ prTitle: string;
687
+ headRefName?: string;
688
+ headLabel?: string;
689
+ headRepoCloneUrl?: string;
690
+ isCrossRepository?: boolean;
691
+ }
692
+
693
+ export interface WorkspaceBranchListResult {
694
+ currentBranchName?: string;
695
+ defaultBranchName?: string;
696
+ recent: WorkspaceBranchListEntry[];
697
+ local: WorkspaceBranchListEntry[];
698
+ remote: WorkspaceBranchListEntry[];
699
+ pullRequests: WorkspaceBranchListEntry[];
700
+ pullRequestsStatus: 'available' | 'unavailable' | 'error';
701
+ pullRequestsError?: string;
702
+ }
703
+
704
+ export interface GithubPublishInfo {
705
+ ghInstalled: boolean;
706
+ authenticated: boolean;
707
+ activeAccountLogin?: string;
708
+ owners: string[];
709
+ suggestedRepoName: string;
710
+ }
711
+
712
+ export interface GitHubRepoAvailabilityResult {
713
+ available: boolean;
714
+ message: string;
715
+ }
716
+
717
+ export interface BranchMetadata {
718
+ branchName?: string;
719
+ defaultBranchName?: string;
720
+ hasOriginRemote?: boolean;
721
+ originRepoSlug?: string;
722
+ hasUpstream?: boolean;
723
+ }
724
+
725
+ export interface UpstreamStatus {
726
+ aheadCount?: number;
727
+ behindCount?: number;
728
+ lastFetchedAt?: string;
729
+ }
730
+
731
+ export interface WorkspaceGitSnapshot extends BranchMetadata, UpstreamStatus {
732
+ status: 'unknown' | 'ready' | 'no_repo';
733
+ files: WorkspaceDiffFile[];
734
+ pullRequestFiles?: WorkspaceDiffFile[];
735
+ hasPushedCommits?: boolean;
736
+ branchPublishState?: 'unknown' | 'local_only' | 'published';
737
+ mainAheadCount?: number;
738
+ branchHistory?: WorkspaceBranchHistorySnapshot;
739
+ }
740
+
741
+ export interface WorkspaceGitHubSnapshot {
742
+ status: 'unknown' | 'none' | 'open' | 'merged' | 'closed';
743
+ owner: string;
744
+ repo: string;
745
+ prNumber?: number;
746
+ title?: string;
747
+ body?: string;
748
+ url?: string;
749
+ headRefName?: string;
750
+ baseRefName?: string;
751
+ ciStatus?: 'unknown' | 'pending' | 'passing' | 'failing';
752
+ isDraft?: boolean;
753
+ mergeStateStatus?: string;
754
+ hasMergeConflicts?: boolean;
755
+ unresolvedCommentCount?: number;
756
+ additions?: number;
757
+ deletions?: number;
758
+ files?: WorkspaceDiffFile[];
759
+ comments: PullRequestCommentSnapshot[];
760
+ checks: PullRequestCheckSnapshot[];
761
+ createdAt?: number;
762
+ lastRefreshedAt?: number;
763
+ }
764
+
765
+ export interface PullRequestCommentSnapshot {
766
+ id: string;
767
+ author?: string;
768
+ authorAssociation?: string;
769
+ body: string;
770
+ url?: string;
771
+ path?: string;
772
+ line?: number;
773
+ isResolved?: boolean;
774
+ isBot: boolean;
775
+ source: 'issue' | 'review' | 'thread';
776
+ createdAt?: string;
777
+ updatedAt?: string;
778
+ }
779
+
780
+ export interface PullRequestCheckSnapshot {
781
+ name: string;
782
+ workflowName?: string;
783
+ status: 'unknown' | 'pending' | 'passing' | 'failing';
784
+ conclusion?: string;
785
+ detailsUrl?: string;
786
+ startedAt?: string;
787
+ completedAt?: string;
788
+ summary?: string;
789
+ canFetchLogs: boolean;
790
+ }
791
+
792
+ export interface ScratchpadSnapshot {
793
+ workspaceId: string;
794
+ content: string;
795
+ updatedAt: number | null;
796
+ }
797
+
798
+ export interface WorkspaceSnapshot {
799
+ workspace: WorkspaceSummary;
800
+ primaryLabel: string;
801
+ healthState: WorkspaceHealthState;
802
+ git: WorkspaceGitSnapshot | null;
803
+ github: WorkspaceGitHubSnapshot | null;
804
+ sessions: SessionSummary[];
805
+ hasActiveSession: boolean;
806
+ hasUnreadAgentResult: boolean;
807
+ }
808
+
809
+ export interface BranchActionSuccess {
810
+ ok: true;
811
+ branchName?: string;
812
+ snapshotChanged: boolean;
813
+ }
814
+
815
+ export interface BranchActionFailure {
816
+ ok: false;
817
+ title: string;
818
+ message: string;
819
+ detail?: string;
820
+ cancelled?: boolean;
821
+ snapshotChanged?: boolean;
822
+ }
823
+
824
+ export type WorkspaceSyncSuccess = BranchActionSuccess & {
825
+ action: 'fetch' | 'pull' | 'push' | 'publish';
826
+ aheadCount?: number;
827
+ behindCount?: number;
828
+ };
829
+
830
+ export type WorkspaceSyncFailure = BranchActionFailure & {
831
+ action: 'fetch' | 'pull' | 'push' | 'publish';
832
+ };
833
+
834
+ export type WorkspaceSyncResult = WorkspaceSyncSuccess | WorkspaceSyncFailure;
835
+
836
+ export type DiffCommitMode = 'commit_and_push' | 'commit_only';
837
+
838
+ export type WorkspaceCheckoutBranchSuccess = BranchActionSuccess;
839
+ export type WorkspaceCheckoutBranchFailure = BranchActionFailure;
840
+ export type WorkspaceCheckoutBranchResult =
841
+ | WorkspaceCheckoutBranchSuccess
842
+ | WorkspaceCheckoutBranchFailure;
843
+ export type WorkspaceCreateBranchSuccess = BranchActionSuccess & { branchName: string };
844
+ export type WorkspaceCreateBranchFailure = BranchActionFailure;
845
+ export type WorkspaceCreateBranchResult =
846
+ | WorkspaceCreateBranchSuccess
847
+ | WorkspaceCreateBranchFailure;
848
+ export type WorkspaceMergePreviewStatus = 'up_to_date' | 'mergeable' | 'conflicts' | 'error';
849
+
850
+ export interface WorkspaceMergePreviewResult {
851
+ currentBranchName?: string;
852
+ targetBranchName: string;
853
+ targetDisplayName: string;
854
+ status: WorkspaceMergePreviewStatus;
855
+ commitCount: number;
856
+ hasConflicts: boolean;
857
+ message: string;
858
+ detail?: string;
859
+ }
860
+ export type WorkspaceMergeBranchSuccess = BranchActionSuccess;
861
+ export type WorkspaceMergeBranchFailure = BranchActionFailure;
862
+ export type WorkspaceMergeBranchResult = WorkspaceMergeBranchSuccess | WorkspaceMergeBranchFailure;
863
+ export type DiffCommitSuccess = BranchActionSuccess & { mode: DiffCommitMode; pushed: boolean };
864
+
865
+ export type DiffCommitFailure = BranchActionFailure & {
866
+ mode: DiffCommitMode;
867
+ phase: 'commit' | 'push';
868
+ localCommitCreated?: boolean;
869
+ };
870
+
871
+ export type DiffCommitResult = DiffCommitSuccess | DiffCommitFailure;
872
+
873
+ export interface ContextWindowUpdatedEntry extends TranscriptEntryBase {
874
+ kind: 'context_window_updated';
875
+ usage: ContextWindowUsageSnapshot;
876
+ }
877
+
878
+ export interface CompactBoundaryEntry extends TranscriptEntryBase {
879
+ kind: 'compact_boundary';
880
+ }
881
+
882
+ export interface CompactSummaryEntry extends TranscriptEntryBase {
883
+ kind: 'compact_summary';
884
+ summary: string;
885
+ }
886
+
887
+ export interface ContextClearedEntry extends TranscriptEntryBase {
888
+ kind: 'context_cleared';
889
+ }
890
+
891
+ export interface InterruptedEntry extends TranscriptEntryBase {
892
+ kind: 'interrupted';
893
+ }
894
+
895
+ export type TranscriptEntry =
896
+ | UserPromptEntry
897
+ | SystemInitEntry
898
+ | AccountInfoEntry
899
+ | AssistantTextEntry
900
+ | ToolCallEntry
901
+ | ToolResultEntry
902
+ | ResultEntry
903
+ | StatusEntry
904
+ | ContextWindowUpdatedEntry
905
+ | CompactBoundaryEntry
906
+ | CompactSummaryEntry
907
+ | ContextClearedEntry
908
+ | InterruptedEntry;
909
+
910
+ export interface HydratedToolCallBase<TKind extends string, TInput, TResult> {
911
+ id: string;
912
+ messageId?: string;
913
+ hidden?: boolean;
914
+ kind: 'tool';
915
+ toolKind: TKind;
916
+ toolName: string;
917
+ toolId: string;
918
+ input: TInput;
919
+ result?: TResult;
920
+ hasResult: boolean;
921
+ rawResult?: unknown;
922
+ isError?: boolean;
923
+ timestamp: string;
924
+ }
925
+
926
+ export interface AskUserQuestionToolResult {
927
+ answers: AskUserQuestionAnswerMap;
928
+ discarded?: boolean;
929
+ }
930
+
931
+ export interface ExitPlanModeToolResult {
932
+ confirmed?: boolean;
933
+ clearContext?: boolean;
934
+ message?: string;
935
+ discarded?: boolean;
936
+ }
937
+
938
+ export type HydratedAskUserQuestionToolCall = HydratedToolCallBase<
939
+ 'ask_user_question',
940
+ AskUserQuestionToolCall['input'],
941
+ AskUserQuestionToolResult
942
+ >;
943
+
944
+ export type HydratedExitPlanModeToolCall = HydratedToolCallBase<
945
+ 'exit_plan_mode',
946
+ ExitPlanModeToolCall['input'],
947
+ ExitPlanModeToolResult
948
+ >;
949
+
950
+ export type HydratedTodoWriteToolCall = HydratedToolCallBase<
951
+ 'todo_write',
952
+ TodoWriteToolCall['input'],
953
+ unknown
954
+ >;
955
+
956
+ export type HydratedSkillToolCall = HydratedToolCallBase<'skill', SkillToolCall['input'], unknown>;
957
+
958
+ export type HydratedGlobToolCall = HydratedToolCallBase<'glob', GlobToolCall['input'], unknown>;
959
+
960
+ export type HydratedGrepToolCall = HydratedToolCallBase<'grep', GrepToolCall['input'], unknown>;
961
+
962
+ export type HydratedBashToolCall = HydratedToolCallBase<'bash', BashToolCall['input'], unknown>;
963
+
964
+ export type HydratedWebSearchToolCall = HydratedToolCallBase<
965
+ 'web_search',
966
+ WebSearchToolCall['input'],
967
+ unknown
968
+ >;
969
+
970
+ export interface ReadFileTextBlock {
971
+ type: 'text';
972
+ text: string;
973
+ }
974
+
975
+ export interface ReadFileImageBlock {
976
+ type: 'image';
977
+ data: string;
978
+ mimeType?: string;
979
+ }
980
+
981
+ export interface ReadFileToolResult {
982
+ content: string;
983
+ blocks?: Array<ReadFileTextBlock | ReadFileImageBlock>;
984
+ }
985
+
986
+ export type HydratedReadFileToolCall = HydratedToolCallBase<
987
+ 'read_file',
988
+ ReadFileToolCall['input'],
989
+ ReadFileToolResult | string
990
+ >;
991
+
992
+ export type HydratedWriteFileToolCall = HydratedToolCallBase<
993
+ 'write_file',
994
+ WriteFileToolCall['input'],
995
+ unknown
996
+ >;
997
+
998
+ export type HydratedEditFileToolCall = HydratedToolCallBase<
999
+ 'edit_file',
1000
+ EditFileToolCall['input'],
1001
+ unknown
1002
+ >;
1003
+
1004
+ export type HydratedDeleteFileToolCall = HydratedToolCallBase<
1005
+ 'delete_file',
1006
+ DeleteFileToolCall['input'],
1007
+ unknown
1008
+ >;
1009
+
1010
+ export type HydratedSubagentTaskToolCall = HydratedToolCallBase<
1011
+ 'subagent_task',
1012
+ SubAgentTaskToolCall['input'],
1013
+ unknown
1014
+ >;
1015
+
1016
+ export type HydratedMcpGenericToolCall = HydratedToolCallBase<
1017
+ 'mcp_generic',
1018
+ McpGenericToolCall['input'],
1019
+ unknown
1020
+ >;
1021
+
1022
+ export type HydratedUnknownToolCall = HydratedToolCallBase<
1023
+ 'unknown_tool',
1024
+ UnknownToolCall['input'],
1025
+ unknown
1026
+ >;
1027
+
1028
+ export type HydratedToolCall =
1029
+ | HydratedAskUserQuestionToolCall
1030
+ | HydratedExitPlanModeToolCall
1031
+ | HydratedTodoWriteToolCall
1032
+ | HydratedSkillToolCall
1033
+ | HydratedGlobToolCall
1034
+ | HydratedGrepToolCall
1035
+ | HydratedBashToolCall
1036
+ | HydratedWebSearchToolCall
1037
+ | HydratedReadFileToolCall
1038
+ | HydratedWriteFileToolCall
1039
+ | HydratedEditFileToolCall
1040
+ | HydratedDeleteFileToolCall
1041
+ | HydratedSubagentTaskToolCall
1042
+ | HydratedMcpGenericToolCall
1043
+ | HydratedUnknownToolCall;
1044
+
1045
+ export type HydratedTranscriptMessage =
1046
+ | {
1047
+ kind: 'user_prompt';
1048
+ content: string;
1049
+ attachments?: ChatAttachment[];
1050
+ parts?: PromptPart[];
1051
+ id: string;
1052
+ messageId?: string;
1053
+ timestamp: string;
1054
+ hidden?: boolean;
1055
+ }
1056
+ | {
1057
+ kind: 'system_init';
1058
+ model: string;
1059
+ tools: string[];
1060
+ agents: string[];
1061
+ slashCommands: string[];
1062
+ mcpServers: McpServerInfo[];
1063
+ provider: AgentProvider;
1064
+ id: string;
1065
+ messageId?: string;
1066
+ timestamp: string;
1067
+ hidden?: boolean;
1068
+ debugRaw?: string;
1069
+ }
1070
+ | {
1071
+ kind: 'account_info';
1072
+ accountInfo: AccountInfo;
1073
+ id: string;
1074
+ messageId?: string;
1075
+ timestamp: string;
1076
+ hidden?: boolean;
1077
+ }
1078
+ | {
1079
+ kind: 'assistant_text';
1080
+ text: string;
1081
+ id: string;
1082
+ messageId?: string;
1083
+ timestamp: string;
1084
+ hidden?: boolean;
1085
+ }
1086
+ | {
1087
+ kind: 'result';
1088
+ success: boolean;
1089
+ cancelled?: boolean;
1090
+ result: string;
1091
+ durationMs: number;
1092
+ costUsd?: number;
1093
+ id: string;
1094
+ messageId?: string;
1095
+ timestamp: string;
1096
+ hidden?: boolean;
1097
+ }
1098
+ | {
1099
+ kind: 'status';
1100
+ status: string;
1101
+ id: string;
1102
+ messageId?: string;
1103
+ timestamp: string;
1104
+ hidden?: boolean;
1105
+ }
1106
+ | {
1107
+ kind: 'context_window_updated';
1108
+ usage: ContextWindowUsageSnapshot;
1109
+ id: string;
1110
+ messageId?: string;
1111
+ timestamp: string;
1112
+ hidden?: boolean;
1113
+ }
1114
+ | {
1115
+ kind: 'compact_boundary';
1116
+ id: string;
1117
+ messageId?: string;
1118
+ timestamp: string;
1119
+ hidden?: boolean;
1120
+ }
1121
+ | {
1122
+ kind: 'compact_summary';
1123
+ summary: string;
1124
+ id: string;
1125
+ messageId?: string;
1126
+ timestamp: string;
1127
+ hidden?: boolean;
1128
+ }
1129
+ | { kind: 'context_cleared'; id: string; messageId?: string; timestamp: string; hidden?: boolean }
1130
+ | { kind: 'interrupted'; id: string; messageId?: string; timestamp: string; hidden?: boolean }
1131
+ | {
1132
+ kind: 'unknown';
1133
+ json: string;
1134
+ id: string;
1135
+ messageId?: string;
1136
+ timestamp: string;
1137
+ hidden?: boolean;
1138
+ }
1139
+ | {
1140
+ kind: 'tool_result';
1141
+ toolId: string;
1142
+ rawResult: unknown;
1143
+ isError?: boolean;
1144
+ id: string;
1145
+ messageId?: string;
1146
+ timestamp: string;
1147
+ hidden?: boolean;
1148
+ }
1149
+ | ({ id: string; messageId?: string; hidden?: boolean } & HydratedToolCall);
1150
+
1151
+ export interface SessionRuntime {
1152
+ sessionId: string;
1153
+ workspaceId: string;
1154
+ directoryId: string;
1155
+ localPath: string;
1156
+ title: string;
1157
+ status: MikoStatus;
1158
+ isDraining: boolean;
1159
+ provider: AgentProvider | null;
1160
+ planMode: boolean;
1161
+ sessionToken: string | null;
1162
+ /** Set when the turn is parked awaiting a user response (plan approval / question). */
1163
+ pendingTool: PendingToolSnapshot | null;
1164
+ /** Messages queued while a turn is running, drained FIFO as each turn settles. */
1165
+ queued: QueuedMessageSnapshot[];
1166
+ }
1167
+
1168
+ /** A message waiting to run after the active turn settles (see queue behavior). */
1169
+ export interface QueuedMessageSnapshot {
1170
+ id: string;
1171
+ content: string;
1172
+ attachmentCount: number;
1173
+ }
1174
+
1175
+ export interface SessionHistorySnapshot {
1176
+ hasOlder: boolean;
1177
+ olderCursor: string | null;
1178
+ recentLimit: number;
1179
+ }
1180
+
1181
+ export interface SessionSnapshot {
1182
+ runtime: SessionRuntime;
1183
+ messages: TranscriptEntry[];
1184
+ history: SessionHistorySnapshot;
1185
+ availableProviders: ProviderCatalogEntry[];
1186
+ }
1187
+
1188
+ export interface SessionHistoryPage {
1189
+ messages: TranscriptEntry[];
1190
+ hasOlder: boolean;
1191
+ olderCursor: string | null;
1192
+ }
1193
+
1194
+ export interface WorkspaceAppSnapshot {
1195
+ sidebar: SidebarSnapshot;
1196
+ session?: SessionSnapshot | null;
1197
+ }
1198
+
1199
+ export type PendingToolSnapshot =
1200
+ | {
1201
+ toolUseId: string;
1202
+ toolKind: 'exit_plan_mode';
1203
+ plan?: string;
1204
+ summary?: string;
1205
+ }
1206
+ | {
1207
+ toolUseId: string;
1208
+ toolKind: 'ask_user_question';
1209
+ questions: AskUserQuestionItem[];
1210
+ };
1211
+
1212
+ /**
1213
+ * A slash command available in a session's composer. Sourced per provider: Claude via the
1214
+ * SDK's `supportedCommands()`, Codex via the app-server `skills/list`. `name` has no leading slash.
1215
+ */
1216
+ export interface SlashCommandInfo {
1217
+ name: string;
1218
+ description?: string;
1219
+ argumentHint?: string;
1220
+ }