mycode-cli 0.7.3__tar.gz → 0.7.4__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.7.3 → mycode_cli-0.7.4}/.gitignore +2 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/PKG-INFO +2 -2
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/pyproject.toml +2 -2
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/config.py +171 -2
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/app.py +7 -1
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/routers/__init__.py +2 -1
- mycode_cli-0.7.4/src/mycode_cli/server/routers/settings.py +176 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/schemas.py +6 -0
- mycode_cli-0.7.3/src/mycode_cli/server/static/assets/EditDiff-BsrDP4Ta.js → mycode_cli-0.7.4/src/mycode_cli/server/static/assets/EditDiff-DoHgRytD.js +6 -6
- mycode_cli-0.7.4/src/mycode_cli/server/static/assets/index-BmWVeMLl.js +476 -0
- mycode_cli-0.7.4/src/mycode_cli/server/static/assets/index-CEQXD-zy.css +1 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/index.html +5 -5
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/tui/chat.py +40 -8
- mycode_cli-0.7.3/src/mycode_cli/server/static/assets/index-CBAWKqLI.js +0 -476
- mycode_cli-0.7.3/src/mycode_cli/server/static/assets/index-CbtQLsjO.css +0 -1
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/LICENSE +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/README.md +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/hatch_build.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/__init__.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/main.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/permissions.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/runtime.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/__init__.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/deps.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/routers/chat.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/routers/sessions.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/routers/workspaces.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/run_manager.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/abap-BdImnpbu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/actionscript-3-CoDkCxhg.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ada-bCR0ucgS.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/andromeeda-C4gqWexZ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/angular-html-CU67Zn6k.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/angular-ts-BwZT4LLn.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/apache-Pmp26Uib.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/apex-D8_7TLub.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/apl-dKokRX4l.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/applescript-Co6uUVPk.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ara-BRHolxvo.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/asciidoc-Ve4PFQV2.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/asm-D_Q5rh1f.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/astro-CbQHKStN.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/awk-DMzUqQB5.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ayu-dark-DYE7WIF3.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ayu-light-BA47KaF1.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ayu-mirage-32ctXXKs.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ballerina-BFfxhgS-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/bat-BkioyH1T.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/beancount-k_qm7-4y.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/berry-uYugtg8r.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/bibtex-CHM0blh-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/bicep-Bmn6On1c.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/bird2-DPOp833l.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/blade-D4QpJJKB.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/bsl-BO_Y6i37.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/c-BIGW1oBm.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/c3-eo99z4R2.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cairo-KRGpt6FW.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/clarity-D53aC0YG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/clojure-P80f7IUj.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cmake-D1j8_8rp.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cobol-nwyudZeR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/codeowners-Bp6g37R7.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/codeql-DsOJ9woJ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/coffee-Ch7k5sss.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/coq-DkFqJrB1.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cpp-CofmeUqb.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/crystal-tKQVLTB8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/csharp-COcwbKMJ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/css-DPfMkruS.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/csv-fuZLfV_i.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cue-D82EKSYY.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/cypher-COkxafJQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/d-85-TOEBH.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dart-CF10PKvl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dax-CEL-wOlO.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/desktop-BmXAJ9_W.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/diff-D97Zzqfu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/docker-BcOcwvcX.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dotenv-Da5cRb03.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dracula-BzJJZx-M.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/edge-BkV0erSs.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/elixir-CDX3lj18.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/elm-DbKCFpqz.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/emacs-lisp-C9XAeP06.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/erb-B12qg9BL.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/erlang-DsQrWhSR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/everforest-light-C8M2exoo.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fennel-BYunw83y.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fish-BvzEVeQv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fluent-C4IJs8-o.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/fsharp-CXgrBDvD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gdresource-BOOCDP_w.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gdscript-C5YyOfLZ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gdshader-DkwncUOv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/genie-D0YGMca9.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gherkin-DyxjwDmM.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/git-commit-F4YmCXRG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/git-rebase-r7XF79zn.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-dark-DHJKELXO.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-light-DAi9KRSo.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gleam-BspZqrRM.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/glimmer-ts-U6CK756n.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/glsl-DplSGwfg.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gn-n2N0HUVH.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gnuplot-DdkO51Og.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/go-CxLEBnE3.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/graphql-ChdNCCLP.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/groovy-gcz8RCvz.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hack-CaT9iCJl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/haml-B8DHNrY2.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/handlebars-BL8al0AC.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/haskell-Df6bDoY_.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/haxe-CzTSHFRz.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hcl-BWvSN4gD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hjson-D5-asLiD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hlsl-D3lLCCz7.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/horizon-BUw7H-hv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/horizon-bright-Cn-bp-IR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/houston-DnULxvSX.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/html-GMplVEZG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/html-derivative-BFtXZ54Q.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/http-jrhK8wxY.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hurl-irOxFIW8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/hy-DFXneXwc.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/imba-DGztddWO.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ini-BEwlwnbL.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/java-CylS5w8V.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/javascript-wDzz0qaB.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jinja-4LBKfQ-Z.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jison-wvAkD_A8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/json-Cp-IABpG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/json5-C9tS-k6U.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jsonc-Des-eS-w.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jsonl-DcaNXYhu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jsonnet-DFQXde-d.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jssm-C2t-YnRu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/jsx-g9-lgVsj.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/julia-CxzCAyBv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/just-Cw27pwNe.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kdl-DV7GczEv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kotlin-BdnUsdx6.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/kusto-DZf3V79B.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/laserwave-DUszq2jm.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/latex-CWtU0Tv5.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/lean-BZvkOJ9d.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/less-B1dDrJ26.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/light-plus-B7mTdjB0.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/liquid-DYVedYrR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/llvm-DjAJT7YJ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/log-2UxHyX5q.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/logo-BtOb2qkB.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/lua-BaeVxFsk.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/luau-C-HG3fhB.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/make-CHLpvVh8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/markdown-Cvjx9yec.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/marko-CnJfTvn9.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/material-theme-D5KoaKCx.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/matlab-D7o27uSR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/mdc-BMNejdWA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/mermaid-mWjccvbQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/min-dark-CafNBF8u.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/min-light-CTRr51gU.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/mojo-rZm6bMo-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/monokai-D4h5O-jR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/moonbit-_H4v1dQx.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/move-IF9eRakj.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/narrat-DRg8JJMk.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nextflow-Zz6hmt5N.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nextflow-groovy-BeH2EWoN.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nginx-BpAMiNFr.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/night-owl-C39BiMTA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/night-owl-light-CMTm3GFP.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nim-CVrawwO9.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nix-CwoSXNpI.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nord-Ddv68eIx.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/nushell-Cz2AlsmD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/objective-c-DXmwc3jG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ocaml-C0hk2d4L.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/odin-BBf5iR-q.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/one-light-C3Wv6jpd.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/openscad-C4EeE6gA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/pascal-D93ZcfNL.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/perl-C0TMdlhV.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/php-Dhbhpdrm.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/pierre-dark-DF2SEV7i.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/pierre-light-DOlZxES8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/pkl-u5AG7uiY.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/plastic-3e1v2bzS.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/plsql-ChMvpjG-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/po-BTJTHyun.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/poimandres-CS3Unz2-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/polar-C0HS_06l.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/postcss-CXtECtnM.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/powerquery-CEu0bR-o.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/powershell-Dpen1YoG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/prisma-Dd19v3D-.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/prolog-CbFg5uaA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/proto-C7zT0LnQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/pug-CGlum2m_.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/puppet-BMWR74SV.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/purescript-CklMAg4u.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/python-B6aJPvgy.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/qml-3beO22l8.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/qmldir-C8lEn-DE.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/qss-IeuSbFQv.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/r-Dspwwk_N.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/racket-BqYA7rlc.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/raku-DXvB9xmW.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/razor-Uh8Bk_45.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/red-bN70gL4F.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/reg-C-SQnVFl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/regexp-CDVJQ6XC.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rel-C3B-1QV4.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/riscv-BM1_JUlF.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ron-D8l8udqQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rst-BrH8l1NY.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ruby-Dw2BHqvy.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/rust-B1yitclQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/sas-cz2c8ADy.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/sass-Cj5Yp3dK.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/scala-C151Ov-r.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/scheme-C98Dy4si.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/scss-OYdSNvt2.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/sdbl-DVxCFoDh.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/shellscript-Yzrsuije.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/shellsession-BADoaaVG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/slack-dark-BthQWCQV.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/smalltalk-BERRCDM3.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/solarized-light-L9t79GZl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/solidity-rGO070M0.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/soy-Brmx7dQM.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/sparql-rVzFXLq3.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/splunk-BtCnVYZw.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/sql-BLtJtn59.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/stata-BH5u7GGu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/stylus-BEDo0Tqx.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/surrealql-Bq5Q-fJD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/svelte-C_ipcX3V.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/swift-D82vCrfD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/system-verilog-CnnmHF94.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/systemd-4A_iFExJ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/talonscript-CkByrt1z.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tasl-QIJgUcNo.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tcl-dwOrl1Do.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/templ-P3uqSqPl.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/terraform-BETggiCN.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tex-idrVyKtj.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tokyo-night-hegEt444.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/toml-vGWfd6FD.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/ts-tags-zn1MmPIZ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tsv-B_m7g4N7.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/tsx-COt5Ahok.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/turtle-BsS91CYL.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/twig-DNn4PbVi.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/typescript-BPQ3VLAy.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/typespec-BGHnOYBU.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/typst-DHCkPAjA.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/v-BcVCzyr7.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vala-CsfeWuGM.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vb-D17OF-Vu.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/verilog-BQ8w6xss.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vesper-DU1UobuO.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/viml-CJc9bBzg.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vue-DN_0RTcg.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vue-vine-CQOfvN7w.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/vyper-CDx5xZoG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wasm-CG6Dc4jp.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wasm-MzD3tlZU.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wenyan-BV7otONQ.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wikitext-BhOHFoWU.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wit-5i3qLPDT.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/wolfram-lXgVvXCa.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/xml-sdJ4AIDG.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/xsl-CtQFsRM5.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/yaml-Buea-lGh.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/zenscript-DVFEvuxE.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/assets/zig-VOosw3JB.js +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/system_prompt.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/tui/__init__.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/src/mycode_cli/tui/render.py +0 -0
- {mycode_cli-0.7.3 → mycode_cli-0.7.4}/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.7.
|
|
3
|
+
Version: 0.7.4
|
|
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
|
|
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
22
22
|
Classifier: Topic :: Software Development
|
|
23
23
|
Requires-Python: >=3.12
|
|
24
24
|
Requires-Dist: fastapi>=0.115.0
|
|
25
|
-
Requires-Dist: mycode-sdk==0.7.
|
|
25
|
+
Requires-Dist: mycode-sdk==0.7.4
|
|
26
26
|
Requires-Dist: prompt-toolkit>=3.0.52
|
|
27
27
|
Requires-Dist: pyyaml>=6.0.0
|
|
28
28
|
Requires-Dist: rich>=14.2.0
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mycode-cli"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.4"
|
|
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,7 +26,7 @@ classifiers = [
|
|
|
26
26
|
]
|
|
27
27
|
keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
|
|
28
28
|
dependencies = [
|
|
29
|
-
"mycode-sdk==0.7.
|
|
29
|
+
"mycode-sdk==0.7.4",
|
|
30
30
|
"fastapi>=0.115.0",
|
|
31
31
|
"uvicorn[standard]>=0.32.0",
|
|
32
32
|
"rich>=14.2.0",
|
|
@@ -178,7 +178,7 @@ def _parse_config_api_key(value: Any) -> tuple[str | None, str | None]:
|
|
|
178
178
|
return cleaned, None
|
|
179
179
|
|
|
180
180
|
|
|
181
|
-
def
|
|
181
|
+
def parse_compact_threshold(value: Any) -> float | None:
|
|
182
182
|
"""Parse compact_threshold from config.
|
|
183
183
|
|
|
184
184
|
Returns ``None`` when the key should keep the current/default value, ``0.0``
|
|
@@ -371,7 +371,7 @@ def get_settings(cwd: str | None = None) -> Settings:
|
|
|
371
371
|
v = default.get("reasoning_effort")
|
|
372
372
|
default_reasoning_effort = v if isinstance(v, str) else None
|
|
373
373
|
if "compact_threshold" in default:
|
|
374
|
-
parsed_threshold =
|
|
374
|
+
parsed_threshold = parse_compact_threshold(default.get("compact_threshold"))
|
|
375
375
|
if parsed_threshold is not None:
|
|
376
376
|
compact_threshold = parsed_threshold
|
|
377
377
|
|
|
@@ -565,6 +565,175 @@ def _resolve_provider_runtime(
|
|
|
565
565
|
)
|
|
566
566
|
|
|
567
567
|
|
|
568
|
+
def is_api_key_env_ref(value: str) -> str | None:
|
|
569
|
+
"""Return the env var name when ``value`` is a ``${NAME}`` reference."""
|
|
570
|
+
|
|
571
|
+
match = _API_KEY_ENV_REF_RE.fullmatch(value.strip())
|
|
572
|
+
return match.group(1) if match else None
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
_MODEL_OVERRIDE_KEYS = (
|
|
576
|
+
"context_window",
|
|
577
|
+
"max_output_tokens",
|
|
578
|
+
"supports_reasoning",
|
|
579
|
+
"supports_image_input",
|
|
580
|
+
"supports_pdf_input",
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
def _optional_string(raw: dict[str, Any], key: str, label: str) -> str | None:
|
|
585
|
+
"""Read an optional string field. Returns the trimmed value, or ``None`` when
|
|
586
|
+
absent / null / empty so callers can simply skip the key."""
|
|
587
|
+
|
|
588
|
+
if key not in raw:
|
|
589
|
+
return None
|
|
590
|
+
value = raw[key]
|
|
591
|
+
if value is None or value == "":
|
|
592
|
+
return None
|
|
593
|
+
if not isinstance(value, str):
|
|
594
|
+
raise ValueError(f"{label} must be a string")
|
|
595
|
+
return value.strip() or None
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
def _validate_default(raw: Any) -> dict[str, Any]:
|
|
599
|
+
if not isinstance(raw, dict):
|
|
600
|
+
raise ValueError("default must be an object")
|
|
601
|
+
|
|
602
|
+
out: dict[str, Any] = {}
|
|
603
|
+
for key in ("provider", "model"):
|
|
604
|
+
value = _optional_string(raw, key, f"default.{key}")
|
|
605
|
+
if value:
|
|
606
|
+
out[key] = value
|
|
607
|
+
|
|
608
|
+
effort = raw.get("reasoning_effort")
|
|
609
|
+
if effort not in (None, ""):
|
|
610
|
+
normalize_reasoning_effort(effort)
|
|
611
|
+
out["reasoning_effort"] = effort
|
|
612
|
+
|
|
613
|
+
ct = raw.get("compact_threshold")
|
|
614
|
+
if ct is False:
|
|
615
|
+
out["compact_threshold"] = False
|
|
616
|
+
elif ct is not None:
|
|
617
|
+
if isinstance(ct, bool) or not isinstance(ct, int | float) or not 0 <= ct <= 1:
|
|
618
|
+
raise ValueError("default.compact_threshold must be a number in [0, 1] or false")
|
|
619
|
+
out["compact_threshold"] = float(ct)
|
|
620
|
+
|
|
621
|
+
return out
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def _validate_permission(raw: Any) -> Any:
|
|
625
|
+
if isinstance(raw, str):
|
|
626
|
+
return normalize_permission_level(raw)
|
|
627
|
+
if not isinstance(raw, dict):
|
|
628
|
+
raise ValueError("permission must be a string or object")
|
|
629
|
+
|
|
630
|
+
out: dict[str, Any] = {}
|
|
631
|
+
if "level" in raw:
|
|
632
|
+
out["level"] = normalize_permission_level(raw.get("level"))
|
|
633
|
+
if "mode" in raw:
|
|
634
|
+
out["mode"] = normalize_permission_mode(raw.get("mode"))
|
|
635
|
+
return out
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
def _validate_provider(name: str, raw: Any) -> dict[str, Any]:
|
|
639
|
+
if not isinstance(raw, dict):
|
|
640
|
+
raise ValueError(f"provider {name!r} must be an object")
|
|
641
|
+
|
|
642
|
+
out: dict[str, Any] = {}
|
|
643
|
+
|
|
644
|
+
raw_type = raw.get("type")
|
|
645
|
+
if raw_type in (None, ""):
|
|
646
|
+
# Built-in name → type fallback; otherwise the user must spell it out.
|
|
647
|
+
if not is_supported_provider(name):
|
|
648
|
+
raise ValueError(f"provider {name!r} must set 'type'")
|
|
649
|
+
elif not isinstance(raw_type, str):
|
|
650
|
+
raise ValueError(f"provider {name!r}: type must be a string")
|
|
651
|
+
elif not is_supported_provider(raw_type):
|
|
652
|
+
supported = ", ".join(list_supported_providers())
|
|
653
|
+
raise ValueError(f"provider {name!r}: unsupported type {raw_type!r}; supported: {supported}")
|
|
654
|
+
else:
|
|
655
|
+
out["type"] = raw_type
|
|
656
|
+
|
|
657
|
+
for key in ("api_key", "base_url"):
|
|
658
|
+
value = _optional_string(raw, key, f"provider {name!r}: {key}")
|
|
659
|
+
if value:
|
|
660
|
+
out[key] = value
|
|
661
|
+
|
|
662
|
+
effort = raw.get("reasoning_effort")
|
|
663
|
+
if effort not in (None, ""):
|
|
664
|
+
normalize_reasoning_effort(effort)
|
|
665
|
+
out["reasoning_effort"] = effort
|
|
666
|
+
|
|
667
|
+
raw_models = raw.get("models")
|
|
668
|
+
if raw_models is not None:
|
|
669
|
+
models = _validate_models(name, raw_models)
|
|
670
|
+
if models:
|
|
671
|
+
out["models"] = models
|
|
672
|
+
|
|
673
|
+
return out
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
def _validate_models(name: str, raw: Any) -> dict[str, dict[str, Any]]:
|
|
677
|
+
# Both list (ids only) and dict (id → metadata overrides) are accepted; we
|
|
678
|
+
# always normalise to the dict form for storage.
|
|
679
|
+
if isinstance(raw, list):
|
|
680
|
+
items: list[tuple[Any, Any]] = [(m, None) for m in raw]
|
|
681
|
+
elif isinstance(raw, dict):
|
|
682
|
+
items = list(raw.items())
|
|
683
|
+
else:
|
|
684
|
+
raise ValueError(f"provider {name!r}: models must be a list or object")
|
|
685
|
+
|
|
686
|
+
out: dict[str, dict[str, Any]] = {}
|
|
687
|
+
for model_id, overrides in items:
|
|
688
|
+
if not isinstance(model_id, str) or not model_id.strip():
|
|
689
|
+
raise ValueError(f"provider {name!r}: model id must be a non-empty string")
|
|
690
|
+
key = model_id.strip()
|
|
691
|
+
if overrides is None:
|
|
692
|
+
out[key] = {}
|
|
693
|
+
elif isinstance(overrides, dict):
|
|
694
|
+
out[key] = {k: v for k, v in overrides.items() if k in _MODEL_OVERRIDE_KEYS and v is not None}
|
|
695
|
+
else:
|
|
696
|
+
raise ValueError(f"provider {name!r}: model {key!r} config must be an object")
|
|
697
|
+
return out
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
def validate_global_config(data: Any) -> dict[str, Any]:
|
|
701
|
+
"""Validate a raw global config payload. Returns a cleaned dict ready to persist.
|
|
702
|
+
|
|
703
|
+
Empty / null fields are dropped. Raises ``ValueError`` on invalid input.
|
|
704
|
+
"""
|
|
705
|
+
|
|
706
|
+
if data is None:
|
|
707
|
+
return {}
|
|
708
|
+
if not isinstance(data, dict):
|
|
709
|
+
raise ValueError("config must be an object")
|
|
710
|
+
|
|
711
|
+
out: dict[str, Any] = {}
|
|
712
|
+
|
|
713
|
+
if data.get("default") is not None:
|
|
714
|
+
default = _validate_default(data["default"])
|
|
715
|
+
if default:
|
|
716
|
+
out["default"] = default
|
|
717
|
+
|
|
718
|
+
if data.get("permission") is not None:
|
|
719
|
+
out["permission"] = _validate_permission(data["permission"])
|
|
720
|
+
|
|
721
|
+
raw_providers = data.get("providers")
|
|
722
|
+
if raw_providers is not None:
|
|
723
|
+
if not isinstance(raw_providers, dict):
|
|
724
|
+
raise ValueError("providers must be an object")
|
|
725
|
+
providers: dict[str, dict[str, Any]] = {}
|
|
726
|
+
for name, raw in raw_providers.items():
|
|
727
|
+
if not isinstance(name, str) or not name.strip():
|
|
728
|
+
raise ValueError("provider name must be a non-empty string")
|
|
729
|
+
cleaned = name.strip()
|
|
730
|
+
providers[cleaned] = _validate_provider(cleaned, raw)
|
|
731
|
+
if providers:
|
|
732
|
+
out["providers"] = providers
|
|
733
|
+
|
|
734
|
+
return out
|
|
735
|
+
|
|
736
|
+
|
|
568
737
|
def setup_logging() -> None:
|
|
569
738
|
"""Configure default logging."""
|
|
570
739
|
|
|
@@ -8,7 +8,12 @@ from fastapi.middleware.cors import CORSMiddleware
|
|
|
8
8
|
from fastapi.staticfiles import StaticFiles
|
|
9
9
|
|
|
10
10
|
from mycode_cli.config import setup_logging
|
|
11
|
-
from mycode_cli.server.routers import
|
|
11
|
+
from mycode_cli.server.routers import (
|
|
12
|
+
chat_router,
|
|
13
|
+
sessions_router,
|
|
14
|
+
settings_router,
|
|
15
|
+
workspaces_router,
|
|
16
|
+
)
|
|
12
17
|
|
|
13
18
|
logger = logging.getLogger(__name__)
|
|
14
19
|
|
|
@@ -34,6 +39,7 @@ def create_app(*, serve_web: bool = True) -> FastAPI:
|
|
|
34
39
|
# Mount API routers
|
|
35
40
|
application.include_router(chat_router, prefix="/api")
|
|
36
41
|
application.include_router(sessions_router, prefix="/api")
|
|
42
|
+
application.include_router(settings_router, prefix="/api")
|
|
37
43
|
application.include_router(workspaces_router, prefix="/api")
|
|
38
44
|
|
|
39
45
|
if not serve_web:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from mycode_cli.server.routers.chat import router as chat_router
|
|
4
4
|
from mycode_cli.server.routers.sessions import router as sessions_router
|
|
5
|
+
from mycode_cli.server.routers.settings import router as settings_router
|
|
5
6
|
from mycode_cli.server.routers.workspaces import router as workspaces_router
|
|
6
7
|
|
|
7
|
-
__all__ = ["chat_router", "sessions_router", "workspaces_router"]
|
|
8
|
+
__all__ = ["chat_router", "sessions_router", "settings_router", "workspaces_router"]
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""Global config read/write API.
|
|
2
|
+
|
|
3
|
+
Reads and writes ``~/.mycode/config.json`` only. Project-level
|
|
4
|
+
``.mycode/config.json`` files are not modified by this endpoint, and they
|
|
5
|
+
continue to override the global file at runtime.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import copy
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import tempfile
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
from fastapi import APIRouter, HTTPException
|
|
18
|
+
|
|
19
|
+
from mycode.providers import (
|
|
20
|
+
list_env_discoverable_providers,
|
|
21
|
+
list_supported_providers,
|
|
22
|
+
provider_default_models,
|
|
23
|
+
provider_env_api_key_names,
|
|
24
|
+
)
|
|
25
|
+
from mycode_cli.config import (
|
|
26
|
+
PERMISSION_LEVEL_OPTIONS,
|
|
27
|
+
PERMISSION_MODE_OPTIONS,
|
|
28
|
+
REASONING_EFFORT_OPTIONS,
|
|
29
|
+
is_api_key_env_ref,
|
|
30
|
+
resolve_mycode_home,
|
|
31
|
+
validate_global_config,
|
|
32
|
+
)
|
|
33
|
+
from mycode_cli.server.schemas import SettingsRequest
|
|
34
|
+
|
|
35
|
+
router = APIRouter()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _read_raw_config(path: Path) -> dict[str, Any]:
|
|
39
|
+
if not path.is_file():
|
|
40
|
+
return {}
|
|
41
|
+
try:
|
|
42
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
43
|
+
except json.JSONDecodeError as exc:
|
|
44
|
+
raise HTTPException(status_code=500, detail=f"failed to parse {path}: {exc}") from exc
|
|
45
|
+
if not isinstance(data, dict):
|
|
46
|
+
raise HTTPException(status_code=500, detail=f"{path} must contain a JSON object")
|
|
47
|
+
return data
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _present_config(raw: dict[str, Any]) -> dict[str, Any]:
|
|
51
|
+
"""Build the UI-facing view: deepcopy, mask literal secrets, normalise
|
|
52
|
+
``models`` to an ordered list of ids (keeping any per-model overrides
|
|
53
|
+
alongside)."""
|
|
54
|
+
|
|
55
|
+
out = copy.deepcopy(raw)
|
|
56
|
+
providers = out.get("providers")
|
|
57
|
+
if not isinstance(providers, dict):
|
|
58
|
+
return out
|
|
59
|
+
|
|
60
|
+
for entry in providers.values():
|
|
61
|
+
if not isinstance(entry, dict):
|
|
62
|
+
continue
|
|
63
|
+
|
|
64
|
+
api_key = entry.get("api_key")
|
|
65
|
+
if isinstance(api_key, str) and api_key.strip():
|
|
66
|
+
if is_api_key_env_ref(api_key):
|
|
67
|
+
# ${VAR} stays visible — it's not the secret itself.
|
|
68
|
+
entry["api_key_saved"] = False
|
|
69
|
+
else:
|
|
70
|
+
entry["api_key"] = None
|
|
71
|
+
entry["api_key_saved"] = True
|
|
72
|
+
else:
|
|
73
|
+
entry["api_key"] = None
|
|
74
|
+
entry["api_key_saved"] = False
|
|
75
|
+
|
|
76
|
+
models = entry.get("models")
|
|
77
|
+
if isinstance(models, dict):
|
|
78
|
+
entry["models"] = list(models.keys())
|
|
79
|
+
overrides = {k: v for k, v in models.items() if isinstance(v, dict) and v}
|
|
80
|
+
if overrides:
|
|
81
|
+
entry["model_overrides"] = overrides
|
|
82
|
+
|
|
83
|
+
return out
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _env_presence(raw: dict[str, Any]) -> dict[str, bool]:
|
|
87
|
+
"""Booleans for the env vars the UI cares about: every built-in API-key var
|
|
88
|
+
plus any ``${VAR}`` referenced by the saved config."""
|
|
89
|
+
|
|
90
|
+
names: set[str] = set()
|
|
91
|
+
for provider_id in list_env_discoverable_providers():
|
|
92
|
+
names.update(provider_env_api_key_names(provider_id))
|
|
93
|
+
|
|
94
|
+
for entry in (raw.get("providers") or {}).values():
|
|
95
|
+
if isinstance(entry, dict):
|
|
96
|
+
api_key = entry.get("api_key")
|
|
97
|
+
if isinstance(api_key, str):
|
|
98
|
+
ref = is_api_key_env_ref(api_key)
|
|
99
|
+
if ref:
|
|
100
|
+
names.add(ref)
|
|
101
|
+
|
|
102
|
+
return {name: bool((os.environ.get(name) or "").strip()) for name in sorted(names)}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _build_response(path: Path) -> dict[str, Any]:
|
|
106
|
+
raw = _read_raw_config(path)
|
|
107
|
+
return {
|
|
108
|
+
"path": str(path),
|
|
109
|
+
"exists": path.is_file(),
|
|
110
|
+
"config": _present_config(raw),
|
|
111
|
+
"options": {
|
|
112
|
+
"provider_types": list(list_supported_providers()),
|
|
113
|
+
"permission_levels": list(PERMISSION_LEVEL_OPTIONS),
|
|
114
|
+
"permission_modes": list(PERMISSION_MODE_OPTIONS),
|
|
115
|
+
"reasoning_efforts": list(REASONING_EFFORT_OPTIONS),
|
|
116
|
+
},
|
|
117
|
+
"env": _env_presence(raw),
|
|
118
|
+
"provider_type_env_vars": {
|
|
119
|
+
ptype: list(provider_env_api_key_names(ptype))
|
|
120
|
+
for ptype in list_supported_providers()
|
|
121
|
+
if provider_env_api_key_names(ptype)
|
|
122
|
+
},
|
|
123
|
+
"provider_type_default_models": {
|
|
124
|
+
ptype: list(provider_default_models(ptype))
|
|
125
|
+
for ptype in list_supported_providers()
|
|
126
|
+
if provider_default_models(ptype)
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _atomic_write(path: Path, payload: dict[str, Any]) -> None:
|
|
132
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
133
|
+
fd, tmp_name = tempfile.mkstemp(prefix=path.name + ".", dir=str(path.parent))
|
|
134
|
+
try:
|
|
135
|
+
with os.fdopen(fd, "w", encoding="utf-8") as fh:
|
|
136
|
+
json.dump(payload, fh, indent=2, ensure_ascii=False)
|
|
137
|
+
fh.write("\n")
|
|
138
|
+
os.replace(tmp_name, path)
|
|
139
|
+
except Exception:
|
|
140
|
+
try:
|
|
141
|
+
os.unlink(tmp_name)
|
|
142
|
+
except OSError:
|
|
143
|
+
pass
|
|
144
|
+
raise
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@router.get("/settings")
|
|
148
|
+
async def get_settings_endpoint() -> dict[str, Any]:
|
|
149
|
+
return _build_response(resolve_mycode_home() / "config.json")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@router.put("/settings")
|
|
153
|
+
async def put_settings_endpoint(payload: SettingsRequest) -> dict[str, Any]:
|
|
154
|
+
path = resolve_mycode_home() / "config.json"
|
|
155
|
+
existing = _read_raw_config(path)
|
|
156
|
+
incoming = copy.deepcopy(payload.config or {})
|
|
157
|
+
|
|
158
|
+
# Three-state api_key merge: when the UI sends null / omits it, we copy the
|
|
159
|
+
# existing literal forward so secrets survive a save without round-tripping.
|
|
160
|
+
existing_providers = existing.get("providers") or {}
|
|
161
|
+
for name, entry in (incoming.get("providers") or {}).items():
|
|
162
|
+
if not isinstance(entry, dict) or entry.get("api_key") is not None:
|
|
163
|
+
continue
|
|
164
|
+
prior = existing_providers.get(name) if isinstance(existing_providers, dict) else None
|
|
165
|
+
if isinstance(prior, dict) and "api_key" in prior:
|
|
166
|
+
entry["api_key"] = prior["api_key"]
|
|
167
|
+
else:
|
|
168
|
+
entry.pop("api_key", None)
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
cleaned = validate_global_config(incoming)
|
|
172
|
+
except ValueError as exc:
|
|
173
|
+
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
174
|
+
|
|
175
|
+
_atomic_write(path, cleaned)
|
|
176
|
+
return _build_response(path)
|