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