mycode-cli 0.8.10__tar.gz → 0.9.1__tar.gz
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.
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/PKG-INFO +6 -6
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/pyproject.toml +6 -6
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/config.py +307 -133
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/main.py +2 -3
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/permissions.py +1 -1
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/runtime.py +2 -2
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/app.py +1 -1
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/deps.py +11 -1
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/routers/chat.py +143 -157
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/routers/sessions.py +10 -11
- mycode_cli-0.9.1/src/mycode_cli/server/routers/settings.py +175 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/run_manager.py +50 -2
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/EditDiff-BwTMgMSU.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/EditDiff-DXTvyFLa.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/angular-html-B6qE7Fgr.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/angular-html-zUBHyh8F.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/angular-ts-CCYXQBsQ.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/angular-ts-D__kA5Sc.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/apl-BHFdPdwP.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/apl-C3-z3dfi.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/astro-CdDbCEi0.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/astro-CFoXPPIu.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/blade-tLtw_1xC.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/blade-D3NE5Ndo.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/c-gShqJt5_.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/c-XVpTwZ8J.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/cobol-CKazzhoF.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/cobol-ChCkSIDw.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/coffee-DsdLebDY.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/coffee-D93Gwvt1.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/cpp-Cwf1vUUo.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/cpp-CQvSsQrn.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/crystal-D2D2rLOi.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/crystal-ClKys-4k.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/css-DCF53qDU.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/css-CqqqlUGN.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/edge-DQH05KUf.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/edge-1m7mz0oj.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/elixir-2VpsbiLV.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/elixir-Dhj2SUNE.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/elm-_CHnbifk.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/elm-Bc9X3CQR.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/engine-compile-B24DC8pd.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/engine-compile-X009Avpn.js +3 -3
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/erb-Cxmz5KSP.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/erb-DfaOLgXg.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/git-rebase-C04jMORK.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/git-rebase-DodCdp9O.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/glimmer-js-D0Nvbzz0.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/glimmer-js-DUUII4Wd.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/glimmer-ts-ix22zR5c.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/glimmer-ts-BfFaAicF.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/glsl-C4sVYnlm.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/glsl-De9OvqVZ.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/graphql-CmkcYwk_.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/graphql-DT_uHyhu.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/hack-BDK0ocxa.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/hack-wAnhyYPT.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/haml-wLZoRSkX.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/haml-25rdgz3P.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/handlebars-Bq6qdew-.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/handlebars-DUoyuSqS.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/highlighter-Dlz8vejz.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/highlighter-DMEpdwDZ.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/html-j61brix0.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/html-BUu0DAfb.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/html-derivative-B16zJ1uM.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/html-derivative-CWrcx4X0.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/http-0baH_3Dk.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/http-Bvi8ldk2.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/hurl-CR5A6vqw.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/hurl-HNI3XiYB.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/index-_MPb8SvH.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/index-Cn7Zu-W8.js +54 -54
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/java-B_NtVZr9.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/java-xN-qDE15.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/javascript-BJVvvhBF.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/javascript-azPbeGRp.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/jinja-C_N7wio_.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/jinja-BU1N7s9p.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/jison-DVVdkBIk.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/jison-iZna58V0.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/json-sM0x8hNn.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/json-NONbKG7j.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/jsx-C9BVFirF.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/jsx-DTZAgS-2.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/julia-ChaP_3F1.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/julia-B_9chSzB.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/just-CavrxuQ2.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/just-D9lnNwgC.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/latex-DzKiPX3o.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/latex-CnZdAYwj.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/liquid-C7DJS0P7.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/liquid-DQ14BZT0.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/lua-BqiiO-68.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/lua-DnS3-v-y.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/marko-D6qURI0q.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/marko-D9DfWPi4.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/mdc-CcWXXq58.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/mdc-BN9Ot7DB.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/nginx-CpKQIPTm.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/nginx-B58tlfvI.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/nim-8_0pTVwq.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/nim-av-MfCDE.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/perl-D3eGItpN.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/perl-0sjrS3Gb.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/php-DxTfLPo4.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/php-CZvo7wBk.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/pug-Czlo7T9J.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/pug-BwBS8e4J.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/qml-DcXsrGQw.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/qml-H5wLT71o.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/r-p_dzGn9P.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/r-Be5cp8iE.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/razor-DYXsAW5_.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/razor-Bcc8E2rc.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/regexp-T_fsBtNr.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/regexp-JVHml1Yu.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/rst-ORuymkQc.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/rst-BNOEpKF8.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/ruby-ClzjSQ0l.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/ruby-DHqrbN-C.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/sas-BRTK3la1.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/sas-CDM1ewMx.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/scss-DS6I3QcS.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/scss-D2W9OINT.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/shellscript-CiTYCSib.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/shellscript-CrNyGC08.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/shellsession-D5DT705X.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/shellsession-4RFKAdWa.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/soy-NNJOX3cw.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/soy-DYySMI5S.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/sql-Buaa9QxE.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/sql-DYFlRzi8.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/stata-ntax-hDY.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/stata-CWzbXmA0.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/surrealql-DOI7nkTm.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/surrealql-BZiskn5H.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/svelte-BtWRbgsA.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/svelte-Cb9-B7io.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/templ-BXLB83Z5.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/templ-B8xKIPfZ.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/tex-DkP4hQm8.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/tex-CkybcnC8.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/ts-tags-BhFXwTms.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/ts-tags-CfStMU-y.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/tsx-Ct4UJ72v.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/tsx-CWJ_UlgO.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/twig-BVS_f6WM.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/twig-CilVFDAc.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/typescript-31zaVSb0.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/typescript-Cbhz-HJw.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/vue-html-BZJQggZA.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/vue-html-D16hSZPs.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/vue-axzl95W-.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/vue-nvDSqQNS.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/vue-vine-C0SHPvOF.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/vue-vine-BiAviZSH.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/xml-DXLyvx5e.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/xml-BZYdfa6I.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/xsl-C1DaZKBE.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/xsl-foGXcAPU.js +1 -1
- mycode_cli-0.8.10/src/mycode_cli/server/static/assets/yaml-BSIzUixy.js → mycode_cli-0.9.1/src/mycode_cli/server/static/assets/yaml-B7b28xXf.js +1 -1
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/index.html +1 -1
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/tui/chat.py +95 -110
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/tui/render.py +20 -34
- mycode_cli-0.8.10/src/mycode_cli/server/routers/settings.py +0 -348
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/.gitignore +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/LICENSE +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/README.md +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/hatch_build.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/__init__.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/__init__.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/routers/__init__.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/routers/workspaces.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/schemas.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/abap-smLpETzL.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/actionscript-3-o-aRvjY5.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ada-D5RRX1i4.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/andromeeda-N4z3YzmR.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/apache-DttKlSqg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/apex-DL7j-a2n.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/applescript-DCbL_2FX.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ara-DqheWJCe.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/asciidoc-BH2sf2K4.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/asm-rfjOMz3U.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/aurora-x-CND-FqEb.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/awk-CMV5n9Z7.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ayu-dark-on7xzq_B.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ayu-light-DnGeGGc2.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ayu-mirage-DG3LlYC_.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ballerina-BjMqJjlr.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/bat-BaVbo_qw.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/beancount-DBt5Mbc_.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/berry-Cyjuxiss.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/bibtex-BV_0nsPq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/bicep-C2gEwu4J.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/bird2-BRyaEJd0.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/bsl-B1qbqNES.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/c3-DTTbp5N2.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/cadence-CPz83cmI.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/cairo-BDj8wWhy.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/catppuccin-frappe-Dr22sraq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/catppuccin-latte-C57EeX8c.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/catppuccin-macchiato-CpheI4uD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/catppuccin-mocha-D8Lmdks_.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/clarity-CFJ2Yc3q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/clojure-6R01QgJC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/cmake-D5rSbMir.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/codeowners-_3A-ClkN.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/codeql-DlIhJTR7.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/common-lisp-BvQzz173.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/coq-DTNXReIC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/csharp-BDKQY1K9.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/csv-DNUpVBxl.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/cue-DDdBc2s3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/cypher-CguaznO2.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/d-CHcoyjv3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dark-plus-CqeW_0kH.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dart-RM3aRphk.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dax-nbnY1d79.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/desktop-BD76cvxT.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/diff-CdkWtnkL.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/docker-ZyPHc6zB.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dotenv-BdJZEwA6.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dracula-CtqCPLGa.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dracula-soft-DmBpwRAy.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/dream-maker-BJL4qlg3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/emacs-lisp-_LyYa2Ky.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/erlang-Bc4hQuqa.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/everforest-dark-CrbyKk4n.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/everforest-light-DRbSh8Tm.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fennel-CC2BkRsS.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fish-D2ZCzqcE.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fluent-DKAm3m7q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fortran-fixed-form-B02FOYI-.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fortran-free-form-BPTf0lbT.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/fsharp-DhdR18vN.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gdresource-DgnrMPIx.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gdscript-CsadCSaZ.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gdshader-PfnN_8tR.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/genie-Bj-orPAV.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gherkin-COVWpJ-Q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/git-commit-DGJi7qBD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-dark-default-DX3IG_X0.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-dark-dimmed-CH6p_7ez.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-dark-high-contrast-Bg2sSao5.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-dark-ipGuFGYC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-light-BxjqOQl0.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-light-default-DwpDd1IQ.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/github-light-high-contrast-C0QeixPf.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gleam-BF2NigGj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gn-CMIt9roj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gnuplot-DgWlRTEj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/go-DLnOLj8q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/groovy-B9qLWIkE.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-BIMX9ePb.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-DxuwyVzM.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-ba2fjht0.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-light-hard-DAJK2PqC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-light-medium-WRifDAJD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/gruvbox-light-soft-B0dBOoVB.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/haskell-BaGpmm_c.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/haxe-DfXTCEOz.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/hcl-CbCtpSbi.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/hjson-_4-w-pHU.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/hlsl-DpuYn7pp.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/horizon-C5RtD1fY.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/horizon-bright-pEOice34.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/houston-A0zg9vNP.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/hxml-adC65L_J.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/hy-t9zDXBje.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/imba-Bxu-TDfw.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/index-Datomjin.css +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ini-D-v34c8N.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/json5-D0XL1D5m.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/jsonc-BBgf3TX3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/jsonl-KrKLbtB7.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/jsonnet-B2ZwWMOt.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/jssm-ByRpI9-B.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kanagawa-dragon-CtPmcCMp.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kanagawa-lotus-DpOXEGCa.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kanagawa-wave-CLVCyc-n.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kdl-6FPPEH4H.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kotlin-D4L3Nd2D.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/kusto-D-mmc07O.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/laserwave-7fEj4XGb.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/lean-BMVMuP2E.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/less-C95PyOu0.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/light-plus-DHI2dh3p.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/llvm-Dy3qORTl.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/log-BQop7fzg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/logo-DKtnYmrp.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/luau-Dha4KG0q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/make-DfmS6buu.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/markdown-BaI9LyM4.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/material-theme-Dm6ETY8i.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/material-theme-darker-BeyjmM5Z.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/material-theme-lighter-CCOYYzKL.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/material-theme-ocean-CUtPiiX3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/material-theme-palenight-2L4zMwIM.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/matlab-BT79Cq_j.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/mdx-CxGBwLNt.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/mermaid-DLf3axBN.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/min-dark-B8TUPGHg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/min-light-BDOoBxcA.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/mipsasm-DXuU_0cI.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/mojo-1Omp2pIo.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/monokai-E_VBmXGZ.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/moonbit-DZzq699o.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/move-DxDAOJVd.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/narrat-CxDcPPb9.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/nextflow-JEyYUlIq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/nextflow-groovy-wvmJO4hi.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/night-owl-DefhalNX.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/night-owl-light-byb3AbEn.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/nix-DsFTDHWT.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/nord-D5rQzHT-.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/nushell-BQ_rO0AM.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/objective-c-BMq6JT_m.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/objective-cpp-DRwojuGv.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ocaml-e4_gKO6E.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/odin-mdTPwYOg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/one-dark-pro-DxXww9jg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/one-light-D9c03w7t.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/openscad-D2aTdNfr.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/pascal-D4n_G8vj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/pierre-dark-CizZ1Z5z.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/pierre-light-CHMWfAMe.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/pkl-DcjhAp0L.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/plastic-uOsw7z1x.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/plsql-BSy3Ag0J.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/po-Be96RYkA.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/poimandres-CyO4HORD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/polar-BmhMKWum.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/postcss-BTQso3H9.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/powerquery-DVyQv3M2.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/powershell-BmtCGJVD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/prisma-CCFA9rEj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/prolog-DWGEEo78.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/proto-C3eop1kM.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/puppet-C0_7Nv5A.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/purescript-Bv-B8yRw.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/python-CKg5r0C3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/qmldir-Cqfb4Lox.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/qss-Csho9BH8.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/racket-D8-uWeQH.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/raku-Cj4JSa8p.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/red-z4H4llUY.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/reg-DXGFiJSl.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rel-CunnVTBK.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/riscv-C8BcOCkS.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ron-DiDyR9oa.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rose-pine-BADquuIH.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rose-pine-dawn-BLcEeBoh.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rose-pine-moon-BK_tLY1Y.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rosmsg-CHmL1Uyj.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/rust-DjJFInu3.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/sass-D3xZ5o-v.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/scala-B0IRml5w.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/scheme-BhwcV3Av.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/sdbl-BmWYR-pI.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/shaderlab-DZ3Lsiak.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/slack-dark-DOnVms5P.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/slack-ochin-DcRTft4q.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/smalltalk-DVQuUMII.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/snazzy-light-x9CLJ1W9.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/solarized-dark-BB1sh-pe.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/solarized-light-9-RPS998.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/solidity-gQ4WXILB.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/sparql-B9c85a_o.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/splunk-OB48_RcD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/ssh-config-DA9YMRGV.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/stylus-sKwvsUaC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/swift-C72NbAtg.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/synthwave-84-eJ9uRN_S.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/system-verilog-CnWMF7Nq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/systemd-DMzItW5N.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/talonscript-DopQCWDL.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/tasl-C28SYKbq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/tcl-DHq7zmoF.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/terraform-CogS1YKX.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/tokyo-night-B9N7LyrF.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/toml-BH_iPsgK.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/tsv-BIkdBZX1.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/turtle-CqNXyJWZ.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/typespec-CQ9LYD_e.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/typst-T-Fsk-Sv.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/v-BhMEOw9x.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vala-DzajMnwt.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vb-7Xr8dEYW.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/verilog-AvXtwZir.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vesper-CtgQQ2sf.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vhdl-BHu0zg1P.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/viml-Di0QpLfC.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vitesse-black-jXdfyqgD.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vitesse-dark-B88PxG1r.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vitesse-light-BXxZh2iV.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/vyper-C3R5yXgx.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wasm-CEUrWlVz.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wasm-Chsuwt1A.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wenyan-BonVcr2i.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wgsl-D59WYmNq.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wikitext-ariTI2Wk.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wit-EA4fa3Dt.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/wolfram-DDp7LhyU.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/zenscript-4WaROUyc.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/assets/zig-CJoLJGwV.js +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/system_prompt.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/tui/__init__.py +0 -0
- {mycode_cli-0.8.10 → mycode_cli-0.9.1}/src/mycode_cli/tui/theme.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycode-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.1
|
|
4
4
|
Summary: Minimal coding agent CLI and web UI built on mycode-sdk.
|
|
5
5
|
Project-URL: Homepage, https://github.com/legibet/mycode
|
|
6
6
|
Project-URL: Repository, https://github.com/legibet/mycode
|
|
@@ -21,13 +21,13 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: Software Development
|
|
23
23
|
Requires-Python: >=3.12
|
|
24
|
-
Requires-Dist: fastapi>=0.
|
|
25
|
-
Requires-Dist: mycode-sdk==0.
|
|
26
|
-
Requires-Dist: prompt-toolkit>=3.0.
|
|
24
|
+
Requires-Dist: fastapi>=0.136.0
|
|
25
|
+
Requires-Dist: mycode-sdk==0.9.1
|
|
26
|
+
Requires-Dist: prompt-toolkit>=3.0.0
|
|
27
27
|
Requires-Dist: pyyaml>=6.0.0
|
|
28
28
|
Requires-Dist: rich>=15.0.0
|
|
29
|
-
Requires-Dist: typer>=0.
|
|
30
|
-
Requires-Dist: uvicorn[standard]>=0.
|
|
29
|
+
Requires-Dist: typer>=0.26.0
|
|
30
|
+
Requires-Dist: uvicorn[standard]>=0.49.0
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
|
|
33
33
|
# mycode
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mycode-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.9.1"
|
|
8
8
|
description = "Minimal coding agent CLI and web UI built on mycode-sdk."
|
|
9
9
|
requires-python = ">=3.12"
|
|
10
10
|
license = "MIT"
|
|
@@ -26,12 +26,12 @@ classifiers = [
|
|
|
26
26
|
]
|
|
27
27
|
keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
|
|
28
28
|
dependencies = [
|
|
29
|
-
"mycode-sdk==0.
|
|
30
|
-
"fastapi>=0.
|
|
31
|
-
"uvicorn[standard]>=0.
|
|
29
|
+
"mycode-sdk==0.9.1",
|
|
30
|
+
"fastapi>=0.136.0",
|
|
31
|
+
"uvicorn[standard]>=0.49.0",
|
|
32
32
|
"rich>=15.0.0",
|
|
33
|
-
"prompt-toolkit>=3.0.
|
|
34
|
-
"typer>=0.
|
|
33
|
+
"prompt-toolkit>=3.0.0",
|
|
34
|
+
"typer>=0.26.0",
|
|
35
35
|
"pyyaml>=6.0.0",
|
|
36
36
|
]
|
|
37
37
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Configuration document validation, settings loading, and provider resolution."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -22,27 +22,20 @@ from mycode.providers import (
|
|
|
22
22
|
from mycode.utils import as_bool, as_int
|
|
23
23
|
|
|
24
24
|
_DEFAULT_MYCODE_HOME = "~/.mycode"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def resolve_mycode_home() -> Path:
|
|
28
|
-
"""Resolve the mycode home directory (``$MYCODE_HOME`` or ``~/.mycode``)."""
|
|
29
|
-
|
|
30
|
-
raw = os.environ.get("MYCODE_HOME", _DEFAULT_MYCODE_HOME)
|
|
31
|
-
return Path(raw).expanduser().resolve(strict=False)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def resolve_sessions_dir() -> Path:
|
|
35
|
-
"""Resolve the directory used for persisted sessions."""
|
|
36
|
-
|
|
37
|
-
return resolve_mycode_home() / "sessions"
|
|
38
|
-
|
|
39
|
-
|
|
40
25
|
_API_KEY_ENV_REF_RE = re.compile(r"^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$")
|
|
41
|
-
|
|
42
|
-
#
|
|
26
|
+
|
|
27
|
+
# "auto" means "do not send an explicit effort to the provider"; after
|
|
28
|
+
# normalization it is represented as None.
|
|
43
29
|
REASONING_EFFORT_OPTIONS = ("auto", "none", "low", "medium", "high", "xhigh")
|
|
44
30
|
PERMISSION_LEVEL_OPTIONS = ("readonly", "safe", "standard", "yolo")
|
|
45
31
|
PERMISSION_MODE_OPTIONS = ("ask", "deny")
|
|
32
|
+
MODEL_OVERRIDE_KEYS = (
|
|
33
|
+
"context_window",
|
|
34
|
+
"max_output_tokens",
|
|
35
|
+
"supports_reasoning",
|
|
36
|
+
"supports_image_input",
|
|
37
|
+
"supports_pdf_input",
|
|
38
|
+
)
|
|
46
39
|
_EFFORT_AUTO_ALIASES = frozenset({"", "auto", "default"})
|
|
47
40
|
_EFFORT_OFF_ALIASES = frozenset({"off", "disabled"})
|
|
48
41
|
|
|
@@ -103,14 +96,17 @@ class ResolvedProvider:
|
|
|
103
96
|
model_config: ModelConfig | None = None
|
|
104
97
|
|
|
105
98
|
|
|
106
|
-
def
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
99
|
+
def resolve_mycode_home() -> Path:
|
|
100
|
+
"""Resolve the mycode home directory (``$MYCODE_HOME`` or ``~/.mycode``)."""
|
|
101
|
+
|
|
102
|
+
raw = os.environ.get("MYCODE_HOME", _DEFAULT_MYCODE_HOME)
|
|
103
|
+
return Path(raw).expanduser().resolve(strict=False)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def resolve_sessions_dir() -> Path:
|
|
107
|
+
"""Resolve the directory used for persisted sessions."""
|
|
108
|
+
|
|
109
|
+
return resolve_mycode_home() / "sessions"
|
|
114
110
|
|
|
115
111
|
|
|
116
112
|
def resolve_project(cwd: str) -> Path:
|
|
@@ -127,63 +123,34 @@ def project_dirs(cwd: str, project: str | Path | None = None) -> list[Path]:
|
|
|
127
123
|
"""Return directories from project to cwd, inclusive."""
|
|
128
124
|
|
|
129
125
|
cwd_path = Path(cwd).expanduser().resolve(strict=False)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
parent = dirs[-1].parent
|
|
135
|
-
if parent == dirs[-1]:
|
|
136
|
-
break
|
|
137
|
-
dirs.append(parent)
|
|
138
|
-
|
|
139
|
-
return list(reversed(dirs))
|
|
126
|
+
if project is None:
|
|
127
|
+
project_path = resolve_project(cwd)
|
|
128
|
+
else:
|
|
129
|
+
project_path = Path(project).expanduser().resolve(strict=False)
|
|
140
130
|
|
|
131
|
+
ancestors = [cwd_path, *cwd_path.parents]
|
|
132
|
+
if project_path in ancestors:
|
|
133
|
+
ancestors = ancestors[: ancestors.index(project_path) + 1]
|
|
134
|
+
return list(reversed(ancestors))
|
|
141
135
|
|
|
142
|
-
def _normalize_models(value: Any) -> dict[str, ModelConfig]:
|
|
143
|
-
if not isinstance(value, dict):
|
|
144
|
-
return {}
|
|
145
136
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if not isinstance(model, str):
|
|
149
|
-
continue
|
|
150
|
-
model_id = model.strip()
|
|
151
|
-
if not model_id:
|
|
152
|
-
continue
|
|
153
|
-
if isinstance(raw, ModelConfig):
|
|
154
|
-
models[model_id] = raw
|
|
155
|
-
continue
|
|
156
|
-
raw_config = raw if isinstance(raw, dict) else {}
|
|
157
|
-
models[model_id] = ModelConfig(
|
|
158
|
-
context_window=as_int(raw_config.get("context_window")),
|
|
159
|
-
max_output_tokens=as_int(raw_config.get("max_output_tokens")),
|
|
160
|
-
supports_reasoning=as_bool(raw_config.get("supports_reasoning")),
|
|
161
|
-
supports_image_input=as_bool(raw_config.get("supports_image_input")),
|
|
162
|
-
supports_pdf_input=as_bool(raw_config.get("supports_pdf_input")),
|
|
163
|
-
)
|
|
164
|
-
return models
|
|
137
|
+
def _candidate_config_paths(cwd: str, project: str | Path) -> list[Path]:
|
|
138
|
+
"""Return config files in override order: global, then project to cwd."""
|
|
165
139
|
|
|
140
|
+
paths = [resolve_mycode_home() / "config.json"]
|
|
141
|
+
paths.extend(path / ".mycode" / "config.json" for path in project_dirs(cwd, project))
|
|
142
|
+
return paths
|
|
166
143
|
|
|
167
|
-
def _parse_config_api_key(value: Any) -> tuple[str | None, str | None]:
|
|
168
|
-
if not isinstance(value, str):
|
|
169
|
-
return None, None
|
|
170
144
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return None, None
|
|
145
|
+
def is_api_key_env_ref(value: str) -> str | None:
|
|
146
|
+
"""Return the env var name when ``value`` is a ``${NAME}`` reference."""
|
|
174
147
|
|
|
175
|
-
match = _API_KEY_ENV_REF_RE.fullmatch(
|
|
176
|
-
if match
|
|
177
|
-
return None, match.group(1)
|
|
178
|
-
return cleaned, None
|
|
148
|
+
match = _API_KEY_ENV_REF_RE.fullmatch(value.strip())
|
|
149
|
+
return match.group(1) if match else None
|
|
179
150
|
|
|
180
151
|
|
|
181
152
|
def parse_compact_threshold(value: Any) -> float | None:
|
|
182
|
-
"""Parse compact_threshold from config.
|
|
183
|
-
|
|
184
|
-
Returns ``None`` when the key should keep the current/default value, ``0.0``
|
|
185
|
-
when compaction is explicitly disabled, or a valid float in ``[0, 1]``.
|
|
186
|
-
"""
|
|
153
|
+
"""Parse compact_threshold from config."""
|
|
187
154
|
|
|
188
155
|
if value is None:
|
|
189
156
|
return None
|
|
@@ -201,13 +168,7 @@ def parse_compact_threshold(value: Any) -> float | None:
|
|
|
201
168
|
|
|
202
169
|
|
|
203
170
|
def normalize_reasoning_effort(value: Any) -> str | None:
|
|
204
|
-
"""Normalize a reasoning effort setting.
|
|
205
|
-
|
|
206
|
-
Returns `None` for "auto"/"default"/empty — the sentinel for "do not send an
|
|
207
|
-
explicit effort to the provider". Returns "none" for "off"/"disabled" and
|
|
208
|
-
a canonical tier string for recognized levels. Raises `ValueError` for any
|
|
209
|
-
other string (or non-string, non-None value).
|
|
210
|
-
"""
|
|
171
|
+
"""Normalize a reasoning effort setting."""
|
|
211
172
|
|
|
212
173
|
if value is None:
|
|
213
174
|
return None
|
|
@@ -225,6 +186,19 @@ def normalize_reasoning_effort(value: Any) -> str | None:
|
|
|
225
186
|
raise ValueError(f"unsupported reasoning_effort {value!r}; supported: {supported}")
|
|
226
187
|
|
|
227
188
|
|
|
189
|
+
def gate_reasoning_effort(
|
|
190
|
+
effort: str | None,
|
|
191
|
+
*,
|
|
192
|
+
supports_reasoning: bool | None,
|
|
193
|
+
adapter_supports_effort: bool,
|
|
194
|
+
) -> str | None:
|
|
195
|
+
"""Return effort only when the model reasons and the adapter accepts the effort knob."""
|
|
196
|
+
|
|
197
|
+
if effort is not None and supports_reasoning is True and adapter_supports_effort:
|
|
198
|
+
return effort
|
|
199
|
+
return None
|
|
200
|
+
|
|
201
|
+
|
|
228
202
|
def normalize_permission_level(value: Any) -> PermissionLevel:
|
|
229
203
|
if not isinstance(value, str):
|
|
230
204
|
raise ValueError(f"permission level must be a string, got {type(value).__name__}")
|
|
@@ -258,61 +232,153 @@ def parse_permission(value: Any, current: PermissionConfig | None = None) -> Per
|
|
|
258
232
|
raise ValueError(f"permission must be a string or object, got {type(value).__name__}")
|
|
259
233
|
|
|
260
234
|
|
|
261
|
-
def
|
|
262
|
-
|
|
263
|
-
if not env_name:
|
|
264
|
-
return None
|
|
235
|
+
def validate_global_config(data: Any) -> dict[str, Any]:
|
|
236
|
+
"""Validate and clean a global config document before writing it to disk."""
|
|
265
237
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
238
|
+
if data is None:
|
|
239
|
+
return {}
|
|
240
|
+
if not isinstance(data, dict):
|
|
241
|
+
raise ValueError("config must be an object")
|
|
269
242
|
|
|
270
|
-
|
|
271
|
-
raise ValueError(f"missing API key env var {env_name!r} referenced by provider {provider.name!r}")
|
|
272
|
-
return None
|
|
243
|
+
out: dict[str, Any] = {}
|
|
273
244
|
|
|
245
|
+
if data.get("default") is not None:
|
|
246
|
+
default = _validate_default_config(data["default"])
|
|
247
|
+
if default:
|
|
248
|
+
out["default"] = default
|
|
274
249
|
|
|
275
|
-
|
|
276
|
-
|
|
250
|
+
if data.get("permission") is not None:
|
|
251
|
+
out["permission"] = _validate_permission_config(data["permission"])
|
|
277
252
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
253
|
+
raw_providers = data.get("providers")
|
|
254
|
+
if raw_providers is not None:
|
|
255
|
+
if not isinstance(raw_providers, dict):
|
|
256
|
+
raise ValueError("providers must be an object")
|
|
257
|
+
providers: dict[str, dict[str, Any]] = {}
|
|
258
|
+
for name, raw in raw_providers.items():
|
|
259
|
+
if not isinstance(name, str) or not name.strip():
|
|
260
|
+
raise ValueError("provider name must be a non-empty string")
|
|
261
|
+
provider_name = name.strip()
|
|
262
|
+
providers[provider_name] = _validate_provider_config(provider_name, raw)
|
|
263
|
+
if providers:
|
|
264
|
+
out["providers"] = providers
|
|
281
265
|
|
|
266
|
+
return out
|
|
282
267
|
|
|
283
|
-
def _candidate_config_paths(cwd: str, project: str | Path) -> list[Path]:
|
|
284
|
-
paths = [resolve_mycode_home() / "config.json"]
|
|
285
|
-
paths.extend(path / ".mycode" / "config.json" for path in project_dirs(cwd, project))
|
|
286
|
-
return paths
|
|
287
268
|
|
|
269
|
+
def _optional_config_string(raw: dict[str, Any], key: str, label: str) -> str | None:
|
|
270
|
+
if key not in raw:
|
|
271
|
+
return None
|
|
272
|
+
value = raw[key]
|
|
273
|
+
if value is None or value == "":
|
|
274
|
+
return None
|
|
275
|
+
if not isinstance(value, str):
|
|
276
|
+
raise ValueError(f"{label} must be a string")
|
|
277
|
+
return value.strip() or None
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def _validate_default_config(raw: Any) -> dict[str, Any]:
|
|
281
|
+
if not isinstance(raw, dict):
|
|
282
|
+
raise ValueError("default must be an object")
|
|
283
|
+
|
|
284
|
+
out: dict[str, Any] = {}
|
|
285
|
+
for key in ("provider", "model"):
|
|
286
|
+
value = _optional_config_string(raw, key, f"default.{key}")
|
|
287
|
+
if value:
|
|
288
|
+
out[key] = value
|
|
289
|
+
|
|
290
|
+
effort = raw.get("reasoning_effort")
|
|
291
|
+
if effort not in (None, ""):
|
|
292
|
+
normalize_reasoning_effort(effort)
|
|
293
|
+
out["reasoning_effort"] = effort
|
|
294
|
+
|
|
295
|
+
compact_threshold = raw.get("compact_threshold")
|
|
296
|
+
if compact_threshold is False:
|
|
297
|
+
out["compact_threshold"] = False
|
|
298
|
+
elif compact_threshold is not None:
|
|
299
|
+
if isinstance(compact_threshold, bool):
|
|
300
|
+
raise ValueError("default.compact_threshold must be a number in [0, 1] or false")
|
|
301
|
+
parsed = parse_compact_threshold(compact_threshold)
|
|
302
|
+
if parsed is None:
|
|
303
|
+
raise ValueError("default.compact_threshold must be a number in [0, 1] or false")
|
|
304
|
+
out["compact_threshold"] = parsed
|
|
305
|
+
|
|
306
|
+
return out
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def _validate_permission_config(raw: Any) -> PermissionLevel | dict[str, Any]:
|
|
310
|
+
if isinstance(raw, str):
|
|
311
|
+
return normalize_permission_level(raw)
|
|
312
|
+
if not isinstance(raw, dict):
|
|
313
|
+
raise ValueError("permission must be a string or object")
|
|
314
|
+
|
|
315
|
+
out: dict[str, Any] = {}
|
|
316
|
+
if "level" in raw:
|
|
317
|
+
out["level"] = normalize_permission_level(raw.get("level"))
|
|
318
|
+
if "mode" in raw:
|
|
319
|
+
out["mode"] = normalize_permission_mode(raw.get("mode"))
|
|
320
|
+
return out
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def _validate_provider_config(name: str, raw: Any) -> dict[str, Any]:
|
|
324
|
+
if not isinstance(raw, dict):
|
|
325
|
+
raise ValueError(f"provider {name!r} must be an object")
|
|
326
|
+
|
|
327
|
+
out: dict[str, Any] = {}
|
|
328
|
+
raw_type = raw.get("type")
|
|
329
|
+
if raw_type in (None, ""):
|
|
330
|
+
if not is_supported_provider(name):
|
|
331
|
+
raise ValueError(f"provider {name!r} must set 'type'")
|
|
332
|
+
elif not isinstance(raw_type, str):
|
|
333
|
+
raise ValueError(f"provider {name!r}: type must be a string")
|
|
334
|
+
elif not is_supported_provider(raw_type):
|
|
335
|
+
supported = ", ".join(list_supported_providers())
|
|
336
|
+
raise ValueError(f"provider {name!r}: unsupported type {raw_type!r}; supported: {supported}")
|
|
337
|
+
else:
|
|
338
|
+
out["type"] = raw_type
|
|
288
339
|
|
|
289
|
-
|
|
290
|
-
|
|
340
|
+
for key in ("api_key", "base_url"):
|
|
341
|
+
value = _optional_config_string(raw, key, f"provider {name!r}: {key}")
|
|
342
|
+
if value:
|
|
343
|
+
out[key] = value
|
|
291
344
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
elif is_supported_provider(name):
|
|
297
|
-
# Built-in providers can be overridden by name without repeating type.
|
|
298
|
-
provider_type = name
|
|
299
|
-
else:
|
|
300
|
-
raise ValueError(f"provider {name!r} must set 'type'")
|
|
345
|
+
effort = raw.get("reasoning_effort")
|
|
346
|
+
if effort not in (None, ""):
|
|
347
|
+
normalize_reasoning_effort(effort)
|
|
348
|
+
out["reasoning_effort"] = effort
|
|
301
349
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
type=provider_type,
|
|
308
|
-
models=models,
|
|
309
|
-
api_key=raw.get("api_key") or None,
|
|
310
|
-
api_key_env_var=raw.get("api_key_env_var") or None,
|
|
311
|
-
base_url=raw.get("base_url") or None,
|
|
312
|
-
reasoning_effort=normalize_reasoning_effort(raw.get("reasoning_effort")),
|
|
313
|
-
)
|
|
350
|
+
raw_models = raw.get("models")
|
|
351
|
+
if raw_models is not None:
|
|
352
|
+
models = _validate_model_config_entries(name, raw_models)
|
|
353
|
+
if models:
|
|
354
|
+
out["models"] = models
|
|
314
355
|
|
|
315
|
-
return
|
|
356
|
+
return out
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def _validate_model_config_entries(name: str, raw: Any) -> dict[str, dict[str, Any]]:
|
|
360
|
+
# The settings UI sends a model list, while stored config uses a model map.
|
|
361
|
+
if isinstance(raw, list):
|
|
362
|
+
items: list[tuple[Any, Any]] = [(model, None) for model in raw]
|
|
363
|
+
elif isinstance(raw, dict):
|
|
364
|
+
items = list(raw.items())
|
|
365
|
+
else:
|
|
366
|
+
raise ValueError(f"provider {name!r}: models must be a list or object")
|
|
367
|
+
|
|
368
|
+
out: dict[str, dict[str, Any]] = {}
|
|
369
|
+
for model_id, overrides in items:
|
|
370
|
+
if not isinstance(model_id, str) or not model_id.strip():
|
|
371
|
+
raise ValueError(f"provider {name!r}: model id must be a non-empty string")
|
|
372
|
+
key = model_id.strip()
|
|
373
|
+
if overrides is None:
|
|
374
|
+
out[key] = {}
|
|
375
|
+
elif isinstance(overrides, dict):
|
|
376
|
+
out[key] = {
|
|
377
|
+
k: v for k, v in overrides.items() if isinstance(k, str) and k in MODEL_OVERRIDE_KEYS and v is not None
|
|
378
|
+
}
|
|
379
|
+
else:
|
|
380
|
+
raise ValueError(f"provider {name!r}: model {key!r} config must be an object")
|
|
381
|
+
return out
|
|
316
382
|
|
|
317
383
|
|
|
318
384
|
def get_settings(cwd: str | None = None) -> Settings:
|
|
@@ -392,6 +458,100 @@ def get_settings(cwd: str | None = None) -> Settings:
|
|
|
392
458
|
)
|
|
393
459
|
|
|
394
460
|
|
|
461
|
+
def _load_json(path: Path) -> dict[str, Any] | None:
|
|
462
|
+
"""Load a JSON object from a config file; ignore missing or invalid files."""
|
|
463
|
+
|
|
464
|
+
if not path.is_file():
|
|
465
|
+
return None
|
|
466
|
+
try:
|
|
467
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
468
|
+
except Exception:
|
|
469
|
+
return None
|
|
470
|
+
return data if isinstance(data, dict) else None
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def _normalize_models(value: Any) -> dict[str, ModelConfig]:
|
|
474
|
+
"""Convert raw model overrides into runtime model config objects."""
|
|
475
|
+
|
|
476
|
+
if not isinstance(value, dict):
|
|
477
|
+
return {}
|
|
478
|
+
|
|
479
|
+
models: dict[str, ModelConfig] = {}
|
|
480
|
+
for model, raw in value.items():
|
|
481
|
+
if not isinstance(model, str):
|
|
482
|
+
continue
|
|
483
|
+
model_id = model.strip()
|
|
484
|
+
if not model_id:
|
|
485
|
+
continue
|
|
486
|
+
if isinstance(raw, ModelConfig):
|
|
487
|
+
models[model_id] = raw
|
|
488
|
+
continue
|
|
489
|
+
raw_config = raw if isinstance(raw, dict) else {}
|
|
490
|
+
models[model_id] = ModelConfig(
|
|
491
|
+
context_window=as_int(raw_config.get("context_window")),
|
|
492
|
+
max_output_tokens=as_int(raw_config.get("max_output_tokens")),
|
|
493
|
+
supports_reasoning=as_bool(raw_config.get("supports_reasoning")),
|
|
494
|
+
supports_image_input=as_bool(raw_config.get("supports_image_input")),
|
|
495
|
+
supports_pdf_input=as_bool(raw_config.get("supports_pdf_input")),
|
|
496
|
+
)
|
|
497
|
+
return models
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def _parse_config_api_key(value: Any) -> tuple[str | None, str | None]:
|
|
501
|
+
"""Return a literal API key or an env var reference from config."""
|
|
502
|
+
|
|
503
|
+
if not isinstance(value, str):
|
|
504
|
+
return None, None
|
|
505
|
+
|
|
506
|
+
cleaned = value.strip()
|
|
507
|
+
if not cleaned:
|
|
508
|
+
return None, None
|
|
509
|
+
|
|
510
|
+
env_name = is_api_key_env_ref(cleaned)
|
|
511
|
+
if env_name:
|
|
512
|
+
return None, env_name
|
|
513
|
+
return cleaned, None
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def _build_providers(raw_providers: dict[str, dict[str, Any]]) -> dict[str, ProviderConfig]:
|
|
517
|
+
"""Build runtime provider configs after layered config files are merged."""
|
|
518
|
+
|
|
519
|
+
providers: dict[str, ProviderConfig] = {}
|
|
520
|
+
|
|
521
|
+
for name, raw in raw_providers.items():
|
|
522
|
+
raw_type = raw.get("type")
|
|
523
|
+
if raw_type:
|
|
524
|
+
provider_type = str(raw_type)
|
|
525
|
+
elif is_supported_provider(name):
|
|
526
|
+
# Built-in providers can be overridden by name without repeating type.
|
|
527
|
+
provider_type = name
|
|
528
|
+
else:
|
|
529
|
+
raise ValueError(f"provider {name!r} must set 'type'")
|
|
530
|
+
|
|
531
|
+
models = _normalize_models(raw.get("models"))
|
|
532
|
+
if not models:
|
|
533
|
+
models = {model: ModelConfig() for model in provider_default_models(provider_type)}
|
|
534
|
+
providers[name] = ProviderConfig(
|
|
535
|
+
name=name,
|
|
536
|
+
type=provider_type,
|
|
537
|
+
models=models,
|
|
538
|
+
api_key=raw.get("api_key") or None,
|
|
539
|
+
api_key_env_var=raw.get("api_key_env_var") or None,
|
|
540
|
+
base_url=raw.get("base_url") or None,
|
|
541
|
+
reasoning_effort=normalize_reasoning_effort(raw.get("reasoning_effort")),
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
return providers
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def provider_has_api_key(provider: ProviderConfig) -> bool:
|
|
548
|
+
"""Return whether a configured provider can authenticate right now."""
|
|
549
|
+
|
|
550
|
+
if provider.api_key_env_var:
|
|
551
|
+
return bool(_config_api_key_from_env_var(provider))
|
|
552
|
+
return bool(provider.api_key or provider_api_key_from_env(provider.type))
|
|
553
|
+
|
|
554
|
+
|
|
395
555
|
def resolve_provider(
|
|
396
556
|
settings: Settings,
|
|
397
557
|
*,
|
|
@@ -421,7 +581,7 @@ def resolve_provider(
|
|
|
421
581
|
if refs:
|
|
422
582
|
return _resolve_provider_runtime(
|
|
423
583
|
settings,
|
|
424
|
-
selected_name=refs[0]
|
|
584
|
+
selected_name=refs[0],
|
|
425
585
|
model=model,
|
|
426
586
|
api_key=api_key,
|
|
427
587
|
api_base=api_base,
|
|
@@ -445,7 +605,7 @@ def resolve_provider_choices(settings: Settings) -> list[ResolvedProvider]:
|
|
|
445
605
|
"""Return currently selectable providers in stable selection order."""
|
|
446
606
|
|
|
447
607
|
choices: list[ResolvedProvider] = []
|
|
448
|
-
for selected_name
|
|
608
|
+
for selected_name in _available_provider_references(settings):
|
|
449
609
|
try:
|
|
450
610
|
choices.append(_resolve_provider_runtime(settings, selected_name=selected_name))
|
|
451
611
|
except ValueError:
|
|
@@ -453,10 +613,24 @@ def resolve_provider_choices(settings: Settings) -> list[ResolvedProvider]:
|
|
|
453
613
|
return choices
|
|
454
614
|
|
|
455
615
|
|
|
456
|
-
def
|
|
457
|
-
|
|
616
|
+
def _config_api_key_from_env_var(provider: ProviderConfig, *, require: bool = False) -> str | None:
|
|
617
|
+
env_name = provider.api_key_env_var
|
|
618
|
+
if not env_name:
|
|
619
|
+
return None
|
|
620
|
+
|
|
621
|
+
value = (os.environ.get(env_name) or "").strip()
|
|
622
|
+
if value:
|
|
623
|
+
return value
|
|
624
|
+
|
|
625
|
+
if require:
|
|
626
|
+
raise ValueError(f"missing API key env var {env_name!r} referenced by provider {provider.name!r}")
|
|
627
|
+
return None
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
def _available_provider_references(settings: Settings) -> list[str]:
|
|
631
|
+
"""Return usable provider names with the configured default first."""
|
|
458
632
|
|
|
459
|
-
available: list[
|
|
633
|
+
available: list[str] = []
|
|
460
634
|
seen: set[str] = set()
|
|
461
635
|
configured_types_with_credentials: set[str] = set()
|
|
462
636
|
|
|
@@ -478,7 +652,7 @@ def _available_provider_references(settings: Settings) -> list[tuple[str, Provid
|
|
|
478
652
|
return
|
|
479
653
|
|
|
480
654
|
seen.add(cleaned)
|
|
481
|
-
available.append(
|
|
655
|
+
available.append(cleaned)
|
|
482
656
|
|
|
483
657
|
add(settings.default_provider)
|
|
484
658
|
|
|
@@ -541,10 +715,10 @@ def _resolve_provider_runtime(
|
|
|
541
715
|
supports_reasoning=model_config.supports_reasoning if model_config else None,
|
|
542
716
|
)
|
|
543
717
|
adapter = get_provider_adapter(provider_type)
|
|
544
|
-
reasoning_effort = (
|
|
545
|
-
configured_effort
|
|
546
|
-
|
|
547
|
-
|
|
718
|
+
reasoning_effort = gate_reasoning_effort(
|
|
719
|
+
configured_effort,
|
|
720
|
+
supports_reasoning=meta.supports_reasoning,
|
|
721
|
+
adapter_supports_effort=adapter.supports_reasoning_effort,
|
|
548
722
|
)
|
|
549
723
|
|
|
550
724
|
resolved_api_key = api_key
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import os
|
|
7
7
|
import sys
|
|
8
|
+
from contextlib import suppress
|
|
8
9
|
from dataclasses import dataclass, replace
|
|
9
10
|
from typing import Annotated, Any
|
|
10
11
|
from uuid import uuid4
|
|
@@ -250,7 +251,7 @@ def chat(
|
|
|
250
251
|
if setup.resolved_session.mode == "resumed":
|
|
251
252
|
setup.view.print_history_preview(setup.resolved_session.messages)
|
|
252
253
|
|
|
253
|
-
|
|
254
|
+
with suppress(KeyboardInterrupt):
|
|
254
255
|
asyncio.run(
|
|
255
256
|
TerminalChat(
|
|
256
257
|
agent=setup.agent,
|
|
@@ -260,8 +261,6 @@ def chat(
|
|
|
260
261
|
view=setup.view,
|
|
261
262
|
).run()
|
|
262
263
|
)
|
|
263
|
-
except KeyboardInterrupt:
|
|
264
|
-
pass
|
|
265
264
|
|
|
266
265
|
|
|
267
266
|
@app.command()
|
|
@@ -9,7 +9,7 @@ from pathlib import Path
|
|
|
9
9
|
from typing import Literal, NamedTuple
|
|
10
10
|
|
|
11
11
|
from mycode import Hooks, ToolExecutionResult, ToolHookContext
|
|
12
|
-
from mycode.
|
|
12
|
+
from mycode.utils import resolve_path
|
|
13
13
|
from mycode_cli.config import PermissionConfig, PermissionLevel, Settings
|
|
14
14
|
from mycode_cli.system_prompt import discover_skills
|
|
15
15
|
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from mycode.agent import Agent
|
|
6
6
|
from mycode.session import SessionStore
|
|
7
|
-
from mycode.tools import
|
|
7
|
+
from mycode.tools import bash_tool, edit_tool, read_tool, write_tool
|
|
8
8
|
from mycode_cli.config import ResolvedProvider, Settings
|
|
9
9
|
from mycode_cli.permissions import ToolReviewCallback, build_permission_hooks
|
|
10
10
|
from mycode_cli.system_prompt import build_system_prompt
|
|
@@ -46,6 +46,6 @@ def build_agent(
|
|
|
46
46
|
compact_threshold=settings.compact_threshold,
|
|
47
47
|
max_turns=max_turns,
|
|
48
48
|
system=build_system_prompt(cwd, settings),
|
|
49
|
-
tools=
|
|
49
|
+
tools=[read_tool, write_tool, edit_tool, bash_tool],
|
|
50
50
|
hooks=hooks,
|
|
51
51
|
)
|
|
@@ -14,6 +14,7 @@ from mycode_cli.server.routers.settings import router as settings_router
|
|
|
14
14
|
from mycode_cli.server.routers.workspaces import router as workspaces_router
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
|
+
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
|
|
17
18
|
DEV_CORS_ORIGINS = ("http://localhost:5173", "http://127.0.0.1:5173")
|
|
18
19
|
|
|
19
20
|
|
|
@@ -25,7 +26,6 @@ def web_static_path() -> Path:
|
|
|
25
26
|
|
|
26
27
|
def create_app(*, serve_web: bool = True, cors_origins: Sequence[str] = ()) -> FastAPI:
|
|
27
28
|
"""Create the FastAPI app."""
|
|
28
|
-
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
|
|
29
29
|
application = FastAPI(title="mycode")
|
|
30
30
|
|
|
31
31
|
if cors_origins:
|