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.
Files changed (483) hide show
  1. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.pre-commit-config.yaml +1 -1
  2. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/AGENTS.md +1 -2
  3. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/PKG-INFO +1 -1
  4. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/render.py +88 -46
  5. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/agent.py +10 -14
  6. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/config.py +23 -40
  7. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/models.py +10 -31
  8. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/openai_chat.py +1 -1
  9. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/openai_responses.py +1 -1
  10. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/session.py +40 -52
  11. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/system_prompt.py +15 -7
  12. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/tools.py +39 -37
  13. mycode_cli-0.1.2/mycode/core/utils.py +33 -0
  14. mycode_cli-0.1.2/mycode/server/static/assets/EditDiff-B_aujzJQ.js +12 -0
  15. mycode_cli-0.1.2/mycode/server/static/assets/index-BhG63UMx.css +1 -0
  16. 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
  17. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/index.html +2 -2
  18. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/pyproject.toml +1 -1
  19. mycode_cli-0.1.2/scripts/release.sh +35 -0
  20. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_models.py +6 -11
  21. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_tools.py +26 -2
  22. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/uv.lock +1 -1
  23. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/EditDiff.tsx +22 -4
  24. mycode_cli-0.1.2/web/src/components/Chat/ToolCard.tsx +479 -0
  25. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/messages.ts +5 -6
  26. mycode_cli-0.1.1/mycode/core/system_prompt.md +0 -10
  27. mycode_cli-0.1.1/mycode/server/static/assets/EditDiff-BwsI1PeP.js +0 -12
  28. mycode_cli-0.1.1/mycode/server/static/assets/index-CLbMGgzx.css +0 -1
  29. mycode_cli-0.1.1/web/src/components/Chat/ToolCard.tsx +0 -258
  30. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.github/workflows/ci.yml +0 -0
  31. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.github/workflows/publish.yml +0 -0
  32. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/.gitignore +0 -0
  33. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/LICENSE +0 -0
  34. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/README.md +0 -0
  35. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/biome.json +0 -0
  36. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/api.md +0 -0
  37. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/config.md +0 -0
  38. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/providers.md +0 -0
  39. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/sessions.md +0 -0
  40. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/docs/web.md +0 -0
  41. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/hatch_build.py +0 -0
  42. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/__init__.py +0 -0
  43. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/__init__.py +0 -0
  44. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/chat.py +0 -0
  45. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/main.py +0 -0
  46. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/runtime.py +0 -0
  47. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/cli/theme.py +0 -0
  48. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/__init__.py +0 -0
  49. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/messages.py +0 -0
  50. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/models_catalog.json +0 -0
  51. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/__init__.py +0 -0
  52. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/anthropic_like.py +0 -0
  53. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/base.py +0 -0
  54. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/core/providers/gemini.py +0 -0
  55. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/__init__.py +0 -0
  56. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/app.py +0 -0
  57. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/deps.py +0 -0
  58. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/__init__.py +0 -0
  59. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/chat.py +0 -0
  60. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/sessions.py +0 -0
  61. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/routers/workspaces.py +0 -0
  62. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/run_manager.py +0 -0
  63. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/schemas.py +0 -0
  64. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  65. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  66. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  67. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  68. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  69. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  70. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  71. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  72. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  73. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  74. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  75. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  76. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  77. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  78. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  79. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  80. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  81. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  82. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  83. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  84. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  85. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  86. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  87. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  88. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  89. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  90. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  91. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  92. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  93. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  94. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  95. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  96. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  97. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  98. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  99. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  100. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  101. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  102. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  103. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  104. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  105. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  106. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  107. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  108. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  109. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  110. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  111. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  112. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  113. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  114. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  115. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  116. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  117. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  118. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  119. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  120. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  121. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  122. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  123. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/abap-BdImnpbu.js +0 -0
  124. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/actionscript-3-CoDkCxhg.js +0 -0
  125. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ada-bCR0ucgS.js +0 -0
  126. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/andromeeda-C4gqWexZ.js +0 -0
  127. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/angular-html-DA-rfuFy.js +0 -0
  128. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/angular-ts-BrjP3tb8.js +0 -0
  129. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apache-Pmp26Uib.js +0 -0
  130. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apex-D8_7TLub.js +0 -0
  131. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/apl-CORt7UWP.js +0 -0
  132. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/applescript-Co6uUVPk.js +0 -0
  133. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ara-BRHolxvo.js +0 -0
  134. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/asciidoc-Ve4PFQV2.js +0 -0
  135. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/asm-D_Q5rh1f.js +0 -0
  136. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/astro-HNnZUWAn.js +0 -0
  137. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  138. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/auto-render-xntwXHOX.js +0 -0
  139. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/awk-DMzUqQB5.js +0 -0
  140. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-dark-DYE7WIF3.js +0 -0
  141. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-light-BA47KaF1.js +0 -0
  142. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ayu-mirage-32ctXXKs.js +0 -0
  143. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ballerina-BFfxhgS-.js +0 -0
  144. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bat-BkioyH1T.js +0 -0
  145. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/beancount-k_qm7-4y.js +0 -0
  146. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/berry-uYugtg8r.js +0 -0
  147. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bibtex-CHM0blh-.js +0 -0
  148. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bicep-Bmn6On1c.js +0 -0
  149. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bird2-BIv1doCn.js +0 -0
  150. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/blade-BjGOyj-B.js +0 -0
  151. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/bsl-BO_Y6i37.js +0 -0
  152. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/c-BIGW1oBm.js +0 -0
  153. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/c3-eo99z4R2.js +0 -0
  154. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cadence-Bv_4Rxtq.js +0 -0
  155. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cairo-KRGpt6FW.js +0 -0
  156. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  157. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  158. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  159. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  160. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/clarity-D53aC0YG.js +0 -0
  161. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/clojure-P80f7IUj.js +0 -0
  162. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cmake-D1j8_8rp.js +0 -0
  163. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cobol-nBiQ_Alo.js +0 -0
  164. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/codeowners-Bp6g37R7.js +0 -0
  165. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/codeql-DsOJ9woJ.js +0 -0
  166. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/coffee-Ch7k5sss.js +0 -0
  167. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  168. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/coq-DkFqJrB1.js +0 -0
  169. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cpp-CofmeUqb.js +0 -0
  170. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/crystal-DNxU26gB.js +0 -0
  171. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/csharp-COcwbKMJ.js +0 -0
  172. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/css-CLj8gQPS.js +0 -0
  173. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/csv-fuZLfV_i.js +0 -0
  174. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cue-D82EKSYY.js +0 -0
  175. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/cypher-COkxafJQ.js +0 -0
  176. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/d-85-TOEBH.js +0 -0
  177. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dark-plus-C3mMm8J8.js +0 -0
  178. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dart-bE4Kk8sk.js +0 -0
  179. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dax-CEL-wOlO.js +0 -0
  180. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/desktop-BmXAJ9_W.js +0 -0
  181. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/diff-D97Zzqfu.js +0 -0
  182. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/docker-BcOcwvcX.js +0 -0
  183. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dotenv-Da5cRb03.js +0 -0
  184. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dracula-BzJJZx-M.js +0 -0
  185. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  186. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/dream-maker-BtqSS_iP.js +0 -0
  187. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/edge-FbVlp4U3.js +0 -0
  188. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/elixir-CkH2-t6x.js +0 -0
  189. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/elm-DbKCFpqz.js +0 -0
  190. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/emacs-lisp-CXvaQtF9.js +0 -0
  191. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/erb-BYCe7drp.js +0 -0
  192. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/erlang-DsQrWhSR.js +0 -0
  193. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  194. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/everforest-light-C8M2exoo.js +0 -0
  195. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fennel-BYunw83y.js +0 -0
  196. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fish-BvzEVeQv.js +0 -0
  197. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fluent-C4IJs8-o.js +0 -0
  198. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  199. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  200. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/fsharp-CXgrBDvD.js +0 -0
  201. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdresource-BOOCDP_w.js +0 -0
  202. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdscript-C5YyOfLZ.js +0 -0
  203. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gdshader-DkwncUOv.js +0 -0
  204. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/genie-D0YGMca9.js +0 -0
  205. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gherkin-DyxjwDmM.js +0 -0
  206. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/git-commit-F4YmCXRG.js +0 -0
  207. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/git-rebase-r7XF79zn.js +0 -0
  208. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-DHJKELXO.js +0 -0
  209. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  210. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  211. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  212. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-DAi9KRSo.js +0 -0
  213. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-default-D7oLnXFd.js +0 -0
  214. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  215. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gleam-BspZqrRM.js +0 -0
  216. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glimmer-js-ByusRIyA.js +0 -0
  217. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glimmer-ts-BfAWNZQY.js +0 -0
  218. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/glsl-DplSGwfg.js +0 -0
  219. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gn-n2N0HUVH.js +0 -0
  220. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gnuplot-DdkO51Og.js +0 -0
  221. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/go-C27-OAKa.js +0 -0
  222. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/graphql-ChdNCCLP.js +0 -0
  223. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/groovy-gcz8RCvz.js +0 -0
  224. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  225. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  226. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  227. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  228. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  229. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  230. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hack-i7_Ulhet.js +0 -0
  231. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haml-D5jkg6IW.js +0 -0
  232. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/handlebars-BpdQsYii.js +0 -0
  233. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haskell-Df6bDoY_.js +0 -0
  234. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/haxe-CzTSHFRz.js +0 -0
  235. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hcl-BWvSN4gD.js +0 -0
  236. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hjson-D5-asLiD.js +0 -0
  237. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hlsl-D3lLCCz7.js +0 -0
  238. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/horizon-BUw7H-hv.js +0 -0
  239. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/horizon-bright-CUuTKBJd.js +0 -0
  240. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/houston-DnULxvSX.js +0 -0
  241. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/html-derivative-DlHx6ybY.js +0 -0
  242. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/html-pp8916En.js +0 -0
  243. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/http-jrhK8wxY.js +0 -0
  244. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hurl-irOxFIW8.js +0 -0
  245. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hxml-Bvhsp5Yf.js +0 -0
  246. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/hy-DFXneXwc.js +0 -0
  247. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/imba-DGztddWO.js +0 -0
  248. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ini-BEwlwnbL.js +0 -0
  249. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/java-CylS5w8V.js +0 -0
  250. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/javascript-wDzz0qaB.js +0 -0
  251. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jinja-f2NsQr07.js +0 -0
  252. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jison-wvAkD_A8.js +0 -0
  253. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/json-Cp-IABpG.js +0 -0
  254. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/json5-C9tS-k6U.js +0 -0
  255. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonc-Des-eS-w.js +0 -0
  256. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonl-DcaNXYhu.js +0 -0
  257. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsonnet-DFQXde-d.js +0 -0
  258. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jssm-C2t-YnRu.js +0 -0
  259. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/jsx-g9-lgVsj.js +0 -0
  260. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/julia-CxzCAyBv.js +0 -0
  261. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/just-VxiPbLrw.js +0 -0
  262. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  263. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  264. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  265. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/katex-DnJR2-55.css +0 -0
  266. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kdl-DV7GczEv.js +0 -0
  267. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kotlin-BdnUsdx6.js +0 -0
  268. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/kusto-wEQ09or8.js +0 -0
  269. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/laserwave-DUszq2jm.js +0 -0
  270. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/latex-CWtU0Tv5.js +0 -0
  271. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/lean-BZvkOJ9d.js +0 -0
  272. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/less-B1dDrJ26.js +0 -0
  273. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/light-plus-B7mTdjB0.js +0 -0
  274. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/liquid-C0sCDyMI.js +0 -0
  275. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/llvm-DjAJT7YJ.js +0 -0
  276. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/log-2UxHyX5q.js +0 -0
  277. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/logo-BtOb2qkB.js +0 -0
  278. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/lua-BaeVxFsk.js +0 -0
  279. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/luau-C-HG3fhB.js +0 -0
  280. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/make-CHLpvVh8.js +0 -0
  281. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/markdown-Cvjx9yec.js +0 -0
  282. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/marko-DjSrsDqO.js +0 -0
  283. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-D5KoaKCx.js +0 -0
  284. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  285. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  286. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  287. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  288. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/matlab-D7o27uSR.js +0 -0
  289. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mdc-DTYItulj.js +0 -0
  290. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mdx-Cmh6b_Ma.js +0 -0
  291. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mermaid-mWjccvbQ.js +0 -0
  292. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/min-dark-CafNBF8u.js +0 -0
  293. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/min-light-CTRr51gU.js +0 -0
  294. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mipsasm-CKIfxQSi.js +0 -0
  295. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/mojo-rZm6bMo-.js +0 -0
  296. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/monokai-D4h5O-jR.js +0 -0
  297. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/moonbit-_H4v1dQx.js +0 -0
  298. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/move-IF9eRakj.js +0 -0
  299. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/narrat-DRg8JJMk.js +0 -0
  300. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nextflow-C-mBbutL.js +0 -0
  301. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nextflow-groovy-vE_lwT2v.js +0 -0
  302. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nginx-BpAMiNFr.js +0 -0
  303. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/night-owl-C39BiMTA.js +0 -0
  304. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/night-owl-light-CMTm3GFP.js +0 -0
  305. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nim-BIad80T-.js +0 -0
  306. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nix-CwoSXNpI.js +0 -0
  307. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nord-Ddv68eIx.js +0 -0
  308. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/nushell-Cz2AlsmD.js +0 -0
  309. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/objective-c-DXmwc3jG.js +0 -0
  310. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/objective-cpp-CLxacb5B.js +0 -0
  311. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ocaml-C0hk2d4L.js +0 -0
  312. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/odin-BBf5iR-q.js +0 -0
  313. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  314. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/one-light-C3Wv6jpd.js +0 -0
  315. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/openscad-C4EeE6gA.js +0 -0
  316. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pascal-D93ZcfNL.js +0 -0
  317. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/perl-NvoQZIq0.js +0 -0
  318. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/php-R6g_5hLQ.js +0 -0
  319. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pkl-u5AG7uiY.js +0 -0
  320. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/plastic-3e1v2bzS.js +0 -0
  321. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/plsql-ChMvpjG-.js +0 -0
  322. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/po-BTJTHyun.js +0 -0
  323. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/poimandres-CS3Unz2-.js +0 -0
  324. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/polar-C0HS_06l.js +0 -0
  325. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/postcss-CXtECtnM.js +0 -0
  326. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/powerquery-CEu0bR-o.js +0 -0
  327. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/powershell-Dpen1YoG.js +0 -0
  328. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/prisma-Dd19v3D-.js +0 -0
  329. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/prolog-CbFg5uaA.js +0 -0
  330. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/proto-C7zT0LnQ.js +0 -0
  331. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/pug-DKIMFp6K.js +0 -0
  332. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/puppet-BMWR74SV.js +0 -0
  333. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/purescript-CklMAg4u.js +0 -0
  334. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/python-B6aJPvgy.js +0 -0
  335. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qml-3beO22l8.js +0 -0
  336. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qmldir-C8lEn-DE.js +0 -0
  337. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/qss-IeuSbFQv.js +0 -0
  338. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/r-Dspwwk_N.js +0 -0
  339. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/racket-BqYA7rlc.js +0 -0
  340. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/raku-DXvB9xmW.js +0 -0
  341. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/razor-BDqjjVU7.js +0 -0
  342. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/red-bN70gL4F.js +0 -0
  343. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/reg-C-SQnVFl.js +0 -0
  344. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/regexp-CDVJQ6XC.js +0 -0
  345. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rel-C3B-1QV4.js +0 -0
  346. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/riscv-BM1_JUlF.js +0 -0
  347. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ron-D8l8udqQ.js +0 -0
  348. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  349. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  350. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  351. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rosmsg-BJDFO7_C.js +0 -0
  352. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rst-CRjBmOyv.js +0 -0
  353. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ruby-Wjq7vjNf.js +0 -0
  354. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/rust-B1yitclQ.js +0 -0
  355. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sas-cz2c8ADy.js +0 -0
  356. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sass-Cj5Yp3dK.js +0 -0
  357. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scala-C151Ov-r.js +0 -0
  358. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scheme-C98Dy4si.js +0 -0
  359. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/scss-D5BDwBP9.js +0 -0
  360. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sdbl-DVxCFoDh.js +0 -0
  361. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  362. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shellscript-Yzrsuije.js +0 -0
  363. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/shellsession-BADoaaVG.js +0 -0
  364. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/slack-dark-BthQWCQV.js +0 -0
  365. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/slack-ochin-DqwNpetd.js +0 -0
  366. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/smalltalk-BERRCDM3.js +0 -0
  367. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/snazzy-light-Bw305WKR.js +0 -0
  368. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  369. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solarized-light-L9t79GZl.js +0 -0
  370. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/solidity-rGO070M0.js +0 -0
  371. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/soy-8wufbnw4.js +0 -0
  372. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sparql-rVzFXLq3.js +0 -0
  373. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/splunk-BtCnVYZw.js +0 -0
  374. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/sql-BLtJtn59.js +0 -0
  375. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ssh-config-_ykCGR6B.js +0 -0
  376. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/stata-BH5u7GGu.js +0 -0
  377. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/stylus-BEDo0Tqx.js +0 -0
  378. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/surrealql-Bq5Q-fJD.js +0 -0
  379. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/svelte-Cy7k_4gC.js +0 -0
  380. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/swift-D82vCrfD.js +0 -0
  381. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  382. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/system-verilog-CnnmHF94.js +0 -0
  383. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/systemd-4A_iFExJ.js +0 -0
  384. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/talonscript-CkByrt1z.js +0 -0
  385. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tasl-QIJgUcNo.js +0 -0
  386. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tcl-dwOrl1Do.js +0 -0
  387. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/templ-DhtptRzy.js +0 -0
  388. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/terraform-BETggiCN.js +0 -0
  389. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tex-idrVyKtj.js +0 -0
  390. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tokyo-night-hegEt444.js +0 -0
  391. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/toml-vGWfd6FD.js +0 -0
  392. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/ts-tags-DQrlYJgV.js +0 -0
  393. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tsv-B_m7g4N7.js +0 -0
  394. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/tsx-COt5Ahok.js +0 -0
  395. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/turtle-BsS91CYL.js +0 -0
  396. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/twig-xg9kU7Mw.js +0 -0
  397. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typescript-BPQ3VLAy.js +0 -0
  398. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typespec-CAFt9gP4.js +0 -0
  399. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/typst-DHCkPAjA.js +0 -0
  400. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/v-BcVCzyr7.js +0 -0
  401. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vala-CsfeWuGM.js +0 -0
  402. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vb-D17OF-Vu.js +0 -0
  403. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/verilog-BQ8w6xss.js +0 -0
  404. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vesper-DU1UobuO.js +0 -0
  405. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vhdl-CeAyd5Ju.js +0 -0
  406. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/viml-CJc9bBzg.js +0 -0
  407. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  408. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  409. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  410. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-D2xRrEX4.js +0 -0
  411. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-html-AaS7Mt5G.js +0 -0
  412. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vue-vine-BoDAl6tE.js +0 -0
  413. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/vyper-CDx5xZoG.js +0 -0
  414. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wasm-CG6Dc4jp.js +0 -0
  415. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wasm-MzD3tlZU.js +0 -0
  416. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wenyan-BV7otONQ.js +0 -0
  417. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wgsl-Dx-B1_4e.js +0 -0
  418. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wikitext-BhOHFoWU.js +0 -0
  419. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wit-5i3qLPDT.js +0 -0
  420. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/wolfram-lXgVvXCa.js +0 -0
  421. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/xml-sdJ4AIDG.js +0 -0
  422. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/xsl-CtQFsRM5.js +0 -0
  423. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/yaml-Buea-lGh.js +0 -0
  424. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/zenscript-DVFEvuxE.js +0 -0
  425. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/assets/zig-VOosw3JB.js +0 -0
  426. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/mycode/server/static/favicon_slashes.svg +0 -0
  427. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/__init__.py +0 -0
  428. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/build_web.py +0 -0
  429. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/scripts/update_models_catalog.py +0 -0
  430. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/conftest.py +0 -0
  431. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_agent_loop.py +0 -0
  432. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_agent_provider_request.py +0 -0
  433. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_bash.py +0 -0
  434. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_cli.py +0 -0
  435. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_cli_imports.py +0 -0
  436. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_compact.py +0 -0
  437. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_config.py +0 -0
  438. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_instructions.py +0 -0
  439. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_provider_adapters.py +0 -0
  440. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_rewind.py +0 -0
  441. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_run_manager.py +0 -0
  442. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_server_app.py +0 -0
  443. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_session.py +0 -0
  444. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/tests/test_skills.py +0 -0
  445. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/index.html +0 -0
  446. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/package.json +0 -0
  447. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/pnpm-lock.yaml +0 -0
  448. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/postcss.config.js +0 -0
  449. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/public/favicon_slashes.svg +0 -0
  450. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/App.tsx +0 -0
  451. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/CodeBlock.tsx +0 -0
  452. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/HighlightedCode.tsx +0 -0
  453. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/InputArea.tsx +0 -0
  454. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MarkdownBlock.tsx +0 -0
  455. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MessageBubble.tsx +0 -0
  456. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/MessageList.tsx +0 -0
  457. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Chat/ReasoningBlock.tsx +0 -0
  458. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Layout.tsx +0 -0
  459. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/MobileHeader.tsx +0 -0
  460. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/Sidebar.tsx +0 -0
  461. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/ThemeProvider.tsx +0 -0
  462. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/UI/Button.tsx +0 -0
  463. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/components/WorkspacePicker.tsx +0 -0
  464. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/sessionSelection.test.ts +0 -0
  465. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/sessionSelection.ts +0 -0
  466. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/useChat.test.tsx +0 -0
  467. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/hooks/useChat.ts +0 -0
  468. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/index.css +0 -0
  469. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/main.tsx +0 -0
  470. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/test/setup.ts +0 -0
  471. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/types.ts +0 -0
  472. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/clipboard.ts +0 -0
  473. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/cn.ts +0 -0
  474. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/config.ts +0 -0
  475. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/highlighter.ts +0 -0
  476. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/messages.test.ts +0 -0
  477. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/storage.test.ts +0 -0
  478. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/utils/storage.ts +0 -0
  479. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/src/vite-env.d.ts +0 -0
  480. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/tailwind.config.js +0 -0
  481. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/tsconfig.json +0 -0
  482. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/vite.config.ts +0 -0
  483. {mycode_cli-0.1.1 → mycode_cli-0.1.2}/web/vitest.config.ts +0 -0
@@ -27,4 +27,4 @@ repos:
27
27
  - id: biome-check
28
28
  additional_dependencies: ["@biomejs/biome@2.4.7"]
29
29
  args: ["--config-path=biome.json"]
30
- files: ^frontend/
30
+ files: ^web/
@@ -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`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mycode-cli
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Minimal coding agent with web UI
5
5
  Project-URL: Homepage, https://github.com/legibet/mycode
6
6
  Project-URL: Repository, https://github.com/legibet/mycode
@@ -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
- # Non-streaming tools (read, write, edit): single-line output
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._format_edit_suffix(self._tool_name, self._tool_args)
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 _format_edit_suffix(name: str, args: dict[str, Any]) -> Text | None:
534
- """Return the real added/removed line counts for one edit call."""
535
-
536
- if name.lower() != "edit":
537
- return None
538
-
539
- old_text = args.get("oldText")
540
- new_text = args.get("newText")
541
- if not isinstance(old_text, str) or not isinstance(new_text, str):
542
- return None
543
-
544
- added = 0
545
- removed = 0
546
- for tag, old_start, old_end, new_start, new_end in SequenceMatcher(
547
- None,
548
- old_text.splitlines(),
549
- new_text.splitlines(),
550
- ).get_opcodes():
551
- if tag in {"replace", "delete"}:
552
- removed += old_end - old_start
553
- if tag in {"replace", "insert"}:
554
- added += new_end - new_start
555
-
556
- suffix = Text()
557
- suffix.append(f"+{added}", style="green")
558
- suffix.append(f" −{removed}", style="red")
559
- return suffix
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.ensure_future(anext(provider_stream))
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
- result_data = event.data
388
- result_tool_id = str(result_data.get("tool_use_id") or "")
389
- result_model_text = str(result_data.get("model_text") or "")
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=result_tool_id,
396
- model_text=result_model_text,
397
- display_text=result_display_text,
398
- is_error=result_is_error,
399
- content=result_content if isinstance(result_content, list) else None,
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
- tool_was_cancelled = result_model_text == "error: cancelled"
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
- context_window if isinstance(context_window, int) and not isinstance(context_window, bool) else None
143
- ),
144
- max_output_tokens=max_output_tokens
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, _provider in _available_provider_references(settings):
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, _provider in _available_provider_references(settings):
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
- model_metadata = ModelMetadata(
476
- provider=model_metadata.provider,
477
- model=model_metadata.model,
478
- context_window=(
479
- model_config.context_window
480
- if model_config.context_window is not None
481
- else model_metadata.context_window
482
- ),
483
- max_output_tokens=(
484
- model_config.max_output_tokens
485
- if model_config.max_output_tokens is not None
486
- else model_metadata.max_output_tokens
487
- ),
488
- supports_reasoning=(
489
- model_config.supports_reasoning
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
- _MODELS_CATALOG_PATH = Path(__file__).with_name("models_catalog.json")
11
+ from mycode.core.utils import as_bool, as_int
11
12
 
12
- _models_catalog_cache: dict[str, Any] | None = None
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=_as_int(raw_model.get("context_window")),
100
- max_output_tokens=_as_int(raw_model.get("max_output_tokens")),
101
- supports_reasoning=raw_model.get("supports_reasoning")
102
- if isinstance(raw_model.get("supports_reasoning"), bool)
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 normalized model id."""
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
  get_native_meta,
20
20
  load_image_block_payload,
21
21
  )
22
- from mycode.core.tools import parse_tool_arguments
22
+ from mycode.core.utils import parse_tool_arguments
23
23
 
24
24
 
25
25
  @dataclass
@@ -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.tools import parse_tool_arguments
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
- # Then collect tool results that were actually recorded after it.
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 not sdir.exists():
439
- return
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 from ``system_prompt.md``
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
- try:
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: