mycode-cli 0.1.1__tar.gz → 0.1.2__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.1.1 → mycode_cli-0.1.2}/.pre-commit-config.yaml +1 -1
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/AGENTS.md +1 -2
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/PKG-INFO +1 -1
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/render.py +88 -46
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/agent.py +10 -14
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/config.py +23 -40
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/models.py +10 -31
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/openai_chat.py +1 -1
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/openai_responses.py +1 -1
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/session.py +40 -52
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/system_prompt.py +15 -7
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/tools.py +39 -37
- mycode_cli-0.1.2/mycode/core/utils.py +33 -0
- mycode_cli-0.1.2/mycode/server/static/assets/EditDiff-B_aujzJQ.js +12 -0
- mycode_cli-0.1.2/mycode/server/static/assets/index-BhG63UMx.css +1 -0
- mycode_cli-0.1.1/mycode/server/static/assets/index-BA4tzeZb.js → mycode_cli-0.1.2/mycode/server/static/assets/index-DpmWOCHa.js +53 -50
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/index.html +2 -2
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/pyproject.toml +1 -1
- mycode_cli-0.1.2/scripts/release.sh +35 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_models.py +6 -11
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_tools.py +26 -2
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/uv.lock +1 -1
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/EditDiff.tsx +22 -4
- mycode_cli-0.1.2/web/src/components/Chat/ToolCard.tsx +479 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/messages.ts +5 -6
- mycode_cli-0.1.1/mycode/core/system_prompt.md +0 -10
- mycode_cli-0.1.1/mycode/server/static/assets/EditDiff-BwsI1PeP.js +0 -12
- mycode_cli-0.1.1/mycode/server/static/assets/index-CLbMGgzx.css +0 -1
- mycode_cli-0.1.1/web/src/components/Chat/ToolCard.tsx +0 -258
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.github/workflows/ci.yml +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.github/workflows/publish.yml +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.gitignore +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/LICENSE +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/README.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/biome.json +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/api.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/config.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/providers.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/sessions.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/web.md +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/hatch_build.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/chat.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/main.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/runtime.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/theme.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/messages.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/models_catalog.json +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/anthropic_like.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/base.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/gemini.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/app.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/deps.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/chat.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/sessions.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/workspaces.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/run_manager.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/schemas.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/abap-BdImnpbu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/actionscript-3-CoDkCxhg.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ada-bCR0ucgS.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/andromeeda-C4gqWexZ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/angular-html-DA-rfuFy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/angular-ts-BrjP3tb8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apache-Pmp26Uib.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apex-D8_7TLub.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apl-CORt7UWP.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/applescript-Co6uUVPk.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ara-BRHolxvo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/asciidoc-Ve4PFQV2.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/asm-D_Q5rh1f.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/astro-HNnZUWAn.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/aurora-x-D-2ljcwZ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/auto-render-xntwXHOX.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/awk-DMzUqQB5.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-dark-DYE7WIF3.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-light-BA47KaF1.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-mirage-32ctXXKs.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ballerina-BFfxhgS-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bat-BkioyH1T.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/beancount-k_qm7-4y.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/berry-uYugtg8r.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bibtex-CHM0blh-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bicep-Bmn6On1c.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bird2-BIv1doCn.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/blade-BjGOyj-B.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bsl-BO_Y6i37.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/c-BIGW1oBm.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/c3-eo99z4R2.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cadence-Bv_4Rxtq.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cairo-KRGpt6FW.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/clarity-D53aC0YG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/clojure-P80f7IUj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cmake-D1j8_8rp.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cobol-nBiQ_Alo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/codeowners-Bp6g37R7.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/codeql-DsOJ9woJ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/coffee-Ch7k5sss.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/common-lisp-Cg-RD9OK.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/coq-DkFqJrB1.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cpp-CofmeUqb.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/crystal-DNxU26gB.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/csharp-COcwbKMJ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/css-CLj8gQPS.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/csv-fuZLfV_i.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cue-D82EKSYY.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cypher-COkxafJQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/d-85-TOEBH.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dark-plus-C3mMm8J8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dart-bE4Kk8sk.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dax-CEL-wOlO.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/desktop-BmXAJ9_W.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/diff-D97Zzqfu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/docker-BcOcwvcX.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dotenv-Da5cRb03.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dracula-BzJJZx-M.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dracula-soft-BXkSAIEj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dream-maker-BtqSS_iP.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/edge-FbVlp4U3.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/elixir-CkH2-t6x.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/elm-DbKCFpqz.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/emacs-lisp-CXvaQtF9.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/erb-BYCe7drp.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/erlang-DsQrWhSR.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/everforest-dark-BgDCqdQA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/everforest-light-C8M2exoo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fennel-BYunw83y.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fish-BvzEVeQv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fluent-C4IJs8-o.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fsharp-CXgrBDvD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdresource-BOOCDP_w.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdscript-C5YyOfLZ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdshader-DkwncUOv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/genie-D0YGMca9.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gherkin-DyxjwDmM.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/git-commit-F4YmCXRG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/git-rebase-r7XF79zn.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-DHJKELXO.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-DAi9KRSo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-default-D7oLnXFd.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gleam-BspZqrRM.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glimmer-js-ByusRIyA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glimmer-ts-BfAWNZQY.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glsl-DplSGwfg.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gn-n2N0HUVH.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gnuplot-DdkO51Og.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/go-C27-OAKa.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/graphql-ChdNCCLP.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/groovy-gcz8RCvz.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hack-i7_Ulhet.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haml-D5jkg6IW.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/handlebars-BpdQsYii.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haskell-Df6bDoY_.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haxe-CzTSHFRz.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hcl-BWvSN4gD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hjson-D5-asLiD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hlsl-D3lLCCz7.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/horizon-BUw7H-hv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/horizon-bright-CUuTKBJd.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/houston-DnULxvSX.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/html-derivative-DlHx6ybY.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/html-pp8916En.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/http-jrhK8wxY.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hurl-irOxFIW8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hxml-Bvhsp5Yf.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hy-DFXneXwc.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/imba-DGztddWO.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ini-BEwlwnbL.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/java-CylS5w8V.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/javascript-wDzz0qaB.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jinja-f2NsQr07.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jison-wvAkD_A8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/json-Cp-IABpG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/json5-C9tS-k6U.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonc-Des-eS-w.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonl-DcaNXYhu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonnet-DFQXde-d.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jssm-C2t-YnRu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsx-g9-lgVsj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/julia-CxzCAyBv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/just-VxiPbLrw.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/katex-DnJR2-55.css +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kdl-DV7GczEv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kotlin-BdnUsdx6.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kusto-wEQ09or8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/laserwave-DUszq2jm.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/latex-CWtU0Tv5.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/lean-BZvkOJ9d.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/less-B1dDrJ26.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/light-plus-B7mTdjB0.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/liquid-C0sCDyMI.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/llvm-DjAJT7YJ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/log-2UxHyX5q.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/logo-BtOb2qkB.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/lua-BaeVxFsk.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/luau-C-HG3fhB.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/make-CHLpvVh8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/markdown-Cvjx9yec.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/marko-DjSrsDqO.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-D5KoaKCx.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-ocean-CyktbL80.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/matlab-D7o27uSR.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mdc-DTYItulj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mdx-Cmh6b_Ma.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mermaid-mWjccvbQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/min-dark-CafNBF8u.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/min-light-CTRr51gU.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mipsasm-CKIfxQSi.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mojo-rZm6bMo-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/monokai-D4h5O-jR.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/moonbit-_H4v1dQx.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/move-IF9eRakj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/narrat-DRg8JJMk.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nextflow-C-mBbutL.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nextflow-groovy-vE_lwT2v.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nginx-BpAMiNFr.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/night-owl-C39BiMTA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/night-owl-light-CMTm3GFP.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nim-BIad80T-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nix-CwoSXNpI.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nord-Ddv68eIx.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nushell-Cz2AlsmD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/objective-c-DXmwc3jG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/objective-cpp-CLxacb5B.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ocaml-C0hk2d4L.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/odin-BBf5iR-q.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/one-light-C3Wv6jpd.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/openscad-C4EeE6gA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pascal-D93ZcfNL.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/perl-NvoQZIq0.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/php-R6g_5hLQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pkl-u5AG7uiY.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/plastic-3e1v2bzS.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/plsql-ChMvpjG-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/po-BTJTHyun.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/poimandres-CS3Unz2-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/polar-C0HS_06l.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/postcss-CXtECtnM.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/powerquery-CEu0bR-o.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/powershell-Dpen1YoG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/prisma-Dd19v3D-.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/prolog-CbFg5uaA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/proto-C7zT0LnQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pug-DKIMFp6K.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/puppet-BMWR74SV.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/purescript-CklMAg4u.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/python-B6aJPvgy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qml-3beO22l8.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qmldir-C8lEn-DE.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qss-IeuSbFQv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/r-Dspwwk_N.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/racket-BqYA7rlc.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/raku-DXvB9xmW.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/razor-BDqjjVU7.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/red-bN70gL4F.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/reg-C-SQnVFl.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/regexp-CDVJQ6XC.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rel-C3B-1QV4.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/riscv-BM1_JUlF.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ron-D8l8udqQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-qdsjHGoJ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rosmsg-BJDFO7_C.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rst-CRjBmOyv.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ruby-Wjq7vjNf.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rust-B1yitclQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sas-cz2c8ADy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sass-Cj5Yp3dK.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scala-C151Ov-r.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scheme-C98Dy4si.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scss-D5BDwBP9.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sdbl-DVxCFoDh.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shellscript-Yzrsuije.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shellsession-BADoaaVG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/slack-dark-BthQWCQV.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/slack-ochin-DqwNpetd.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/smalltalk-BERRCDM3.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/snazzy-light-Bw305WKR.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solarized-dark-DXbdFlpD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solarized-light-L9t79GZl.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solidity-rGO070M0.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/soy-8wufbnw4.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sparql-rVzFXLq3.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/splunk-BtCnVYZw.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sql-BLtJtn59.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ssh-config-_ykCGR6B.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/stata-BH5u7GGu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/stylus-BEDo0Tqx.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/surrealql-Bq5Q-fJD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/svelte-Cy7k_4gC.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/swift-D82vCrfD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/synthwave-84-CbfX1IO0.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/system-verilog-CnnmHF94.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/systemd-4A_iFExJ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/talonscript-CkByrt1z.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tasl-QIJgUcNo.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tcl-dwOrl1Do.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/templ-DhtptRzy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/terraform-BETggiCN.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tex-idrVyKtj.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tokyo-night-hegEt444.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/toml-vGWfd6FD.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ts-tags-DQrlYJgV.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tsv-B_m7g4N7.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tsx-COt5Ahok.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/turtle-BsS91CYL.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/twig-xg9kU7Mw.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typescript-BPQ3VLAy.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typespec-CAFt9gP4.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typst-DHCkPAjA.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/v-BcVCzyr7.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vala-CsfeWuGM.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vb-D17OF-Vu.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/verilog-BQ8w6xss.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vesper-DU1UobuO.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vhdl-CeAyd5Ju.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/viml-CJc9bBzg.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-light-CVO1_9PV.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-D2xRrEX4.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-html-AaS7Mt5G.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-vine-BoDAl6tE.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vyper-CDx5xZoG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wasm-CG6Dc4jp.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wasm-MzD3tlZU.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wenyan-BV7otONQ.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wgsl-Dx-B1_4e.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wikitext-BhOHFoWU.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wit-5i3qLPDT.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wolfram-lXgVvXCa.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/xml-sdJ4AIDG.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/xsl-CtQFsRM5.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/yaml-Buea-lGh.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/zenscript-DVFEvuxE.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/zig-VOosw3JB.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/favicon_slashes.svg +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/__init__.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/build_web.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/update_models_catalog.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/conftest.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_agent_loop.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_agent_provider_request.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_bash.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_cli.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_cli_imports.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_compact.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_config.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_instructions.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_provider_adapters.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_rewind.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_run_manager.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_server_app.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_session.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_skills.py +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/index.html +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/package.json +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/pnpm-lock.yaml +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/postcss.config.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/public/favicon_slashes.svg +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/App.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/CodeBlock.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/HighlightedCode.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/InputArea.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MarkdownBlock.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MessageBubble.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MessageList.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/ReasoningBlock.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Layout.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/MobileHeader.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Sidebar.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/ThemeProvider.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/UI/Button.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/WorkspacePicker.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/sessionSelection.test.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/sessionSelection.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/useChat.test.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/useChat.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/index.css +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/main.tsx +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/test/setup.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/types.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/clipboard.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/cn.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/config.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/highlighter.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/messages.test.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/storage.test.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/storage.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/vite-env.d.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/tailwind.config.js +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/tsconfig.json +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/vite.config.ts +0 -0
- {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/vitest.config.ts +0 -0
|
@@ -27,8 +27,7 @@ Core runtime (`mycode/core/`):
|
|
|
27
27
|
- `session.py` — append-only JSONL session storage, compact/rewind events, interrupted tool repair
|
|
28
28
|
- `config.py` — layered config loading and provider resolution
|
|
29
29
|
- `models.py` — bundled model metadata lookup (`context_window`, `supports_reasoning`, `supports_image_input`)
|
|
30
|
-
- `system_prompt.py` — runtime system prompt assembly, AGENTS.md discovery, skills discovery
|
|
31
|
-
- `system_prompt.md` — system prompt template
|
|
30
|
+
- `system_prompt.py` — runtime system prompt assembly, inlined base prompt, AGENTS.md discovery, skills discovery
|
|
32
31
|
- `providers/base.py` — ProviderAdapter abstract interface
|
|
33
32
|
- `providers/__init__.py` — adapter registry and provider lookup helpers
|
|
34
33
|
- `providers/anthropic_like.py` — adapters: `anthropic`, `moonshotai`, `minimax`
|
|
@@ -106,6 +106,19 @@ _TOOL_PREVIEW_KEY: dict[str, str] = {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
|
|
109
|
+
def _tool_preview(name: str, args: dict[str, Any]) -> str:
|
|
110
|
+
"""Extract a one-line preview string for a tool call."""
|
|
111
|
+
|
|
112
|
+
if not args:
|
|
113
|
+
return ""
|
|
114
|
+
key = _TOOL_PREVIEW_KEY.get(name.lower())
|
|
115
|
+
raw = args.get(key) if key else next(iter(args.values()), "")
|
|
116
|
+
preview = str(raw or "")
|
|
117
|
+
if len(preview) > 60:
|
|
118
|
+
preview = preview[:60] + "…"
|
|
119
|
+
return preview
|
|
120
|
+
|
|
121
|
+
|
|
109
122
|
def format_local_timestamp(value: str, display_format: str) -> str:
|
|
110
123
|
"""Format an ISO timestamp with a simple local fallback."""
|
|
111
124
|
|
|
@@ -199,14 +212,7 @@ class TerminalView:
|
|
|
199
212
|
self.console.print(_LeftMarkdown(str(content), code_theme=CODE_THEME))
|
|
200
213
|
else:
|
|
201
214
|
name, args = content
|
|
202
|
-
preview =
|
|
203
|
-
if isinstance(args, dict) and args:
|
|
204
|
-
key = _TOOL_PREVIEW_KEY.get(name.lower())
|
|
205
|
-
raw = args.get(key) if key else next(iter(args.values()), "")
|
|
206
|
-
preview = str(raw or "")
|
|
207
|
-
if len(preview) > 60:
|
|
208
|
-
preview = preview[:60] + "…"
|
|
209
|
-
|
|
215
|
+
preview = _tool_preview(name, args if isinstance(args, dict) else {})
|
|
210
216
|
line = Text()
|
|
211
217
|
line.append(f"{TOOL_MARKER} ", style=SUCCESS)
|
|
212
218
|
line.append(name.capitalize(), style=TOOL_NAME)
|
|
@@ -356,6 +362,7 @@ class ReplyRenderer:
|
|
|
356
362
|
self._tool_name: str = ""
|
|
357
363
|
self._tool_args: dict[str, Any] = {}
|
|
358
364
|
self._tool_buffered = False
|
|
365
|
+
self._tool_live: Live | None = None
|
|
359
366
|
self._usage: dict[str, Any] | None = None
|
|
360
367
|
|
|
361
368
|
async def render(
|
|
@@ -446,13 +453,21 @@ class ReplyRenderer:
|
|
|
446
453
|
self._tool_name = name
|
|
447
454
|
self._tool_args = args
|
|
448
455
|
|
|
449
|
-
# Bash streams output — print header immediately.
|
|
450
|
-
# Other tools are fast — defer to tool_done for single-line display.
|
|
451
456
|
if name.lower() == "bash":
|
|
457
|
+
# Bash streams output — print header immediately.
|
|
452
458
|
self._print_tool_header(name, args)
|
|
453
459
|
self._tool_buffered = False
|
|
454
460
|
else:
|
|
461
|
+
# Other tools are fast — show spinner until tool_done.
|
|
455
462
|
self._tool_buffered = True
|
|
463
|
+
if self._live_mode:
|
|
464
|
+
self._tool_live = Live(
|
|
465
|
+
self._build_tool_spinner(name, args),
|
|
466
|
+
console=self._console,
|
|
467
|
+
refresh_per_second=12,
|
|
468
|
+
transient=True,
|
|
469
|
+
)
|
|
470
|
+
self._tool_live.start()
|
|
456
471
|
|
|
457
472
|
def tool_output(self, line: str) -> None:
|
|
458
473
|
"""Render one streamed output line from a running tool."""
|
|
@@ -476,14 +491,14 @@ class ReplyRenderer:
|
|
|
476
491
|
duration = f"{elapsed:.1f}s" if elapsed >= 0.5 else ""
|
|
477
492
|
|
|
478
493
|
if self._tool_buffered:
|
|
479
|
-
|
|
494
|
+
self._stop_tool_live()
|
|
480
495
|
self._tool_buffered = False
|
|
481
496
|
if is_error:
|
|
482
497
|
self._print_tool_header(self._tool_name, self._tool_args)
|
|
483
498
|
first_line = shown_text.split("\n", 1)[0][:100]
|
|
484
499
|
self._console.print(Text(f" {first_line}", style=ERROR))
|
|
485
500
|
else:
|
|
486
|
-
suffix = self.
|
|
501
|
+
suffix = self._format_tool_suffix(self._tool_name, self._tool_args, duration)
|
|
487
502
|
self._print_tool_header(self._tool_name, self._tool_args, suffix=suffix)
|
|
488
503
|
else:
|
|
489
504
|
# Bash: streaming tool
|
|
@@ -511,13 +526,7 @@ class ReplyRenderer:
|
|
|
511
526
|
) -> None:
|
|
512
527
|
"""Print the ``⏺ Name preview [suffix]`` tool header line."""
|
|
513
528
|
|
|
514
|
-
preview =
|
|
515
|
-
if args:
|
|
516
|
-
key = _TOOL_PREVIEW_KEY.get(name.lower())
|
|
517
|
-
raw = args.get(key) if key else next(iter(args.values()), "")
|
|
518
|
-
preview = str(raw or "")
|
|
519
|
-
if len(preview) > 60:
|
|
520
|
-
preview = preview[:60] + "…"
|
|
529
|
+
preview = _tool_preview(name, args)
|
|
521
530
|
|
|
522
531
|
text = Text()
|
|
523
532
|
text.append(f"{TOOL_MARKER} ", style=SUCCESS)
|
|
@@ -529,34 +538,66 @@ class ReplyRenderer:
|
|
|
529
538
|
text.append_text(suffix)
|
|
530
539
|
self._console.print(text)
|
|
531
540
|
|
|
541
|
+
def _build_tool_spinner(self, name: str, args: dict[str, Any]) -> Spinner:
|
|
542
|
+
"""Build a transient spinner shown while a buffered tool runs."""
|
|
543
|
+
|
|
544
|
+
preview = _tool_preview(name, args)
|
|
545
|
+
label = Text()
|
|
546
|
+
label.append(f" {name.capitalize()}", style=TOOL_NAME)
|
|
547
|
+
if preview:
|
|
548
|
+
label.append(f" {preview}", style=MUTED)
|
|
549
|
+
return Spinner("dots", text=label, style="dim")
|
|
550
|
+
|
|
551
|
+
def _stop_tool_live(self) -> None:
|
|
552
|
+
if self._tool_live is not None:
|
|
553
|
+
self._tool_live.stop()
|
|
554
|
+
self._tool_live = None
|
|
555
|
+
|
|
532
556
|
@staticmethod
|
|
533
|
-
def
|
|
534
|
-
"""
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
added
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
557
|
+
def _format_tool_suffix(name: str, args: dict[str, Any], duration: str) -> Text | None:
|
|
558
|
+
"""Build the inline suffix shown after the tool preview on success."""
|
|
559
|
+
|
|
560
|
+
parts = Text()
|
|
561
|
+
lower = name.lower()
|
|
562
|
+
|
|
563
|
+
if lower == "edit":
|
|
564
|
+
old_text = args.get("oldText")
|
|
565
|
+
new_text = args.get("newText")
|
|
566
|
+
if isinstance(old_text, str) and isinstance(new_text, str):
|
|
567
|
+
added = 0
|
|
568
|
+
removed = 0
|
|
569
|
+
for tag, old_start, old_end, new_start, new_end in SequenceMatcher(
|
|
570
|
+
None,
|
|
571
|
+
old_text.splitlines(),
|
|
572
|
+
new_text.splitlines(),
|
|
573
|
+
).get_opcodes():
|
|
574
|
+
if tag in {"replace", "delete"}:
|
|
575
|
+
removed += old_end - old_start
|
|
576
|
+
if tag in {"replace", "insert"}:
|
|
577
|
+
added += new_end - new_start
|
|
578
|
+
parts.append(f"+{added}", style="green")
|
|
579
|
+
parts.append(f" −{removed}", style="red")
|
|
580
|
+
elif lower == "read":
|
|
581
|
+
offset = args.get("offset")
|
|
582
|
+
limit = args.get("limit")
|
|
583
|
+
if isinstance(offset, int) and isinstance(limit, int):
|
|
584
|
+
parts.append(f":{offset}-{offset + limit}", style=MUTED)
|
|
585
|
+
elif isinstance(offset, int):
|
|
586
|
+
parts.append(f":{offset}", style=MUTED)
|
|
587
|
+
elif isinstance(limit, int):
|
|
588
|
+
parts.append(f":1-{limit}", style=MUTED)
|
|
589
|
+
elif lower == "write":
|
|
590
|
+
content = args.get("content")
|
|
591
|
+
if isinstance(content, str):
|
|
592
|
+
lines = content.count("\n") + 1
|
|
593
|
+
parts.append(f"({lines} lines)", style=MUTED)
|
|
594
|
+
|
|
595
|
+
if duration:
|
|
596
|
+
if parts.plain:
|
|
597
|
+
parts.append(" · ", style=MUTED)
|
|
598
|
+
parts.append(duration, style=MUTED)
|
|
599
|
+
|
|
600
|
+
return parts if parts.plain else None
|
|
560
601
|
|
|
561
602
|
def compact(self, message: str) -> None:
|
|
562
603
|
"""Render a context compaction notification."""
|
|
@@ -663,6 +704,7 @@ class ReplyRenderer:
|
|
|
663
704
|
if self._live is not None:
|
|
664
705
|
self._live.stop()
|
|
665
706
|
self._live = None
|
|
707
|
+
self._stop_tool_live()
|
|
666
708
|
self._reasoning.clear()
|
|
667
709
|
self._text.clear()
|
|
668
710
|
self._printed_static_reasoning = False
|
|
@@ -241,7 +241,7 @@ class Agent:
|
|
|
241
241
|
if self._cancel_event.is_set():
|
|
242
242
|
raise asyncio.CancelledError
|
|
243
243
|
|
|
244
|
-
self._provider_event_task = asyncio.
|
|
244
|
+
self._provider_event_task = asyncio.create_task(anext(provider_stream))
|
|
245
245
|
try:
|
|
246
246
|
yield await self._provider_event_task
|
|
247
247
|
except StopAsyncIteration:
|
|
@@ -384,24 +384,20 @@ class Agent:
|
|
|
384
384
|
if event.type != "tool_done":
|
|
385
385
|
continue
|
|
386
386
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
result_display_text = str(result_data.get("display_text") or "")
|
|
391
|
-
result_is_error = bool(result_data.get("is_error"))
|
|
392
|
-
result_content = result_data.get("content")
|
|
387
|
+
d = event.data
|
|
388
|
+
model_text = str(d.get("model_text") or "")
|
|
389
|
+
content = d.get("content")
|
|
393
390
|
tool_results.append(
|
|
394
391
|
tool_result_block(
|
|
395
|
-
tool_use_id=
|
|
396
|
-
model_text=
|
|
397
|
-
display_text=
|
|
398
|
-
is_error=
|
|
399
|
-
content=
|
|
392
|
+
tool_use_id=str(d.get("tool_use_id") or ""),
|
|
393
|
+
model_text=model_text,
|
|
394
|
+
display_text=str(d.get("display_text") or ""),
|
|
395
|
+
is_error=bool(d.get("is_error")),
|
|
396
|
+
content=content if isinstance(content, list) else None,
|
|
400
397
|
)
|
|
401
398
|
)
|
|
402
399
|
|
|
403
|
-
|
|
404
|
-
if tool_was_cancelled and self._cancel_event.is_set():
|
|
400
|
+
if model_text == "error: cancelled" and self._cancel_event.is_set():
|
|
405
401
|
tool_result_message = build_message("user", tool_results)
|
|
406
402
|
self.messages.append(tool_result_message)
|
|
407
403
|
if on_persist:
|
|
@@ -13,7 +13,7 @@ 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, replace
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import Any
|
|
19
19
|
|
|
@@ -27,6 +27,7 @@ from mycode.core.providers import (
|
|
|
27
27
|
provider_default_models,
|
|
28
28
|
provider_env_api_key_names,
|
|
29
29
|
)
|
|
30
|
+
from mycode.core.utils import as_bool, as_int
|
|
30
31
|
|
|
31
32
|
_DEFAULT_MYCODE_HOME = "~/.mycode"
|
|
32
33
|
_API_KEY_ENV_REF_RE = re.compile(r"^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$")
|
|
@@ -133,19 +134,11 @@ def _normalize_models(value: Any) -> dict[str, ModelConfig]:
|
|
|
133
134
|
models[model_id] = raw
|
|
134
135
|
continue
|
|
135
136
|
raw_config = raw if isinstance(raw, dict) else {}
|
|
136
|
-
context_window = raw_config.get("context_window")
|
|
137
|
-
max_output_tokens = raw_config.get("max_output_tokens")
|
|
138
|
-
supports_reasoning = raw_config.get("supports_reasoning")
|
|
139
|
-
supports_image_input = raw_config.get("supports_image_input")
|
|
140
137
|
models[model_id] = ModelConfig(
|
|
141
|
-
context_window=(
|
|
142
|
-
|
|
143
|
-
),
|
|
144
|
-
|
|
145
|
-
if isinstance(max_output_tokens, int) and not isinstance(max_output_tokens, bool)
|
|
146
|
-
else None,
|
|
147
|
-
supports_reasoning=supports_reasoning if isinstance(supports_reasoning, bool) else None,
|
|
148
|
-
supports_image_input=supports_image_input if isinstance(supports_image_input, bool) else None,
|
|
138
|
+
context_window=as_int(raw_config.get("context_window")),
|
|
139
|
+
max_output_tokens=as_int(raw_config.get("max_output_tokens")),
|
|
140
|
+
supports_reasoning=as_bool(raw_config.get("supports_reasoning")),
|
|
141
|
+
supports_image_input=as_bool(raw_config.get("supports_image_input")),
|
|
149
142
|
)
|
|
150
143
|
return models
|
|
151
144
|
|
|
@@ -348,7 +341,7 @@ def resolve_provider(
|
|
|
348
341
|
api_base=api_base,
|
|
349
342
|
)
|
|
350
343
|
|
|
351
|
-
for available_name,
|
|
344
|
+
for available_name, _ in _available_provider_references(settings):
|
|
352
345
|
return _resolve_provider_runtime(
|
|
353
346
|
settings,
|
|
354
347
|
selected_name=available_name,
|
|
@@ -373,7 +366,7 @@ def resolve_provider_choices(settings: Settings) -> list[ResolvedProvider]:
|
|
|
373
366
|
"""Return currently selectable providers in stable selection order."""
|
|
374
367
|
|
|
375
368
|
choices: list[ResolvedProvider] = []
|
|
376
|
-
for selected_name,
|
|
369
|
+
for selected_name, _ in _available_provider_references(settings):
|
|
377
370
|
try:
|
|
378
371
|
choices.append(_resolve_provider_runtime(settings, selected_name=selected_name))
|
|
379
372
|
except ValueError:
|
|
@@ -455,9 +448,7 @@ def _resolve_provider_runtime(
|
|
|
455
448
|
resolved_api_base = api_base or (provider_config.base_url if provider_config else None)
|
|
456
449
|
model_metadata = lookup_model_metadata(
|
|
457
450
|
provider_type=provider_type,
|
|
458
|
-
provider_name=selected_name,
|
|
459
451
|
model=resolved_model,
|
|
460
|
-
api_base=resolved_api_base,
|
|
461
452
|
)
|
|
462
453
|
if provider_config:
|
|
463
454
|
model_config = provider_config.models.get(resolved_model)
|
|
@@ -472,29 +463,21 @@ def _resolve_provider_runtime(
|
|
|
472
463
|
supports_image_input=model_config.supports_image_input,
|
|
473
464
|
)
|
|
474
465
|
else:
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
context_window=
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
max_output_tokens
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
if model_config.supports_reasoning is not None
|
|
491
|
-
else model_metadata.supports_reasoning
|
|
492
|
-
),
|
|
493
|
-
supports_image_input=(
|
|
494
|
-
model_config.supports_image_input
|
|
495
|
-
if model_config.supports_image_input is not None
|
|
496
|
-
else model_metadata.supports_image_input
|
|
497
|
-
),
|
|
466
|
+
# Per-field: use the config override when set, keep catalog value otherwise.
|
|
467
|
+
model_metadata = replace(
|
|
468
|
+
model_metadata,
|
|
469
|
+
context_window=model_config.context_window
|
|
470
|
+
if model_config.context_window is not None
|
|
471
|
+
else model_metadata.context_window,
|
|
472
|
+
max_output_tokens=model_config.max_output_tokens
|
|
473
|
+
if model_config.max_output_tokens is not None
|
|
474
|
+
else model_metadata.max_output_tokens,
|
|
475
|
+
supports_reasoning=model_config.supports_reasoning
|
|
476
|
+
if model_config.supports_reasoning is not None
|
|
477
|
+
else model_metadata.supports_reasoning,
|
|
478
|
+
supports_image_input=model_config.supports_image_input
|
|
479
|
+
if model_config.supports_image_input is not None
|
|
480
|
+
else model_metadata.supports_image_input,
|
|
498
481
|
)
|
|
499
482
|
|
|
500
483
|
configured_effort = settings.default_reasoning_effort
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import functools
|
|
5
6
|
import json
|
|
6
7
|
from dataclasses import dataclass
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from typing import Any
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
from mycode.core.utils import as_bool, as_int
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
_models_catalog_loaded = False
|
|
13
|
+
_MODELS_CATALOG_PATH = Path(__file__).with_name("models_catalog.json")
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@dataclass(frozen=True)
|
|
@@ -25,30 +25,21 @@ class ModelMetadata:
|
|
|
25
25
|
supports_image_input: bool | None
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
@functools.cache
|
|
28
29
|
def load_models_catalog() -> dict[str, Any] | None:
|
|
29
30
|
"""Load the bundled model catalog from disk once per process."""
|
|
30
31
|
|
|
31
|
-
global _models_catalog_cache, _models_catalog_loaded
|
|
32
|
-
|
|
33
|
-
if _models_catalog_loaded:
|
|
34
|
-
return _models_catalog_cache
|
|
35
|
-
|
|
36
32
|
try:
|
|
37
33
|
data = json.loads(_MODELS_CATALOG_PATH.read_text(encoding="utf-8"))
|
|
38
34
|
except Exception:
|
|
39
35
|
data = None
|
|
40
|
-
|
|
41
|
-
_models_catalog_cache = data if isinstance(data, dict) else None
|
|
42
|
-
_models_catalog_loaded = True
|
|
43
|
-
return _models_catalog_cache
|
|
36
|
+
return data if isinstance(data, dict) else None
|
|
44
37
|
|
|
45
38
|
|
|
46
39
|
def lookup_model_metadata(
|
|
47
40
|
*,
|
|
48
41
|
provider_type: str | None,
|
|
49
42
|
model: str | None,
|
|
50
|
-
provider_name: str | None = None, # reserved for future per-alias lookup
|
|
51
|
-
api_base: str | None = None, # reserved for future custom-endpoint lookup
|
|
52
43
|
) -> ModelMetadata | None:
|
|
53
44
|
"""Resolve metadata for one internal provider type and model."""
|
|
54
45
|
|
|
@@ -96,19 +87,15 @@ def _lookup_entry(
|
|
|
96
87
|
return ModelMetadata(
|
|
97
88
|
provider=provider_type,
|
|
98
89
|
model=model_id,
|
|
99
|
-
context_window=
|
|
100
|
-
max_output_tokens=
|
|
101
|
-
supports_reasoning=raw_model.get("supports_reasoning")
|
|
102
|
-
|
|
103
|
-
else None,
|
|
104
|
-
supports_image_input=raw_model.get("supports_image_input")
|
|
105
|
-
if isinstance(raw_model.get("supports_image_input"), bool)
|
|
106
|
-
else None,
|
|
90
|
+
context_window=as_int(raw_model.get("context_window")),
|
|
91
|
+
max_output_tokens=as_int(raw_model.get("max_output_tokens")),
|
|
92
|
+
supports_reasoning=as_bool(raw_model.get("supports_reasoning")),
|
|
93
|
+
supports_image_input=as_bool(raw_model.get("supports_image_input")),
|
|
107
94
|
)
|
|
108
95
|
|
|
109
96
|
|
|
110
97
|
def _default_provider(model_id: str) -> str | None:
|
|
111
|
-
"""Return the canonical internal provider type for a
|
|
98
|
+
"""Return the canonical internal provider type for a well-known model id."""
|
|
112
99
|
|
|
113
100
|
normalized = model_id.lower()
|
|
114
101
|
if normalized.startswith("claude-"):
|
|
@@ -134,11 +121,3 @@ def _strip_prefix(model_id: str) -> str:
|
|
|
134
121
|
if "/" not in model_id:
|
|
135
122
|
return model_id
|
|
136
123
|
return model_id.split("/", 1)[1].strip()
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
def _as_int(value: Any) -> int | None:
|
|
140
|
-
"""Return an int value while rejecting bools and non-ints."""
|
|
141
|
-
|
|
142
|
-
if isinstance(value, bool) or not isinstance(value, int):
|
|
143
|
-
return None
|
|
144
|
-
return value
|
|
@@ -19,7 +19,7 @@ from mycode.core.providers.base import (
|
|
|
19
19
|
load_image_block_payload,
|
|
20
20
|
tool_result_content_blocks,
|
|
21
21
|
)
|
|
22
|
-
from mycode.core.
|
|
22
|
+
from mycode.core.utils import parse_tool_arguments
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class OpenAIResponsesAdapter(ProviderAdapter):
|
|
@@ -18,6 +18,7 @@ from __future__ import annotations
|
|
|
18
18
|
import asyncio
|
|
19
19
|
import json
|
|
20
20
|
import os
|
|
21
|
+
import shutil
|
|
21
22
|
from dataclasses import asdict, dataclass, field
|
|
22
23
|
from datetime import UTC, datetime
|
|
23
24
|
from pathlib import Path
|
|
@@ -315,42 +316,6 @@ class SessionStore:
|
|
|
315
316
|
sessions = await self.list_sessions(cwd=cwd)
|
|
316
317
|
return sessions[0] if sessions else None
|
|
317
318
|
|
|
318
|
-
async def load_session(self, session_id: str) -> dict | None:
|
|
319
|
-
def load() -> dict | None:
|
|
320
|
-
meta = self._read_meta(session_id)
|
|
321
|
-
if meta is None:
|
|
322
|
-
return None
|
|
323
|
-
|
|
324
|
-
# Read the raw append-only log first. Replay happens after that.
|
|
325
|
-
raw_messages: list[dict] = []
|
|
326
|
-
messages_path = self.messages_path(session_id)
|
|
327
|
-
try:
|
|
328
|
-
with messages_path.open("r", encoding="utf-8") as handle:
|
|
329
|
-
for line in handle:
|
|
330
|
-
line = line.strip()
|
|
331
|
-
if not line:
|
|
332
|
-
continue
|
|
333
|
-
try:
|
|
334
|
-
msg = json.loads(line)
|
|
335
|
-
if isinstance(msg, dict):
|
|
336
|
-
raw_messages.append(msg)
|
|
337
|
-
except Exception:
|
|
338
|
-
continue
|
|
339
|
-
except FileNotFoundError:
|
|
340
|
-
pass
|
|
341
|
-
|
|
342
|
-
# Replay order defines the visible conversation state.
|
|
343
|
-
# 1) compact rewrites older history into one summary view
|
|
344
|
-
# 2) rewind truncates that visible list by message index
|
|
345
|
-
# 3) interrupted tool repair patches the final visible state
|
|
346
|
-
visible_messages = apply_compact(raw_messages)
|
|
347
|
-
visible_messages = apply_rewind(visible_messages)
|
|
348
|
-
self._repair_interrupted_tool_loop(session_id, meta, visible_messages)
|
|
349
|
-
|
|
350
|
-
return {"session": meta, "messages": visible_messages}
|
|
351
|
-
|
|
352
|
-
return await asyncio.to_thread(load)
|
|
353
|
-
|
|
354
319
|
def _repair_interrupted_tool_loop(self, session_id: str, meta: dict, messages: list[dict]) -> None:
|
|
355
320
|
"""Append a synthetic tool result when the latest tool loop was interrupted.
|
|
356
321
|
|
|
@@ -388,7 +353,7 @@ class SessionStore:
|
|
|
388
353
|
if pending_tool_call_index is None:
|
|
389
354
|
return
|
|
390
355
|
|
|
391
|
-
#
|
|
356
|
+
# Collect tool results that were recorded after the assistant message.
|
|
392
357
|
completed_tool_use_ids: set[str] = set()
|
|
393
358
|
for message in messages[pending_tool_call_index + 1 :]:
|
|
394
359
|
if message.get("role") != "user":
|
|
@@ -432,24 +397,47 @@ class SessionStore:
|
|
|
432
397
|
self._write_meta(session_id, meta)
|
|
433
398
|
messages.append(repair_message)
|
|
434
399
|
|
|
400
|
+
async def load_session(self, session_id: str) -> dict | None:
|
|
401
|
+
def load() -> dict | None:
|
|
402
|
+
meta = self._read_meta(session_id)
|
|
403
|
+
if meta is None:
|
|
404
|
+
return None
|
|
405
|
+
|
|
406
|
+
# Read the raw append-only log first. Replay happens after that.
|
|
407
|
+
raw_messages: list[dict] = []
|
|
408
|
+
messages_path = self.messages_path(session_id)
|
|
409
|
+
try:
|
|
410
|
+
with messages_path.open("r", encoding="utf-8") as handle:
|
|
411
|
+
for line in handle:
|
|
412
|
+
line = line.strip()
|
|
413
|
+
if not line:
|
|
414
|
+
continue
|
|
415
|
+
try:
|
|
416
|
+
msg = json.loads(line)
|
|
417
|
+
if isinstance(msg, dict):
|
|
418
|
+
raw_messages.append(msg)
|
|
419
|
+
except Exception:
|
|
420
|
+
continue
|
|
421
|
+
except FileNotFoundError:
|
|
422
|
+
pass
|
|
423
|
+
|
|
424
|
+
# Replay order defines the visible conversation state.
|
|
425
|
+
# 1) compact rewrites older history into one summary view
|
|
426
|
+
# 2) rewind truncates that visible list by message index
|
|
427
|
+
# 3) interrupted tool repair patches the final visible state
|
|
428
|
+
visible_messages = apply_compact(raw_messages)
|
|
429
|
+
visible_messages = apply_rewind(visible_messages)
|
|
430
|
+
self._repair_interrupted_tool_loop(session_id, meta, visible_messages)
|
|
431
|
+
|
|
432
|
+
return {"session": meta, "messages": visible_messages}
|
|
433
|
+
|
|
434
|
+
return await asyncio.to_thread(load)
|
|
435
|
+
|
|
435
436
|
async def delete_session(self, session_id: str) -> None:
|
|
436
437
|
def delete() -> None:
|
|
437
438
|
sdir = self.session_dir(session_id)
|
|
438
|
-
if
|
|
439
|
-
|
|
440
|
-
# small recursive delete (no shutil.rmtree to keep deps minimal)
|
|
441
|
-
for p in sorted(sdir.rglob("*"), reverse=True):
|
|
442
|
-
try:
|
|
443
|
-
if p.is_file() or p.is_symlink():
|
|
444
|
-
p.unlink(missing_ok=True)
|
|
445
|
-
elif p.is_dir():
|
|
446
|
-
p.rmdir()
|
|
447
|
-
except Exception:
|
|
448
|
-
pass
|
|
449
|
-
try:
|
|
450
|
-
sdir.rmdir()
|
|
451
|
-
except Exception:
|
|
452
|
-
pass
|
|
439
|
+
if sdir.exists():
|
|
440
|
+
shutil.rmtree(sdir, ignore_errors=True)
|
|
453
441
|
|
|
454
442
|
await asyncio.to_thread(delete)
|
|
455
443
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This module owns the full runtime system prompt:
|
|
4
4
|
|
|
5
|
-
- base prompt text
|
|
5
|
+
- base prompt text (inlined below as _BASE_PROMPT)
|
|
6
6
|
- workspace instructions from AGENTS.md
|
|
7
7
|
- available skills from SKILL.md files
|
|
8
8
|
"""
|
|
@@ -27,6 +27,19 @@ _SKIP_DIRS = frozenset({"node_modules", "__pycache__", ".git"})
|
|
|
27
27
|
_NAME_RE = re.compile(r"^[a-zA-Z0-9_-]+$")
|
|
28
28
|
_NAME_MAX_LEN = 64
|
|
29
29
|
|
|
30
|
+
_BASE_PROMPT = """\
|
|
31
|
+
You are mycode, an expert coding assistant.
|
|
32
|
+
|
|
33
|
+
You have four tools: read, write, edit, bash.
|
|
34
|
+
|
|
35
|
+
- Use bash for file operations and exploration like `ls`, `find`, `rg`, etc.
|
|
36
|
+
- Always set offset/limit when reading large files.
|
|
37
|
+
- Always read files before editing them.
|
|
38
|
+
- Use write only for new files or complete rewrites
|
|
39
|
+
- Your response should be concise and relevant.
|
|
40
|
+
- When available skills match the current task, prefer them over manual alternatives. To use a skill: read its `SKILL.md`, then follow the instructions inside.\
|
|
41
|
+
"""
|
|
42
|
+
|
|
30
43
|
|
|
31
44
|
# ---------------------------------------------------------------------
|
|
32
45
|
# Full system prompt assembly
|
|
@@ -39,12 +52,7 @@ def build_system_prompt(cwd: str, settings: Settings | None = None) -> str:
|
|
|
39
52
|
resolved_cwd = str(Path(cwd).resolve(strict=False))
|
|
40
53
|
resolved_settings = settings or get_settings(resolved_cwd)
|
|
41
54
|
|
|
42
|
-
|
|
43
|
-
base_prompt = (Path(__file__).resolve().parent / "system_prompt.md").read_text(encoding="utf-8").strip()
|
|
44
|
-
except Exception:
|
|
45
|
-
base_prompt = "You are mycode, an expert coding assistant."
|
|
46
|
-
|
|
47
|
-
parts = [base_prompt]
|
|
55
|
+
parts = [_BASE_PROMPT]
|
|
48
56
|
|
|
49
57
|
instructions_prompt = load_instructions_prompt(resolved_cwd, resolved_settings)
|
|
50
58
|
if instructions_prompt:
|