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
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Julien Thibeaut (original WebClaw - github.com/ibelick/webclaw)
4
+ Copyright (c) 2026 Robby (OpenCami additions - github.com/robbyczgw-cla/opencami)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # OpenCami 🦎
2
+
3
+ > **Web chat client for [OpenClaw](https://github.com/openclaw/openclaw)** — AI chat interface with PWA support, smart titles, voice playback & more.
4
+
5
+ Forked from [WebClaw](https://github.com/ibelick/webclaw).
6
+
7
+ [![OpenCami](https://img.shields.io/badge/OpenCami-🦎-green)](https://opencami.xyz)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
9
+
10
+ ![OpenCami Chat Interface](docs/screenshots/opencami-chat.jpg)
11
+
12
+ ## ✨ Features
13
+
14
+ **Core:**
15
+ 💬 Multi-session chat · 🎨 Theme support · ⚙️ Settings dialog · 📝 Markdown rendering · 📱 Mobile-responsive
16
+
17
+ **Communication:**
18
+ ⚡ Real-time streaming · 🔊 Voice playback (TTS)
19
+
20
+ **Organization:**
21
+ 📁 Session folders · 🦎 OpenCami chat folder · 📌 Pin sessions · 🗑️ Bulk delete · 🛡️ Protected sessions
22
+
23
+ **Search & Navigation:**
24
+ 🔍 Conversation search · ⌨️ Keyboard shortcuts · 📥 Export conversations
25
+
26
+ **Customization:**
27
+ 🎨 Model selector · 🎭 Persona picker · 🦎 Chameleon theme · 🔤 Text size control
28
+
29
+ **Files:**
30
+ 📂 File explorer · 🖼️ Image attachments
31
+
32
+ **Smart Features:**
33
+ 🏷️ Smart titles · 💡 Smart follow-ups · 💬 Slash commands
34
+
35
+ **Mobile:**
36
+ 👉 Swipe gestures · ⚡ Lazy loading · 📱 Native Android APK (Capacitor)
37
+
38
+ **PWA:**
39
+ 📱 Install as app · 🔄 Offline support · 🚀 Auto-update
40
+
41
+ → **[See detailed feature descriptions in docs/features.md](docs/features.md)**
42
+
43
+ ## 🚀 Quick Start
44
+
45
+ ```bash
46
+ # Clone
47
+ git clone https://github.com/robbyczgw-cla/opencami.git
48
+ cd opencami
49
+
50
+ # Install
51
+ npm install
52
+
53
+ # Configure
54
+ cp .env.example .env.local
55
+ # Edit .env.local with your Gateway URL and token
56
+
57
+ # Run
58
+ npm run dev
59
+ ```
60
+
61
+ Open http://localhost:3001
62
+
63
+ ## 📱 Install as PWA
64
+
65
+ 1. Open OpenCami in your browser
66
+ 2. **Android:** Tap ⋮ menu → "Install app" or "Add to Home Screen"
67
+ 3. **iOS:** Tap Share → "Add to Home Screen"
68
+
69
+ ## 📚 Documentation
70
+
71
+ - **[Features](docs/features.md)** — Detailed feature descriptions
72
+ - **[Architecture](docs/architecture.md)** — Technical overview
73
+ - **[Deployment](docs/deployment.md)** — Self-hosting guide
74
+ - **[Contributing](docs/contributing.md)** — Development workflow
75
+ - **[Changelog](docs/changelog.md)** — Version history
76
+
77
+ ## 🔄 Upstream Contributions
78
+
79
+ PRs submitted to [ibelick/webclaw](https://github.com/ibelick/webclaw):
80
+ - ✅ [PR #1](https://github.com/ibelick/webclaw/pull/1) — Locale fix (MERGED)
81
+ - ⏳ [PR #4](https://github.com/ibelick/webclaw/pull/4) — Image attachments
82
+ - ⏳ [PR #9](https://github.com/ibelick/webclaw/pull/9) — Conversation search
83
+ - ⏳ [PR #10](https://github.com/ibelick/webclaw/pull/10) — Conversation export
84
+ - ⏳ [PR #11](https://github.com/ibelick/webclaw/pull/11) — Text size setting
85
+
86
+ ## 🗺️ Roadmap
87
+
88
+ - [x] 🔊 Voice Playback (multi-provider TTS)
89
+ - [x] 🎭 Persona Picker
90
+ - [x] 🎨 Model Selector
91
+ - [x] 📱 PWA Support
92
+ - [x] ⚡ Real-Time Streaming
93
+ - [x] 📂 File Explorer
94
+ - [ ] 🔔 Push Notifications (PWA)
95
+ - [ ] 🎤 Voice Input (Whisper transcription)
96
+ - [ ] 📎 File Uploads (PDFs, docs, code)
97
+ - [ ] 📊 Usage Dashboard
98
+
99
+ ## 🙏 Credits
100
+
101
+ - **[WebClaw](https://github.com/ibelick/webclaw)** by [Julien Thibeaut](https://github.com/ibelick) — Original project
102
+ - **[balin-ar](https://github.com/balin-ar)** — File Explorer with built-in text editor ([PR #2](https://github.com/ibelick/webclaw/pull/2))
103
+ - **[OpenClaw](https://github.com/openclaw/openclaw)** — The gateway that powers it all
104
+
105
+ ## 📄 License
106
+
107
+ MIT — See [LICENSE](LICENSE)
108
+
109
+ ---
110
+
111
+ 🌐 **[opencami.xyz](https://opencami.xyz)** · Built with 💚 by the OpenCami community
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createServer } from 'node:http';
4
+ import { readFile, stat } from 'node:fs/promises';
5
+ import { join, extname } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { exec } from 'node:child_process';
8
+
9
+ const __dirname = fileURLToPath(new URL('..', import.meta.url));
10
+
11
+ // Parse args
12
+ const args = process.argv.slice(2);
13
+ function getArg(name, def) {
14
+ const i = args.indexOf(`--${name}`);
15
+ if (i === -1) return def;
16
+ return args[i + 1] || def;
17
+ }
18
+ const port = parseInt(getArg('port', '3000'), 10);
19
+ const host = getArg('host', '127.0.0.1');
20
+ const gateway = getArg('gateway', 'ws://127.0.0.1:18789');
21
+ const noOpen = args.includes('--no-open');
22
+
23
+ if (args.includes('--help') || args.includes('-h')) {
24
+ console.log(`
25
+ opencami - Web UI for OpenClaw
26
+
27
+ Usage: opencami [options]
28
+
29
+ Options:
30
+ --port <n> Port to listen on (default: 3000)
31
+ --host <addr> Host to bind to (default: 127.0.0.1)
32
+ --gateway <url> OpenClaw gateway URL (default: ws://127.0.0.1:18789)
33
+ --no-open Don't open browser on start
34
+ -h, --help Show this help
35
+ `);
36
+ process.exit(0);
37
+ }
38
+
39
+ // Set gateway env for the app
40
+ process.env.OPENCLAW_GATEWAY = gateway;
41
+
42
+ const MIME_TYPES = {
43
+ '.html': 'text/html',
44
+ '.js': 'application/javascript',
45
+ '.css': 'text/css',
46
+ '.json': 'application/json',
47
+ '.png': 'image/png',
48
+ '.jpg': 'image/jpeg',
49
+ '.jpeg': 'image/jpeg',
50
+ '.gif': 'image/gif',
51
+ '.svg': 'image/svg+xml',
52
+ '.webp': 'image/webp',
53
+ '.ico': 'image/x-icon',
54
+ '.woff': 'font/woff',
55
+ '.woff2': 'font/woff2',
56
+ '.ttf': 'font/ttf',
57
+ '.txt': 'text/plain',
58
+ '.webmanifest': 'application/manifest+json',
59
+ };
60
+
61
+ const clientDir = join(__dirname, 'dist', 'client');
62
+
63
+ async function serveStatic(pathname) {
64
+ const filePath = join(clientDir, pathname);
65
+ // Prevent path traversal
66
+ if (!filePath.startsWith(clientDir)) return null;
67
+ try {
68
+ const s = await stat(filePath);
69
+ if (!s.isFile()) return null;
70
+ const data = await readFile(filePath);
71
+ const ext = extname(filePath);
72
+ return { data, mime: MIME_TYPES[ext] || 'application/octet-stream' };
73
+ } catch {
74
+ return null;
75
+ }
76
+ }
77
+
78
+ // Import the TanStack Start server
79
+ const { default: server } = await import(join(__dirname, 'dist', 'server', 'server.js'));
80
+
81
+ const httpServer = createServer(async (req, res) => {
82
+ const url = new URL(req.url, `http://${req.headers.host}`);
83
+
84
+ // Try static files first
85
+ const staticFile = await serveStatic(url.pathname);
86
+ if (staticFile) {
87
+ res.writeHead(200, { 'Content-Type': staticFile.mime, 'Cache-Control': 'public, max-age=31536000, immutable' });
88
+ res.end(staticFile.data);
89
+ return;
90
+ }
91
+
92
+ // Forward to SSR handler
93
+ try {
94
+ const headers = new Headers();
95
+ for (const [key, value] of Object.entries(req.headers)) {
96
+ if (value) headers.set(key, Array.isArray(value) ? value.join(', ') : value);
97
+ }
98
+
99
+ const body = req.method !== 'GET' && req.method !== 'HEAD'
100
+ ? await new Promise((resolve, reject) => {
101
+ const chunks = [];
102
+ req.on('data', c => chunks.push(c));
103
+ req.on('end', () => resolve(Buffer.concat(chunks)));
104
+ req.on('error', reject);
105
+ })
106
+ : undefined;
107
+
108
+ const request = new Request(url.href, {
109
+ method: req.method,
110
+ headers,
111
+ body,
112
+ duplex: 'half',
113
+ });
114
+
115
+ const response = await server.fetch(request);
116
+
117
+ res.writeHead(response.status, Object.fromEntries(response.headers.entries()));
118
+
119
+ if (response.body) {
120
+ const reader = response.body.getReader();
121
+ const pump = async () => {
122
+ while (true) {
123
+ const { done, value } = await reader.read();
124
+ if (done) { res.end(); break; }
125
+ res.write(value);
126
+ }
127
+ };
128
+ pump().catch(() => res.end());
129
+ } else {
130
+ const buf = await response.arrayBuffer();
131
+ res.end(Buffer.from(buf));
132
+ }
133
+ } catch (err) {
134
+ console.error('Request error:', err.message);
135
+ if (!res.headersSent) {
136
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
137
+ res.end('Internal Server Error');
138
+ }
139
+ }
140
+ });
141
+
142
+ httpServer.listen(port, host, () => {
143
+ const url = `http://${host === '0.0.0.0' ? 'localhost' : host}:${port}`;
144
+ console.log();
145
+ console.log(' 🐾 \x1b[1mOpenCami\x1b[0m');
146
+ console.log();
147
+ console.log(` ➜ Local: \x1b[36m${url}\x1b[0m`);
148
+ console.log(` ➜ Gateway: \x1b[33m${gateway}\x1b[0m`);
149
+ console.log();
150
+
151
+ if (!noOpen) {
152
+ const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
153
+ exec(`${cmd} ${url}`, () => {});
154
+ }
155
+ });