mycode-cli 0.3.4__py3-none-any.whl → 0.4.0__py3-none-any.whl
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/__init__.py +1 -0
- {mycode/core → mycode_cli}/config.py +36 -87
- {mycode/cli → mycode_cli}/main.py +87 -91
- {mycode/cli → mycode_cli}/runtime.py +56 -87
- {mycode → mycode_cli}/server/app.py +2 -2
- {mycode → mycode_cli}/server/deps.py +2 -2
- mycode_cli/server/routers/__init__.py +7 -0
- {mycode → mycode_cli}/server/routers/chat.py +50 -70
- {mycode → mycode_cli}/server/routers/sessions.py +3 -3
- {mycode → mycode_cli}/server/run_manager.py +7 -13
- {mycode/core → mycode_cli}/system_prompt.py +2 -1
- mycode_cli/tui/__init__.py +1 -0
- {mycode/cli → mycode_cli/tui}/chat.py +35 -43
- {mycode/cli → mycode_cli/tui}/render.py +2 -2
- {mycode_cli-0.3.4.dist-info → mycode_cli-0.4.0.dist-info}/METADATA +35 -13
- mycode_cli-0.4.0.dist-info/RECORD +387 -0
- mycode_cli-0.4.0.dist-info/entry_points.txt +2 -0
- mycode/__init__.py +0 -1
- mycode/cli/__init__.py +0 -1
- mycode/core/__init__.py +0 -30
- mycode/core/agent.py +0 -521
- mycode/core/messages.py +0 -182
- mycode/core/models.py +0 -125
- mycode/core/models_catalog.json +0 -2498
- mycode/core/providers/__init__.py +0 -86
- mycode/core/providers/anthropic_like.py +0 -381
- mycode/core/providers/base.py +0 -387
- mycode/core/providers/gemini.py +0 -316
- mycode/core/providers/openai_chat.py +0 -368
- mycode/core/providers/openai_responses.py +0 -372
- mycode/core/session.py +0 -538
- mycode/core/tools.py +0 -998
- mycode/core/utils.py +0 -38
- mycode/server/routers/__init__.py +0 -7
- mycode_cli-0.3.4.dist-info/RECORD +0 -402
- mycode_cli-0.3.4.dist-info/entry_points.txt +0 -2
- mycode_cli-0.3.4.dist-info/licenses/LICENSE +0 -21
- {mycode → mycode_cli}/server/__init__.py +0 -0
- {mycode → mycode_cli}/server/routers/workspaces.py +0 -0
- {mycode → mycode_cli}/server/schemas.py +0 -0
- {mycode → mycode_cli}/server/static/assets/EditDiff-BCA9aTUr.js +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {mycode → mycode_cli}/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {mycode → mycode_cli}/server/static/assets/abap-BdImnpbu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/actionscript-3-CoDkCxhg.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ada-bCR0ucgS.js +0 -0
- {mycode → mycode_cli}/server/static/assets/andromeeda-C4gqWexZ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/angular-html-DA-rfuFy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/angular-ts-BrjP3tb8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/apache-Pmp26Uib.js +0 -0
- {mycode → mycode_cli}/server/static/assets/apex-D8_7TLub.js +0 -0
- {mycode → mycode_cli}/server/static/assets/apl-CORt7UWP.js +0 -0
- {mycode → mycode_cli}/server/static/assets/applescript-Co6uUVPk.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ara-BRHolxvo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/asciidoc-Ve4PFQV2.js +0 -0
- {mycode → mycode_cli}/server/static/assets/asm-D_Q5rh1f.js +0 -0
- {mycode → mycode_cli}/server/static/assets/astro-HNnZUWAn.js +0 -0
- {mycode → mycode_cli}/server/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/awk-DMzUqQB5.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ayu-dark-DYE7WIF3.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ayu-light-BA47KaF1.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ayu-mirage-32ctXXKs.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ballerina-BFfxhgS-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/bat-BkioyH1T.js +0 -0
- {mycode → mycode_cli}/server/static/assets/beancount-k_qm7-4y.js +0 -0
- {mycode → mycode_cli}/server/static/assets/berry-uYugtg8r.js +0 -0
- {mycode → mycode_cli}/server/static/assets/bibtex-CHM0blh-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/bicep-Bmn6On1c.js +0 -0
- {mycode → mycode_cli}/server/static/assets/bird2-BIv1doCn.js +0 -0
- {mycode → mycode_cli}/server/static/assets/blade-BjGOyj-B.js +0 -0
- {mycode → mycode_cli}/server/static/assets/bsl-BO_Y6i37.js +0 -0
- {mycode → mycode_cli}/server/static/assets/c-BIGW1oBm.js +0 -0
- {mycode → mycode_cli}/server/static/assets/c3-eo99z4R2.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cairo-KRGpt6FW.js +0 -0
- {mycode → mycode_cli}/server/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {mycode → mycode_cli}/server/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {mycode → mycode_cli}/server/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {mycode → mycode_cli}/server/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {mycode → mycode_cli}/server/static/assets/clarity-D53aC0YG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/clojure-P80f7IUj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cmake-D1j8_8rp.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cobol-nBiQ_Alo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/codeowners-Bp6g37R7.js +0 -0
- {mycode → mycode_cli}/server/static/assets/codeql-DsOJ9woJ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/coffee-Ch7k5sss.js +0 -0
- {mycode → mycode_cli}/server/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {mycode → mycode_cli}/server/static/assets/coq-DkFqJrB1.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cpp-CofmeUqb.js +0 -0
- {mycode → mycode_cli}/server/static/assets/crystal-DNxU26gB.js +0 -0
- {mycode → mycode_cli}/server/static/assets/csharp-COcwbKMJ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/css-CLj8gQPS.js +0 -0
- {mycode → mycode_cli}/server/static/assets/csv-fuZLfV_i.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cue-D82EKSYY.js +0 -0
- {mycode → mycode_cli}/server/static/assets/cypher-COkxafJQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/d-85-TOEBH.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dart-bE4Kk8sk.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dax-CEL-wOlO.js +0 -0
- {mycode → mycode_cli}/server/static/assets/desktop-BmXAJ9_W.js +0 -0
- {mycode → mycode_cli}/server/static/assets/diff-D97Zzqfu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/docker-BcOcwvcX.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dotenv-Da5cRb03.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dracula-BzJJZx-M.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {mycode → mycode_cli}/server/static/assets/edge-FbVlp4U3.js +0 -0
- {mycode → mycode_cli}/server/static/assets/elixir-CkH2-t6x.js +0 -0
- {mycode → mycode_cli}/server/static/assets/elm-DbKCFpqz.js +0 -0
- {mycode → mycode_cli}/server/static/assets/emacs-lisp-CXvaQtF9.js +0 -0
- {mycode → mycode_cli}/server/static/assets/erb-BYCe7drp.js +0 -0
- {mycode → mycode_cli}/server/static/assets/erlang-DsQrWhSR.js +0 -0
- {mycode → mycode_cli}/server/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/everforest-light-C8M2exoo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fennel-BYunw83y.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fish-BvzEVeQv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fluent-C4IJs8-o.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/fsharp-CXgrBDvD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gdresource-BOOCDP_w.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gdscript-C5YyOfLZ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gdshader-DkwncUOv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/genie-D0YGMca9.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gherkin-DyxjwDmM.js +0 -0
- {mycode → mycode_cli}/server/static/assets/git-commit-F4YmCXRG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/git-rebase-r7XF79zn.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-dark-DHJKELXO.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-light-DAi9KRSo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {mycode → mycode_cli}/server/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gleam-BspZqrRM.js +0 -0
- {mycode → mycode_cli}/server/static/assets/glimmer-js-ByusRIyA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/glimmer-ts-BfAWNZQY.js +0 -0
- {mycode → mycode_cli}/server/static/assets/glsl-DplSGwfg.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gn-n2N0HUVH.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gnuplot-DdkO51Og.js +0 -0
- {mycode → mycode_cli}/server/static/assets/go-C27-OAKa.js +0 -0
- {mycode → mycode_cli}/server/static/assets/graphql-ChdNCCLP.js +0 -0
- {mycode → mycode_cli}/server/static/assets/groovy-gcz8RCvz.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {mycode → mycode_cli}/server/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hack-i7_Ulhet.js +0 -0
- {mycode → mycode_cli}/server/static/assets/haml-D5jkg6IW.js +0 -0
- {mycode → mycode_cli}/server/static/assets/handlebars-BpdQsYii.js +0 -0
- {mycode → mycode_cli}/server/static/assets/haskell-Df6bDoY_.js +0 -0
- {mycode → mycode_cli}/server/static/assets/haxe-CzTSHFRz.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hcl-BWvSN4gD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hjson-D5-asLiD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hlsl-D3lLCCz7.js +0 -0
- {mycode → mycode_cli}/server/static/assets/horizon-BUw7H-hv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/horizon-bright-CUuTKBJd.js +0 -0
- {mycode → mycode_cli}/server/static/assets/houston-DnULxvSX.js +0 -0
- {mycode → mycode_cli}/server/static/assets/html-derivative-DlHx6ybY.js +0 -0
- {mycode → mycode_cli}/server/static/assets/html-pp8916En.js +0 -0
- {mycode → mycode_cli}/server/static/assets/http-jrhK8wxY.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hurl-irOxFIW8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {mycode → mycode_cli}/server/static/assets/hy-DFXneXwc.js +0 -0
- {mycode → mycode_cli}/server/static/assets/imba-DGztddWO.js +0 -0
- {mycode → mycode_cli}/server/static/assets/index-Bi2yKki-.css +0 -0
- {mycode → mycode_cli}/server/static/assets/index-C8gu4B-1.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ini-BEwlwnbL.js +0 -0
- {mycode → mycode_cli}/server/static/assets/java-CylS5w8V.js +0 -0
- {mycode → mycode_cli}/server/static/assets/javascript-wDzz0qaB.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jinja-f2NsQr07.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jison-wvAkD_A8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/json-Cp-IABpG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/json5-C9tS-k6U.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jsonc-Des-eS-w.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jsonl-DcaNXYhu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jsonnet-DFQXde-d.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jssm-C2t-YnRu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/jsx-g9-lgVsj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/julia-CxzCAyBv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/just-VxiPbLrw.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kdl-DV7GczEv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kotlin-BdnUsdx6.js +0 -0
- {mycode → mycode_cli}/server/static/assets/kusto-wEQ09or8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/laserwave-DUszq2jm.js +0 -0
- {mycode → mycode_cli}/server/static/assets/latex-CWtU0Tv5.js +0 -0
- {mycode → mycode_cli}/server/static/assets/lean-BZvkOJ9d.js +0 -0
- {mycode → mycode_cli}/server/static/assets/less-B1dDrJ26.js +0 -0
- {mycode → mycode_cli}/server/static/assets/light-plus-B7mTdjB0.js +0 -0
- {mycode → mycode_cli}/server/static/assets/liquid-C0sCDyMI.js +0 -0
- {mycode → mycode_cli}/server/static/assets/llvm-DjAJT7YJ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/log-2UxHyX5q.js +0 -0
- {mycode → mycode_cli}/server/static/assets/logo-BtOb2qkB.js +0 -0
- {mycode → mycode_cli}/server/static/assets/lua-BaeVxFsk.js +0 -0
- {mycode → mycode_cli}/server/static/assets/luau-C-HG3fhB.js +0 -0
- {mycode → mycode_cli}/server/static/assets/make-CHLpvVh8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/markdown-Cvjx9yec.js +0 -0
- {mycode → mycode_cli}/server/static/assets/marko-DjSrsDqO.js +0 -0
- {mycode → mycode_cli}/server/static/assets/material-theme-D5KoaKCx.js +0 -0
- {mycode → mycode_cli}/server/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {mycode → mycode_cli}/server/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {mycode → mycode_cli}/server/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {mycode → mycode_cli}/server/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/matlab-D7o27uSR.js +0 -0
- {mycode → mycode_cli}/server/static/assets/mdc-DTYItulj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {mycode → mycode_cli}/server/static/assets/mermaid-mWjccvbQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/min-dark-CafNBF8u.js +0 -0
- {mycode → mycode_cli}/server/static/assets/min-light-CTRr51gU.js +0 -0
- {mycode → mycode_cli}/server/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {mycode → mycode_cli}/server/static/assets/mojo-rZm6bMo-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/monokai-D4h5O-jR.js +0 -0
- {mycode → mycode_cli}/server/static/assets/moonbit-_H4v1dQx.js +0 -0
- {mycode → mycode_cli}/server/static/assets/move-IF9eRakj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/narrat-DRg8JJMk.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nextflow-C-mBbutL.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nextflow-groovy-vE_lwT2v.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nginx-BpAMiNFr.js +0 -0
- {mycode → mycode_cli}/server/static/assets/night-owl-C39BiMTA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/night-owl-light-CMTm3GFP.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nim-BIad80T-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nix-CwoSXNpI.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nord-Ddv68eIx.js +0 -0
- {mycode → mycode_cli}/server/static/assets/nushell-Cz2AlsmD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/objective-c-DXmwc3jG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ocaml-C0hk2d4L.js +0 -0
- {mycode → mycode_cli}/server/static/assets/odin-BBf5iR-q.js +0 -0
- {mycode → mycode_cli}/server/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {mycode → mycode_cli}/server/static/assets/one-light-C3Wv6jpd.js +0 -0
- {mycode → mycode_cli}/server/static/assets/openscad-C4EeE6gA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/pascal-D93ZcfNL.js +0 -0
- {mycode → mycode_cli}/server/static/assets/perl-NvoQZIq0.js +0 -0
- {mycode → mycode_cli}/server/static/assets/php-R6g_5hLQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/pkl-u5AG7uiY.js +0 -0
- {mycode → mycode_cli}/server/static/assets/plastic-3e1v2bzS.js +0 -0
- {mycode → mycode_cli}/server/static/assets/plsql-ChMvpjG-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/po-BTJTHyun.js +0 -0
- {mycode → mycode_cli}/server/static/assets/poimandres-CS3Unz2-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/polar-C0HS_06l.js +0 -0
- {mycode → mycode_cli}/server/static/assets/postcss-CXtECtnM.js +0 -0
- {mycode → mycode_cli}/server/static/assets/powerquery-CEu0bR-o.js +0 -0
- {mycode → mycode_cli}/server/static/assets/powershell-Dpen1YoG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/prisma-Dd19v3D-.js +0 -0
- {mycode → mycode_cli}/server/static/assets/prolog-CbFg5uaA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/proto-C7zT0LnQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/pug-DKIMFp6K.js +0 -0
- {mycode → mycode_cli}/server/static/assets/puppet-BMWR74SV.js +0 -0
- {mycode → mycode_cli}/server/static/assets/purescript-CklMAg4u.js +0 -0
- {mycode → mycode_cli}/server/static/assets/python-B6aJPvgy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/qml-3beO22l8.js +0 -0
- {mycode → mycode_cli}/server/static/assets/qmldir-C8lEn-DE.js +0 -0
- {mycode → mycode_cli}/server/static/assets/qss-IeuSbFQv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/r-Dspwwk_N.js +0 -0
- {mycode → mycode_cli}/server/static/assets/racket-BqYA7rlc.js +0 -0
- {mycode → mycode_cli}/server/static/assets/raku-DXvB9xmW.js +0 -0
- {mycode → mycode_cli}/server/static/assets/razor-BDqjjVU7.js +0 -0
- {mycode → mycode_cli}/server/static/assets/red-bN70gL4F.js +0 -0
- {mycode → mycode_cli}/server/static/assets/reg-C-SQnVFl.js +0 -0
- {mycode → mycode_cli}/server/static/assets/regexp-CDVJQ6XC.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rel-C3B-1QV4.js +0 -0
- {mycode → mycode_cli}/server/static/assets/riscv-BM1_JUlF.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ron-D8l8udqQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rst-CRjBmOyv.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ruby-Wjq7vjNf.js +0 -0
- {mycode → mycode_cli}/server/static/assets/rust-B1yitclQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/sas-cz2c8ADy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/sass-Cj5Yp3dK.js +0 -0
- {mycode → mycode_cli}/server/static/assets/scala-C151Ov-r.js +0 -0
- {mycode → mycode_cli}/server/static/assets/scheme-C98Dy4si.js +0 -0
- {mycode → mycode_cli}/server/static/assets/scss-D5BDwBP9.js +0 -0
- {mycode → mycode_cli}/server/static/assets/sdbl-DVxCFoDh.js +0 -0
- {mycode → mycode_cli}/server/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/shellscript-Yzrsuije.js +0 -0
- {mycode → mycode_cli}/server/static/assets/shellsession-BADoaaVG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/slack-dark-BthQWCQV.js +0 -0
- {mycode → mycode_cli}/server/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {mycode → mycode_cli}/server/static/assets/smalltalk-BERRCDM3.js +0 -0
- {mycode → mycode_cli}/server/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {mycode → mycode_cli}/server/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/solarized-light-L9t79GZl.js +0 -0
- {mycode → mycode_cli}/server/static/assets/solidity-rGO070M0.js +0 -0
- {mycode → mycode_cli}/server/static/assets/soy-8wufbnw4.js +0 -0
- {mycode → mycode_cli}/server/static/assets/sparql-rVzFXLq3.js +0 -0
- {mycode → mycode_cli}/server/static/assets/splunk-BtCnVYZw.js +0 -0
- {mycode → mycode_cli}/server/static/assets/sql-BLtJtn59.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {mycode → mycode_cli}/server/static/assets/stata-BH5u7GGu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/stylus-BEDo0Tqx.js +0 -0
- {mycode → mycode_cli}/server/static/assets/surrealql-Bq5Q-fJD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/svelte-Cy7k_4gC.js +0 -0
- {mycode → mycode_cli}/server/static/assets/swift-D82vCrfD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {mycode → mycode_cli}/server/static/assets/system-verilog-CnnmHF94.js +0 -0
- {mycode → mycode_cli}/server/static/assets/systemd-4A_iFExJ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/talonscript-CkByrt1z.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tasl-QIJgUcNo.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tcl-dwOrl1Do.js +0 -0
- {mycode → mycode_cli}/server/static/assets/templ-DhtptRzy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/terraform-BETggiCN.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tex-idrVyKtj.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tokyo-night-hegEt444.js +0 -0
- {mycode → mycode_cli}/server/static/assets/toml-vGWfd6FD.js +0 -0
- {mycode → mycode_cli}/server/static/assets/ts-tags-DQrlYJgV.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tsv-B_m7g4N7.js +0 -0
- {mycode → mycode_cli}/server/static/assets/tsx-COt5Ahok.js +0 -0
- {mycode → mycode_cli}/server/static/assets/turtle-BsS91CYL.js +0 -0
- {mycode → mycode_cli}/server/static/assets/twig-xg9kU7Mw.js +0 -0
- {mycode → mycode_cli}/server/static/assets/typescript-BPQ3VLAy.js +0 -0
- {mycode → mycode_cli}/server/static/assets/typespec-CAFt9gP4.js +0 -0
- {mycode → mycode_cli}/server/static/assets/typst-DHCkPAjA.js +0 -0
- {mycode → mycode_cli}/server/static/assets/v-BcVCzyr7.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vala-CsfeWuGM.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vb-D17OF-Vu.js +0 -0
- {mycode → mycode_cli}/server/static/assets/verilog-BQ8w6xss.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vesper-DU1UobuO.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {mycode → mycode_cli}/server/static/assets/viml-CJc9bBzg.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vue-D2xRrEX4.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vue-vine-BoDAl6tE.js +0 -0
- {mycode → mycode_cli}/server/static/assets/vyper-CDx5xZoG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wasm-CG6Dc4jp.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wasm-MzD3tlZU.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wenyan-BV7otONQ.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wikitext-BhOHFoWU.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wit-5i3qLPDT.js +0 -0
- {mycode → mycode_cli}/server/static/assets/wolfram-lXgVvXCa.js +0 -0
- {mycode → mycode_cli}/server/static/assets/xml-sdJ4AIDG.js +0 -0
- {mycode → mycode_cli}/server/static/assets/xsl-CtQFsRM5.js +0 -0
- {mycode → mycode_cli}/server/static/assets/yaml-Buea-lGh.js +0 -0
- {mycode → mycode_cli}/server/static/assets/zenscript-DVFEvuxE.js +0 -0
- {mycode → mycode_cli}/server/static/assets/zig-VOosw3JB.js +0 -0
- {mycode → mycode_cli}/server/static/favicon_slashes.svg +0 -0
- {mycode → mycode_cli}/server/static/index.html +0 -0
- {mycode/cli → mycode_cli/tui}/theme.py +0 -0
- {mycode_cli-0.3.4.dist-info → mycode_cli-0.4.0.dist-info}/WHEEL +0 -0
mycode_cli/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""mycode-cli — interactive CLI and FastAPI server for the mycode agent."""
|
|
@@ -13,12 +13,12 @@ import json
|
|
|
13
13
|
import logging
|
|
14
14
|
import os
|
|
15
15
|
import re
|
|
16
|
-
from dataclasses import dataclass, field
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import Any
|
|
19
19
|
|
|
20
|
-
from mycode.
|
|
21
|
-
from mycode.
|
|
20
|
+
from mycode.models import resolve_model_metadata
|
|
21
|
+
from mycode.providers import (
|
|
22
22
|
get_provider_adapter,
|
|
23
23
|
is_supported_provider,
|
|
24
24
|
list_env_discoverable_providers,
|
|
@@ -27,11 +27,15 @@ from mycode.core.providers import (
|
|
|
27
27
|
provider_default_models,
|
|
28
28
|
provider_env_api_key_names,
|
|
29
29
|
)
|
|
30
|
-
from mycode.
|
|
30
|
+
from mycode.session import resolve_mycode_home
|
|
31
|
+
from mycode.utils import as_bool, as_int
|
|
31
32
|
|
|
32
|
-
_DEFAULT_MYCODE_HOME = "~/.mycode"
|
|
33
33
|
_API_KEY_ENV_REF_RE = re.compile(r"^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$")
|
|
34
|
-
|
|
34
|
+
# Full set of user-facing choices. "auto" means "do not send an explicit effort
|
|
35
|
+
# to the provider" and is represented internally as `None` after normalization.
|
|
36
|
+
REASONING_EFFORT_OPTIONS = ("auto", "none", "low", "medium", "high", "xhigh")
|
|
37
|
+
_EFFORT_AUTO_ALIASES = frozenset({"", "auto", "default"})
|
|
38
|
+
_EFFORT_OFF_ALIASES = frozenset({"off", "disabled"})
|
|
35
39
|
|
|
36
40
|
|
|
37
41
|
@dataclass(frozen=True)
|
|
@@ -76,30 +80,8 @@ class ResolvedProvider:
|
|
|
76
80
|
api_key: str | None
|
|
77
81
|
api_base: str | None
|
|
78
82
|
reasoning_effort: str | None
|
|
79
|
-
max_tokens: int = 16_384
|
|
80
|
-
context_window: int | None = 128_000
|
|
81
|
-
supports_reasoning: bool | None = None
|
|
82
|
-
supports_image_input: bool | None = None
|
|
83
|
-
supports_pdf_input: bool | None = None
|
|
84
83
|
provider_name: str | None = None
|
|
85
84
|
|
|
86
|
-
@property
|
|
87
|
-
def provider_type(self) -> str:
|
|
88
|
-
return self.provider
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def resolve_mycode_home() -> Path:
|
|
92
|
-
"""Resolve the mycode home directory."""
|
|
93
|
-
|
|
94
|
-
raw = os.environ.get("MYCODE_HOME", _DEFAULT_MYCODE_HOME)
|
|
95
|
-
return Path(raw).expanduser().resolve(strict=False)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
def resolve_sessions_dir() -> Path:
|
|
99
|
-
"""Resolve the default directory used for persisted sessions."""
|
|
100
|
-
|
|
101
|
-
return resolve_mycode_home() / "sessions"
|
|
102
|
-
|
|
103
85
|
|
|
104
86
|
def find_workspace_root(cwd: str) -> Path:
|
|
105
87
|
"""Resolve the project/workspace root for the current cwd."""
|
|
@@ -183,15 +165,28 @@ def _parse_compact_threshold(value: Any) -> float | None:
|
|
|
183
165
|
|
|
184
166
|
|
|
185
167
|
def normalize_reasoning_effort(value: Any) -> str | None:
|
|
186
|
-
|
|
168
|
+
"""Normalize a reasoning effort setting.
|
|
169
|
+
|
|
170
|
+
Returns `None` for "auto"/"default"/empty — the sentinel for "do not send an
|
|
171
|
+
explicit effort to the provider". Returns "none" for "off"/"disabled" and
|
|
172
|
+
a canonical tier string for recognized levels. Raises `ValueError` for any
|
|
173
|
+
other string (or non-string, non-None value).
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
if value is None:
|
|
187
177
|
return None
|
|
178
|
+
if not isinstance(value, str):
|
|
179
|
+
raise ValueError(f"reasoning_effort must be a string, got {type(value).__name__}")
|
|
188
180
|
|
|
189
181
|
effort = value.strip().lower()
|
|
190
|
-
if effort in
|
|
182
|
+
if effort in _EFFORT_AUTO_ALIASES:
|
|
191
183
|
return None
|
|
192
|
-
if effort in
|
|
184
|
+
if effort in _EFFORT_OFF_ALIASES:
|
|
193
185
|
return "none"
|
|
194
|
-
|
|
186
|
+
if effort in REASONING_EFFORT_OPTIONS:
|
|
187
|
+
return effort
|
|
188
|
+
supported = ", ".join(REASONING_EFFORT_OPTIONS)
|
|
189
|
+
raise ValueError(f"unsupported reasoning_effort {value!r}; supported: {supported}")
|
|
195
190
|
|
|
196
191
|
|
|
197
192
|
def _config_api_key_from_env_var(provider: ProviderConfig, *, require: bool = False) -> str | None:
|
|
@@ -453,43 +448,6 @@ def _resolve_provider_runtime(
|
|
|
453
448
|
resolved_model = defaults[0]
|
|
454
449
|
|
|
455
450
|
resolved_api_base = api_base or (provider_config.base_url if provider_config else None)
|
|
456
|
-
model_metadata = lookup_model_metadata(
|
|
457
|
-
provider_type=provider_type,
|
|
458
|
-
model=resolved_model,
|
|
459
|
-
)
|
|
460
|
-
if provider_config:
|
|
461
|
-
model_config = provider_config.models.get(resolved_model)
|
|
462
|
-
if model_config:
|
|
463
|
-
if model_metadata is None:
|
|
464
|
-
model_metadata = ModelMetadata(
|
|
465
|
-
provider=provider_type,
|
|
466
|
-
model=resolved_model,
|
|
467
|
-
context_window=model_config.context_window,
|
|
468
|
-
max_output_tokens=model_config.max_output_tokens,
|
|
469
|
-
supports_reasoning=model_config.supports_reasoning,
|
|
470
|
-
supports_image_input=model_config.supports_image_input,
|
|
471
|
-
supports_pdf_input=model_config.supports_pdf_input,
|
|
472
|
-
)
|
|
473
|
-
else:
|
|
474
|
-
# Per-field: use the config override when set, keep catalog value otherwise.
|
|
475
|
-
model_metadata = replace(
|
|
476
|
-
model_metadata,
|
|
477
|
-
context_window=model_config.context_window
|
|
478
|
-
if model_config.context_window is not None
|
|
479
|
-
else model_metadata.context_window,
|
|
480
|
-
max_output_tokens=model_config.max_output_tokens
|
|
481
|
-
if model_config.max_output_tokens is not None
|
|
482
|
-
else model_metadata.max_output_tokens,
|
|
483
|
-
supports_reasoning=model_config.supports_reasoning
|
|
484
|
-
if model_config.supports_reasoning is not None
|
|
485
|
-
else model_metadata.supports_reasoning,
|
|
486
|
-
supports_image_input=model_config.supports_image_input
|
|
487
|
-
if model_config.supports_image_input is not None
|
|
488
|
-
else model_metadata.supports_image_input,
|
|
489
|
-
supports_pdf_input=model_config.supports_pdf_input
|
|
490
|
-
if model_config.supports_pdf_input is not None
|
|
491
|
-
else model_metadata.supports_pdf_input,
|
|
492
|
-
)
|
|
493
451
|
|
|
494
452
|
configured_effort = (
|
|
495
453
|
provider_config.reasoning_effort
|
|
@@ -497,22 +455,18 @@ def _resolve_provider_runtime(
|
|
|
497
455
|
else settings.default_reasoning_effort
|
|
498
456
|
)
|
|
499
457
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
458
|
+
# Drop reasoning_effort when the model does not support reasoning. Config
|
|
459
|
+
# overrides win over catalog metadata.
|
|
460
|
+
model_config = provider_config.models.get(resolved_model) if provider_config else None
|
|
461
|
+
meta = resolve_model_metadata(
|
|
462
|
+
provider=provider_type,
|
|
463
|
+
model=resolved_model,
|
|
464
|
+
supports_reasoning=model_config.supports_reasoning if model_config else None,
|
|
465
|
+
)
|
|
507
466
|
adapter = get_provider_adapter(provider_type)
|
|
508
467
|
reasoning_effort = (
|
|
509
468
|
configured_effort
|
|
510
|
-
if
|
|
511
|
-
configured_effort is not None
|
|
512
|
-
and model_metadata is not None
|
|
513
|
-
and supports_reasoning is True
|
|
514
|
-
and adapter.supports_reasoning_effort
|
|
515
|
-
)
|
|
469
|
+
if configured_effort is not None and meta.supports_reasoning is True and adapter.supports_reasoning_effort
|
|
516
470
|
else None
|
|
517
471
|
)
|
|
518
472
|
|
|
@@ -536,11 +490,6 @@ def _resolve_provider_runtime(
|
|
|
536
490
|
api_key=resolved_api_key,
|
|
537
491
|
api_base=resolved_api_base,
|
|
538
492
|
reasoning_effort=reasoning_effort,
|
|
539
|
-
max_tokens=(model_metadata.max_output_tokens if model_metadata else None) or 16_384,
|
|
540
|
-
context_window=(model_metadata.context_window if model_metadata else None) or 128_000,
|
|
541
|
-
supports_reasoning=supports_reasoning,
|
|
542
|
-
supports_image_input=supports_image_input,
|
|
543
|
-
supports_pdf_input=supports_pdf_input,
|
|
544
493
|
)
|
|
545
494
|
|
|
546
495
|
|
|
@@ -5,43 +5,37 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import os
|
|
7
7
|
import sys
|
|
8
|
+
from dataclasses import dataclass
|
|
8
9
|
from typing import Annotated
|
|
9
10
|
|
|
10
11
|
import typer
|
|
11
12
|
|
|
12
|
-
from mycode.
|
|
13
|
-
from mycode.
|
|
14
|
-
from mycode.
|
|
15
|
-
from
|
|
13
|
+
from mycode.agent import Agent
|
|
14
|
+
from mycode.messages import ConversationMessage
|
|
15
|
+
from mycode.session import SessionStore
|
|
16
|
+
from mycode_cli.config import ResolvedProvider, Settings, get_settings, resolve_provider
|
|
16
17
|
|
|
17
|
-
from .
|
|
18
|
-
from .
|
|
19
|
-
from .
|
|
18
|
+
from .runtime import ResolvedSession, build_agent, resolve_session
|
|
19
|
+
from .tui.chat import TerminalChat
|
|
20
|
+
from .tui.render import TerminalView
|
|
20
21
|
|
|
21
22
|
app = typer.Typer(add_completion=False, pretty_exceptions_enable=False)
|
|
22
23
|
session_app = typer.Typer(help="Session management")
|
|
23
24
|
app.add_typer(session_app, name="session")
|
|
24
25
|
|
|
25
26
|
|
|
26
|
-
async def run_noninteractive(
|
|
27
|
-
agent: Agent,
|
|
28
|
-
*,
|
|
29
|
-
store: SessionStore,
|
|
30
|
-
session_id: str,
|
|
31
|
-
message: str,
|
|
32
|
-
) -> int:
|
|
27
|
+
async def run_noninteractive(agent: Agent, message: str) -> int:
|
|
33
28
|
"""Run one message non-interactively and print only the final assistant reply."""
|
|
34
29
|
|
|
35
30
|
latest_assistant: ConversationMessage | None = None
|
|
36
31
|
|
|
37
|
-
async def
|
|
32
|
+
async def track(payload: ConversationMessage) -> None:
|
|
38
33
|
nonlocal latest_assistant
|
|
39
34
|
if payload.get("role") == "assistant":
|
|
40
35
|
latest_assistant = payload
|
|
41
|
-
await append_session_message(store, session_id, payload, agent=agent)
|
|
42
36
|
|
|
43
37
|
error_message = ""
|
|
44
|
-
async for event in agent.achat(message, on_persist=
|
|
38
|
+
async for event in agent.achat(message, on_persist=track):
|
|
45
39
|
if event.type == "error":
|
|
46
40
|
error_message = str(event.data.get("message") or "agent error")
|
|
47
41
|
|
|
@@ -64,31 +58,28 @@ async def run_noninteractive(
|
|
|
64
58
|
return 0
|
|
65
59
|
|
|
66
60
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
61
|
+
@dataclass
|
|
62
|
+
class _BootstrapContext:
|
|
63
|
+
store: SessionStore
|
|
64
|
+
view: TerminalView
|
|
65
|
+
settings: Settings
|
|
66
|
+
resolved_provider: ResolvedProvider
|
|
67
|
+
resolved_session: ResolvedSession
|
|
68
|
+
agent: Agent
|
|
73
69
|
|
|
74
|
-
# -- Commands ----------------------------------------------------------------
|
|
75
70
|
|
|
71
|
+
def _bootstrap(
|
|
72
|
+
*,
|
|
73
|
+
provider: str | None,
|
|
74
|
+
model: str | None,
|
|
75
|
+
session: str | None,
|
|
76
|
+
continue_last: bool,
|
|
77
|
+
max_turns: int | None,
|
|
78
|
+
) -> _BootstrapContext:
|
|
79
|
+
"""Shared setup for the chat and run commands."""
|
|
76
80
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
ctx: typer.Context,
|
|
80
|
-
provider: Annotated[str | None, typer.Option(help="Provider id or configured alias")] = None,
|
|
81
|
-
model: Annotated[str | None, typer.Option(help="Model name (overrides default)")] = None,
|
|
82
|
-
max_turns: Annotated[int | None, typer.Option(min=1, help="Limit agent loop turns")] = None,
|
|
83
|
-
session: Annotated[str | None, typer.Option(help="Resume a specific session id")] = None,
|
|
84
|
-
continue_last: Annotated[bool, typer.Option("--continue", "-c", help="Resume the most recent session")] = False,
|
|
85
|
-
) -> None:
|
|
86
|
-
"""Interactive coding agent."""
|
|
87
|
-
|
|
88
|
-
if ctx.invoked_subcommand is not None:
|
|
89
|
-
return
|
|
90
|
-
|
|
91
|
-
_validate_session_options(session, continue_last)
|
|
81
|
+
if session and continue_last:
|
|
82
|
+
raise typer.BadParameter("--session and --continue are mutually exclusive")
|
|
92
83
|
|
|
93
84
|
cwd = os.path.abspath(os.getcwd())
|
|
94
85
|
store = SessionStore()
|
|
@@ -117,28 +108,65 @@ def chat(
|
|
|
117
108
|
cwd=cwd,
|
|
118
109
|
settings=settings,
|
|
119
110
|
resolved_provider=resolved_provider,
|
|
111
|
+
session_id=resolved_session.session_id,
|
|
112
|
+
messages=resolved_session.messages,
|
|
113
|
+
max_turns=max_turns,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
return _BootstrapContext(
|
|
117
|
+
store=store,
|
|
118
|
+
view=view,
|
|
119
|
+
settings=settings,
|
|
120
|
+
resolved_provider=resolved_provider,
|
|
120
121
|
resolved_session=resolved_session,
|
|
122
|
+
agent=agent,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# -- Commands ----------------------------------------------------------------
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
@app.callback(invoke_without_command=True)
|
|
130
|
+
def chat(
|
|
131
|
+
ctx: typer.Context,
|
|
132
|
+
provider: Annotated[str | None, typer.Option(help="Provider id or configured alias")] = None,
|
|
133
|
+
model: Annotated[str | None, typer.Option(help="Model name (overrides default)")] = None,
|
|
134
|
+
max_turns: Annotated[int | None, typer.Option(min=1, help="Limit agent loop turns")] = None,
|
|
135
|
+
session: Annotated[str | None, typer.Option(help="Resume a specific session id")] = None,
|
|
136
|
+
continue_last: Annotated[bool, typer.Option("--continue", "-c", help="Resume the most recent session")] = False,
|
|
137
|
+
) -> None:
|
|
138
|
+
"""Interactive coding agent."""
|
|
139
|
+
|
|
140
|
+
if ctx.invoked_subcommand is not None:
|
|
141
|
+
return
|
|
142
|
+
|
|
143
|
+
setup = _bootstrap(
|
|
144
|
+
provider=provider,
|
|
145
|
+
model=model,
|
|
146
|
+
session=session,
|
|
147
|
+
continue_last=continue_last,
|
|
121
148
|
max_turns=max_turns,
|
|
122
149
|
)
|
|
123
150
|
|
|
124
|
-
view.print_header(
|
|
125
|
-
provider=resolved_provider.provider,
|
|
126
|
-
model=resolved_provider.model,
|
|
127
|
-
session=resolved_session.session,
|
|
128
|
-
mode=resolved_session.mode,
|
|
129
|
-
message_count=len(resolved_session.messages),
|
|
130
|
-
reasoning_effort=resolved_provider.reasoning_effort,
|
|
151
|
+
setup.view.print_header(
|
|
152
|
+
provider=setup.resolved_provider.provider,
|
|
153
|
+
model=setup.resolved_provider.model,
|
|
154
|
+
session=setup.resolved_session.session,
|
|
155
|
+
mode=setup.resolved_session.mode,
|
|
156
|
+
message_count=len(setup.resolved_session.messages),
|
|
157
|
+
reasoning_effort=setup.resolved_provider.reasoning_effort,
|
|
131
158
|
)
|
|
132
|
-
if resolved_session.mode == "resumed":
|
|
133
|
-
view.print_history_preview(resolved_session.messages)
|
|
159
|
+
if setup.resolved_session.mode == "resumed":
|
|
160
|
+
setup.view.print_history_preview(setup.resolved_session.messages)
|
|
134
161
|
|
|
135
162
|
try:
|
|
136
163
|
asyncio.run(
|
|
137
164
|
TerminalChat(
|
|
138
|
-
agent=agent,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
165
|
+
agent=setup.agent,
|
|
166
|
+
settings=setup.settings,
|
|
167
|
+
store=setup.store,
|
|
168
|
+
session_id=setup.resolved_session.session_id,
|
|
169
|
+
view=setup.view,
|
|
142
170
|
).run()
|
|
143
171
|
)
|
|
144
172
|
except KeyboardInterrupt:
|
|
@@ -156,47 +184,15 @@ def run(
|
|
|
156
184
|
) -> None:
|
|
157
185
|
"""Send one message and exit."""
|
|
158
186
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
settings = get_settings(cwd)
|
|
165
|
-
|
|
166
|
-
try:
|
|
167
|
-
resolved_provider = resolve_provider(settings, provider_name=provider, model=model)
|
|
168
|
-
resolved_session = asyncio.run(
|
|
169
|
-
resolve_session(
|
|
170
|
-
store=store,
|
|
171
|
-
provider=resolved_provider.provider,
|
|
172
|
-
cwd=cwd,
|
|
173
|
-
model=resolved_provider.model,
|
|
174
|
-
api_base=resolved_provider.api_base,
|
|
175
|
-
requested_session_id=session,
|
|
176
|
-
continue_last=continue_last,
|
|
177
|
-
)
|
|
178
|
-
)
|
|
179
|
-
except ValueError as exc:
|
|
180
|
-
view.console.print(f"[red]{exc}[/red]")
|
|
181
|
-
raise SystemExit(1) from exc
|
|
182
|
-
|
|
183
|
-
agent = build_agent(
|
|
184
|
-
store=store,
|
|
185
|
-
cwd=cwd,
|
|
186
|
-
settings=settings,
|
|
187
|
-
resolved_provider=resolved_provider,
|
|
188
|
-
resolved_session=resolved_session,
|
|
187
|
+
setup = _bootstrap(
|
|
188
|
+
provider=provider,
|
|
189
|
+
model=model,
|
|
190
|
+
session=session,
|
|
191
|
+
continue_last=continue_last,
|
|
189
192
|
max_turns=max_turns,
|
|
190
193
|
)
|
|
191
194
|
|
|
192
|
-
code = asyncio.run(
|
|
193
|
-
run_noninteractive(
|
|
194
|
-
agent,
|
|
195
|
-
store=store,
|
|
196
|
-
session_id=resolved_session.session_id,
|
|
197
|
-
message=" ".join(message).strip(),
|
|
198
|
-
)
|
|
199
|
-
)
|
|
195
|
+
code = asyncio.run(run_noninteractive(setup.agent, " ".join(message).strip()))
|
|
200
196
|
raise SystemExit(code)
|
|
201
197
|
|
|
202
198
|
|
|
@@ -214,7 +210,7 @@ def web(
|
|
|
214
210
|
|
|
215
211
|
import uvicorn
|
|
216
212
|
|
|
217
|
-
from
|
|
213
|
+
from mycode_cli.server.app import create_app
|
|
218
214
|
|
|
219
215
|
uvicorn.run(create_app(serve_web=not dev), host=hostname, port=resolved_port)
|
|
220
216
|
|
|
@@ -5,17 +5,17 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
|
-
from mycode.
|
|
9
|
-
from mycode.
|
|
10
|
-
from mycode.core.providers import (
|
|
8
|
+
from mycode.agent import Agent
|
|
9
|
+
from mycode.providers import (
|
|
11
10
|
get_provider_adapter,
|
|
12
11
|
list_env_discoverable_providers,
|
|
13
12
|
provider_api_key_from_env,
|
|
14
13
|
provider_default_models,
|
|
15
14
|
)
|
|
16
|
-
from mycode.
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
from mycode.session import SessionStore
|
|
16
|
+
from mycode.tools import DEFAULT_TOOL_SPECS
|
|
17
|
+
from mycode_cli.config import ModelConfig, ResolvedProvider, Settings, provider_has_api_key
|
|
18
|
+
from mycode_cli.system_prompt import build_system_prompt
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass
|
|
@@ -47,31 +47,45 @@ def build_agent(
|
|
|
47
47
|
cwd: str,
|
|
48
48
|
settings: Settings,
|
|
49
49
|
resolved_provider: ResolvedProvider,
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
session_id: str,
|
|
51
|
+
messages: list[dict[str, Any]] | None = None,
|
|
52
|
+
max_turns: int | None = None,
|
|
53
|
+
reasoning_effort: str | None = None,
|
|
52
54
|
) -> Agent:
|
|
53
|
-
"""Build
|
|
55
|
+
"""Build an agent from the resolved provider, honoring model config overrides."""
|
|
54
56
|
|
|
57
|
+
model_config = _model_config_for(settings, resolved_provider)
|
|
55
58
|
return Agent(
|
|
56
59
|
model=resolved_provider.model,
|
|
57
60
|
provider=resolved_provider.provider,
|
|
58
61
|
cwd=cwd,
|
|
59
|
-
session_dir=store.session_dir(
|
|
60
|
-
session_id=
|
|
62
|
+
session_dir=store.session_dir(session_id),
|
|
63
|
+
session_id=session_id,
|
|
61
64
|
api_key=resolved_provider.api_key,
|
|
62
65
|
api_base=resolved_provider.api_base,
|
|
63
|
-
messages=
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
messages=messages,
|
|
67
|
+
reasoning_effort=reasoning_effort if reasoning_effort is not None else resolved_provider.reasoning_effort,
|
|
68
|
+
max_tokens=model_config.max_output_tokens if model_config else None,
|
|
69
|
+
context_window=model_config.context_window if model_config else None,
|
|
70
|
+
supports_reasoning=model_config.supports_reasoning if model_config else None,
|
|
71
|
+
supports_image_input=model_config.supports_image_input if model_config else None,
|
|
72
|
+
supports_pdf_input=model_config.supports_pdf_input if model_config else None,
|
|
70
73
|
compact_threshold=settings.compact_threshold,
|
|
71
74
|
max_turns=max_turns,
|
|
75
|
+
system=build_system_prompt(cwd, settings),
|
|
76
|
+
tools=DEFAULT_TOOL_SPECS,
|
|
72
77
|
)
|
|
73
78
|
|
|
74
79
|
|
|
80
|
+
def _model_config_for(settings: Settings, resolved: ResolvedProvider) -> ModelConfig | None:
|
|
81
|
+
"""Return the user-configured overrides for the resolved provider+model, if any."""
|
|
82
|
+
|
|
83
|
+
provider_config = settings.providers.get(resolved.provider_name or "")
|
|
84
|
+
if provider_config is None:
|
|
85
|
+
return None
|
|
86
|
+
return provider_config.models.get(resolved.model)
|
|
87
|
+
|
|
88
|
+
|
|
75
89
|
def clone_agent(agent: Agent, *, store: SessionStore, session_id: str, messages: list[dict[str, Any]]) -> Agent:
|
|
76
90
|
"""Keep the current runtime config while swapping session state."""
|
|
77
91
|
|
|
@@ -86,29 +100,14 @@ def clone_agent(agent: Agent, *, store: SessionStore, session_id: str, messages:
|
|
|
86
100
|
messages=messages,
|
|
87
101
|
max_turns=agent.max_turns,
|
|
88
102
|
max_tokens=agent.max_tokens,
|
|
103
|
+
context_window=agent.context_window,
|
|
104
|
+
compact_threshold=agent.compact_threshold,
|
|
89
105
|
reasoning_effort=agent.reasoning_effort,
|
|
106
|
+
supports_reasoning=agent.supports_reasoning,
|
|
90
107
|
supports_image_input=agent.supports_image_input,
|
|
91
108
|
supports_pdf_input=agent.supports_pdf_input,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
async def append_session_message(
|
|
97
|
-
store: SessionStore,
|
|
98
|
-
session_id: str,
|
|
99
|
-
message: dict[str, Any],
|
|
100
|
-
*,
|
|
101
|
-
agent: Agent,
|
|
102
|
-
) -> None:
|
|
103
|
-
"""Persist one message with the current agent runtime metadata."""
|
|
104
|
-
|
|
105
|
-
await store.append_message(
|
|
106
|
-
session_id,
|
|
107
|
-
message,
|
|
108
|
-
provider=agent.provider,
|
|
109
|
-
model=agent.model,
|
|
110
|
-
cwd=agent.cwd,
|
|
111
|
-
api_base=agent.api_base,
|
|
109
|
+
system=agent.system,
|
|
110
|
+
tools=DEFAULT_TOOL_SPECS,
|
|
112
111
|
)
|
|
113
112
|
|
|
114
113
|
|
|
@@ -158,37 +157,15 @@ def get_provider_option(settings: Settings, *, provider: str, api_base: str | No
|
|
|
158
157
|
def list_model_options(settings: Settings, *, provider: str, api_base: str | None, current_model: str) -> list[str]:
|
|
159
158
|
"""Return the selectable model list for the current provider runtime."""
|
|
160
159
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
models = [current_model, *option.models]
|
|
165
|
-
break
|
|
166
|
-
return list(dict.fromkeys(models))
|
|
160
|
+
option = get_provider_option(settings, provider=provider, api_base=api_base)
|
|
161
|
+
models = option.models if option else provider_default_models(provider)
|
|
162
|
+
return list(dict.fromkeys([current_model, *models]))
|
|
167
163
|
|
|
168
164
|
|
|
169
165
|
def supports_reasoning_effort(agent: Agent) -> bool:
|
|
170
166
|
"""Return whether the current agent provider+model supports reasoning effort."""
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
if not adapter.supports_reasoning_effort:
|
|
174
|
-
return False
|
|
175
|
-
option = get_provider_option(agent.settings, provider=agent.provider, api_base=agent.api_base)
|
|
176
|
-
resolved = resolve_provider(
|
|
177
|
-
agent.settings,
|
|
178
|
-
provider_name=option.name if option else agent.provider,
|
|
179
|
-
model=agent.model,
|
|
180
|
-
api_base=agent.api_base,
|
|
181
|
-
)
|
|
182
|
-
return resolved.supports_reasoning is True
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
def update_reasoning_effort(agent: Agent, effort: str | None) -> bool:
|
|
186
|
-
"""Update reasoning effort on the in-memory agent."""
|
|
187
|
-
|
|
188
|
-
if effort == agent.reasoning_effort:
|
|
189
|
-
return False
|
|
190
|
-
agent.reasoning_effort = effort
|
|
191
|
-
return True
|
|
168
|
+
return agent.supports_reasoning is True and get_provider_adapter(agent.provider).supports_reasoning_effort
|
|
192
169
|
|
|
193
170
|
|
|
194
171
|
async def resolve_session(
|
|
@@ -233,31 +210,20 @@ async def resolve_session(
|
|
|
233
210
|
return ResolvedSession(str(session.get("id") or ""), session, [], "new")
|
|
234
211
|
|
|
235
212
|
|
|
236
|
-
|
|
237
|
-
agent
|
|
238
|
-
*,
|
|
239
|
-
provider_name: str | None,
|
|
240
|
-
model: str | None,
|
|
241
|
-
) -> bool:
|
|
242
|
-
"""Update provider-related request settings on the active agent.
|
|
213
|
+
def apply_resolved_provider(agent: Agent, resolved: ResolvedProvider, settings: Settings) -> bool:
|
|
214
|
+
"""Copy runtime settings from a resolved provider onto an active agent.
|
|
243
215
|
|
|
244
|
-
|
|
245
|
-
|
|
216
|
+
Returns whether any field actually changed. Does not touch session state.
|
|
217
|
+
Re-derives model capability fields from metadata when the provider or model
|
|
218
|
+
changes so the agent reports accurate support flags.
|
|
246
219
|
"""
|
|
247
220
|
|
|
248
|
-
settings = get_settings(agent.cwd)
|
|
249
|
-
resolved = resolve_provider(settings, provider_name=provider_name, model=model)
|
|
250
|
-
|
|
251
221
|
runtime_changed = (
|
|
252
222
|
agent.provider != resolved.provider
|
|
253
223
|
or agent.model != resolved.model
|
|
254
224
|
or agent.api_base != resolved.api_base
|
|
255
225
|
or agent.api_key != resolved.api_key
|
|
256
226
|
or agent.reasoning_effort != resolved.reasoning_effort
|
|
257
|
-
or agent.max_tokens != resolved.max_tokens
|
|
258
|
-
or agent.context_window != resolved.context_window
|
|
259
|
-
or agent.supports_image_input != resolved.supports_image_input
|
|
260
|
-
or agent.supports_pdf_input != resolved.supports_pdf_input
|
|
261
227
|
)
|
|
262
228
|
|
|
263
229
|
agent.provider = resolved.provider
|
|
@@ -265,11 +231,14 @@ async def update_agent_runtime(
|
|
|
265
231
|
agent.api_key = resolved.api_key
|
|
266
232
|
agent.api_base = resolved.api_base
|
|
267
233
|
agent.reasoning_effort = resolved.reasoning_effort
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
234
|
+
|
|
235
|
+
if runtime_changed:
|
|
236
|
+
model_config = _model_config_for(settings, resolved)
|
|
237
|
+
agent.refresh_capabilities(
|
|
238
|
+
max_tokens=model_config.max_output_tokens if model_config else None,
|
|
239
|
+
context_window=model_config.context_window if model_config else None,
|
|
240
|
+
supports_reasoning=model_config.supports_reasoning if model_config else None,
|
|
241
|
+
supports_image_input=model_config.supports_image_input if model_config else None,
|
|
242
|
+
supports_pdf_input=model_config.supports_pdf_input if model_config else None,
|
|
243
|
+
)
|
|
275
244
|
return runtime_changed
|
|
@@ -7,8 +7,8 @@ from fastapi import FastAPI
|
|
|
7
7
|
from fastapi.middleware.cors import CORSMiddleware
|
|
8
8
|
from fastapi.staticfiles import StaticFiles
|
|
9
9
|
|
|
10
|
-
from
|
|
11
|
-
from
|
|
10
|
+
from mycode_cli.config import setup_logging
|
|
11
|
+
from mycode_cli.server.routers import chat_router, sessions_router, workspaces_router
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ from typing import Annotated
|
|
|
7
7
|
|
|
8
8
|
from fastapi import Depends
|
|
9
9
|
|
|
10
|
-
from mycode.
|
|
11
|
-
from
|
|
10
|
+
from mycode.session import SessionStore
|
|
11
|
+
from mycode_cli.server.run_manager import RunManager
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
@lru_cache
|