mycode-cli 0.9.5__tar.gz → 0.11.0__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.9.5 → mycode_cli-0.11.0}/PKG-INFO +2 -2
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/pyproject.toml +2 -2
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/config.py +9 -22
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/main.py +11 -12
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/app.py +0 -3
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/deps.py +3 -3
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/routers/chat.py +105 -12
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/routers/sessions.py +5 -6
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/routers/settings.py +4 -5
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/routers/workspaces.py +71 -11
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/run_manager.py +58 -12
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/schemas.py +23 -0
- mycode_cli-0.9.5/src/mycode_cli/server/static/assets/EditDiff-B98GR8lJ.js → mycode_cli-0.11.0/src/mycode_cli/server/static/assets/EditDiff-LAalWeeU.js +1 -1
- mycode_cli-0.9.5/src/mycode_cli/server/static/assets/engine-compile-Bb84svsL.js → mycode_cli-0.11.0/src/mycode_cli/server/static/assets/engine-compile-cjbCYuu9.js +1 -1
- mycode_cli-0.9.5/src/mycode_cli/server/static/assets/highlighter-D5_Vsnxk.js → mycode_cli-0.11.0/src/mycode_cli/server/static/assets/highlighter-CnUeqpj0.js +1 -1
- mycode_cli-0.11.0/src/mycode_cli/server/static/assets/index-C3Ih75U7.css +1 -0
- mycode_cli-0.11.0/src/mycode_cli/server/static/assets/index-_Mo0CKIt.js +368 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/index.html +2 -2
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/system_prompt.py +54 -25
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/tui/chat.py +88 -57
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/tui/render.py +16 -23
- mycode_cli-0.9.5/src/mycode_cli/server/static/assets/index-BieWlcNo.js +0 -357
- mycode_cli-0.9.5/src/mycode_cli/server/static/assets/index-ozXLgKIx.css +0 -1
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/.gitignore +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/LICENSE +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/README.md +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/hatch_build.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/__init__.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/permissions.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/runtime.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/__init__.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/routers/__init__.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/angular-html-Jkkxos3q.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/angular-ts-Dhh1UKvY.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/apex-CGTLDQj6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/apl-DofiDXc-.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/astro-CkvdhIAJ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/bird2-C2hNVINV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/blade-D__6Z9s9.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/c3-CnJL0r0V.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cobol-By99cTah.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cpp-CSisbjOA.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/crystal-CnoV_bOm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/csharp-Ct8U2NOr.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/css-CA8lF1T0.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dart-DkHntEIa.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/edge-CHwPm-XV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/elixir-CWHDJuHM.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/erb-BT2FSELU.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/glimmer-js-rjrsCEwg.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/glimmer-ts-B6WVWV5o.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/go-BJwz_mda.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hack-WqWnv1tE.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/haml-DYeSPR5E.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/handlebars-Bu1eSG8Z.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/horizon-bright-Br1oVSNq.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/html-DjHL45Qa.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/html-derivative-BU3x0Qsu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jinja-CEztI1Tk.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/julia-CNItCTbb.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/just-jjkdu6mQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/kusto-BUv0MjJC.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/latex-C76IGIMI.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/liquid-C9yyKiYi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/luau-CNKltnaQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/marko-ec6q-ucw.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/mdc-BavjQPUD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nextflow-Bbiyy34d.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nim-DIpKdLL3.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/perl-BV7QKbRD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/php-C0fIbeYq.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/pierre-dark-PhHPzmGe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/pierre-light-DN22GkGi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/pug-BfZ7847f.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/razor-CIstp9EF.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rst-CsTSTjeR.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ruby-B9XnubfT.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/sas-C-6xvSOT.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/scss-DmHWXjTt.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/soy-CQkG5Mdb.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/sql-DVgP7kNR.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/stata-jIc8T1G_.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/svelte-D-pZgLEg.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/templ-O6P4mZUV.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/ts-tags-BHdwdDhd.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/twig-CwE6Fi-8.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/typespec-B88KGewJ.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vesper-D5bVUKB1.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vue-D4DC7ZOC.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vue-vine-DIv93V4i.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/src/mycode_cli/tui/__init__.py +0 -0
- {mycode_cli-0.9.5 → mycode_cli-0.11.0}/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.11.0
|
|
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.139.0
|
|
25
|
-
Requires-Dist: mycode-sdk==0.
|
|
25
|
+
Requires-Dist: mycode-sdk==0.11.0
|
|
26
26
|
Requires-Dist: prompt-toolkit>=3.0.52
|
|
27
27
|
Requires-Dist: pyyaml>=6.0.3
|
|
28
28
|
Requires-Dist: rich>=15.0.0
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mycode-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.11.0"
|
|
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.
|
|
29
|
+
"mycode-sdk==0.11.0",
|
|
30
30
|
"fastapi>=0.139.0",
|
|
31
31
|
"uvicorn[standard]>=0.51.0",
|
|
32
32
|
"rich>=15.0.0",
|
|
@@ -413,7 +413,7 @@ def get_settings(cwd: str | None = None) -> Settings:
|
|
|
413
413
|
if "type" in raw:
|
|
414
414
|
merged["type"] = raw.get("type") or "anthropic"
|
|
415
415
|
if "models" in raw:
|
|
416
|
-
merged["models"] =
|
|
416
|
+
merged["models"] = raw.get("models")
|
|
417
417
|
if "api_key" in raw:
|
|
418
418
|
api_key, api_key_env_var = _parse_config_api_key(raw.get("api_key"))
|
|
419
419
|
merged["api_key"] = api_key
|
|
@@ -465,7 +465,7 @@ def _load_json(path: Path) -> dict[str, Any] | None:
|
|
|
465
465
|
return None
|
|
466
466
|
try:
|
|
467
467
|
data = json.loads(path.read_text(encoding="utf-8"))
|
|
468
|
-
except
|
|
468
|
+
except (OSError, UnicodeError, json.JSONDecodeError):
|
|
469
469
|
return None
|
|
470
470
|
return data if isinstance(data, dict) else None
|
|
471
471
|
|
|
@@ -483,9 +483,6 @@ def _normalize_models(value: Any) -> dict[str, ModelConfig]:
|
|
|
483
483
|
model_id = model.strip()
|
|
484
484
|
if not model_id:
|
|
485
485
|
continue
|
|
486
|
-
if isinstance(raw, ModelConfig):
|
|
487
|
-
models[model_id] = raw
|
|
488
|
-
continue
|
|
489
486
|
raw_config = raw if isinstance(raw, dict) else {}
|
|
490
487
|
models[model_id] = ModelConfig(
|
|
491
488
|
context_window=as_int(raw_config.get("context_window")),
|
|
@@ -548,7 +545,7 @@ def provider_has_api_key(provider: ProviderConfig) -> bool:
|
|
|
548
545
|
"""Return whether a configured provider can authenticate right now."""
|
|
549
546
|
|
|
550
547
|
if provider.api_key_env_var:
|
|
551
|
-
return bool(
|
|
548
|
+
return bool((os.environ.get(provider.api_key_env_var) or "").strip())
|
|
552
549
|
return bool(provider.api_key or provider_api_key_from_env(provider.type))
|
|
553
550
|
|
|
554
551
|
|
|
@@ -613,20 +610,6 @@ def resolve_provider_choices(settings: Settings) -> list[ResolvedProvider]:
|
|
|
613
610
|
return choices
|
|
614
611
|
|
|
615
612
|
|
|
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
613
|
def _available_provider_references(settings: Settings) -> list[str]:
|
|
631
614
|
"""Return usable provider names with the configured default first."""
|
|
632
615
|
|
|
@@ -723,8 +706,12 @@ def _resolve_provider_runtime(
|
|
|
723
706
|
|
|
724
707
|
resolved_api_key = api_key
|
|
725
708
|
if not resolved_api_key and provider_config:
|
|
726
|
-
if provider_config.api_key_env_var:
|
|
727
|
-
resolved_api_key =
|
|
709
|
+
if env_name := provider_config.api_key_env_var:
|
|
710
|
+
resolved_api_key = (os.environ.get(env_name) or "").strip()
|
|
711
|
+
if not resolved_api_key:
|
|
712
|
+
raise ValueError(
|
|
713
|
+
f"missing API key env var {env_name!r} referenced by provider {provider_config.name!r}"
|
|
714
|
+
)
|
|
728
715
|
elif provider_config.api_key:
|
|
729
716
|
resolved_api_key = provider_config.api_key
|
|
730
717
|
if not resolved_api_key:
|
|
@@ -7,7 +7,7 @@ import os
|
|
|
7
7
|
import sys
|
|
8
8
|
from contextlib import suppress
|
|
9
9
|
from dataclasses import dataclass, replace
|
|
10
|
-
from typing import Annotated, Any
|
|
10
|
+
from typing import Annotated, Any, Literal
|
|
11
11
|
from uuid import uuid4
|
|
12
12
|
|
|
13
13
|
import typer
|
|
@@ -44,8 +44,8 @@ class ResolvedSession:
|
|
|
44
44
|
|
|
45
45
|
session_id: str
|
|
46
46
|
session: dict[str, Any]
|
|
47
|
-
messages: list[
|
|
48
|
-
mode:
|
|
47
|
+
messages: list[ConversationMessage]
|
|
48
|
+
mode: Literal["new", "resumed"]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
async def resolve_session(
|
|
@@ -59,26 +59,26 @@ async def resolve_session(
|
|
|
59
59
|
|
|
60
60
|
if requested_session_id:
|
|
61
61
|
data = await store.load_session(requested_session_id)
|
|
62
|
-
if
|
|
62
|
+
if data is None:
|
|
63
63
|
raise ValueError(f"Unknown session: {requested_session_id}")
|
|
64
64
|
return ResolvedSession(
|
|
65
65
|
requested_session_id,
|
|
66
|
-
data
|
|
67
|
-
data
|
|
66
|
+
data["session"],
|
|
67
|
+
data["messages"],
|
|
68
68
|
"resumed",
|
|
69
69
|
)
|
|
70
70
|
|
|
71
71
|
if continue_last:
|
|
72
72
|
latest = await store.latest_session(cwd=cwd)
|
|
73
|
-
if latest
|
|
73
|
+
if latest:
|
|
74
74
|
session_id = str(latest["id"])
|
|
75
75
|
data = await store.load_session(session_id)
|
|
76
|
-
if
|
|
76
|
+
if data is None:
|
|
77
77
|
raise ValueError(f"Unknown session: {session_id}")
|
|
78
78
|
return ResolvedSession(
|
|
79
79
|
session_id,
|
|
80
|
-
data
|
|
81
|
-
data
|
|
80
|
+
data["session"],
|
|
81
|
+
data["messages"],
|
|
82
82
|
"resumed",
|
|
83
83
|
)
|
|
84
84
|
|
|
@@ -225,8 +225,7 @@ def chat(
|
|
|
225
225
|
) -> None:
|
|
226
226
|
"""Interactive coding agent."""
|
|
227
227
|
|
|
228
|
-
|
|
229
|
-
return
|
|
228
|
+
del version # Consumed by the eager --version callback before the body runs.
|
|
230
229
|
|
|
231
230
|
if ctx.invoked_subcommand is not None:
|
|
232
231
|
return
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from functools import
|
|
6
|
+
from functools import cache
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
9
|
from fastapi import Depends, HTTPException
|
|
@@ -22,14 +22,14 @@ def resolve_workspace_cwd(raw: str | None) -> str:
|
|
|
22
22
|
return cwd
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
@
|
|
25
|
+
@cache
|
|
26
26
|
def get_store() -> SessionStore:
|
|
27
27
|
"""Return the shared session store for server requests."""
|
|
28
28
|
|
|
29
29
|
return SessionStore(data_dir=resolve_sessions_dir())
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
@
|
|
32
|
+
@cache
|
|
33
33
|
def get_run_manager() -> RunManager:
|
|
34
34
|
"""Return the shared in-process run manager."""
|
|
35
35
|
|
|
@@ -20,6 +20,7 @@ from mycode.attachments import (
|
|
|
20
20
|
detect_document_mime_type,
|
|
21
21
|
detect_image_mime_type,
|
|
22
22
|
)
|
|
23
|
+
from mycode.compact import has_compactable_history
|
|
23
24
|
from mycode.messages import (
|
|
24
25
|
ConversationMessage,
|
|
25
26
|
build_message,
|
|
@@ -42,27 +43,62 @@ from mycode_cli.config import (
|
|
|
42
43
|
from mycode_cli.permissions import ToolReviewDecision, ToolReviewRequest
|
|
43
44
|
from mycode_cli.runtime import build_agent
|
|
44
45
|
from mycode_cli.server.deps import RunManagerDep, StoreDep, resolve_workspace_cwd
|
|
45
|
-
from mycode_cli.server.run_manager import ActiveRunError
|
|
46
|
+
from mycode_cli.server.run_manager import ActiveRunError
|
|
46
47
|
from mycode_cli.server.schemas import (
|
|
47
48
|
CancelRunResponse,
|
|
48
49
|
ChatRequest,
|
|
49
50
|
ChatResponse,
|
|
51
|
+
CompactRequest,
|
|
52
|
+
CompactResponse,
|
|
50
53
|
DecideRequest,
|
|
51
54
|
RunInfo,
|
|
52
55
|
StatusResponse,
|
|
53
56
|
StreamEvent,
|
|
54
57
|
)
|
|
58
|
+
from mycode_cli.system_prompt import build_skill_snapshot_blocks, discover_slash_skills
|
|
55
59
|
|
|
56
60
|
router = APIRouter()
|
|
57
61
|
|
|
58
62
|
|
|
63
|
+
def _resolve_workspace_attachment_path(rel_path: str, *, cwd: str) -> Path:
|
|
64
|
+
base = Path(resolve_path(".", cwd=cwd))
|
|
65
|
+
path = Path(resolve_path(rel_path, cwd=cwd))
|
|
66
|
+
if base != path and not path.is_relative_to(base):
|
|
67
|
+
raise HTTPException(status_code=400, detail=f"path outside workspace: {rel_path}")
|
|
68
|
+
return path
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _read_workspace_text_attachment(rel_path: str, *, name: str | None, cwd: str) -> list[dict[str, Any]]:
|
|
72
|
+
"""Read a workspace text file selected via the @ menu into a `<file>` block.
|
|
73
|
+
|
|
74
|
+
Re-validates the path at send time: it must resolve inside ``cwd`` (guards
|
|
75
|
+
against a symlink swapped in after selection), be a regular file, and be
|
|
76
|
+
UTF-8 text (image/PDF go through image/document path blocks instead).
|
|
77
|
+
"""
|
|
78
|
+
path = _resolve_workspace_attachment_path(rel_path, cwd=cwd)
|
|
79
|
+
if not path.is_file():
|
|
80
|
+
raise HTTPException(status_code=400, detail=f"text file not found: {rel_path}")
|
|
81
|
+
if detect_image_mime_type(path) or detect_document_mime_type(path):
|
|
82
|
+
raise HTTPException(status_code=400, detail=f"not a text file: {rel_path}")
|
|
83
|
+
try:
|
|
84
|
+
return build_attachment_blocks([Attachment.path(path, name=name or rel_path)], cwd=cwd)
|
|
85
|
+
except ValueError as exc:
|
|
86
|
+
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
87
|
+
|
|
88
|
+
|
|
59
89
|
async def _build_user_message(chat: ChatRequest, cwd: str) -> ConversationMessage:
|
|
60
90
|
if not chat.input:
|
|
61
|
-
|
|
91
|
+
text = str(chat.message or "").strip()
|
|
92
|
+
snapshots = await asyncio.to_thread(build_skill_snapshot_blocks, text, cwd)
|
|
93
|
+
return build_message("user", [*snapshots, text_block(text)])
|
|
62
94
|
|
|
63
95
|
blocks: list[dict[str, Any]] = []
|
|
96
|
+
visible_text: list[str] = []
|
|
64
97
|
for block in chat.input:
|
|
65
98
|
if block.type == "text":
|
|
99
|
+
if block.path:
|
|
100
|
+
blocks.extend(_read_workspace_text_attachment(block.path, name=block.name, cwd=cwd))
|
|
101
|
+
continue
|
|
66
102
|
text = block.text or ""
|
|
67
103
|
if block.is_attachment:
|
|
68
104
|
blocks.extend(
|
|
@@ -72,6 +108,7 @@ async def _build_user_message(chat: ChatRequest, cwd: str) -> ConversationMessag
|
|
|
72
108
|
)
|
|
73
109
|
)
|
|
74
110
|
elif text:
|
|
111
|
+
visible_text.append(text)
|
|
75
112
|
blocks.append(text_block(text))
|
|
76
113
|
continue
|
|
77
114
|
|
|
@@ -87,7 +124,12 @@ async def _build_user_message(chat: ChatRequest, cwd: str) -> ConversationMessag
|
|
|
87
124
|
|
|
88
125
|
# Server-side path: read the bytes and validate the sniffed MIME matches
|
|
89
126
|
# the declared block.type so a request for an "image" can't ship a PDF.
|
|
90
|
-
|
|
127
|
+
rel_path = cast(str, block.path)
|
|
128
|
+
path = (
|
|
129
|
+
_resolve_workspace_attachment_path(rel_path, cwd=cwd)
|
|
130
|
+
if block.is_attachment
|
|
131
|
+
else Path(resolve_path(rel_path, cwd=cwd))
|
|
132
|
+
)
|
|
91
133
|
if not path.is_file():
|
|
92
134
|
raise HTTPException(status_code=400, detail=f"{block.type} file not found: {block.path}")
|
|
93
135
|
detect = detect_image_mime_type if block.type == "image" else detect_document_mime_type
|
|
@@ -99,6 +141,8 @@ async def _build_user_message(chat: ChatRequest, cwd: str) -> ConversationMessag
|
|
|
99
141
|
|
|
100
142
|
if not blocks:
|
|
101
143
|
raise HTTPException(status_code=400, detail="input must include at least one non-empty block")
|
|
144
|
+
snapshots = await asyncio.to_thread(build_skill_snapshot_blocks, "\n".join(visible_text), cwd)
|
|
145
|
+
blocks[:0] = snapshots
|
|
102
146
|
return build_message("user", blocks)
|
|
103
147
|
|
|
104
148
|
|
|
@@ -196,6 +240,15 @@ async def chat(chat: ChatRequest, store: StoreDep, runs: RunManagerDep) -> ChatR
|
|
|
196
240
|
created = await store.create_session(session_id, cwd=cwd)
|
|
197
241
|
session = created["session"]
|
|
198
242
|
|
|
243
|
+
async def review(request: ToolReviewRequest) -> ToolReviewDecision:
|
|
244
|
+
# Bridge before_tool review waits to SSE events on the active run.
|
|
245
|
+
return await runs.request_decision(
|
|
246
|
+
session_id=session_id,
|
|
247
|
+
tool_call_id=request.tool_call_id,
|
|
248
|
+
tool_name=request.tool_name,
|
|
249
|
+
preview=request.preview,
|
|
250
|
+
)
|
|
251
|
+
|
|
199
252
|
agent = await asyncio.to_thread(
|
|
200
253
|
build_agent,
|
|
201
254
|
store=store,
|
|
@@ -204,7 +257,7 @@ async def chat(chat: ChatRequest, store: StoreDep, runs: RunManagerDep) -> ChatR
|
|
|
204
257
|
resolved_provider=resolved,
|
|
205
258
|
session_id=session_id,
|
|
206
259
|
reasoning_effort=reasoning_effort,
|
|
207
|
-
review=
|
|
260
|
+
review=review,
|
|
208
261
|
)
|
|
209
262
|
|
|
210
263
|
try:
|
|
@@ -268,24 +321,63 @@ async def decide_run(
|
|
|
268
321
|
return StatusResponse(status="ok")
|
|
269
322
|
|
|
270
323
|
|
|
271
|
-
|
|
272
|
-
|
|
324
|
+
@router.post("/sessions/{session_id}/compact")
|
|
325
|
+
async def compact_session(
|
|
326
|
+
session_id: Annotated[str, PathParam(min_length=1)],
|
|
327
|
+
body: CompactRequest,
|
|
328
|
+
store: StoreDep,
|
|
329
|
+
runs: RunManagerDep,
|
|
330
|
+
) -> CompactResponse:
|
|
331
|
+
"""Start a compact run: summarize the session and append one compact marker."""
|
|
332
|
+
|
|
333
|
+
async with runs.session_operation(session_id):
|
|
334
|
+
active = await runs.active_run_info(session_id)
|
|
335
|
+
if active:
|
|
336
|
+
raise HTTPException(
|
|
337
|
+
status_code=409,
|
|
338
|
+
detail={"message": "session already has a running task", "run": active},
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
data = await store.load_session(session_id)
|
|
342
|
+
if data is None:
|
|
343
|
+
raise HTTPException(status_code=404, detail="session not found")
|
|
344
|
+
if not has_compactable_history(data["messages"]):
|
|
345
|
+
raise HTTPException(status_code=400, detail="nothing to compact")
|
|
346
|
+
|
|
347
|
+
cwd = str(data["session"]["cwd"])
|
|
348
|
+
settings = await asyncio.to_thread(get_settings, cwd)
|
|
349
|
+
resolved = resolve_provider(settings, provider_name=body.provider, model=body.model)
|
|
273
350
|
|
|
274
|
-
|
|
275
|
-
|
|
351
|
+
agent = await asyncio.to_thread(
|
|
352
|
+
build_agent,
|
|
353
|
+
store=store,
|
|
354
|
+
cwd=cwd,
|
|
355
|
+
settings=settings,
|
|
356
|
+
resolved_provider=resolved,
|
|
276
357
|
session_id=session_id,
|
|
277
|
-
tool_call_id=request.tool_call_id,
|
|
278
|
-
tool_name=request.tool_name,
|
|
279
|
-
preview=request.preview,
|
|
280
358
|
)
|
|
281
359
|
|
|
282
|
-
|
|
360
|
+
try:
|
|
361
|
+
run = await runs.start_compact(
|
|
362
|
+
session_id=session_id,
|
|
363
|
+
base_messages=agent.messages,
|
|
364
|
+
agent=agent,
|
|
365
|
+
)
|
|
366
|
+
except ActiveRunError as exc:
|
|
367
|
+
existing = await runs.get_run(exc.run_id)
|
|
368
|
+
detail: dict[str, Any] = {"message": "session already has a running task"}
|
|
369
|
+
if existing:
|
|
370
|
+
detail["run"] = existing.info()
|
|
371
|
+
raise HTTPException(status_code=409, detail=detail) from exc
|
|
372
|
+
|
|
373
|
+
return CompactResponse(run=RunInfo.model_validate(run))
|
|
283
374
|
|
|
284
375
|
|
|
285
376
|
@router.get("/config")
|
|
286
377
|
async def get_config(cwd: Annotated[str | None, Query()] = None) -> dict[str, Any]:
|
|
287
378
|
resolved_cwd = os.path.abspath(cwd or os.getcwd())
|
|
288
379
|
settings = await asyncio.to_thread(get_settings, resolved_cwd)
|
|
380
|
+
skills = await asyncio.to_thread(discover_slash_skills, resolved_cwd)
|
|
289
381
|
resolved: ResolvedProvider | None = None
|
|
290
382
|
setup_error: dict[str, str] | None = None
|
|
291
383
|
try:
|
|
@@ -360,5 +452,6 @@ async def get_config(cwd: Annotated[str | None, Query()] = None) -> dict[str, An
|
|
|
360
452
|
"cwd_exists": os.path.isdir(resolved_cwd),
|
|
361
453
|
"project": settings.project,
|
|
362
454
|
"config_paths": settings.config_paths,
|
|
455
|
+
"skills": [{"name": skill.name, "description": skill.description} for skill in skills],
|
|
363
456
|
"setup_error": setup_error,
|
|
364
457
|
}
|
|
@@ -45,7 +45,7 @@ async def list_sessions(
|
|
|
45
45
|
) -> dict[str, Any]:
|
|
46
46
|
sessions = await store.list_sessions(cwd=cwd)
|
|
47
47
|
for session in sessions:
|
|
48
|
-
session_id = str(session
|
|
48
|
+
session_id = str(session["id"])
|
|
49
49
|
session["is_running"] = await runs.has_active_run(session_id)
|
|
50
50
|
return {"sessions": sessions}
|
|
51
51
|
|
|
@@ -57,22 +57,21 @@ async def load_session(
|
|
|
57
57
|
"""Load a session, overlaying any active in-memory run state."""
|
|
58
58
|
|
|
59
59
|
data = await store.load_session(session_id)
|
|
60
|
-
session = data.get("session") if data else None
|
|
61
60
|
active = await runs.snapshot_session(session_id)
|
|
62
61
|
if active:
|
|
63
62
|
return {
|
|
64
|
-
"session": session,
|
|
63
|
+
"session": data["session"] if data else None,
|
|
65
64
|
"messages": _redact_document_data(active["messages"]),
|
|
66
65
|
"active_run": active["run"],
|
|
67
66
|
"pending_events": active["pending_events"],
|
|
68
67
|
}
|
|
69
68
|
|
|
70
|
-
if
|
|
69
|
+
if data is None:
|
|
71
70
|
return {"session": None, "messages": [], "active_run": None, "pending_events": []}
|
|
72
71
|
|
|
73
72
|
return {
|
|
74
|
-
"session": session,
|
|
75
|
-
"messages": _redact_document_data(data
|
|
73
|
+
"session": data["session"],
|
|
74
|
+
"messages": _redact_document_data(data["messages"]),
|
|
76
75
|
"active_run": None,
|
|
77
76
|
"pending_events": [],
|
|
78
77
|
}
|
|
@@ -105,12 +105,13 @@ def _env_presence(raw: dict[str, Any]) -> dict[str, bool]:
|
|
|
105
105
|
|
|
106
106
|
def _build_response(path: Path) -> dict[str, Any]:
|
|
107
107
|
raw = _read_raw_config(path)
|
|
108
|
+
provider_types = list_supported_providers()
|
|
108
109
|
return {
|
|
109
110
|
"path": str(path),
|
|
110
111
|
"exists": path.is_file(),
|
|
111
112
|
"config": _present_config(raw),
|
|
112
113
|
"options": {
|
|
113
|
-
"provider_types":
|
|
114
|
+
"provider_types": provider_types,
|
|
114
115
|
"permission_levels": list(PERMISSION_LEVEL_OPTIONS),
|
|
115
116
|
"permission_modes": list(PERMISSION_MODE_OPTIONS),
|
|
116
117
|
"reasoning_efforts": list(REASONING_EFFORT_OPTIONS),
|
|
@@ -118,13 +119,11 @@ def _build_response(path: Path) -> dict[str, Any]:
|
|
|
118
119
|
"env": _env_presence(raw),
|
|
119
120
|
"provider_type_env_vars": {
|
|
120
121
|
ptype: list(provider_env_api_key_names(ptype))
|
|
121
|
-
for ptype in
|
|
122
|
+
for ptype in provider_types
|
|
122
123
|
if provider_env_api_key_names(ptype)
|
|
123
124
|
},
|
|
124
125
|
"provider_type_default_models": {
|
|
125
|
-
ptype: list(provider_default_models(ptype))
|
|
126
|
-
for ptype in list_supported_providers()
|
|
127
|
-
if provider_default_models(ptype)
|
|
126
|
+
ptype: list(provider_default_models(ptype)) for ptype in provider_types if provider_default_models(ptype)
|
|
128
127
|
},
|
|
129
128
|
}
|
|
130
129
|
|
|
@@ -6,8 +6,13 @@ from typing import Annotated
|
|
|
6
6
|
|
|
7
7
|
from fastapi import APIRouter, Query
|
|
8
8
|
|
|
9
|
+
from mycode.attachments import detect_document_mime_type, detect_image_mime_type
|
|
10
|
+
|
|
9
11
|
router = APIRouter(prefix="/workspaces", tags=["workspaces"])
|
|
10
12
|
|
|
13
|
+
# Cap on entries returned by /files so a huge directory can't flood the client.
|
|
14
|
+
_FILE_LIST_LIMIT = 100
|
|
15
|
+
|
|
11
16
|
|
|
12
17
|
def _parse_workspace_roots() -> list[Path]:
|
|
13
18
|
"""Parse allowed workspace roots from environment variables."""
|
|
@@ -43,22 +48,14 @@ def browse_workspaces(
|
|
|
43
48
|
path: Annotated[str | None, Query()] = None,
|
|
44
49
|
) -> dict[str, object]:
|
|
45
50
|
"""Browse directories within a workspace root."""
|
|
46
|
-
root_path =
|
|
47
|
-
|
|
48
|
-
for allowed_root in _parse_workspace_roots():
|
|
49
|
-
if requested_root == allowed_root:
|
|
50
|
-
root_path = allowed_root
|
|
51
|
-
break
|
|
52
|
-
|
|
53
|
-
if not root_path:
|
|
51
|
+
root_path = Path(root).expanduser().resolve(strict=False)
|
|
52
|
+
if root_path not in _parse_workspace_roots():
|
|
54
53
|
return {"root": root, "path": "", "current": "", "entries": [], "error": "Invalid root"}
|
|
55
54
|
|
|
56
55
|
rel_path = Path(path) if path else Path()
|
|
57
56
|
target = (root_path / rel_path).resolve(strict=False)
|
|
58
57
|
|
|
59
|
-
|
|
60
|
-
target.relative_to(root_path)
|
|
61
|
-
except ValueError:
|
|
58
|
+
if not target.is_relative_to(root_path):
|
|
62
59
|
return {
|
|
63
60
|
"root": str(root_path),
|
|
64
61
|
"path": "",
|
|
@@ -95,3 +92,66 @@ def get_cwd() -> dict[str, object]:
|
|
|
95
92
|
"""Get current working directory."""
|
|
96
93
|
cwd = os.getcwd()
|
|
97
94
|
return {"cwd": cwd, "exists": Path(cwd).exists()}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _classify_entry(path: Path) -> str:
|
|
98
|
+
"""Coarse attachment kind by magic bytes / extension for the @ menu."""
|
|
99
|
+
if detect_image_mime_type(path):
|
|
100
|
+
return "image"
|
|
101
|
+
if detect_document_mime_type(path):
|
|
102
|
+
return "document"
|
|
103
|
+
return "text"
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@router.get("/files")
|
|
107
|
+
def list_workspace_files(
|
|
108
|
+
cwd: Annotated[str, Query(min_length=1)],
|
|
109
|
+
dir: Annotated[str, Query()] = "",
|
|
110
|
+
prefix: Annotated[str, Query()] = "",
|
|
111
|
+
) -> dict[str, object]:
|
|
112
|
+
"""List files and directories under ``cwd/dir`` for @ attachment completion.
|
|
113
|
+
|
|
114
|
+
Directories first, then files, both sorted by name. Dotfiles are included
|
|
115
|
+
(`.env`, `.github` matter when coding). Entries are filtered by ``prefix``
|
|
116
|
+
on the server, then capped at 100 with a ``truncated`` flag.
|
|
117
|
+
"""
|
|
118
|
+
base = Path(cwd).expanduser().resolve(strict=False)
|
|
119
|
+
if not base.is_dir():
|
|
120
|
+
return {"entries": [], "truncated": False, "error": "cwd does not exist"}
|
|
121
|
+
|
|
122
|
+
target = (base / dir).resolve(strict=False)
|
|
123
|
+
# Reject traversal outside cwd after resolving symlinks.
|
|
124
|
+
if target != base and not target.is_relative_to(base):
|
|
125
|
+
return {"entries": [], "truncated": False, "error": "path outside workspace"}
|
|
126
|
+
if not target.is_dir():
|
|
127
|
+
return {"entries": [], "truncated": False, "error": "not a directory"}
|
|
128
|
+
|
|
129
|
+
matches: list[tuple[Path, bool]] = []
|
|
130
|
+
try:
|
|
131
|
+
for entry in target.iterdir():
|
|
132
|
+
if prefix and not entry.name.startswith(prefix):
|
|
133
|
+
continue
|
|
134
|
+
try:
|
|
135
|
+
resolved = entry.resolve()
|
|
136
|
+
if resolved != base and not resolved.is_relative_to(base):
|
|
137
|
+
continue
|
|
138
|
+
is_dir = entry.is_dir()
|
|
139
|
+
except OSError:
|
|
140
|
+
continue
|
|
141
|
+
matches.append((entry, is_dir))
|
|
142
|
+
except OSError as exc:
|
|
143
|
+
return {"entries": [], "truncated": False, "error": str(exc)}
|
|
144
|
+
|
|
145
|
+
matches.sort(key=lambda item: (not item[1], item[0].name.lower()))
|
|
146
|
+
truncated = len(matches) > _FILE_LIST_LIMIT
|
|
147
|
+
entries = []
|
|
148
|
+
for entry, is_dir in matches[:_FILE_LIST_LIMIT]:
|
|
149
|
+
rel = entry.relative_to(base).as_posix()
|
|
150
|
+
entries.append(
|
|
151
|
+
{
|
|
152
|
+
"name": entry.name,
|
|
153
|
+
"path": f"{rel}/" if is_dir else rel,
|
|
154
|
+
"kind": "directory" if is_dir else _classify_entry(entry),
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
return {"entries": entries, "truncated": truncated, "error": ""}
|