codemini-cli 0.6.2 → 0.6.3

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 (640) hide show
  1. package/codemini-web/dist/assets/{AboutDialog-CBmrZqhV.js → AboutDialog-jgqGjQgl.js} +2 -2
  2. package/codemini-web/dist/assets/CodeWikiPanel-EPuoerNv.js +1 -0
  3. package/codemini-web/dist/assets/ConfigDialog-B5IGZCc9.js +1 -0
  4. package/codemini-web/dist/assets/{GitDiffDialog-CVpmPcGi.js → GitDiffDialog-Bb_Tw5ZK.js} +5 -5
  5. package/codemini-web/dist/assets/MemoryDialog-BhxQgG0I.js +3 -0
  6. package/codemini-web/dist/assets/{MessageBubble-BkkfePXe.js → MessageBubble-wUff4GP4.js} +5 -5
  7. package/codemini-web/dist/assets/ProjectSelector-C0leTf6f.js +1 -0
  8. package/codemini-web/dist/assets/SkillDialog-DxS43NpR.js +8 -0
  9. package/codemini-web/dist/assets/SoulDialog-XDTEGWvH.js +1 -0
  10. package/codemini-web/dist/assets/{angular-html-DQ1gtQ6R.js → angular-html-BtqWAyby.js} +1 -1
  11. package/codemini-web/dist/assets/{angular-html-kg4tCYym.js → angular-html-Dqm-Ium4.js} +1 -1
  12. package/codemini-web/dist/assets/{angular-ts-C_VTyikG.js → angular-ts-BUlY5dZZ.js} +1 -1
  13. package/codemini-web/dist/assets/{angular-ts-QUaQh54x.js → angular-ts-DXMH5pbz.js} +1 -1
  14. package/codemini-web/dist/assets/{apl-D2YQXnhn.js → apl-B9jkvghZ.js} +1 -1
  15. package/codemini-web/dist/assets/{apl-DTyfz60o.js → apl-Bt--uCmj.js} +1 -1
  16. package/codemini-web/dist/assets/{astro-DrBiKBx0.js → astro-P-Wk2Uo3.js} +1 -1
  17. package/codemini-web/dist/assets/{astro-STdMQy7_.js → astro-ZfS8gVPQ.js} +1 -1
  18. package/codemini-web/dist/assets/{blade-BzcRYrK8.js → blade-CxVOILUn.js} +1 -1
  19. package/codemini-web/dist/assets/{blade-DV-5zppA.js → blade-DsiMSXb3.js} +1 -1
  20. package/codemini-web/dist/assets/{bsl-D8KU0pjR.js → bsl-9Rfj8X2G.js} +1 -1
  21. package/codemini-web/dist/assets/{bsl-JaCMWPaY.js → bsl-CZ9gUG7G.js} +1 -1
  22. package/codemini-web/dist/assets/{cairo-D7Xpkdmw.js → cairo-B8t0-PSB.js} +1 -1
  23. package/codemini-web/dist/assets/{cairo-DcJUH2W4.js → cairo-CZcbsYHl.js} +1 -1
  24. package/codemini-web/dist/assets/chevron-right-Dbzw7YzA.js +1 -0
  25. package/codemini-web/dist/assets/{chunk-BO2N2NFS-C-dwTHqR.js → chunk-BO2N2NFS-Budy_hfO.js} +4 -4
  26. package/codemini-web/dist/assets/{cobol-VahErUC5.js → cobol-BdhxDqSp.js} +1 -1
  27. package/codemini-web/dist/assets/{cobol-DcObg-T7.js → cobol-C67LYEki.js} +1 -1
  28. package/codemini-web/dist/assets/{coffee-B5QkIGo_.js → coffee-C_zREOQP.js} +1 -1
  29. package/codemini-web/dist/assets/{coffee-eHrF22jH.js → coffee-DYSdownS.js} +1 -1
  30. package/codemini-web/dist/assets/{cpp-hpmt0Dm0.js → cpp-BcL70P81.js} +1 -1
  31. package/codemini-web/dist/assets/{cpp-oPWeBIxQ.js → cpp-CmF4N5qy.js} +1 -1
  32. package/codemini-web/dist/assets/{crystal-CoivzC9J.js → crystal-CoqbT5f8.js} +1 -1
  33. package/codemini-web/dist/assets/{crystal-s_8obDZh.js → crystal-N7P3W5Mw.js} +1 -1
  34. package/codemini-web/dist/assets/{edge--dOGTygN.js → edge-DrMWCZ8c.js} +1 -1
  35. package/codemini-web/dist/assets/{edge-C-DECmFd.js → edge-DytV3yX5.js} +1 -1
  36. package/codemini-web/dist/assets/{elixir-9z9mJoua.js → elixir-BLpitXJw.js} +1 -1
  37. package/codemini-web/dist/assets/{elixir-D3BiPlt5.js → elixir-CNV7hmh2.js} +1 -1
  38. package/codemini-web/dist/assets/{elm-BuOfOpho.js → elm-C5ZqKzP8.js} +1 -1
  39. package/codemini-web/dist/assets/{elm-DjcEOkt6.js → elm-DuNA2Kle.js} +1 -1
  40. package/codemini-web/dist/assets/{erb-B6UlpZlF.js → erb-Cx6GPjju.js} +1 -1
  41. package/codemini-web/dist/assets/{erb-omHMX7PR.js → erb-CxvZayEs.js} +1 -1
  42. package/codemini-web/dist/assets/{erlang-DJdyEhn7.js → erlang-3or6Qr_S.js} +1 -1
  43. package/codemini-web/dist/assets/{erlang-l2na0rr-.js → erlang-CdOz9ruD.js} +1 -1
  44. package/codemini-web/dist/assets/{fortran-fixed-form-72xY_C5B.js → fortran-fixed-form-BmD2L0UY.js} +1 -1
  45. package/codemini-web/dist/assets/{fortran-fixed-form-Dyncprn4.js → fortran-fixed-form-Hy2szps7.js} +1 -1
  46. package/codemini-web/dist/assets/{fsharp-CAeGcLFg.js → fsharp-CgGHW39K.js} +1 -1
  47. package/codemini-web/dist/assets/{fsharp-D6WYKxtq.js → fsharp-DgKUr7h2.js} +1 -1
  48. package/codemini-web/dist/assets/{gdresource-Bac2fAQZ.js → gdresource-BqgTfeIa.js} +1 -1
  49. package/codemini-web/dist/assets/{gdresource-D9tlxSca.js → gdresource-D6abIutu.js} +1 -1
  50. package/codemini-web/dist/assets/{git-commit-BQ43t81h.js → git-commit-CPnaL3nl.js} +1 -1
  51. package/codemini-web/dist/assets/{git-commit-CDZnUqIF.js → git-commit-DBwdkqC2.js} +1 -1
  52. package/codemini-web/dist/assets/{git-rebase-CrM8c9uR.js → git-rebase-BVjWygdV.js} +1 -1
  53. package/codemini-web/dist/assets/{git-rebase-nf_-tAIT.js → git-rebase-CLt-2irw.js} +1 -1
  54. package/codemini-web/dist/assets/{glimmer-js-CmAPRjq-.js → glimmer-js-BhZXPPf_.js} +1 -1
  55. package/codemini-web/dist/assets/{glimmer-js-BG6a3MVV.js → glimmer-js-bG2aM9pf.js} +1 -1
  56. package/codemini-web/dist/assets/{glimmer-ts-WUsACCRt.js → glimmer-ts-BZwU8tUk.js} +1 -1
  57. package/codemini-web/dist/assets/{glimmer-ts-CQha3IIl.js → glimmer-ts-D6GU3-HZ.js} +1 -1
  58. package/codemini-web/dist/assets/{glsl-CAJiER_N.js → glsl-BZXoHx-5.js} +1 -1
  59. package/codemini-web/dist/assets/{glsl-CUfWCqOt.js → glsl-BsJMlsXZ.js} +1 -1
  60. package/codemini-web/dist/assets/{graphql-B-xWjhGC.js → graphql-Bzui-_oF.js} +1 -1
  61. package/codemini-web/dist/assets/{graphql-CufH1FQw.js → graphql-lozg2JzK.js} +1 -1
  62. package/codemini-web/dist/assets/{hack-6ZyX-jpl.js → hack-BIx3oBuG.js} +1 -1
  63. package/codemini-web/dist/assets/{hack-D9TV3mFw.js → hack-Dl73UNBo.js} +1 -1
  64. package/codemini-web/dist/assets/{haml-CXPCOKlR.js → haml-BL3Pq-bL.js} +1 -1
  65. package/codemini-web/dist/assets/{haml-zf3skXy8.js → haml-CvBskpbA.js} +1 -1
  66. package/codemini-web/dist/assets/{handlebars-BFZlhIIV.js → handlebars-Ca8Ew3WT.js} +1 -1
  67. package/codemini-web/dist/assets/{handlebars-BzLrTccQ.js → handlebars-Dl0DZ9iU.js} +1 -1
  68. package/codemini-web/dist/assets/{highlighted-body-OFNGDK62-BlOR-p_j.js → highlighted-body-OFNGDK62-CQS1PAvD.js} +1 -1
  69. package/codemini-web/dist/assets/{html-DLN1MsZQ.js → html-CCOAFbPU.js} +1 -1
  70. package/codemini-web/dist/assets/{html-CZRPtk7M.js → html-DFeJ4St6.js} +1 -1
  71. package/codemini-web/dist/assets/{html-derivative-DGaxN6Jm.js → html-derivative-BN80HtRR.js} +1 -1
  72. package/codemini-web/dist/assets/{html-derivative-Dryc40mO.js → html-derivative-BPYIQd1q.js} +1 -1
  73. package/codemini-web/dist/assets/{http-B3D7H2pi.js → http-BT0m2fV8.js} +1 -1
  74. package/codemini-web/dist/assets/{http-CD8xd_ys.js → http-BaSHFqsp.js} +1 -1
  75. package/codemini-web/dist/assets/{hurl-4R1-_fJo.js → hurl-Cu0t_0Ag.js} +1 -1
  76. package/codemini-web/dist/assets/{hurl-DhA9rL1f.js → hurl-QdCmCx_B.js} +1 -1
  77. package/codemini-web/dist/assets/{hxml-BNblpm3P.js → hxml-DlOl0PEf.js} +1 -1
  78. package/codemini-web/dist/assets/{hxml-y50fEZfK.js → hxml-IWjzRLpN.js} +1 -1
  79. package/codemini-web/dist/assets/index-D0EGtNPr.js +65 -0
  80. package/codemini-web/dist/assets/index-wOUf3WkN.css +2 -0
  81. package/codemini-web/dist/assets/{input-CNJXW0J8.js → input-CNQgbKe6.js} +1 -1
  82. package/codemini-web/dist/assets/{jinja-BGFo9cp_.js → jinja-Cnv9YtxF.js} +1 -1
  83. package/codemini-web/dist/assets/{jinja-CMJRtHk5.js → jinja-CzKj-PyV.js} +1 -1
  84. package/codemini-web/dist/assets/{jison-CjADtx7J.js → jison-CMHmT6Zn.js} +1 -1
  85. package/codemini-web/dist/assets/{jison-DZG53562.js → jison-V0queBoO.js} +1 -1
  86. package/codemini-web/dist/assets/{julia-CrDH-yy9.js → julia-D6Tp2lkv.js} +1 -1
  87. package/codemini-web/dist/assets/{julia-DGoXLnGd.js → julia-ssnM4-62.js} +1 -1
  88. package/codemini-web/dist/assets/{just-BV8ObQSd.js → just-BYVm1Mrm.js} +1 -1
  89. package/codemini-web/dist/assets/{just-bFDeah4I.js → just-DNL8d4mn.js} +1 -1
  90. package/codemini-web/dist/assets/{latex-DDcspDwa.js → latex--PKG7pkB.js} +1 -1
  91. package/codemini-web/dist/assets/{latex-DHgb1D3g.js → latex-BKz2_Nxu.js} +1 -1
  92. package/codemini-web/dist/assets/{lib-DQpX2ek0.js → lib-BOngVP_M.js} +1 -1
  93. package/codemini-web/dist/assets/{liquid-DY_Nh1yB.js → liquid-CmT9c2rW.js} +1 -1
  94. package/codemini-web/dist/assets/{liquid-CodJB6Oo.js → liquid-CnfwjcTC.js} +1 -1
  95. package/codemini-web/dist/assets/{lua-CSNL2IG5.js → lua-CG2sJZNs.js} +1 -1
  96. package/codemini-web/dist/assets/{lua-Mbb_FM_D.js → lua-D82-t9Zc.js} +1 -1
  97. package/codemini-web/dist/assets/{marko-CoJz_b4R.js → marko-BXWoQ9lL.js} +1 -1
  98. package/codemini-web/dist/assets/{marko-BtH_ko92.js → marko-CJF04FnX.js} +1 -1
  99. package/codemini-web/dist/assets/{mdc-U2Od-Be6.js → mdc-DjUuZ2FY.js} +1 -1
  100. package/codemini-web/dist/assets/{mdc-pc5Bd-NW.js → mdc-uFBHmEgm.js} +1 -1
  101. package/codemini-web/dist/assets/mermaid-GHXKKRXX-DrBu5KyC.js +1 -0
  102. package/codemini-web/dist/assets/{nextflow-C240AutA.js → nextflow-CK5HLJvq.js} +1 -1
  103. package/codemini-web/dist/assets/{nextflow-dLJhzX3Z.js → nextflow-S7dXFF9l.js} +1 -1
  104. package/codemini-web/dist/assets/{nginx-CeVyuhn6.js → nginx-3W9nM9y_.js} +1 -1
  105. package/codemini-web/dist/assets/{nginx-9UIFC5W_.js → nginx-BC64-3-i.js} +1 -1
  106. package/codemini-web/dist/assets/{nim-A60PrBkG.js → nim-DWppal1v.js} +1 -1
  107. package/codemini-web/dist/assets/{nim-DhQ1Hs8s.js → nim-x_81C3Qr.js} +1 -1
  108. package/codemini-web/dist/assets/{pencil-CARzRgk1.js → pencil-Ce_LFiEh.js} +1 -1
  109. package/codemini-web/dist/assets/{perl-BPmyA-C2.js → perl-C6Dd0zxb.js} +1 -1
  110. package/codemini-web/dist/assets/{perl-CA0CUhlR.js → perl-Drip2S24.js} +1 -1
  111. package/codemini-web/dist/assets/{php-aSpTH15w.js → php-9sDqPlZW.js} +1 -1
  112. package/codemini-web/dist/assets/{php-DFR1z6f_.js → php-BbiCqfrp.js} +1 -1
  113. package/codemini-web/dist/assets/{pug-DXmP4Dd5.js → pug-BYheLFcw.js} +1 -1
  114. package/codemini-web/dist/assets/{pug-2MsinVHa.js → pug-D4U6GWCU.js} +1 -1
  115. package/codemini-web/dist/assets/{qml-Cp-MkXo2.js → qml-C7Gvixtn.js} +1 -1
  116. package/codemini-web/dist/assets/{qml-Dmd77dfv.js → qml-D3LW5Eh4.js} +1 -1
  117. package/codemini-web/dist/assets/{razor-BH58TmZI.js → razor-CeMDYz78.js} +1 -1
  118. package/codemini-web/dist/assets/{razor-knNn5G4N.js → razor-wtlbOx1Y.js} +1 -1
  119. package/codemini-web/dist/assets/refresh-cw-BKL-AZu5.js +1 -0
  120. package/codemini-web/dist/assets/{rst-BkVCrdGo.js → rst-4NiHKVzB.js} +1 -1
  121. package/codemini-web/dist/assets/{rst-l2oLaq8i.js → rst-CUgtqtsm.js} +1 -1
  122. package/codemini-web/dist/assets/{ruby-B4GtprLK.js → ruby-DJfS371J.js} +1 -1
  123. package/codemini-web/dist/assets/{ruby-gJeF3z-Y.js → ruby-DQmpjmxU.js} +1 -1
  124. package/codemini-web/dist/assets/{sas-CTgoo8hu.js → sas-B3ML-BPY.js} +1 -1
  125. package/codemini-web/dist/assets/{sas-Dav6qQnM.js → sas-BXFb3Byc.js} +1 -1
  126. package/codemini-web/dist/assets/{scss-B8ysOo22.js → scss-By7PHVyf.js} +1 -1
  127. package/codemini-web/dist/assets/{scss-C8Gq31Qt.js → scss-CQGBghOa.js} +1 -1
  128. package/codemini-web/dist/assets/select-BZXfigic.js +1 -0
  129. package/codemini-web/dist/assets/{shaderlab-BaYU-HWs.js → shaderlab-Ds6Ob14m.js} +1 -1
  130. package/codemini-web/dist/assets/{shaderlab-CSb6CBXg.js → shaderlab-jhHUXThs.js} +1 -1
  131. package/codemini-web/dist/assets/{shellsession-Ms8iC_in.js → shellsession-1pj9xPto.js} +1 -1
  132. package/codemini-web/dist/assets/{shellsession-eIO2JTpk.js → shellsession-mbgkQZNs.js} +1 -1
  133. package/codemini-web/dist/assets/{soy-CnmcxzZM.js → soy-Brdxowwc.js} +1 -1
  134. package/codemini-web/dist/assets/{soy-U7sqkat1.js → soy-CyoIOmkE.js} +1 -1
  135. package/codemini-web/dist/assets/{sparql-DrRAT0nC.js → sparql-D050l-1j.js} +1 -1
  136. package/codemini-web/dist/assets/{sparql-J1VOnnwM.js → sparql-EV95tWuj.js} +1 -1
  137. package/codemini-web/dist/assets/{stata-C07HETWZ.js → stata-Cxm-fX20.js} +1 -1
  138. package/codemini-web/dist/assets/{stata-C84Azx6N.js → stata-rcB48Bwa.js} +1 -1
  139. package/codemini-web/dist/assets/{surrealql-CHm1_yMm.js → surrealql-BEIq2Ti9.js} +1 -1
  140. package/codemini-web/dist/assets/{surrealql-D_Sm2j7-.js → surrealql-C89H8_VG.js} +1 -1
  141. package/codemini-web/dist/assets/{svelte-BgklcIcA.js → svelte-DLivETBJ.js} +1 -1
  142. package/codemini-web/dist/assets/{svelte-UDeamd-l.js → svelte-DVuJzFhW.js} +1 -1
  143. package/codemini-web/dist/assets/{templ-C1aXNqxr.js → templ-DCO78tPK.js} +1 -1
  144. package/codemini-web/dist/assets/{templ-Dej5xCfm.js → templ-Dr4toWAi.js} +1 -1
  145. package/codemini-web/dist/assets/{tex-CwV6ECg2.js → tex-C26OlX33.js} +1 -1
  146. package/codemini-web/dist/assets/{tex-DqduegnD.js → tex-CAFucSbn.js} +1 -1
  147. package/codemini-web/dist/assets/{trash-2-BvANH-oV.js → trash-2-KmAlCwXd.js} +1 -1
  148. package/codemini-web/dist/assets/{ts-tags-jpfdYtbg.js → ts-tags-DXz1U_l8.js} +1 -1
  149. package/codemini-web/dist/assets/{ts-tags-JHISWk_W.js → ts-tags-DxtnKICy.js} +1 -1
  150. package/codemini-web/dist/assets/{twig-Co8p9s-G.js → twig-BOjawstu.js} +1 -1
  151. package/codemini-web/dist/assets/{twig-Cq6hSxza.js → twig-l2jHuCJP.js} +1 -1
  152. package/codemini-web/dist/assets/{vue-CopUaTTK.js → vue-DTExrAHq.js} +1 -1
  153. package/codemini-web/dist/assets/{vue-CL6MdYNh.js → vue-d4Ps-pL3.js} +1 -1
  154. package/codemini-web/dist/assets/{vue-html-BJ2qlvpA.js → vue-html-Cc_wxOgn.js} +1 -1
  155. package/codemini-web/dist/assets/{vue-html-BkstOd36.js → vue-html-DF9b1rb0.js} +1 -1
  156. package/codemini-web/dist/assets/{vue-vine-BpJg_Jgw.js → vue-vine-A_lRwVWt.js} +1 -1
  157. package/codemini-web/dist/assets/{vue-vine-kdYS8aKZ.js → vue-vine-BDiNGm6C.js} +1 -1
  158. package/codemini-web/dist/assets/{xml-BVIbPGAO.js → xml-BUsFQ36n.js} +1 -1
  159. package/codemini-web/dist/assets/{xml-Cd8Ewme9.js → xml-DDsJXW9N.js} +1 -1
  160. package/codemini-web/dist/assets/{xsl-DsYdc3fS.js → xsl-DjgS9HxR.js} +1 -1
  161. package/codemini-web/dist/assets/{xsl-JOQu_a5N.js → xsl-TnKTzvHo.js} +1 -1
  162. package/codemini-web/dist/index.html +2 -2
  163. package/codemini-web/server.js +450 -311
  164. package/package.json +1 -1
  165. package/src/core/command-policy.js +73 -23
  166. package/src/core/tools.js +70 -35
  167. package/codemini-web/dist/assets/CodeWikiPanel-BjI4vz9H.js +0 -1
  168. package/codemini-web/dist/assets/ConfigDialog-hxEIuIXJ.js +0 -1
  169. package/codemini-web/dist/assets/ProjectSelector-CjE9gbEY.js +0 -1
  170. package/codemini-web/dist/assets/SkillDialog-CpX5c2q5.js +0 -6
  171. package/codemini-web/dist/assets/SoulDialog-5ZMpAJl3.js +0 -1
  172. package/codemini-web/dist/assets/index-BkhgO3hd.js +0 -65
  173. package/codemini-web/dist/assets/index-COyr1sc3.css +0 -2
  174. package/codemini-web/dist/assets/mermaid-GHXKKRXX-DV0jg4UB.js +0 -1
  175. package/codemini-web/dist/assets/select-BQ3BvnG8.js +0 -1
  176. /package/codemini-web/dist/assets/{abap-8gQxhw9X.js → abap-B7RnWQOG.js} +0 -0
  177. /package/codemini-web/dist/assets/{abap-DKGmjV0m.js → abap-NDM6s5zQ.js} +0 -0
  178. /package/codemini-web/dist/assets/{actionscript-3-Bvx2-wHH.js → actionscript-3-C9nBr3Mh.js} +0 -0
  179. /package/codemini-web/dist/assets/{actionscript-3-PQHI9sRP.js → actionscript-3-CRl2BRXz.js} +0 -0
  180. /package/codemini-web/dist/assets/{ada-7dCRqcEc.js → ada-BCQmYIk6.js} +0 -0
  181. /package/codemini-web/dist/assets/{ada-DXyixiJc.js → ada-CySgk42_.js} +0 -0
  182. /package/codemini-web/dist/assets/{andromeeda-CvHLbWZU.js → andromeeda-Bnm9WW1a.js} +0 -0
  183. /package/codemini-web/dist/assets/{andromeeda-D2bWTgXr.js → andromeeda-szAb-NZx.js} +0 -0
  184. /package/codemini-web/dist/assets/{apache-DuwFT_ko.js → apache-B22kDdQt.js} +0 -0
  185. /package/codemini-web/dist/assets/{apache-r4zD7Rt3.js → apache-CQgWNR0K.js} +0 -0
  186. /package/codemini-web/dist/assets/{apex-D3aemokf.js → apex-BkGtsu4e.js} +0 -0
  187. /package/codemini-web/dist/assets/{apex-ZrILV9y9.js → apex-CFa_x2c9.js} +0 -0
  188. /package/codemini-web/dist/assets/{applescript-B2uvrvew.js → applescript-CCGt--QU.js} +0 -0
  189. /package/codemini-web/dist/assets/{applescript-QewDI2Hm.js → applescript-Cb-r3lIv.js} +0 -0
  190. /package/codemini-web/dist/assets/{ara-CAKYVeDX.js → ara-CJYv1XlV.js} +0 -0
  191. /package/codemini-web/dist/assets/{ara-bfzpmn9d.js → ara-DKlv0ib1.js} +0 -0
  192. /package/codemini-web/dist/assets/{asciidoc-CN-ydgfB.js → asciidoc-BUOdyOiP.js} +0 -0
  193. /package/codemini-web/dist/assets/{asciidoc-xYtH5EEV.js → asciidoc-DxgPoKvx.js} +0 -0
  194. /package/codemini-web/dist/assets/{asm-DsgOTp4c.js → asm-2LyQSByb.js} +0 -0
  195. /package/codemini-web/dist/assets/{asm-DuNyKkDV.js → asm-BVk_pKLT.js} +0 -0
  196. /package/codemini-web/dist/assets/{aurora-x-CUFqx0Kt.js → aurora-x-B7Ot8iN2.js} +0 -0
  197. /package/codemini-web/dist/assets/{aurora-x-mlfFqJAh.js → aurora-x-DfOR6O80.js} +0 -0
  198. /package/codemini-web/dist/assets/{awk-BDSWDVpS.js → awk-CRf4hi6L.js} +0 -0
  199. /package/codemini-web/dist/assets/{awk-DETgsRcQ.js → awk-adfNbTQc.js} +0 -0
  200. /package/codemini-web/dist/assets/{ayu-dark-BTeHke7b.js → ayu-dark-ADZF52JZ.js} +0 -0
  201. /package/codemini-web/dist/assets/{ayu-dark-tcpgNy3s.js → ayu-dark-CqtoqjuU.js} +0 -0
  202. /package/codemini-web/dist/assets/{ayu-light-B3O22CFD.js → ayu-light-CMMeLqXc.js} +0 -0
  203. /package/codemini-web/dist/assets/{ayu-light-CoZXvb4i.js → ayu-light-OVSih2Vp.js} +0 -0
  204. /package/codemini-web/dist/assets/{ayu-mirage-DkAXwBmm.js → ayu-mirage-BCL1vSWF.js} +0 -0
  205. /package/codemini-web/dist/assets/{ayu-mirage-DlGy8b5I.js → ayu-mirage-BZvrYN67.js} +0 -0
  206. /package/codemini-web/dist/assets/{ballerina-Dj9SHEWp.js → ballerina-D3rdtcDY.js} +0 -0
  207. /package/codemini-web/dist/assets/{ballerina-eIQtFtZN.js → ballerina-G1jH5Moz.js} +0 -0
  208. /package/codemini-web/dist/assets/{bat-DVPhDFws.js → bat-BRck8_tt.js} +0 -0
  209. /package/codemini-web/dist/assets/{bat-Dr7SKqI2.js → bat-CHXtPpft.js} +0 -0
  210. /package/codemini-web/dist/assets/{beancount-C5lGUCpK.js → beancount-CvA0H4kE.js} +0 -0
  211. /package/codemini-web/dist/assets/{beancount-DRh4LoEp.js → beancount-EfboDiXG.js} +0 -0
  212. /package/codemini-web/dist/assets/{berry-BJPWN0aG.js → berry-CnzAF9lD.js} +0 -0
  213. /package/codemini-web/dist/assets/{berry-C-53c7Cz.js → berry-DAhQzFBm.js} +0 -0
  214. /package/codemini-web/dist/assets/{bibtex-BXZl-zGT.js → bibtex-CYUaqfOv.js} +0 -0
  215. /package/codemini-web/dist/assets/{bibtex-c-0Qlbu0.js → bibtex-CanpD3m2.js} +0 -0
  216. /package/codemini-web/dist/assets/{bicep-CCk_fREF.js → bicep-Cc0u08ve.js} +0 -0
  217. /package/codemini-web/dist/assets/{bicep-DUhze7H3.js → bicep-JoteVAmD.js} +0 -0
  218. /package/codemini-web/dist/assets/{bird2-D_94N4Us.js → bird2-BmGSmafQ.js} +0 -0
  219. /package/codemini-web/dist/assets/{bird2-DIkIj7Bl.js → bird2-CUmLoLjb.js} +0 -0
  220. /package/codemini-web/dist/assets/{c-6DvQDc19.js → c-Ce4Vw5YJ.js} +0 -0
  221. /package/codemini-web/dist/assets/{c-C6aegu_R.js → c-DKLNAy6n.js} +0 -0
  222. /package/codemini-web/dist/assets/{c3-CUFd2ak_.js → c3-Bld9q8eN.js} +0 -0
  223. /package/codemini-web/dist/assets/{c3-_P-DNRtg.js → c3-Cp6mH0y7.js} +0 -0
  224. /package/codemini-web/dist/assets/{cadence-CRyyaA0J.js → cadence-CAWv0bgn.js} +0 -0
  225. /package/codemini-web/dist/assets/{cadence-zuA3Lqsu.js → cadence-_3OaglmQ.js} +0 -0
  226. /package/codemini-web/dist/assets/{catppuccin-frappe-C4xh_RpD.js → catppuccin-frappe-Dn0XJ8jj.js} +0 -0
  227. /package/codemini-web/dist/assets/{catppuccin-frappe-CptwRcV-.js → catppuccin-frappe-gRmOBxIl.js} +0 -0
  228. /package/codemini-web/dist/assets/{catppuccin-latte-B5zTan83.js → catppuccin-latte-CNKGC9SI.js} +0 -0
  229. /package/codemini-web/dist/assets/{catppuccin-latte-ZIzlVBYe.js → catppuccin-latte-D25Kwd8S.js} +0 -0
  230. /package/codemini-web/dist/assets/{catppuccin-macchiato-D9kD7BY6.js → catppuccin-macchiato-Bc6w_RYC.js} +0 -0
  231. /package/codemini-web/dist/assets/{catppuccin-macchiato-DOZXEuSH.js → catppuccin-macchiato-CjoU0lf6.js} +0 -0
  232. /package/codemini-web/dist/assets/{catppuccin-mocha-DJlDggGb.js → catppuccin-mocha-DQ4pZxz-.js} +0 -0
  233. /package/codemini-web/dist/assets/{catppuccin-mocha-rnm_6i_u.js → catppuccin-mocha-Di4PH8Ri.js} +0 -0
  234. /package/codemini-web/dist/assets/{clarity-CRWl5goA.js → clarity-BnHuUVUS.js} +0 -0
  235. /package/codemini-web/dist/assets/{clarity-Dp-fzxYs.js → clarity-CVKtZWJu.js} +0 -0
  236. /package/codemini-web/dist/assets/{clojure-85kagXuc.js → clojure-BBjzfV1L.js} +0 -0
  237. /package/codemini-web/dist/assets/{clojure-Dva5KkQZ.js → clojure-C4w8xKrn.js} +0 -0
  238. /package/codemini-web/dist/assets/{cmake-5KZO_J3V.js → cmake-Dn2uxUrm.js} +0 -0
  239. /package/codemini-web/dist/assets/{cmake-BLlH-zTC.js → cmake-DuxpWyxB.js} +0 -0
  240. /package/codemini-web/dist/assets/{codeowners-CwITHnrC.js → codeowners-BK44uU1e.js} +0 -0
  241. /package/codemini-web/dist/assets/{codeowners-EEO8moZM.js → codeowners-BYgLRiPG.js} +0 -0
  242. /package/codemini-web/dist/assets/{codeql-C3IPOiKP.js → codeql-DmJo4bmm.js} +0 -0
  243. /package/codemini-web/dist/assets/{codeql-DsuZZPKs.js → codeql-comBgh3D.js} +0 -0
  244. /package/codemini-web/dist/assets/{common-lisp-DQj0fa1s.js → common-lisp-BKAyevA0.js} +0 -0
  245. /package/codemini-web/dist/assets/{common-lisp-DtIqam2P.js → common-lisp-xmwdM7sj.js} +0 -0
  246. /package/codemini-web/dist/assets/{coq-BGPtnnb4.js → coq-D004aLp-.js} +0 -0
  247. /package/codemini-web/dist/assets/{coq-CcjGcL2N.js → coq-DsaqZ5gv.js} +0 -0
  248. /package/codemini-web/dist/assets/{csharp-Bz4y1fn8.js → csharp-B1bok3CS.js} +0 -0
  249. /package/codemini-web/dist/assets/{csharp-CvOkmYFZ.js → csharp-BJRWJrkS.js} +0 -0
  250. /package/codemini-web/dist/assets/{css-DsnEBqY_.js → css-D2Zgfenk.js} +0 -0
  251. /package/codemini-web/dist/assets/{css-Cqx-Zivz.js → css-DI4Ka_1L.js} +0 -0
  252. /package/codemini-web/dist/assets/{csv-92JdhrVb.js → csv-BsMY8_5o.js} +0 -0
  253. /package/codemini-web/dist/assets/{csv-Cz8IGB-r.js → csv-Cx2EO4hN.js} +0 -0
  254. /package/codemini-web/dist/assets/{cue-BAtFpXsn.js → cue-5NODdLLQ.js} +0 -0
  255. /package/codemini-web/dist/assets/{cue-DO5iBckt.js → cue-BFvpulfw.js} +0 -0
  256. /package/codemini-web/dist/assets/{cypher-DrFFccaV.js → cypher-CloxltJj.js} +0 -0
  257. /package/codemini-web/dist/assets/{cypher-Dt0SBufN.js → cypher-DwXduOcz.js} +0 -0
  258. /package/codemini-web/dist/assets/{d-BIzkfvy1.js → d-ByN-nCZx.js} +0 -0
  259. /package/codemini-web/dist/assets/{d-POAmrdpL.js → d-D90yV2l6.js} +0 -0
  260. /package/codemini-web/dist/assets/{dark-plus-Ci223Kw7.js → dark-plus-BRQ4k4kr.js} +0 -0
  261. /package/codemini-web/dist/assets/{dark-plus-D-icMr_O.js → dark-plus-CmLXU_Iq.js} +0 -0
  262. /package/codemini-web/dist/assets/{dart-BA_zGMIh.js → dart-BL-Rg8Jo.js} +0 -0
  263. /package/codemini-web/dist/assets/{dart-Cv4z4sEx.js → dart-jaYeqpH7.js} +0 -0
  264. /package/codemini-web/dist/assets/{dax-CArXkuXO.js → dax-CQDoOssZ.js} +0 -0
  265. /package/codemini-web/dist/assets/{dax-Cw_LNvcO.js → dax-DfINWKOM.js} +0 -0
  266. /package/codemini-web/dist/assets/{desktop-BRifweK7.js → desktop-DssJfs2S.js} +0 -0
  267. /package/codemini-web/dist/assets/{desktop-B_uWbpWi.js → desktop-wuqAc75y.js} +0 -0
  268. /package/codemini-web/dist/assets/{diff-CTnn6Hu3.js → diff-BYMwyQmB.js} +0 -0
  269. /package/codemini-web/dist/assets/{diff-pSjjL-ZH.js → diff-DGLbp6Xl.js} +0 -0
  270. /package/codemini-web/dist/assets/{docker-D0ufKJwE.js → docker-B7aZDRTU.js} +0 -0
  271. /package/codemini-web/dist/assets/{docker-r0L9bSzI.js → docker-CfFDSeZZ.js} +0 -0
  272. /package/codemini-web/dist/assets/{dotenv-BKm_YkX-.js → dotenv-D3KyAIK0.js} +0 -0
  273. /package/codemini-web/dist/assets/{dotenv-DU-Uz6AA.js → dotenv-DVXB2U9o.js} +0 -0
  274. /package/codemini-web/dist/assets/{dracula-BkVbNmMW.js → dracula-6-t2eOMW.js} +0 -0
  275. /package/codemini-web/dist/assets/{dracula-C5lq8I7X.js → dracula-Dix5im8F.js} +0 -0
  276. /package/codemini-web/dist/assets/{dracula-soft-Benyby8y.js → dracula-soft-B4TZzIlp.js} +0 -0
  277. /package/codemini-web/dist/assets/{dracula-soft-QH3ntlSU.js → dracula-soft-DnrYBWgV.js} +0 -0
  278. /package/codemini-web/dist/assets/{dream-maker-Cp0hXi31.js → dream-maker-CaguOgbF.js} +0 -0
  279. /package/codemini-web/dist/assets/{dream-maker-DE3sVgWW.js → dream-maker-CjPuR0vx.js} +0 -0
  280. /package/codemini-web/dist/assets/{emacs-lisp-aMjKKeFP.js → emacs-lisp-BHg7FqFZ.js} +0 -0
  281. /package/codemini-web/dist/assets/{emacs-lisp-H4-vgzf_.js → emacs-lisp-BosL1Ugg.js} +0 -0
  282. /package/codemini-web/dist/assets/{everforest-dark-CDp5hxXO.js → everforest-dark-B4IVVaS6.js} +0 -0
  283. /package/codemini-web/dist/assets/{everforest-dark-KTiMpaXm.js → everforest-dark-DwEzvfit.js} +0 -0
  284. /package/codemini-web/dist/assets/{everforest-light-vtFhxTqx.js → everforest-light-CNoEiPUu.js} +0 -0
  285. /package/codemini-web/dist/assets/{everforest-light-yJZ9a76P.js → everforest-light-DnQkIdPL.js} +0 -0
  286. /package/codemini-web/dist/assets/{fennel-Bruivvq3.js → fennel-BiQcbtTd.js} +0 -0
  287. /package/codemini-web/dist/assets/{fennel-DNMUz8BE.js → fennel-DG6hK7z2.js} +0 -0
  288. /package/codemini-web/dist/assets/{fish-C44z9fhZ.js → fish-D3-ok12J.js} +0 -0
  289. /package/codemini-web/dist/assets/{fish-CaGhpV7s.js → fish-_zY__9L4.js} +0 -0
  290. /package/codemini-web/dist/assets/{fluent-BsmQk-nO.js → fluent-BBz3hVA9.js} +0 -0
  291. /package/codemini-web/dist/assets/{fluent-d_qH0cYL.js → fluent-CrjXrDzk.js} +0 -0
  292. /package/codemini-web/dist/assets/{fortran-free-form-B9mY58s0.js → fortran-free-form-Cyk1FB1e.js} +0 -0
  293. /package/codemini-web/dist/assets/{fortran-free-form-DYzg4zHf.js → fortran-free-form-Db24aQuN.js} +0 -0
  294. /package/codemini-web/dist/assets/{gdscript-B_WUGHIs.js → gdscript-CxxY7zMa.js} +0 -0
  295. /package/codemini-web/dist/assets/{gdscript-xj-VlIRU.js → gdscript-_NYgB0-E.js} +0 -0
  296. /package/codemini-web/dist/assets/{gdshader-BR6nyn6z.js → gdshader-Bhkdknye.js} +0 -0
  297. /package/codemini-web/dist/assets/{gdshader-BbYnAK14.js → gdshader-W85lNgcx.js} +0 -0
  298. /package/codemini-web/dist/assets/{genie-CNeJKHWH.js → genie-2WOhOayX.js} +0 -0
  299. /package/codemini-web/dist/assets/{genie-CW-a1unw.js → genie-C6BJUbST.js} +0 -0
  300. /package/codemini-web/dist/assets/{gherkin-By4Zv-ZP.js → gherkin-BsQJenZD.js} +0 -0
  301. /package/codemini-web/dist/assets/{gherkin-D8z0Dn14.js → gherkin-BzYX5w19.js} +0 -0
  302. /package/codemini-web/dist/assets/{github-dark-BLlNbGxe.js → github-dark-DH2_Q6FX.js} +0 -0
  303. /package/codemini-web/dist/assets/{github-dark-default-DPZ1YWUU.js → github-dark-default-B2Oq-dUJ.js} +0 -0
  304. /package/codemini-web/dist/assets/{github-dark-default-XYu-6ww7.js → github-dark-default-DTF8deNx.js} +0 -0
  305. /package/codemini-web/dist/assets/{github-dark-dimmed-BlMwpJVf.js → github-dark-dimmed-BvtnYOMy.js} +0 -0
  306. /package/codemini-web/dist/assets/{github-dark-dimmed-XAi8Eb3C.js → github-dark-dimmed-D0X0LfLF.js} +0 -0
  307. /package/codemini-web/dist/assets/{github-dark-C2YvJIRl.js → github-dark-fr8BfBxZ.js} +0 -0
  308. /package/codemini-web/dist/assets/{github-dark-high-contrast-D86iyx7L.js → github-dark-high-contrast-BAQfalyp.js} +0 -0
  309. /package/codemini-web/dist/assets/{github-dark-high-contrast-KRBg57oP.js → github-dark-high-contrast-CQhqa0EF.js} +0 -0
  310. /package/codemini-web/dist/assets/{github-light-BLj5WXD_.js → github-light-CEqFW-kl.js} +0 -0
  311. /package/codemini-web/dist/assets/{github-light-default-BLgrdOV4.js → github-light-default-9rPElOua.js} +0 -0
  312. /package/codemini-web/dist/assets/{github-light-default-BzOWmaf-.js → github-light-default-Co9J0YT2.js} +0 -0
  313. /package/codemini-web/dist/assets/{github-light-high-contrast-Bm3JPX7v.js → github-light-high-contrast-BFww7Aed.js} +0 -0
  314. /package/codemini-web/dist/assets/{github-light-high-contrast-Bmexxccr.js → github-light-high-contrast-Drx2T_ea.js} +0 -0
  315. /package/codemini-web/dist/assets/{github-light-DxDzpZWY.js → github-light-t2gQwbnC.js} +0 -0
  316. /package/codemini-web/dist/assets/{gleam-BtOZgVle.js → gleam-BjFNd70h.js} +0 -0
  317. /package/codemini-web/dist/assets/{gleam-Lf_XYEK-.js → gleam-_RSzgxb1.js} +0 -0
  318. /package/codemini-web/dist/assets/{gn-CY4VHHa6.js → gn-BlAV1bS1.js} +0 -0
  319. /package/codemini-web/dist/assets/{gn-JO9YMz2t.js → gn-MXj_EEiV.js} +0 -0
  320. /package/codemini-web/dist/assets/{gnuplot-DjZHg3_f.js → gnuplot-BTJRjb2O.js} +0 -0
  321. /package/codemini-web/dist/assets/{gnuplot-MPAbQV9r.js → gnuplot-C40vWoS_.js} +0 -0
  322. /package/codemini-web/dist/assets/{go-D2GlBE5F.js → go-B2Qj-jpc.js} +0 -0
  323. /package/codemini-web/dist/assets/{go-C6ThH8Hx.js → go-BF9dg2tN.js} +0 -0
  324. /package/codemini-web/dist/assets/{groovy-1vEGAvvX.js → groovy-42TXi0JD.js} +0 -0
  325. /package/codemini-web/dist/assets/{groovy-C_xCWdb_.js → groovy-YtV4YqmI.js} +0 -0
  326. /package/codemini-web/dist/assets/{gruvbox-dark-hard-DHhjEKTi.js → gruvbox-dark-hard-DN_E1XFW.js} +0 -0
  327. /package/codemini-web/dist/assets/{gruvbox-dark-hard-pdBjrsK5.js → gruvbox-dark-hard-DaxQoAo9.js} +0 -0
  328. /package/codemini-web/dist/assets/{gruvbox-dark-medium-CL0I2zDn.js → gruvbox-dark-medium-CR6ynfxn.js} +0 -0
  329. /package/codemini-web/dist/assets/{gruvbox-dark-medium-Csp4lPEF.js → gruvbox-dark-medium-xNyLsUVI.js} +0 -0
  330. /package/codemini-web/dist/assets/{gruvbox-dark-soft-BpNWvgik.js → gruvbox-dark-soft-CrCUBJhA.js} +0 -0
  331. /package/codemini-web/dist/assets/{gruvbox-dark-soft-Dy9vkRG2.js → gruvbox-dark-soft-QoKQNR_B.js} +0 -0
  332. /package/codemini-web/dist/assets/{gruvbox-light-hard-CC8CVJp5.js → gruvbox-light-hard-BqLHNay_.js} +0 -0
  333. /package/codemini-web/dist/assets/{gruvbox-light-hard-DO2pUUQV.js → gruvbox-light-hard-C3-JuKAe.js} +0 -0
  334. /package/codemini-web/dist/assets/{gruvbox-light-medium-B_nBvpHM.js → gruvbox-light-medium-676URJw_.js} +0 -0
  335. /package/codemini-web/dist/assets/{gruvbox-light-medium-D2yGUmJd.js → gruvbox-light-medium-86kxSNhL.js} +0 -0
  336. /package/codemini-web/dist/assets/{gruvbox-light-soft-C_9RTTTT.js → gruvbox-light-soft-BGpHIYJO.js} +0 -0
  337. /package/codemini-web/dist/assets/{gruvbox-light-soft-DuLKkKFi.js → gruvbox-light-soft-ByoztTEu.js} +0 -0
  338. /package/codemini-web/dist/assets/{haskell-BFZjB68l.js → haskell-C5VEzHiR.js} +0 -0
  339. /package/codemini-web/dist/assets/{haskell-DfX5asxK.js → haskell-KyntJ58h.js} +0 -0
  340. /package/codemini-web/dist/assets/{haxe-DDQKctJt.js → haxe-Bnka4w1v.js} +0 -0
  341. /package/codemini-web/dist/assets/{haxe-Me-TWuvr.js → haxe-DxCG7g2C.js} +0 -0
  342. /package/codemini-web/dist/assets/{hcl-DUAADz_v.js → hcl-B-KEcm-b.js} +0 -0
  343. /package/codemini-web/dist/assets/{hcl-Ry3nZWbt.js → hcl-nG8lPt58.js} +0 -0
  344. /package/codemini-web/dist/assets/{hjson-CGFDmpMn.js → hjson-BUjIWbox.js} +0 -0
  345. /package/codemini-web/dist/assets/{hjson-DyGphq4K.js → hjson-KcqWy6wG.js} +0 -0
  346. /package/codemini-web/dist/assets/{hlsl-BKWZVvKK.js → hlsl-CU9ay1Rj.js} +0 -0
  347. /package/codemini-web/dist/assets/{hlsl-BVEJlW36.js → hlsl-CblrQXA-.js} +0 -0
  348. /package/codemini-web/dist/assets/{horizon-BZmYXqIF.js → horizon-BDDUNMOh.js} +0 -0
  349. /package/codemini-web/dist/assets/{horizon-D3wQTjs_.js → horizon-MuIr_z-n.js} +0 -0
  350. /package/codemini-web/dist/assets/{horizon-bright-D0uooZm5.js → horizon-bright-Km86OX7k.js} +0 -0
  351. /package/codemini-web/dist/assets/{horizon-bright-Cfh8ud4W.js → horizon-bright-QtrMcZM-.js} +0 -0
  352. /package/codemini-web/dist/assets/{houston-BUtcOxf9.js → houston-CnK3oLKP.js} +0 -0
  353. /package/codemini-web/dist/assets/{houston-CGv9NbgY.js → houston-L6-nhcqy.js} +0 -0
  354. /package/codemini-web/dist/assets/{hy-BqI2sCU2.js → hy-9kqolRdI.js} +0 -0
  355. /package/codemini-web/dist/assets/{hy-oWi_RwAK.js → hy-V3ipcBGo.js} +0 -0
  356. /package/codemini-web/dist/assets/{imba-DnUn0wai.js → imba-AWBATAYY.js} +0 -0
  357. /package/codemini-web/dist/assets/{imba-iwzgkuTD.js → imba-rkedaZRd.js} +0 -0
  358. /package/codemini-web/dist/assets/{ini-BNaakZQr.js → ini-BIn__beW.js} +0 -0
  359. /package/codemini-web/dist/assets/{ini-DMV_1xp9.js → ini-P5JLg6LV.js} +0 -0
  360. /package/codemini-web/dist/assets/{java-CTslCthB.js → java-Bb7gkEG1.js} +0 -0
  361. /package/codemini-web/dist/assets/{java-DbkCw8gs.js → java-X5SW6zDn.js} +0 -0
  362. /package/codemini-web/dist/assets/{javascript-BzJBge5U.js → javascript-Cn8UGaJe.js} +0 -0
  363. /package/codemini-web/dist/assets/{javascript-DqHURDA-.js → javascript-DHaqiI3u.js} +0 -0
  364. /package/codemini-web/dist/assets/{json-Cu3T5nD7.js → json-BlCKYbAr.js} +0 -0
  365. /package/codemini-web/dist/assets/{json-DZN6rfPx.js → json-Yl_wWztW.js} +0 -0
  366. /package/codemini-web/dist/assets/{json5-DSzj6NCq.js → json5-B3B8AE2U.js} +0 -0
  367. /package/codemini-web/dist/assets/{json5-Y2CuQCK-.js → json5-Cj9weIvR.js} +0 -0
  368. /package/codemini-web/dist/assets/{jsonc-B30nqSUF.js → jsonc-COLeM0mA.js} +0 -0
  369. /package/codemini-web/dist/assets/{jsonc-DwzKY8NT.js → jsonc-CwVZHrLL.js} +0 -0
  370. /package/codemini-web/dist/assets/{jsonl-B7UEa0TN.js → jsonl-CfYcxfNz.js} +0 -0
  371. /package/codemini-web/dist/assets/{jsonl-C8L12LZq.js → jsonl-my2EVZQF.js} +0 -0
  372. /package/codemini-web/dist/assets/{jsonnet-DYAV3b_U.js → jsonnet-B351KcBZ.js} +0 -0
  373. /package/codemini-web/dist/assets/{jsonnet-ZiCJB3SD.js → jsonnet-Cg2yxMWZ.js} +0 -0
  374. /package/codemini-web/dist/assets/{jssm-6UFVEBGg.js → jssm-CVNVxyp8.js} +0 -0
  375. /package/codemini-web/dist/assets/{jssm-BOfC2rh1.js → jssm-f9sZK7il.js} +0 -0
  376. /package/codemini-web/dist/assets/{jsx-AgmFDCOF.js → jsx-C-BZR9Er.js} +0 -0
  377. /package/codemini-web/dist/assets/{jsx-BEmZt5uE.js → jsx-mn0xQF_s.js} +0 -0
  378. /package/codemini-web/dist/assets/{kanagawa-dragon-BVoApXR6.js → kanagawa-dragon-Bg-BKRuP.js} +0 -0
  379. /package/codemini-web/dist/assets/{kanagawa-dragon-DF1o80wl.js → kanagawa-dragon-qidiS05d.js} +0 -0
  380. /package/codemini-web/dist/assets/{kanagawa-lotus-BkVGQkvY.js → kanagawa-lotus-CVGoMXw8.js} +0 -0
  381. /package/codemini-web/dist/assets/{kanagawa-lotus-C-uV5im6.js → kanagawa-lotus-DCJgGK2A.js} +0 -0
  382. /package/codemini-web/dist/assets/{kanagawa-wave-BizPisns.js → kanagawa-wave-CVz5XkfW.js} +0 -0
  383. /package/codemini-web/dist/assets/{kanagawa-wave-Cl5W2OPg.js → kanagawa-wave-CuNbEAGB.js} +0 -0
  384. /package/codemini-web/dist/assets/{kdl-BCaiqQ4X.js → kdl-B2a5Hdo5.js} +0 -0
  385. /package/codemini-web/dist/assets/{kdl-Bg7xxjIF.js → kdl-CmBtNZAQ.js} +0 -0
  386. /package/codemini-web/dist/assets/{kotlin-CNprttl8.js → kotlin-BgCroCiE.js} +0 -0
  387. /package/codemini-web/dist/assets/{kotlin-DRaoVNCW.js → kotlin-CwntYu9G.js} +0 -0
  388. /package/codemini-web/dist/assets/{kusto-CW62F42W.js → kusto-Dto5Mt8f.js} +0 -0
  389. /package/codemini-web/dist/assets/{kusto-D3uRUZFA.js → kusto-DzqQhEgS.js} +0 -0
  390. /package/codemini-web/dist/assets/{laserwave-B1sGpeV2.js → laserwave-Bf5KiZGG.js} +0 -0
  391. /package/codemini-web/dist/assets/{laserwave-BypMvj8s.js → laserwave-DqmURGYs.js} +0 -0
  392. /package/codemini-web/dist/assets/{lean-BbKKg8_U.js → lean-CLemLjY9.js} +0 -0
  393. /package/codemini-web/dist/assets/{lean-CYwit69O.js → lean-bStt-IHo.js} +0 -0
  394. /package/codemini-web/dist/assets/{less-6BW8xQaX.js → less-Dycz37IB.js} +0 -0
  395. /package/codemini-web/dist/assets/{less-CMYX9LBx.js → less-_4Z4Zbgj.js} +0 -0
  396. /package/codemini-web/dist/assets/{lib-Dj6FJSN8.js → lib-DrOTTm_N.js} +0 -0
  397. /package/codemini-web/dist/assets/{light-plus-CytNlrnF.js → light-plus-BISup5vO.js} +0 -0
  398. /package/codemini-web/dist/assets/{light-plus-zSYF2DYe.js → light-plus-CUPZt_vJ.js} +0 -0
  399. /package/codemini-web/dist/assets/{llvm-BFcvUor4.js → llvm-B3vA1z1w.js} +0 -0
  400. /package/codemini-web/dist/assets/{llvm-OMExIg60.js → llvm-DAbx5jqK.js} +0 -0
  401. /package/codemini-web/dist/assets/{log-BBfW4u9k.js → log-BRjeW2DW.js} +0 -0
  402. /package/codemini-web/dist/assets/{log-BrS0_Y6P.js → log-CM4eTPwH.js} +0 -0
  403. /package/codemini-web/dist/assets/{logo-D8GGcRiY.js → logo-DCYIDlXZ.js} +0 -0
  404. /package/codemini-web/dist/assets/{logo-L3bKRswG.js → logo-Dyx9NcGm.js} +0 -0
  405. /package/codemini-web/dist/assets/{luau-B-E69GSh.js → luau-B3LrvOEt.js} +0 -0
  406. /package/codemini-web/dist/assets/{luau-CZIl0XK4.js → luau-BJOxIq3l.js} +0 -0
  407. /package/codemini-web/dist/assets/{make-CA9NajZk.js → make-Bep3F-fA.js} +0 -0
  408. /package/codemini-web/dist/assets/{make-mlZyflos.js → make-BmHGvFNV.js} +0 -0
  409. /package/codemini-web/dist/assets/{markdown-CppElJDR.js → markdown-BObkjWCp.js} +0 -0
  410. /package/codemini-web/dist/assets/{markdown-DkXb8qKc.js → markdown-qxcI0Ex1.js} +0 -0
  411. /package/codemini-web/dist/assets/{material-theme-BYnCtUED.js → material-theme-DfbSys7S.js} +0 -0
  412. /package/codemini-web/dist/assets/{material-theme-darker-BNfFk916.js → material-theme-darker-CXzTJODk.js} +0 -0
  413. /package/codemini-web/dist/assets/{material-theme-darker-s0o-qH0l.js → material-theme-darker-DM1OIivA.js} +0 -0
  414. /package/codemini-web/dist/assets/{material-theme-OBz0sIMu.js → material-theme-jZt3rhQh.js} +0 -0
  415. /package/codemini-web/dist/assets/{material-theme-lighter-BXApD6tt.js → material-theme-lighter-C7qz3G7H.js} +0 -0
  416. /package/codemini-web/dist/assets/{material-theme-lighter-D0OJsx_T.js → material-theme-lighter-HtgpH1FU.js} +0 -0
  417. /package/codemini-web/dist/assets/{material-theme-ocean-CKWC7YJB.js → material-theme-ocean-CeFuXoRG.js} +0 -0
  418. /package/codemini-web/dist/assets/{material-theme-ocean-Cl_PEvBf.js → material-theme-ocean-DmL5jMtS.js} +0 -0
  419. /package/codemini-web/dist/assets/{material-theme-palenight-CEFfV_mF.js → material-theme-palenight-BMg4YxS6.js} +0 -0
  420. /package/codemini-web/dist/assets/{material-theme-palenight-DOTFIR3W.js → material-theme-palenight-CRxwxFv4.js} +0 -0
  421. /package/codemini-web/dist/assets/{matlab-BiYD-Y7N.js → matlab-BjvFQgI4.js} +0 -0
  422. /package/codemini-web/dist/assets/{matlab-CwLrY_Ss.js → matlab-CeDNF4Ix.js} +0 -0
  423. /package/codemini-web/dist/assets/{mdx-OZt5aooY.js → mdx-C_WF1Zvy.js} +0 -0
  424. /package/codemini-web/dist/assets/{mdx-irdaVRH8.js → mdx-DnKU9cqA.js} +0 -0
  425. /package/codemini-web/dist/assets/{mermaid-CkReAMVX.js → mermaid-5NtVsV32.js} +0 -0
  426. /package/codemini-web/dist/assets/{mermaid-mzvznqsh.js → mermaid-CH8Qvaqo.js} +0 -0
  427. /package/codemini-web/dist/assets/{min-dark-BAbZNtjj.js → min-dark-B95jFnY0.js} +0 -0
  428. /package/codemini-web/dist/assets/{min-dark-DoFQ3_GG.js → min-dark-BQ7SSUoL.js} +0 -0
  429. /package/codemini-web/dist/assets/{min-light-BzEisXBR.js → min-light-BGgk1zEi.js} +0 -0
  430. /package/codemini-web/dist/assets/{min-light-o5Iu4PYL.js → min-light-CqwYUont.js} +0 -0
  431. /package/codemini-web/dist/assets/{mipsasm-B9ciUcum.js → mipsasm-BIZV50OU.js} +0 -0
  432. /package/codemini-web/dist/assets/{mipsasm-DONjtc4L.js → mipsasm-OAAwCDEg.js} +0 -0
  433. /package/codemini-web/dist/assets/{mojo-A9VdeGlD.js → mojo-Bh0Ln9-1.js} +0 -0
  434. /package/codemini-web/dist/assets/{mojo-CHKQ5hW9.js → mojo-COx3BOEA.js} +0 -0
  435. /package/codemini-web/dist/assets/{monokai-B8rLeJY_.js → monokai-C988KBom.js} +0 -0
  436. /package/codemini-web/dist/assets/{monokai-SjnsTHn6.js → monokai-D2lcpl-D.js} +0 -0
  437. /package/codemini-web/dist/assets/{moonbit-Bb7eeXNq.js → moonbit-C-CVJfEU.js} +0 -0
  438. /package/codemini-web/dist/assets/{moonbit-CWIHpJf0.js → moonbit-ChOfdbnC.js} +0 -0
  439. /package/codemini-web/dist/assets/{move-Dy7CmIgW.js → move-DjHf2uHT.js} +0 -0
  440. /package/codemini-web/dist/assets/{move-MA-qIPBB.js → move-jwG4QUY4.js} +0 -0
  441. /package/codemini-web/dist/assets/{narrat-Cq6wc063.js → narrat-Bv3slmdi.js} +0 -0
  442. /package/codemini-web/dist/assets/{narrat-NioX5-_j.js → narrat-CuRqtiDW.js} +0 -0
  443. /package/codemini-web/dist/assets/{nextflow-groovy-jKlTICX_.js → nextflow-groovy-CYeLXiaP.js} +0 -0
  444. /package/codemini-web/dist/assets/{nextflow-groovy-BgEBN3iS.js → nextflow-groovy-Dk0GcQpl.js} +0 -0
  445. /package/codemini-web/dist/assets/{night-owl-C_xVeV9U.js → night-owl-SjOLjRtB.js} +0 -0
  446. /package/codemini-web/dist/assets/{night-owl-DHaGAA37.js → night-owl-cv0FEuUh.js} +0 -0
  447. /package/codemini-web/dist/assets/{night-owl-light-B1H1b6pL.js → night-owl-light-CpcKp0OZ.js} +0 -0
  448. /package/codemini-web/dist/assets/{night-owl-light-C_DkqGGe.js → night-owl-light-DHrEzBAj.js} +0 -0
  449. /package/codemini-web/dist/assets/{nix-BZVKmCQS.js → nix-BtLlRvM0.js} +0 -0
  450. /package/codemini-web/dist/assets/{nix-CBdStlCf.js → nix-CcOD1khX.js} +0 -0
  451. /package/codemini-web/dist/assets/{nord-3ndmnVQb.js → nord-BGjNHkRW.js} +0 -0
  452. /package/codemini-web/dist/assets/{nord-CrTSutxR.js → nord-DiukgIFA.js} +0 -0
  453. /package/codemini-web/dist/assets/{nushell-BSMBFYgO.js → nushell-DUqFDYtM.js} +0 -0
  454. /package/codemini-web/dist/assets/{nushell-C8hgS98n.js → nushell-GFe6C8D1.js} +0 -0
  455. /package/codemini-web/dist/assets/{objective-c-BUiYTSad.js → objective-c-BUV8AyKp.js} +0 -0
  456. /package/codemini-web/dist/assets/{objective-c-DGGlUjtt.js → objective-c-Da4gtNmU.js} +0 -0
  457. /package/codemini-web/dist/assets/{objective-cpp-Bk8vAxra.js → objective-cpp-Du3a_PKx.js} +0 -0
  458. /package/codemini-web/dist/assets/{objective-cpp-BwY1U2XT.js → objective-cpp-U8QllJj4.js} +0 -0
  459. /package/codemini-web/dist/assets/{ocaml-D51PiCY5.js → ocaml-4v1g0DKj.js} +0 -0
  460. /package/codemini-web/dist/assets/{ocaml-KuZ2AeVv.js → ocaml-DwXjJdD9.js} +0 -0
  461. /package/codemini-web/dist/assets/{odin-CoC4d8pi.js → odin-BlEjbtjb.js} +0 -0
  462. /package/codemini-web/dist/assets/{odin-CvKV_dam.js → odin-C2CG6fMn.js} +0 -0
  463. /package/codemini-web/dist/assets/{one-dark-pro-BbI-DLX3.js → one-dark-pro-BL6Mm10K.js} +0 -0
  464. /package/codemini-web/dist/assets/{one-dark-pro-C9bEA2Dz.js → one-dark-pro-BwcbXd-T.js} +0 -0
  465. /package/codemini-web/dist/assets/{one-light-DZ_5GYrV.js → one-light-BOQW5zin.js} +0 -0
  466. /package/codemini-web/dist/assets/{one-light-Do56bP_A.js → one-light-Cx3Ps96S.js} +0 -0
  467. /package/codemini-web/dist/assets/{openscad-0H6ozqDa.js → openscad-Bs2SxlcB.js} +0 -0
  468. /package/codemini-web/dist/assets/{openscad-DCmPLSXt.js → openscad-C7dPmpxc.js} +0 -0
  469. /package/codemini-web/dist/assets/{pascal-BMY45JJO.js → pascal-B6AuHgs_.js} +0 -0
  470. /package/codemini-web/dist/assets/{pascal-DghlbeLm.js → pascal-ruAwSiza.js} +0 -0
  471. /package/codemini-web/dist/assets/{pierre-dark-Be9bUWwI.js → pierre-dark-8SGzlI93.js} +0 -0
  472. /package/codemini-web/dist/assets/{pierre-light-Cq6kCwdb.js → pierre-light-BJzkLopB.js} +0 -0
  473. /package/codemini-web/dist/assets/{pkl-BlBky-cR.js → pkl-Bdw5peeW.js} +0 -0
  474. /package/codemini-web/dist/assets/{pkl-BzGvIelR.js → pkl-BuPFXprX.js} +0 -0
  475. /package/codemini-web/dist/assets/{plastic-C50vuo0c.js → plastic-BiAROaFC.js} +0 -0
  476. /package/codemini-web/dist/assets/{plastic-CHL2Ec9b.js → plastic-CGwKUd0C.js} +0 -0
  477. /package/codemini-web/dist/assets/{plsql-B6Eq-lAd.js → plsql-DQ_z5ed2.js} +0 -0
  478. /package/codemini-web/dist/assets/{plsql-mtL4EDYx.js → plsql-DoG_QfBE.js} +0 -0
  479. /package/codemini-web/dist/assets/{po-9sFvF4V8.js → po-BvHij3iO.js} +0 -0
  480. /package/codemini-web/dist/assets/{po-ByS5p8Sz.js → po-DN-mfyYW.js} +0 -0
  481. /package/codemini-web/dist/assets/{poimandres-Cs9j_baE.js → poimandres-BbdNMHGS.js} +0 -0
  482. /package/codemini-web/dist/assets/{poimandres-Cu7ZGbJ7.js → poimandres-BdM9d7kg.js} +0 -0
  483. /package/codemini-web/dist/assets/{polar-COmSbiHW.js → polar-BZ5C-_XH.js} +0 -0
  484. /package/codemini-web/dist/assets/{polar-Dc9aglFR.js → polar-p_EVOYp2.js} +0 -0
  485. /package/codemini-web/dist/assets/{postcss-B_ncIJlb.js → postcss-BVVH-mhK.js} +0 -0
  486. /package/codemini-web/dist/assets/{postcss-D_ArMqNC.js → postcss-C_rkJ2pP.js} +0 -0
  487. /package/codemini-web/dist/assets/{powerquery-BzHwsYRb.js → powerquery-BBfv-1ce.js} +0 -0
  488. /package/codemini-web/dist/assets/{powerquery-CnV22x6V.js → powerquery-D2htabf9.js} +0 -0
  489. /package/codemini-web/dist/assets/{powershell-BGZYhdIS.js → powershell-BcfgzEsQ.js} +0 -0
  490. /package/codemini-web/dist/assets/{powershell-C6bIwB0M.js → powershell-NfY3J8Uu.js} +0 -0
  491. /package/codemini-web/dist/assets/{prisma-D5S9vj6g.js → prisma-CMeP8UTm.js} +0 -0
  492. /package/codemini-web/dist/assets/{prisma-rx7KPY6m.js → prisma-DFAqr_mL.js} +0 -0
  493. /package/codemini-web/dist/assets/{prolog-BfgX1o85.js → prolog-Cc9yvHML.js} +0 -0
  494. /package/codemini-web/dist/assets/{prolog-CHVuxG8M.js → prolog-rt-FXeeT.js} +0 -0
  495. /package/codemini-web/dist/assets/{proto-B_ioi7EM.js → proto-CNBX21YV.js} +0 -0
  496. /package/codemini-web/dist/assets/{proto-BhkmoXVj.js → proto-CYqgjQUT.js} +0 -0
  497. /package/codemini-web/dist/assets/{puppet-Brdz8eoo.js → puppet-BAAnN8uU.js} +0 -0
  498. /package/codemini-web/dist/assets/{puppet-tRlrvlcY.js → puppet-ZnM2F-kY.js} +0 -0
  499. /package/codemini-web/dist/assets/{purescript-Bwtvgqjl.js → purescript-hu-4rgo5.js} +0 -0
  500. /package/codemini-web/dist/assets/{purescript-DX3wKXeK.js → purescript-nyLIIaTP.js} +0 -0
  501. /package/codemini-web/dist/assets/{python-9qQRnRoJ.js → python-Dt6SBvxD.js} +0 -0
  502. /package/codemini-web/dist/assets/{python-CUtprRpG.js → python-DypNN-aL.js} +0 -0
  503. /package/codemini-web/dist/assets/{qmldir-BP8WEvx8.js → qmldir-BDEiw2QJ.js} +0 -0
  504. /package/codemini-web/dist/assets/{qmldir-ftS4SxdQ.js → qmldir-MBz01aYW.js} +0 -0
  505. /package/codemini-web/dist/assets/{qss-DrZJSiDh.js → qss-B8ZOZZRM.js} +0 -0
  506. /package/codemini-web/dist/assets/{qss-Mo-j41VR.js → qss-BjslRtqf.js} +0 -0
  507. /package/codemini-web/dist/assets/{r-BX0U3688.js → r-70IHnSKT.js} +0 -0
  508. /package/codemini-web/dist/assets/{r-DN76jn9o.js → r-UrwRxojO.js} +0 -0
  509. /package/codemini-web/dist/assets/{racket-CrTD1_3_.js → racket-emNFhxM0.js} +0 -0
  510. /package/codemini-web/dist/assets/{racket-DCvJyROq.js → racket-lrWGJ4l7.js} +0 -0
  511. /package/codemini-web/dist/assets/{raku-Bhig3MAC.js → raku-B1DWL3rh.js} +0 -0
  512. /package/codemini-web/dist/assets/{raku-CvVnta4t.js → raku-M_VGm79k.js} +0 -0
  513. /package/codemini-web/dist/assets/{red-CWX-2pbk.js → red-BcYVa2Jk.js} +0 -0
  514. /package/codemini-web/dist/assets/{red-CztBD70n.js → red-BvMgtCZO.js} +0 -0
  515. /package/codemini-web/dist/assets/{reg-99qFU_BD.js → reg-DL66XhHR.js} +0 -0
  516. /package/codemini-web/dist/assets/{reg-C0s7-4s0.js → reg-rRGLqGjW.js} +0 -0
  517. /package/codemini-web/dist/assets/{regexp-BIytsEkR.js → regexp-CEudNzRJ.js} +0 -0
  518. /package/codemini-web/dist/assets/{regexp-Cov7gRr6.js → regexp-PTdmEsyL.js} +0 -0
  519. /package/codemini-web/dist/assets/{rel-BuFiYCnx.js → rel-DlXaqz0b.js} +0 -0
  520. /package/codemini-web/dist/assets/{rel-D1_XRRAX.js → rel-DqcQFa7Q.js} +0 -0
  521. /package/codemini-web/dist/assets/{riscv-CdWUuizJ.js → riscv-CanSyeO8.js} +0 -0
  522. /package/codemini-web/dist/assets/{riscv-QV-e36TY.js → riscv-lk-jjtXM.js} +0 -0
  523. /package/codemini-web/dist/assets/{ron-B-EB7ZBI.js → ron-BQ46iNCb.js} +0 -0
  524. /package/codemini-web/dist/assets/{ron-B9EiEQzE.js → ron-CVeChqUp.js} +0 -0
  525. /package/codemini-web/dist/assets/{rose-pine-B05wARW4.js → rose-pine-BuTm62Vj.js} +0 -0
  526. /package/codemini-web/dist/assets/{rose-pine-Dxqc8n_1.js → rose-pine-ChTxq_yN.js} +0 -0
  527. /package/codemini-web/dist/assets/{rose-pine-dawn-CSpx1lq4.js → rose-pine-dawn-B670NuiP.js} +0 -0
  528. /package/codemini-web/dist/assets/{rose-pine-dawn-pz_3O4ep.js → rose-pine-dawn-RGM_kxZ2.js} +0 -0
  529. /package/codemini-web/dist/assets/{rose-pine-moon-B27idgkd.js → rose-pine-moon-6KoQonQX.js} +0 -0
  530. /package/codemini-web/dist/assets/{rose-pine-moon-DXyZaCQX.js → rose-pine-moon-NLV-cJvy.js} +0 -0
  531. /package/codemini-web/dist/assets/{rosmsg-7fMni2bi.js → rosmsg-Bw0HfGe_.js} +0 -0
  532. /package/codemini-web/dist/assets/{rosmsg-CcBwQf5j.js → rosmsg-CUVWbdrA.js} +0 -0
  533. /package/codemini-web/dist/assets/{rust-BHulpgn4.js → rust-CrVJvhfa.js} +0 -0
  534. /package/codemini-web/dist/assets/{rust-ppknoGus.js → rust-D83UuV7F.js} +0 -0
  535. /package/codemini-web/dist/assets/{sass-Baw41att.js → sass-CE2YZJdE.js} +0 -0
  536. /package/codemini-web/dist/assets/{sass-DwJf1cGc.js → sass-Dfpo5TpD.js} +0 -0
  537. /package/codemini-web/dist/assets/{scala-B_iky--A.js → scala-BjILTRgu.js} +0 -0
  538. /package/codemini-web/dist/assets/{scala-DtlnBhKt.js → scala-CyYhociv.js} +0 -0
  539. /package/codemini-web/dist/assets/{scheme-B8EPXl9-.js → scheme-BQ8c0gTd.js} +0 -0
  540. /package/codemini-web/dist/assets/{scheme-DYQMayIi.js → scheme-BrRWQ1yX.js} +0 -0
  541. /package/codemini-web/dist/assets/{sdbl-BQ-WHv_b.js → sdbl-CtZR2I6R.js} +0 -0
  542. /package/codemini-web/dist/assets/{sdbl-D0gXyfL6.js → sdbl-Ds7t3N0Q.js} +0 -0
  543. /package/codemini-web/dist/assets/{shellscript-B_ROtSU5.js → shellscript-Cim6Loaj.js} +0 -0
  544. /package/codemini-web/dist/assets/{shellscript-CPlx29kh.js → shellscript-wXQ3AlcS.js} +0 -0
  545. /package/codemini-web/dist/assets/{slack-dark-D27cdsBY.js → slack-dark-CrWftATe.js} +0 -0
  546. /package/codemini-web/dist/assets/{slack-dark-D_l_kxUG.js → slack-dark-nxsbRL6U.js} +0 -0
  547. /package/codemini-web/dist/assets/{slack-ochin-BE7dVjTN.js → slack-ochin-Cx2HX71B.js} +0 -0
  548. /package/codemini-web/dist/assets/{slack-ochin-BaRZ7cFo.js → slack-ochin-DJ-2OJXN.js} +0 -0
  549. /package/codemini-web/dist/assets/{smalltalk-B12I7SNP.js → smalltalk-DGeW9hbd.js} +0 -0
  550. /package/codemini-web/dist/assets/{smalltalk-DRM3jr39.js → smalltalk-FYMOGNo9.js} +0 -0
  551. /package/codemini-web/dist/assets/{snazzy-light-BayTLer3.js → snazzy-light-508iEJO_.js} +0 -0
  552. /package/codemini-web/dist/assets/{snazzy-light-CooAwQFN.js → snazzy-light-BxBnzmu0.js} +0 -0
  553. /package/codemini-web/dist/assets/{solarized-dark-DJyTII3y.js → solarized-dark-B3HMD5k3.js} +0 -0
  554. /package/codemini-web/dist/assets/{solarized-dark-Y31Htb59.js → solarized-dark-TCkigWjM.js} +0 -0
  555. /package/codemini-web/dist/assets/{solarized-light-AlAlWTlV.js → solarized-light-B-wiF2HZ.js} +0 -0
  556. /package/codemini-web/dist/assets/{solarized-light-B-u_T8hk.js → solarized-light-R2Rcjqww.js} +0 -0
  557. /package/codemini-web/dist/assets/{solidity-CYAp_sJG.js → solidity-46G7JVSr.js} +0 -0
  558. /package/codemini-web/dist/assets/{solidity-DGySeR8E.js → solidity-Bv4Kww1K.js} +0 -0
  559. /package/codemini-web/dist/assets/{splunk-DIQhxWy6.js → splunk-DHfVkGsm.js} +0 -0
  560. /package/codemini-web/dist/assets/{splunk-LsCTpuOP.js → splunk-DKgoBk9o.js} +0 -0
  561. /package/codemini-web/dist/assets/{sql-BHYM5i23.js → sql-Bx-skccv.js} +0 -0
  562. /package/codemini-web/dist/assets/{sql-Cl5BmUDB.js → sql-PkTJiLTy.js} +0 -0
  563. /package/codemini-web/dist/assets/{ssh-config-CTKraw7w.js → ssh-config-B2E5WPpD.js} +0 -0
  564. /package/codemini-web/dist/assets/{ssh-config-QxQe7y21.js → ssh-config-JoXpWa3y.js} +0 -0
  565. /package/codemini-web/dist/assets/{stylus-DZvi0832.js → stylus-BPw8WnNN.js} +0 -0
  566. /package/codemini-web/dist/assets/{stylus-MJorGDSp.js → stylus-C836DBsS.js} +0 -0
  567. /package/codemini-web/dist/assets/{swift-BBBWvOdl.js → swift-CFG3rDz_.js} +0 -0
  568. /package/codemini-web/dist/assets/{swift-vEJN8-U8.js → swift-Ce2Nlw8Q.js} +0 -0
  569. /package/codemini-web/dist/assets/{synthwave-84-CU96aGm9.js → synthwave-84-Br2i7yYN.js} +0 -0
  570. /package/codemini-web/dist/assets/{synthwave-84-Dq9WAwjJ.js → synthwave-84-CvU6yQ4V.js} +0 -0
  571. /package/codemini-web/dist/assets/{system-verilog-BNegUpQT.js → system-verilog-BVQtCmAV.js} +0 -0
  572. /package/codemini-web/dist/assets/{system-verilog-Ddagu-BW.js → system-verilog-Dkc37EdI.js} +0 -0
  573. /package/codemini-web/dist/assets/{systemd-BxlmhgV_.js → systemd-CcJTFvpw.js} +0 -0
  574. /package/codemini-web/dist/assets/{systemd-k28iMR-m.js → systemd-svl6VdYY.js} +0 -0
  575. /package/codemini-web/dist/assets/{talonscript-DprpkXjP.js → talonscript-CHxC2PG4.js} +0 -0
  576. /package/codemini-web/dist/assets/{talonscript-p-GlmLEL.js → talonscript-CWZYyS8Z.js} +0 -0
  577. /package/codemini-web/dist/assets/{tasl-BNm9EzXM.js → tasl-BfBucHfV.js} +0 -0
  578. /package/codemini-web/dist/assets/{tasl-CcWIX7df.js → tasl-woKXKJkx.js} +0 -0
  579. /package/codemini-web/dist/assets/{tcl-BQwTCs7_.js → tcl-6FTtarFH.js} +0 -0
  580. /package/codemini-web/dist/assets/{tcl-CDAGOvGJ.js → tcl-iBXrc9W2.js} +0 -0
  581. /package/codemini-web/dist/assets/{terraform-DLqNQanb.js → terraform-BywKBLRG.js} +0 -0
  582. /package/codemini-web/dist/assets/{terraform-DQhgYyF5.js → terraform-DHx5Kdyi.js} +0 -0
  583. /package/codemini-web/dist/assets/{tokyo-night-DxL5lL62.js → tokyo-night-BQsIhA-A.js} +0 -0
  584. /package/codemini-web/dist/assets/{tokyo-night-mZPbj36U.js → tokyo-night-D2gua4K6.js} +0 -0
  585. /package/codemini-web/dist/assets/{toml-BncMjmx0.js → toml-B35rd2Aj.js} +0 -0
  586. /package/codemini-web/dist/assets/{toml-C7zZe7mY.js → toml-BCbG8Uu3.js} +0 -0
  587. /package/codemini-web/dist/assets/{tsv--yOlbuAc.js → tsv-Bfk0YRxN.js} +0 -0
  588. /package/codemini-web/dist/assets/{tsv-BYgjC2V4.js → tsv-ZPaCtsKO.js} +0 -0
  589. /package/codemini-web/dist/assets/{tsx-CQpoSLkt.js → tsx-BPnxgPXu.js} +0 -0
  590. /package/codemini-web/dist/assets/{tsx-_xvh4DFW.js → tsx-Cvi8n1qy.js} +0 -0
  591. /package/codemini-web/dist/assets/{turtle-DO1RZ6-t.js → turtle-Cj8ap4C4.js} +0 -0
  592. /package/codemini-web/dist/assets/{turtle-ZCrKgE8E.js → turtle-DsCF_r1D.js} +0 -0
  593. /package/codemini-web/dist/assets/{typescript-BGytLZ-E.js → typescript-DESGzanZ.js} +0 -0
  594. /package/codemini-web/dist/assets/{typescript-Bl_SUyNj.js → typescript-DkKrEyJv.js} +0 -0
  595. /package/codemini-web/dist/assets/{typespec-9rD7KG94.js → typespec-tsneGPKg.js} +0 -0
  596. /package/codemini-web/dist/assets/{typespec-Bb7cO9Af.js → typespec-zSWU032W.js} +0 -0
  597. /package/codemini-web/dist/assets/{typst-CChrusEX.js → typst-BcQNhVIE.js} +0 -0
  598. /package/codemini-web/dist/assets/{typst-DJ10KoY6.js → typst-C6LmF4pH.js} +0 -0
  599. /package/codemini-web/dist/assets/{v-CutuAYrg.js → v-CPbK5D5K.js} +0 -0
  600. /package/codemini-web/dist/assets/{v-DCfT4ti_.js → v-D6v2lknR.js} +0 -0
  601. /package/codemini-web/dist/assets/{vala-APnq2lEm.js → vala-CTmcnleK.js} +0 -0
  602. /package/codemini-web/dist/assets/{vala-DJpFErrU.js → vala-CW2V92s6.js} +0 -0
  603. /package/codemini-web/dist/assets/{vb-2TNZABCr.js → vb-CHzBmKx-.js} +0 -0
  604. /package/codemini-web/dist/assets/{vb-DQuyY02M.js → vb-iQRhK9Tp.js} +0 -0
  605. /package/codemini-web/dist/assets/{verilog-Bc6dGayD.js → verilog-BxRFSB3_.js} +0 -0
  606. /package/codemini-web/dist/assets/{verilog-BuvxZrtu.js → verilog-Cu16TfKw.js} +0 -0
  607. /package/codemini-web/dist/assets/{vesper-5CiKYnlC.js → vesper-B0T1dCxY.js} +0 -0
  608. /package/codemini-web/dist/assets/{vesper-bM1AKkiO.js → vesper-D_U9vezF.js} +0 -0
  609. /package/codemini-web/dist/assets/{vhdl-2NYOzUvZ.js → vhdl-D4h06VsC.js} +0 -0
  610. /package/codemini-web/dist/assets/{vhdl-pScFq2IF.js → vhdl-suLxFY6N.js} +0 -0
  611. /package/codemini-web/dist/assets/{viml-AdCpKk5r.js → viml-BQu4-sFk.js} +0 -0
  612. /package/codemini-web/dist/assets/{viml-LZIbwXqf.js → viml-DMcwh6Y2.js} +0 -0
  613. /package/codemini-web/dist/assets/{vitesse-black-BhKXUSxn.js → vitesse-black-Dk8H62LF.js} +0 -0
  614. /package/codemini-web/dist/assets/{vitesse-black-DJ5O_Wf1.js → vitesse-black-sFXfT98A.js} +0 -0
  615. /package/codemini-web/dist/assets/{vitesse-dark-23Naczwl.js → vitesse-dark-B_8wZgsl.js} +0 -0
  616. /package/codemini-web/dist/assets/{vitesse-dark-BzqhRcAC.js → vitesse-dark-BuiSS132.js} +0 -0
  617. /package/codemini-web/dist/assets/{vitesse-light-BDEFVzPq.js → vitesse-light-BFFa4sOZ.js} +0 -0
  618. /package/codemini-web/dist/assets/{vitesse-light-C6rj90Ld.js → vitesse-light-DfdaVJLv.js} +0 -0
  619. /package/codemini-web/dist/assets/{vyper-CAC2wkEx.js → vyper-CU9IduFj.js} +0 -0
  620. /package/codemini-web/dist/assets/{vyper-Cli2Hz-N.js → vyper-DfAPtbtc.js} +0 -0
  621. /package/codemini-web/dist/assets/{wasm-BYEYHoBh.js → wasm-6aAEIEYl.js} +0 -0
  622. /package/codemini-web/dist/assets/{wasm-JuQDwMf4.js → wasm-ByDQ9GrP.js} +0 -0
  623. /package/codemini-web/dist/assets/{wasm-C_1NoYKf.js → wasm-C9fkFrNS.js} +0 -0
  624. /package/codemini-web/dist/assets/{wasm-DmLFHHUn.js → wasm-CdytVWOW.js} +0 -0
  625. /package/codemini-web/dist/assets/{wenyan-BtC3dCkd.js → wenyan-B_37P8uK.js} +0 -0
  626. /package/codemini-web/dist/assets/{wenyan-DZOq1WNp.js → wenyan-DNkN8oQc.js} +0 -0
  627. /package/codemini-web/dist/assets/{wgsl-BfhDoYq0.js → wgsl-Bggw1Yhv.js} +0 -0
  628. /package/codemini-web/dist/assets/{wgsl-sEaiSqkk.js → wgsl-by06Hq-s.js} +0 -0
  629. /package/codemini-web/dist/assets/{wikitext-BBK9d3N8.js → wikitext-CjjhOSjd.js} +0 -0
  630. /package/codemini-web/dist/assets/{wikitext-BN0a9cMl.js → wikitext-zXy-4mpr.js} +0 -0
  631. /package/codemini-web/dist/assets/{wit-B5eB3VJ4.js → wit--vc2X9vR.js} +0 -0
  632. /package/codemini-web/dist/assets/{wit-Drz0L2pK.js → wit-BHjrebka.js} +0 -0
  633. /package/codemini-web/dist/assets/{wolfram-BjzpXDTC.js → wolfram-Dr60-Zy4.js} +0 -0
  634. /package/codemini-web/dist/assets/{wolfram-hGtNh8mf.js → wolfram-Mw4XcN1t.js} +0 -0
  635. /package/codemini-web/dist/assets/{yaml-45PVuYHO.js → yaml--meH0-me.js} +0 -0
  636. /package/codemini-web/dist/assets/{yaml-CvJwaec9.js → yaml-CZT5eZge.js} +0 -0
  637. /package/codemini-web/dist/assets/{zenscript-ChrmAB59.js → zenscript-C94GGJ6Y.js} +0 -0
  638. /package/codemini-web/dist/assets/{zenscript-Dl5s7Kfy.js → zenscript-Cf2Qp-oj.js} +0 -0
  639. /package/codemini-web/dist/assets/{zig-BYKQoCIF.js → zig-DgUQodsP.js} +0 -0
  640. /package/codemini-web/dist/assets/{zig-Dashm4F0.js → zig-feO0kYCa.js} +0 -0
@@ -8,27 +8,34 @@ import { loadConfig, saveConfig, setConfigValue, getConfigValue } from '../src/c
8
8
  import { createChatRuntime } from '../src/core/chat-runtime.js';
9
9
  import { createSession, loadSession, listSessions, resolveSession, deleteSession } from '../src/core/session-store.js';
10
10
  import { buildDefaultSystemPrompt } from '../src/core/default-system-prompt.js';
11
- import { RuntimeBridge } from './lib/runtime-bridge.js';
12
- import { installSkillSource, listSkillEntries } from '../src/commands/skill.js';
13
- import { computeFileSha256, readSkillRegistry, upsertSkillRegistryEntry, writeSkillRegistry } from '../src/core/skill-registry.js';
11
+ import { RuntimeBridge } from './lib/runtime-bridge.js';
12
+ import { installSkillSource, listSkillEntries } from '../src/commands/skill.js';
13
+ import { computeFileSha256, readSkillRegistry, upsertSkillRegistryEntry, writeSkillRegistry } from '../src/core/skill-registry.js';
14
+ import { forgetMemory, listMemories, searchMemories } from '../src/core/memory-store.js';
14
15
  import { getReplyLanguage } from '../src/core/reply-language.js';
15
- import { getBaseConfigDir, getFileIndexPath, getProjectSkillsDir, getSkillsDir } from '../src/core/paths.js';
16
- import { initializeProjectIndex } from '../src/core/project-index.js';
17
- import { INDEX_SKIP_DIRS } from '../src/core/constants.js';
18
- import { VERSION } from '../src/core/version.js';
16
+ import { getBaseConfigDir, getFileIndexPath, getProjectSkillsDir, getSkillsDir } from '../src/core/paths.js';
17
+ import { initializeProjectIndex } from '../src/core/project-index.js';
18
+ import { INDEX_SKIP_DIRS } from '../src/core/constants.js';
19
+ import { VERSION } from '../src/core/version.js';
19
20
 
20
21
  const GENERAL_PROJECT_DIR = (() => {
21
22
  const base = getBaseConfigDir();
22
23
  return path.join(base, 'workspace');
23
24
  })();
24
25
 
25
- const SKILL_CATALOG_FILE = 'codemini.skills.json';
26
- const SKILL_MODES = new Set(['always', 'auto_attach', 'agent_requested', 'manual']);
27
- const SKILL_SCOPES = new Set(['project', 'global']);
28
-
29
- function normalizeSkillScope(scope) {
30
- return SKILL_SCOPES.has(scope) ? scope : 'project';
31
- }
26
+ const SKILL_CATALOG_FILE = 'codemini.skills.json';
27
+ const SKILL_MODES = new Set(['always', 'auto_attach', 'agent_requested', 'manual']);
28
+ const SKILL_SCOPES = new Set(['project', 'global']);
29
+ const MEMORY_SCOPES = new Set(['user', 'global', 'project']);
30
+
31
+ function normalizeSkillScope(scope) {
32
+ return SKILL_SCOPES.has(scope) ? scope : 'project';
33
+ }
34
+
35
+ function normalizeMemoryScope(scope) {
36
+ const value = String(scope || '').trim().toLowerCase();
37
+ return MEMORY_SCOPES.has(value) ? value : 'user';
38
+ }
32
39
 
33
40
  function isSafeSkillName(name = '') {
34
41
  return /^[A-Za-z0-9][A-Za-z0-9_.-]*$/.test(name);
@@ -275,19 +282,111 @@ function normalizeProjectPath(value) {
275
282
  return path.resolve(raw);
276
283
  }
277
284
 
278
- async function resolveCodeWikiProjectDir(url, fallbackDir) {
279
- const requested = normalizeProjectPath(url.searchParams.get('project') || '');
280
- if (!requested) return fallbackDir;
285
+ function projectNameForDir(projectDir) {
286
+ if (isGeneralProjectDir(projectDir)) return '__codemini_general__';
287
+ return path.basename(path.resolve(projectDir || '')) || projectDir || '';
288
+ }
289
+
290
+ async function validProjectDir(value) {
291
+ const normalized = normalizeProjectPath(value);
292
+ if (!normalized) return '';
281
293
  try {
282
- const stat = await fs.stat(requested);
283
- if (stat.isDirectory()) return requested;
284
- } catch {}
285
- return fallbackDir;
294
+ const stat = await fs.stat(normalized);
295
+ return stat.isDirectory() ? normalized : '';
296
+ } catch {
297
+ return '';
298
+ }
299
+ }
300
+
301
+ async function resolveRequestProjectDir(value, fallbackDir) {
302
+ const resolved = await validProjectDir(value);
303
+ return resolved || fallbackDir;
304
+ }
305
+
306
+ async function parseProjectDirsParam(url, fallbackDir) {
307
+ const raw = url.searchParams.get('projects');
308
+ const parsed = raw ? tryParseJson(raw) : [];
309
+ const values = Array.isArray(parsed) ? parsed : [];
310
+ const seen = new Set();
311
+ const dirs = [];
312
+ for (const candidate of [fallbackDir, ...values]) {
313
+ const resolved = await validProjectDir(candidate);
314
+ if (!resolved || seen.has(resolved)) continue;
315
+ seen.add(resolved);
316
+ dirs.push(resolved);
317
+ }
318
+ if (dirs.length === 0 && fallbackDir) {
319
+ dirs.push(fallbackDir);
320
+ }
321
+ return dirs;
286
322
  }
287
323
 
288
- function tryParseJson(value) {
289
- try { return JSON.parse(String(value || '')); } catch { return null; }
324
+ async function listSkillsForProjectDirs(projectDirs, fallbackDir) {
325
+ const dirs = projectDirs.length > 0 ? projectDirs : [fallbackDir];
326
+ const seen = new Set();
327
+ const results = [];
328
+ for (let index = 0; index < dirs.length; index += 1) {
329
+ const projectDir = dirs[index];
330
+ const entries = await listSkillEntries({ scope: 'all', cwd: projectDir });
331
+ for (const entry of entries) {
332
+ if (entry.scope !== 'project') {
333
+ const globalKey = `${entry.scope}:${entry.name}:${entry.path || ''}`;
334
+ if (seen.has(globalKey)) continue;
335
+ seen.add(globalKey);
336
+ results.push(entry);
337
+ continue;
338
+ }
339
+ const projectKey = `project:${projectDir}:${entry.name}:${entry.path || ''}`;
340
+ if (seen.has(projectKey)) continue;
341
+ seen.add(projectKey);
342
+ results.push({
343
+ ...entry,
344
+ projectDir,
345
+ projectName: projectNameForDir(projectDir)
346
+ });
347
+ }
348
+ }
349
+ return results.sort((a, b) => {
350
+ const left = `${a.scope}:${a.projectName || ''}:${a.name}`;
351
+ const right = `${b.scope}:${b.projectName || ''}:${b.name}`;
352
+ return left.localeCompare(right);
353
+ });
290
354
  }
355
+
356
+ async function listMemoriesForProjectDirs({ scope, query, projectDirs, fallbackDir }) {
357
+ if (scope !== 'project') {
358
+ const items = query
359
+ ? await searchMemories({ scope, query, workspaceRoot: fallbackDir })
360
+ : await listMemories({ scope, workspaceRoot: fallbackDir });
361
+ return items;
362
+ }
363
+ const dirs = projectDirs.length > 0 ? projectDirs : [fallbackDir];
364
+ const chunks = await Promise.all(dirs.map(async (projectDir) => {
365
+ const items = query
366
+ ? await searchMemories({ scope, query, workspaceRoot: projectDir })
367
+ : await listMemories({ scope, workspaceRoot: projectDir });
368
+ return (items || []).map((item) => ({
369
+ ...item,
370
+ projectDir,
371
+ projectName: projectNameForDir(projectDir)
372
+ }));
373
+ }));
374
+ return chunks.flat();
375
+ }
376
+
377
+ async function resolveCodeWikiProjectDir(url, fallbackDir) {
378
+ const requested = normalizeProjectPath(url.searchParams.get('project') || '');
379
+ if (!requested) return fallbackDir;
380
+ try {
381
+ const stat = await fs.stat(requested);
382
+ if (stat.isDirectory()) return requested;
383
+ } catch {}
384
+ return fallbackDir;
385
+ }
386
+
387
+ function tryParseJson(value) {
388
+ try { return JSON.parse(String(value || '')); } catch { return null; }
389
+ }
291
390
 
292
391
  function collectSessionPathHints(session) {
293
392
  const hints = [];
@@ -337,164 +436,164 @@ function isCodeWikiReportFile(fileName) {
337
436
  return CODEWIKI_REPORT_RE.test(String(fileName || ''));
338
437
  }
339
438
 
340
- function codeWikiReportTitle(fileName) {
341
- return String(fileName || '')
342
- .replace(/-project-requirements\.html$/, '')
343
- .replace(/-/g, ' ');
344
- }
345
-
346
- function clipGraphList(values, max = 12) {
347
- return [...new Set((Array.isArray(values) ? values : []).filter(Boolean))].slice(0, max);
348
- }
349
-
350
- const CODEWIKI_GRAPH_NOISY_NAMES = new Set([
351
- '__init__',
352
- '__enter__',
353
- '__exit__',
354
- '__getitem__',
355
- '__setitem__',
356
- '__delitem__',
357
- '__contains__',
358
- '__len__',
359
- '__iter__',
360
- '__next__',
361
- '__call__',
362
- 'get',
363
- 'set',
364
- 'add',
365
- 'run',
366
- 'close',
367
- 'open',
368
- 'read',
369
- 'write',
370
- 'send',
371
- 'recv',
372
- 'poll',
373
- 'update',
374
- 'copy',
375
- 'size',
376
- 'apply'
377
- ]);
378
-
379
- function normalizeGraphPath(value = '') {
380
- return String(value || '').replace(/\\/g, '/').replace(/^\.\/+/, '');
381
- }
382
-
383
- function isDependencyLikeGraphPath(file = '') {
384
- const normalized = normalizeGraphPath(file);
385
- const segments = normalized.split('/').filter(Boolean);
386
- return segments.some(
387
- (segment) =>
388
- INDEX_SKIP_DIRS.has(segment) ||
389
- /^venv[-_]/i.test(segment) ||
390
- /\.egg-info$/i.test(segment) ||
391
- /^python\d+(?:\.\d+)?$/i.test(segment)
392
- );
393
- }
394
-
395
- function isNoisyGraphSymbol(symbol = {}) {
396
- const name = String(symbol.name || symbol.symbol_id || '').split('.').pop();
397
- if (!name) return true;
398
- if (CODEWIKI_GRAPH_NOISY_NAMES.has(name)) return true;
399
- return /^__.*__$/.test(name);
400
- }
401
-
402
- function sourceRootScore(file = '') {
403
- const normalized = normalizeGraphPath(file);
404
- if (normalized.startsWith('src/')) return 8;
405
- if (normalized.startsWith('codemini-web/client/src/')) return 8;
406
- if (normalized.startsWith('codemini-web/server.js')) return 7;
407
- if (normalized.startsWith('codemini-web/')) return 5;
408
- if (normalized.startsWith('tests/')) return 1;
409
- return 3;
410
- }
411
-
412
- function buildCodeWikiSymbolGraph(fileIndex, { maxNodes = 42 } = {}) {
413
- const files = Array.isArray(fileIndex?.files) ? fileIndex.files : [];
414
- const sourceFiles = files.filter((entry) => !isDependencyLikeGraphPath(entry.file));
415
- const symbols = sourceFiles
416
- .flatMap((entry) =>
417
- (Array.isArray(entry.symbols) ? entry.symbols : []).map((symbol) => ({
418
- ...symbol,
419
- file: symbol.file || entry.file
420
- }))
421
- )
422
- .filter((symbol) => !isDependencyLikeGraphPath(symbol.file) && !isNoisyGraphSymbol(symbol));
423
- const ranked = symbols
424
- .map((symbol) => {
425
- const calls = Array.isArray(symbol.calls) ? symbol.calls.length : 0;
426
- const calledBy = Array.isArray(symbol.called_by) ? symbol.called_by.length : 0;
427
- const writes = Array.isArray(symbol.writes) ? symbol.writes.length : 0;
428
- const emits = Array.isArray(symbol.emits) ? symbol.emits.length : 0;
429
- const typeBoost = symbol.type === 'class' ? 8 : symbol.type === 'method' ? 4 : 2;
430
- return {
431
- symbol,
432
- score: sourceRootScore(symbol.file) + typeBoost + calledBy * 4 + calls * 2 + writes * 2 + emits * 2
433
- };
434
- })
435
- .sort((a, b) => b.score - a.score || String(a.symbol.symbol_id).localeCompare(String(b.symbol.symbol_id)))
436
- .slice(0, maxNodes)
437
- .map((item) => item.symbol);
438
-
439
- const byId = new Map(ranked.map((symbol) => [String(symbol.symbol_id || ''), symbol]));
440
- const byShortName = new Map();
441
- for (const symbol of ranked) {
442
- const shortName = String(symbol.name || '').split('.').pop();
443
- if (!shortName) continue;
444
- if (!byShortName.has(shortName)) byShortName.set(shortName, []);
445
- byShortName.get(shortName).push(symbol);
446
- }
447
-
448
- const nodes = ranked.map((symbol) => ({
449
- id: symbol.symbol_id,
450
- label: symbol.name || symbol.symbol_id,
451
- type: symbol.type || 'symbol',
452
- file: symbol.file || '',
453
- range: symbol.range || null,
454
- signature: symbol.signature || '',
455
- calls: clipGraphList(symbol.calls || [], 8),
456
- called_by: clipGraphList(symbol.called_by || [], 8),
457
- imports: clipGraphList(symbol.imports || [], 6),
458
- writes: clipGraphList(symbol.writes || [], 6),
459
- emits: clipGraphList(symbol.emits || [], 6)
460
- }));
461
-
462
- const edgeMap = new Map();
463
- const addEdge = (source, target, kind, label = '') => {
464
- if (!source || !target || source === target) return;
465
- if (!byId.has(source) || !byId.has(target)) return;
466
- const key = `${source}->${target}:${kind}`;
467
- if (!edgeMap.has(key)) edgeMap.set(key, { source, target, kind, label });
468
- };
469
-
470
- for (const symbol of ranked) {
471
- const source = String(symbol.symbol_id || '');
472
- for (const call of symbol.calls || []) {
473
- const shortName = String(call || '').split('.').pop();
474
- for (const target of byShortName.get(shortName) || []) {
475
- addEdge(source, target.symbol_id, 'calls', call);
476
- }
477
- }
478
- for (const caller of symbol.called_by || []) {
479
- addEdge(caller, source, 'called_by');
480
- }
481
- }
482
-
483
- const edges = [...edgeMap.values()].slice(0, 80);
484
-
485
- return {
486
- updatedAt: fileIndex?.updatedAt || '',
487
- stats: {
488
- files: files.length,
489
- source_files: sourceFiles.length,
490
- symbols: symbols.length,
491
- displayed_nodes: nodes.length,
492
- displayed_edges: edges.length
493
- },
494
- nodes,
495
- edges
496
- };
497
- }
439
+ function codeWikiReportTitle(fileName) {
440
+ return String(fileName || '')
441
+ .replace(/-project-requirements\.html$/, '')
442
+ .replace(/-/g, ' ');
443
+ }
444
+
445
+ function clipGraphList(values, max = 12) {
446
+ return [...new Set((Array.isArray(values) ? values : []).filter(Boolean))].slice(0, max);
447
+ }
448
+
449
+ const CODEWIKI_GRAPH_NOISY_NAMES = new Set([
450
+ '__init__',
451
+ '__enter__',
452
+ '__exit__',
453
+ '__getitem__',
454
+ '__setitem__',
455
+ '__delitem__',
456
+ '__contains__',
457
+ '__len__',
458
+ '__iter__',
459
+ '__next__',
460
+ '__call__',
461
+ 'get',
462
+ 'set',
463
+ 'add',
464
+ 'run',
465
+ 'close',
466
+ 'open',
467
+ 'read',
468
+ 'write',
469
+ 'send',
470
+ 'recv',
471
+ 'poll',
472
+ 'update',
473
+ 'copy',
474
+ 'size',
475
+ 'apply'
476
+ ]);
477
+
478
+ function normalizeGraphPath(value = '') {
479
+ return String(value || '').replace(/\\/g, '/').replace(/^\.\/+/, '');
480
+ }
481
+
482
+ function isDependencyLikeGraphPath(file = '') {
483
+ const normalized = normalizeGraphPath(file);
484
+ const segments = normalized.split('/').filter(Boolean);
485
+ return segments.some(
486
+ (segment) =>
487
+ INDEX_SKIP_DIRS.has(segment) ||
488
+ /^venv[-_]/i.test(segment) ||
489
+ /\.egg-info$/i.test(segment) ||
490
+ /^python\d+(?:\.\d+)?$/i.test(segment)
491
+ );
492
+ }
493
+
494
+ function isNoisyGraphSymbol(symbol = {}) {
495
+ const name = String(symbol.name || symbol.symbol_id || '').split('.').pop();
496
+ if (!name) return true;
497
+ if (CODEWIKI_GRAPH_NOISY_NAMES.has(name)) return true;
498
+ return /^__.*__$/.test(name);
499
+ }
500
+
501
+ function sourceRootScore(file = '') {
502
+ const normalized = normalizeGraphPath(file);
503
+ if (normalized.startsWith('src/')) return 8;
504
+ if (normalized.startsWith('codemini-web/client/src/')) return 8;
505
+ if (normalized.startsWith('codemini-web/server.js')) return 7;
506
+ if (normalized.startsWith('codemini-web/')) return 5;
507
+ if (normalized.startsWith('tests/')) return 1;
508
+ return 3;
509
+ }
510
+
511
+ function buildCodeWikiSymbolGraph(fileIndex, { maxNodes = 42 } = {}) {
512
+ const files = Array.isArray(fileIndex?.files) ? fileIndex.files : [];
513
+ const sourceFiles = files.filter((entry) => !isDependencyLikeGraphPath(entry.file));
514
+ const symbols = sourceFiles
515
+ .flatMap((entry) =>
516
+ (Array.isArray(entry.symbols) ? entry.symbols : []).map((symbol) => ({
517
+ ...symbol,
518
+ file: symbol.file || entry.file
519
+ }))
520
+ )
521
+ .filter((symbol) => !isDependencyLikeGraphPath(symbol.file) && !isNoisyGraphSymbol(symbol));
522
+ const ranked = symbols
523
+ .map((symbol) => {
524
+ const calls = Array.isArray(symbol.calls) ? symbol.calls.length : 0;
525
+ const calledBy = Array.isArray(symbol.called_by) ? symbol.called_by.length : 0;
526
+ const writes = Array.isArray(symbol.writes) ? symbol.writes.length : 0;
527
+ const emits = Array.isArray(symbol.emits) ? symbol.emits.length : 0;
528
+ const typeBoost = symbol.type === 'class' ? 8 : symbol.type === 'method' ? 4 : 2;
529
+ return {
530
+ symbol,
531
+ score: sourceRootScore(symbol.file) + typeBoost + calledBy * 4 + calls * 2 + writes * 2 + emits * 2
532
+ };
533
+ })
534
+ .sort((a, b) => b.score - a.score || String(a.symbol.symbol_id).localeCompare(String(b.symbol.symbol_id)))
535
+ .slice(0, maxNodes)
536
+ .map((item) => item.symbol);
537
+
538
+ const byId = new Map(ranked.map((symbol) => [String(symbol.symbol_id || ''), symbol]));
539
+ const byShortName = new Map();
540
+ for (const symbol of ranked) {
541
+ const shortName = String(symbol.name || '').split('.').pop();
542
+ if (!shortName) continue;
543
+ if (!byShortName.has(shortName)) byShortName.set(shortName, []);
544
+ byShortName.get(shortName).push(symbol);
545
+ }
546
+
547
+ const nodes = ranked.map((symbol) => ({
548
+ id: symbol.symbol_id,
549
+ label: symbol.name || symbol.symbol_id,
550
+ type: symbol.type || 'symbol',
551
+ file: symbol.file || '',
552
+ range: symbol.range || null,
553
+ signature: symbol.signature || '',
554
+ calls: clipGraphList(symbol.calls || [], 8),
555
+ called_by: clipGraphList(symbol.called_by || [], 8),
556
+ imports: clipGraphList(symbol.imports || [], 6),
557
+ writes: clipGraphList(symbol.writes || [], 6),
558
+ emits: clipGraphList(symbol.emits || [], 6)
559
+ }));
560
+
561
+ const edgeMap = new Map();
562
+ const addEdge = (source, target, kind, label = '') => {
563
+ if (!source || !target || source === target) return;
564
+ if (!byId.has(source) || !byId.has(target)) return;
565
+ const key = `${source}->${target}:${kind}`;
566
+ if (!edgeMap.has(key)) edgeMap.set(key, { source, target, kind, label });
567
+ };
568
+
569
+ for (const symbol of ranked) {
570
+ const source = String(symbol.symbol_id || '');
571
+ for (const call of symbol.calls || []) {
572
+ const shortName = String(call || '').split('.').pop();
573
+ for (const target of byShortName.get(shortName) || []) {
574
+ addEdge(source, target.symbol_id, 'calls', call);
575
+ }
576
+ }
577
+ for (const caller of symbol.called_by || []) {
578
+ addEdge(caller, source, 'called_by');
579
+ }
580
+ }
581
+
582
+ const edges = [...edgeMap.values()].slice(0, 80);
583
+
584
+ return {
585
+ updatedAt: fileIndex?.updatedAt || '',
586
+ stats: {
587
+ files: files.length,
588
+ source_files: sourceFiles.length,
589
+ symbols: symbols.length,
590
+ displayed_nodes: nodes.length,
591
+ displayed_edges: edges.length
592
+ },
593
+ nodes,
594
+ edges
595
+ };
596
+ }
498
597
 
499
598
  function commonPathPrefix(paths) {
500
599
  const normalized = paths.map((p) => path.resolve(p).split(path.sep).filter(Boolean));
@@ -708,10 +807,10 @@ async function main() {
708
807
  return;
709
808
  }
710
809
 
711
- // ── CodeWiki / project requirements reports ──
712
- if (req.method === 'GET' && url.pathname === '/api/codewiki/reports') {
713
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
714
- const requirementsDir = getRequirementsDir(codeWikiProjectDir);
810
+ // ── CodeWiki / project requirements reports ──
811
+ if (req.method === 'GET' && url.pathname === '/api/codewiki/reports') {
812
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
813
+ const requirementsDir = getRequirementsDir(codeWikiProjectDir);
715
814
  try {
716
815
  const entries = await fs.readdir(requirementsDir, { withFileTypes: true });
717
816
  const reports = [];
@@ -732,38 +831,38 @@ async function main() {
732
831
  if (err?.code === 'ENOENT') jsonResponse(res, { reports: [] });
733
832
  else jsonResponse(res, { error: true, message: err.message }, 500);
734
833
  }
735
- return;
736
- }
737
-
738
- if (req.method === 'GET' && url.pathname === '/api/codewiki/symbol-graph') {
739
- try {
740
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
741
- const initialized = await initializeProjectIndex(codeWikiProjectDir);
742
- const projectRoot = initialized?.projectRoot || codeWikiProjectDir;
743
- const fileIndexPath = getFileIndexPath(projectRoot);
744
- const fileIndex = JSON.parse(await fs.readFile(fileIndexPath, 'utf8'));
745
- const maxNodes = Math.max(12, Math.min(80, Number(url.searchParams.get('max_nodes') || 42)));
746
- jsonResponse(res, buildCodeWikiSymbolGraph(fileIndex, { maxNodes }));
747
- } catch (err) {
748
- jsonResponse(res, {
749
- updatedAt: '',
750
- stats: { files: 0, symbols: 0, displayed_nodes: 0, displayed_edges: 0 },
751
- nodes: [],
752
- edges: [],
753
- error: err?.message || String(err)
754
- });
755
- }
756
- return;
757
- }
758
-
759
- if (req.method === 'GET' && url.pathname.startsWith('/api/codewiki/report/')) {
834
+ return;
835
+ }
836
+
837
+ if (req.method === 'GET' && url.pathname === '/api/codewiki/symbol-graph') {
838
+ try {
839
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
840
+ const initialized = await initializeProjectIndex(codeWikiProjectDir);
841
+ const projectRoot = initialized?.projectRoot || codeWikiProjectDir;
842
+ const fileIndexPath = getFileIndexPath(projectRoot);
843
+ const fileIndex = JSON.parse(await fs.readFile(fileIndexPath, 'utf8'));
844
+ const maxNodes = Math.max(12, Math.min(80, Number(url.searchParams.get('max_nodes') || 42)));
845
+ jsonResponse(res, buildCodeWikiSymbolGraph(fileIndex, { maxNodes }));
846
+ } catch (err) {
847
+ jsonResponse(res, {
848
+ updatedAt: '',
849
+ stats: { files: 0, symbols: 0, displayed_nodes: 0, displayed_edges: 0 },
850
+ nodes: [],
851
+ edges: [],
852
+ error: err?.message || String(err)
853
+ });
854
+ }
855
+ return;
856
+ }
857
+
858
+ if (req.method === 'GET' && url.pathname.startsWith('/api/codewiki/report/')) {
760
859
  const fileName = decodeURIComponent(url.pathname.slice('/api/codewiki/report/'.length));
761
860
  if (!isCodeWikiReportFile(fileName)) {
762
861
  jsonResponse(res, { error: true, message: 'Invalid report file' }, 400);
763
862
  return;
764
863
  }
765
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
766
- const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
864
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
865
+ const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
767
866
  const reportPath = path.resolve(requirementsDir, fileName);
768
867
  if (!reportPath.startsWith(`${requirementsDir}${path.sep}`)) {
769
868
  jsonResponse(res, { error: true, message: 'Invalid report path' }, 403);
@@ -779,8 +878,8 @@ async function main() {
779
878
  jsonResponse(res, { error: true, message: 'Invalid report file' }, 400);
780
879
  return;
781
880
  }
782
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
783
- const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
881
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
882
+ const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
784
883
  const reportPath = path.resolve(requirementsDir, fileName);
785
884
  if (!reportPath.startsWith(`${requirementsDir}${path.sep}`)) {
786
885
  jsonResponse(res, { error: true, message: 'Invalid report path' }, 403);
@@ -801,23 +900,23 @@ async function main() {
801
900
  jsonResponse(res, { error: true, message: 'Runtime is busy' }, 409);
802
901
  return;
803
902
  }
804
- const { depth } = await readBody(req);
805
- const normalizedDepth = ['fast', 'standard', 'deep'].includes(String(depth || '').toLowerCase())
806
- ? String(depth).toLowerCase()
807
- : 'standard';
808
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
809
- if (codeWikiProjectDir !== currentProjectDir) {
810
- const { runtime } = await buildRuntimeForSession({
811
- model: bridge.getState().model,
812
- projectDir: codeWikiProjectDir
813
- });
814
- await bridge.switchRuntime(runtime);
815
- currentProjectDir = process.cwd();
816
- }
817
- const result = bridge.handleCodeWikiGenerate(`/project-requirements --${normalizedDepth}`);
818
- jsonResponse(res, result);
819
- return;
820
- }
903
+ const { depth } = await readBody(req);
904
+ const normalizedDepth = ['fast', 'standard', 'deep'].includes(String(depth || '').toLowerCase())
905
+ ? String(depth).toLowerCase()
906
+ : 'standard';
907
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
908
+ if (codeWikiProjectDir !== currentProjectDir) {
909
+ const { runtime } = await buildRuntimeForSession({
910
+ model: bridge.getState().model,
911
+ projectDir: codeWikiProjectDir
912
+ });
913
+ await bridge.switchRuntime(runtime);
914
+ currentProjectDir = process.cwd();
915
+ }
916
+ const result = bridge.handleCodeWikiGenerate(`/project-requirements --${normalizedDepth}`);
917
+ jsonResponse(res, result);
918
+ return;
919
+ }
821
920
 
822
921
  if (req.method === 'POST' && url.pathname === '/api/codewiki/ask') {
823
922
  const { question, reportFile } = await readBody(req);
@@ -841,16 +940,16 @@ async function main() {
841
940
  jsonResponse(res, { error: true, message: 'Runtime is busy' }, 409);
842
941
  return;
843
942
  }
844
- const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
845
- const reportPath = selectedReport
846
- ? path.join(getRequirementsDir(codeWikiProjectDir), selectedReport)
847
- : getRequirementsDir(codeWikiProjectDir);
848
- const prompt = buildCodeWikiAskPrompt({
849
- question,
850
- reportPath,
851
- projectDir: codeWikiProjectDir,
852
- replyLanguage: bridge.getState()?.replyLanguage
853
- });
943
+ const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
944
+ const reportPath = selectedReport
945
+ ? path.join(getRequirementsDir(codeWikiProjectDir), selectedReport)
946
+ : getRequirementsDir(codeWikiProjectDir);
947
+ const prompt = buildCodeWikiAskPrompt({
948
+ question,
949
+ reportPath,
950
+ projectDir: codeWikiProjectDir,
951
+ replyLanguage: bridge.getState()?.replyLanguage
952
+ });
854
953
 
855
954
  res.writeHead(200, {
856
955
  'Content-Type': 'application/x-ndjson; charset=utf-8',
@@ -1114,28 +1213,64 @@ async function main() {
1114
1213
  }
1115
1214
  return;
1116
1215
  }
1117
- if (req.method === 'GET' && url.pathname.startsWith('/api/config/get/')) {
1118
- const key = url.pathname.slice('/api/config/get/'.length);
1119
- const value = await getConfigValue(key);
1120
- jsonResponse(res, { key, value });
1121
- return;
1122
- }
1123
-
1124
- // ── Skills management ──
1125
- if (req.method === 'GET' && url.pathname === '/api/skills') {
1126
- try {
1127
- const skills = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1128
- jsonResponse(res, skills);
1129
- } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1130
- return;
1131
- }
1132
- if (req.method === 'GET' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
1133
- const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
1134
- try {
1135
- const entries = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1136
- const skill = entries.find(s => s.name === name);
1137
- if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1138
- const content = await fs.readFile(skill.path, 'utf8');
1216
+ if (req.method === 'GET' && url.pathname.startsWith('/api/config/get/')) {
1217
+ const key = url.pathname.slice('/api/config/get/'.length);
1218
+ const value = await getConfigValue(key);
1219
+ jsonResponse(res, { key, value });
1220
+ return;
1221
+ }
1222
+
1223
+ // ── Memory management ──
1224
+ if (req.method === 'GET' && url.pathname === '/api/memory') {
1225
+ const scope = normalizeMemoryScope(url.searchParams.get('scope'));
1226
+ const query = String(url.searchParams.get('q') || '').trim();
1227
+ try {
1228
+ const projectDirs = await parseProjectDirsParam(url, currentProjectDir);
1229
+ const items = await listMemoriesForProjectDirs({
1230
+ scope,
1231
+ query,
1232
+ projectDirs,
1233
+ fallbackDir: currentProjectDir
1234
+ });
1235
+ jsonResponse(res, { scope, query, items });
1236
+ } catch (err) {
1237
+ jsonResponse(res, { error: true, message: err.message }, 500);
1238
+ }
1239
+ return;
1240
+ }
1241
+ if (req.method === 'DELETE' && url.pathname.startsWith('/api/memory/')) {
1242
+ const id = decodeURIComponent(url.pathname.slice('/api/memory/'.length));
1243
+ const scope = normalizeMemoryScope(url.searchParams.get('scope'));
1244
+ if (!id) { jsonResponse(res, { error: true, message: 'Missing memory id' }, 400); return; }
1245
+ try {
1246
+ const workspaceRoot = scope === 'project'
1247
+ ? await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir)
1248
+ : currentProjectDir;
1249
+ const result = await forgetMemory({ scope, id, workspaceRoot });
1250
+ jsonResponse(res, { ok: true, scope, ...result });
1251
+ } catch (err) {
1252
+ jsonResponse(res, { error: true, message: err.message }, 500);
1253
+ }
1254
+ return;
1255
+ }
1256
+
1257
+ // ── Skills management ──
1258
+ if (req.method === 'GET' && url.pathname === '/api/skills') {
1259
+ try {
1260
+ const projectDirs = await parseProjectDirsParam(url, currentProjectDir);
1261
+ const skills = await listSkillsForProjectDirs(projectDirs, currentProjectDir);
1262
+ jsonResponse(res, skills);
1263
+ } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1264
+ return;
1265
+ }
1266
+ if (req.method === 'GET' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
1267
+ const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
1268
+ try {
1269
+ const targetProjectDir = await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir);
1270
+ const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
1271
+ const skill = entries.find(s => s.name === name);
1272
+ if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1273
+ const content = await fs.readFile(skill.path, 'utf8');
1139
1274
  jsonResponse(res, { name: skill.name, content, scope: skill.scope });
1140
1275
  } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1141
1276
  return;
@@ -1192,38 +1327,40 @@ async function main() {
1192
1327
  } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1193
1328
  return;
1194
1329
  }
1195
- if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
1196
- const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
1197
- const { content } = await readBody(req);
1198
- if (!content) { jsonResponse(res, { error: true, message: 'Missing content' }, 400); return; }
1199
- try {
1200
- const entries = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1201
- const skill = entries.find(s => s.name === name);
1202
- if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1203
- if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot edit builtin skill' }, 403); return; }
1330
+ if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
1331
+ const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
1332
+ const { content, projectDir } = await readBody(req);
1333
+ if (!content) { jsonResponse(res, { error: true, message: 'Missing content' }, 400); return; }
1334
+ try {
1335
+ const targetProjectDir = await resolveRequestProjectDir(projectDir, currentProjectDir);
1336
+ const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
1337
+ const skill = entries.find(s => s.name === name);
1338
+ if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1339
+ if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot edit builtin skill' }, 403); return; }
1204
1340
  await fs.writeFile(skill.path, content, 'utf8');
1205
1341
  await bridge.reloadCommandsAndSkills();
1206
1342
  jsonResponse(res, { ok: true });
1207
1343
  } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1208
1344
  return;
1209
1345
  }
1210
- if (req.method === 'DELETE' && url.pathname.startsWith('/api/skills/')) {
1211
- const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length));
1212
- try {
1213
- const entries = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1214
- const skill = entries.find(s => s.name === name);
1215
- if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1216
- if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot delete builtin skill' }, 403); return; }
1346
+ if (req.method === 'DELETE' && url.pathname.startsWith('/api/skills/')) {
1347
+ const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length));
1348
+ try {
1349
+ const targetProjectDir = await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir);
1350
+ const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
1351
+ const skill = entries.find(s => s.name === name);
1352
+ if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1353
+ if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot delete builtin skill' }, 403); return; }
1217
1354
  const dir = path.dirname(skill.path);
1218
1355
  await fs.rm(dir, { recursive: true, force: true });
1219
1356
  const registry = await readSkillRegistry();
1220
1357
  registry.skills = (registry.skills || []).filter(s => s.name !== name);
1221
1358
  await writeSkillRegistry(undefined, registry);
1222
- const catalog = await readProjectSkillCatalog(currentProjectDir);
1223
- if (catalog.skills?.[name]) {
1224
- delete catalog.skills[name];
1225
- await writeProjectSkillCatalog(currentProjectDir, catalog);
1226
- }
1359
+ const catalog = await readProjectSkillCatalog(targetProjectDir);
1360
+ if (catalog.skills?.[name]) {
1361
+ delete catalog.skills[name];
1362
+ await writeProjectSkillCatalog(targetProjectDir, catalog);
1363
+ }
1227
1364
  await deleteSkillCatalogMetadata(getSkillsDir(), name);
1228
1365
  const config = await loadConfig();
1229
1366
  if (config.skills?.enabled) delete config.skills.enabled[name];
@@ -1233,12 +1370,13 @@ async function main() {
1233
1370
  } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1234
1371
  return;
1235
1372
  }
1236
- if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/metadata')) {
1237
- const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/metadata'.length));
1238
- const body = await readBody(req);
1239
- try {
1240
- const entries = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1241
- const skill = entries.find(s => s.name === name);
1373
+ if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/metadata')) {
1374
+ const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/metadata'.length));
1375
+ const body = await readBody(req);
1376
+ try {
1377
+ const targetProjectDir = await resolveRequestProjectDir(body?.projectDir, currentProjectDir);
1378
+ const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
1379
+ const skill = entries.find(s => s.name === name);
1242
1380
  if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1243
1381
  if (skill.scope === 'builtin' && body?.scope && body.scope !== 'builtin') {
1244
1382
  jsonResponse(res, { error: true, message: 'Cannot move builtin skill' }, 403);
@@ -1250,15 +1388,15 @@ async function main() {
1250
1388
  let nextScope = skill.scope;
1251
1389
 
1252
1390
  if (skill.scope !== 'builtin' && requestedScope !== skill.scope) {
1253
- const sourceDir = path.dirname(skill.path);
1254
- const targetBaseDir = skillBaseDirForScope(requestedScope, currentProjectDir);
1255
- const targetDir = path.join(targetBaseDir, name);
1391
+ const sourceDir = path.dirname(skill.path);
1392
+ const targetBaseDir = skillBaseDirForScope(requestedScope, targetProjectDir);
1393
+ const targetDir = path.join(targetBaseDir, name);
1256
1394
  await fs.rm(targetDir, { recursive: true, force: true });
1257
1395
  await fs.mkdir(path.dirname(targetDir), { recursive: true });
1258
1396
  await fs.cp(sourceDir, targetDir, { recursive: true, force: true });
1259
1397
  await fs.rm(sourceDir, { recursive: true, force: true });
1260
- if (requestedScope === 'global') {
1261
- await deleteSkillCatalogMetadata(getProjectSkillsDir(currentProjectDir), name);
1398
+ if (requestedScope === 'global') {
1399
+ await deleteSkillCatalogMetadata(getProjectSkillsDir(targetProjectDir), name);
1262
1400
  await upsertSkillRegistryEntry(undefined, {
1263
1401
  name,
1264
1402
  version: skill.version || '0.0.0',
@@ -1285,13 +1423,13 @@ async function main() {
1285
1423
  ...(metadataPatch.enabled !== undefined ? { enabled: metadataPatch.enabled } : {})
1286
1424
  });
1287
1425
  metadata = await upsertSkillCatalogMetadata(getSkillsDir(), name, body || {});
1288
- } else if (nextScope === 'project') {
1289
- metadata = await upsertProjectSkillMetadata(currentProjectDir, name, body || {});
1290
- } else if (skill.scope !== 'builtin') {
1291
- metadata = await upsertProjectSkillMetadata(currentProjectDir, name, body || {});
1292
- } else {
1293
- metadata = await upsertProjectSkillMetadata(currentProjectDir, name, body || {});
1294
- }
1426
+ } else if (nextScope === 'project') {
1427
+ metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
1428
+ } else if (skill.scope !== 'builtin') {
1429
+ metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
1430
+ } else {
1431
+ metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
1432
+ }
1295
1433
  if (skill.scope !== 'builtin' && body?.enabled !== undefined) {
1296
1434
  const config = await loadConfig();
1297
1435
  config.skills = config.skills || {};
@@ -1307,15 +1445,16 @@ async function main() {
1307
1445
  } catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
1308
1446
  return;
1309
1447
  }
1310
- if (req.method === 'POST' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/toggle')) {
1311
- const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/toggle'.length));
1312
- const { enabled } = await readBody(req);
1313
- try {
1314
- const entries = await listSkillEntries({ scope: 'all', cwd: currentProjectDir });
1315
- const skill = entries.find(s => s.name === name);
1316
- if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1317
- if (skill.scope === 'builtin') {
1318
- const metadata = await upsertProjectSkillMetadata(currentProjectDir, name, { enabled });
1448
+ if (req.method === 'POST' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/toggle')) {
1449
+ const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/toggle'.length));
1450
+ const { enabled, projectDir } = await readBody(req);
1451
+ try {
1452
+ const targetProjectDir = await resolveRequestProjectDir(projectDir, currentProjectDir);
1453
+ const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
1454
+ const skill = entries.find(s => s.name === name);
1455
+ if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
1456
+ if (skill.scope === 'builtin') {
1457
+ const metadata = await upsertProjectSkillMetadata(targetProjectDir, name, { enabled });
1319
1458
  await bridge.reloadCommandsAndSkills();
1320
1459
  jsonResponse(res, { ok: true, name, metadata });
1321
1460
  return;