codemini-cli 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/codemini-web/dist/assets/AboutDialog-jgqGjQgl.js +3 -0
- package/codemini-web/dist/assets/CodeWikiPanel-EPuoerNv.js +1 -0
- package/codemini-web/dist/assets/ConfigDialog-B5IGZCc9.js +1 -0
- package/codemini-web/dist/assets/GitDiffDialog-Bb_Tw5ZK.js +222 -0
- package/codemini-web/dist/assets/MemoryDialog-BhxQgG0I.js +3 -0
- package/codemini-web/dist/assets/MessageBubble-wUff4GP4.js +6 -0
- package/codemini-web/dist/assets/ProjectSelector-C0leTf6f.js +1 -0
- package/codemini-web/dist/assets/SkillDialog-DxS43NpR.js +8 -0
- package/codemini-web/dist/assets/SoulDialog-XDTEGWvH.js +1 -0
- package/codemini-web/dist/assets/{angular-html-CHsdtmkx.js → angular-html-BtqWAyby.js} +1 -1
- package/codemini-web/dist/assets/{angular-html-DlSp9HPG.js → angular-html-Dqm-Ium4.js} +1 -1
- package/codemini-web/dist/assets/{angular-ts-B29Ypg6B.js → angular-ts-BUlY5dZZ.js} +1 -1
- package/codemini-web/dist/assets/{angular-ts-JNDGGWj0.js → angular-ts-DXMH5pbz.js} +1 -1
- package/codemini-web/dist/assets/{apl-BASZ7uB_.js → apl-B9jkvghZ.js} +1 -1
- package/codemini-web/dist/assets/{apl-Byuv-g-O.js → apl-Bt--uCmj.js} +1 -1
- package/codemini-web/dist/assets/{astro-CTzEugGW.js → astro-P-Wk2Uo3.js} +1 -1
- package/codemini-web/dist/assets/{astro-l-XABzN2.js → astro-ZfS8gVPQ.js} +1 -1
- package/codemini-web/dist/assets/{blade-B3_bxlV2.js → blade-CxVOILUn.js} +1 -1
- package/codemini-web/dist/assets/{blade-Dt6km9YT.js → blade-DsiMSXb3.js} +1 -1
- package/codemini-web/dist/assets/{bsl-CPV9KqsG.js → bsl-9Rfj8X2G.js} +1 -1
- package/codemini-web/dist/assets/{bsl-D3u1l2dW.js → bsl-CZ9gUG7G.js} +1 -1
- package/codemini-web/dist/assets/bundle-mjs-C44PrJ2C.js +1 -0
- package/codemini-web/dist/assets/{cairo-CoQzhJ_o.js → cairo-B8t0-PSB.js} +1 -1
- package/codemini-web/dist/assets/{cairo-CyiRuu7R.js → cairo-CZcbsYHl.js} +1 -1
- package/codemini-web/dist/assets/chevron-right-Dbzw7YzA.js +1 -0
- package/codemini-web/dist/assets/chunk-BO2N2NFS-Budy_hfO.js +131 -0
- package/codemini-web/dist/assets/{cobol-D_kesMA-.js → cobol-BdhxDqSp.js} +1 -1
- package/codemini-web/dist/assets/{cobol-DqhY5el-.js → cobol-C67LYEki.js} +1 -1
- package/codemini-web/dist/assets/{coffee-DF15_0rk.js → coffee-C_zREOQP.js} +1 -1
- package/codemini-web/dist/assets/{coffee-rY-gkJy7.js → coffee-DYSdownS.js} +1 -1
- package/codemini-web/dist/assets/{cpp-Bw-qV0P6.js → cpp-BcL70P81.js} +1 -1
- package/codemini-web/dist/assets/{cpp-Cudwe5mG.js → cpp-CmF4N5qy.js} +1 -1
- package/codemini-web/dist/assets/{crystal-DV9Nijjb.js → crystal-CoqbT5f8.js} +1 -1
- package/codemini-web/dist/assets/{crystal-Bw1_1hFA.js → crystal-N7P3W5Mw.js} +1 -1
- package/codemini-web/dist/assets/{edge-BosfXYh1.js → edge-DrMWCZ8c.js} +1 -1
- package/codemini-web/dist/assets/{edge-r5NIe9Lp.js → edge-DytV3yX5.js} +1 -1
- package/codemini-web/dist/assets/{elixir-B04apOJS.js → elixir-BLpitXJw.js} +1 -1
- package/codemini-web/dist/assets/{elixir-Dw_vsdUl.js → elixir-CNV7hmh2.js} +1 -1
- package/codemini-web/dist/assets/{elm-Cezz_HNz.js → elm-C5ZqKzP8.js} +1 -1
- package/codemini-web/dist/assets/{elm-DPfFNNkG.js → elm-DuNA2Kle.js} +1 -1
- package/codemini-web/dist/assets/{erb-BNioEFKQ.js → erb-Cx6GPjju.js} +1 -1
- package/codemini-web/dist/assets/{erb-DZuoCU5t.js → erb-CxvZayEs.js} +1 -1
- package/codemini-web/dist/assets/{erlang-BC8wryba.js → erlang-3or6Qr_S.js} +1 -1
- package/codemini-web/dist/assets/{erlang-CqHCISqs.js → erlang-CdOz9ruD.js} +1 -1
- package/codemini-web/dist/assets/{fortran-fixed-form-60ZQAHDk.js → fortran-fixed-form-BmD2L0UY.js} +1 -1
- package/codemini-web/dist/assets/{fortran-fixed-form-CyrImzNA.js → fortran-fixed-form-Hy2szps7.js} +1 -1
- package/codemini-web/dist/assets/{fsharp-Ch5ZVinn.js → fsharp-CgGHW39K.js} +1 -1
- package/codemini-web/dist/assets/{fsharp-OCW_PZ4J.js → fsharp-DgKUr7h2.js} +1 -1
- package/codemini-web/dist/assets/{gdresource-Cl3bohRI.js → gdresource-BqgTfeIa.js} +1 -1
- package/codemini-web/dist/assets/{gdresource-CqNLhJW1.js → gdresource-D6abIutu.js} +1 -1
- package/codemini-web/dist/assets/{git-commit-CSWECvqq.js → git-commit-CPnaL3nl.js} +1 -1
- package/codemini-web/dist/assets/{git-commit-DJZpdBwB.js → git-commit-DBwdkqC2.js} +1 -1
- package/codemini-web/dist/assets/{git-rebase-BJE30GTP.js → git-rebase-BVjWygdV.js} +1 -1
- package/codemini-web/dist/assets/{git-rebase-MUvuytPe.js → git-rebase-CLt-2irw.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-js-Dn6vjgHP.js → glimmer-js-BhZXPPf_.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-js-HDDEErW7.js → glimmer-js-bG2aM9pf.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-ts-Dq0_BflX.js → glimmer-ts-BZwU8tUk.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-ts-mq-Q_zEE.js → glimmer-ts-D6GU3-HZ.js} +1 -1
- package/codemini-web/dist/assets/{glsl-C4rvog10.js → glsl-BZXoHx-5.js} +1 -1
- package/codemini-web/dist/assets/{glsl-C8VPaAWs.js → glsl-BsJMlsXZ.js} +1 -1
- package/codemini-web/dist/assets/{graphql-Dg0Ewf8Q.js → graphql-Bzui-_oF.js} +1 -1
- package/codemini-web/dist/assets/{graphql-WZCiqIl-.js → graphql-lozg2JzK.js} +1 -1
- package/codemini-web/dist/assets/{hack-DeD259o6.js → hack-BIx3oBuG.js} +1 -1
- package/codemini-web/dist/assets/{hack-DjE76gIx.js → hack-Dl73UNBo.js} +1 -1
- package/codemini-web/dist/assets/{haml-B8MRe8CS.js → haml-BL3Pq-bL.js} +1 -1
- package/codemini-web/dist/assets/{haml-DyIc_iO2.js → haml-CvBskpbA.js} +1 -1
- package/codemini-web/dist/assets/{handlebars-DQ4X08Zf.js → handlebars-Ca8Ew3WT.js} +1 -1
- package/codemini-web/dist/assets/{handlebars-GoJyzhp1.js → handlebars-Dl0DZ9iU.js} +1 -1
- package/codemini-web/dist/assets/highlighted-body-OFNGDK62-CQS1PAvD.js +1 -0
- package/codemini-web/dist/assets/{html-GfHBuoLs.js → html-CCOAFbPU.js} +1 -1
- package/codemini-web/dist/assets/{html-B7kk5NVw.js → html-DFeJ4St6.js} +1 -1
- package/codemini-web/dist/assets/{html-derivative-Ba28nVB3.js → html-derivative-BN80HtRR.js} +1 -1
- package/codemini-web/dist/assets/{html-derivative-ChSmSZXY.js → html-derivative-BPYIQd1q.js} +1 -1
- package/codemini-web/dist/assets/{http-DMTBhQm8.js → http-BT0m2fV8.js} +1 -1
- package/codemini-web/dist/assets/{http-Deln4Vyb.js → http-BaSHFqsp.js} +1 -1
- package/codemini-web/dist/assets/{hurl-CYSuhGkj.js → hurl-Cu0t_0Ag.js} +1 -1
- package/codemini-web/dist/assets/{hurl-XIpACwjS.js → hurl-QdCmCx_B.js} +1 -1
- package/codemini-web/dist/assets/{hxml-BmF7ngDz.js → hxml-DlOl0PEf.js} +1 -1
- package/codemini-web/dist/assets/{hxml-PnV_FpS-.js → hxml-IWjzRLpN.js} +1 -1
- package/codemini-web/dist/assets/index-D0EGtNPr.js +65 -0
- package/codemini-web/dist/assets/index-wOUf3WkN.css +2 -0
- package/codemini-web/dist/assets/input-CNQgbKe6.js +1 -0
- package/codemini-web/dist/assets/{jinja-8ATGhxJO.js → jinja-Cnv9YtxF.js} +1 -1
- package/codemini-web/dist/assets/{jinja-Dx5IcFSt.js → jinja-CzKj-PyV.js} +1 -1
- package/codemini-web/dist/assets/{jison-CSsYnr7O.js → jison-CMHmT6Zn.js} +1 -1
- package/codemini-web/dist/assets/{jison-DuNOGix6.js → jison-V0queBoO.js} +1 -1
- package/codemini-web/dist/assets/{julia-Cqc1ADyw.js → julia-D6Tp2lkv.js} +1 -1
- package/codemini-web/dist/assets/{julia-vjG00jwO.js → julia-ssnM4-62.js} +1 -1
- package/codemini-web/dist/assets/{just-C7G3KFgN.js → just-BYVm1Mrm.js} +1 -1
- package/codemini-web/dist/assets/{just-BlUYrdKb.js → just-DNL8d4mn.js} +1 -1
- package/codemini-web/dist/assets/{latex-BEPTKliI.js → latex--PKG7pkB.js} +1 -1
- package/codemini-web/dist/assets/{latex-D8-NgtPj.js → latex-BKz2_Nxu.js} +1 -1
- package/codemini-web/dist/assets/lib-BOngVP_M.js +11 -0
- package/codemini-web/dist/assets/lib-DrOTTm_N.js +1 -0
- package/codemini-web/dist/assets/{liquid-BUh7yINm.js → liquid-CmT9c2rW.js} +1 -1
- package/codemini-web/dist/assets/{liquid-D2m0XXrV.js → liquid-CnfwjcTC.js} +1 -1
- package/codemini-web/dist/assets/{lua-BeSXusec.js → lua-CG2sJZNs.js} +1 -1
- package/codemini-web/dist/assets/{lua-BroxvhVt.js → lua-D82-t9Zc.js} +1 -1
- package/codemini-web/dist/assets/{marko-Dm8xPXkG.js → marko-BXWoQ9lL.js} +1 -1
- package/codemini-web/dist/assets/{marko-DPnRthJQ.js → marko-CJF04FnX.js} +1 -1
- package/codemini-web/dist/assets/{mdc-BLdFHYKv.js → mdc-DjUuZ2FY.js} +1 -1
- package/codemini-web/dist/assets/{mdc-Dzipcsdb.js → mdc-uFBHmEgm.js} +1 -1
- package/codemini-web/dist/assets/mermaid-GHXKKRXX-DrBu5KyC.js +1 -0
- package/codemini-web/dist/assets/{nextflow-BRiWOV-p.js → nextflow-CK5HLJvq.js} +1 -1
- package/codemini-web/dist/assets/{nextflow-c8YCPRRb.js → nextflow-S7dXFF9l.js} +1 -1
- package/codemini-web/dist/assets/{nginx-Da_Uewgc.js → nginx-3W9nM9y_.js} +1 -1
- package/codemini-web/dist/assets/{nginx-u-hq5m-a.js → nginx-BC64-3-i.js} +1 -1
- package/codemini-web/dist/assets/{nim-CvgRYLO2.js → nim-DWppal1v.js} +1 -1
- package/codemini-web/dist/assets/{nim-B5b6_jZr.js → nim-x_81C3Qr.js} +1 -1
- package/codemini-web/dist/assets/pencil-Ce_LFiEh.js +1 -0
- package/codemini-web/dist/assets/{perl-BIcNvyL6.js → perl-C6Dd0zxb.js} +1 -1
- package/codemini-web/dist/assets/{perl-DdF12AsD.js → perl-Drip2S24.js} +1 -1
- package/codemini-web/dist/assets/{php-CyQZnE0l.js → php-9sDqPlZW.js} +1 -1
- package/codemini-web/dist/assets/{php-BP-3TkW_.js → php-BbiCqfrp.js} +1 -1
- package/codemini-web/dist/assets/{pug-HwoxZo9M.js → pug-BYheLFcw.js} +1 -1
- package/codemini-web/dist/assets/{pug-_XoIcKf3.js → pug-D4U6GWCU.js} +1 -1
- package/codemini-web/dist/assets/{qml-CysuucQ6.js → qml-C7Gvixtn.js} +1 -1
- package/codemini-web/dist/assets/{qml-DWxWu28U.js → qml-D3LW5Eh4.js} +1 -1
- package/codemini-web/dist/assets/{razor-ZpEr_C9H.js → razor-CeMDYz78.js} +1 -1
- package/codemini-web/dist/assets/{razor-DQ6FV4WL.js → razor-wtlbOx1Y.js} +1 -1
- package/codemini-web/dist/assets/refresh-cw-BKL-AZu5.js +1 -0
- package/codemini-web/dist/assets/{rst-CjO4XFKz.js → rst-4NiHKVzB.js} +1 -1
- package/codemini-web/dist/assets/{rst-DDrWKQ9c.js → rst-CUgtqtsm.js} +1 -1
- package/codemini-web/dist/assets/{ruby-CZgIYPlP.js → ruby-DJfS371J.js} +1 -1
- package/codemini-web/dist/assets/{ruby-BOVYgV5O.js → ruby-DQmpjmxU.js} +1 -1
- package/codemini-web/dist/assets/{sas-DPGT0TjQ.js → sas-B3ML-BPY.js} +1 -1
- package/codemini-web/dist/assets/{sas-DYNukvU9.js → sas-BXFb3Byc.js} +1 -1
- package/codemini-web/dist/assets/{scss-CaciJ0Gl.js → scss-By7PHVyf.js} +1 -1
- package/codemini-web/dist/assets/{scss-YARKxu2i.js → scss-CQGBghOa.js} +1 -1
- package/codemini-web/dist/assets/select-BZXfigic.js +1 -0
- package/codemini-web/dist/assets/{shaderlab-JWcsxey4.js → shaderlab-Ds6Ob14m.js} +1 -1
- package/codemini-web/dist/assets/{shaderlab-TbUUdmUb.js → shaderlab-jhHUXThs.js} +1 -1
- package/codemini-web/dist/assets/{shellsession-BeWGuVoR.js → shellsession-1pj9xPto.js} +1 -1
- package/codemini-web/dist/assets/{shellsession-DYmuifdt.js → shellsession-mbgkQZNs.js} +1 -1
- package/codemini-web/dist/assets/{soy-7iHZG9Jz.js → soy-Brdxowwc.js} +1 -1
- package/codemini-web/dist/assets/{soy-h0dQKbQs.js → soy-CyoIOmkE.js} +1 -1
- package/codemini-web/dist/assets/{sparql-BGRSvFxd.js → sparql-D050l-1j.js} +1 -1
- package/codemini-web/dist/assets/{sparql-DIFvSn1n.js → sparql-EV95tWuj.js} +1 -1
- package/codemini-web/dist/assets/{stata-C5mLa_ER.js → stata-Cxm-fX20.js} +1 -1
- package/codemini-web/dist/assets/{stata-lXN9BRaz.js → stata-rcB48Bwa.js} +1 -1
- package/codemini-web/dist/assets/{surrealql-DyoUfV6n.js → surrealql-BEIq2Ti9.js} +1 -1
- package/codemini-web/dist/assets/{surrealql-l0SGzwOs.js → surrealql-C89H8_VG.js} +1 -1
- package/codemini-web/dist/assets/{svelte-BM89dRu0.js → svelte-DLivETBJ.js} +1 -1
- package/codemini-web/dist/assets/{svelte-CijnRGul.js → svelte-DVuJzFhW.js} +1 -1
- package/codemini-web/dist/assets/{templ-CNjJl440.js → templ-DCO78tPK.js} +1 -1
- package/codemini-web/dist/assets/{templ-D1GoDFsp.js → templ-Dr4toWAi.js} +1 -1
- package/codemini-web/dist/assets/{tex-CxEkh6NI.js → tex-C26OlX33.js} +1 -1
- package/codemini-web/dist/assets/{tex-ezg8IclB.js → tex-CAFucSbn.js} +1 -1
- package/codemini-web/dist/assets/trash-2-KmAlCwXd.js +1 -0
- package/codemini-web/dist/assets/{ts-tags-B88Nbzcl.js → ts-tags-DXz1U_l8.js} +1 -1
- package/codemini-web/dist/assets/{ts-tags-DV6nguf9.js → ts-tags-DxtnKICy.js} +1 -1
- package/codemini-web/dist/assets/{twig-B3Kws0Fb.js → twig-BOjawstu.js} +1 -1
- package/codemini-web/dist/assets/{twig-BROkIZLg.js → twig-l2jHuCJP.js} +1 -1
- package/codemini-web/dist/assets/{vue-CT36qSUr.js → vue-DTExrAHq.js} +1 -1
- package/codemini-web/dist/assets/{vue-BUQP_8VF.js → vue-d4Ps-pL3.js} +1 -1
- package/codemini-web/dist/assets/{vue-html-Bx2Sgp8M.js → vue-html-Cc_wxOgn.js} +1 -1
- package/codemini-web/dist/assets/{vue-html-bJyjqZnI.js → vue-html-DF9b1rb0.js} +1 -1
- package/codemini-web/dist/assets/{vue-vine-BLqV15Pm.js → vue-vine-A_lRwVWt.js} +1 -1
- package/codemini-web/dist/assets/{vue-vine-RK3AHrhp.js → vue-vine-BDiNGm6C.js} +1 -1
- package/codemini-web/dist/assets/{xml-BkdunjRC.js → xml-BUsFQ36n.js} +1 -1
- package/codemini-web/dist/assets/{xml-DyJ3D9rW.js → xml-DDsJXW9N.js} +1 -1
- package/codemini-web/dist/assets/{xsl-BOsdDgv_.js → xsl-DjgS9HxR.js} +1 -1
- package/codemini-web/dist/assets/{xsl-C66i1pDH.js → xsl-TnKTzvHo.js} +1 -1
- package/codemini-web/dist/index.html +3 -2
- package/codemini-web/lib/runtime-bridge.js +94 -9
- package/codemini-web/server.js +447 -308
- package/package.json +1 -1
- package/src/core/agent-loop.js +63 -14
- package/src/core/chat-runtime.js +88 -39
- package/src/core/command-policy.js +73 -23
- package/src/core/session-store.js +34 -11
- package/src/core/tools.js +117 -50
- package/codemini-web/dist/assets/highlighted-body-OFNGDK62-DaefZcrn.js +0 -1
- package/codemini-web/dist/assets/index-Bk_gka_s.js +0 -435
- package/codemini-web/dist/assets/index-BzSHdGYY.css +0 -2
- package/codemini-web/dist/assets/mermaid-GHXKKRXX-BSt5tun0.js +0 -1
- /package/codemini-web/dist/assets/{abap-9R7RjkQK.js → abap-B7RnWQOG.js} +0 -0
- /package/codemini-web/dist/assets/{abap-BRbAAyvE.js → abap-NDM6s5zQ.js} +0 -0
- /package/codemini-web/dist/assets/{actionscript-3-CNowah7a.js → actionscript-3-C9nBr3Mh.js} +0 -0
- /package/codemini-web/dist/assets/{actionscript-3-Cj-0sM4g.js → actionscript-3-CRl2BRXz.js} +0 -0
- /package/codemini-web/dist/assets/{ada-D5HmrmpD.js → ada-BCQmYIk6.js} +0 -0
- /package/codemini-web/dist/assets/{ada-DhEA_nP5.js → ada-CySgk42_.js} +0 -0
- /package/codemini-web/dist/assets/{andromeeda-CWmR-N6V.js → andromeeda-Bnm9WW1a.js} +0 -0
- /package/codemini-web/dist/assets/{andromeeda-i_b3g2bn.js → andromeeda-szAb-NZx.js} +0 -0
- /package/codemini-web/dist/assets/{apache-D37U8o0r.js → apache-B22kDdQt.js} +0 -0
- /package/codemini-web/dist/assets/{apache-D5R2GKIs.js → apache-CQgWNR0K.js} +0 -0
- /package/codemini-web/dist/assets/{apex-CszkG4lQ.js → apex-BkGtsu4e.js} +0 -0
- /package/codemini-web/dist/assets/{apex-Qu8W4hal.js → apex-CFa_x2c9.js} +0 -0
- /package/codemini-web/dist/assets/{applescript-Ajt9gmC_.js → applescript-CCGt--QU.js} +0 -0
- /package/codemini-web/dist/assets/{applescript-CBey3ErE.js → applescript-Cb-r3lIv.js} +0 -0
- /package/codemini-web/dist/assets/{ara-CRKnUAN1.js → ara-CJYv1XlV.js} +0 -0
- /package/codemini-web/dist/assets/{ara-DpGk8XWf.js → ara-DKlv0ib1.js} +0 -0
- /package/codemini-web/dist/assets/{asciidoc-1KYZEB6-.js → asciidoc-BUOdyOiP.js} +0 -0
- /package/codemini-web/dist/assets/{asciidoc-BdDORSgx.js → asciidoc-DxgPoKvx.js} +0 -0
- /package/codemini-web/dist/assets/{asm-DAaViY0U.js → asm-2LyQSByb.js} +0 -0
- /package/codemini-web/dist/assets/{asm-DGLRM3OU.js → asm-BVk_pKLT.js} +0 -0
- /package/codemini-web/dist/assets/{aurora-x-DdfqxvM_.js → aurora-x-B7Ot8iN2.js} +0 -0
- /package/codemini-web/dist/assets/{aurora-x-LPpmXm4i.js → aurora-x-DfOR6O80.js} +0 -0
- /package/codemini-web/dist/assets/{awk-B-J9te9x.js → awk-CRf4hi6L.js} +0 -0
- /package/codemini-web/dist/assets/{awk-ButuPTaW.js → awk-adfNbTQc.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-dark-BdNJk5qF.js → ayu-dark-ADZF52JZ.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-dark-Dv4ngVMP.js → ayu-dark-CqtoqjuU.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-light-CxeOePuA.js → ayu-light-CMMeLqXc.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-light-DkLNbAkT.js → ayu-light-OVSih2Vp.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-mirage-BoyGjGHX.js → ayu-mirage-BCL1vSWF.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-mirage-i2YLXKmY.js → ayu-mirage-BZvrYN67.js} +0 -0
- /package/codemini-web/dist/assets/{ballerina-CZ8CAKmi.js → ballerina-D3rdtcDY.js} +0 -0
- /package/codemini-web/dist/assets/{ballerina-DodmBVwR.js → ballerina-G1jH5Moz.js} +0 -0
- /package/codemini-web/dist/assets/{bat-fNtaIqKE.js → bat-BRck8_tt.js} +0 -0
- /package/codemini-web/dist/assets/{bat-jA-YqDhG.js → bat-CHXtPpft.js} +0 -0
- /package/codemini-web/dist/assets/{beancount-9imagnS2.js → beancount-CvA0H4kE.js} +0 -0
- /package/codemini-web/dist/assets/{beancount-BCkjWTs-.js → beancount-EfboDiXG.js} +0 -0
- /package/codemini-web/dist/assets/{berry-DjEHm1kC.js → berry-CnzAF9lD.js} +0 -0
- /package/codemini-web/dist/assets/{berry-QTBYpUPn.js → berry-DAhQzFBm.js} +0 -0
- /package/codemini-web/dist/assets/{bibtex-CzFWvn9u.js → bibtex-CYUaqfOv.js} +0 -0
- /package/codemini-web/dist/assets/{bibtex-aOfmXHFj.js → bibtex-CanpD3m2.js} +0 -0
- /package/codemini-web/dist/assets/{bicep-BZLx0b6B.js → bicep-Cc0u08ve.js} +0 -0
- /package/codemini-web/dist/assets/{bicep-DLWEubga.js → bicep-JoteVAmD.js} +0 -0
- /package/codemini-web/dist/assets/{bird2-V7dWeQhQ.js → bird2-BmGSmafQ.js} +0 -0
- /package/codemini-web/dist/assets/{bird2-VVa6lZ01.js → bird2-CUmLoLjb.js} +0 -0
- /package/codemini-web/dist/assets/{c-Bv0tI3pq.js → c-Ce4Vw5YJ.js} +0 -0
- /package/codemini-web/dist/assets/{c-CgTSul4N.js → c-DKLNAy6n.js} +0 -0
- /package/codemini-web/dist/assets/{c3-BDcFIiRd.js → c3-Bld9q8eN.js} +0 -0
- /package/codemini-web/dist/assets/{c3-SmmwBAzR.js → c3-Cp6mH0y7.js} +0 -0
- /package/codemini-web/dist/assets/{cadence-DVNAI4pJ.js → cadence-CAWv0bgn.js} +0 -0
- /package/codemini-web/dist/assets/{cadence-DaglWUgA.js → cadence-_3OaglmQ.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-frappe-CSAC76is.js → catppuccin-frappe-Dn0XJ8jj.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-frappe-DXCXlnyU.js → catppuccin-frappe-gRmOBxIl.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-latte-BXW2qYGv.js → catppuccin-latte-CNKGC9SI.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-latte-Jt6sqtds.js → catppuccin-latte-D25Kwd8S.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-macchiato--32cesHH.js → catppuccin-macchiato-Bc6w_RYC.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-macchiato-HM96_05s.js → catppuccin-macchiato-CjoU0lf6.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-mocha-BBRFilGN.js → catppuccin-mocha-DQ4pZxz-.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-mocha-CXgIAGBL.js → catppuccin-mocha-Di4PH8Ri.js} +0 -0
- /package/codemini-web/dist/assets/{clarity-BJs8u8xG.js → clarity-BnHuUVUS.js} +0 -0
- /package/codemini-web/dist/assets/{clarity-DS5YLe8G.js → clarity-CVKtZWJu.js} +0 -0
- /package/codemini-web/dist/assets/{clojure-BVGPdaE2.js → clojure-BBjzfV1L.js} +0 -0
- /package/codemini-web/dist/assets/{clojure-DpYoDXXl.js → clojure-C4w8xKrn.js} +0 -0
- /package/codemini-web/dist/assets/{cmake-CCC7tP43.js → cmake-Dn2uxUrm.js} +0 -0
- /package/codemini-web/dist/assets/{cmake-CdseusyP.js → cmake-DuxpWyxB.js} +0 -0
- /package/codemini-web/dist/assets/{codeowners-5EAeZxPo.js → codeowners-BK44uU1e.js} +0 -0
- /package/codemini-web/dist/assets/{codeowners-DXhoR5Ap.js → codeowners-BYgLRiPG.js} +0 -0
- /package/codemini-web/dist/assets/{codeql-BGjlu3KC.js → codeql-DmJo4bmm.js} +0 -0
- /package/codemini-web/dist/assets/{codeql-OkUuMGe9.js → codeql-comBgh3D.js} +0 -0
- /package/codemini-web/dist/assets/{common-lisp-BE6wRQeA.js → common-lisp-BKAyevA0.js} +0 -0
- /package/codemini-web/dist/assets/{common-lisp-DCRDlc4V.js → common-lisp-xmwdM7sj.js} +0 -0
- /package/codemini-web/dist/assets/{coq-CRT8yML1.js → coq-D004aLp-.js} +0 -0
- /package/codemini-web/dist/assets/{coq-acwo70uY.js → coq-DsaqZ5gv.js} +0 -0
- /package/codemini-web/dist/assets/{csharp-Ca2kU4Te.js → csharp-B1bok3CS.js} +0 -0
- /package/codemini-web/dist/assets/{csharp-Cqz84DXU.js → csharp-BJRWJrkS.js} +0 -0
- /package/codemini-web/dist/assets/{css-z2ijrDWT.js → css-D2Zgfenk.js} +0 -0
- /package/codemini-web/dist/assets/{css-Dr0v2l-V.js → css-DI4Ka_1L.js} +0 -0
- /package/codemini-web/dist/assets/{csv-CqpUSPyF.js → csv-BsMY8_5o.js} +0 -0
- /package/codemini-web/dist/assets/{csv-DUpZC5ZD.js → csv-Cx2EO4hN.js} +0 -0
- /package/codemini-web/dist/assets/{cue-D4-Hq7Jx.js → cue-5NODdLLQ.js} +0 -0
- /package/codemini-web/dist/assets/{cue-DlXQ7arx.js → cue-BFvpulfw.js} +0 -0
- /package/codemini-web/dist/assets/{cypher-CXMVfSpG.js → cypher-CloxltJj.js} +0 -0
- /package/codemini-web/dist/assets/{cypher-D6dhuZbo.js → cypher-DwXduOcz.js} +0 -0
- /package/codemini-web/dist/assets/{d-BUgyoY6k.js → d-ByN-nCZx.js} +0 -0
- /package/codemini-web/dist/assets/{d-Cc_KoyiC.js → d-D90yV2l6.js} +0 -0
- /package/codemini-web/dist/assets/{dark-plus-C0kLyDb3.js → dark-plus-BRQ4k4kr.js} +0 -0
- /package/codemini-web/dist/assets/{dark-plus-DNkJKrcZ.js → dark-plus-CmLXU_Iq.js} +0 -0
- /package/codemini-web/dist/assets/{dart-BIyV3H7V.js → dart-BL-Rg8Jo.js} +0 -0
- /package/codemini-web/dist/assets/{dart-CVd7TDni.js → dart-jaYeqpH7.js} +0 -0
- /package/codemini-web/dist/assets/{dax-DtoJMuz5.js → dax-CQDoOssZ.js} +0 -0
- /package/codemini-web/dist/assets/{dax-sEzq00Tq.js → dax-DfINWKOM.js} +0 -0
- /package/codemini-web/dist/assets/{desktop-3VGbzlmJ.js → desktop-DssJfs2S.js} +0 -0
- /package/codemini-web/dist/assets/{desktop-BkIJ2CMP.js → desktop-wuqAc75y.js} +0 -0
- /package/codemini-web/dist/assets/{diff-D4HSRbRn.js → diff-BYMwyQmB.js} +0 -0
- /package/codemini-web/dist/assets/{diff-RUsawely.js → diff-DGLbp6Xl.js} +0 -0
- /package/codemini-web/dist/assets/{docker-CDpVZYy7.js → docker-B7aZDRTU.js} +0 -0
- /package/codemini-web/dist/assets/{docker-DkLGgDMo.js → docker-CfFDSeZZ.js} +0 -0
- /package/codemini-web/dist/assets/{dotenv-BWp1FaLo.js → dotenv-D3KyAIK0.js} +0 -0
- /package/codemini-web/dist/assets/{dotenv-DWnlamm2.js → dotenv-DVXB2U9o.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-Donvxzd6.js → dracula-6-t2eOMW.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-QP8aKUFB.js → dracula-Dix5im8F.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-soft-BNzyYlRI.js → dracula-soft-B4TZzIlp.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-soft-BqL-kkUg.js → dracula-soft-DnrYBWgV.js} +0 -0
- /package/codemini-web/dist/assets/{dream-maker-DtLD6KM3.js → dream-maker-CaguOgbF.js} +0 -0
- /package/codemini-web/dist/assets/{dream-maker-MNBsfIGU.js → dream-maker-CjPuR0vx.js} +0 -0
- /package/codemini-web/dist/assets/{emacs-lisp-BHIDiQRU.js → emacs-lisp-BHg7FqFZ.js} +0 -0
- /package/codemini-web/dist/assets/{emacs-lisp-CVlPXEEa.js → emacs-lisp-BosL1Ugg.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-dark-DSK976eP.js → everforest-dark-B4IVVaS6.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-dark-pZNhY4MK.js → everforest-dark-DwEzvfit.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-light-BijKClkf.js → everforest-light-CNoEiPUu.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-light-BkaBVm1r.js → everforest-light-DnQkIdPL.js} +0 -0
- /package/codemini-web/dist/assets/{fennel-BsP4yvxI.js → fennel-BiQcbtTd.js} +0 -0
- /package/codemini-web/dist/assets/{fennel-Cd-BhZ0S.js → fennel-DG6hK7z2.js} +0 -0
- /package/codemini-web/dist/assets/{fish-CimYqIk1.js → fish-D3-ok12J.js} +0 -0
- /package/codemini-web/dist/assets/{fish-CpsjJ6FK.js → fish-_zY__9L4.js} +0 -0
- /package/codemini-web/dist/assets/{fluent-D1peBFgx.js → fluent-BBz3hVA9.js} +0 -0
- /package/codemini-web/dist/assets/{fluent-O-Iic89O.js → fluent-CrjXrDzk.js} +0 -0
- /package/codemini-web/dist/assets/{fortran-free-form-BVNtEstX.js → fortran-free-form-Cyk1FB1e.js} +0 -0
- /package/codemini-web/dist/assets/{fortran-free-form-CIAQqF5W.js → fortran-free-form-Db24aQuN.js} +0 -0
- /package/codemini-web/dist/assets/{gdscript-B_XVILZe.js → gdscript-CxxY7zMa.js} +0 -0
- /package/codemini-web/dist/assets/{gdscript-D-FJCTl3.js → gdscript-_NYgB0-E.js} +0 -0
- /package/codemini-web/dist/assets/{gdshader-BOrkFM_X.js → gdshader-Bhkdknye.js} +0 -0
- /package/codemini-web/dist/assets/{gdshader-Czvzt8dR.js → gdshader-W85lNgcx.js} +0 -0
- /package/codemini-web/dist/assets/{genie-BE7nKhIq.js → genie-2WOhOayX.js} +0 -0
- /package/codemini-web/dist/assets/{genie-Mnf_jXpg.js → genie-C6BJUbST.js} +0 -0
- /package/codemini-web/dist/assets/{gherkin-DzGJhdqS.js → gherkin-BsQJenZD.js} +0 -0
- /package/codemini-web/dist/assets/{gherkin-DzkYuFEO.js → gherkin-BzYX5w19.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-BB9G20EV.js → github-dark-DH2_Q6FX.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-default-CBFNEU03.js → github-dark-default-B2Oq-dUJ.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-default-CDGuVkyn.js → github-dark-default-DTF8deNx.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-dimmed-CarTohA3.js → github-dark-dimmed-BvtnYOMy.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-dimmed-sQhEp72S.js → github-dark-dimmed-D0X0LfLF.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-C98YWDhk.js → github-dark-fr8BfBxZ.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-high-contrast-C8GVvrcM.js → github-dark-high-contrast-BAQfalyp.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-high-contrast-CsjOICAd.js → github-dark-high-contrast-CQhqa0EF.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-D17m3GP4.js → github-light-CEqFW-kl.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-default-DiMoa1ZI.js → github-light-default-9rPElOua.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-default-iyEXWnoa.js → github-light-default-Co9J0YT2.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-high-contrast-DGwHD8Ty.js → github-light-high-contrast-BFww7Aed.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-high-contrast-DLnsZL7l.js → github-light-high-contrast-Drx2T_ea.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-pT7U8Cnd.js → github-light-t2gQwbnC.js} +0 -0
- /package/codemini-web/dist/assets/{gleam-B9ISJjDl.js → gleam-BjFNd70h.js} +0 -0
- /package/codemini-web/dist/assets/{gleam-MAXpOqqF.js → gleam-_RSzgxb1.js} +0 -0
- /package/codemini-web/dist/assets/{gn-BNADkWgR.js → gn-BlAV1bS1.js} +0 -0
- /package/codemini-web/dist/assets/{gn-RQRMslrP.js → gn-MXj_EEiV.js} +0 -0
- /package/codemini-web/dist/assets/{gnuplot-BRQvwTQM.js → gnuplot-BTJRjb2O.js} +0 -0
- /package/codemini-web/dist/assets/{gnuplot-CfIGZWjt.js → gnuplot-C40vWoS_.js} +0 -0
- /package/codemini-web/dist/assets/{go-iV8pwUYW.js → go-B2Qj-jpc.js} +0 -0
- /package/codemini-web/dist/assets/{go-D6k5URxL.js → go-BF9dg2tN.js} +0 -0
- /package/codemini-web/dist/assets/{groovy-CxG1cXrE.js → groovy-42TXi0JD.js} +0 -0
- /package/codemini-web/dist/assets/{groovy-lvGC2zUz.js → groovy-YtV4YqmI.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-hard-CC38iqQ4.js → gruvbox-dark-hard-DN_E1XFW.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-hard-Cnb1fzry.js → gruvbox-dark-hard-DaxQoAo9.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-medium-Cu5j8v_d.js → gruvbox-dark-medium-CR6ynfxn.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-medium-DaS0IqFN.js → gruvbox-dark-medium-xNyLsUVI.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-soft-BghHDwrM.js → gruvbox-dark-soft-CrCUBJhA.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-soft-C4niJipy.js → gruvbox-dark-soft-QoKQNR_B.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-hard-BUhLUxUB.js → gruvbox-light-hard-BqLHNay_.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-hard-DTfv4LmB.js → gruvbox-light-hard-C3-JuKAe.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-medium-GXeiXGL9.js → gruvbox-light-medium-676URJw_.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-medium-m1VBpvsE.js → gruvbox-light-medium-86kxSNhL.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-soft-CiE1IJdk.js → gruvbox-light-soft-BGpHIYJO.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-soft-pTZgKx7j.js → gruvbox-light-soft-ByoztTEu.js} +0 -0
- /package/codemini-web/dist/assets/{haskell-BZ8bGMYA.js → haskell-C5VEzHiR.js} +0 -0
- /package/codemini-web/dist/assets/{haskell-DdaZtXdd.js → haskell-KyntJ58h.js} +0 -0
- /package/codemini-web/dist/assets/{haxe-1eAUKQ0B.js → haxe-Bnka4w1v.js} +0 -0
- /package/codemini-web/dist/assets/{haxe-Df79h8x1.js → haxe-DxCG7g2C.js} +0 -0
- /package/codemini-web/dist/assets/{hcl-BibREsa1.js → hcl-B-KEcm-b.js} +0 -0
- /package/codemini-web/dist/assets/{hcl-DQqvKq2I.js → hcl-nG8lPt58.js} +0 -0
- /package/codemini-web/dist/assets/{hjson-D-iSecYq.js → hjson-BUjIWbox.js} +0 -0
- /package/codemini-web/dist/assets/{hjson-DNWMSWLN.js → hjson-KcqWy6wG.js} +0 -0
- /package/codemini-web/dist/assets/{hlsl-CckLjo_3.js → hlsl-CU9ay1Rj.js} +0 -0
- /package/codemini-web/dist/assets/{hlsl-Df5oFh9i.js → hlsl-CblrQXA-.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-BCbhfxa1.js → horizon-BDDUNMOh.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-BG-OH9yH.js → horizon-MuIr_z-n.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-bright-B0vmEjwb.js → horizon-bright-Km86OX7k.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-bright-CXcxBcih.js → horizon-bright-QtrMcZM-.js} +0 -0
- /package/codemini-web/dist/assets/{houston-C8DdNIgg.js → houston-CnK3oLKP.js} +0 -0
- /package/codemini-web/dist/assets/{houston-DHnjBE42.js → houston-L6-nhcqy.js} +0 -0
- /package/codemini-web/dist/assets/{hy-6acR1htR.js → hy-9kqolRdI.js} +0 -0
- /package/codemini-web/dist/assets/{hy-DaILHjW8.js → hy-V3ipcBGo.js} +0 -0
- /package/codemini-web/dist/assets/{imba-BA6_JyKt.js → imba-AWBATAYY.js} +0 -0
- /package/codemini-web/dist/assets/{imba-I9bJJvhi.js → imba-rkedaZRd.js} +0 -0
- /package/codemini-web/dist/assets/{ini-DqXMcqXm.js → ini-BIn__beW.js} +0 -0
- /package/codemini-web/dist/assets/{ini-ovi-wMtM.js → ini-P5JLg6LV.js} +0 -0
- /package/codemini-web/dist/assets/{java-Ds1cyVrp.js → java-Bb7gkEG1.js} +0 -0
- /package/codemini-web/dist/assets/{java-X0I2c5Az.js → java-X5SW6zDn.js} +0 -0
- /package/codemini-web/dist/assets/{javascript-Cx8CXBJR.js → javascript-Cn8UGaJe.js} +0 -0
- /package/codemini-web/dist/assets/{javascript-WC6XFf_S.js → javascript-DHaqiI3u.js} +0 -0
- /package/codemini-web/dist/assets/{json-CY14kIzN.js → json-BlCKYbAr.js} +0 -0
- /package/codemini-web/dist/assets/{json-CmuSmrUv.js → json-Yl_wWztW.js} +0 -0
- /package/codemini-web/dist/assets/{json5-Cus7zL-r.js → json5-B3B8AE2U.js} +0 -0
- /package/codemini-web/dist/assets/{json5-JNG5kh3j.js → json5-Cj9weIvR.js} +0 -0
- /package/codemini-web/dist/assets/{jsonc-Bo6bgSpa.js → jsonc-COLeM0mA.js} +0 -0
- /package/codemini-web/dist/assets/{jsonc-RzqrtWTz.js → jsonc-CwVZHrLL.js} +0 -0
- /package/codemini-web/dist/assets/{jsonl-CLcLUtvq.js → jsonl-CfYcxfNz.js} +0 -0
- /package/codemini-web/dist/assets/{jsonl-eDmbsRcr.js → jsonl-my2EVZQF.js} +0 -0
- /package/codemini-web/dist/assets/{jsonnet--7yRuAzt.js → jsonnet-B351KcBZ.js} +0 -0
- /package/codemini-web/dist/assets/{jsonnet-BrmnmEy9.js → jsonnet-Cg2yxMWZ.js} +0 -0
- /package/codemini-web/dist/assets/{jssm-C-QfdDgD.js → jssm-CVNVxyp8.js} +0 -0
- /package/codemini-web/dist/assets/{jssm-Cid5Rr2Y.js → jssm-f9sZK7il.js} +0 -0
- /package/codemini-web/dist/assets/{jsx-Bl4e1-KE.js → jsx-C-BZR9Er.js} +0 -0
- /package/codemini-web/dist/assets/{jsx-DmH5dwMF.js → jsx-mn0xQF_s.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-dragon-BxDDNs-7.js → kanagawa-dragon-Bg-BKRuP.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-dragon-Dc8jzBf8.js → kanagawa-dragon-qidiS05d.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-lotus-BQyifewU.js → kanagawa-lotus-CVGoMXw8.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-lotus-DglQpAHb.js → kanagawa-lotus-DCJgGK2A.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-wave-BsJGVIZT.js → kanagawa-wave-CVz5XkfW.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-wave-CTxJC692.js → kanagawa-wave-CuNbEAGB.js} +0 -0
- /package/codemini-web/dist/assets/{kdl-CPujEk7a.js → kdl-B2a5Hdo5.js} +0 -0
- /package/codemini-web/dist/assets/{kdl-D2MbAIKj.js → kdl-CmBtNZAQ.js} +0 -0
- /package/codemini-web/dist/assets/{kotlin-GNGS6f4G.js → kotlin-BgCroCiE.js} +0 -0
- /package/codemini-web/dist/assets/{kotlin-fpq87Jdo.js → kotlin-CwntYu9G.js} +0 -0
- /package/codemini-web/dist/assets/{kusto-B1r4va-8.js → kusto-Dto5Mt8f.js} +0 -0
- /package/codemini-web/dist/assets/{kusto-BcKmLn2p.js → kusto-DzqQhEgS.js} +0 -0
- /package/codemini-web/dist/assets/{laserwave-BLDq6SCM.js → laserwave-Bf5KiZGG.js} +0 -0
- /package/codemini-web/dist/assets/{laserwave-CrjhMkHv.js → laserwave-DqmURGYs.js} +0 -0
- /package/codemini-web/dist/assets/{lean-B9Xp-kaJ.js → lean-CLemLjY9.js} +0 -0
- /package/codemini-web/dist/assets/{lean-CQ4oht2M.js → lean-bStt-IHo.js} +0 -0
- /package/codemini-web/dist/assets/{less-BKjOc0Gl.js → less-Dycz37IB.js} +0 -0
- /package/codemini-web/dist/assets/{less-DgluPI4Z.js → less-_4Z4Zbgj.js} +0 -0
- /package/codemini-web/dist/assets/{light-plus-Ce6vIMrA.js → light-plus-BISup5vO.js} +0 -0
- /package/codemini-web/dist/assets/{light-plus-DFt9HI_B.js → light-plus-CUPZt_vJ.js} +0 -0
- /package/codemini-web/dist/assets/{llvm-C_Bk8N51.js → llvm-B3vA1z1w.js} +0 -0
- /package/codemini-web/dist/assets/{llvm-XDy97SdL.js → llvm-DAbx5jqK.js} +0 -0
- /package/codemini-web/dist/assets/{log-Cqyx7kYB.js → log-BRjeW2DW.js} +0 -0
- /package/codemini-web/dist/assets/{log-tjGJZ7jx.js → log-CM4eTPwH.js} +0 -0
- /package/codemini-web/dist/assets/{logo-BMyACSNp.js → logo-DCYIDlXZ.js} +0 -0
- /package/codemini-web/dist/assets/{logo-rCQwad-6.js → logo-Dyx9NcGm.js} +0 -0
- /package/codemini-web/dist/assets/{luau-C0wE4YeK.js → luau-B3LrvOEt.js} +0 -0
- /package/codemini-web/dist/assets/{luau-Dw3qkd4h.js → luau-BJOxIq3l.js} +0 -0
- /package/codemini-web/dist/assets/{make-DRoG6w-e.js → make-Bep3F-fA.js} +0 -0
- /package/codemini-web/dist/assets/{make-DZENZd8z.js → make-BmHGvFNV.js} +0 -0
- /package/codemini-web/dist/assets/{markdown-CbgVmtS5.js → markdown-BObkjWCp.js} +0 -0
- /package/codemini-web/dist/assets/{markdown-DMIvNSB1.js → markdown-qxcI0Ex1.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-D1yzOeFY.js → material-theme-DfbSys7S.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-darker-CKeuyK7B.js → material-theme-darker-CXzTJODk.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-darker-DhWqiNtj.js → material-theme-darker-DM1OIivA.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-YhiuxyiP.js → material-theme-jZt3rhQh.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-lighter-C56RzTfM.js → material-theme-lighter-C7qz3G7H.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-lighter-PKoq0Soa.js → material-theme-lighter-HtgpH1FU.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-ocean-DUos8xKe.js → material-theme-ocean-CeFuXoRG.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-ocean-TtH-ZZAj.js → material-theme-ocean-DmL5jMtS.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-palenight-CZBKx4B1.js → material-theme-palenight-BMg4YxS6.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-palenight-DPEAidnA.js → material-theme-palenight-CRxwxFv4.js} +0 -0
- /package/codemini-web/dist/assets/{matlab-BJwkjxyL.js → matlab-BjvFQgI4.js} +0 -0
- /package/codemini-web/dist/assets/{matlab-Buftnej6.js → matlab-CeDNF4Ix.js} +0 -0
- /package/codemini-web/dist/assets/{mdx-BvkytFG9.js → mdx-C_WF1Zvy.js} +0 -0
- /package/codemini-web/dist/assets/{mdx-COL7Vpwq.js → mdx-DnKU9cqA.js} +0 -0
- /package/codemini-web/dist/assets/{mermaid-Ctx7uNrT.js → mermaid-5NtVsV32.js} +0 -0
- /package/codemini-web/dist/assets/{mermaid-tvyj1ZQ2.js → mermaid-CH8Qvaqo.js} +0 -0
- /package/codemini-web/dist/assets/{min-dark-BA-rwgF3.js → min-dark-B95jFnY0.js} +0 -0
- /package/codemini-web/dist/assets/{min-dark-D66g901Q.js → min-dark-BQ7SSUoL.js} +0 -0
- /package/codemini-web/dist/assets/{min-light-CMnDj2iG.js → min-light-BGgk1zEi.js} +0 -0
- /package/codemini-web/dist/assets/{min-light-DHUVhXnm.js → min-light-CqwYUont.js} +0 -0
- /package/codemini-web/dist/assets/{mipsasm-ByaU0dEX.js → mipsasm-BIZV50OU.js} +0 -0
- /package/codemini-web/dist/assets/{mipsasm-C6fvALrw.js → mipsasm-OAAwCDEg.js} +0 -0
- /package/codemini-web/dist/assets/{mojo-B3qnM1a8.js → mojo-Bh0Ln9-1.js} +0 -0
- /package/codemini-web/dist/assets/{mojo-CqhYERP_.js → mojo-COx3BOEA.js} +0 -0
- /package/codemini-web/dist/assets/{monokai-D3MyQCxG.js → monokai-C988KBom.js} +0 -0
- /package/codemini-web/dist/assets/{monokai-DCoxt20T.js → monokai-D2lcpl-D.js} +0 -0
- /package/codemini-web/dist/assets/{moonbit-C4BfwLm6.js → moonbit-C-CVJfEU.js} +0 -0
- /package/codemini-web/dist/assets/{moonbit-Cjo3d0oi.js → moonbit-ChOfdbnC.js} +0 -0
- /package/codemini-web/dist/assets/{move-BZSDQnwS.js → move-DjHf2uHT.js} +0 -0
- /package/codemini-web/dist/assets/{move-DOj5FawL.js → move-jwG4QUY4.js} +0 -0
- /package/codemini-web/dist/assets/{narrat-CDHYPJWr.js → narrat-Bv3slmdi.js} +0 -0
- /package/codemini-web/dist/assets/{narrat-DY5cg5OF.js → narrat-CuRqtiDW.js} +0 -0
- /package/codemini-web/dist/assets/{nextflow-groovy-D6rYlJlL.js → nextflow-groovy-CYeLXiaP.js} +0 -0
- /package/codemini-web/dist/assets/{nextflow-groovy-o7ZjyFmf.js → nextflow-groovy-Dk0GcQpl.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-DuMFo77c.js → night-owl-SjOLjRtB.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-NHZjGVLB.js → night-owl-cv0FEuUh.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-light-DcKosvl7.js → night-owl-light-CpcKp0OZ.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-light-DihOYNub.js → night-owl-light-DHrEzBAj.js} +0 -0
- /package/codemini-web/dist/assets/{nix-C2G-gZoY.js → nix-BtLlRvM0.js} +0 -0
- /package/codemini-web/dist/assets/{nix-Csr5leD-.js → nix-CcOD1khX.js} +0 -0
- /package/codemini-web/dist/assets/{nord-CqZqLQaJ.js → nord-BGjNHkRW.js} +0 -0
- /package/codemini-web/dist/assets/{nord-DomFMWpF.js → nord-DiukgIFA.js} +0 -0
- /package/codemini-web/dist/assets/{nushell-IZVQdI7Z.js → nushell-DUqFDYtM.js} +0 -0
- /package/codemini-web/dist/assets/{nushell-S11HUHTG.js → nushell-GFe6C8D1.js} +0 -0
- /package/codemini-web/dist/assets/{objective-c-D9GKvYFi.js → objective-c-BUV8AyKp.js} +0 -0
- /package/codemini-web/dist/assets/{objective-c-DD1i5sf2.js → objective-c-Da4gtNmU.js} +0 -0
- /package/codemini-web/dist/assets/{objective-cpp-CtzOCe2w.js → objective-cpp-Du3a_PKx.js} +0 -0
- /package/codemini-web/dist/assets/{objective-cpp-SqrtXFXh.js → objective-cpp-U8QllJj4.js} +0 -0
- /package/codemini-web/dist/assets/{ocaml-BlMDMjEj.js → ocaml-4v1g0DKj.js} +0 -0
- /package/codemini-web/dist/assets/{ocaml-C_PTi_Pz.js → ocaml-DwXjJdD9.js} +0 -0
- /package/codemini-web/dist/assets/{odin-BWpZDKBG.js → odin-BlEjbtjb.js} +0 -0
- /package/codemini-web/dist/assets/{odin-CoWSDSNi.js → odin-C2CG6fMn.js} +0 -0
- /package/codemini-web/dist/assets/{one-dark-pro-DWENJxB_.js → one-dark-pro-BL6Mm10K.js} +0 -0
- /package/codemini-web/dist/assets/{one-dark-pro-DpWTHpwg.js → one-dark-pro-BwcbXd-T.js} +0 -0
- /package/codemini-web/dist/assets/{one-light-CEeF6aqP.js → one-light-BOQW5zin.js} +0 -0
- /package/codemini-web/dist/assets/{one-light-Cu0d64Hp.js → one-light-Cx3Ps96S.js} +0 -0
- /package/codemini-web/dist/assets/{openscad-BM4fjXzn.js → openscad-Bs2SxlcB.js} +0 -0
- /package/codemini-web/dist/assets/{openscad-D3gRRPUh.js → openscad-C7dPmpxc.js} +0 -0
- /package/codemini-web/dist/assets/{pascal-DYsRufgb.js → pascal-B6AuHgs_.js} +0 -0
- /package/codemini-web/dist/assets/{pascal-G3gJIkHz.js → pascal-ruAwSiza.js} +0 -0
- /package/codemini-web/dist/assets/{pierre-dark-CBqOR10c.js → pierre-dark-8SGzlI93.js} +0 -0
- /package/codemini-web/dist/assets/{pierre-light-sgwdVCEP.js → pierre-light-BJzkLopB.js} +0 -0
- /package/codemini-web/dist/assets/{pkl-DdsryWcC.js → pkl-Bdw5peeW.js} +0 -0
- /package/codemini-web/dist/assets/{pkl-Djf8ANrI.js → pkl-BuPFXprX.js} +0 -0
- /package/codemini-web/dist/assets/{plastic-CmjIC4JL.js → plastic-BiAROaFC.js} +0 -0
- /package/codemini-web/dist/assets/{plastic-CwUA_4-2.js → plastic-CGwKUd0C.js} +0 -0
- /package/codemini-web/dist/assets/{plsql-B1bmZxUF.js → plsql-DQ_z5ed2.js} +0 -0
- /package/codemini-web/dist/assets/{plsql-C2yEtnCG.js → plsql-DoG_QfBE.js} +0 -0
- /package/codemini-web/dist/assets/{po-BvnTR3_f.js → po-BvHij3iO.js} +0 -0
- /package/codemini-web/dist/assets/{po-Dy7ytuR1.js → po-DN-mfyYW.js} +0 -0
- /package/codemini-web/dist/assets/{poimandres-BTndTogr.js → poimandres-BbdNMHGS.js} +0 -0
- /package/codemini-web/dist/assets/{poimandres-u68WOWhl.js → poimandres-BdM9d7kg.js} +0 -0
- /package/codemini-web/dist/assets/{polar-CAj5SJyd.js → polar-BZ5C-_XH.js} +0 -0
- /package/codemini-web/dist/assets/{polar-CjLVWIyd.js → polar-p_EVOYp2.js} +0 -0
- /package/codemini-web/dist/assets/{postcss-DiNtjF5e.js → postcss-BVVH-mhK.js} +0 -0
- /package/codemini-web/dist/assets/{postcss-DrpvRGGG.js → postcss-C_rkJ2pP.js} +0 -0
- /package/codemini-web/dist/assets/{powerquery-I1Ei5hrS.js → powerquery-BBfv-1ce.js} +0 -0
- /package/codemini-web/dist/assets/{powerquery-iC4Ra9LJ.js → powerquery-D2htabf9.js} +0 -0
- /package/codemini-web/dist/assets/{powershell-Ch2YpFAx.js → powershell-BcfgzEsQ.js} +0 -0
- /package/codemini-web/dist/assets/{powershell-Coc0WruX.js → powershell-NfY3J8Uu.js} +0 -0
- /package/codemini-web/dist/assets/{prisma-HWctQCpn.js → prisma-CMeP8UTm.js} +0 -0
- /package/codemini-web/dist/assets/{prisma-Ojgxt2lx.js → prisma-DFAqr_mL.js} +0 -0
- /package/codemini-web/dist/assets/{prolog-C1UOAv4v.js → prolog-Cc9yvHML.js} +0 -0
- /package/codemini-web/dist/assets/{prolog-DHAsH4Hf.js → prolog-rt-FXeeT.js} +0 -0
- /package/codemini-web/dist/assets/{proto-D07RTuB5.js → proto-CNBX21YV.js} +0 -0
- /package/codemini-web/dist/assets/{proto-mTghX89X.js → proto-CYqgjQUT.js} +0 -0
- /package/codemini-web/dist/assets/{puppet-D1Zcnrr5.js → puppet-BAAnN8uU.js} +0 -0
- /package/codemini-web/dist/assets/{puppet-D_zyrMo2.js → puppet-ZnM2F-kY.js} +0 -0
- /package/codemini-web/dist/assets/{purescript-CV-DVmZj.js → purescript-hu-4rgo5.js} +0 -0
- /package/codemini-web/dist/assets/{purescript-s82m5f0Y.js → purescript-nyLIIaTP.js} +0 -0
- /package/codemini-web/dist/assets/{python-BhsI1K6K.js → python-Dt6SBvxD.js} +0 -0
- /package/codemini-web/dist/assets/{python-DcnbpNOV.js → python-DypNN-aL.js} +0 -0
- /package/codemini-web/dist/assets/{qmldir-BBNnU9RJ.js → qmldir-BDEiw2QJ.js} +0 -0
- /package/codemini-web/dist/assets/{qmldir-Bzkc2Njy.js → qmldir-MBz01aYW.js} +0 -0
- /package/codemini-web/dist/assets/{qss-CC0PKRbL.js → qss-B8ZOZZRM.js} +0 -0
- /package/codemini-web/dist/assets/{qss-CKbozdtF.js → qss-BjslRtqf.js} +0 -0
- /package/codemini-web/dist/assets/{r-B4lG5syH.js → r-70IHnSKT.js} +0 -0
- /package/codemini-web/dist/assets/{r-BKej5r_k.js → r-UrwRxojO.js} +0 -0
- /package/codemini-web/dist/assets/{racket-CUDoXUwy.js → racket-emNFhxM0.js} +0 -0
- /package/codemini-web/dist/assets/{racket-Cbwns2Cq.js → racket-lrWGJ4l7.js} +0 -0
- /package/codemini-web/dist/assets/{raku-CeV6tH_x.js → raku-B1DWL3rh.js} +0 -0
- /package/codemini-web/dist/assets/{raku-XPAjN9OU.js → raku-M_VGm79k.js} +0 -0
- /package/codemini-web/dist/assets/{red-8aRo80UF.js → red-BcYVa2Jk.js} +0 -0
- /package/codemini-web/dist/assets/{red-CVEaJbMR.js → red-BvMgtCZO.js} +0 -0
- /package/codemini-web/dist/assets/{reg-B0B_plbq.js → reg-DL66XhHR.js} +0 -0
- /package/codemini-web/dist/assets/{reg-C_WE1pkC.js → reg-rRGLqGjW.js} +0 -0
- /package/codemini-web/dist/assets/{regexp-CK-1EP63.js → regexp-CEudNzRJ.js} +0 -0
- /package/codemini-web/dist/assets/{regexp-da3KYCEG.js → regexp-PTdmEsyL.js} +0 -0
- /package/codemini-web/dist/assets/{rel-CpHQF4b7.js → rel-DlXaqz0b.js} +0 -0
- /package/codemini-web/dist/assets/{rel-DhoFe2Y7.js → rel-DqcQFa7Q.js} +0 -0
- /package/codemini-web/dist/assets/{riscv-CKx_Jisq.js → riscv-CanSyeO8.js} +0 -0
- /package/codemini-web/dist/assets/{riscv-Co5eiPIZ.js → riscv-lk-jjtXM.js} +0 -0
- /package/codemini-web/dist/assets/{ron-CgTit1dG.js → ron-BQ46iNCb.js} +0 -0
- /package/codemini-web/dist/assets/{ron-qyvgw9vu.js → ron-CVeChqUp.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-BDTwvYHf.js → rose-pine-BuTm62Vj.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-R3f76h4_.js → rose-pine-ChTxq_yN.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-dawn-BS09rtpK.js → rose-pine-dawn-B670NuiP.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-dawn-CAIk_wLV.js → rose-pine-dawn-RGM_kxZ2.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-moon-B4Q4DiPG.js → rose-pine-moon-6KoQonQX.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-moon-C5gdiznP.js → rose-pine-moon-NLV-cJvy.js} +0 -0
- /package/codemini-web/dist/assets/{rosmsg-C0tpzWlc.js → rosmsg-Bw0HfGe_.js} +0 -0
- /package/codemini-web/dist/assets/{rosmsg-Dy_ItAfo.js → rosmsg-CUVWbdrA.js} +0 -0
- /package/codemini-web/dist/assets/{rust-BWAfVMY4.js → rust-CrVJvhfa.js} +0 -0
- /package/codemini-web/dist/assets/{rust-CNEVkiWF.js → rust-D83UuV7F.js} +0 -0
- /package/codemini-web/dist/assets/{sass-D2nye32F.js → sass-CE2YZJdE.js} +0 -0
- /package/codemini-web/dist/assets/{sass-MovLey2R.js → sass-Dfpo5TpD.js} +0 -0
- /package/codemini-web/dist/assets/{scala-B8greAnE.js → scala-BjILTRgu.js} +0 -0
- /package/codemini-web/dist/assets/{scala-C2w7y2mZ.js → scala-CyYhociv.js} +0 -0
- /package/codemini-web/dist/assets/{scheme-Bf85FNnm.js → scheme-BQ8c0gTd.js} +0 -0
- /package/codemini-web/dist/assets/{scheme-Ci_aquns.js → scheme-BrRWQ1yX.js} +0 -0
- /package/codemini-web/dist/assets/{sdbl-D4tJqBiC.js → sdbl-CtZR2I6R.js} +0 -0
- /package/codemini-web/dist/assets/{sdbl-DoQ_zDzo.js → sdbl-Ds7t3N0Q.js} +0 -0
- /package/codemini-web/dist/assets/{shellscript-CxhArCCJ.js → shellscript-Cim6Loaj.js} +0 -0
- /package/codemini-web/dist/assets/{shellscript-KUJZnuCi.js → shellscript-wXQ3AlcS.js} +0 -0
- /package/codemini-web/dist/assets/{slack-dark-BcN7KJ02.js → slack-dark-CrWftATe.js} +0 -0
- /package/codemini-web/dist/assets/{slack-dark-BnOYKTBJ.js → slack-dark-nxsbRL6U.js} +0 -0
- /package/codemini-web/dist/assets/{slack-ochin-43udxtUg.js → slack-ochin-Cx2HX71B.js} +0 -0
- /package/codemini-web/dist/assets/{slack-ochin-D4iInQ9w.js → slack-ochin-DJ-2OJXN.js} +0 -0
- /package/codemini-web/dist/assets/{smalltalk-BwSireXb.js → smalltalk-DGeW9hbd.js} +0 -0
- /package/codemini-web/dist/assets/{smalltalk-Mlf5-xbr.js → smalltalk-FYMOGNo9.js} +0 -0
- /package/codemini-web/dist/assets/{snazzy-light-B45TfPsv.js → snazzy-light-508iEJO_.js} +0 -0
- /package/codemini-web/dist/assets/{snazzy-light-kw-pZEiM.js → snazzy-light-BxBnzmu0.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-dark-8yYW1wLs.js → solarized-dark-B3HMD5k3.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-dark-BDezFa9V.js → solarized-dark-TCkigWjM.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-light-BY3Hr0Ud.js → solarized-light-B-wiF2HZ.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-light-CkoenhS2.js → solarized-light-R2Rcjqww.js} +0 -0
- /package/codemini-web/dist/assets/{solidity-CIUlntDs.js → solidity-46G7JVSr.js} +0 -0
- /package/codemini-web/dist/assets/{solidity-DYHGECBw.js → solidity-Bv4Kww1K.js} +0 -0
- /package/codemini-web/dist/assets/{splunk-DOdklC0I.js → splunk-DHfVkGsm.js} +0 -0
- /package/codemini-web/dist/assets/{splunk-DueVPk5k.js → splunk-DKgoBk9o.js} +0 -0
- /package/codemini-web/dist/assets/{sql-CZAMrWdL.js → sql-Bx-skccv.js} +0 -0
- /package/codemini-web/dist/assets/{sql-Q6zkgi_w.js → sql-PkTJiLTy.js} +0 -0
- /package/codemini-web/dist/assets/{ssh-config-DKIMErlp.js → ssh-config-B2E5WPpD.js} +0 -0
- /package/codemini-web/dist/assets/{ssh-config-DwwFW7AS.js → ssh-config-JoXpWa3y.js} +0 -0
- /package/codemini-web/dist/assets/{stylus-BO6mlOab.js → stylus-BPw8WnNN.js} +0 -0
- /package/codemini-web/dist/assets/{stylus-oqceM0yt.js → stylus-C836DBsS.js} +0 -0
- /package/codemini-web/dist/assets/{swift-D9A08YU9.js → swift-CFG3rDz_.js} +0 -0
- /package/codemini-web/dist/assets/{swift-foA31xPc.js → swift-Ce2Nlw8Q.js} +0 -0
- /package/codemini-web/dist/assets/{synthwave-84-B002ZU4p.js → synthwave-84-Br2i7yYN.js} +0 -0
- /package/codemini-web/dist/assets/{synthwave-84-C69NN2j9.js → synthwave-84-CvU6yQ4V.js} +0 -0
- /package/codemini-web/dist/assets/{system-verilog-CCSGcM60.js → system-verilog-BVQtCmAV.js} +0 -0
- /package/codemini-web/dist/assets/{system-verilog-DjR3sN6w.js → system-verilog-Dkc37EdI.js} +0 -0
- /package/codemini-web/dist/assets/{systemd-BymS_eIJ.js → systemd-CcJTFvpw.js} +0 -0
- /package/codemini-web/dist/assets/{systemd-CJWuVSJU.js → systemd-svl6VdYY.js} +0 -0
- /package/codemini-web/dist/assets/{talonscript-CXqq0wX-.js → talonscript-CHxC2PG4.js} +0 -0
- /package/codemini-web/dist/assets/{talonscript-Ccc0122j.js → talonscript-CWZYyS8Z.js} +0 -0
- /package/codemini-web/dist/assets/{tasl-GVNf7pB7.js → tasl-BfBucHfV.js} +0 -0
- /package/codemini-web/dist/assets/{tasl-o38sfjeU.js → tasl-woKXKJkx.js} +0 -0
- /package/codemini-web/dist/assets/{tcl-DISPE-5Q.js → tcl-6FTtarFH.js} +0 -0
- /package/codemini-web/dist/assets/{tcl-DNlfRSl5.js → tcl-iBXrc9W2.js} +0 -0
- /package/codemini-web/dist/assets/{terraform-DUK0FOOj.js → terraform-BywKBLRG.js} +0 -0
- /package/codemini-web/dist/assets/{terraform-V85Kewcz.js → terraform-DHx5Kdyi.js} +0 -0
- /package/codemini-web/dist/assets/{tokyo-night-BLn5KNCP.js → tokyo-night-BQsIhA-A.js} +0 -0
- /package/codemini-web/dist/assets/{tokyo-night-DWTtuXS3.js → tokyo-night-D2gua4K6.js} +0 -0
- /package/codemini-web/dist/assets/{toml-X5n3zjEH.js → toml-B35rd2Aj.js} +0 -0
- /package/codemini-web/dist/assets/{toml-uEjeW8NC.js → toml-BCbG8Uu3.js} +0 -0
- /package/codemini-web/dist/assets/{tsv-Bqs_rchc.js → tsv-Bfk0YRxN.js} +0 -0
- /package/codemini-web/dist/assets/{tsv-DjGwUc04.js → tsv-ZPaCtsKO.js} +0 -0
- /package/codemini-web/dist/assets/{tsx-5O-M05V0.js → tsx-BPnxgPXu.js} +0 -0
- /package/codemini-web/dist/assets/{tsx-CfyUE2pW.js → tsx-Cvi8n1qy.js} +0 -0
- /package/codemini-web/dist/assets/{turtle-BsUuoeVK.js → turtle-Cj8ap4C4.js} +0 -0
- /package/codemini-web/dist/assets/{turtle-PTxTluYn.js → turtle-DsCF_r1D.js} +0 -0
- /package/codemini-web/dist/assets/{typescript-C6LvTgbf.js → typescript-DESGzanZ.js} +0 -0
- /package/codemini-web/dist/assets/{typescript-hRweav8r.js → typescript-DkKrEyJv.js} +0 -0
- /package/codemini-web/dist/assets/{typespec-CKEcF6Kw.js → typespec-tsneGPKg.js} +0 -0
- /package/codemini-web/dist/assets/{typespec-N7-U_jBZ.js → typespec-zSWU032W.js} +0 -0
- /package/codemini-web/dist/assets/{typst-CPL77SDw.js → typst-BcQNhVIE.js} +0 -0
- /package/codemini-web/dist/assets/{typst-DSQh9HII.js → typst-C6LmF4pH.js} +0 -0
- /package/codemini-web/dist/assets/{v-CoJD3IPx.js → v-CPbK5D5K.js} +0 -0
- /package/codemini-web/dist/assets/{v-obK6h_YW.js → v-D6v2lknR.js} +0 -0
- /package/codemini-web/dist/assets/{vala-C42IfotU.js → vala-CTmcnleK.js} +0 -0
- /package/codemini-web/dist/assets/{vala-DXa9jSo-.js → vala-CW2V92s6.js} +0 -0
- /package/codemini-web/dist/assets/{vb-CVMKTK26.js → vb-CHzBmKx-.js} +0 -0
- /package/codemini-web/dist/assets/{vb-DEPbtYq-.js → vb-iQRhK9Tp.js} +0 -0
- /package/codemini-web/dist/assets/{verilog-Bs-185hK.js → verilog-BxRFSB3_.js} +0 -0
- /package/codemini-web/dist/assets/{verilog-P63PhzSt.js → verilog-Cu16TfKw.js} +0 -0
- /package/codemini-web/dist/assets/{vesper-B7BneC5G.js → vesper-B0T1dCxY.js} +0 -0
- /package/codemini-web/dist/assets/{vesper-BGr95374.js → vesper-D_U9vezF.js} +0 -0
- /package/codemini-web/dist/assets/{vhdl-2WwUdgX8.js → vhdl-D4h06VsC.js} +0 -0
- /package/codemini-web/dist/assets/{vhdl-CBukgB2Z.js → vhdl-suLxFY6N.js} +0 -0
- /package/codemini-web/dist/assets/{viml-C1cRY0x6.js → viml-BQu4-sFk.js} +0 -0
- /package/codemini-web/dist/assets/{viml-CGPGWJA6.js → viml-DMcwh6Y2.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-black-D3_12zni.js → vitesse-black-Dk8H62LF.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-black-cI0k84-I.js → vitesse-black-sFXfT98A.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-dark-B_iF7INE.js → vitesse-dark-B_8wZgsl.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-dark-SouM0FMW.js → vitesse-dark-BuiSS132.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-light-DbrrMtxY.js → vitesse-light-BFFa4sOZ.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-light-WiCy6lDO.js → vitesse-light-DfdaVJLv.js} +0 -0
- /package/codemini-web/dist/assets/{vyper-BxVot6rR.js → vyper-CU9IduFj.js} +0 -0
- /package/codemini-web/dist/assets/{vyper-DP_vqZO9.js → vyper-DfAPtbtc.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-Db7VBw0n.js → wasm-6aAEIEYl.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-o5uYkU9G.js → wasm-ByDQ9GrP.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-BNTPmfEI.js → wasm-C9fkFrNS.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-DiIFv9DE.js → wasm-CdytVWOW.js} +0 -0
- /package/codemini-web/dist/assets/{wenyan-MnC4h24X.js → wenyan-B_37P8uK.js} +0 -0
- /package/codemini-web/dist/assets/{wenyan-ZEcjghA1.js → wenyan-DNkN8oQc.js} +0 -0
- /package/codemini-web/dist/assets/{wgsl-BgfkHnVi.js → wgsl-Bggw1Yhv.js} +0 -0
- /package/codemini-web/dist/assets/{wgsl-CdusuPLe.js → wgsl-by06Hq-s.js} +0 -0
- /package/codemini-web/dist/assets/{wikitext-CBIB6hmW.js → wikitext-CjjhOSjd.js} +0 -0
- /package/codemini-web/dist/assets/{wikitext-DCOnP3yk.js → wikitext-zXy-4mpr.js} +0 -0
- /package/codemini-web/dist/assets/{wit-5UDEI7sp.js → wit--vc2X9vR.js} +0 -0
- /package/codemini-web/dist/assets/{wit-ZhUbVeze.js → wit-BHjrebka.js} +0 -0
- /package/codemini-web/dist/assets/{wolfram-HyMOyERF.js → wolfram-Dr60-Zy4.js} +0 -0
- /package/codemini-web/dist/assets/{wolfram-vvgPlu2n.js → wolfram-Mw4XcN1t.js} +0 -0
- /package/codemini-web/dist/assets/{yaml-C-G727Y6.js → yaml--meH0-me.js} +0 -0
- /package/codemini-web/dist/assets/{yaml-D_uvhEF7.js → yaml-CZT5eZge.js} +0 -0
- /package/codemini-web/dist/assets/{zenscript-BPjqX0BY.js → zenscript-C94GGJ6Y.js} +0 -0
- /package/codemini-web/dist/assets/{zenscript-C6ZuzgrL.js → zenscript-Cf2Qp-oj.js} +0 -0
- /package/codemini-web/dist/assets/{zig-Bd91oU8r.js → zig-DgUQodsP.js} +0 -0
- /package/codemini-web/dist/assets/{zig-Do2h8XKj.js → zig-feO0kYCa.js} +0 -0
package/codemini-web/server.js
CHANGED
|
@@ -8,27 +8,34 @@ import { loadConfig, saveConfig, setConfigValue, getConfigValue } from '../src/c
|
|
|
8
8
|
import { createChatRuntime } from '../src/core/chat-runtime.js';
|
|
9
9
|
import { createSession, loadSession, listSessions, resolveSession, deleteSession } from '../src/core/session-store.js';
|
|
10
10
|
import { buildDefaultSystemPrompt } from '../src/core/default-system-prompt.js';
|
|
11
|
-
import { RuntimeBridge } from './lib/runtime-bridge.js';
|
|
12
|
-
import { installSkillSource, listSkillEntries } from '../src/commands/skill.js';
|
|
13
|
-
import { computeFileSha256, readSkillRegistry, upsertSkillRegistryEntry, writeSkillRegistry } from '../src/core/skill-registry.js';
|
|
11
|
+
import { RuntimeBridge } from './lib/runtime-bridge.js';
|
|
12
|
+
import { installSkillSource, listSkillEntries } from '../src/commands/skill.js';
|
|
13
|
+
import { computeFileSha256, readSkillRegistry, upsertSkillRegistryEntry, writeSkillRegistry } from '../src/core/skill-registry.js';
|
|
14
|
+
import { forgetMemory, listMemories, searchMemories } from '../src/core/memory-store.js';
|
|
14
15
|
import { getReplyLanguage } from '../src/core/reply-language.js';
|
|
15
|
-
import { getBaseConfigDir, getFileIndexPath, getProjectSkillsDir, getSkillsDir } from '../src/core/paths.js';
|
|
16
|
-
import { initializeProjectIndex } from '../src/core/project-index.js';
|
|
17
|
-
import { INDEX_SKIP_DIRS } from '../src/core/constants.js';
|
|
18
|
-
import { VERSION } from '../src/core/version.js';
|
|
16
|
+
import { getBaseConfigDir, getFileIndexPath, getProjectSkillsDir, getSkillsDir } from '../src/core/paths.js';
|
|
17
|
+
import { initializeProjectIndex } from '../src/core/project-index.js';
|
|
18
|
+
import { INDEX_SKIP_DIRS } from '../src/core/constants.js';
|
|
19
|
+
import { VERSION } from '../src/core/version.js';
|
|
19
20
|
|
|
20
21
|
const GENERAL_PROJECT_DIR = (() => {
|
|
21
22
|
const base = getBaseConfigDir();
|
|
22
23
|
return path.join(base, 'workspace');
|
|
23
24
|
})();
|
|
24
25
|
|
|
25
|
-
const SKILL_CATALOG_FILE = 'codemini.skills.json';
|
|
26
|
-
const SKILL_MODES = new Set(['always', 'auto_attach', 'agent_requested', 'manual']);
|
|
27
|
-
const SKILL_SCOPES = new Set(['project', 'global']);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
const SKILL_CATALOG_FILE = 'codemini.skills.json';
|
|
27
|
+
const SKILL_MODES = new Set(['always', 'auto_attach', 'agent_requested', 'manual']);
|
|
28
|
+
const SKILL_SCOPES = new Set(['project', 'global']);
|
|
29
|
+
const MEMORY_SCOPES = new Set(['user', 'global', 'project']);
|
|
30
|
+
|
|
31
|
+
function normalizeSkillScope(scope) {
|
|
32
|
+
return SKILL_SCOPES.has(scope) ? scope : 'project';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function normalizeMemoryScope(scope) {
|
|
36
|
+
const value = String(scope || '').trim().toLowerCase();
|
|
37
|
+
return MEMORY_SCOPES.has(value) ? value : 'user';
|
|
38
|
+
}
|
|
32
39
|
|
|
33
40
|
function isSafeSkillName(name = '') {
|
|
34
41
|
return /^[A-Za-z0-9][A-Za-z0-9_.-]*$/.test(name);
|
|
@@ -275,20 +282,112 @@ function normalizeProjectPath(value) {
|
|
|
275
282
|
return path.resolve(raw);
|
|
276
283
|
}
|
|
277
284
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
285
|
+
function projectNameForDir(projectDir) {
|
|
286
|
+
if (isGeneralProjectDir(projectDir)) return '__codemini_general__';
|
|
287
|
+
return path.basename(path.resolve(projectDir || '')) || projectDir || '';
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
async function validProjectDir(value) {
|
|
291
|
+
const normalized = normalizeProjectPath(value);
|
|
292
|
+
if (!normalized) return '';
|
|
281
293
|
try {
|
|
282
|
-
const stat = await fs.stat(
|
|
283
|
-
|
|
284
|
-
} catch {
|
|
285
|
-
|
|
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
|
+
});
|
|
286
354
|
}
|
|
287
355
|
|
|
288
|
-
function
|
|
289
|
-
|
|
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();
|
|
290
375
|
}
|
|
291
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
|
+
}
|
|
390
|
+
|
|
292
391
|
function collectSessionPathHints(session) {
|
|
293
392
|
const hints = [];
|
|
294
393
|
const messages = Array.isArray(session?.messages) ? session.messages : [];
|
|
@@ -337,164 +436,164 @@ function isCodeWikiReportFile(fileName) {
|
|
|
337
436
|
return CODEWIKI_REPORT_RE.test(String(fileName || ''));
|
|
338
437
|
}
|
|
339
438
|
|
|
340
|
-
function codeWikiReportTitle(fileName) {
|
|
341
|
-
return String(fileName || '')
|
|
342
|
-
.replace(/-project-requirements\.html$/, '')
|
|
343
|
-
.replace(/-/g, ' ');
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
function clipGraphList(values, max = 12) {
|
|
347
|
-
return [...new Set((Array.isArray(values) ? values : []).filter(Boolean))].slice(0, max);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
const CODEWIKI_GRAPH_NOISY_NAMES = new Set([
|
|
351
|
-
'__init__',
|
|
352
|
-
'__enter__',
|
|
353
|
-
'__exit__',
|
|
354
|
-
'__getitem__',
|
|
355
|
-
'__setitem__',
|
|
356
|
-
'__delitem__',
|
|
357
|
-
'__contains__',
|
|
358
|
-
'__len__',
|
|
359
|
-
'__iter__',
|
|
360
|
-
'__next__',
|
|
361
|
-
'__call__',
|
|
362
|
-
'get',
|
|
363
|
-
'set',
|
|
364
|
-
'add',
|
|
365
|
-
'run',
|
|
366
|
-
'close',
|
|
367
|
-
'open',
|
|
368
|
-
'read',
|
|
369
|
-
'write',
|
|
370
|
-
'send',
|
|
371
|
-
'recv',
|
|
372
|
-
'poll',
|
|
373
|
-
'update',
|
|
374
|
-
'copy',
|
|
375
|
-
'size',
|
|
376
|
-
'apply'
|
|
377
|
-
]);
|
|
378
|
-
|
|
379
|
-
function normalizeGraphPath(value = '') {
|
|
380
|
-
return String(value || '').replace(/\\/g, '/').replace(/^\.\/+/, '');
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
function isDependencyLikeGraphPath(file = '') {
|
|
384
|
-
const normalized = normalizeGraphPath(file);
|
|
385
|
-
const segments = normalized.split('/').filter(Boolean);
|
|
386
|
-
return segments.some(
|
|
387
|
-
(segment) =>
|
|
388
|
-
INDEX_SKIP_DIRS.has(segment) ||
|
|
389
|
-
/^venv[-_]/i.test(segment) ||
|
|
390
|
-
/\.egg-info$/i.test(segment) ||
|
|
391
|
-
/^python\d+(?:\.\d+)?$/i.test(segment)
|
|
392
|
-
);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
function isNoisyGraphSymbol(symbol = {}) {
|
|
396
|
-
const name = String(symbol.name || symbol.symbol_id || '').split('.').pop();
|
|
397
|
-
if (!name) return true;
|
|
398
|
-
if (CODEWIKI_GRAPH_NOISY_NAMES.has(name)) return true;
|
|
399
|
-
return /^__.*__$/.test(name);
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
function sourceRootScore(file = '') {
|
|
403
|
-
const normalized = normalizeGraphPath(file);
|
|
404
|
-
if (normalized.startsWith('src/')) return 8;
|
|
405
|
-
if (normalized.startsWith('codemini-web/client/src/')) return 8;
|
|
406
|
-
if (normalized.startsWith('codemini-web/server.js')) return 7;
|
|
407
|
-
if (normalized.startsWith('codemini-web/')) return 5;
|
|
408
|
-
if (normalized.startsWith('tests/')) return 1;
|
|
409
|
-
return 3;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
function buildCodeWikiSymbolGraph(fileIndex, { maxNodes = 42 } = {}) {
|
|
413
|
-
const files = Array.isArray(fileIndex?.files) ? fileIndex.files : [];
|
|
414
|
-
const sourceFiles = files.filter((entry) => !isDependencyLikeGraphPath(entry.file));
|
|
415
|
-
const symbols = sourceFiles
|
|
416
|
-
.flatMap((entry) =>
|
|
417
|
-
(Array.isArray(entry.symbols) ? entry.symbols : []).map((symbol) => ({
|
|
418
|
-
...symbol,
|
|
419
|
-
file: symbol.file || entry.file
|
|
420
|
-
}))
|
|
421
|
-
)
|
|
422
|
-
.filter((symbol) => !isDependencyLikeGraphPath(symbol.file) && !isNoisyGraphSymbol(symbol));
|
|
423
|
-
const ranked = symbols
|
|
424
|
-
.map((symbol) => {
|
|
425
|
-
const calls = Array.isArray(symbol.calls) ? symbol.calls.length : 0;
|
|
426
|
-
const calledBy = Array.isArray(symbol.called_by) ? symbol.called_by.length : 0;
|
|
427
|
-
const writes = Array.isArray(symbol.writes) ? symbol.writes.length : 0;
|
|
428
|
-
const emits = Array.isArray(symbol.emits) ? symbol.emits.length : 0;
|
|
429
|
-
const typeBoost = symbol.type === 'class' ? 8 : symbol.type === 'method' ? 4 : 2;
|
|
430
|
-
return {
|
|
431
|
-
symbol,
|
|
432
|
-
score: sourceRootScore(symbol.file) + typeBoost + calledBy * 4 + calls * 2 + writes * 2 + emits * 2
|
|
433
|
-
};
|
|
434
|
-
})
|
|
435
|
-
.sort((a, b) => b.score - a.score || String(a.symbol.symbol_id).localeCompare(String(b.symbol.symbol_id)))
|
|
436
|
-
.slice(0, maxNodes)
|
|
437
|
-
.map((item) => item.symbol);
|
|
438
|
-
|
|
439
|
-
const byId = new Map(ranked.map((symbol) => [String(symbol.symbol_id || ''), symbol]));
|
|
440
|
-
const byShortName = new Map();
|
|
441
|
-
for (const symbol of ranked) {
|
|
442
|
-
const shortName = String(symbol.name || '').split('.').pop();
|
|
443
|
-
if (!shortName) continue;
|
|
444
|
-
if (!byShortName.has(shortName)) byShortName.set(shortName, []);
|
|
445
|
-
byShortName.get(shortName).push(symbol);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
const nodes = ranked.map((symbol) => ({
|
|
449
|
-
id: symbol.symbol_id,
|
|
450
|
-
label: symbol.name || symbol.symbol_id,
|
|
451
|
-
type: symbol.type || 'symbol',
|
|
452
|
-
file: symbol.file || '',
|
|
453
|
-
range: symbol.range || null,
|
|
454
|
-
signature: symbol.signature || '',
|
|
455
|
-
calls: clipGraphList(symbol.calls || [], 8),
|
|
456
|
-
called_by: clipGraphList(symbol.called_by || [], 8),
|
|
457
|
-
imports: clipGraphList(symbol.imports || [], 6),
|
|
458
|
-
writes: clipGraphList(symbol.writes || [], 6),
|
|
459
|
-
emits: clipGraphList(symbol.emits || [], 6)
|
|
460
|
-
}));
|
|
461
|
-
|
|
462
|
-
const edgeMap = new Map();
|
|
463
|
-
const addEdge = (source, target, kind, label = '') => {
|
|
464
|
-
if (!source || !target || source === target) return;
|
|
465
|
-
if (!byId.has(source) || !byId.has(target)) return;
|
|
466
|
-
const key = `${source}->${target}:${kind}`;
|
|
467
|
-
if (!edgeMap.has(key)) edgeMap.set(key, { source, target, kind, label });
|
|
468
|
-
};
|
|
469
|
-
|
|
470
|
-
for (const symbol of ranked) {
|
|
471
|
-
const source = String(symbol.symbol_id || '');
|
|
472
|
-
for (const call of symbol.calls || []) {
|
|
473
|
-
const shortName = String(call || '').split('.').pop();
|
|
474
|
-
for (const target of byShortName.get(shortName) || []) {
|
|
475
|
-
addEdge(source, target.symbol_id, 'calls', call);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
for (const caller of symbol.called_by || []) {
|
|
479
|
-
addEdge(caller, source, 'called_by');
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
const edges = [...edgeMap.values()].slice(0, 80);
|
|
484
|
-
|
|
485
|
-
return {
|
|
486
|
-
updatedAt: fileIndex?.updatedAt || '',
|
|
487
|
-
stats: {
|
|
488
|
-
files: files.length,
|
|
489
|
-
source_files: sourceFiles.length,
|
|
490
|
-
symbols: symbols.length,
|
|
491
|
-
displayed_nodes: nodes.length,
|
|
492
|
-
displayed_edges: edges.length
|
|
493
|
-
},
|
|
494
|
-
nodes,
|
|
495
|
-
edges
|
|
496
|
-
};
|
|
497
|
-
}
|
|
439
|
+
function codeWikiReportTitle(fileName) {
|
|
440
|
+
return String(fileName || '')
|
|
441
|
+
.replace(/-project-requirements\.html$/, '')
|
|
442
|
+
.replace(/-/g, ' ');
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
function clipGraphList(values, max = 12) {
|
|
446
|
+
return [...new Set((Array.isArray(values) ? values : []).filter(Boolean))].slice(0, max);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
const CODEWIKI_GRAPH_NOISY_NAMES = new Set([
|
|
450
|
+
'__init__',
|
|
451
|
+
'__enter__',
|
|
452
|
+
'__exit__',
|
|
453
|
+
'__getitem__',
|
|
454
|
+
'__setitem__',
|
|
455
|
+
'__delitem__',
|
|
456
|
+
'__contains__',
|
|
457
|
+
'__len__',
|
|
458
|
+
'__iter__',
|
|
459
|
+
'__next__',
|
|
460
|
+
'__call__',
|
|
461
|
+
'get',
|
|
462
|
+
'set',
|
|
463
|
+
'add',
|
|
464
|
+
'run',
|
|
465
|
+
'close',
|
|
466
|
+
'open',
|
|
467
|
+
'read',
|
|
468
|
+
'write',
|
|
469
|
+
'send',
|
|
470
|
+
'recv',
|
|
471
|
+
'poll',
|
|
472
|
+
'update',
|
|
473
|
+
'copy',
|
|
474
|
+
'size',
|
|
475
|
+
'apply'
|
|
476
|
+
]);
|
|
477
|
+
|
|
478
|
+
function normalizeGraphPath(value = '') {
|
|
479
|
+
return String(value || '').replace(/\\/g, '/').replace(/^\.\/+/, '');
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function isDependencyLikeGraphPath(file = '') {
|
|
483
|
+
const normalized = normalizeGraphPath(file);
|
|
484
|
+
const segments = normalized.split('/').filter(Boolean);
|
|
485
|
+
return segments.some(
|
|
486
|
+
(segment) =>
|
|
487
|
+
INDEX_SKIP_DIRS.has(segment) ||
|
|
488
|
+
/^venv[-_]/i.test(segment) ||
|
|
489
|
+
/\.egg-info$/i.test(segment) ||
|
|
490
|
+
/^python\d+(?:\.\d+)?$/i.test(segment)
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
function isNoisyGraphSymbol(symbol = {}) {
|
|
495
|
+
const name = String(symbol.name || symbol.symbol_id || '').split('.').pop();
|
|
496
|
+
if (!name) return true;
|
|
497
|
+
if (CODEWIKI_GRAPH_NOISY_NAMES.has(name)) return true;
|
|
498
|
+
return /^__.*__$/.test(name);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
function sourceRootScore(file = '') {
|
|
502
|
+
const normalized = normalizeGraphPath(file);
|
|
503
|
+
if (normalized.startsWith('src/')) return 8;
|
|
504
|
+
if (normalized.startsWith('codemini-web/client/src/')) return 8;
|
|
505
|
+
if (normalized.startsWith('codemini-web/server.js')) return 7;
|
|
506
|
+
if (normalized.startsWith('codemini-web/')) return 5;
|
|
507
|
+
if (normalized.startsWith('tests/')) return 1;
|
|
508
|
+
return 3;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
function buildCodeWikiSymbolGraph(fileIndex, { maxNodes = 42 } = {}) {
|
|
512
|
+
const files = Array.isArray(fileIndex?.files) ? fileIndex.files : [];
|
|
513
|
+
const sourceFiles = files.filter((entry) => !isDependencyLikeGraphPath(entry.file));
|
|
514
|
+
const symbols = sourceFiles
|
|
515
|
+
.flatMap((entry) =>
|
|
516
|
+
(Array.isArray(entry.symbols) ? entry.symbols : []).map((symbol) => ({
|
|
517
|
+
...symbol,
|
|
518
|
+
file: symbol.file || entry.file
|
|
519
|
+
}))
|
|
520
|
+
)
|
|
521
|
+
.filter((symbol) => !isDependencyLikeGraphPath(symbol.file) && !isNoisyGraphSymbol(symbol));
|
|
522
|
+
const ranked = symbols
|
|
523
|
+
.map((symbol) => {
|
|
524
|
+
const calls = Array.isArray(symbol.calls) ? symbol.calls.length : 0;
|
|
525
|
+
const calledBy = Array.isArray(symbol.called_by) ? symbol.called_by.length : 0;
|
|
526
|
+
const writes = Array.isArray(symbol.writes) ? symbol.writes.length : 0;
|
|
527
|
+
const emits = Array.isArray(symbol.emits) ? symbol.emits.length : 0;
|
|
528
|
+
const typeBoost = symbol.type === 'class' ? 8 : symbol.type === 'method' ? 4 : 2;
|
|
529
|
+
return {
|
|
530
|
+
symbol,
|
|
531
|
+
score: sourceRootScore(symbol.file) + typeBoost + calledBy * 4 + calls * 2 + writes * 2 + emits * 2
|
|
532
|
+
};
|
|
533
|
+
})
|
|
534
|
+
.sort((a, b) => b.score - a.score || String(a.symbol.symbol_id).localeCompare(String(b.symbol.symbol_id)))
|
|
535
|
+
.slice(0, maxNodes)
|
|
536
|
+
.map((item) => item.symbol);
|
|
537
|
+
|
|
538
|
+
const byId = new Map(ranked.map((symbol) => [String(symbol.symbol_id || ''), symbol]));
|
|
539
|
+
const byShortName = new Map();
|
|
540
|
+
for (const symbol of ranked) {
|
|
541
|
+
const shortName = String(symbol.name || '').split('.').pop();
|
|
542
|
+
if (!shortName) continue;
|
|
543
|
+
if (!byShortName.has(shortName)) byShortName.set(shortName, []);
|
|
544
|
+
byShortName.get(shortName).push(symbol);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const nodes = ranked.map((symbol) => ({
|
|
548
|
+
id: symbol.symbol_id,
|
|
549
|
+
label: symbol.name || symbol.symbol_id,
|
|
550
|
+
type: symbol.type || 'symbol',
|
|
551
|
+
file: symbol.file || '',
|
|
552
|
+
range: symbol.range || null,
|
|
553
|
+
signature: symbol.signature || '',
|
|
554
|
+
calls: clipGraphList(symbol.calls || [], 8),
|
|
555
|
+
called_by: clipGraphList(symbol.called_by || [], 8),
|
|
556
|
+
imports: clipGraphList(symbol.imports || [], 6),
|
|
557
|
+
writes: clipGraphList(symbol.writes || [], 6),
|
|
558
|
+
emits: clipGraphList(symbol.emits || [], 6)
|
|
559
|
+
}));
|
|
560
|
+
|
|
561
|
+
const edgeMap = new Map();
|
|
562
|
+
const addEdge = (source, target, kind, label = '') => {
|
|
563
|
+
if (!source || !target || source === target) return;
|
|
564
|
+
if (!byId.has(source) || !byId.has(target)) return;
|
|
565
|
+
const key = `${source}->${target}:${kind}`;
|
|
566
|
+
if (!edgeMap.has(key)) edgeMap.set(key, { source, target, kind, label });
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
for (const symbol of ranked) {
|
|
570
|
+
const source = String(symbol.symbol_id || '');
|
|
571
|
+
for (const call of symbol.calls || []) {
|
|
572
|
+
const shortName = String(call || '').split('.').pop();
|
|
573
|
+
for (const target of byShortName.get(shortName) || []) {
|
|
574
|
+
addEdge(source, target.symbol_id, 'calls', call);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
for (const caller of symbol.called_by || []) {
|
|
578
|
+
addEdge(caller, source, 'called_by');
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
const edges = [...edgeMap.values()].slice(0, 80);
|
|
583
|
+
|
|
584
|
+
return {
|
|
585
|
+
updatedAt: fileIndex?.updatedAt || '',
|
|
586
|
+
stats: {
|
|
587
|
+
files: files.length,
|
|
588
|
+
source_files: sourceFiles.length,
|
|
589
|
+
symbols: symbols.length,
|
|
590
|
+
displayed_nodes: nodes.length,
|
|
591
|
+
displayed_edges: edges.length
|
|
592
|
+
},
|
|
593
|
+
nodes,
|
|
594
|
+
edges
|
|
595
|
+
};
|
|
596
|
+
}
|
|
498
597
|
|
|
499
598
|
function commonPathPrefix(paths) {
|
|
500
599
|
const normalized = paths.map((p) => path.resolve(p).split(path.sep).filter(Boolean));
|
|
@@ -708,10 +807,10 @@ async function main() {
|
|
|
708
807
|
return;
|
|
709
808
|
}
|
|
710
809
|
|
|
711
|
-
// ── CodeWiki / project requirements reports ──
|
|
712
|
-
if (req.method === 'GET' && url.pathname === '/api/codewiki/reports') {
|
|
713
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
714
|
-
const requirementsDir = getRequirementsDir(codeWikiProjectDir);
|
|
810
|
+
// ── CodeWiki / project requirements reports ──
|
|
811
|
+
if (req.method === 'GET' && url.pathname === '/api/codewiki/reports') {
|
|
812
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
813
|
+
const requirementsDir = getRequirementsDir(codeWikiProjectDir);
|
|
715
814
|
try {
|
|
716
815
|
const entries = await fs.readdir(requirementsDir, { withFileTypes: true });
|
|
717
816
|
const reports = [];
|
|
@@ -732,38 +831,38 @@ async function main() {
|
|
|
732
831
|
if (err?.code === 'ENOENT') jsonResponse(res, { reports: [] });
|
|
733
832
|
else jsonResponse(res, { error: true, message: err.message }, 500);
|
|
734
833
|
}
|
|
735
|
-
return;
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
if (req.method === 'GET' && url.pathname === '/api/codewiki/symbol-graph') {
|
|
739
|
-
try {
|
|
740
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
741
|
-
const initialized = await initializeProjectIndex(codeWikiProjectDir);
|
|
742
|
-
const projectRoot = initialized?.projectRoot || codeWikiProjectDir;
|
|
743
|
-
const fileIndexPath = getFileIndexPath(projectRoot);
|
|
744
|
-
const fileIndex = JSON.parse(await fs.readFile(fileIndexPath, 'utf8'));
|
|
745
|
-
const maxNodes = Math.max(12, Math.min(80, Number(url.searchParams.get('max_nodes') || 42)));
|
|
746
|
-
jsonResponse(res, buildCodeWikiSymbolGraph(fileIndex, { maxNodes }));
|
|
747
|
-
} catch (err) {
|
|
748
|
-
jsonResponse(res, {
|
|
749
|
-
updatedAt: '',
|
|
750
|
-
stats: { files: 0, symbols: 0, displayed_nodes: 0, displayed_edges: 0 },
|
|
751
|
-
nodes: [],
|
|
752
|
-
edges: [],
|
|
753
|
-
error: err?.message || String(err)
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
return;
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
if (req.method === 'GET' && url.pathname.startsWith('/api/codewiki/report/')) {
|
|
834
|
+
return;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
if (req.method === 'GET' && url.pathname === '/api/codewiki/symbol-graph') {
|
|
838
|
+
try {
|
|
839
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
840
|
+
const initialized = await initializeProjectIndex(codeWikiProjectDir);
|
|
841
|
+
const projectRoot = initialized?.projectRoot || codeWikiProjectDir;
|
|
842
|
+
const fileIndexPath = getFileIndexPath(projectRoot);
|
|
843
|
+
const fileIndex = JSON.parse(await fs.readFile(fileIndexPath, 'utf8'));
|
|
844
|
+
const maxNodes = Math.max(12, Math.min(80, Number(url.searchParams.get('max_nodes') || 42)));
|
|
845
|
+
jsonResponse(res, buildCodeWikiSymbolGraph(fileIndex, { maxNodes }));
|
|
846
|
+
} catch (err) {
|
|
847
|
+
jsonResponse(res, {
|
|
848
|
+
updatedAt: '',
|
|
849
|
+
stats: { files: 0, symbols: 0, displayed_nodes: 0, displayed_edges: 0 },
|
|
850
|
+
nodes: [],
|
|
851
|
+
edges: [],
|
|
852
|
+
error: err?.message || String(err)
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
if (req.method === 'GET' && url.pathname.startsWith('/api/codewiki/report/')) {
|
|
760
859
|
const fileName = decodeURIComponent(url.pathname.slice('/api/codewiki/report/'.length));
|
|
761
860
|
if (!isCodeWikiReportFile(fileName)) {
|
|
762
861
|
jsonResponse(res, { error: true, message: 'Invalid report file' }, 400);
|
|
763
862
|
return;
|
|
764
863
|
}
|
|
765
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
766
|
-
const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
|
|
864
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
865
|
+
const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
|
|
767
866
|
const reportPath = path.resolve(requirementsDir, fileName);
|
|
768
867
|
if (!reportPath.startsWith(`${requirementsDir}${path.sep}`)) {
|
|
769
868
|
jsonResponse(res, { error: true, message: 'Invalid report path' }, 403);
|
|
@@ -779,8 +878,8 @@ async function main() {
|
|
|
779
878
|
jsonResponse(res, { error: true, message: 'Invalid report file' }, 400);
|
|
780
879
|
return;
|
|
781
880
|
}
|
|
782
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
783
|
-
const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
|
|
881
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
882
|
+
const requirementsDir = path.resolve(getRequirementsDir(codeWikiProjectDir));
|
|
784
883
|
const reportPath = path.resolve(requirementsDir, fileName);
|
|
785
884
|
if (!reportPath.startsWith(`${requirementsDir}${path.sep}`)) {
|
|
786
885
|
jsonResponse(res, { error: true, message: 'Invalid report path' }, 403);
|
|
@@ -801,20 +900,20 @@ async function main() {
|
|
|
801
900
|
jsonResponse(res, { error: true, message: 'Runtime is busy' }, 409);
|
|
802
901
|
return;
|
|
803
902
|
}
|
|
804
|
-
const { depth } = await readBody(req);
|
|
805
|
-
const normalizedDepth = ['fast', 'standard', 'deep'].includes(String(depth || '').toLowerCase())
|
|
806
|
-
? String(depth).toLowerCase()
|
|
807
|
-
: 'standard';
|
|
808
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
809
|
-
if (codeWikiProjectDir !== currentProjectDir) {
|
|
810
|
-
const { runtime } = await buildRuntimeForSession({
|
|
811
|
-
model: bridge.getState().model,
|
|
812
|
-
projectDir: codeWikiProjectDir
|
|
813
|
-
});
|
|
814
|
-
await bridge.switchRuntime(runtime);
|
|
815
|
-
currentProjectDir = process.cwd();
|
|
816
|
-
}
|
|
817
|
-
const result = bridge.
|
|
903
|
+
const { depth } = await readBody(req);
|
|
904
|
+
const normalizedDepth = ['fast', 'standard', 'deep'].includes(String(depth || '').toLowerCase())
|
|
905
|
+
? String(depth).toLowerCase()
|
|
906
|
+
: 'standard';
|
|
907
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
908
|
+
if (codeWikiProjectDir !== currentProjectDir) {
|
|
909
|
+
const { runtime } = await buildRuntimeForSession({
|
|
910
|
+
model: bridge.getState().model,
|
|
911
|
+
projectDir: codeWikiProjectDir
|
|
912
|
+
});
|
|
913
|
+
await bridge.switchRuntime(runtime);
|
|
914
|
+
currentProjectDir = process.cwd();
|
|
915
|
+
}
|
|
916
|
+
const result = bridge.handleCodeWikiGenerate(`/project-requirements --${normalizedDepth}`);
|
|
818
917
|
jsonResponse(res, result);
|
|
819
918
|
return;
|
|
820
919
|
}
|
|
@@ -841,16 +940,16 @@ async function main() {
|
|
|
841
940
|
jsonResponse(res, { error: true, message: 'Runtime is busy' }, 409);
|
|
842
941
|
return;
|
|
843
942
|
}
|
|
844
|
-
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
845
|
-
const reportPath = selectedReport
|
|
846
|
-
? path.join(getRequirementsDir(codeWikiProjectDir), selectedReport)
|
|
847
|
-
: getRequirementsDir(codeWikiProjectDir);
|
|
848
|
-
const prompt = buildCodeWikiAskPrompt({
|
|
849
|
-
question,
|
|
850
|
-
reportPath,
|
|
851
|
-
projectDir: codeWikiProjectDir,
|
|
852
|
-
replyLanguage: bridge.getState()?.replyLanguage
|
|
853
|
-
});
|
|
943
|
+
const codeWikiProjectDir = await resolveCodeWikiProjectDir(url, currentProjectDir);
|
|
944
|
+
const reportPath = selectedReport
|
|
945
|
+
? path.join(getRequirementsDir(codeWikiProjectDir), selectedReport)
|
|
946
|
+
: getRequirementsDir(codeWikiProjectDir);
|
|
947
|
+
const prompt = buildCodeWikiAskPrompt({
|
|
948
|
+
question,
|
|
949
|
+
reportPath,
|
|
950
|
+
projectDir: codeWikiProjectDir,
|
|
951
|
+
replyLanguage: bridge.getState()?.replyLanguage
|
|
952
|
+
});
|
|
854
953
|
|
|
855
954
|
res.writeHead(200, {
|
|
856
955
|
'Content-Type': 'application/x-ndjson; charset=utf-8',
|
|
@@ -1114,28 +1213,64 @@ async function main() {
|
|
|
1114
1213
|
}
|
|
1115
1214
|
return;
|
|
1116
1215
|
}
|
|
1117
|
-
if (req.method === 'GET' && url.pathname.startsWith('/api/config/get/')) {
|
|
1118
|
-
const key = url.pathname.slice('/api/config/get/'.length);
|
|
1119
|
-
const value = await getConfigValue(key);
|
|
1120
|
-
jsonResponse(res, { key, value });
|
|
1121
|
-
return;
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
|
-
// ──
|
|
1125
|
-
if (req.method === 'GET' && url.pathname === '/api/
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1216
|
+
if (req.method === 'GET' && url.pathname.startsWith('/api/config/get/')) {
|
|
1217
|
+
const key = url.pathname.slice('/api/config/get/'.length);
|
|
1218
|
+
const value = await getConfigValue(key);
|
|
1219
|
+
jsonResponse(res, { key, value });
|
|
1220
|
+
return;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
// ── Memory management ──
|
|
1224
|
+
if (req.method === 'GET' && url.pathname === '/api/memory') {
|
|
1225
|
+
const scope = normalizeMemoryScope(url.searchParams.get('scope'));
|
|
1226
|
+
const query = String(url.searchParams.get('q') || '').trim();
|
|
1227
|
+
try {
|
|
1228
|
+
const projectDirs = await parseProjectDirsParam(url, currentProjectDir);
|
|
1229
|
+
const items = await listMemoriesForProjectDirs({
|
|
1230
|
+
scope,
|
|
1231
|
+
query,
|
|
1232
|
+
projectDirs,
|
|
1233
|
+
fallbackDir: currentProjectDir
|
|
1234
|
+
});
|
|
1235
|
+
jsonResponse(res, { scope, query, items });
|
|
1236
|
+
} catch (err) {
|
|
1237
|
+
jsonResponse(res, { error: true, message: err.message }, 500);
|
|
1238
|
+
}
|
|
1239
|
+
return;
|
|
1240
|
+
}
|
|
1241
|
+
if (req.method === 'DELETE' && url.pathname.startsWith('/api/memory/')) {
|
|
1242
|
+
const id = decodeURIComponent(url.pathname.slice('/api/memory/'.length));
|
|
1243
|
+
const scope = normalizeMemoryScope(url.searchParams.get('scope'));
|
|
1244
|
+
if (!id) { jsonResponse(res, { error: true, message: 'Missing memory id' }, 400); return; }
|
|
1245
|
+
try {
|
|
1246
|
+
const workspaceRoot = scope === 'project'
|
|
1247
|
+
? await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir)
|
|
1248
|
+
: currentProjectDir;
|
|
1249
|
+
const result = await forgetMemory({ scope, id, workspaceRoot });
|
|
1250
|
+
jsonResponse(res, { ok: true, scope, ...result });
|
|
1251
|
+
} catch (err) {
|
|
1252
|
+
jsonResponse(res, { error: true, message: err.message }, 500);
|
|
1253
|
+
}
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
// ── Skills management ──
|
|
1258
|
+
if (req.method === 'GET' && url.pathname === '/api/skills') {
|
|
1259
|
+
try {
|
|
1260
|
+
const projectDirs = await parseProjectDirsParam(url, currentProjectDir);
|
|
1261
|
+
const skills = await listSkillsForProjectDirs(projectDirs, currentProjectDir);
|
|
1262
|
+
jsonResponse(res, skills);
|
|
1263
|
+
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1264
|
+
return;
|
|
1265
|
+
}
|
|
1266
|
+
if (req.method === 'GET' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
|
|
1267
|
+
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
|
|
1268
|
+
try {
|
|
1269
|
+
const targetProjectDir = await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir);
|
|
1270
|
+
const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
|
|
1271
|
+
const skill = entries.find(s => s.name === name);
|
|
1272
|
+
if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
|
|
1273
|
+
const content = await fs.readFile(skill.path, 'utf8');
|
|
1139
1274
|
jsonResponse(res, { name: skill.name, content, scope: skill.scope });
|
|
1140
1275
|
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1141
1276
|
return;
|
|
@@ -1192,38 +1327,40 @@ async function main() {
|
|
|
1192
1327
|
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1193
1328
|
return;
|
|
1194
1329
|
}
|
|
1195
|
-
if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
|
|
1196
|
-
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
|
|
1197
|
-
const { content } = await readBody(req);
|
|
1198
|
-
if (!content) { jsonResponse(res, { error: true, message: 'Missing content' }, 400); return; }
|
|
1199
|
-
try {
|
|
1200
|
-
const
|
|
1201
|
-
const
|
|
1202
|
-
|
|
1203
|
-
if (skill
|
|
1330
|
+
if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/content')) {
|
|
1331
|
+
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/content'.length));
|
|
1332
|
+
const { content, projectDir } = await readBody(req);
|
|
1333
|
+
if (!content) { jsonResponse(res, { error: true, message: 'Missing content' }, 400); return; }
|
|
1334
|
+
try {
|
|
1335
|
+
const targetProjectDir = await resolveRequestProjectDir(projectDir, currentProjectDir);
|
|
1336
|
+
const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
|
|
1337
|
+
const skill = entries.find(s => s.name === name);
|
|
1338
|
+
if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
|
|
1339
|
+
if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot edit builtin skill' }, 403); return; }
|
|
1204
1340
|
await fs.writeFile(skill.path, content, 'utf8');
|
|
1205
1341
|
await bridge.reloadCommandsAndSkills();
|
|
1206
1342
|
jsonResponse(res, { ok: true });
|
|
1207
1343
|
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1208
1344
|
return;
|
|
1209
1345
|
}
|
|
1210
|
-
if (req.method === 'DELETE' && url.pathname.startsWith('/api/skills/')) {
|
|
1211
|
-
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length));
|
|
1212
|
-
try {
|
|
1213
|
-
const
|
|
1214
|
-
const
|
|
1215
|
-
|
|
1216
|
-
if (skill
|
|
1346
|
+
if (req.method === 'DELETE' && url.pathname.startsWith('/api/skills/')) {
|
|
1347
|
+
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length));
|
|
1348
|
+
try {
|
|
1349
|
+
const targetProjectDir = await resolveRequestProjectDir(url.searchParams.get('projectDir'), currentProjectDir);
|
|
1350
|
+
const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
|
|
1351
|
+
const skill = entries.find(s => s.name === name);
|
|
1352
|
+
if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
|
|
1353
|
+
if (skill.scope === 'builtin') { jsonResponse(res, { error: true, message: 'Cannot delete builtin skill' }, 403); return; }
|
|
1217
1354
|
const dir = path.dirname(skill.path);
|
|
1218
1355
|
await fs.rm(dir, { recursive: true, force: true });
|
|
1219
1356
|
const registry = await readSkillRegistry();
|
|
1220
1357
|
registry.skills = (registry.skills || []).filter(s => s.name !== name);
|
|
1221
1358
|
await writeSkillRegistry(undefined, registry);
|
|
1222
|
-
const catalog = await readProjectSkillCatalog(
|
|
1223
|
-
if (catalog.skills?.[name]) {
|
|
1224
|
-
delete catalog.skills[name];
|
|
1225
|
-
await writeProjectSkillCatalog(
|
|
1226
|
-
}
|
|
1359
|
+
const catalog = await readProjectSkillCatalog(targetProjectDir);
|
|
1360
|
+
if (catalog.skills?.[name]) {
|
|
1361
|
+
delete catalog.skills[name];
|
|
1362
|
+
await writeProjectSkillCatalog(targetProjectDir, catalog);
|
|
1363
|
+
}
|
|
1227
1364
|
await deleteSkillCatalogMetadata(getSkillsDir(), name);
|
|
1228
1365
|
const config = await loadConfig();
|
|
1229
1366
|
if (config.skills?.enabled) delete config.skills.enabled[name];
|
|
@@ -1233,12 +1370,13 @@ async function main() {
|
|
|
1233
1370
|
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1234
1371
|
return;
|
|
1235
1372
|
}
|
|
1236
|
-
if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/metadata')) {
|
|
1237
|
-
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/metadata'.length));
|
|
1238
|
-
const body = await readBody(req);
|
|
1239
|
-
try {
|
|
1240
|
-
const
|
|
1241
|
-
const
|
|
1373
|
+
if (req.method === 'PUT' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/metadata')) {
|
|
1374
|
+
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/metadata'.length));
|
|
1375
|
+
const body = await readBody(req);
|
|
1376
|
+
try {
|
|
1377
|
+
const targetProjectDir = await resolveRequestProjectDir(body?.projectDir, currentProjectDir);
|
|
1378
|
+
const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
|
|
1379
|
+
const skill = entries.find(s => s.name === name);
|
|
1242
1380
|
if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
|
|
1243
1381
|
if (skill.scope === 'builtin' && body?.scope && body.scope !== 'builtin') {
|
|
1244
1382
|
jsonResponse(res, { error: true, message: 'Cannot move builtin skill' }, 403);
|
|
@@ -1250,15 +1388,15 @@ async function main() {
|
|
|
1250
1388
|
let nextScope = skill.scope;
|
|
1251
1389
|
|
|
1252
1390
|
if (skill.scope !== 'builtin' && requestedScope !== skill.scope) {
|
|
1253
|
-
const sourceDir = path.dirname(skill.path);
|
|
1254
|
-
const targetBaseDir = skillBaseDirForScope(requestedScope,
|
|
1255
|
-
const targetDir = path.join(targetBaseDir, name);
|
|
1391
|
+
const sourceDir = path.dirname(skill.path);
|
|
1392
|
+
const targetBaseDir = skillBaseDirForScope(requestedScope, targetProjectDir);
|
|
1393
|
+
const targetDir = path.join(targetBaseDir, name);
|
|
1256
1394
|
await fs.rm(targetDir, { recursive: true, force: true });
|
|
1257
1395
|
await fs.mkdir(path.dirname(targetDir), { recursive: true });
|
|
1258
1396
|
await fs.cp(sourceDir, targetDir, { recursive: true, force: true });
|
|
1259
1397
|
await fs.rm(sourceDir, { recursive: true, force: true });
|
|
1260
|
-
if (requestedScope === 'global') {
|
|
1261
|
-
await deleteSkillCatalogMetadata(getProjectSkillsDir(
|
|
1398
|
+
if (requestedScope === 'global') {
|
|
1399
|
+
await deleteSkillCatalogMetadata(getProjectSkillsDir(targetProjectDir), name);
|
|
1262
1400
|
await upsertSkillRegistryEntry(undefined, {
|
|
1263
1401
|
name,
|
|
1264
1402
|
version: skill.version || '0.0.0',
|
|
@@ -1285,13 +1423,13 @@ async function main() {
|
|
|
1285
1423
|
...(metadataPatch.enabled !== undefined ? { enabled: metadataPatch.enabled } : {})
|
|
1286
1424
|
});
|
|
1287
1425
|
metadata = await upsertSkillCatalogMetadata(getSkillsDir(), name, body || {});
|
|
1288
|
-
} else if (nextScope === 'project') {
|
|
1289
|
-
metadata = await upsertProjectSkillMetadata(
|
|
1290
|
-
} else if (skill.scope !== 'builtin') {
|
|
1291
|
-
metadata = await upsertProjectSkillMetadata(
|
|
1292
|
-
} else {
|
|
1293
|
-
metadata = await upsertProjectSkillMetadata(
|
|
1294
|
-
}
|
|
1426
|
+
} else if (nextScope === 'project') {
|
|
1427
|
+
metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
|
|
1428
|
+
} else if (skill.scope !== 'builtin') {
|
|
1429
|
+
metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
|
|
1430
|
+
} else {
|
|
1431
|
+
metadata = await upsertProjectSkillMetadata(targetProjectDir, name, body || {});
|
|
1432
|
+
}
|
|
1295
1433
|
if (skill.scope !== 'builtin' && body?.enabled !== undefined) {
|
|
1296
1434
|
const config = await loadConfig();
|
|
1297
1435
|
config.skills = config.skills || {};
|
|
@@ -1307,15 +1445,16 @@ async function main() {
|
|
|
1307
1445
|
} catch (err) { jsonResponse(res, { error: true, message: err.message }, 500); }
|
|
1308
1446
|
return;
|
|
1309
1447
|
}
|
|
1310
|
-
if (req.method === 'POST' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/toggle')) {
|
|
1311
|
-
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/toggle'.length));
|
|
1312
|
-
const { enabled } = await readBody(req);
|
|
1313
|
-
try {
|
|
1314
|
-
const
|
|
1315
|
-
const
|
|
1316
|
-
|
|
1317
|
-
if (skill
|
|
1318
|
-
|
|
1448
|
+
if (req.method === 'POST' && url.pathname.startsWith('/api/skills/') && url.pathname.endsWith('/toggle')) {
|
|
1449
|
+
const name = decodeURIComponent(url.pathname.slice('/api/skills/'.length, -'/toggle'.length));
|
|
1450
|
+
const { enabled, projectDir } = await readBody(req);
|
|
1451
|
+
try {
|
|
1452
|
+
const targetProjectDir = await resolveRequestProjectDir(projectDir, currentProjectDir);
|
|
1453
|
+
const entries = await listSkillEntries({ scope: 'all', cwd: targetProjectDir });
|
|
1454
|
+
const skill = entries.find(s => s.name === name);
|
|
1455
|
+
if (!skill) { jsonResponse(res, { error: true, message: 'Skill not found' }, 404); return; }
|
|
1456
|
+
if (skill.scope === 'builtin') {
|
|
1457
|
+
const metadata = await upsertProjectSkillMetadata(targetProjectDir, name, { enabled });
|
|
1319
1458
|
await bridge.reloadCommandsAndSkills();
|
|
1320
1459
|
jsonResponse(res, { ok: true, name, metadata });
|
|
1321
1460
|
return;
|