opencami 1.0.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 (337) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +111 -0
  3. package/bin/opencami.js +155 -0
  4. package/dist/client/apple-touch-icon-180x180.png +0 -0
  5. package/dist/client/assets/_sessionKey-B-MBYHgD.js +95 -0
  6. package/dist/client/assets/abap-BdImnpbu.js +1 -0
  7. package/dist/client/assets/actionscript-3-CfeIJUat.js +1 -0
  8. package/dist/client/assets/ada-bCR0ucgS.js +1 -0
  9. package/dist/client/assets/andromeeda-C-Jbm3Hp.js +1 -0
  10. package/dist/client/assets/angular-html-CU67Zn6k.js +1 -0
  11. package/dist/client/assets/angular-ts-BwZT4LLn.js +1 -0
  12. package/dist/client/assets/apache-Pmp26Uib.js +1 -0
  13. package/dist/client/assets/apex-D8_7TLub.js +1 -0
  14. package/dist/client/assets/apl-dKokRX4l.js +1 -0
  15. package/dist/client/assets/applescript-Co6uUVPk.js +1 -0
  16. package/dist/client/assets/ara-BRHolxvo.js +1 -0
  17. package/dist/client/assets/asciidoc-Dv7Oe6Be.js +1 -0
  18. package/dist/client/assets/asm-D_Q5rh1f.js +1 -0
  19. package/dist/client/assets/astro-CbQHKStN.js +1 -0
  20. package/dist/client/assets/aurora-x-D-2ljcwZ.js +1 -0
  21. package/dist/client/assets/awk-DMzUqQB5.js +1 -0
  22. package/dist/client/assets/ayu-dark-CmMr59Fi.js +1 -0
  23. package/dist/client/assets/ballerina-BFfxhgS-.js +1 -0
  24. package/dist/client/assets/bat-BkioyH1T.js +1 -0
  25. package/dist/client/assets/beancount-k_qm7-4y.js +1 -0
  26. package/dist/client/assets/berry-uYugtg8r.js +1 -0
  27. package/dist/client/assets/bibtex-CHM0blh-.js +1 -0
  28. package/dist/client/assets/bicep-Bmn6On1c.js +1 -0
  29. package/dist/client/assets/blade-D4QpJJKB.js +1 -0
  30. package/dist/client/assets/bsl-BO_Y6i37.js +1 -0
  31. package/dist/client/assets/button-D_9OBT_f.js +1 -0
  32. package/dist/client/assets/c-BIGW1oBm.js +1 -0
  33. package/dist/client/assets/c3-VCDPK7BO.js +1 -0
  34. package/dist/client/assets/cadence-Bv_4Rxtq.js +1 -0
  35. package/dist/client/assets/cairo-KRGpt6FW.js +1 -0
  36. package/dist/client/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  37. package/dist/client/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  38. package/dist/client/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  39. package/dist/client/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  40. package/dist/client/assets/clarity-D53aC0YG.js +1 -0
  41. package/dist/client/assets/clojure-P80f7IUj.js +1 -0
  42. package/dist/client/assets/cmake-D1j8_8rp.js +1 -0
  43. package/dist/client/assets/cobol-nwyudZeR.js +1 -0
  44. package/dist/client/assets/codeowners-Bp6g37R7.js +1 -0
  45. package/dist/client/assets/codeql-DsOJ9woJ.js +1 -0
  46. package/dist/client/assets/coffee-Ch7k5sss.js +1 -0
  47. package/dist/client/assets/common-lisp-Cg-RD9OK.js +1 -0
  48. package/dist/client/assets/connect-BRasuRbB.js +2 -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-K5feNrxe.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-BOJIQeun.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/file-explorer-screen-Daf4rIq9.js +1 -0
  78. package/dist/client/assets/files-ByeIMLfw.js +2 -0
  79. package/dist/client/assets/fish-BvzEVeQv.js +1 -0
  80. package/dist/client/assets/fluent-C4IJs8-o.js +1 -0
  81. package/dist/client/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  82. package/dist/client/assets/fortran-free-form-BxgE0vQu.js +1 -0
  83. package/dist/client/assets/fsharp-CXgrBDvD.js +1 -0
  84. package/dist/client/assets/gdresource-B7Tvp0Sc.js +1 -0
  85. package/dist/client/assets/gdscript-DTMYz4Jt.js +1 -0
  86. package/dist/client/assets/gdshader-DkwncUOv.js +1 -0
  87. package/dist/client/assets/genie-D0YGMca9.js +1 -0
  88. package/dist/client/assets/gherkin-DyxjwDmM.js +1 -0
  89. package/dist/client/assets/git-commit-F4YmCXRG.js +1 -0
  90. package/dist/client/assets/git-rebase-r7XF79zn.js +1 -0
  91. package/dist/client/assets/github-dark-DHJKELXO.js +1 -0
  92. package/dist/client/assets/github-dark-default-Cuk6v7N8.js +1 -0
  93. package/dist/client/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  94. package/dist/client/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  95. package/dist/client/assets/github-light-DAi9KRSo.js +1 -0
  96. package/dist/client/assets/github-light-default-D7oLnXFd.js +1 -0
  97. package/dist/client/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  98. package/dist/client/assets/gleam-BspZqrRM.js +1 -0
  99. package/dist/client/assets/glimmer-js-Rg0-pVw9.js +1 -0
  100. package/dist/client/assets/glimmer-ts-U6CK756n.js +1 -0
  101. package/dist/client/assets/glsl-DplSGwfg.js +1 -0
  102. package/dist/client/assets/gn-n2N0HUVH.js +1 -0
  103. package/dist/client/assets/gnuplot-DdkO51Og.js +1 -0
  104. package/dist/client/assets/go-Dn2_MT6a.js +1 -0
  105. package/dist/client/assets/graphql-ChdNCCLP.js +1 -0
  106. package/dist/client/assets/groovy-gcz8RCvz.js +1 -0
  107. package/dist/client/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  108. package/dist/client/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  109. package/dist/client/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  110. package/dist/client/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  111. package/dist/client/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  112. package/dist/client/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  113. package/dist/client/assets/hack-CaT9iCJl.js +1 -0
  114. package/dist/client/assets/haml-B8DHNrY2.js +1 -0
  115. package/dist/client/assets/handlebars-BL8al0AC.js +1 -0
  116. package/dist/client/assets/haskell-Df6bDoY_.js +1 -0
  117. package/dist/client/assets/haxe-CzTSHFRz.js +1 -0
  118. package/dist/client/assets/hcl-BWvSN4gD.js +1 -0
  119. package/dist/client/assets/hjson-D5-asLiD.js +1 -0
  120. package/dist/client/assets/hlsl-D3lLCCz7.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-ByUDBI-n.js +14 -0
  130. package/dist/client/assets/index-DHGnKfAU.js +1 -0
  131. package/dist/client/assets/ini-BEwlwnbL.js +1 -0
  132. package/dist/client/assets/java-CylS5w8V.js +1 -0
  133. package/dist/client/assets/javascript-wDzz0qaB.js +1 -0
  134. package/dist/client/assets/jinja-4LBKfQ-Z.js +1 -0
  135. package/dist/client/assets/jison-wvAkD_A8.js +1 -0
  136. package/dist/client/assets/json-Cp-IABpG.js +1 -0
  137. package/dist/client/assets/json5-C9tS-k6U.js +1 -0
  138. package/dist/client/assets/jsonc-Des-eS-w.js +1 -0
  139. package/dist/client/assets/jsonl-DcaNXYhu.js +1 -0
  140. package/dist/client/assets/jsonnet-DFQXde-d.js +1 -0
  141. package/dist/client/assets/jssm-C2t-YnRu.js +1 -0
  142. package/dist/client/assets/jsx-g9-lgVsj.js +1 -0
  143. package/dist/client/assets/julia-CxzCAyBv.js +1 -0
  144. package/dist/client/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  145. package/dist/client/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  146. package/dist/client/assets/kanagawa-wave-DWedfzmr.js +1 -0
  147. package/dist/client/assets/kdl-DV7GczEv.js +1 -0
  148. package/dist/client/assets/keyboard-shortcuts-dialog-agsWJ36q.js +1 -0
  149. package/dist/client/assets/kotlin-BdnUsdx6.js +1 -0
  150. package/dist/client/assets/kusto-DZf3V79B.js +1 -0
  151. package/dist/client/assets/laserwave-DUszq2jm.js +1 -0
  152. package/dist/client/assets/latex-B4uzh10-.js +1 -0
  153. package/dist/client/assets/lean-BZvkOJ9d.js +1 -0
  154. package/dist/client/assets/less-B1dDrJ26.js +1 -0
  155. package/dist/client/assets/light-plus-B7mTdjB0.js +1 -0
  156. package/dist/client/assets/liquid-DYVedYrR.js +1 -0
  157. package/dist/client/assets/llvm-BtvRca6l.js +1 -0
  158. package/dist/client/assets/log-2UxHyX5q.js +1 -0
  159. package/dist/client/assets/logo-BtOb2qkB.js +1 -0
  160. package/dist/client/assets/lua-BbnMAYS6.js +1 -0
  161. package/dist/client/assets/luau-C-HG3fhB.js +1 -0
  162. package/dist/client/assets/main-BAHT5yqU.js +81 -0
  163. package/dist/client/assets/make-CHLpvVh8.js +1 -0
  164. package/dist/client/assets/markdown-Cvjx9yec.js +1 -0
  165. package/dist/client/assets/marko-DZsq8hO1.js +1 -0
  166. package/dist/client/assets/material-theme-D5KoaKCx.js +1 -0
  167. package/dist/client/assets/material-theme-darker-BfHTSMKl.js +1 -0
  168. package/dist/client/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  169. package/dist/client/assets/material-theme-ocean-CyktbL80.js +1 -0
  170. package/dist/client/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  171. package/dist/client/assets/matlab-D7o27uSR.js +1 -0
  172. package/dist/client/assets/mdc-DUICxH0z.js +1 -0
  173. package/dist/client/assets/mdx-Cmh6b_Ma.js +1 -0
  174. package/dist/client/assets/menu-BhVaz8Ly.js +20 -0
  175. package/dist/client/assets/mermaid-mWjccvbQ.js +1 -0
  176. package/dist/client/assets/min-dark-CafNBF8u.js +1 -0
  177. package/dist/client/assets/min-light-CTRr51gU.js +1 -0
  178. package/dist/client/assets/mipsasm-CKIfxQSi.js +1 -0
  179. package/dist/client/assets/mojo-B93PlW-d.js +1 -0
  180. package/dist/client/assets/monokai-D4h5O-jR.js +1 -0
  181. package/dist/client/assets/moonbit-Ba13S78F.js +1 -0
  182. package/dist/client/assets/move-Bu9oaDYs.js +1 -0
  183. package/dist/client/assets/narrat-DRg8JJMk.js +1 -0
  184. package/dist/client/assets/new-DLlBm66g.js +1 -0
  185. package/dist/client/assets/nextflow-BrzmwbiE.js +1 -0
  186. package/dist/client/assets/nginx-DknmC5AR.js +1 -0
  187. package/dist/client/assets/night-owl-C39BiMTA.js +1 -0
  188. package/dist/client/assets/nim-CVrawwO9.js +1 -0
  189. package/dist/client/assets/nix-CwoSXNpI.js +1 -0
  190. package/dist/client/assets/nord-Ddv68eIx.js +1 -0
  191. package/dist/client/assets/nushell-C-sUppwS.js +1 -0
  192. package/dist/client/assets/objective-c-DXmwc3jG.js +1 -0
  193. package/dist/client/assets/objective-cpp-CLxacb5B.js +1 -0
  194. package/dist/client/assets/ocaml-C0hk2d4L.js +1 -0
  195. package/dist/client/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  196. package/dist/client/assets/one-light-PoHY5YXO.js +1 -0
  197. package/dist/client/assets/openscad-C4EeE6gA.js +1 -0
  198. package/dist/client/assets/pascal-D93ZcfNL.js +1 -0
  199. package/dist/client/assets/perl-C0TMdlhV.js +1 -0
  200. package/dist/client/assets/php-CDn_0X-4.js +1 -0
  201. package/dist/client/assets/pkl-u5AG7uiY.js +1 -0
  202. package/dist/client/assets/plastic-3e1v2bzS.js +1 -0
  203. package/dist/client/assets/plsql-ChMvpjG-.js +1 -0
  204. package/dist/client/assets/po-BTJTHyun.js +1 -0
  205. package/dist/client/assets/poimandres-CS3Unz2-.js +1 -0
  206. package/dist/client/assets/polar-C0HS_06l.js +1 -0
  207. package/dist/client/assets/postcss-CXtECtnM.js +1 -0
  208. package/dist/client/assets/powerquery-CEu0bR-o.js +1 -0
  209. package/dist/client/assets/powershell-Dpen1YoG.js +1 -0
  210. package/dist/client/assets/prisma-Dd19v3D-.js +1 -0
  211. package/dist/client/assets/prolog-CbFg5uaA.js +1 -0
  212. package/dist/client/assets/proto-C7zT0LnQ.js +1 -0
  213. package/dist/client/assets/pug-CGlum2m_.js +1 -0
  214. package/dist/client/assets/puppet-BMWR74SV.js +1 -0
  215. package/dist/client/assets/purescript-CklMAg4u.js +1 -0
  216. package/dist/client/assets/python-B6aJPvgy.js +1 -0
  217. package/dist/client/assets/qml-3beO22l8.js +1 -0
  218. package/dist/client/assets/qmldir-C8lEn-DE.js +1 -0
  219. package/dist/client/assets/qss-IeuSbFQv.js +1 -0
  220. package/dist/client/assets/r-Dspwwk_N.js +1 -0
  221. package/dist/client/assets/racket-BqYA7rlc.js +1 -0
  222. package/dist/client/assets/raku-DXvB9xmW.js +1 -0
  223. package/dist/client/assets/razor-C1TweQQi.js +1 -0
  224. package/dist/client/assets/red-bN70gL4F.js +1 -0
  225. package/dist/client/assets/reg-C-SQnVFl.js +1 -0
  226. package/dist/client/assets/regexp-CDVJQ6XC.js +1 -0
  227. package/dist/client/assets/rel-C3B-1QV4.js +1 -0
  228. package/dist/client/assets/riscv-BM1_JUlF.js +1 -0
  229. package/dist/client/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  230. package/dist/client/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  231. package/dist/client/assets/rose-pine-qdsjHGoJ.js +1 -0
  232. package/dist/client/assets/rosmsg-BJDFO7_C.js +1 -0
  233. package/dist/client/assets/rst-B0xPkSld.js +1 -0
  234. package/dist/client/assets/ruby-BvKwtOVI.js +1 -0
  235. package/dist/client/assets/rust-B1yitclQ.js +1 -0
  236. package/dist/client/assets/sas-cz2c8ADy.js +1 -0
  237. package/dist/client/assets/sass-Cj5Yp3dK.js +1 -0
  238. package/dist/client/assets/scala-C151Ov-r.js +1 -0
  239. package/dist/client/assets/scheme-C98Dy4si.js +1 -0
  240. package/dist/client/assets/scss-OYdSNvt2.js +1 -0
  241. package/dist/client/assets/sdbl-DVxCFoDh.js +1 -0
  242. package/dist/client/assets/search-dialog-CHwnOyPS.js +1 -0
  243. package/dist/client/assets/session-export-dialog-uOlDUzgX.js +1 -0
  244. package/dist/client/assets/settings-dialog-D0aYDkAM.js +1 -0
  245. package/dist/client/assets/shaderlab-Dg9Lc6iA.js +1 -0
  246. package/dist/client/assets/shellscript-Yzrsuije.js +1 -0
  247. package/dist/client/assets/shellsession-BADoaaVG.js +1 -0
  248. package/dist/client/assets/slack-dark-BthQWCQV.js +1 -0
  249. package/dist/client/assets/slack-ochin-DqwNpetd.js +1 -0
  250. package/dist/client/assets/smalltalk-BERRCDM3.js +1 -0
  251. package/dist/client/assets/snazzy-light-Bw305WKR.js +1 -0
  252. package/dist/client/assets/solarized-dark-DXbdFlpD.js +1 -0
  253. package/dist/client/assets/solarized-light-L9t79GZl.js +1 -0
  254. package/dist/client/assets/solidity-rGO070M0.js +1 -0
  255. package/dist/client/assets/soy-Brmx7dQM.js +1 -0
  256. package/dist/client/assets/sparql-rVzFXLq3.js +1 -0
  257. package/dist/client/assets/splunk-BtCnVYZw.js +1 -0
  258. package/dist/client/assets/sql-BLtJtn59.js +1 -0
  259. package/dist/client/assets/ssh-config-_ykCGR6B.js +1 -0
  260. package/dist/client/assets/stata-BH5u7GGu.js +1 -0
  261. package/dist/client/assets/styles-7aVSlb6l.css +1 -0
  262. package/dist/client/assets/stylus-BEDo0Tqx.js +1 -0
  263. package/dist/client/assets/svelte-zxCyuUbr.js +1 -0
  264. package/dist/client/assets/swift-Dg5xB15N.js +1 -0
  265. package/dist/client/assets/synthwave-84-CbfX1IO0.js +1 -0
  266. package/dist/client/assets/system-verilog-CnnmHF94.js +1 -0
  267. package/dist/client/assets/systemd-4A_iFExJ.js +1 -0
  268. package/dist/client/assets/talonscript-CkByrt1z.js +1 -0
  269. package/dist/client/assets/tasl-QIJgUcNo.js +1 -0
  270. package/dist/client/assets/tcl-dwOrl1Do.js +1 -0
  271. package/dist/client/assets/templ-W15q3VgB.js +1 -0
  272. package/dist/client/assets/terraform-BETggiCN.js +1 -0
  273. package/dist/client/assets/tex-CvyZ59Mk.js +1 -0
  274. package/dist/client/assets/tokyo-night-hegEt444.js +1 -0
  275. package/dist/client/assets/toml-vGWfd6FD.js +1 -0
  276. package/dist/client/assets/ts-tags-zn1MmPIZ.js +1 -0
  277. package/dist/client/assets/tsv-B_m7g4N7.js +1 -0
  278. package/dist/client/assets/tsx-COt5Ahok.js +1 -0
  279. package/dist/client/assets/turtle-BsS91CYL.js +1 -0
  280. package/dist/client/assets/twig-CO9l9SDP.js +1 -0
  281. package/dist/client/assets/typescript-BPQ3VLAy.js +1 -0
  282. package/dist/client/assets/typespec-BGHnOYBU.js +1 -0
  283. package/dist/client/assets/typst-DHCkPAjA.js +1 -0
  284. package/dist/client/assets/v-BcVCzyr7.js +1 -0
  285. package/dist/client/assets/vala-CsfeWuGM.js +1 -0
  286. package/dist/client/assets/vb-D17OF-Vu.js +1 -0
  287. package/dist/client/assets/verilog-BQ8w6xss.js +1 -0
  288. package/dist/client/assets/vesper-DU1UobuO.js +1 -0
  289. package/dist/client/assets/vhdl-CeAyd5Ju.js +1 -0
  290. package/dist/client/assets/viml-CJc9bBzg.js +1 -0
  291. package/dist/client/assets/vitesse-black-Bkuqu6BP.js +1 -0
  292. package/dist/client/assets/vitesse-dark-D0r3Knsf.js +1 -0
  293. package/dist/client/assets/vitesse-light-CVO1_9PV.js +1 -0
  294. package/dist/client/assets/vue-DN_0RTcg.js +1 -0
  295. package/dist/client/assets/vue-html-AaS7Mt5G.js +1 -0
  296. package/dist/client/assets/vue-vine-CQOfvN7w.js +1 -0
  297. package/dist/client/assets/vyper-CDx5xZoG.js +1 -0
  298. package/dist/client/assets/wasm-CG6Dc4jp.js +1 -0
  299. package/dist/client/assets/wasm-MzD3tlZU.js +1 -0
  300. package/dist/client/assets/wenyan-BV7otONQ.js +1 -0
  301. package/dist/client/assets/wgsl-Dx-B1_4e.js +1 -0
  302. package/dist/client/assets/wikitext-BhOHFoWU.js +1 -0
  303. package/dist/client/assets/wit-5i3qLPDT.js +1 -0
  304. package/dist/client/assets/wolfram-lXgVvXCa.js +1 -0
  305. package/dist/client/assets/xml-sdJ4AIDG.js +1 -0
  306. package/dist/client/assets/xsl-CtQFsRM5.js +1 -0
  307. package/dist/client/assets/yaml-Buea-lGh.js +1 -0
  308. package/dist/client/assets/zenscript-DVFEvuxE.js +1 -0
  309. package/dist/client/assets/zig-VOosw3JB.js +1 -0
  310. package/dist/client/cover.jpg +0 -0
  311. package/dist/client/cover.webp +0 -0
  312. package/dist/client/favicon.svg +4 -0
  313. package/dist/client/manifest.json +40 -0
  314. package/dist/client/pwa-192x192.png +0 -0
  315. package/dist/client/pwa-512x512.png +0 -0
  316. package/dist/client/pwa-maskable-512x512.png +0 -0
  317. package/dist/client/robots.txt +3 -0
  318. package/dist/client/screenshot-file-explorer.png +0 -0
  319. package/dist/client/sw.js +165 -0
  320. package/dist/server/assets/_sessionKey-qlAPF_Ft.js +6130 -0
  321. package/dist/server/assets/_tanstack-start-manifest_v-El8F-kd-.js +4 -0
  322. package/dist/server/assets/button-DtQ3rV1m.js +53 -0
  323. package/dist/server/assets/connect-BWI_6rCm.js +80 -0
  324. package/dist/server/assets/file-explorer-screen-DJXPEG_J.js +2450 -0
  325. package/dist/server/assets/files-CONoVTGD.js +11 -0
  326. package/dist/server/assets/index-Bp8QskbI.js +28 -0
  327. package/dist/server/assets/index-COu2idHm.js +226 -0
  328. package/dist/server/assets/keyboard-shortcuts-dialog-D5hqVX2v.js +69 -0
  329. package/dist/server/assets/menu-D6n4DB0U.js +156 -0
  330. package/dist/server/assets/new-Dzk5YxE9.js +6 -0
  331. package/dist/server/assets/router-DbxyvprK.js +2749 -0
  332. package/dist/server/assets/search-dialog-JY8C3mqa.js +443 -0
  333. package/dist/server/assets/session-export-dialog-D87uafPD.js +80 -0
  334. package/dist/server/assets/settings-dialog-CBj7njLM.js +568 -0
  335. package/dist/server/assets/start-HYkvq4Ni.js +4 -0
  336. package/dist/server/server.js +1013 -0
  337. package/package.json +93 -0
@@ -0,0 +1,443 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useRef, useMemo, useEffect } from "react";
3
+ import { useNavigate } from "@tanstack/react-router";
4
+ import { HugeiconsIcon } from "@hugeicons/react";
5
+ import { Search01Icon, Cancel01Icon, Loading03Icon } from "@hugeicons/core-free-icons";
6
+ import { D as DialogRoot, a as DialogContent } from "./menu-D6n4DB0U.js";
7
+ import { useQueryClient } from "@tanstack/react-query";
8
+ import { c as chatQueryKeys } from "./_sessionKey-qlAPF_Ft.js";
9
+ import { c as cn } from "./button-DtQ3rV1m.js";
10
+ import "@base-ui/react/tooltip";
11
+ import "@base-ui/react/dialog";
12
+ import "@base-ui/react/menu";
13
+ import "motion/react";
14
+ import "@base-ui/react/alert-dialog";
15
+ import "@base-ui/react/collapsible";
16
+ import "@base-ui/react/scroll-area";
17
+ import "marked";
18
+ import "react-markdown";
19
+ import "remark-breaks";
20
+ import "remark-gfm";
21
+ import "./index-COu2idHm.js";
22
+ import "shiki";
23
+ import "zustand";
24
+ import "zustand/middleware";
25
+ import "react-dom";
26
+ import "./router-DbxyvprK.js";
27
+ import "node:crypto";
28
+ import "ws";
29
+ import "@tanstack/router-core/ssr/client";
30
+ import "node:fs/promises";
31
+ import "node:os";
32
+ import "node:path";
33
+ import "path";
34
+ import "@base-ui/react/merge-props";
35
+ import "@base-ui/react/use-render";
36
+ import "class-variance-authority";
37
+ import "clsx";
38
+ import "tailwind-merge";
39
+ function extractTextFromContent(content) {
40
+ if (!Array.isArray(content)) return "";
41
+ return content.map((item) => {
42
+ if (item?.type === "text" && typeof item.text === "string") {
43
+ return item.text;
44
+ }
45
+ if (item?.type === "thinking" && typeof item.thinking === "string") {
46
+ return item.thinking;
47
+ }
48
+ return "";
49
+ }).filter(Boolean).join(" ");
50
+ }
51
+ function extractTextFromMessage(message) {
52
+ const contentText = extractTextFromContent(message.content);
53
+ if (contentText) return contentText;
54
+ if (typeof message.text === "string") {
55
+ return message.text;
56
+ }
57
+ return "";
58
+ }
59
+ function useSearch({ sessions, currentFriendlyId, currentSessionKey }) {
60
+ const queryClient = useQueryClient();
61
+ const [query, setQuery] = useState("");
62
+ const [isSearching, setIsSearching] = useState(false);
63
+ const [globalResults, setGlobalResults] = useState([]);
64
+ const searchCurrentConversation = useCallback(
65
+ (searchQuery) => {
66
+ if (!searchQuery.trim() || !currentFriendlyId || !currentSessionKey) {
67
+ return [];
68
+ }
69
+ const historyKey = chatQueryKeys.history(currentFriendlyId, currentSessionKey);
70
+ const historyData = queryClient.getQueryData(historyKey);
71
+ if (!historyData?.messages) return [];
72
+ const normalizedQuery = searchQuery.toLowerCase();
73
+ const results = [];
74
+ const session = sessions.find((s) => s.friendlyId === currentFriendlyId);
75
+ const sessionTitle = session?.label || session?.title || session?.derivedTitle || currentFriendlyId;
76
+ historyData.messages.forEach((message, index) => {
77
+ const text = extractTextFromMessage(message);
78
+ if (!text) return;
79
+ const lowerText = text.toLowerCase();
80
+ const matchIndex = lowerText.indexOf(normalizedQuery);
81
+ if (matchIndex !== -1) {
82
+ results.push({
83
+ sessionKey: currentSessionKey,
84
+ friendlyId: currentFriendlyId,
85
+ sessionTitle,
86
+ messageIndex: index,
87
+ messageRole: message.role || "unknown",
88
+ messageText: text,
89
+ matchStart: matchIndex,
90
+ matchEnd: matchIndex + searchQuery.length,
91
+ timestamp: message.timestamp
92
+ });
93
+ }
94
+ });
95
+ return results;
96
+ },
97
+ [currentFriendlyId, currentSessionKey, queryClient, sessions]
98
+ );
99
+ const searchAllSessions = useCallback(
100
+ async (searchQuery) => {
101
+ if (!searchQuery.trim()) {
102
+ setGlobalResults([]);
103
+ return [];
104
+ }
105
+ setIsSearching(true);
106
+ const normalizedQuery = searchQuery.toLowerCase();
107
+ const allResults = [];
108
+ try {
109
+ await Promise.all(
110
+ sessions.map(async (session) => {
111
+ try {
112
+ const historyKey = chatQueryKeys.history(session.friendlyId, session.key);
113
+ let historyData = queryClient.getQueryData(historyKey);
114
+ if (!historyData) {
115
+ const params = new URLSearchParams({
116
+ sessionKey: session.key,
117
+ friendlyId: session.friendlyId,
118
+ limit: "200"
119
+ });
120
+ const res = await fetch(`/api/history?${params.toString()}`);
121
+ if (res.ok) {
122
+ historyData = await res.json();
123
+ queryClient.setQueryData(historyKey, historyData);
124
+ }
125
+ }
126
+ if (!historyData?.messages) return;
127
+ const sessionTitle = session.label || session.title || session.derivedTitle || session.friendlyId;
128
+ historyData.messages.forEach((message, index) => {
129
+ const text = extractTextFromMessage(message);
130
+ if (!text) return;
131
+ const lowerText = text.toLowerCase();
132
+ const matchIndex = lowerText.indexOf(normalizedQuery);
133
+ if (matchIndex !== -1) {
134
+ allResults.push({
135
+ sessionKey: session.key,
136
+ friendlyId: session.friendlyId,
137
+ sessionTitle,
138
+ messageIndex: index,
139
+ messageRole: message.role || "unknown",
140
+ messageText: text,
141
+ matchStart: matchIndex,
142
+ matchEnd: matchIndex + searchQuery.length,
143
+ timestamp: message.timestamp
144
+ });
145
+ }
146
+ });
147
+ } catch {
148
+ }
149
+ })
150
+ );
151
+ allResults.sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0));
152
+ setGlobalResults(allResults);
153
+ return allResults;
154
+ } finally {
155
+ setIsSearching(false);
156
+ }
157
+ },
158
+ [sessions, queryClient]
159
+ );
160
+ const clearSearch = useCallback(() => {
161
+ setQuery("");
162
+ setGlobalResults([]);
163
+ }, []);
164
+ return {
165
+ query,
166
+ setQuery,
167
+ isSearching,
168
+ globalResults,
169
+ searchCurrentConversation,
170
+ searchAllSessions,
171
+ clearSearch
172
+ };
173
+ }
174
+ function highlightMatch(text, query) {
175
+ if (!query.trim()) return null;
176
+ const lowerText = text.toLowerCase();
177
+ const lowerQuery = query.toLowerCase();
178
+ const matchIndex = lowerText.indexOf(lowerQuery);
179
+ if (matchIndex === -1) return null;
180
+ const contextBefore = 40;
181
+ const contextAfter = 80;
182
+ let start = Math.max(0, matchIndex - contextBefore);
183
+ let end = Math.min(text.length, matchIndex + query.length + contextAfter);
184
+ if (start > 0) {
185
+ const spaceIndex = text.indexOf(" ", start);
186
+ if (spaceIndex !== -1 && spaceIndex < matchIndex) {
187
+ start = spaceIndex + 1;
188
+ }
189
+ }
190
+ if (end < text.length) {
191
+ const spaceIndex = text.lastIndexOf(" ", end);
192
+ if (spaceIndex > matchIndex + query.length) {
193
+ end = spaceIndex;
194
+ }
195
+ }
196
+ const before = (start > 0 ? "..." : "") + text.slice(start, matchIndex);
197
+ const match = text.slice(matchIndex, matchIndex + query.length);
198
+ const after = text.slice(matchIndex + query.length, end) + (end < text.length ? "..." : "");
199
+ return { before, match, after };
200
+ }
201
+ function SearchDialog({
202
+ open,
203
+ onOpenChange,
204
+ sessions,
205
+ currentFriendlyId,
206
+ currentSessionKey,
207
+ mode,
208
+ onJumpToMessage
209
+ }) {
210
+ const navigate = useNavigate();
211
+ const inputRef = useRef(null);
212
+ const [localQuery, setLocalQuery] = useState("");
213
+ const [selectedIndex, setSelectedIndex] = useState(0);
214
+ const resultsRef = useRef(null);
215
+ const {
216
+ isSearching,
217
+ globalResults,
218
+ searchCurrentConversation,
219
+ searchAllSessions,
220
+ clearSearch
221
+ } = useSearch({
222
+ sessions,
223
+ currentFriendlyId,
224
+ currentSessionKey
225
+ });
226
+ const currentResults = useMemo(() => {
227
+ if (mode !== "current") return [];
228
+ return searchCurrentConversation(localQuery);
229
+ }, [mode, localQuery, searchCurrentConversation]);
230
+ const results = mode === "global" ? globalResults : currentResults;
231
+ useEffect(() => {
232
+ if (mode !== "global") return;
233
+ if (!localQuery.trim()) {
234
+ clearSearch();
235
+ return;
236
+ }
237
+ const timer = setTimeout(() => {
238
+ void searchAllSessions(localQuery);
239
+ }, 300);
240
+ return () => clearTimeout(timer);
241
+ }, [localQuery, mode, searchAllSessions, clearSearch]);
242
+ useEffect(() => {
243
+ if (open) {
244
+ setLocalQuery("");
245
+ setSelectedIndex(0);
246
+ clearSearch();
247
+ setTimeout(() => {
248
+ inputRef.current?.focus();
249
+ }, 50);
250
+ }
251
+ }, [open, clearSearch]);
252
+ useEffect(() => {
253
+ setSelectedIndex(0);
254
+ }, [results]);
255
+ useEffect(() => {
256
+ if (!resultsRef.current) return;
257
+ const selected = resultsRef.current.querySelector('[data-selected="true"]');
258
+ if (selected) {
259
+ selected.scrollIntoView({ block: "nearest" });
260
+ }
261
+ }, [selectedIndex]);
262
+ const handleSelectResult = useCallback(
263
+ (result) => {
264
+ onOpenChange(false);
265
+ if (mode === "current" && onJumpToMessage) {
266
+ onJumpToMessage(result);
267
+ } else {
268
+ navigate({
269
+ to: "/chat/$sessionKey",
270
+ params: { sessionKey: result.friendlyId }
271
+ });
272
+ }
273
+ },
274
+ [mode, navigate, onJumpToMessage, onOpenChange]
275
+ );
276
+ const handleKeyDown = useCallback(
277
+ (e) => {
278
+ switch (e.key) {
279
+ case "ArrowDown":
280
+ e.preventDefault();
281
+ setSelectedIndex((i) => Math.min(i + 1, results.length - 1));
282
+ break;
283
+ case "ArrowUp":
284
+ e.preventDefault();
285
+ setSelectedIndex((i) => Math.max(i - 1, 0));
286
+ break;
287
+ case "Enter":
288
+ e.preventDefault();
289
+ if (results[selectedIndex]) {
290
+ handleSelectResult(results[selectedIndex]);
291
+ }
292
+ break;
293
+ case "Escape":
294
+ e.preventDefault();
295
+ onOpenChange(false);
296
+ break;
297
+ }
298
+ },
299
+ [results, selectedIndex, handleSelectResult, onOpenChange]
300
+ );
301
+ const placeholder = mode === "global" ? "Search across all conversations..." : "Search in this conversation...";
302
+ return /* @__PURE__ */ jsx(DialogRoot, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "w-[min(600px,92vw)] max-h-[80vh] flex flex-col overflow-hidden", children: [
303
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 p-4 border-b border-primary-200", children: [
304
+ /* @__PURE__ */ jsx(
305
+ HugeiconsIcon,
306
+ {
307
+ icon: Search01Icon,
308
+ size: 20,
309
+ className: "text-primary-500 shrink-0"
310
+ }
311
+ ),
312
+ /* @__PURE__ */ jsx(
313
+ "input",
314
+ {
315
+ ref: inputRef,
316
+ type: "text",
317
+ value: localQuery,
318
+ onChange: (e) => setLocalQuery(e.target.value),
319
+ onKeyDown: handleKeyDown,
320
+ placeholder,
321
+ className: "flex-1 bg-transparent text-primary-900 placeholder:text-primary-400 outline-none text-base"
322
+ }
323
+ ),
324
+ localQuery && /* @__PURE__ */ jsx(
325
+ "button",
326
+ {
327
+ type: "button",
328
+ onClick: () => {
329
+ setLocalQuery("");
330
+ clearSearch();
331
+ },
332
+ className: "p-1 hover:bg-primary-200 rounded transition-colors",
333
+ children: /* @__PURE__ */ jsx(
334
+ HugeiconsIcon,
335
+ {
336
+ icon: Cancel01Icon,
337
+ size: 16,
338
+ className: "text-primary-500"
339
+ }
340
+ )
341
+ }
342
+ ),
343
+ isSearching && /* @__PURE__ */ jsx(
344
+ HugeiconsIcon,
345
+ {
346
+ icon: Loading03Icon,
347
+ size: 20,
348
+ className: "text-primary-500 animate-spin"
349
+ }
350
+ )
351
+ ] }),
352
+ /* @__PURE__ */ jsx(
353
+ "div",
354
+ {
355
+ ref: resultsRef,
356
+ className: "flex-1 overflow-y-auto p-2 min-h-0",
357
+ children: !localQuery.trim() ? /* @__PURE__ */ jsx("div", { className: "text-center text-primary-500 py-8 text-sm", children: mode === "global" ? "Type to search across all your conversations" : "Type to search within this conversation" }) : results.length === 0 && !isSearching ? /* @__PURE__ */ jsxs("div", { className: "text-center text-primary-500 py-8 text-sm", children: [
358
+ 'No results found for "',
359
+ localQuery,
360
+ '"'
361
+ ] }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1", children: results.map((result, index) => /* @__PURE__ */ jsx(
362
+ SearchResultItem,
363
+ {
364
+ result,
365
+ query: localQuery,
366
+ isSelected: index === selectedIndex,
367
+ showSessionTitle: mode === "global",
368
+ onClick: () => handleSelectResult(result),
369
+ onMouseEnter: () => setSelectedIndex(index)
370
+ },
371
+ `${result.friendlyId}-${result.messageIndex}`
372
+ )) })
373
+ }
374
+ ),
375
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-t border-primary-200 text-xs text-primary-500", children: [
376
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
377
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
378
+ /* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 bg-primary-100 rounded text-[10px]", children: "↑" }),
379
+ /* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 bg-primary-100 rounded text-[10px]", children: "↓" }),
380
+ "to navigate"
381
+ ] }),
382
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
383
+ /* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 bg-primary-100 rounded text-[10px]", children: "Enter" }),
384
+ "to select"
385
+ ] }),
386
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
387
+ /* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 bg-primary-100 rounded text-[10px]", children: "Esc" }),
388
+ "to close"
389
+ ] })
390
+ ] }),
391
+ results.length > 0 && /* @__PURE__ */ jsxs("span", { children: [
392
+ results.length,
393
+ " result",
394
+ results.length !== 1 ? "s" : ""
395
+ ] })
396
+ ] })
397
+ ] }) });
398
+ }
399
+ function SearchResultItem({
400
+ result,
401
+ query,
402
+ isSelected,
403
+ showSessionTitle,
404
+ onClick,
405
+ onMouseEnter
406
+ }) {
407
+ const highlight = highlightMatch(result.messageText, query);
408
+ const roleLabel = result.messageRole === "assistant" ? "Assistant" : "You";
409
+ return /* @__PURE__ */ jsxs(
410
+ "button",
411
+ {
412
+ type: "button",
413
+ onClick,
414
+ onMouseEnter,
415
+ "data-selected": isSelected,
416
+ className: cn(
417
+ "w-full text-left px-3 py-2 rounded-lg transition-colors",
418
+ isSelected ? "bg-primary-200" : "hover:bg-primary-100"
419
+ ),
420
+ children: [
421
+ showSessionTitle && /* @__PURE__ */ jsx("div", { className: "text-xs font-medium text-primary-600 mb-1 truncate", children: result.sessionTitle }),
422
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 mb-0.5", children: /* @__PURE__ */ jsx(
423
+ "span",
424
+ {
425
+ className: cn(
426
+ "text-[10px] font-medium px-1.5 py-0.5 rounded",
427
+ result.messageRole === "assistant" ? "bg-blue-100 text-blue-700" : "bg-green-100 text-green-700"
428
+ ),
429
+ children: roleLabel
430
+ }
431
+ ) }),
432
+ highlight && /* @__PURE__ */ jsxs("div", { className: "text-sm text-primary-700 line-clamp-2", children: [
433
+ /* @__PURE__ */ jsx("span", { children: highlight.before }),
434
+ /* @__PURE__ */ jsx("mark", { className: "bg-yellow-200 text-primary-900 rounded px-0.5", children: highlight.match }),
435
+ /* @__PURE__ */ jsx("span", { children: highlight.after })
436
+ ] })
437
+ ]
438
+ }
439
+ );
440
+ }
441
+ export {
442
+ SearchDialog
443
+ };
@@ -0,0 +1,80 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./menu-D6n4DB0U.js";
4
+ import { B as Button } from "./button-DtQ3rV1m.js";
5
+ import "@base-ui/react/tooltip";
6
+ import "@base-ui/react/dialog";
7
+ import "@base-ui/react/menu";
8
+ import "@base-ui/react/merge-props";
9
+ import "@base-ui/react/use-render";
10
+ import "class-variance-authority";
11
+ import "clsx";
12
+ import "tailwind-merge";
13
+ const formatOptions = [
14
+ {
15
+ value: "markdown",
16
+ label: "Markdown (.md)",
17
+ description: "Nicely formatted with headers and sections"
18
+ },
19
+ {
20
+ value: "json",
21
+ label: "JSON (.json)",
22
+ description: "Full data with metadata"
23
+ },
24
+ {
25
+ value: "txt",
26
+ label: "Plain Text (.txt)",
27
+ description: "Simple text format"
28
+ }
29
+ ];
30
+ function SessionExportDialog({
31
+ open,
32
+ onOpenChange,
33
+ sessionTitle,
34
+ onExport,
35
+ onCancel
36
+ }) {
37
+ const [selectedFormat, setSelectedFormat] = useState("markdown");
38
+ const handleExport = () => {
39
+ onExport(selectedFormat);
40
+ };
41
+ return /* @__PURE__ */ jsx(DialogRoot, { open, onOpenChange, children: /* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
42
+ /* @__PURE__ */ jsx(DialogTitle, { className: "mb-1", children: "Export Conversation" }),
43
+ /* @__PURE__ */ jsxs(DialogDescription, { className: "mb-4", children: [
44
+ 'Export "',
45
+ sessionTitle,
46
+ '" in your preferred format'
47
+ ] }),
48
+ /* @__PURE__ */ jsx("div", { className: "space-y-2 mb-4", children: formatOptions.map((option) => /* @__PURE__ */ jsxs(
49
+ "label",
50
+ {
51
+ className: "flex items-start gap-3 p-3 rounded-lg border border-primary-200 cursor-pointer hover:bg-primary-100 transition-colors",
52
+ children: [
53
+ /* @__PURE__ */ jsx(
54
+ "input",
55
+ {
56
+ type: "radio",
57
+ name: "export-format",
58
+ value: option.value,
59
+ checked: selectedFormat === option.value,
60
+ onChange: (e) => setSelectedFormat(e.target.value),
61
+ className: "mt-1"
62
+ }
63
+ ),
64
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
65
+ /* @__PURE__ */ jsx("div", { className: "font-medium text-sm text-primary-900", children: option.label }),
66
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-primary-600", children: option.description })
67
+ ] })
68
+ ]
69
+ },
70
+ option.value
71
+ )) }),
72
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
73
+ /* @__PURE__ */ jsx(DialogClose, { onClick: onCancel, children: "Cancel" }),
74
+ /* @__PURE__ */ jsx(Button, { onClick: handleExport, children: "Export" })
75
+ ] })
76
+ ] }) }) });
77
+ }
78
+ export {
79
+ SessionExportDialog
80
+ };