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,176 @@
1
+ import { runCommand } from './diff-store';
2
+
3
+ export type GitHubRestResult<T> = { status: 'ok'; data: T } | { status: 'not_modified' };
4
+
5
+ interface GitHubRestClientDeps {
6
+ fetch?: typeof fetch;
7
+ runGh?: (args: string[]) => Promise<Awaited<ReturnType<typeof runCommand>>>;
8
+ now?: () => number;
9
+ }
10
+
11
+ interface CacheEntry {
12
+ etag?: string;
13
+ lastModified?: string;
14
+ data?: unknown;
15
+ link?: string | null;
16
+ }
17
+
18
+ type GitHubRestPageResult<T> =
19
+ | { status: 'ok'; data: T; link?: string | null }
20
+ | { status: 'not_modified' };
21
+
22
+ const TOKEN_TTL_MS = 45 * 60 * 1000;
23
+ const GITHUB_API_BASE_URL = 'https://api.github.com';
24
+
25
+ function retryAfterMs(headers: Headers, now: () => number) {
26
+ const retryAfter = headers.get('retry-after');
27
+ if (retryAfter) {
28
+ const seconds = Number.parseInt(retryAfter, 10);
29
+ if (Number.isFinite(seconds) && seconds > 0) return seconds * 1000;
30
+ }
31
+
32
+ const reset = headers.get('x-ratelimit-reset');
33
+ if (!reset) return null;
34
+ const resetSeconds = Number.parseInt(reset, 10);
35
+ if (!Number.isFinite(resetSeconds) || resetSeconds <= 0) return null;
36
+ return Math.max(0, resetSeconds * 1000 - now());
37
+ }
38
+
39
+ function isGitHubRateLimitResponse(status: number, headers: Headers, body: string) {
40
+ if (status === 429) return true;
41
+ if (status !== 403) return false;
42
+ if (headers.get('retry-after')) return true;
43
+ if (headers.get('x-ratelimit-remaining') === '0' && headers.get('x-ratelimit-reset')) return true;
44
+ const normalizedBody = body.toLowerCase();
45
+ return normalizedBody.includes('rate limit') || normalizedBody.includes('secondary limit');
46
+ }
47
+
48
+ function nextLink(linkHeader: string | null | undefined) {
49
+ if (!linkHeader) return null;
50
+ for (const part of linkHeader.split(',')) {
51
+ const match = part.match(/<([^>]+)>;\s*rel="next"/);
52
+ if (match?.[1]) return match[1];
53
+ }
54
+ return null;
55
+ }
56
+
57
+ export class GitHubRateLimitError extends Error {
58
+ readonly retryAfterMs: number | null;
59
+
60
+ constructor(message: string, retryAfterMs: number | null) {
61
+ super(message);
62
+ this.name = 'GitHubRateLimitError';
63
+ this.retryAfterMs = retryAfterMs;
64
+ }
65
+ }
66
+
67
+ export class GitHubRestClient {
68
+ private readonly fetchImpl: typeof fetch;
69
+ private readonly runGhCommand: (
70
+ args: string[],
71
+ ) => Promise<Awaited<ReturnType<typeof runCommand>>>;
72
+ private readonly now: () => number;
73
+ private readonly cacheByKey = new Map<string, CacheEntry>();
74
+ private token: { value: string; expiresAt: number } | null = null;
75
+
76
+ constructor(deps: GitHubRestClientDeps = {}) {
77
+ this.fetchImpl = deps.fetch ?? fetch;
78
+ this.runGhCommand = deps.runGh ?? ((args) => runCommand(['gh', ...args]));
79
+ this.now = deps.now ?? Date.now;
80
+ }
81
+
82
+ private async getToken() {
83
+ if (this.token && this.token.expiresAt > this.now()) return this.token.value;
84
+
85
+ const result = await this.runGhCommand(['auth', 'token']);
86
+ if (result.exitCode !== 0) {
87
+ throw new Error(
88
+ [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join('\n') ||
89
+ 'GitHub authentication token lookup failed',
90
+ );
91
+ }
92
+
93
+ const value = result.stdout.trim();
94
+ if (!value) throw new Error('GitHub authentication token lookup returned an empty token');
95
+ this.token = { value, expiresAt: this.now() + TOKEN_TTL_MS };
96
+ return value;
97
+ }
98
+
99
+ private async requestJsonPage<T>(
100
+ cacheKey: string,
101
+ path: string,
102
+ ): Promise<GitHubRestPageResult<T>> {
103
+ const token = await this.getToken();
104
+ const headers = new Headers({
105
+ Accept: 'application/vnd.github+json',
106
+ Authorization: `Bearer ${token}`,
107
+ 'X-GitHub-Api-Version': '2022-11-28',
108
+ });
109
+ const cache = this.cacheByKey.get(cacheKey);
110
+ if (cache?.etag) headers.set('If-None-Match', cache.etag);
111
+ else if (cache?.lastModified) headers.set('If-Modified-Since', cache.lastModified);
112
+
113
+ const response = await this.fetchImpl(new URL(path, GITHUB_API_BASE_URL), { headers });
114
+ if (response.status === 304) {
115
+ if (cache && 'data' in cache) {
116
+ return {
117
+ status: 'ok',
118
+ data: cache.data as T,
119
+ link: response.headers.get('link') ?? cache.link,
120
+ };
121
+ }
122
+ return { status: 'not_modified' };
123
+ }
124
+ const errorBody = response.ok ? '' : await response.text().catch(() => '');
125
+ if (isGitHubRateLimitResponse(response.status, response.headers, errorBody)) {
126
+ throw new GitHubRateLimitError(
127
+ `GitHub REST request was rate limited (${response.status})`,
128
+ retryAfterMs(response.headers, this.now),
129
+ );
130
+ }
131
+ if (response.status === 401) this.token = null;
132
+ if (!response.ok) {
133
+ throw new Error(errorBody.trim() || `GitHub REST request failed (${response.status})`);
134
+ }
135
+
136
+ const data = (await response.json()) as T;
137
+ const etag = response.headers.get('etag') ?? undefined;
138
+ const lastModified = response.headers.get('last-modified') ?? undefined;
139
+ if (etag || lastModified) {
140
+ this.cacheByKey.set(cacheKey, {
141
+ etag,
142
+ lastModified,
143
+ data,
144
+ link: response.headers.get('link'),
145
+ });
146
+ }
147
+
148
+ return { status: 'ok', data, link: response.headers.get('link') };
149
+ }
150
+
151
+ async requestJson<T>(cacheKey: string, path: string): Promise<GitHubRestResult<T>> {
152
+ const result = await this.requestJsonPage<T>(cacheKey, path);
153
+ return result.status === 'ok' ? { status: 'ok', data: result.data } : result;
154
+ }
155
+
156
+ async requestJsonPages<TPage, TItem>(
157
+ cacheKey: string,
158
+ path: string,
159
+ getItems: (page: TPage) => TItem[],
160
+ ): Promise<GitHubRestResult<TItem[]>> {
161
+ const items: TItem[] = [];
162
+ let page = 1;
163
+ let currentPath: string | null = path;
164
+
165
+ while (currentPath) {
166
+ const result = await this.requestJsonPage<TPage>(`${cacheKey}:page:${page}`, currentPath);
167
+ if (result.status === 'not_modified')
168
+ return page === 1 ? result : { status: 'ok', data: items };
169
+ items.push(...getItems(result.data));
170
+ currentPath = nextLink(result.link);
171
+ page += 1;
172
+ }
173
+
174
+ return { status: 'ok', data: items };
175
+ }
176
+ }
@@ -0,0 +1,24 @@
1
+ import type {
2
+ AccountInfo,
3
+ AgentProvider,
4
+ NormalizedToolCall,
5
+ TranscriptEntry,
6
+ } from '../shared/types';
7
+
8
+ export interface HarnessEvent {
9
+ type: 'transcript' | 'session_token';
10
+ entry?: TranscriptEntry;
11
+ sessionToken?: string;
12
+ }
13
+
14
+ export interface HarnessToolRequest {
15
+ tool: NormalizedToolCall & { toolKind: 'ask_user_question' | 'exit_plan_mode' };
16
+ }
17
+
18
+ export interface HarnessTurn {
19
+ provider: AgentProvider;
20
+ stream: AsyncIterable<HarnessEvent>;
21
+ getAccountInfo?: () => Promise<AccountInfo | null>;
22
+ interrupt: () => Promise<void>;
23
+ close: () => void;
24
+ }
@@ -0,0 +1,203 @@
1
+ import { type FSWatcher, watch } from 'node:fs';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import path from 'node:path';
5
+ import { getKeybindingsFilePath, LOG_PREFIX } from '../shared/branding';
6
+ import {
7
+ DEFAULT_KEYBINDINGS,
8
+ type KeybindingAction,
9
+ type KeybindingsSnapshot,
10
+ } from '../shared/types';
11
+
12
+ const KEYBINDING_ACTIONS = Object.keys(DEFAULT_KEYBINDINGS) as KeybindingAction[];
13
+ const MODIFIER_SHORTCUT_PARTS = new Set(['cmd', 'ctrl', 'alt', 'shift']);
14
+
15
+ type KeybindingsFile = Partial<Record<KeybindingAction, unknown>>;
16
+
17
+ export class KeybindingsManager {
18
+ readonly filePath: string;
19
+ private watcher: FSWatcher | null = null;
20
+ private snapshot: KeybindingsSnapshot;
21
+ private readonly listeners = new Set<(snapshot: KeybindingsSnapshot) => void>();
22
+
23
+ constructor(filePath = getKeybindingsFilePath(homedir())) {
24
+ this.filePath = filePath;
25
+ this.snapshot = createDefaultSnapshot(this.filePath);
26
+ }
27
+
28
+ async initialize() {
29
+ await mkdir(path.dirname(this.filePath), { recursive: true });
30
+ const file = Bun.file(this.filePath);
31
+
32
+ if (!(await file.exists())) {
33
+ await Bun.write(this.filePath, `${JSON.stringify(DEFAULT_KEYBINDINGS, null, 2)}\n`);
34
+ }
35
+
36
+ await this.reload();
37
+ this.startWatching();
38
+ }
39
+
40
+ dispose() {
41
+ this.watcher?.close();
42
+ this.watcher = null;
43
+ this.listeners.clear();
44
+ }
45
+
46
+ getSnapshot() {
47
+ return this.snapshot;
48
+ }
49
+
50
+ onChange(listener: (snapshot: KeybindingsSnapshot) => void) {
51
+ this.listeners.add(listener);
52
+ return () => {
53
+ this.listeners.delete(listener);
54
+ };
55
+ }
56
+
57
+ async reload() {
58
+ const nextSnapshot = await readKeybindingsSnapshot(this.filePath);
59
+ this.setSnapshot(nextSnapshot);
60
+ }
61
+
62
+ async write(bindings: Partial<Record<KeybindingAction, string[]>>) {
63
+ const nextSnapshot = normalizeKeybindings(bindings, this.filePath);
64
+ await mkdir(path.dirname(this.filePath), { recursive: true });
65
+ await Bun.write(this.filePath, `${JSON.stringify(nextSnapshot.bindings, null, 2)}\n`);
66
+
67
+ this.setSnapshot(nextSnapshot);
68
+ return nextSnapshot;
69
+ }
70
+
71
+ private setSnapshot(snapshot: KeybindingsSnapshot) {
72
+ this.snapshot = snapshot;
73
+ for (const listener of this.listeners) {
74
+ listener(snapshot);
75
+ }
76
+ }
77
+
78
+ private startWatching() {
79
+ this.watcher?.close();
80
+ try {
81
+ this.watcher = watch(
82
+ path.dirname(this.filePath),
83
+ { persistent: false },
84
+ (_eventType, filename) => {
85
+ if (filename && filename !== path.basename(this.filePath)) {
86
+ return;
87
+ }
88
+
89
+ void this.reload().catch((error: unknown) => {
90
+ console.warn(`${LOG_PREFIX} Failed to reload keybindings:`, error);
91
+ });
92
+ },
93
+ );
94
+ } catch (error) {
95
+ console.warn(`${LOG_PREFIX} Failed to watch keybindings file:`, error);
96
+ this.watcher = null;
97
+ }
98
+ }
99
+ }
100
+
101
+ export async function readKeybindingsSnapshot(filePath: string) {
102
+ try {
103
+ const text = await Bun.file(filePath).text();
104
+ if (!text.trim()) {
105
+ return createDefaultSnapshot(filePath, 'Keybindings file was empty. Using defaults.');
106
+ }
107
+ const parsed = JSON.parse(text) as KeybindingsFile;
108
+ return normalizeKeybindings(parsed, filePath);
109
+ } catch (error) {
110
+ if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {
111
+ return createDefaultSnapshot(filePath);
112
+ }
113
+
114
+ if (error instanceof SyntaxError) {
115
+ return createDefaultSnapshot(filePath, 'Keybindings file is invalid JSON. Using defaults.');
116
+ }
117
+
118
+ throw error;
119
+ }
120
+ }
121
+
122
+ export function normalizeKeybindings(
123
+ value: KeybindingsFile | null | undefined,
124
+ filePath = getKeybindingsFilePath(homedir()),
125
+ ): KeybindingsSnapshot {
126
+ const warnings: string[] = [];
127
+ const source = value && typeof value === 'object' && !Array.isArray(value) ? value : null;
128
+
129
+ if (!source) {
130
+ return createDefaultSnapshot(
131
+ filePath,
132
+ 'Keybindings file must contain a JSON object. Using defaults.',
133
+ );
134
+ }
135
+
136
+ const bindings = {} as Record<KeybindingAction, string[]>;
137
+ for (const action of KEYBINDING_ACTIONS) {
138
+ const rawValue = source[action];
139
+ if (!Array.isArray(rawValue)) {
140
+ bindings[action] = [...DEFAULT_KEYBINDINGS[action]];
141
+ if (rawValue !== undefined) {
142
+ warnings.push(`${action} must be an array of shortcut strings`);
143
+ }
144
+ continue;
145
+ }
146
+
147
+ const normalized = rawValue
148
+ .filter((entry): entry is string => typeof entry === 'string')
149
+ .map((entry) => entry.trim())
150
+ .map((entry) => entry.toLowerCase())
151
+ .filter((entry) =>
152
+ entry.split('+').some((part) => part.trim() && !MODIFIER_SHORTCUT_PARTS.has(part.trim())),
153
+ )
154
+ .filter(Boolean);
155
+
156
+ if (normalized.length === 0) {
157
+ bindings[action] = [...DEFAULT_KEYBINDINGS[action]];
158
+ if (rawValue.length > 0) {
159
+ warnings.push(`${action} did not contain any valid shortcut strings`);
160
+ }
161
+ continue;
162
+ }
163
+
164
+ bindings[action] = normalized;
165
+ }
166
+
167
+ return {
168
+ bindings,
169
+ warning:
170
+ warnings.length > 0
171
+ ? `Some keybindings were reset to defaults: ${warnings.join('; ')}`
172
+ : null,
173
+ filePathDisplay: formatDisplayPath(filePath),
174
+ };
175
+ }
176
+
177
+ function createDefaultSnapshot(
178
+ filePath: string,
179
+ warning: string | null = null,
180
+ ): KeybindingsSnapshot {
181
+ return {
182
+ bindings: {
183
+ toggleLeftSidebar: [...DEFAULT_KEYBINDINGS.toggleLeftSidebar],
184
+ toggleEmbeddedTerminal: [...DEFAULT_KEYBINDINGS.toggleEmbeddedTerminal],
185
+ toggleRightSidebar: [...DEFAULT_KEYBINDINGS.toggleRightSidebar],
186
+ addSplitTerminal: [...DEFAULT_KEYBINDINGS.addSplitTerminal],
187
+ createSessionInCurrentWorkspace: [...DEFAULT_KEYBINDINGS.createSessionInCurrentWorkspace],
188
+ createWorkspaceInCurrentDirectory: [...DEFAULT_KEYBINDINGS.createWorkspaceInCurrentDirectory],
189
+ switchToNextWorkspace: [...DEFAULT_KEYBINDINGS.switchToNextWorkspace],
190
+ },
191
+ warning,
192
+ filePathDisplay: formatDisplayPath(filePath),
193
+ };
194
+ }
195
+
196
+ export function formatDisplayPath(filePath: string) {
197
+ const homePath = homedir();
198
+ if (filePath === homePath) return '~';
199
+ if (filePath.startsWith(`${homePath}${path.sep}`)) {
200
+ return `~${filePath.slice(homePath.length)}`;
201
+ }
202
+ return filePath;
203
+ }
@@ -0,0 +1,22 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { hostname } from 'node:os';
3
+ import process from 'node:process';
4
+
5
+ function runAndRead(command: string, args: string[]) {
6
+ const result = spawnSync(command, args, { encoding: 'utf8' });
7
+ if (result.status !== 0) return null;
8
+ const value = result.stdout.trim();
9
+ return value || null;
10
+ }
11
+
12
+ export function getMachineDisplayName() {
13
+ if (process.platform === 'darwin') {
14
+ const computerName = runAndRead('scutil', ['--get', 'ComputerName']);
15
+ if (computerName) {
16
+ return computerName;
17
+ }
18
+ }
19
+
20
+ const rawHostname = hostname().trim();
21
+ return rawHostname.replace(/\.local$|\.lan$/i, '') || 'This Machine';
22
+ }
@@ -0,0 +1,51 @@
1
+ import { mkdir, stat } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import path from 'node:path';
4
+ import { getDataDir } from '../shared/branding';
5
+
6
+ export function resolveLocalPath(localPath: string) {
7
+ const trimmed = localPath.trim();
8
+ if (!trimmed) {
9
+ throw new Error('Directory path is required');
10
+ }
11
+
12
+ if (trimmed === '~') {
13
+ return homedir();
14
+ }
15
+
16
+ if (trimmed.startsWith('~/')) {
17
+ return path.join(homedir(), trimmed.slice(2));
18
+ }
19
+
20
+ return path.resolve(trimmed);
21
+ }
22
+
23
+ export async function requireExistingDirectoryPath(localPath: string) {
24
+ const resolvedPath = resolveLocalPath(localPath);
25
+ let info: Awaited<ReturnType<typeof stat>>;
26
+ try {
27
+ info = await stat(resolvedPath);
28
+ } catch {
29
+ throw new Error(`Directory not found: ${resolvedPath}`);
30
+ }
31
+
32
+ if (!info.isDirectory()) {
33
+ throw new Error('Directory path must be a directory');
34
+ }
35
+
36
+ return resolvedPath;
37
+ }
38
+
39
+ export async function ensureDirectoryPath(localPath: string) {
40
+ const resolvedPath = resolveLocalPath(localPath);
41
+ await mkdir(resolvedPath, { recursive: true });
42
+
43
+ const info = await stat(resolvedPath);
44
+ if (!info.isDirectory()) {
45
+ throw new Error('Directory path must be a directory');
46
+ }
47
+ }
48
+
49
+ export function getWorkspaceUploadDir(workspaceId: string, dataDir = getDataDir(homedir())) {
50
+ return path.join(resolveLocalPath(dataDir), 'uploads', workspaceId);
51
+ }