@cryptiklemur/lattice 1.47.0 → 2.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 (597) hide show
  1. package/README.md +14 -36
  2. package/bin/lattice +5 -21
  3. package/dist/client/assets/abap-DOv5zRgd.js +1 -0
  4. package/dist/client/assets/actionscript-3-D_b0n2Ff.js +1 -0
  5. package/dist/client/assets/ada-C6m8O36S.js +1 -0
  6. package/dist/client/assets/andromeeda-LdzAHaKR.js +1 -0
  7. package/dist/client/assets/angular-html-BBi1Szz5.js +1 -0
  8. package/dist/client/assets/angular-ts-2PMpSPqc.js +1 -0
  9. package/dist/client/assets/apache-CE7PmWoU.js +1 -0
  10. package/dist/client/assets/apex-DOfNfL0V.js +1 -0
  11. package/dist/client/assets/apl-B-NEtBvQ.js +1 -0
  12. package/dist/client/assets/applescript-D4zGaScB.js +1 -0
  13. package/dist/client/assets/ara-DMoCP0pJ.js +1 -0
  14. package/dist/client/assets/asciidoc-BkmPq932.js +1 -0
  15. package/dist/client/assets/asm-ClIKbvsu.js +1 -0
  16. package/dist/client/assets/astro-mxH1DA5Z.js +1 -0
  17. package/dist/client/assets/aurora-x-DTcNXZIS.js +1 -0
  18. package/dist/client/assets/awk-D1ZOsISX.js +1 -0
  19. package/dist/client/assets/ayu-dark-DpNcORnA.js +1 -0
  20. package/dist/client/assets/ayu-light-lHqf0ddo.js +1 -0
  21. package/dist/client/assets/ayu-mirage-Dji5RWiH.js +1 -0
  22. package/dist/client/assets/ballerina-H14_EqPr.js +1 -0
  23. package/dist/client/assets/bat-cyb3gF8B.js +1 -0
  24. package/dist/client/assets/beancount-D84pBacF.js +1 -0
  25. package/dist/client/assets/berry-B29XeKK4.js +1 -0
  26. package/dist/client/assets/bibtex-Hs7VvQaV.js +1 -0
  27. package/dist/client/assets/bicep-CugTE5CQ.js +1 -0
  28. package/dist/client/assets/bird2-mieRHotO.js +1 -0
  29. package/dist/client/assets/blade-BUQ9XSm3.js +1 -0
  30. package/dist/client/assets/bsl-BRmzGEWg.js +1 -0
  31. package/dist/client/assets/c-DrQixLw7.js +1 -0
  32. package/dist/client/assets/c3-Dx2gByXW.js +1 -0
  33. package/dist/client/assets/cadence-CCTSwj3w.js +1 -0
  34. package/dist/client/assets/cairo-CaIu88t6.js +1 -0
  35. package/dist/client/assets/catppuccin-frappe-DQrU04q0.js +1 -0
  36. package/dist/client/assets/catppuccin-latte-B_oiWZka.js +1 -0
  37. package/dist/client/assets/catppuccin-macchiato-D8VB2qi4.js +1 -0
  38. package/dist/client/assets/catppuccin-mocha-5vkMJ1Mb.js +1 -0
  39. package/dist/client/assets/clarity-BbUNTPrg.js +1 -0
  40. package/dist/client/assets/clojure-Bcw7lCta.js +1 -0
  41. package/dist/client/assets/cmake-DM0FE-T9.js +1 -0
  42. package/dist/client/assets/cobol-42amjOMh.js +1 -0
  43. package/dist/client/assets/codeowners-CBvEPOlS.js +1 -0
  44. package/dist/client/assets/codeql-CjS8Tp16.js +1 -0
  45. package/dist/client/assets/coffee-CMSEUKyy.js +1 -0
  46. package/dist/client/assets/common-lisp-BCx4dVK8.js +1 -0
  47. package/dist/client/assets/coq-Ddo7YIsR.js +1 -0
  48. package/dist/client/assets/cpp-C4yJBzl2.js +1 -0
  49. package/dist/client/assets/crystal-DZ27EoiA.js +1 -0
  50. package/dist/client/assets/csharp-Kzd7Ey2d.js +1 -0
  51. package/dist/client/assets/css-CdQwkSNm.js +1 -0
  52. package/dist/client/assets/csv-DGwgERVJ.js +1 -0
  53. package/dist/client/assets/cue-CMabdDG0.js +1 -0
  54. package/dist/client/assets/cypher-CJUzJAhQ.js +1 -0
  55. package/dist/client/assets/d-BvLF4qGs.js +1 -0
  56. package/dist/client/assets/dark-plus-BMwvn5lx.js +1 -0
  57. package/dist/client/assets/dart-DxXbDeKR.js +1 -0
  58. package/dist/client/assets/dax-BvrCypuS.js +1 -0
  59. package/dist/client/assets/desktop-BEul_kAS.js +1 -0
  60. package/dist/client/assets/diff-B7rhrwA5.js +1 -0
  61. package/dist/client/assets/dist-CBRIe7YG.js +153 -0
  62. package/dist/client/assets/docker-9Zbx0dQX.js +1 -0
  63. package/dist/client/assets/dotenv-C0epktMv.js +1 -0
  64. package/dist/client/assets/dracula-CBD4ckb0.js +1 -0
  65. package/dist/client/assets/dracula-soft-CuGBZj_h.js +1 -0
  66. package/dist/client/assets/dream-maker-D6UB367x.js +1 -0
  67. package/dist/client/assets/edge-J8VemHZC.js +1 -0
  68. package/dist/client/assets/elixir-DU66qSn_.js +1 -0
  69. package/dist/client/assets/elm-8cz1JjRg.js +1 -0
  70. package/dist/client/assets/emacs-lisp-DFyMFAZA.js +1 -0
  71. package/dist/client/assets/erb-DMl63J6s.js +1 -0
  72. package/dist/client/assets/erlang-LvhGhZI3.js +1 -0
  73. package/dist/client/assets/everforest-dark-BhFNrp2k.js +1 -0
  74. package/dist/client/assets/everforest-light-CpIbZ9aT.js +1 -0
  75. package/dist/client/assets/fennel-CH1ohGYX.js +1 -0
  76. package/dist/client/assets/fish-D2X4h_sR.js +1 -0
  77. package/dist/client/assets/fluent-B_In4uB6.js +1 -0
  78. package/dist/client/assets/fortran-fixed-form-BXvkHMbK.js +1 -0
  79. package/dist/client/assets/fortran-free-form-Bw_JZ1tj.js +1 -0
  80. package/dist/client/assets/fsharp-uxIU8dwY.js +1 -0
  81. package/dist/client/assets/gdresource-DkI-mZL2.js +1 -0
  82. package/dist/client/assets/gdscript-DDro0rs8.js +1 -0
  83. package/dist/client/assets/gdshader-DkUeC1ld.js +1 -0
  84. package/dist/client/assets/genie-khT2hrp-.js +1 -0
  85. package/dist/client/assets/gherkin-CPELKal0.js +1 -0
  86. package/dist/client/assets/git-commit-a3TktZ3A.js +1 -0
  87. package/dist/client/assets/git-rebase-DjlZL8cj.js +1 -0
  88. package/dist/client/assets/github-dark-DQp1Qkx5.js +1 -0
  89. package/dist/client/assets/github-dark-default-BroO-mT3.js +1 -0
  90. package/dist/client/assets/github-dark-dimmed-D8UZ8uTL.js +1 -0
  91. package/dist/client/assets/github-dark-high-contrast-CM0RRMCj.js +1 -0
  92. package/dist/client/assets/github-light-BRTmX4Ht.js +1 -0
  93. package/dist/client/assets/github-light-default-dl7biQ4g.js +1 -0
  94. package/dist/client/assets/github-light-high-contrast-Cvzq8ZXJ.js +1 -0
  95. package/dist/client/assets/gleam-7UVjplRF.js +1 -0
  96. package/dist/client/assets/glimmer-js-Fu7vOQY-.js +1 -0
  97. package/dist/client/assets/glimmer-ts-AJljRs0A.js +1 -0
  98. package/dist/client/assets/glsl-CfodGzSv.js +1 -0
  99. package/dist/client/assets/gn-EcrZPIZo.js +1 -0
  100. package/dist/client/assets/gnuplot-CcsFlqcz.js +1 -0
  101. package/dist/client/assets/go-TqNfhUhh.js +1 -0
  102. package/dist/client/assets/graphql-C8GPKPx1.js +1 -0
  103. package/dist/client/assets/groovy-bfrzFpSZ.js +1 -0
  104. package/dist/client/assets/gruvbox-dark-hard-CBFL_VqK.js +1 -0
  105. package/dist/client/assets/gruvbox-dark-medium-Dn18r-Yz.js +1 -0
  106. package/dist/client/assets/gruvbox-dark-soft-DUyKWd02.js +1 -0
  107. package/dist/client/assets/gruvbox-light-hard-DV9RwKs4.js +1 -0
  108. package/dist/client/assets/gruvbox-light-medium-Ba-VIg48.js +1 -0
  109. package/dist/client/assets/gruvbox-light-soft-CVIZMKFx.js +1 -0
  110. package/dist/client/assets/hack-Gp6OuE21.js +1 -0
  111. package/dist/client/assets/haml-BOyG6GfM.js +1 -0
  112. package/dist/client/assets/handlebars-B9IoVRxd.js +1 -0
  113. package/dist/client/assets/haskell-DzEtL6Zk.js +1 -0
  114. package/dist/client/assets/haxe-wLDEcRoz.js +1 -0
  115. package/dist/client/assets/hcl-C1fs3gTM.js +1 -0
  116. package/dist/client/assets/hjson-B4b85MZo.js +1 -0
  117. package/dist/client/assets/hlsl-JhqkHhML.js +1 -0
  118. package/dist/client/assets/horizon-DMOEeSnA.js +1 -0
  119. package/dist/client/assets/horizon-bright-CPVackS9.js +1 -0
  120. package/dist/client/assets/houston-DSlR9wH9.js +1 -0
  121. package/dist/client/assets/html-CFrSukiU.js +1 -0
  122. package/dist/client/assets/html-derivative-D0_gRK_M.js +1 -0
  123. package/dist/client/assets/http-D4MmFixi.js +1 -0
  124. package/dist/client/assets/hurl-D1xbk-LS.js +1 -0
  125. package/dist/client/assets/hxml-Bdi_kWeE.js +1 -0
  126. package/dist/client/assets/hy-uAHU8420.js +1 -0
  127. package/dist/client/assets/imba-CPCwfD-G.js +1 -0
  128. package/dist/client/assets/index-DrTbNMzI.css +2 -0
  129. package/dist/client/assets/index-ZIuI5BCP.js +284 -0
  130. package/dist/client/assets/ini-2Ew1Qzj6.js +1 -0
  131. package/dist/client/assets/java-CfPMY1Dv.js +1 -0
  132. package/dist/client/assets/javascript-B8vNHeqm.js +1 -0
  133. package/dist/client/assets/jinja-CF0K8bFV.js +1 -0
  134. package/dist/client/assets/jison-BP7my5TL.js +1 -0
  135. package/dist/client/assets/json-TeXNjpMZ.js +1 -0
  136. package/dist/client/assets/json5-Dl8gAgq4.js +1 -0
  137. package/dist/client/assets/jsonc-C9b23pMf.js +1 -0
  138. package/dist/client/assets/jsonl-DkF3QjsY.js +1 -0
  139. package/dist/client/assets/jsonnet-DH4UkOBo.js +1 -0
  140. package/dist/client/assets/jssm-CBV9_O8o.js +1 -0
  141. package/dist/client/assets/jsx-C86NmHc2.js +1 -0
  142. package/dist/client/assets/julia-C58U_aQP.js +1 -0
  143. package/dist/client/assets/just-h6Vco8Qu.js +1 -0
  144. package/dist/client/assets/kanagawa-dragon-DLDXA4f2.js +1 -0
  145. package/dist/client/assets/kanagawa-lotus-qAvw6eOU.js +1 -0
  146. package/dist/client/assets/kanagawa-wave-DFO_g5Mb.js +1 -0
  147. package/dist/client/assets/kdl-BQl-X5Uf.js +1 -0
  148. package/dist/client/assets/kotlin-d6oenWPH.js +1 -0
  149. package/dist/client/assets/kusto-Cpu9Tdho.js +1 -0
  150. package/dist/client/assets/laserwave-Bbquw0Nf.js +1 -0
  151. package/dist/client/assets/latex-DRsNisjT.js +1 -0
  152. package/dist/client/assets/lean-CvyEisyW.js +1 -0
  153. package/dist/client/assets/less-B9RQiV1N.js +1 -0
  154. package/dist/client/assets/light-plus-Ch1Usv7R.js +1 -0
  155. package/dist/client/assets/liquid-C9jXC9M7.js +1 -0
  156. package/dist/client/assets/llvm-DtrwjsAs.js +1 -0
  157. package/dist/client/assets/log-JKbKuM4J.js +1 -0
  158. package/dist/client/assets/logo-BsxZM_eb.js +1 -0
  159. package/dist/client/assets/lua-BUYvdn-F.js +1 -0
  160. package/dist/client/assets/luau-D9oeBRnv.js +1 -0
  161. package/dist/client/assets/make-DLuqI3Sa.js +1 -0
  162. package/dist/client/assets/markdown-hfQzyr6v.js +1 -0
  163. package/dist/client/assets/marko-BqB4tqw-.js +1 -0
  164. package/dist/client/assets/material-theme-darker-yvetTWEr.js +1 -0
  165. package/dist/client/assets/material-theme-kX26WiJU.js +1 -0
  166. package/dist/client/assets/material-theme-lighter-L4j3qddN.js +1 -0
  167. package/dist/client/assets/material-theme-ocean-BnNk1wNQ.js +1 -0
  168. package/dist/client/assets/material-theme-palenight-W0qbGyud.js +1 -0
  169. package/dist/client/assets/matlab-Cz4xBfaA.js +1 -0
  170. package/dist/client/assets/mdc-C8Rs68Nw.js +1 -0
  171. package/dist/client/assets/mdx-Crds6sJw.js +1 -0
  172. package/dist/client/assets/mermaid-Bk1sayFm.js +1 -0
  173. package/dist/client/assets/min-dark-DK6uq44k.js +1 -0
  174. package/dist/client/assets/min-light-lr1QiEOE.js +1 -0
  175. package/dist/client/assets/mipsasm-D3Vr1VJI.js +1 -0
  176. package/dist/client/assets/mojo-D3ai4ATt.js +1 -0
  177. package/dist/client/assets/monokai-DZSWSdmN.js +1 -0
  178. package/dist/client/assets/moonbit-c7XV1V8w.js +1 -0
  179. package/dist/client/assets/move--lg8RSZu.js +1 -0
  180. package/dist/client/assets/narrat-Bn_PlXDl.js +1 -0
  181. package/dist/client/assets/nextflow-DXxhyYjQ.js +1 -0
  182. package/dist/client/assets/nextflow-groovy-CUrXbMOF.js +1 -0
  183. package/dist/client/assets/nginx-Dj6E3HRL.js +1 -0
  184. package/dist/client/assets/night-owl-DnKT96OJ.js +1 -0
  185. package/dist/client/assets/night-owl-light-gVSh6ltn.js +1 -0
  186. package/dist/client/assets/nim-BizJb4iF.js +1 -0
  187. package/dist/client/assets/nix-DE1Q2B1F.js +1 -0
  188. package/dist/client/assets/nord-CbYaE7ZY.js +1 -0
  189. package/dist/client/assets/nushell-BBFYNdNE.js +1 -0
  190. package/dist/client/assets/objective-c-mc6rHp-y.js +1 -0
  191. package/dist/client/assets/objective-cpp-D96wcRis.js +1 -0
  192. package/dist/client/assets/ocaml-Ddt3E4VO.js +1 -0
  193. package/dist/client/assets/odin-BUZTfc03.js +1 -0
  194. package/dist/client/assets/one-dark-pro-CLMO01es.js +1 -0
  195. package/dist/client/assets/one-light-27sfjFDM.js +1 -0
  196. package/dist/client/assets/openscad-C-XxCD_t.js +1 -0
  197. package/dist/client/assets/pascal-BvJwb9Ca.js +1 -0
  198. package/dist/client/assets/perl-DnJAtWNn.js +1 -0
  199. package/dist/client/assets/php-BeY_VEeb.js +1 -0
  200. package/dist/client/assets/pkl-DtSDxyR8.js +1 -0
  201. package/dist/client/assets/plastic-Dd1-4HJb.js +1 -0
  202. package/dist/client/assets/plsql-CgEVu7mV.js +1 -0
  203. package/dist/client/assets/po-BNFx8QMG.js +1 -0
  204. package/dist/client/assets/poimandres-DdZFFINT.js +1 -0
  205. package/dist/client/assets/polar-DcGwqI2v.js +1 -0
  206. package/dist/client/assets/postcss-BgFCg0uM.js +1 -0
  207. package/dist/client/assets/powerquery-BNMZnWRc.js +1 -0
  208. package/dist/client/assets/powershell-CeNh_gMu.js +1 -0
  209. package/dist/client/assets/prisma-C4wKi9Xs.js +1 -0
  210. package/dist/client/assets/prolog-DcNkIfZZ.js +1 -0
  211. package/dist/client/assets/proto-BqsNb_Ru.js +1 -0
  212. package/dist/client/assets/pug-DXhFbVDh.js +1 -0
  213. package/dist/client/assets/puppet-BLvi8DVC.js +1 -0
  214. package/dist/client/assets/purescript-B_tjgp5s.js +1 -0
  215. package/dist/client/assets/python-xLLWlBd0.js +1 -0
  216. package/dist/client/assets/qml-CngzXsz8.js +1 -0
  217. package/dist/client/assets/qmldir-CDe6ORFD.js +1 -0
  218. package/dist/client/assets/qss-CvW7b9vz.js +1 -0
  219. package/dist/client/assets/r-BMmy9apu.js +1 -0
  220. package/dist/client/assets/racket-CA2oKVL1.js +1 -0
  221. package/dist/client/assets/raku-D9dEetfn.js +1 -0
  222. package/dist/client/assets/razor-kIo5DNUk.js +1 -0
  223. package/dist/client/assets/red-Cj1vpJ_n.js +1 -0
  224. package/dist/client/assets/reg-CHsE82Pk.js +1 -0
  225. package/dist/client/assets/regexp-BIa5IayX.js +1 -0
  226. package/dist/client/assets/rel-SUS6CYTF.js +1 -0
  227. package/dist/client/assets/riscv-xyAKa3qa.js +1 -0
  228. package/dist/client/assets/ron-D5BrJbC5.js +1 -0
  229. package/dist/client/assets/rose-pine-Dd0RAvir.js +1 -0
  230. package/dist/client/assets/rose-pine-dawn-CeS_2jlO.js +1 -0
  231. package/dist/client/assets/rose-pine-moon-CQrvtQEF.js +1 -0
  232. package/dist/client/assets/rosmsg-Bie95NPX.js +1 -0
  233. package/dist/client/assets/rst-McWv3WP0.js +1 -0
  234. package/dist/client/assets/ruby-CkenUDKe.js +1 -0
  235. package/dist/client/assets/rust-CAON_J-7.js +1 -0
  236. package/dist/client/assets/sas-Dgn9Yrr5.js +1 -0
  237. package/dist/client/assets/sass-CKkv3rB4.js +1 -0
  238. package/dist/client/assets/scala-BADlfUbE.js +1 -0
  239. package/dist/client/assets/scheme-Bv8vdcS_.js +1 -0
  240. package/dist/client/assets/scss-Tfn9jzBB.js +1 -0
  241. package/dist/client/assets/sdbl-TUdAkzzL.js +1 -0
  242. package/dist/client/assets/shaderlab-C5utLNvK.js +1 -0
  243. package/dist/client/assets/shellscript-vGpgBWOS.js +1 -0
  244. package/dist/client/assets/shellsession-7CA0dOzR.js +1 -0
  245. package/dist/client/assets/slack-dark-BeQrlvP4.js +1 -0
  246. package/dist/client/assets/slack-ochin-DaA1aBiy.js +1 -0
  247. package/dist/client/assets/smalltalk-C1k1DVft.js +1 -0
  248. package/dist/client/assets/snazzy-light-C9Bzvwcg.js +1 -0
  249. package/dist/client/assets/solarized-dark--ZJpQY8O.js +1 -0
  250. package/dist/client/assets/solarized-light-wzNWfjF2.js +1 -0
  251. package/dist/client/assets/solidity-CaEDdWYR.js +1 -0
  252. package/dist/client/assets/soy-DbBURueN.js +1 -0
  253. package/dist/client/assets/sparql-nVt1Q8sD.js +1 -0
  254. package/dist/client/assets/splunk-mpBjmHRA.js +1 -0
  255. package/dist/client/assets/sql-BJGtbEM8.js +1 -0
  256. package/dist/client/assets/ssh-config-DqmSAS3N.js +1 -0
  257. package/dist/client/assets/stata-L0kV9FQT.js +1 -0
  258. package/dist/client/assets/stylus-mNYBrtqL.js +1 -0
  259. package/dist/client/assets/surrealql-C17jcHRl.js +1 -0
  260. package/dist/client/assets/svelte-B5_CmVcu.js +1 -0
  261. package/dist/client/assets/swift-BXoR6L-y.js +1 -0
  262. package/dist/client/assets/synthwave-84-ybvkLGau.js +1 -0
  263. package/dist/client/assets/system-verilog-BnyrpGlO.js +1 -0
  264. package/dist/client/assets/systemd-BBVr_qxh.js +1 -0
  265. package/dist/client/assets/talonscript-l0qUQn2r.js +1 -0
  266. package/dist/client/assets/tasl-BzcMwPTS.js +1 -0
  267. package/dist/client/assets/tcl-CQgtyMkG.js +1 -0
  268. package/dist/client/assets/templ-C5f2EORt.js +1 -0
  269. package/dist/client/assets/terraform-BgPqtSWN.js +1 -0
  270. package/dist/client/assets/tex-DvaBtCMN.js +1 -0
  271. package/dist/client/assets/tokyo-night-BZt2NwCl.js +1 -0
  272. package/dist/client/assets/toml-CpHBCfVl.js +1 -0
  273. package/dist/client/assets/ts-tags-DlZzQdBU.js +1 -0
  274. package/dist/client/assets/tsv-DYxH1-vL.js +1 -0
  275. package/dist/client/assets/tsx-DaLOIju9.js +1 -0
  276. package/dist/client/assets/turtle-DdFFvP5J.js +1 -0
  277. package/dist/client/assets/twig-BB7320dl.js +1 -0
  278. package/dist/client/assets/typescript-D8B-VgXj.js +1 -0
  279. package/dist/client/assets/typespec-CHOxKRtr.js +1 -0
  280. package/dist/client/assets/typst-C0VS9TQm.js +1 -0
  281. package/dist/client/assets/v-CfOPGXPl.js +1 -0
  282. package/dist/client/assets/vala-DYqHmNOK.js +1 -0
  283. package/dist/client/assets/vb-DUBgqZ02.js +1 -0
  284. package/dist/client/assets/verilog-BxybH_AY.js +1 -0
  285. package/dist/client/assets/vesper-BDlBlJR-.js +1 -0
  286. package/dist/client/assets/vhdl-DBoxxi7I.js +1 -0
  287. package/dist/client/assets/viml-C8vROCgw.js +1 -0
  288. package/dist/client/assets/vitesse-black-CUBzmgJa.js +1 -0
  289. package/dist/client/assets/vitesse-dark-COrLBgkv.js +1 -0
  290. package/dist/client/assets/vitesse-light-ThZGgLQK.js +1 -0
  291. package/dist/client/assets/vue-DylGFDrG.js +1 -0
  292. package/dist/client/assets/vue-html-Dt8r3B9y.js +1 -0
  293. package/dist/client/assets/vue-vine-DdN02uhY.js +1 -0
  294. package/dist/client/assets/vyper-D08CaD4o.js +1 -0
  295. package/dist/client/assets/wasm-CoVafRYN.js +1 -0
  296. package/dist/client/assets/wasm-DiIFv9DE.js +1 -0
  297. package/dist/client/assets/wenyan-GlRgAbTB.js +1 -0
  298. package/dist/client/assets/wgsl-BmWpQFqb.js +1 -0
  299. package/dist/client/assets/wikitext-Axug2vPC.js +1 -0
  300. package/dist/client/assets/wit-Dk1fPIaK.js +1 -0
  301. package/dist/client/assets/wolfram-DMhXlmnL.js +1 -0
  302. package/dist/client/assets/xml-CBEuB6I0.js +1 -0
  303. package/dist/client/assets/xsl-CuhlgDL5.js +1 -0
  304. package/dist/client/assets/yaml-Da6ymghi.js +1 -0
  305. package/dist/client/assets/zenscript-x7PXwj2_.js +1 -0
  306. package/dist/client/assets/zig-BlD2NI35.js +1 -0
  307. package/dist/client/index.html +21 -0
  308. package/dist/client/manifest.webmanifest +1 -0
  309. package/dist/client/registerSW.js +1 -0
  310. package/dist/client/sw-push.js +53 -0
  311. package/dist/client/sw.js +1 -0
  312. package/dist/client/workbox-b51dd497.js +1 -0
  313. package/{client/index.html → index.html} +1 -1
  314. package/package.json +62 -14
  315. package/public/icons/icon-192.svg +11 -0
  316. package/public/icons/icon-512.svg +11 -0
  317. package/public/sw-push.js +53 -0
  318. package/{client/src → src/client}/components/analytics/AnalyticsView.tsx +70 -78
  319. package/{client/src → src/client}/components/analytics/ChartCard.tsx +8 -2
  320. package/{client/src → src/client}/components/analytics/QuickStats.tsx +12 -10
  321. package/{client/src → src/client}/components/analytics/charts/ActivityCalendar.tsx +5 -3
  322. package/{client/src → src/client}/components/analytics/charts/CacheEfficiencyChart.tsx +1 -1
  323. package/{client/src → src/client}/components/analytics/charts/ContextUtilizationChart.tsx +33 -25
  324. package/{client/src → src/client}/components/analytics/charts/CostAreaChart.tsx +4 -4
  325. package/{client/src → src/client}/components/analytics/charts/CostDistributionChart.tsx +1 -0
  326. package/{client/src → src/client}/components/analytics/charts/CostDonutChart.tsx +1 -0
  327. package/{client/src → src/client}/components/analytics/charts/CumulativeCostChart.tsx +1 -0
  328. package/{client/src → src/client}/components/analytics/charts/HourlyHeatmap.tsx +5 -3
  329. package/{client/src → src/client}/components/analytics/charts/ProjectRadar.tsx +30 -26
  330. package/{client/src → src/client}/components/analytics/charts/ResponseTimeScatter.tsx +16 -10
  331. package/{client/src → src/client}/components/analytics/charts/SessionBubbleChart.tsx +23 -16
  332. package/{client/src → src/client}/components/analytics/charts/SessionTimeline.tsx +5 -3
  333. package/{client/src → src/client}/components/analytics/charts/TokenFlowChart.tsx +3 -3
  334. package/{client/src → src/client}/components/analytics/charts/ToolSunburst.tsx +26 -23
  335. package/{client/src → src/client}/components/chat/ChatView.tsx +59 -25
  336. package/{client/src → src/client}/components/chat/Message.tsx +245 -8
  337. package/{client/src → src/client}/components/chat/ModelSelector.tsx +29 -8
  338. package/src/client/components/settings/Appearance.tsx +275 -0
  339. package/{client/src → src/client}/components/settings/Notifications.tsx +35 -0
  340. package/src/client/components/settings/ThemePreview.tsx +140 -0
  341. package/src/client/components/settings/ThemeWizard.tsx +405 -0
  342. package/{client/src → src/client}/components/sidebar/ProjectRail.tsx +43 -169
  343. package/{client/src → src/client}/components/sidebar/SessionList.tsx +27 -49
  344. package/{client/src → src/client}/components/sidebar/Sidebar.tsx +2 -6
  345. package/{client/src → src/client}/components/sidebar/UserIsland.tsx +24 -5
  346. package/{client/src → src/client}/components/sidebar/UserMenu.tsx +4 -2
  347. package/src/client/components/ui/ContextMenu.tsx +153 -0
  348. package/{client/src → src/client}/components/ui/PopupMenu.tsx +4 -2
  349. package/{client/src → src/client}/components/ui/SaveFooter.tsx +1 -1
  350. package/{client/src → src/client}/components/workspace/TabBar.tsx +17 -64
  351. package/{client/src → src/client}/hooks/useAnalytics.ts +17 -8
  352. package/src/client/hooks/usePushNotifications.ts +92 -0
  353. package/{client/src → src/client}/hooks/useSession.ts +35 -8
  354. package/{client/src → src/client}/hooks/useWebSocket.ts +0 -3
  355. package/src/client/lib/theme-derive.ts +196 -0
  356. package/{client/src → src/client}/stores/analytics.ts +20 -6
  357. package/{client/src → src/client}/stores/session.ts +32 -2
  358. package/{client/src → src/client}/stores/sidebar.ts +3 -1
  359. package/{client/src → src/client}/themes/index.ts +26 -0
  360. package/{server/src → src/server}/analytics/engine.ts +87 -30
  361. package/src/server/assets.ts +45 -0
  362. package/src/server/daemon.ts +547 -0
  363. package/{server/src → src/server}/handlers/analytics.ts +13 -8
  364. package/{server/src → src/server}/handlers/chat.ts +73 -2
  365. package/{server/src → src/server}/handlers/mesh.ts +3 -2
  366. package/{server/src → src/server}/handlers/plugins.ts +10 -13
  367. package/{server/src → src/server}/handlers/session.ts +6 -1
  368. package/{server/src → src/server}/handlers/settings.ts +1 -1
  369. package/{server/src → src/server}/handlers/skills.ts +7 -9
  370. package/src/server/handlers/themes.ts +121 -0
  371. package/{server/src → src/server}/handlers/update.ts +5 -23
  372. package/{server/src → src/server}/index.ts +97 -134
  373. package/{server/src → src/server}/mesh/connector.ts +1 -1
  374. package/{server/src → src/server}/project/context-breakdown.ts +4 -5
  375. package/{server/src → src/server}/project/pty-worker.cjs +1 -1
  376. package/{server/src → src/server}/project/sdk-bridge.ts +434 -289
  377. package/{server/src → src/server}/project/session.ts +84 -38
  378. package/{server/src → src/server}/project/terminal.ts +7 -24
  379. package/{server/src → src/server}/project/warmup.ts +63 -10
  380. package/src/server/push.ts +121 -0
  381. package/src/server/runtime.ts +1 -0
  382. package/src/server/tui.ts +103 -0
  383. package/{server/src → src/server}/update-checker.ts +10 -10
  384. package/{server/src → src/server}/ws/broadcast.ts +8 -8
  385. package/{server/src → src/server}/ws/router.ts +21 -25
  386. package/{shared/src → src/shared}/analytics.ts +1 -0
  387. package/{shared/src → src/shared}/constants.ts +1 -0
  388. package/{shared/src → src/shared}/messages.ts +104 -6
  389. package/{shared/src → src/shared}/models.ts +1 -1
  390. package/tsconfig.json +7 -8
  391. package/{client/vite.config.ts → vite.config.ts} +14 -18
  392. package/.editorconfig +0 -12
  393. package/.github/workflows/ci.yml +0 -81
  394. package/.github/workflows/release.yml +0 -87
  395. package/.impeccable.md +0 -66
  396. package/.releaserc.json +0 -33
  397. package/.serena/memories/code_style_and_conventions.md +0 -35
  398. package/.serena/memories/project_overview.md +0 -51
  399. package/.serena/memories/suggested_commands.md +0 -32
  400. package/.serena/memories/task_completion_checklist.md +0 -15
  401. package/.serena/project.yml +0 -152
  402. package/CLAUDE.md +0 -71
  403. package/CONTRIBUTING.md +0 -93
  404. package/bun.lock +0 -2246
  405. package/bunfig.toml +0 -2
  406. package/client/package.json +0 -43
  407. package/client/src/components/settings/Appearance.tsx +0 -152
  408. package/client/tsconfig.json +0 -18
  409. package/install.sh +0 -71
  410. package/playwright.config.ts +0 -19
  411. package/scripts/build-binary.ts +0 -157
  412. package/scripts/postinstall.js +0 -31
  413. package/server/package.json +0 -24
  414. package/server/src/_generated/embedded-assets.ts +0 -2
  415. package/server/src/assets.ts +0 -69
  416. package/server/src/daemon.ts +0 -459
  417. package/server/src/runtime.ts +0 -4
  418. package/server/tsconfig.json +0 -20
  419. package/shared/package.json +0 -11
  420. package/shared/tsconfig.json +0 -15
  421. package/tests/accessibility.spec.ts +0 -77
  422. package/tests/keyboard-shortcuts.spec.ts +0 -70
  423. package/tests/message-actions.spec.ts +0 -112
  424. package/tests/onboarding.spec.ts +0 -72
  425. package/tests/session-flow.spec.ts +0 -117
  426. package/tests/session-preview.spec.ts +0 -83
  427. package/themes/amoled.json +0 -20
  428. package/themes/ayu-light.json +0 -9
  429. package/themes/catppuccin-latte.json +0 -9
  430. package/themes/catppuccin-mocha.json +0 -9
  431. package/themes/clay-light.json +0 -10
  432. package/themes/clay.json +0 -10
  433. package/themes/dracula.json +0 -9
  434. package/themes/everforest-light.json +0 -9
  435. package/themes/everforest.json +0 -9
  436. package/themes/github-light.json +0 -9
  437. package/themes/gruvbox-dark.json +0 -9
  438. package/themes/gruvbox-light.json +0 -9
  439. package/themes/monokai.json +0 -9
  440. package/themes/nord-light.json +0 -9
  441. package/themes/nord.json +0 -9
  442. package/themes/one-dark.json +0 -9
  443. package/themes/one-light.json +0 -9
  444. package/themes/rose-pine-dawn.json +0 -9
  445. package/themes/rose-pine.json +0 -9
  446. package/themes/solarized-dark.json +0 -9
  447. package/themes/solarized-light.json +0 -9
  448. package/themes/tokyo-night-light.json +0 -9
  449. package/themes/tokyo-night.json +0 -9
  450. package/tp.js +0 -19
  451. /package/{client/public → dist/client}/icons/icon-192.svg +0 -0
  452. /package/{client/public → dist/client}/icons/icon-512.svg +0 -0
  453. /package/{client/src → src/client}/App.tsx +0 -0
  454. /package/{client/src → src/client}/commands.ts +0 -0
  455. /package/{client/src → src/client}/components/analytics/PeriodSelector.tsx +0 -0
  456. /package/{client/src → src/client}/components/analytics/chartTokens.ts +0 -0
  457. /package/{client/src → src/client}/components/analytics/charts/DailySummaryCards.tsx +0 -0
  458. /package/{client/src → src/client}/components/analytics/charts/NodeFleetOverview.tsx +0 -0
  459. /package/{client/src → src/client}/components/analytics/charts/PermissionBreakdown.tsx +0 -0
  460. /package/{client/src → src/client}/components/analytics/charts/SessionComplexityList.tsx +0 -0
  461. /package/{client/src → src/client}/components/analytics/charts/TokenSankeyChart.tsx +0 -0
  462. /package/{client/src → src/client}/components/analytics/charts/ToolTreemap.tsx +0 -0
  463. /package/{client/src → src/client}/components/auth/PassphrasePrompt.tsx +0 -0
  464. /package/{client/src → src/client}/components/chat/AttachmentChips.tsx +0 -0
  465. /package/{client/src → src/client}/components/chat/ChatInput.tsx +0 -0
  466. /package/{client/src → src/client}/components/chat/CommandPalette.tsx +0 -0
  467. /package/{client/src → src/client}/components/chat/ElicitationCard.tsx +0 -0
  468. /package/{client/src → src/client}/components/chat/PermissionModeSelector.tsx +0 -0
  469. /package/{client/src → src/client}/components/chat/PromptQuestion.tsx +0 -0
  470. /package/{client/src → src/client}/components/chat/StatusBar.tsx +0 -0
  471. /package/{client/src → src/client}/components/chat/TodoCard.tsx +0 -0
  472. /package/{client/src → src/client}/components/chat/ToolGroup.tsx +0 -0
  473. /package/{client/src → src/client}/components/chat/ToolResultRenderer.tsx +0 -0
  474. /package/{client/src → src/client}/components/chat/VoiceRecorder.tsx +0 -0
  475. /package/{client/src → src/client}/components/chat/toolSummary.ts +0 -0
  476. /package/{client/src → src/client}/components/dashboard/DashboardView.tsx +0 -0
  477. /package/{client/src → src/client}/components/dashboard/ProjectDashboardView.tsx +0 -0
  478. /package/{client/src → src/client}/components/mesh/NodeBadge.tsx +0 -0
  479. /package/{client/src → src/client}/components/mesh/PairingDialog.tsx +0 -0
  480. /package/{client/src → src/client}/components/project-settings/ProjectClaude.tsx +0 -0
  481. /package/{client/src → src/client}/components/project-settings/ProjectEnvironment.tsx +0 -0
  482. /package/{client/src → src/client}/components/project-settings/ProjectGeneral.tsx +0 -0
  483. /package/{client/src → src/client}/components/project-settings/ProjectMcp.tsx +0 -0
  484. /package/{client/src → src/client}/components/project-settings/ProjectMemory.tsx +0 -0
  485. /package/{client/src → src/client}/components/project-settings/ProjectNotifications.tsx +0 -0
  486. /package/{client/src → src/client}/components/project-settings/ProjectPermissions.tsx +0 -0
  487. /package/{client/src → src/client}/components/project-settings/ProjectPlugins.tsx +0 -0
  488. /package/{client/src → src/client}/components/project-settings/ProjectRules.tsx +0 -0
  489. /package/{client/src → src/client}/components/project-settings/ProjectSettingsView.tsx +0 -0
  490. /package/{client/src → src/client}/components/project-settings/ProjectSkills.tsx +0 -0
  491. /package/{client/src → src/client}/components/settings/BudgetSettings.tsx +0 -0
  492. /package/{client/src → src/client}/components/settings/ClaudeSettings.tsx +0 -0
  493. /package/{client/src → src/client}/components/settings/Editor.tsx +0 -0
  494. /package/{client/src → src/client}/components/settings/Environment.tsx +0 -0
  495. /package/{client/src → src/client}/components/settings/GlobalMcp.tsx +0 -0
  496. /package/{client/src → src/client}/components/settings/GlobalMemory.tsx +0 -0
  497. /package/{client/src → src/client}/components/settings/GlobalPlugins.tsx +0 -0
  498. /package/{client/src → src/client}/components/settings/GlobalRules.tsx +0 -0
  499. /package/{client/src → src/client}/components/settings/GlobalSkills.tsx +0 -0
  500. /package/{client/src → src/client}/components/settings/MeshStatus.tsx +0 -0
  501. /package/{client/src → src/client}/components/settings/SettingsView.tsx +0 -0
  502. /package/{client/src → src/client}/components/settings/SkillMarketplace.tsx +0 -0
  503. /package/{client/src → src/client}/components/settings/mcp-shared.tsx +0 -0
  504. /package/{client/src → src/client}/components/settings/skill-shared.tsx +0 -0
  505. /package/{client/src → src/client}/components/setup/SetupWizard.tsx +0 -0
  506. /package/{client/src → src/client}/components/sidebar/AddProjectModal.tsx +0 -0
  507. /package/{client/src → src/client}/components/sidebar/NodeSettingsModal.tsx +0 -0
  508. /package/{client/src → src/client}/components/sidebar/ProjectDropdown.tsx +0 -0
  509. /package/{client/src → src/client}/components/sidebar/SearchFilter.tsx +0 -0
  510. /package/{client/src → src/client}/components/sidebar/SettingsSidebar.tsx +0 -0
  511. /package/{client/src → src/client}/components/ui/CommandPalette.tsx +0 -0
  512. /package/{client/src → src/client}/components/ui/ErrorBoundary.tsx +0 -0
  513. /package/{client/src → src/client}/components/ui/IconPicker.tsx +0 -0
  514. /package/{client/src → src/client}/components/ui/KeyboardShortcuts.tsx +0 -0
  515. /package/{client/src → src/client}/components/ui/LatticeLogomark.tsx +0 -0
  516. /package/{client/src → src/client}/components/ui/NodeDisconnectedOverlay.tsx +0 -0
  517. /package/{client/src → src/client}/components/ui/Toast.tsx +0 -0
  518. /package/{client/src → src/client}/components/ui/UpdateBanner.tsx +0 -0
  519. /package/{client/src → src/client}/components/ui/UpdatePrompt.tsx +0 -0
  520. /package/{client/src → src/client}/components/workspace/BookmarksView.tsx +0 -0
  521. /package/{client/src → src/client}/components/workspace/FileBrowser.tsx +0 -0
  522. /package/{client/src → src/client}/components/workspace/FileTree.tsx +0 -0
  523. /package/{client/src → src/client}/components/workspace/FileViewer.tsx +0 -0
  524. /package/{client/src → src/client}/components/workspace/NoteCard.tsx +0 -0
  525. /package/{client/src → src/client}/components/workspace/NotesView.tsx +0 -0
  526. /package/{client/src → src/client}/components/workspace/ScheduledTasksView.tsx +0 -0
  527. /package/{client/src → src/client}/components/workspace/SplitPane.tsx +0 -0
  528. /package/{client/src → src/client}/components/workspace/TaskCard.tsx +0 -0
  529. /package/{client/src → src/client}/components/workspace/TaskEditModal.tsx +0 -0
  530. /package/{client/src → src/client}/components/workspace/TerminalInstance.tsx +0 -0
  531. /package/{client/src → src/client}/components/workspace/TerminalView.tsx +0 -0
  532. /package/{client/src → src/client}/components/workspace/WorkspaceView.tsx +0 -0
  533. /package/{client/src → src/client}/hooks/useAttachments.ts +0 -0
  534. /package/{client/src → src/client}/hooks/useBookmarks.ts +0 -0
  535. /package/{client/src → src/client}/hooks/useEditorConfig.ts +0 -0
  536. /package/{client/src → src/client}/hooks/useFocusTrap.ts +0 -0
  537. /package/{client/src → src/client}/hooks/useIdleDetection.ts +0 -0
  538. /package/{client/src → src/client}/hooks/useInstallPrompt.ts +0 -0
  539. /package/{client/src → src/client}/hooks/useMesh.ts +0 -0
  540. /package/{client/src → src/client}/hooks/useNotifications.ts +0 -0
  541. /package/{client/src → src/client}/hooks/useOnline.ts +0 -0
  542. /package/{client/src → src/client}/hooks/useProjectSettings.ts +0 -0
  543. /package/{client/src → src/client}/hooks/useProjects.ts +0 -0
  544. /package/{client/src → src/client}/hooks/useSaveState.ts +0 -0
  545. /package/{client/src → src/client}/hooks/useSidebar.ts +0 -0
  546. /package/{client/src → src/client}/hooks/useSkills.ts +0 -0
  547. /package/{client/src → src/client}/hooks/useSpinnerVerb.ts +0 -0
  548. /package/{client/src → src/client}/hooks/useSwipeDrawer.ts +0 -0
  549. /package/{client/src → src/client}/hooks/useTheme.ts +0 -0
  550. /package/{client/src → src/client}/hooks/useTimeTick.ts +0 -0
  551. /package/{client/src → src/client}/hooks/useVoiceRecorder.ts +0 -0
  552. /package/{client/src → src/client}/hooks/useWorkspace.ts +0 -0
  553. /package/{client/src → src/client}/lib/workspace-url.ts +0 -0
  554. /package/{client/src → src/client}/main.tsx +0 -0
  555. /package/{client/src → src/client}/providers/WebSocketProvider.tsx +0 -0
  556. /package/{client/src → src/client}/router.tsx +0 -0
  557. /package/{client/src → src/client}/stores/bookmarks.ts +0 -0
  558. /package/{client/src → src/client}/stores/mesh.ts +0 -0
  559. /package/{client/src → src/client}/stores/theme.ts +0 -0
  560. /package/{client/src → src/client}/stores/workspace.ts +0 -0
  561. /package/{client/src → src/client}/styles/global.css +0 -0
  562. /package/{client/src → src/client}/styles/theme-vars.css +0 -0
  563. /package/{client/src → src/client}/utils/editorUrl.ts +0 -0
  564. /package/{client/src → src/client}/utils/findDuplicateKeys.ts +0 -0
  565. /package/{client/src → src/client}/utils/formatSessionTitle.ts +0 -0
  566. /package/{client/src → src/client}/vite-env.d.ts +0 -0
  567. /package/{server/src → src/server}/auth/passphrase.ts +0 -0
  568. /package/{server/src → src/server}/config.ts +0 -0
  569. /package/{server/src → src/server}/features/ralph-loop.ts +0 -0
  570. /package/{server/src → src/server}/features/scheduler.ts +0 -0
  571. /package/{server/src → src/server}/features/sticky-notes.ts +0 -0
  572. /package/{server/src → src/server}/handlers/attachment.ts +0 -0
  573. /package/{server/src → src/server}/handlers/bookmarks.ts +0 -0
  574. /package/{server/src → src/server}/handlers/editor.ts +0 -0
  575. /package/{server/src → src/server}/handlers/fs.ts +0 -0
  576. /package/{server/src → src/server}/handlers/loop.ts +0 -0
  577. /package/{server/src → src/server}/handlers/memory.ts +0 -0
  578. /package/{server/src → src/server}/handlers/notes.ts +0 -0
  579. /package/{server/src → src/server}/handlers/project-settings.ts +0 -0
  580. /package/{server/src → src/server}/handlers/scheduler.ts +0 -0
  581. /package/{server/src → src/server}/handlers/terminal.ts +0 -0
  582. /package/{server/src → src/server}/identity.ts +0 -0
  583. /package/{server/src → src/server}/logger.ts +0 -0
  584. /package/{server/src → src/server}/mesh/crypto.ts +0 -0
  585. /package/{server/src → src/server}/mesh/discovery.ts +0 -0
  586. /package/{server/src → src/server}/mesh/pairing.ts +0 -0
  587. /package/{server/src → src/server}/mesh/peers.ts +0 -0
  588. /package/{server/src → src/server}/mesh/proxy.ts +0 -0
  589. /package/{server/src → src/server}/mesh/session-sync.ts +0 -0
  590. /package/{server/src → src/server}/project/bookmarks.ts +0 -0
  591. /package/{server/src → src/server}/project/file-browser.ts +0 -0
  592. /package/{server/src → src/server}/project/project-files.ts +0 -0
  593. /package/{server/src → src/server}/project/registry.ts +0 -0
  594. /package/{server/src → src/server}/tls.ts +0 -0
  595. /package/{server/src → src/server}/ws/server.ts +0 -0
  596. /package/{shared/src → src/shared}/index.ts +0 -0
  597. /package/{shared/src → src/shared}/project-settings.ts +0 -0
@@ -0,0 +1,92 @@
1
+ import { useEffect, useState } from "react";
2
+
3
+ function urlBase64ToUint8Array(base64String: string): Uint8Array {
4
+ var padding = "=".repeat((4 - (base64String.length % 4)) % 4);
5
+ var base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/");
6
+ var rawData = window.atob(base64);
7
+ var outputArray = new Uint8Array(rawData.length);
8
+ for (var i = 0; i < rawData.length; ++i) {
9
+ outputArray[i] = rawData.charCodeAt(i);
10
+ }
11
+ return outputArray;
12
+ }
13
+
14
+ export type PushStatus = "unsupported" | "denied" | "prompt" | "subscribed" | "unsubscribed";
15
+
16
+ export function usePushNotifications() {
17
+ var [status, setStatus] = useState<PushStatus>("unsupported");
18
+
19
+ useEffect(function () {
20
+ if (!("serviceWorker" in navigator) || !("PushManager" in window)) {
21
+ setStatus("unsupported");
22
+ return;
23
+ }
24
+
25
+ if (Notification.permission === "denied") {
26
+ setStatus("denied");
27
+ return;
28
+ }
29
+
30
+ navigator.serviceWorker.getRegistration("/sw-push.js").then(function (reg) {
31
+ if (!reg) {
32
+ setStatus("unsubscribed");
33
+ return;
34
+ }
35
+ reg.pushManager.getSubscription().then(function (sub) {
36
+ setStatus(sub ? "subscribed" : "unsubscribed");
37
+ });
38
+ });
39
+ }, []);
40
+
41
+ async function subscribe(): Promise<boolean> {
42
+ if (!("serviceWorker" in navigator) || !("PushManager" in window)) return false;
43
+
44
+ try {
45
+ var permission = await Notification.requestPermission();
46
+ if (permission !== "granted") {
47
+ setStatus("denied");
48
+ return false;
49
+ }
50
+
51
+ var reg = await navigator.serviceWorker.register("/sw-push.js", { scope: "/" });
52
+ await navigator.serviceWorker.ready;
53
+
54
+ var response = await fetch("/api/vapid-public-key");
55
+ var data = await response.json() as { publicKey: string };
56
+
57
+ var subscription = await reg.pushManager.subscribe({
58
+ userVisibleOnly: true,
59
+ applicationServerKey: urlBase64ToUint8Array(data.publicKey) as BufferSource,
60
+ });
61
+
62
+ await fetch("/api/push-subscribe", {
63
+ method: "POST",
64
+ headers: { "Content-Type": "application/json" },
65
+ body: JSON.stringify(subscription.toJSON()),
66
+ });
67
+
68
+ setStatus("subscribed");
69
+ return true;
70
+ } catch (err) {
71
+ console.error("Push subscription failed:", err);
72
+ return false;
73
+ }
74
+ }
75
+
76
+ async function unsubscribe(): Promise<void> {
77
+ try {
78
+ var reg = await navigator.serviceWorker.getRegistration("/sw-push.js");
79
+ if (reg) {
80
+ var sub = await reg.pushManager.getSubscription();
81
+ if (sub) {
82
+ await sub.unsubscribe();
83
+ }
84
+ }
85
+ setStatus("unsubscribed");
86
+ } catch (err) {
87
+ console.error("Push unsubscribe failed:", err);
88
+ }
89
+ }
90
+
91
+ return { status, subscribe, unsubscribe };
92
+ }
@@ -81,6 +81,7 @@ export interface UseSessionReturn extends SessionState {
81
81
  dismissBudgetExceeded: () => void;
82
82
  loadMoreHistory: () => void;
83
83
  historyHasMore: boolean;
84
+ historyLoadingFileSize: number | null;
84
85
  }
85
86
 
86
87
  export function useSession(): UseSessionReturn {
@@ -190,13 +191,24 @@ export function useSession(): UseSessionReturn {
190
191
  if (isStaleStream()) return;
191
192
  var m = msg as ChatToolStartMessage;
192
193
  setCurrentAssistantUuid(null);
193
- addSessionMessage({
194
- type: "tool_start",
195
- toolId: m.toolId,
196
- name: m.name,
197
- args: m.args,
198
- timestamp: Date.now(),
199
- } as HistoryMessage);
194
+ var existing = getSessionStore().state.messages.findLastIndex(function (msg) {
195
+ return msg.toolId === m.toolId && msg.type === "tool_start";
196
+ });
197
+ if (existing >= 0) {
198
+ getSessionStore().setState(function (s) {
199
+ var updated = s.messages.slice();
200
+ updated[existing] = { ...updated[existing], args: m.args };
201
+ return { ...s, messages: updated };
202
+ });
203
+ } else {
204
+ addSessionMessage({
205
+ type: "tool_start",
206
+ toolId: m.toolId,
207
+ name: m.name,
208
+ args: m.args,
209
+ timestamp: Date.now(),
210
+ } as HistoryMessage);
211
+ }
200
212
  }
201
213
 
202
214
  function handleToolResult(msg: ServerMessage) {
@@ -324,6 +336,12 @@ export function useSession(): UseSessionReturn {
324
336
  });
325
337
  }
326
338
 
339
+ function handleLoadingProgress(msg: ServerMessage) {
340
+ var m = msg as { type: string; sessionId: string; fileSize: number | null };
341
+ if (m.sessionId !== getSessionStore().state.activeSessionId) return;
342
+ getSessionStore().setState(function (s) { return { ...s, historyLoadingFileSize: m.fileSize }; });
343
+ }
344
+
327
345
  function handleHistory(msg: ServerMessage) {
328
346
  var m = msg as SessionHistoryMessage;
329
347
  if (m.sessionId && m.messages && m.messages.length === 0 && m.title) {
@@ -335,6 +353,10 @@ export function useSession(): UseSessionReturn {
335
353
  }
336
354
  setCurrentAssistantUuid(null);
337
355
  if (m.sessionId) {
356
+ if (m.sessionId !== getSessionStore().state.activeSessionId) {
357
+ if (m.title) updateSessionTabTitle(m.sessionId, m.title);
358
+ return;
359
+ }
338
360
  var projectSlug = m.projectSlug || getSessionStore().state.activeProjectSlug;
339
361
  setSidebarSessionId(m.sessionId);
340
362
  streamSessionId = m.sessionId;
@@ -432,11 +454,12 @@ export function useSession(): UseSessionReturn {
432
454
 
433
455
  function handleRateLimit(msg: ServerMessage) {
434
456
  var m = msg as { type: string; status: "allowed" | "allowed_warning" | "rejected"; utilization?: number; resetsAt?: number; rateLimitType?: string; overageStatus?: string; overageResetsAt?: number; isUsingOverage?: boolean };
457
+ if (!m.rateLimitType) return;
435
458
  updateRateLimit({
436
459
  status: m.status,
437
460
  utilization: m.utilization,
438
461
  resetsAt: m.resetsAt,
439
- rateLimitType: m.rateLimitType || "unknown",
462
+ rateLimitType: m.rateLimitType,
440
463
  overageStatus: m.overageStatus,
441
464
  overageResetsAt: m.overageResetsAt,
442
465
  isUsingOverage: m.isUsingOverage,
@@ -450,6 +473,7 @@ export function useSession(): UseSessionReturn {
450
473
  setCurrentStatus(null);
451
474
  }
452
475
 
476
+ subscribe("session:loading_progress", handleLoadingProgress);
453
477
  subscribe("chat:user_message", handleUserMessage);
454
478
  subscribe("chat:delta", handleDelta);
455
479
  subscribe("chat:tool_start", handleToolStart);
@@ -475,6 +499,7 @@ export function useSession(): UseSessionReturn {
475
499
 
476
500
  return function () {
477
501
  subscriptionsActive--;
502
+ unsubscribe("session:loading_progress", handleLoadingProgress);
478
503
  unsubscribe("chat:user_message", handleUserMessage);
479
504
  unsubscribe("chat:delta", handleDelta);
480
505
  unsubscribe("chat:tool_start", handleToolStart);
@@ -517,6 +542,7 @@ export function useSession(): UseSessionReturn {
517
542
  lastResponseDuration: state.lastResponseDuration,
518
543
  lastReadIndex: state.lastReadIndex,
519
544
  historyLoading: state.historyLoading,
545
+ historyLoadingFileSize: state.historyLoadingFileSize,
520
546
  historyHasMore: state.historyHasMore,
521
547
  historyTotalMessages: state.historyTotalMessages,
522
548
  loadMoreHistory: function () {
@@ -550,5 +576,6 @@ export function useSession(): UseSessionReturn {
550
576
  lastSentText = null;
551
577
  }
552
578
  },
579
+ rateLimits: state.rateLimits,
553
580
  };
554
581
  }
@@ -22,9 +22,6 @@ export function useWebSocket(): WebSocketContextValue {
22
22
  }
23
23
 
24
24
  export function getWebSocketUrl(): string {
25
- if (import.meta.env.DEV) {
26
- return "ws://" + window.location.hostname + ":17654/ws";
27
- }
28
25
  var protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
29
26
  return protocol + "//" + window.location.host + "/ws";
30
27
  }
@@ -0,0 +1,196 @@
1
+ export function isValidHex(hex: string): boolean {
2
+ return /^#?[0-9a-fA-F]{6}$/.test(hex);
3
+ }
4
+
5
+ export function normalizeHex(hex: string): string {
6
+ return hex.replace(/^#/, "").toLowerCase();
7
+ }
8
+
9
+ export function hexToRgb(hex: string): [number, number, number] {
10
+ var h = normalizeHex(hex);
11
+ return [
12
+ parseInt(h.slice(0, 2), 16),
13
+ parseInt(h.slice(2, 4), 16),
14
+ parseInt(h.slice(4, 6), 16),
15
+ ];
16
+ }
17
+
18
+ export function rgbToHex(r: number, g: number, b: number): string {
19
+ return [r, g, b]
20
+ .map(function (c) {
21
+ var clamped = Math.max(0, Math.min(255, Math.round(c)));
22
+ return clamped.toString(16).padStart(2, "0");
23
+ })
24
+ .join("");
25
+ }
26
+
27
+ function srgbToLinear(c: number): number {
28
+ var s = c / 255;
29
+ return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
30
+ }
31
+
32
+ function linearToSrgb(c: number): number {
33
+ var clamped = Math.max(0, Math.min(1, c));
34
+ return clamped <= 0.0031308
35
+ ? clamped * 12.92 * 255
36
+ : (1.055 * clamped ** (1 / 2.4) - 0.055) * 255;
37
+ }
38
+
39
+ export function rgbToOklch(
40
+ r: number,
41
+ g: number,
42
+ b: number,
43
+ ): { L: number; C: number; h: number } {
44
+ var lr = srgbToLinear(r);
45
+ var lg = srgbToLinear(g);
46
+ var lb = srgbToLinear(b);
47
+
48
+ var l_ = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb;
49
+ var m_ = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb;
50
+ var s_ = 0.0883024619 * lr + 0.2220049168 * lg + 0.6696926213 * lb;
51
+
52
+ var l_cbrt = Math.cbrt(l_);
53
+ var m_cbrt = Math.cbrt(m_);
54
+ var s_cbrt = Math.cbrt(s_);
55
+
56
+ var L = 0.2104542553 * l_cbrt + 0.7936177850 * m_cbrt - 0.0040720468 * s_cbrt;
57
+ var a = 1.9779984951 * l_cbrt - 2.4285922050 * m_cbrt + 0.4505937099 * s_cbrt;
58
+ var b2 = 0.0259040371 * l_cbrt + 0.7827717662 * m_cbrt - 0.8086757660 * s_cbrt;
59
+
60
+ var C = Math.sqrt(a * a + b2 * b2);
61
+ var h = (Math.atan2(b2, a) * 180) / Math.PI;
62
+ if (h < 0) h += 360;
63
+
64
+ return { L, C, h };
65
+ }
66
+
67
+ export function oklchToRgb(
68
+ L: number,
69
+ C: number,
70
+ h: number,
71
+ ): [number, number, number] {
72
+ var hRad = (h * Math.PI) / 180;
73
+ var a = C * Math.cos(hRad);
74
+ var b = C * Math.sin(hRad);
75
+
76
+ var l_cbrt = L + 0.3963377774 * a + 0.2158037573 * b;
77
+ var m_cbrt = L - 0.1055613458 * a - 0.0638541728 * b;
78
+ var s_cbrt = L - 0.0894841775 * a - 1.2914855480 * b;
79
+
80
+ var l_ = l_cbrt * l_cbrt * l_cbrt;
81
+ var m_ = m_cbrt * m_cbrt * m_cbrt;
82
+ var s_ = s_cbrt * s_cbrt * s_cbrt;
83
+
84
+ var r = 4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_;
85
+ var g = -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_;
86
+ var bl = -0.0041960863 * l_ - 0.7034186147 * m_ + 1.7076147010 * s_;
87
+
88
+ return [
89
+ Math.round(linearToSrgb(r)),
90
+ Math.round(linearToSrgb(g)),
91
+ Math.round(linearToSrgb(bl)),
92
+ ];
93
+ }
94
+
95
+ export function oklchMix(hex1: string, hex2: string, t: number): string {
96
+ var [r1, g1, b1] = hexToRgb(hex1);
97
+ var [r2, g2, b2] = hexToRgb(hex2);
98
+
99
+ var c1 = rgbToOklch(r1, g1, b1);
100
+ var c2 = rgbToOklch(r2, g2, b2);
101
+
102
+ var L = c1.L + (c2.L - c1.L) * t;
103
+ var C = c1.C + (c2.C - c1.C) * t;
104
+
105
+ var h1 = c1.C < 0.001 ? c2.h : c1.h;
106
+ var h2 = c2.C < 0.001 ? c1.h : c2.h;
107
+
108
+ var diff = h2 - h1;
109
+ if (diff > 180) diff -= 360;
110
+ if (diff < -180) diff += 360;
111
+ var h = h1 + diff * t;
112
+ if (h < 0) h += 360;
113
+ if (h >= 360) h -= 360;
114
+
115
+ var [r, g, b] = oklchToRgb(L, C, h);
116
+ return rgbToHex(r, g, b);
117
+ }
118
+
119
+ export function oklchLighten(hex: string, amount: number): string {
120
+ var [r, g, b] = hexToRgb(hex);
121
+ var oklch = rgbToOklch(r, g, b);
122
+
123
+ var L = Math.max(0, Math.min(1, oklch.L + amount));
124
+
125
+ var [nr, ng, nb] = oklchToRgb(L, oklch.C, oklch.h);
126
+ return rgbToHex(nr, ng, nb);
127
+ }
128
+
129
+ export function oklchRotateHue(hex: string, degrees: number): string {
130
+ var [r, g, b] = hexToRgb(hex);
131
+ var oklch = rgbToOklch(r, g, b);
132
+
133
+ var h = (oklch.h + degrees) % 360;
134
+ if (h < 0) h += 360;
135
+
136
+ var [nr, ng, nb] = oklchToRgb(oklch.L, oklch.C, h);
137
+ return rgbToHex(nr, ng, nb);
138
+ }
139
+
140
+ function clampSyntaxLightness(
141
+ hex: string,
142
+ variant: "dark" | "light",
143
+ ): string {
144
+ var [r, g, b] = hexToRgb(hex);
145
+ var oklch = rgbToOklch(r, g, b);
146
+
147
+ var L = oklch.L;
148
+ if (variant === "dark") {
149
+ if (L < 0.65) L = 0.65;
150
+ if (L > 0.85) L = 0.85;
151
+ } else {
152
+ if (L < 0.35) L = 0.35;
153
+ if (L > 0.55) L = 0.55;
154
+ }
155
+
156
+ var [nr, ng, nb] = oklchToRgb(L, oklch.C, oklch.h);
157
+ return rgbToHex(nr, ng, nb);
158
+ }
159
+
160
+ export function deriveFullPalette(
161
+ bg: string,
162
+ surface: string,
163
+ fg: string,
164
+ accent: string,
165
+ variant: "dark" | "light",
166
+ ): Record<string, string> {
167
+ var nbg = normalizeHex(bg);
168
+ var nsurface = normalizeHex(surface);
169
+ var nfg = normalizeHex(fg);
170
+ var naccent = normalizeHex(accent);
171
+
172
+ return {
173
+ base00: nbg,
174
+ base01: oklchMix(nbg, nsurface, 0.5),
175
+ base02: nsurface,
176
+ base03: oklchMix(nsurface, nfg, 0.25),
177
+ base04: oklchMix(nsurface, nfg, 0.45),
178
+ base05: nfg,
179
+ base06:
180
+ variant === "dark"
181
+ ? oklchLighten(nfg, 0.05)
182
+ : oklchLighten(nfg, -0.05),
183
+ base07:
184
+ variant === "dark"
185
+ ? oklchLighten(nfg, 0.15)
186
+ : oklchLighten(nfg, -0.15),
187
+ base08: clampSyntaxLightness(oklchRotateHue(naccent, 0), variant),
188
+ base09: clampSyntaxLightness(oklchRotateHue(naccent, 30), variant),
189
+ base0A: clampSyntaxLightness(oklchRotateHue(naccent, 60), variant),
190
+ base0B: clampSyntaxLightness(oklchRotateHue(naccent, 120), variant),
191
+ base0C: clampSyntaxLightness(oklchRotateHue(naccent, 180), variant),
192
+ base0D: clampSyntaxLightness(naccent, variant),
193
+ base0E: clampSyntaxLightness(oklchRotateHue(naccent, 270), variant),
194
+ base0F: clampSyntaxLightness(oklchRotateHue(naccent, 330), variant),
195
+ };
196
+ }
@@ -1,8 +1,9 @@
1
1
  import { Store } from "@tanstack/react-store";
2
- import type { AnalyticsPayload, AnalyticsPeriod, AnalyticsScope } from "@lattice/shared";
2
+ import type { AnalyticsPayload, AnalyticsPeriod, AnalyticsScope, AnalyticsSectionName } from "@lattice/shared";
3
3
 
4
4
  export interface AnalyticsState {
5
- data: AnalyticsPayload | null;
5
+ data: Partial<AnalyticsPayload>;
6
+ loadedSections: AnalyticsSectionName[];
6
7
  loading: boolean;
7
8
  error: string | null;
8
9
  period: AnalyticsPeriod;
@@ -11,10 +12,11 @@ export interface AnalyticsState {
11
12
  }
12
13
 
13
14
  var analyticsStore = new Store<AnalyticsState>({
14
- data: null,
15
+ data: {},
16
+ loadedSections: [],
15
17
  loading: false,
16
18
  error: null,
17
- period: "7d",
19
+ period: "30d",
18
20
  scope: "global",
19
21
  projectSlug: null,
20
22
  });
@@ -23,9 +25,21 @@ export function getAnalyticsStore(): Store<AnalyticsState> {
23
25
  return analyticsStore;
24
26
  }
25
27
 
26
- export function setAnalyticsData(data: AnalyticsPayload): void {
28
+ export function mergeAnalyticsSection(section: AnalyticsSectionName, sectionData: Partial<AnalyticsPayload>): void {
27
29
  analyticsStore.setState(function (state) {
28
- return { ...state, data: data, loading: false, error: null };
30
+ return {
31
+ ...state,
32
+ data: { ...state.data, ...sectionData },
33
+ loadedSections: state.loadedSections.includes(section)
34
+ ? state.loadedSections
35
+ : [...state.loadedSections, section],
36
+ };
37
+ });
38
+ }
39
+
40
+ export function clearAnalyticsForRequest(): void {
41
+ analyticsStore.setState(function (state) {
42
+ return { ...state, data: {}, loadedSections: [], loading: true, error: null };
29
43
  });
30
44
  }
31
45
 
@@ -53,6 +53,7 @@ export interface SessionState {
53
53
  lastResponseDuration: number | null;
54
54
  lastReadIndex: number | null;
55
55
  historyLoading: boolean;
56
+ historyLoadingFileSize: number | null;
56
57
  historyHasMore: boolean;
57
58
  historyTotalMessages: number;
58
59
  wasInterrupted: boolean;
@@ -80,6 +81,7 @@ var sessionStore = new Store<SessionState>({
80
81
  lastResponseDuration: null,
81
82
  lastReadIndex: null,
82
83
  historyLoading: false,
84
+ historyLoadingFileSize: null,
83
85
  historyHasMore: false,
84
86
  historyTotalMessages: 0,
85
87
  wasInterrupted: false,
@@ -93,6 +95,21 @@ var sessionStore = new Store<SessionState>({
93
95
  rateLimits: {},
94
96
  });
95
97
 
98
+ export interface ModelOption {
99
+ value: string;
100
+ displayName: string;
101
+ }
102
+
103
+ var availableModels: ModelOption[] = [];
104
+
105
+ export function setAvailableModels(models: ModelOption[]): void {
106
+ availableModels = models;
107
+ }
108
+
109
+ export function getAvailableModels(): ModelOption[] {
110
+ return availableModels;
111
+ }
112
+
96
113
  var streamGeneration = 0;
97
114
 
98
115
  export function getStreamGeneration(): number {
@@ -222,7 +239,7 @@ export function setIsProcessing(processing: boolean): void {
222
239
  }
223
240
 
224
241
  var sessionMessageCache = new Map<string, { messages: HistoryMessage[]; title: string | null; hasMore: boolean; totalMessages: number }>();
225
- var MAX_CACHED_SESSIONS = 10;
242
+ var MAX_CACHED_SESSIONS = 50;
226
243
 
227
244
  export function cacheCurrentSession(): void {
228
245
  var state = sessionStore.state;
@@ -244,6 +261,10 @@ export function getCachedSession(sessionId: string): { messages: HistoryMessage[
244
261
  return sessionMessageCache.get(sessionId);
245
262
  }
246
263
 
264
+ export function invalidateSessionMessageCache(sessionId: string): void {
265
+ sessionMessageCache.delete(sessionId);
266
+ }
267
+
247
268
  export function setActiveSession(projectSlug: string | null, sessionId: string | null, title?: string | null): void {
248
269
  var prevSessionId = sessionStore.state.activeSessionId;
249
270
  if (prevSessionId) {
@@ -271,6 +292,7 @@ export function setActiveSession(projectSlug: string | null, sessionId: string |
271
292
  lastResponseDuration: null,
272
293
  lastReadIndex: null,
273
294
  historyLoading: !cached,
295
+ historyLoadingFileSize: null,
274
296
  historyHasMore: cached?.hasMore ?? false,
275
297
  historyTotalMessages: cached?.totalMessages ?? 0,
276
298
  wasInterrupted: false,
@@ -334,6 +356,7 @@ export function clearSession(): void {
334
356
  lastResponseDuration: null,
335
357
  lastReadIndex: null,
336
358
  historyLoading: false,
359
+ historyLoadingFileSize: null,
337
360
  historyHasMore: false,
338
361
  historyTotalMessages: 0,
339
362
  wasInterrupted: false,
@@ -344,6 +367,7 @@ export function clearSession(): void {
344
367
  pendingPrefill: null,
345
368
  budgetStatus: null,
346
369
  budgetExceeded: false,
370
+ rateLimits: {},
347
371
  };
348
372
  });
349
373
  }
@@ -398,7 +422,13 @@ export function loadCachedRateLimits(): void {
398
422
  var raw = localStorage.getItem("lattice:rateLimits");
399
423
  if (raw) {
400
424
  var parsed = JSON.parse(raw) as Record<string, RateLimitEntry>;
401
- sessionStore.setState(function (state) { return { ...state, rateLimits: parsed }; });
425
+ var cleaned: Record<string, RateLimitEntry> = {};
426
+ for (var key of Object.keys(parsed)) {
427
+ if (key !== "unknown" && parsed[key].rateLimitType) {
428
+ cleaned[key] = parsed[key];
429
+ }
430
+ }
431
+ sessionStore.setState(function (state) { return { ...state, rateLimits: cleaned }; });
402
432
  }
403
433
  } catch {}
404
434
  }
@@ -3,6 +3,7 @@ import type { ProjectSettingsSection } from "@lattice/shared";
3
3
  import { encodeWorkspaceUrl, decodeWorkspaceUrl, isLegacySessionUrl, shortSessionId } from "../lib/workspace-url";
4
4
  import type { DecodedWorkspace } from "../lib/workspace-url";
5
5
  import { getWorkspaceStore, restoreWorkspace, setUrlSyncCallback, switchProjectWorkspace, setCurrentProjectKey } from "./workspace";
6
+ import { setAnalyticsScope } from "./analytics";
6
7
 
7
8
  export type { ProjectSettingsSection };
8
9
 
@@ -364,8 +365,9 @@ export function goToDashboard(): void {
364
365
  }
365
366
 
366
367
  export function goToAnalytics(): void {
368
+ setAnalyticsScope("global");
367
369
  sidebarStore.setState(function (state) {
368
- return { ...state, activeView: { type: "analytics" }, sidebarMode: "project" };
370
+ return { ...state, activeView: { type: "analytics" } };
369
371
  });
370
372
  pushUrl(sidebarStore.state.activeProjectSlug);
371
373
  }
@@ -1,3 +1,4 @@
1
+ import alabaster from "../../../themes/alabaster.json";
1
2
  import amoled from "../../../themes/amoled.json";
2
3
  import ayuLight from "../../../themes/ayu-light.json";
3
4
  import catppuccinLatte from "../../../themes/catppuccin-latte.json";
@@ -10,17 +11,29 @@ import everforest from "../../../themes/everforest.json";
10
11
  import githubLight from "../../../themes/github-light.json";
11
12
  import gruvboxDark from "../../../themes/gruvbox-dark.json";
12
13
  import gruvboxLight from "../../../themes/gruvbox-light.json";
14
+ import horizonLight from "../../../themes/horizon-light.json";
15
+ import kanagawaLotus from "../../../themes/kanagawa-lotus.json";
16
+ import kanagawa from "../../../themes/kanagawa.json";
17
+ import modusOperandi from "../../../themes/modus-operandi.json";
13
18
  import monokai from "../../../themes/monokai.json";
19
+ import nightfox from "../../../themes/nightfox.json";
14
20
  import nordLight from "../../../themes/nord-light.json";
15
21
  import nord from "../../../themes/nord.json";
16
22
  import oneDark from "../../../themes/one-dark.json";
17
23
  import oneLight from "../../../themes/one-light.json";
24
+ import palenight from "../../../themes/palenight.json";
25
+ import paper from "../../../themes/paper.json";
26
+ import penumbraLight from "../../../themes/penumbra-light.json";
27
+ import poimandres from "../../../themes/poimandres.json";
28
+ import quietLight from "../../../themes/quiet-light.json";
18
29
  import rosePineDawn from "../../../themes/rose-pine-dawn.json";
19
30
  import rosePine from "../../../themes/rose-pine.json";
20
31
  import solarizedDark from "../../../themes/solarized-dark.json";
21
32
  import solarizedLight from "../../../themes/solarized-light.json";
33
+ import synthwave84 from "../../../themes/synthwave84.json";
22
34
  import tokyoNightLight from "../../../themes/tokyo-night-light.json";
23
35
  import tokyoNight from "../../../themes/tokyo-night.json";
36
+ import vesper from "../../../themes/vesper.json";
24
37
 
25
38
  export interface ThemeColors {
26
39
  base00: string;
@@ -53,6 +66,7 @@ export interface ThemeEntry {
53
66
  }
54
67
 
55
68
  export var themes: ThemeEntry[] = [
69
+ { id: "alabaster", theme: alabaster as Theme },
56
70
  { id: "amoled", theme: amoled as Theme },
57
71
  { id: "ayu-light", theme: ayuLight as Theme },
58
72
  { id: "catppuccin-latte", theme: catppuccinLatte as Theme },
@@ -65,15 +79,27 @@ export var themes: ThemeEntry[] = [
65
79
  { id: "github-light", theme: githubLight as Theme },
66
80
  { id: "gruvbox-dark", theme: gruvboxDark as Theme },
67
81
  { id: "gruvbox-light", theme: gruvboxLight as Theme },
82
+ { id: "horizon-light", theme: horizonLight as Theme },
83
+ { id: "kanagawa-lotus", theme: kanagawaLotus as Theme },
84
+ { id: "kanagawa", theme: kanagawa as Theme },
85
+ { id: "modus-operandi", theme: modusOperandi as Theme },
68
86
  { id: "monokai", theme: monokai as Theme },
87
+ { id: "nightfox", theme: nightfox as Theme },
69
88
  { id: "nord-light", theme: nordLight as Theme },
70
89
  { id: "nord", theme: nord as Theme },
71
90
  { id: "one-dark", theme: oneDark as Theme },
72
91
  { id: "one-light", theme: oneLight as Theme },
92
+ { id: "palenight", theme: palenight as Theme },
93
+ { id: "paper", theme: paper as Theme },
94
+ { id: "penumbra-light", theme: penumbraLight as Theme },
95
+ { id: "poimandres", theme: poimandres as Theme },
96
+ { id: "quiet-light", theme: quietLight as Theme },
73
97
  { id: "rose-pine-dawn", theme: rosePineDawn as Theme },
74
98
  { id: "rose-pine", theme: rosePine as Theme },
75
99
  { id: "solarized-dark", theme: solarizedDark as Theme },
76
100
  { id: "solarized-light", theme: solarizedLight as Theme },
101
+ { id: "synthwave84", theme: synthwave84 as Theme },
77
102
  { id: "tokyo-night-light", theme: tokyoNightLight as Theme },
78
103
  { id: "tokyo-night", theme: tokyoNight as Theme },
104
+ { id: "vesper", theme: vesper as Theme },
79
105
  ];