codemini-cli 0.4.8 → 0.5.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 (321) hide show
  1. package/README.md +103 -1
  2. package/codemini-web/dist/assets/Geist-Italic_wght_-vKc54d3Z.woff2 +0 -0
  3. package/codemini-web/dist/assets/Geist-Variable-CrgPqtmy.woff2 +0 -0
  4. package/codemini-web/dist/assets/GeistMono-Variable-BNLlm6Cd.woff2 +0 -0
  5. package/codemini-web/dist/assets/abap-BRbAAyvE.js +1 -0
  6. package/codemini-web/dist/assets/actionscript-3-Cj-0sM4g.js +1 -0
  7. package/codemini-web/dist/assets/ada-DhEA_nP5.js +1 -0
  8. package/codemini-web/dist/assets/andromeeda-CWmR-N6V.js +1 -0
  9. package/codemini-web/dist/assets/angular-html-Cde9qVP5.js +1 -0
  10. package/codemini-web/dist/assets/angular-ts-DefScAWP.js +1 -0
  11. package/codemini-web/dist/assets/apache-D5R2GKIs.js +1 -0
  12. package/codemini-web/dist/assets/apex-Qu8W4hal.js +1 -0
  13. package/codemini-web/dist/assets/apl-w753UHCW.js +1 -0
  14. package/codemini-web/dist/assets/applescript-CBey3ErE.js +1 -0
  15. package/codemini-web/dist/assets/ara-CRKnUAN1.js +1 -0
  16. package/codemini-web/dist/assets/asciidoc-1KYZEB6-.js +1 -0
  17. package/codemini-web/dist/assets/asm-DAaViY0U.js +1 -0
  18. package/codemini-web/dist/assets/astro-DBA9Da7s.js +1 -0
  19. package/codemini-web/dist/assets/aurora-x-LPpmXm4i.js +1 -0
  20. package/codemini-web/dist/assets/awk-ButuPTaW.js +1 -0
  21. package/codemini-web/dist/assets/ayu-dark-Dv4ngVMP.js +1 -0
  22. package/codemini-web/dist/assets/ayu-light-CxeOePuA.js +1 -0
  23. package/codemini-web/dist/assets/ayu-mirage-i2YLXKmY.js +1 -0
  24. package/codemini-web/dist/assets/ballerina-DodmBVwR.js +1 -0
  25. package/codemini-web/dist/assets/bat-jA-YqDhG.js +1 -0
  26. package/codemini-web/dist/assets/beancount-BCkjWTs-.js +1 -0
  27. package/codemini-web/dist/assets/berry-DjEHm1kC.js +1 -0
  28. package/codemini-web/dist/assets/bibtex-aOfmXHFj.js +1 -0
  29. package/codemini-web/dist/assets/bicep-BZLx0b6B.js +1 -0
  30. package/codemini-web/dist/assets/bird2-Bs7YDhA3.js +1 -0
  31. package/codemini-web/dist/assets/blade-B-u5p0Rp.js +1 -0
  32. package/codemini-web/dist/assets/bsl-CPV9KqsG.js +1 -0
  33. package/codemini-web/dist/assets/c-Bv0tI3pq.js +1 -0
  34. package/codemini-web/dist/assets/c3-BDcFIiRd.js +1 -0
  35. package/codemini-web/dist/assets/cadence-DaglWUgA.js +1 -0
  36. package/codemini-web/dist/assets/cairo-CyiRuu7R.js +1 -0
  37. package/codemini-web/dist/assets/catppuccin-frappe-CSAC76is.js +1 -0
  38. package/codemini-web/dist/assets/catppuccin-latte-Jt6sqtds.js +1 -0
  39. package/codemini-web/dist/assets/catppuccin-macchiato-HM96_05s.js +1 -0
  40. package/codemini-web/dist/assets/catppuccin-mocha-CXgIAGBL.js +1 -0
  41. package/codemini-web/dist/assets/clarity-DS5YLe8G.js +1 -0
  42. package/codemini-web/dist/assets/clojure-BVGPdaE2.js +1 -0
  43. package/codemini-web/dist/assets/cmake-CCC7tP43.js +1 -0
  44. package/codemini-web/dist/assets/cobol-CkQrskif.js +1 -0
  45. package/codemini-web/dist/assets/codeowners-DXhoR5Ap.js +1 -0
  46. package/codemini-web/dist/assets/codeql-BGjlu3KC.js +1 -0
  47. package/codemini-web/dist/assets/coffee-rY-gkJy7.js +1 -0
  48. package/codemini-web/dist/assets/common-lisp-BE6wRQeA.js +1 -0
  49. package/codemini-web/dist/assets/coq-CRT8yML1.js +1 -0
  50. package/codemini-web/dist/assets/cpp-Bw-qV0P6.js +1 -0
  51. package/codemini-web/dist/assets/crystal-Dh09vXLx.js +1 -0
  52. package/codemini-web/dist/assets/csharp-Ca2kU4Te.js +1 -0
  53. package/codemini-web/dist/assets/css-BTi88BmP.js +1 -0
  54. package/codemini-web/dist/assets/csv-DUpZC5ZD.js +1 -0
  55. package/codemini-web/dist/assets/cue-DlXQ7arx.js +1 -0
  56. package/codemini-web/dist/assets/cypher-D6dhuZbo.js +1 -0
  57. package/codemini-web/dist/assets/d-BUgyoY6k.js +1 -0
  58. package/codemini-web/dist/assets/dark-plus-DNkJKrcZ.js +1 -0
  59. package/codemini-web/dist/assets/dart-Czrjv-nr.js +1 -0
  60. package/codemini-web/dist/assets/dax-sEzq00Tq.js +1 -0
  61. package/codemini-web/dist/assets/desktop-3VGbzlmJ.js +1 -0
  62. package/codemini-web/dist/assets/diff-D4HSRbRn.js +1 -0
  63. package/codemini-web/dist/assets/docker-DkLGgDMo.js +1 -0
  64. package/codemini-web/dist/assets/dotenv-BWp1FaLo.js +1 -0
  65. package/codemini-web/dist/assets/dracula-Donvxzd6.js +1 -0
  66. package/codemini-web/dist/assets/dracula-soft-BqL-kkUg.js +1 -0
  67. package/codemini-web/dist/assets/dream-maker-DtLD6KM3.js +1 -0
  68. package/codemini-web/dist/assets/edge-CCRtknu5.js +1 -0
  69. package/codemini-web/dist/assets/elixir-5EYbFEoC.js +1 -0
  70. package/codemini-web/dist/assets/elm-Cezz_HNz.js +1 -0
  71. package/codemini-web/dist/assets/emacs-lisp-D4W-_rAk.js +1 -0
  72. package/codemini-web/dist/assets/erb-C6pPz4fX.js +1 -0
  73. package/codemini-web/dist/assets/erlang-BC8wryba.js +1 -0
  74. package/codemini-web/dist/assets/everforest-dark-pZNhY4MK.js +1 -0
  75. package/codemini-web/dist/assets/everforest-light-BijKClkf.js +1 -0
  76. package/codemini-web/dist/assets/fennel-Cd-BhZ0S.js +1 -0
  77. package/codemini-web/dist/assets/fish-CpsjJ6FK.js +1 -0
  78. package/codemini-web/dist/assets/fluent-D1peBFgx.js +1 -0
  79. package/codemini-web/dist/assets/fortran-fixed-form-CyrImzNA.js +1 -0
  80. package/codemini-web/dist/assets/fortran-free-form-CIAQqF5W.js +1 -0
  81. package/codemini-web/dist/assets/fsharp-OCW_PZ4J.js +1 -0
  82. package/codemini-web/dist/assets/gdresource-Cl3bohRI.js +1 -0
  83. package/codemini-web/dist/assets/gdscript-B_XVILZe.js +1 -0
  84. package/codemini-web/dist/assets/gdshader-BOrkFM_X.js +1 -0
  85. package/codemini-web/dist/assets/genie-BE7nKhIq.js +1 -0
  86. package/codemini-web/dist/assets/gherkin-DzGJhdqS.js +1 -0
  87. package/codemini-web/dist/assets/git-commit-DJZpdBwB.js +1 -0
  88. package/codemini-web/dist/assets/git-rebase-BJE30GTP.js +1 -0
  89. package/codemini-web/dist/assets/github-dark-BB9G20EV.js +1 -0
  90. package/codemini-web/dist/assets/github-dark-default-CBFNEU03.js +1 -0
  91. package/codemini-web/dist/assets/github-dark-dimmed-sQhEp72S.js +1 -0
  92. package/codemini-web/dist/assets/github-dark-high-contrast-C8GVvrcM.js +1 -0
  93. package/codemini-web/dist/assets/github-light-default-iyEXWnoa.js +1 -0
  94. package/codemini-web/dist/assets/github-light-high-contrast-DLnsZL7l.js +1 -0
  95. package/codemini-web/dist/assets/github-light-pT7U8Cnd.js +1 -0
  96. package/codemini-web/dist/assets/gleam-B9ISJjDl.js +1 -0
  97. package/codemini-web/dist/assets/glimmer-js-C4PTXfaW.js +1 -0
  98. package/codemini-web/dist/assets/glimmer-ts-Df1V6YK_.js +1 -0
  99. package/codemini-web/dist/assets/glsl-C8VPaAWs.js +1 -0
  100. package/codemini-web/dist/assets/gn-RQRMslrP.js +1 -0
  101. package/codemini-web/dist/assets/gnuplot-CfIGZWjt.js +1 -0
  102. package/codemini-web/dist/assets/go-BTh90-YS.js +1 -0
  103. package/codemini-web/dist/assets/graphql-WZCiqIl-.js +1 -0
  104. package/codemini-web/dist/assets/groovy-lvGC2zUz.js +1 -0
  105. package/codemini-web/dist/assets/gruvbox-dark-hard-CC38iqQ4.js +1 -0
  106. package/codemini-web/dist/assets/gruvbox-dark-medium-DaS0IqFN.js +1 -0
  107. package/codemini-web/dist/assets/gruvbox-dark-soft-C4niJipy.js +1 -0
  108. package/codemini-web/dist/assets/gruvbox-light-hard-DTfv4LmB.js +1 -0
  109. package/codemini-web/dist/assets/gruvbox-light-medium-m1VBpvsE.js +1 -0
  110. package/codemini-web/dist/assets/gruvbox-light-soft-CiE1IJdk.js +1 -0
  111. package/codemini-web/dist/assets/hack-zJL_tEH0.js +1 -0
  112. package/codemini-web/dist/assets/haml-qjVLLTZk.js +1 -0
  113. package/codemini-web/dist/assets/handlebars-B3RyMMk0.js +1 -0
  114. package/codemini-web/dist/assets/haskell-DdaZtXdd.js +1 -0
  115. package/codemini-web/dist/assets/haxe-Df79h8x1.js +1 -0
  116. package/codemini-web/dist/assets/hcl-BibREsa1.js +1 -0
  117. package/codemini-web/dist/assets/highlighted-body-OFNGDK62-CJHWad2r.js +1 -0
  118. package/codemini-web/dist/assets/hjson-D-iSecYq.js +1 -0
  119. package/codemini-web/dist/assets/hlsl-CckLjo_3.js +1 -0
  120. package/codemini-web/dist/assets/horizon-BG-OH9yH.js +1 -0
  121. package/codemini-web/dist/assets/horizon-bright-CpoqdULz.js +1 -0
  122. package/codemini-web/dist/assets/houston-C8DdNIgg.js +1 -0
  123. package/codemini-web/dist/assets/html-DP-V-rfg.js +1 -0
  124. package/codemini-web/dist/assets/html-derivative-DB9UhNDN.js +1 -0
  125. package/codemini-web/dist/assets/http-Deln4Vyb.js +1 -0
  126. package/codemini-web/dist/assets/hurl-CYSuhGkj.js +1 -0
  127. package/codemini-web/dist/assets/hxml-BmF7ngDz.js +1 -0
  128. package/codemini-web/dist/assets/hy-6acR1htR.js +1 -0
  129. package/codemini-web/dist/assets/imba-I9bJJvhi.js +1 -0
  130. package/codemini-web/dist/assets/index-BZ01DHrh.js +206 -0
  131. package/codemini-web/dist/assets/index-Dq1mwNaQ.css +2 -0
  132. package/codemini-web/dist/assets/ini-ovi-wMtM.js +1 -0
  133. package/codemini-web/dist/assets/java-X0I2c5Az.js +1 -0
  134. package/codemini-web/dist/assets/javascript-WC6XFf_S.js +1 -0
  135. package/codemini-web/dist/assets/jinja-BcRTlqOI.js +1 -0
  136. package/codemini-web/dist/assets/jison-DuNOGix6.js +1 -0
  137. package/codemini-web/dist/assets/json-CmuSmrUv.js +1 -0
  138. package/codemini-web/dist/assets/json5-JNG5kh3j.js +1 -0
  139. package/codemini-web/dist/assets/jsonc-Bo6bgSpa.js +1 -0
  140. package/codemini-web/dist/assets/jsonl-eDmbsRcr.js +1 -0
  141. package/codemini-web/dist/assets/jsonnet-BrmnmEy9.js +1 -0
  142. package/codemini-web/dist/assets/jssm-C-QfdDgD.js +1 -0
  143. package/codemini-web/dist/assets/jsx-Bl4e1-KE.js +1 -0
  144. package/codemini-web/dist/assets/julia-Cqc1ADyw.js +1 -0
  145. package/codemini-web/dist/assets/just-O9z-zIlY.js +1 -0
  146. package/codemini-web/dist/assets/kanagawa-dragon-Dc8jzBf8.js +1 -0
  147. package/codemini-web/dist/assets/kanagawa-lotus-DglQpAHb.js +1 -0
  148. package/codemini-web/dist/assets/kanagawa-wave-CTxJC692.js +1 -0
  149. package/codemini-web/dist/assets/kdl-CPujEk7a.js +1 -0
  150. package/codemini-web/dist/assets/kotlin-GNGS6f4G.js +1 -0
  151. package/codemini-web/dist/assets/kusto-ByPWIc1b.js +1 -0
  152. package/codemini-web/dist/assets/laserwave-BLDq6SCM.js +1 -0
  153. package/codemini-web/dist/assets/latex-BEPTKliI.js +1 -0
  154. package/codemini-web/dist/assets/lean-CQ4oht2M.js +1 -0
  155. package/codemini-web/dist/assets/less-DgluPI4Z.js +1 -0
  156. package/codemini-web/dist/assets/light-plus-Ce6vIMrA.js +1 -0
  157. package/codemini-web/dist/assets/liquid-BK2PyMjt.js +1 -0
  158. package/codemini-web/dist/assets/llvm-C_Bk8N51.js +1 -0
  159. package/codemini-web/dist/assets/log-Cqyx7kYB.js +1 -0
  160. package/codemini-web/dist/assets/logo-BMyACSNp.js +1 -0
  161. package/codemini-web/dist/assets/lua-BroxvhVt.js +1 -0
  162. package/codemini-web/dist/assets/luau-Dw3qkd4h.js +1 -0
  163. package/codemini-web/dist/assets/make-DRoG6w-e.js +1 -0
  164. package/codemini-web/dist/assets/markdown-DMIvNSB1.js +1 -0
  165. package/codemini-web/dist/assets/marko-CTEKS39A.js +1 -0
  166. package/codemini-web/dist/assets/material-theme-D1yzOeFY.js +1 -0
  167. package/codemini-web/dist/assets/material-theme-darker-DhWqiNtj.js +1 -0
  168. package/codemini-web/dist/assets/material-theme-lighter-PKoq0Soa.js +1 -0
  169. package/codemini-web/dist/assets/material-theme-ocean-TtH-ZZAj.js +1 -0
  170. package/codemini-web/dist/assets/material-theme-palenight-DPEAidnA.js +1 -0
  171. package/codemini-web/dist/assets/matlab-Buftnej6.js +1 -0
  172. package/codemini-web/dist/assets/mdc-BOaCYzzL.js +1 -0
  173. package/codemini-web/dist/assets/mdx-COL7Vpwq.js +1 -0
  174. package/codemini-web/dist/assets/mermaid-GHXKKRXX-BuB6-G4r.js +1 -0
  175. package/codemini-web/dist/assets/mermaid-tvyj1ZQ2.js +1 -0
  176. package/codemini-web/dist/assets/min-dark-D66g901Q.js +1 -0
  177. package/codemini-web/dist/assets/min-light-CMnDj2iG.js +1 -0
  178. package/codemini-web/dist/assets/mipsasm-C6fvALrw.js +1 -0
  179. package/codemini-web/dist/assets/mojo-B3qnM1a8.js +1 -0
  180. package/codemini-web/dist/assets/monokai-DCoxt20T.js +1 -0
  181. package/codemini-web/dist/assets/moonbit-Cjo3d0oi.js +1 -0
  182. package/codemini-web/dist/assets/move-BZSDQnwS.js +1 -0
  183. package/codemini-web/dist/assets/narrat-DY5cg5OF.js +1 -0
  184. package/codemini-web/dist/assets/nextflow-Cto1mpL3.js +1 -0
  185. package/codemini-web/dist/assets/nextflow-groovy-D1X5Yd05.js +1 -0
  186. package/codemini-web/dist/assets/nginx-Da_Uewgc.js +1 -0
  187. package/codemini-web/dist/assets/night-owl-DuMFo77c.js +1 -0
  188. package/codemini-web/dist/assets/night-owl-light-DihOYNub.js +1 -0
  189. package/codemini-web/dist/assets/nim-BZyx58NM.js +1 -0
  190. package/codemini-web/dist/assets/nix-C2G-gZoY.js +1 -0
  191. package/codemini-web/dist/assets/nord-CqZqLQaJ.js +1 -0
  192. package/codemini-web/dist/assets/nushell-S11HUHTG.js +1 -0
  193. package/codemini-web/dist/assets/objective-c-D9GKvYFi.js +1 -0
  194. package/codemini-web/dist/assets/objective-cpp-SqrtXFXh.js +1 -0
  195. package/codemini-web/dist/assets/ocaml-C_PTi_Pz.js +1 -0
  196. package/codemini-web/dist/assets/odin-BWpZDKBG.js +1 -0
  197. package/codemini-web/dist/assets/one-dark-pro-DpWTHpwg.js +1 -0
  198. package/codemini-web/dist/assets/one-light-Cu0d64Hp.js +1 -0
  199. package/codemini-web/dist/assets/openscad-BM4fjXzn.js +1 -0
  200. package/codemini-web/dist/assets/pascal-DYsRufgb.js +1 -0
  201. package/codemini-web/dist/assets/perl-BW8t13Xq.js +1 -0
  202. package/codemini-web/dist/assets/php-Cq5FOhfR.js +1 -0
  203. package/codemini-web/dist/assets/pkl-Djf8ANrI.js +1 -0
  204. package/codemini-web/dist/assets/plastic-CmjIC4JL.js +1 -0
  205. package/codemini-web/dist/assets/plsql-B1bmZxUF.js +1 -0
  206. package/codemini-web/dist/assets/po-BvnTR3_f.js +1 -0
  207. package/codemini-web/dist/assets/poimandres-BTndTogr.js +1 -0
  208. package/codemini-web/dist/assets/polar-CAj5SJyd.js +1 -0
  209. package/codemini-web/dist/assets/postcss-DrpvRGGG.js +1 -0
  210. package/codemini-web/dist/assets/powerquery-I1Ei5hrS.js +1 -0
  211. package/codemini-web/dist/assets/powershell-Coc0WruX.js +1 -0
  212. package/codemini-web/dist/assets/prisma-Ojgxt2lx.js +1 -0
  213. package/codemini-web/dist/assets/prolog-C1UOAv4v.js +1 -0
  214. package/codemini-web/dist/assets/proto-D07RTuB5.js +1 -0
  215. package/codemini-web/dist/assets/pug-B4WHazil.js +1 -0
  216. package/codemini-web/dist/assets/puppet-D_zyrMo2.js +1 -0
  217. package/codemini-web/dist/assets/purescript-CV-DVmZj.js +1 -0
  218. package/codemini-web/dist/assets/python-DcnbpNOV.js +1 -0
  219. package/codemini-web/dist/assets/qml-DWxWu28U.js +1 -0
  220. package/codemini-web/dist/assets/qmldir-BBNnU9RJ.js +1 -0
  221. package/codemini-web/dist/assets/qss-CC0PKRbL.js +1 -0
  222. package/codemini-web/dist/assets/r-B4lG5syH.js +1 -0
  223. package/codemini-web/dist/assets/racket-Cbwns2Cq.js +1 -0
  224. package/codemini-web/dist/assets/raku-CeV6tH_x.js +1 -0
  225. package/codemini-web/dist/assets/razor-CQPYUgex.js +1 -0
  226. package/codemini-web/dist/assets/red-CVEaJbMR.js +1 -0
  227. package/codemini-web/dist/assets/reg-C_WE1pkC.js +1 -0
  228. package/codemini-web/dist/assets/regexp-da3KYCEG.js +1 -0
  229. package/codemini-web/dist/assets/rel-CpHQF4b7.js +1 -0
  230. package/codemini-web/dist/assets/riscv-Co5eiPIZ.js +1 -0
  231. package/codemini-web/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  232. package/codemini-web/dist/assets/ron-CgTit1dG.js +1 -0
  233. package/codemini-web/dist/assets/rose-pine-BDTwvYHf.js +1 -0
  234. package/codemini-web/dist/assets/rose-pine-dawn-CAIk_wLV.js +1 -0
  235. package/codemini-web/dist/assets/rose-pine-moon-C5gdiznP.js +1 -0
  236. package/codemini-web/dist/assets/rosmsg-C0tpzWlc.js +1 -0
  237. package/codemini-web/dist/assets/rst-B-OS2pa5.js +1 -0
  238. package/codemini-web/dist/assets/ruby-BM15fmxz.js +1 -0
  239. package/codemini-web/dist/assets/rust-BWAfVMY4.js +1 -0
  240. package/codemini-web/dist/assets/sas-DYNukvU9.js +1 -0
  241. package/codemini-web/dist/assets/sass-MovLey2R.js +1 -0
  242. package/codemini-web/dist/assets/scala-C2w7y2mZ.js +1 -0
  243. package/codemini-web/dist/assets/scheme-Bf85FNnm.js +1 -0
  244. package/codemini-web/dist/assets/scss-C0BQ8YVM.js +1 -0
  245. package/codemini-web/dist/assets/sdbl-DoQ_zDzo.js +1 -0
  246. package/codemini-web/dist/assets/shaderlab-TbUUdmUb.js +1 -0
  247. package/codemini-web/dist/assets/shellscript-KUJZnuCi.js +1 -0
  248. package/codemini-web/dist/assets/shellsession-BeWGuVoR.js +1 -0
  249. package/codemini-web/dist/assets/slack-dark-BnOYKTBJ.js +1 -0
  250. package/codemini-web/dist/assets/slack-ochin-43udxtUg.js +1 -0
  251. package/codemini-web/dist/assets/smalltalk-Mlf5-xbr.js +1 -0
  252. package/codemini-web/dist/assets/snazzy-light-kw-pZEiM.js +1 -0
  253. package/codemini-web/dist/assets/solarized-dark-BDezFa9V.js +1 -0
  254. package/codemini-web/dist/assets/solarized-light-CkoenhS2.js +1 -0
  255. package/codemini-web/dist/assets/solidity-DYHGECBw.js +1 -0
  256. package/codemini-web/dist/assets/soy-C6D0Ibo9.js +1 -0
  257. package/codemini-web/dist/assets/sparql-DIFvSn1n.js +1 -0
  258. package/codemini-web/dist/assets/splunk-DOdklC0I.js +1 -0
  259. package/codemini-web/dist/assets/sql-CZAMrWdL.js +1 -0
  260. package/codemini-web/dist/assets/ssh-config-DwwFW7AS.js +1 -0
  261. package/codemini-web/dist/assets/stata-C5mLa_ER.js +1 -0
  262. package/codemini-web/dist/assets/stylus-BO6mlOab.js +1 -0
  263. package/codemini-web/dist/assets/surrealql-DyoUfV6n.js +1 -0
  264. package/codemini-web/dist/assets/svelte-DJ-0FpL2.js +1 -0
  265. package/codemini-web/dist/assets/swift-D9A08YU9.js +1 -0
  266. package/codemini-web/dist/assets/synthwave-84-C69NN2j9.js +1 -0
  267. package/codemini-web/dist/assets/system-verilog-DjR3sN6w.js +1 -0
  268. package/codemini-web/dist/assets/systemd-CJWuVSJU.js +1 -0
  269. package/codemini-web/dist/assets/talonscript-CXqq0wX-.js +1 -0
  270. package/codemini-web/dist/assets/tasl-GVNf7pB7.js +1 -0
  271. package/codemini-web/dist/assets/tcl-DNlfRSl5.js +1 -0
  272. package/codemini-web/dist/assets/templ-7Bvm-rei.js +1 -0
  273. package/codemini-web/dist/assets/terraform-DUK0FOOj.js +1 -0
  274. package/codemini-web/dist/assets/tex-ezg8IclB.js +1 -0
  275. package/codemini-web/dist/assets/tokyo-night-DWTtuXS3.js +1 -0
  276. package/codemini-web/dist/assets/toml-X5n3zjEH.js +1 -0
  277. package/codemini-web/dist/assets/ts-tags-BfuR6EQ0.js +1 -0
  278. package/codemini-web/dist/assets/tsv-Bqs_rchc.js +1 -0
  279. package/codemini-web/dist/assets/tsx-CfyUE2pW.js +1 -0
  280. package/codemini-web/dist/assets/turtle-BsUuoeVK.js +1 -0
  281. package/codemini-web/dist/assets/twig-_uxJ-QmX.js +1 -0
  282. package/codemini-web/dist/assets/typescript-C6LvTgbf.js +1 -0
  283. package/codemini-web/dist/assets/typespec-8nkhqWz6.js +1 -0
  284. package/codemini-web/dist/assets/typst-CPL77SDw.js +1 -0
  285. package/codemini-web/dist/assets/v-CoJD3IPx.js +1 -0
  286. package/codemini-web/dist/assets/vala-C42IfotU.js +1 -0
  287. package/codemini-web/dist/assets/vb-CVMKTK26.js +1 -0
  288. package/codemini-web/dist/assets/verilog-P63PhzSt.js +1 -0
  289. package/codemini-web/dist/assets/vesper-BGr95374.js +1 -0
  290. package/codemini-web/dist/assets/vhdl-2WwUdgX8.js +1 -0
  291. package/codemini-web/dist/assets/viml-CGPGWJA6.js +1 -0
  292. package/codemini-web/dist/assets/vitesse-black-cI0k84-I.js +1 -0
  293. package/codemini-web/dist/assets/vitesse-dark-SouM0FMW.js +1 -0
  294. package/codemini-web/dist/assets/vitesse-light-WiCy6lDO.js +1 -0
  295. package/codemini-web/dist/assets/vue-DkOBu49o.js +1 -0
  296. package/codemini-web/dist/assets/vue-html-Bx2Sgp8M.js +1 -0
  297. package/codemini-web/dist/assets/vue-vine-veyFk6GJ.js +1 -0
  298. package/codemini-web/dist/assets/vyper-DP_vqZO9.js +1 -0
  299. package/codemini-web/dist/assets/wasm-Db7VBw0n.js +1 -0
  300. package/codemini-web/dist/assets/wasm-DiIFv9DE.js +1 -0
  301. package/codemini-web/dist/assets/wenyan-ZEcjghA1.js +1 -0
  302. package/codemini-web/dist/assets/wgsl-CdusuPLe.js +1 -0
  303. package/codemini-web/dist/assets/wikitext-CBIB6hmW.js +1 -0
  304. package/codemini-web/dist/assets/wit-ZhUbVeze.js +1 -0
  305. package/codemini-web/dist/assets/wolfram-HyMOyERF.js +1 -0
  306. package/codemini-web/dist/assets/xml-BkdunjRC.js +1 -0
  307. package/codemini-web/dist/assets/xsl-C66i1pDH.js +1 -0
  308. package/codemini-web/dist/assets/yaml-D_uvhEF7.js +1 -0
  309. package/codemini-web/dist/assets/zenscript-C6ZuzgrL.js +1 -0
  310. package/codemini-web/dist/assets/zig-Do2h8XKj.js +1 -0
  311. package/codemini-web/dist/index.html +21 -0
  312. package/codemini-web/lib/approval-manager.js +32 -0
  313. package/codemini-web/lib/runtime-bridge.js +518 -0
  314. package/codemini-web/server.js +846 -0
  315. package/deployment.md +5 -5
  316. package/package.json +6 -1
  317. package/src/cli.js +12 -1
  318. package/src/commands/web.js +57 -0
  319. package/src/core/chat-runtime.js +2 -1
  320. package/src/core/fff-adapter.js +1 -1
  321. package/templates/project-requirements/report-shell.html +2 -1
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-S-ySWqyJ.js";import{t}from"./java-X0I2c5Az.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./xml-BkdunjRC.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-S-ySWqyJ.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
@@ -0,0 +1 @@
1
+ var e=[Object.freeze(JSON.parse(`{"displayName":"ZenScript","fileTypes":["zs"],"name":"zenscript","patterns":[{"match":"\\\\b((0([Xx])\\\\h*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))(([Ee])([-+])?[0-9]+)?)([DFLUdflu]|UL|ul)?\\\\b","name":"constant.numeric.zenscript"},{"match":"\\\\b-?(0[BOXbox])(0|[1-9A-Fa-f][_\\\\h]*)[A-Z_a-z]*\\\\b","name":"constant.numeric.zenscript"},{"include":"#code"},{"match":"\\\\b((?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*)(?=\\\\[)","name":"storage.type.object.array.zenscript"}],"repository":{"brackets":{"patterns":[{"captures":{"1":{"name":"keyword.control.zenscript"},"2":{"name":"keyword.other.zenscript"},"3":{"name":"keyword.control.zenscript"},"4":{"name":"variable.other.zenscript"},"5":{"name":"keyword.control.zenscript"},"6":{"name":"constant.numeric.zenscript"},"7":{"name":"keyword.control.zenscript"}},"match":"(<)\\\\b(.*?)(:(.*?(:(\\\\*|\\\\d+)?)?)?)(>)","name":"keyword.other.zenscript"}]},"class":{"captures":{"1":{"name":"storage.type.zenscript"},"2":{"name":"entity.name.type.class.zenscript"}},"match":"(zenClass)\\\\s+(\\\\w+)","name":"meta.class.zenscript"},"code":{"patterns":[{"include":"#class"},{"include":"#functions"},{"include":"#dots"},{"include":"#quotes"},{"include":"#brackets"},{"include":"#comments"},{"include":"#var"},{"include":"#keywords"},{"include":"#constants"},{"include":"#operators"}]},"comments":{"patterns":[{"match":"//[^\\\\n]*","name":"comment.line.double=slash"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"comment.block"}},"end":"\\\\*/","endCaptures":{"0":{"name":"comment.block"}},"name":"comment.block"}]},"dots":{"captures":{"1":{"name":"storage.type.zenscript"},"2":{"name":"keyword.control.zenscript"},"5":{"name":"keyword.control.zenscript"}},"match":"\\\\b(\\\\w+)(\\\\.)(\\\\w+)((\\\\.)(\\\\w+))*","name":"plain.text.zenscript"},"functions":{"captures":{"0":{"name":"storage.type.function.zenscript"},"1":{"name":"entity.name.function.zenscript"}},"match":"function\\\\s+([$A-Z_a-z][$\\\\w]*)\\\\s*(?=\\\\()","name":"meta.function.zenscript"},"keywords":{"patterns":[{"match":"\\\\b(instanceof|get|implements|set|import|function|override|const|if|else|do|while|for|throw|panic|lock|try|catch|finally|return|break|continue|switch|case|default|in|is|as|match|throws|super|new)\\\\b","name":"keyword.control.zenscript"},{"match":"\\\\b(zenClass|zenConstructor|alias|class|interface|enum|struct|expand|variant|set|void|bool|byte|sbyte|short|ushort|int|uint|long|ulong|usize|float|double|char|string)\\\\b","name":"storage.type.zenscript"},{"match":"\\\\b(variant|abstract|final|private|public|export|internal|static|protected|implicit|virtual|extern|immutable)\\\\b","name":"storage.modifier.zenscript"},{"match":"\\\\b(Native|Precondition)\\\\b","name":"entity.other.attribute-name"},{"match":"\\\\b(null|true|false)\\\\b","name":"constant.language"}]},"operators":{"patterns":[{"match":"\\\\b(\\\\.\\\\.??|\\\\.\\\\.\\\\.|[+,]|\\\\+=|\\\\+\\\\+|-=??|--|~=??|\\\\*=??|/=??|%=??|\\\\|=??|\\\\|\\\\||&=??|&&|\\\\^=??|\\\\?\\\\.??|\\\\?\\\\?|<=??|<<=??|>=??|>>=??|>>>=??|=>?|===??|!=??|!==|[$\`])\\\\b","name":"keyword.control"},{"match":"\\\\b([:;])\\\\b","name":"keyword.control"}]},"quotes":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.zenscript"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.zenscript"}},"name":"string.quoted.double.zenscript","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.zenscript"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.zenscript"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.zenscript"}},"name":"string.quoted.single.zenscript","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.zenscript"}]}]},"var":{"match":"\\\\b(va[lr])\\\\b","name":"storage.type"}},"scopeName":"source.zenscript"}`))];export{e as default};
@@ -0,0 +1 @@
1
+ var e=[Object.freeze(JSON.parse(`{"displayName":"Zig","fileTypes":["zig","zon"],"name":"zig","patterns":[{"include":"#comments"},{"include":"#strings"},{"include":"#keywords"},{"include":"#operators"},{"include":"#punctuation"},{"include":"#numbers"},{"include":"#support"},{"include":"#variables"}],"repository":{"commentContents":{"patterns":[{"match":"\\\\b(TODO|FIXME|XXX|NOTE)\\\\b:?","name":"keyword.todo.zig"}]},"comments":{"patterns":[{"begin":"//[!/](?=[^/])","end":"$","name":"comment.line.documentation.zig","patterns":[{"include":"#commentContents"}]},{"begin":"//","end":"$","name":"comment.line.double-slash.zig","patterns":[{"include":"#commentContents"}]}]},"keywords":{"patterns":[{"match":"\\\\binline\\\\b(?!\\\\s*\\\\bfn\\\\b)","name":"keyword.control.repeat.zig"},{"match":"\\\\b(while|for)\\\\b","name":"keyword.control.repeat.zig"},{"match":"\\\\b(extern|packed|export|pub|noalias|inline|comptime|volatile|align|linksection|threadlocal|allowzero|noinline|callconv)\\\\b","name":"keyword.storage.zig"},{"match":"\\\\b(struct|enum|union|opaque)\\\\b","name":"keyword.structure.zig"},{"match":"\\\\b(asm|unreachable)\\\\b","name":"keyword.statement.zig"},{"match":"\\\\b(break|return|continue|defer|errdefer)\\\\b","name":"keyword.control.flow.zig"},{"match":"\\\\b(resume|suspend|nosuspend)\\\\b","name":"keyword.control.async.zig"},{"match":"\\\\b(try|catch)\\\\b","name":"keyword.control.trycatch.zig"},{"match":"\\\\b(if|else|switch|orelse)\\\\b","name":"keyword.control.conditional.zig"},{"match":"\\\\b(null|undefined)\\\\b","name":"keyword.constant.default.zig"},{"match":"\\\\b(true|false)\\\\b","name":"keyword.constant.bool.zig"},{"match":"\\\\b(test|and|or)\\\\b","name":"keyword.default.zig"},{"match":"\\\\b(bool|void|noreturn|type|error|anyerror|anyframe|anytype|anyopaque)\\\\b","name":"keyword.type.zig"},{"match":"\\\\b(f16|f32|f64|f80|f128|u\\\\d+|i\\\\d+|isize|usize|comptime_int|comptime_float)\\\\b","name":"keyword.type.integer.zig"},{"match":"\\\\b(c_(?:char|short|ushort|int|uint|long|ulong|longlong|ulonglong|longdouble))\\\\b","name":"keyword.type.c.zig"}]},"numbers":{"patterns":[{"match":"\\\\b0x\\\\h[_\\\\h]*(\\\\.\\\\h[_\\\\h]*)?([Pp][-+]?[_\\\\h]+)?\\\\b","name":"constant.numeric.hexfloat.zig"},{"match":"\\\\b[0-9][0-9_]*(\\\\.[0-9][0-9_]*)?([Ee][-+]?[0-9_]+)?\\\\b","name":"constant.numeric.float.zig"},{"match":"\\\\b[0-9][0-9_]*\\\\b","name":"constant.numeric.decimal.zig"},{"match":"\\\\b0x[_\\\\h]+\\\\b","name":"constant.numeric.hexadecimal.zig"},{"match":"\\\\b0o[0-7_]+\\\\b","name":"constant.numeric.octal.zig"},{"match":"\\\\b0b[01_]+\\\\b","name":"constant.numeric.binary.zig"},{"match":"\\\\b[0-9](([EPep][-+])|[0-9A-Z_a-z])*(\\\\.(([EPep][-+])|[0-9A-Z_a-z])*)?([EPep][-+])?[0-9A-Z_a-z]*\\\\b","name":"constant.numeric.invalid.zig"}]},"operators":{"patterns":[{"match":"(?<=\\\\[)\\\\*c(?=])","name":"keyword.operator.c-pointer.zig"},{"match":"\\\\b((and|or))\\\\b|(==|!=|<=|>=|[<>])","name":"keyword.operator.comparison.zig"},{"match":"(-%?|\\\\+%?|\\\\*%?|[%/])=?","name":"keyword.operator.arithmetic.zig"},{"match":"(<<%?|>>|[!\\\\&^|~])=?","name":"keyword.operator.bitwise.zig"},{"match":"(==|\\\\+\\\\+|\\\\*\\\\*|->)","name":"keyword.operator.special.zig"},{"match":"=","name":"keyword.operator.assignment.zig"},{"match":"\\\\?","name":"keyword.operator.question.zig"}]},"punctuation":{"patterns":[{"match":"\\\\.","name":"punctuation.accessor.zig"},{"match":",","name":"punctuation.comma.zig"},{"match":":","name":"punctuation.separator.key-value.zig"},{"match":";","name":"punctuation.terminator.statement.zig"}]},"stringcontent":{"patterns":[{"match":"\\\\\\\\([\\"'\\\\\\\\nrt]|(x\\\\h{2})|(u\\\\{\\\\h+}))","name":"constant.character.escape.zig"},{"match":"\\\\\\\\.","name":"invalid.illegal.unrecognized-string-escape.zig"}]},"strings":{"patterns":[{"begin":"\\"","end":"\\"","name":"string.quoted.double.zig","patterns":[{"include":"#stringcontent"}]},{"begin":"\\\\\\\\\\\\\\\\","end":"$","name":"string.multiline.zig"},{"match":"'([^'\\\\\\\\]|\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.))'","name":"string.quoted.single.zig"}]},"support":{"patterns":[{"match":"@[A-Z_a-z][0-9A-Z_a-z]*","name":"support.function.builtin.zig"}]},"variables":{"patterns":[{"name":"meta.function.declaration.zig","patterns":[{"captures":{"1":{"name":"storage.type.function.zig"},"2":{"name":"entity.name.type.zig"}},"match":"\\\\b(fn)\\\\s+([A-Z][0-9A-Za-z]*)\\\\b"},{"captures":{"1":{"name":"storage.type.function.zig"},"2":{"name":"entity.name.function.zig"}},"match":"\\\\b(fn)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\b"},{"begin":"\\\\b(fn)\\\\s+@\\"","beginCaptures":{"1":{"name":"storage.type.function.zig"}},"end":"\\"","name":"entity.name.function.string.zig","patterns":[{"include":"#stringcontent"}]},{"match":"\\\\b(const|var|fn)\\\\b","name":"keyword.default.zig"}]},{"name":"meta.function.call.zig","patterns":[{"match":"([A-Z][0-9A-Za-z]*)(?=\\\\s*\\\\()","name":"entity.name.type.zig"},{"match":"([A-Z_a-z][0-9A-Z_a-z]*)(?=\\\\s*\\\\()","name":"entity.name.function.zig"}]},{"name":"meta.variable.zig","patterns":[{"match":"\\\\b[A-Z_a-z][0-9A-Z_a-z]*\\\\b","name":"variable.zig"},{"begin":"@\\"","end":"\\"","name":"variable.string.zig","patterns":[{"include":"#stringcontent"}]}]}]}},"scopeName":"source.zig"}`))];export{e as default};
@@ -0,0 +1,21 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>CodeMini</title>
7
+ <script>
8
+ (() => {
9
+ const stored = localStorage.getItem('codemini-theme');
10
+ const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
11
+ document.documentElement.dataset.theme = stored || (prefersDark ? 'dark' : 'light');
12
+ })();
13
+ </script>
14
+ <script type="module" crossorigin src="/assets/index-BZ01DHrh.js"></script>
15
+ <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-S-ySWqyJ.js">
16
+ <link rel="stylesheet" crossorigin href="/assets/index-Dq1mwNaQ.css">
17
+ </head>
18
+ <body class="font-sans antialiased">
19
+ <div id="root"></div>
20
+ </body>
21
+ </html>
@@ -0,0 +1,32 @@
1
+ const APPROVAL_TIMEOUT_MS = 5 * 60 * 1000;
2
+
3
+ export class ApprovalManager {
4
+ #pending = new Map();
5
+
6
+ create(id) {
7
+ return new Promise((resolve) => {
8
+ const timer = setTimeout(() => {
9
+ this.#pending.delete(id);
10
+ resolve({ approved: false });
11
+ }, APPROVAL_TIMEOUT_MS);
12
+ this.#pending.set(id, { resolve, timer });
13
+ });
14
+ }
15
+
16
+ resolve(id, approved) {
17
+ const entry = this.#pending.get(id);
18
+ if (!entry) return false;
19
+ clearTimeout(entry.timer);
20
+ this.#pending.delete(id);
21
+ entry.resolve({ approved });
22
+ return true;
23
+ }
24
+
25
+ has(id) {
26
+ return this.#pending.has(id);
27
+ }
28
+
29
+ get pendingCount() {
30
+ return this.#pending.size;
31
+ }
32
+ }
@@ -0,0 +1,518 @@
1
+ import { ApprovalManager } from './approval-manager.js';
2
+ import { summarizeToolResult } from '../../src/core/tool-result-store.js';
3
+ import fs from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { getSessionsDir } from '../../src/core/paths.js';
6
+
7
+ function webTranscriptPath(sessionId) {
8
+ return path.join(getSessionsDir(), 'web-ui-transcripts', `${String(sessionId || 'unknown')}.json`);
9
+ }
10
+
11
+ function parseToolContent(content) {
12
+ if (typeof content !== 'string') return content;
13
+ const text = content.trim();
14
+ if (!text) return '';
15
+ try {
16
+ return JSON.parse(text);
17
+ } catch {
18
+ return text;
19
+ }
20
+ }
21
+
22
+ function summarizeHistoricalToolMessage(message) {
23
+ const explicit = String(message?.tool_summary || '').trim();
24
+ if (explicit) return explicit;
25
+ return summarizeToolResult(parseToolContent(message?.content || ''));
26
+ }
27
+
28
+ function stripPlanProgressText(text) {
29
+ return String(text || '').replace(/(?:^|\n)\[plan\]\s+Step\s+\d+\/\d+\s+->[^\n]*\n?/g, '');
30
+ }
31
+
32
+ function addToolToSegments(segments, toolCard) {
33
+ if (!Array.isArray(segments) || segments.length === 0) return [{ type: 'tools', cards: [toolCard] }];
34
+ const last = segments[segments.length - 1];
35
+ if (last.type === 'tools') return [...segments.slice(0, -1), { ...last, cards: [...last.cards, toolCard] }];
36
+ return [...segments, { type: 'tools', cards: [toolCard] }];
37
+ }
38
+
39
+ function updateToolInSegments(segments, toolId, updater) {
40
+ return (Array.isArray(segments) ? segments : []).map((seg) => {
41
+ if (seg.type !== 'tools') return seg;
42
+ const idx = seg.cards.findIndex((card) => card.id === toolId);
43
+ if (idx === -1) return seg;
44
+ const cards = [...seg.cards];
45
+ cards[idx] = updater(cards[idx]);
46
+ return { ...seg, cards };
47
+ });
48
+ }
49
+
50
+ function appendTextSegment(segments, delta, isStreaming = true) {
51
+ const value = String(delta || '');
52
+ if (!value) return segments || [];
53
+ const current = Array.isArray(segments) ? segments : [];
54
+ const last = current[current.length - 1];
55
+ if (last?.type === 'text') {
56
+ return [
57
+ ...current.slice(0, -1),
58
+ { ...last, text: `${last.text || ''}${value}`, isStreaming }
59
+ ];
60
+ }
61
+ return [...current, { type: 'text', text: value, isStreaming }];
62
+ }
63
+
64
+ function createPlanStepUiMessage(event) {
65
+ return {
66
+ id: `plan-step-${event.step}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
67
+ role: event.role || 'general',
68
+ text: '',
69
+ segments: [],
70
+ skillBadges: [],
71
+ fileChanges: [],
72
+ timestamp: new Date().toISOString(),
73
+ planStep: {
74
+ step: event.step,
75
+ total: event.total,
76
+ role: event.role || 'general',
77
+ title: event.title || '',
78
+ status: 'running',
79
+ summary: ''
80
+ }
81
+ };
82
+ }
83
+
84
+ export class RuntimeBridge {
85
+ #runtime = null;
86
+ #clients = new Set();
87
+ #approval = new ApprovalManager();
88
+ #busy = false;
89
+ #startupConsumed = false;
90
+ #uiMessages = [];
91
+ #uiActiveMsgId = null;
92
+ #uiPlanStepIds = new Map();
93
+ #uiTranscriptSessionId = '';
94
+ #uiPersisting = false;
95
+ #uiPersistQueued = false;
96
+
97
+ constructor(runtime) {
98
+ this.#runtime = runtime;
99
+ this.#installApprovalHandler();
100
+ this.#uiTranscriptSessionId = this.getSessionId();
101
+ }
102
+
103
+ #installApprovalHandler() {
104
+ this.#runtime.setRequestToolApproval((request) => {
105
+ const { id, name, displayName, arguments: args, approvalDetails } = request;
106
+ this.#broadcast({ type: 'approval:request', id, toolName: name, displayName, arguments: args, details: approvalDetails });
107
+ return this.#approval.create(id);
108
+ });
109
+ }
110
+
111
+ #broadcast(event) {
112
+ const data = `data: ${JSON.stringify(event)}\n\n`;
113
+ for (const res of this.#clients) {
114
+ try { res.write(data); } catch {}
115
+ }
116
+ }
117
+
118
+ async #writeUiTranscriptSnapshot() {
119
+ const sessionId = this.getSessionId();
120
+ if (!sessionId) return;
121
+ try {
122
+ const filePath = webTranscriptPath(sessionId);
123
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
124
+ await fs.writeFile(filePath, JSON.stringify({
125
+ sessionId,
126
+ updatedAt: new Date().toISOString(),
127
+ messages: this.#uiMessages
128
+ }), 'utf8');
129
+ } catch {}
130
+ }
131
+
132
+ #persistUiTranscriptSoon() {
133
+ this.#uiPersistQueued = true;
134
+ if (this.#uiPersisting) return;
135
+ this.#uiPersisting = true;
136
+ (async () => {
137
+ while (this.#uiPersistQueued) {
138
+ this.#uiPersistQueued = false;
139
+ await this.#writeUiTranscriptSnapshot();
140
+ }
141
+ this.#uiPersisting = false;
142
+ })();
143
+ }
144
+
145
+ #resetUiTranscriptIfSessionChanged() {
146
+ const sessionId = this.getSessionId();
147
+ if (sessionId === this.#uiTranscriptSessionId) return;
148
+ this.#uiTranscriptSessionId = sessionId;
149
+ this.#uiMessages = [];
150
+ this.#uiActiveMsgId = null;
151
+ this.#uiPlanStepIds = new Map();
152
+ }
153
+
154
+ #addUiMessage(message) {
155
+ const next = {
156
+ ...message,
157
+ id: message.id || `ui-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
158
+ segments: Array.isArray(message.segments)
159
+ ? message.segments
160
+ : (message.text ? [{ type: 'text', text: message.text, isStreaming: false }] : []),
161
+ skillBadges: Array.isArray(message.skillBadges) ? message.skillBadges : [],
162
+ fileChanges: Array.isArray(message.fileChanges) ? message.fileChanges : []
163
+ };
164
+ this.#uiMessages = [...this.#uiMessages, next];
165
+ this.#persistUiTranscriptSoon();
166
+ return next.id;
167
+ }
168
+
169
+ #updateUiMessage(id, mapper) {
170
+ if (!id) return;
171
+ this.#uiMessages = this.#uiMessages.map((message) => message.id === id ? mapper(message) : message);
172
+ this.#persistUiTranscriptSoon();
173
+ }
174
+
175
+ #removeUiTransientWaiting() {
176
+ this.#uiMessages = this.#uiMessages.filter((message) => message.transientKey !== 'waiting-response');
177
+ }
178
+
179
+ #recordUiEvent(event) {
180
+ if (!event?.type) return;
181
+ this.#resetUiTranscriptIfSessionChanged();
182
+ const activeId = this.#uiActiveMsgId;
183
+
184
+ switch (event.type) {
185
+ case 'assistant:start': {
186
+ this.#removeUiTransientWaiting();
187
+ if (!activeId) {
188
+ this.#uiActiveMsgId = this.#addUiMessage({
189
+ role: 'general',
190
+ text: '',
191
+ timestamp: new Date().toISOString()
192
+ });
193
+ }
194
+ break;
195
+ }
196
+ case 'assistant:delta': {
197
+ const delta = stripPlanProgressText(event.text);
198
+ if (this.#uiActiveMsgId && delta) {
199
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
200
+ ...message,
201
+ segments: appendTextSegment(message.segments, delta, true)
202
+ }));
203
+ }
204
+ break;
205
+ }
206
+ case 'assistant:response': {
207
+ if (this.#uiActiveMsgId && event.text) {
208
+ const text = stripPlanProgressText(event.text);
209
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
210
+ ...message,
211
+ segments: text ? [{ type: 'text', text, isStreaming: false }] : message.segments
212
+ }));
213
+ }
214
+ break;
215
+ }
216
+ case 'tool:start': {
217
+ if (this.#uiActiveMsgId) {
218
+ const toolCard = { id: event.id, name: event.name, arguments: event.arguments, status: 'running', durationMs: null, summary: '', result: '' };
219
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
220
+ ...message,
221
+ segments: addToolToSegments(message.segments, toolCard)
222
+ }));
223
+ }
224
+ break;
225
+ }
226
+ case 'tool:end': {
227
+ if (this.#uiActiveMsgId) {
228
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
229
+ ...message,
230
+ segments: updateToolInSegments(message.segments, event.id, (card) => ({
231
+ ...card,
232
+ status: 'done',
233
+ durationMs: event.durationMs,
234
+ summary: event.summary || card.summary
235
+ }))
236
+ }));
237
+ }
238
+ break;
239
+ }
240
+ case 'tool:result': {
241
+ if (this.#uiActiveMsgId) {
242
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
243
+ ...message,
244
+ segments: updateToolInSegments(message.segments, event.id, (card) => ({ ...card, result: event.content || '' }))
245
+ }));
246
+ }
247
+ break;
248
+ }
249
+ case 'tool:error': {
250
+ if (this.#uiActiveMsgId) {
251
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
252
+ ...message,
253
+ segments: updateToolInSegments(message.segments, event.id, (card) => ({
254
+ ...card,
255
+ status: 'error',
256
+ durationMs: event.durationMs,
257
+ summary: event.summary || card.summary
258
+ }))
259
+ }));
260
+ }
261
+ break;
262
+ }
263
+ case 'tool:blocked': {
264
+ if (this.#uiActiveMsgId) {
265
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
266
+ ...message,
267
+ segments: updateToolInSegments(message.segments, event.id, (card) => ({
268
+ ...card,
269
+ status: 'blocked',
270
+ summary: card.summary || 'Tool blocked'
271
+ }))
272
+ }));
273
+ }
274
+ break;
275
+ }
276
+ case 'plan:steps': {
277
+ if (this.#uiActiveMsgId) {
278
+ this.#uiMessages = this.#uiMessages.filter((message) => {
279
+ if (message.id !== this.#uiActiveMsgId) return true;
280
+ return message.planStep || (Array.isArray(message.segments) && message.segments.length > 0);
281
+ });
282
+ this.#uiActiveMsgId = null;
283
+ this.#persistUiTranscriptSoon();
284
+ }
285
+ this.#uiPlanStepIds = new Map();
286
+ break;
287
+ }
288
+ case 'plan:step_start': {
289
+ const key = String(event.step);
290
+ let msgId = this.#uiPlanStepIds.get(key);
291
+ if (!msgId) {
292
+ const message = createPlanStepUiMessage(event);
293
+ msgId = message.id;
294
+ this.#uiPlanStepIds.set(key, msgId);
295
+ this.#uiMessages = [...this.#uiMessages.filter((message) => message.transientKey !== 'waiting-response'), message];
296
+ this.#persistUiTranscriptSoon();
297
+ } else {
298
+ this.#updateUiMessage(msgId, (message) => ({
299
+ ...message,
300
+ planStep: { ...(message.planStep || {}), status: 'running' }
301
+ }));
302
+ }
303
+ this.#uiActiveMsgId = msgId;
304
+ break;
305
+ }
306
+ case 'plan:step_done': {
307
+ const msgId = this.#uiPlanStepIds.get(String(event.step));
308
+ if (msgId) {
309
+ this.#updateUiMessage(msgId, (message) => ({
310
+ ...message,
311
+ segments: message.segments.map((seg) => seg.type === 'text' ? { ...seg, isStreaming: false } : seg),
312
+ planStep: {
313
+ ...(message.planStep || {}),
314
+ status: event.status || 'done',
315
+ summary: event.summary || ''
316
+ }
317
+ }));
318
+ }
319
+ break;
320
+ }
321
+ default:
322
+ break;
323
+ }
324
+ }
325
+
326
+ addClient(res) {
327
+ res.writeHead(200, {
328
+ 'Content-Type': 'text/event-stream',
329
+ 'Cache-Control': 'no-cache',
330
+ Connection: 'keep-alive',
331
+ 'X-Accel-Buffering': 'no'
332
+ });
333
+ res.write(`data: ${JSON.stringify({ type: 'connected' })}\n\n`);
334
+ this.#clients.add(res);
335
+ res.on('close', () => this.#clients.delete(res));
336
+ }
337
+
338
+ async handleStartupEvents() {
339
+ if (this.#startupConsumed) return [];
340
+ this.#startupConsumed = true;
341
+ return this.#runtime.consumeStartupEvents();
342
+ }
343
+
344
+ handleSubmit(line, options = {}) {
345
+ if (this.#busy) return { error: true, message: 'A request is already in progress' };
346
+ this.#resetUiTranscriptIfSessionChanged();
347
+ const trimmed = String(line || '').trim();
348
+ const lower = trimmed.toLowerCase();
349
+ const planControl = ['/yes', '/plan approve', '/no', '/reject'].includes(lower) || lower.startsWith('/edit ');
350
+ if (!options?.readOnlyCodeWiki && trimmed && !planControl) {
351
+ this.#addUiMessage({
352
+ role: 'you',
353
+ text: line,
354
+ timestamp: new Date().toISOString()
355
+ });
356
+ }
357
+ this.#busy = true;
358
+ this.#runtime.submit(line, (event) => {
359
+ this.#recordUiEvent(event);
360
+ this.#broadcast(event);
361
+ }, options).then((result) => {
362
+ if (this.#uiActiveMsgId) {
363
+ this.#updateUiMessage(this.#uiActiveMsgId, (message) => ({
364
+ ...message,
365
+ segments: message.segments.map((seg) => seg.type === 'text' ? { ...seg, isStreaming: false } : seg)
366
+ }));
367
+ }
368
+ this.#uiActiveMsgId = null;
369
+ this.#uiPlanStepIds = new Map();
370
+ this.#broadcast({ type: 'submit:done', result: { type: result.type, aborted: result.aborted, text: result.text } });
371
+ }).catch((err) => {
372
+ this.#addUiMessage({
373
+ role: 'error',
374
+ text: `Failed: ${err.message}`,
375
+ timestamp: new Date().toISOString()
376
+ });
377
+ this.#broadcast({ type: 'submit:done', result: { type: 'error', text: err.message } });
378
+ }).finally(() => {
379
+ this.#busy = false;
380
+ });
381
+ return { accepted: true };
382
+ }
383
+
384
+ async handleCodeWikiAsk(line, onEvent = null) {
385
+ if (this.#busy) return { error: true, message: 'A request is already in progress' };
386
+ this.#busy = true;
387
+ const emit = (event) => {
388
+ if (typeof onEvent === 'function' && event?.type) onEvent(event);
389
+ };
390
+ try {
391
+ const result = await this.#runtime.submit(line, emit, { readOnlyCodeWiki: true });
392
+ const payload = {
393
+ ok: true,
394
+ type: result?.type || 'assistant',
395
+ text: result?.text || '',
396
+ aborted: !!result?.aborted
397
+ };
398
+ emit({ type: 'codewiki:done', result: payload });
399
+ return payload;
400
+ } catch (err) {
401
+ const payload = { error: true, message: err?.message || 'Request failed' };
402
+ emit({ type: 'codewiki:error', message: payload.message });
403
+ return payload;
404
+ } finally {
405
+ this.#busy = false;
406
+ }
407
+ }
408
+
409
+ isBusy() {
410
+ return this.#busy;
411
+ }
412
+
413
+ handleAbort() {
414
+ return this.#runtime.abort();
415
+ }
416
+
417
+ async setExecutionMode(mode) {
418
+ if (this.#busy) return false;
419
+ const ok = await this.#runtime.setExecutionMode(mode);
420
+ if (ok) this.#broadcast({ type: 'mode:changed', mode, ...this.getState() });
421
+ return ok;
422
+ }
423
+
424
+ handleApproval(id, approved) {
425
+ return this.#approval.resolve(id, approved);
426
+ }
427
+
428
+ getState() {
429
+ const state = this.#runtime.getRuntimeState();
430
+ return {
431
+ ...state,
432
+ busy: this.#busy,
433
+ requestInFlight: this.#busy,
434
+ pendingPlanApproval: this.#busy ? null : state.pendingPlanApproval
435
+ };
436
+ }
437
+
438
+ getSessionMessages() {
439
+ const messages = this.#runtime.getSessionMessages();
440
+ if (!Array.isArray(messages)) return [];
441
+ return messages
442
+ .filter(m => m.role !== 'system')
443
+ .map(m => ({
444
+ role: m.role,
445
+ content: typeof m.content === 'string' ? m.content : (Array.isArray(m.content) ? m.content.map(c => c.text || '').join('') : ''),
446
+ toolCalls: m.tool_calls || [],
447
+ toolCallId: m.tool_call_id || null,
448
+ toolSummary: m.role === 'tool' ? summarizeHistoricalToolMessage(m) : null,
449
+ toolDurationMs: Number.isFinite(Number(m.tool_duration_ms)) ? Number(m.tool_duration_ms) : null,
450
+ toolStatus: m.tool_status || null,
451
+ planTranscript: Array.isArray(m.plan_transcript) ? m.plan_transcript : null,
452
+ at: m.at || null
453
+ }));
454
+ }
455
+
456
+ async getUiMessages() {
457
+ this.#resetUiTranscriptIfSessionChanged();
458
+ if (this.#uiMessages.length > 0) return this.#uiMessages;
459
+ const sessionId = this.getSessionId();
460
+ if (!sessionId) return [];
461
+ try {
462
+ const raw = await fs.readFile(webTranscriptPath(sessionId), 'utf8');
463
+ const parsed = JSON.parse(raw);
464
+ return Array.isArray(parsed?.messages) ? parsed.messages : [];
465
+ } catch {
466
+ return [];
467
+ }
468
+ }
469
+
470
+ getCompletions(input) {
471
+ return this.#runtime.getCompletionOptions(input);
472
+ }
473
+
474
+ getHistory() {
475
+ return this.#runtime.getInputHistory();
476
+ }
477
+
478
+ getCommands() {
479
+ return this.#runtime.listCommandNames();
480
+ }
481
+
482
+ getSessionId() {
483
+ return this.#runtime.getCurrentSessionId();
484
+ }
485
+
486
+ get busy() { return this.#busy; }
487
+
488
+ get runtime() { return this.#runtime; }
489
+
490
+ async switchRuntime(newRuntime) {
491
+ // Abort anything in-flight
492
+ if (this.#busy) {
493
+ try { this.#runtime.abort(); } catch {}
494
+ this.#busy = false;
495
+ }
496
+ // Dispose old runtime
497
+ try { await this.#runtime.dispose?.(); } catch {}
498
+ // Swap
499
+ this.#runtime = newRuntime;
500
+ this.#startupConsumed = false;
501
+ this.#approval = new ApprovalManager();
502
+ this.#uiMessages = [];
503
+ this.#uiActiveMsgId = null;
504
+ this.#uiPlanStepIds = new Map();
505
+ this.#uiTranscriptSessionId = newRuntime.getCurrentSessionId?.() || '';
506
+ this.#installApprovalHandler();
507
+ // Notify clients
508
+ this.#broadcast({ type: 'runtime:switched', sessionId: newRuntime.getCurrentSessionId?.() });
509
+ }
510
+
511
+ async dispose() {
512
+ for (const res of this.#clients) {
513
+ try { res.end(); } catch {}
514
+ }
515
+ this.#clients.clear();
516
+ await this.#runtime.dispose?.();
517
+ }
518
+ }