codemini-cli 0.6.2 → 0.6.4

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