mycode-cli 0.14.2__tar.gz → 0.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/PKG-INFO +2 -2
  2. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/pyproject.toml +2 -2
  3. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/config.py +36 -30
  4. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/main.py +25 -11
  5. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/permissions.py +4 -7
  6. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/runtime.py +3 -13
  7. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/app.py +18 -3
  8. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/deps.py +8 -12
  9. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/routers/chat.py +11 -10
  10. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/routers/sessions.py +13 -15
  11. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/routers/settings.py +10 -8
  12. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/routers/workspaces.py +2 -2
  13. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/run_manager.py +91 -49
  14. mycode_cli-0.14.2/src/mycode_cli/server/static/assets/index-DzNDonIR.js → mycode_cli-0.16.0/src/mycode_cli/server/static/assets/index-CT9f_Z06.js +2 -2
  15. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/index.html +1 -1
  16. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/sessions.py +32 -2
  17. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/system_prompt.py +5 -4
  18. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tools.py +23 -21
  19. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tui/chat.py +21 -41
  20. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tui/render.py +39 -33
  21. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/.gitignore +0 -0
  22. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/LICENSE +0 -0
  23. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/README.md +0 -0
  24. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/hatch_build.py +0 -0
  25. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/__init__.py +0 -0
  26. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/__init__.py +0 -0
  27. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/routers/__init__.py +0 -0
  28. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/schemas.py +0 -0
  29. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/EditDiff-DOjxGJl-.js +0 -0
  30. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  31. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  32. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  33. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  34. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  35. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  36. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  37. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  38. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  39. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  40. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  41. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  42. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  43. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  44. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  45. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  46. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  47. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  48. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  49. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  50. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  51. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  52. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  53. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  54. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  55. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  56. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  57. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  58. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  59. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  60. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  61. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  62. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  63. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  64. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  65. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  66. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  67. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  68. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  69. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  70. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  71. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  72. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  73. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  74. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  75. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  76. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  77. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  78. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  79. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  80. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  81. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  82. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  83. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  84. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  85. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  86. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  87. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  88. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  89. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ThemeProvider-zTKbpxjH.js +0 -0
  90. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
  91. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
  92. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
  93. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
  94. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/angular-html-BVBpGdXr.js +0 -0
  95. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/angular-ts-BfdufMKP.js +0 -0
  96. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
  97. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/apex-VAyPSnFM.js +0 -0
  98. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/apl-DWBSSoBH.js +0 -0
  99. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
  100. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
  101. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
  102. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
  103. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/astro-3LtMP0Sq.js +0 -0
  104. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
  105. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
  106. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  107. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
  108. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  109. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
  110. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
  111. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
  112. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
  113. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
  114. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
  115. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/bird2-C6vDhewU.js +0 -0
  116. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/blade-llJRbbtR.js +0 -0
  117. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
  118. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
  119. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/c3-BFHwR3_K.js +0 -0
  120. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
  121. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
  122. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  123. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  124. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  125. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  126. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
  127. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
  128. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
  129. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cobol-x_HIyl2P.js +0 -0
  130. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
  131. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
  132. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
  133. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  134. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
  135. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cpp-NtAeskI3.js +0 -0
  136. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/crystal-DNu_sX0G.js +0 -0
  137. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/csharp-oqKa8noW.js +0 -0
  138. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/css-DJp_X0uY.js +0 -0
  139. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
  140. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
  141. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
  142. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
  143. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
  144. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dart-CnvKMtbv.js +0 -0
  145. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
  146. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
  147. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
  148. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
  149. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
  150. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
  151. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
  152. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  153. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/edge-ozw5tpLl.js +0 -0
  154. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/elixir-VhA6FeZt.js +0 -0
  155. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
  156. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/emacs-lisp-B4R74twV.js +0 -0
  157. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/engine-compile-Cbfz3NVV.js +0 -0
  158. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/erb-CIg6G69l.js +0 -0
  159. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
  160. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  161. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
  162. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
  163. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
  164. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
  165. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  166. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  167. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
  168. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
  169. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
  170. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
  171. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
  172. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
  173. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
  174. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
  175. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
  176. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  177. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  178. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  179. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
  180. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
  181. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  182. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
  183. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/glimmer-js-vH_gHG0-.js +0 -0
  184. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/glimmer-ts--abOzSAQ.js +0 -0
  185. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
  186. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
  187. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
  188. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/go-rLFTqkRN.js +0 -0
  189. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
  190. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
  191. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  192. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  193. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  194. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  195. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  196. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  197. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hack-DvEYX148.js +0 -0
  198. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/haml-zE6W3STP.js +0 -0
  199. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/handlebars-CzBR2SDs.js +0 -0
  200. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
  201. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
  202. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
  203. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/highlighter-CZbuWYc3.js +0 -0
  204. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
  205. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
  206. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
  207. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/horizon-bright-DSNQnXHK.js +0 -0
  208. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
  209. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/html-C8UlPnhE.js +0 -0
  210. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/html-derivative-CY6NRz-J.js +0 -0
  211. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
  212. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
  213. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
  214. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
  215. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
  216. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/index-g5_LkRCI.css +0 -0
  217. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
  218. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
  219. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
  220. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jinja-CD-Z-FLd.js +0 -0
  221. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
  222. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
  223. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
  224. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
  225. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
  226. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  227. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
  228. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
  229. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/julia-Dc3O-irA.js +0 -0
  230. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/just-BhOq_Kbv.js +0 -0
  231. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  232. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  233. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  234. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
  235. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
  236. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/kusto-C7mF5XQf.js +0 -0
  237. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
  238. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/latex-Cu4Y1d5w.js +0 -0
  239. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
  240. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
  241. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
  242. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/liquid-CvXMrjlQ.js +0 -0
  243. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
  244. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
  245. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
  246. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
  247. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/luau-FMPmPwt6.js +0 -0
  248. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
  249. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
  250. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/marko-DvhNOisQ.js +0 -0
  251. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
  252. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  253. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  254. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  255. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  256. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
  257. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/mdc-Bm9TpL1X.js +0 -0
  258. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
  259. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
  260. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
  261. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
  262. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
  263. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
  264. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
  265. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
  266. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
  267. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
  268. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nextflow-BJtWHP5T.js +0 -0
  269. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nextflow-groovy-DJMQeKeT.js +0 -0
  270. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
  271. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
  272. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  273. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nim-DXTVBFnF.js +0 -0
  274. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
  275. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
  276. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
  277. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
  278. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  279. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
  280. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
  281. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  282. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
  283. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
  284. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
  285. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/perl-C7veXV9z.js +0 -0
  286. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/php-BRiuMnnr.js +0 -0
  287. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-dark-sU4Zdns8.js +0 -0
  288. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-dark-soft-HXgun5vs.js +0 -0
  289. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-dark-vibrant-D4RhcSIK.js +0 -0
  290. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-light-DWBk51d8.js +0 -0
  291. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-light-soft-CodEzPxf.js +0 -0
  292. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pierre-light-vibrant-B76X7i5Y.js +0 -0
  293. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
  294. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
  295. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
  296. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
  297. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
  298. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
  299. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
  300. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
  301. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
  302. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/preload-helper-FMEmyu_K.js +0 -0
  303. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
  304. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
  305. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
  306. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/pug-C5hz5LQ7.js +0 -0
  307. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
  308. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
  309. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
  310. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
  311. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
  312. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
  313. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
  314. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
  315. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
  316. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/razor-DRL52XO2.js +0 -0
  317. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
  318. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
  319. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
  320. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
  321. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
  322. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  323. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
  324. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
  325. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  326. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  327. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
  328. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rst-BHX71KW9.js +0 -0
  329. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ruby-B--HzjGU.js +0 -0
  330. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
  331. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/sas-DrLaYOK_.js +0 -0
  332. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
  333. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
  334. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
  335. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/scss-DdSxiZKl.js +0 -0
  336. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
  337. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
  338. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
  339. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
  340. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
  341. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  342. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
  343. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  344. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
  345. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
  346. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
  347. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/soy-Br5FhD7c.js +0 -0
  348. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
  349. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
  350. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/sql-DNssxck8.js +0 -0
  351. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
  352. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/stata-DXn1tqOr.js +0 -0
  353. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
  354. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
  355. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/svelte-DOdLCIlh.js +0 -0
  356. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
  357. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  358. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  359. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
  360. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
  361. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
  362. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
  363. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/templ-CIwIngms.js +0 -0
  364. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
  365. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
  366. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  367. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
  368. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/ts-tags-BMVY4q-l.js +0 -0
  369. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
  370. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
  371. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
  372. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/twig-C8o_5mgw.js +0 -0
  373. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
  374. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/typespec-BRdr0IET.js +0 -0
  375. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
  376. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
  377. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
  378. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
  379. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
  380. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vesper-DdrHHSXu.js +0 -0
  381. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
  382. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
  383. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  384. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  385. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
  386. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vue-BU18DNDL.js +0 -0
  387. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
  388. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vue-vine-DGUAbOCX.js +0 -0
  389. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
  390. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
  391. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
  392. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
  393. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
  394. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
  395. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
  396. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
  397. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
  398. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
  399. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
  400. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
  401. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
  402. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
  403. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
  404. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
  405. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
  406. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tui/__init__.py +0 -0
  407. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tui/state.py +0 -0
  408. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/tui/theme.py +0 -0
  409. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/web_tools.py +0 -0
  410. {mycode_cli-0.14.2 → mycode_cli-0.16.0}/src/mycode_cli/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: mycode-cli
3
- Version: 0.14.2
3
+ Version: 0.16.0
4
4
  Summary: Minimal coding agent CLI and web UI built on mycode-sdk.
5
5
  Project-URL: Homepage, https://github.com/legibet/mycode
6
6
  Project-URL: Repository, https://github.com/legibet/mycode
@@ -25,7 +25,7 @@ Requires-Dist: beautifulsoup4>=4.15.0
25
25
  Requires-Dist: fastapi>=0.139.0
26
26
  Requires-Dist: httpx2>=2.10.0
27
27
  Requires-Dist: markdownify>=1.2.3
28
- Requires-Dist: mycode-sdk==0.14.2
28
+ Requires-Dist: mycode-sdk==0.16.0
29
29
  Requires-Dist: prompt-toolkit>=3.0.52
30
30
  Requires-Dist: pydantic>=2.13.4
31
31
  Requires-Dist: pyyaml>=6.0.3
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mycode-cli"
7
- version = "0.14.2"
7
+ version = "0.16.0"
8
8
  description = "Minimal coding agent CLI and web UI built on mycode-sdk."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -26,7 +26,7 @@ classifiers = [
26
26
  ]
27
27
  keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
28
28
  dependencies = [
29
- "mycode-sdk==0.14.2",
29
+ "mycode-sdk==0.16.0",
30
30
  "fastapi>=0.139.0",
31
31
  "uvicorn[standard]>=0.51.0",
32
32
  "rich>=15.0.0",
@@ -71,6 +71,9 @@ class ProviderConfig:
71
71
  # Opt-in for generic openai_chat endpoints that accept the standard
72
72
  # top-level reasoning_effort param. Ignored for other provider types.
73
73
  supports_reasoning_effort: bool = False
74
+ # Opt-in for generic openai_chat endpoints that only implement the legacy
75
+ # max_tokens field. Ignored for other provider types.
76
+ legacy_max_tokens: bool = False
74
77
 
75
78
 
76
79
  @dataclass(frozen=True)
@@ -119,6 +122,7 @@ class ResolvedProvider:
119
122
  provider_name: str | None = None
120
123
  model_config: ModelConfig | None = None
121
124
  supports_reasoning_effort: bool = False
125
+ legacy_max_tokens: bool = False
122
126
  reasoning_efforts: tuple[str, ...] = ()
123
127
 
124
128
 
@@ -187,7 +191,7 @@ def parse_compact_threshold(value: Any) -> float | None:
187
191
  return None
188
192
  threshold = float(value)
189
193
 
190
- if threshold < 0 or threshold > 1:
194
+ if not 0 <= threshold <= 1:
191
195
  return None
192
196
  return threshold
193
197
 
@@ -434,6 +438,12 @@ def _validate_provider_config(name: str, raw: Any) -> dict[str, Any]:
434
438
  raise ValueError(f"provider {name!r}: supports_reasoning_effort must be a boolean")
435
439
  out["supports_reasoning_effort"] = supports_effort
436
440
 
441
+ legacy_max_tokens = raw.get("legacy_max_tokens")
442
+ if legacy_max_tokens is not None:
443
+ if not isinstance(legacy_max_tokens, bool):
444
+ raise ValueError(f"provider {name!r}: legacy_max_tokens must be a boolean")
445
+ out["legacy_max_tokens"] = legacy_max_tokens
446
+
437
447
  raw_models = raw.get("models")
438
448
  if raw_models is not None:
439
449
  models = _validate_model_config_entries(name, raw_models)
@@ -504,45 +514,39 @@ def get_settings(cwd: str | None = None) -> Settings:
504
514
  if resolved_path not in config_paths:
505
515
  config_paths.append(resolved_path)
506
516
 
507
- for name, raw in (data.get("providers") or {}).items():
508
- if not isinstance(name, str) or not isinstance(raw, dict):
509
- continue
510
-
517
+ for name, raw in data.get("providers", {}).items():
511
518
  merged = dict(raw_providers.get(name, {}))
512
519
 
513
520
  if "type" in raw:
514
- merged["type"] = raw.get("type") or "anthropic"
521
+ merged["type"] = raw["type"]
515
522
  if "models" in raw:
516
- merged["models"] = raw.get("models")
523
+ merged["models"] = raw["models"]
517
524
  if "api_key" in raw:
518
- api_key, api_key_env_var = _parse_config_api_key(raw.get("api_key"))
525
+ api_key, api_key_env_var = _parse_config_api_key(raw["api_key"])
519
526
  merged["api_key"] = api_key
520
527
  merged["api_key_env_var"] = api_key_env_var
521
528
  if "base_url" in raw:
522
- merged["base_url"] = raw.get("base_url") or None
529
+ merged["base_url"] = raw["base_url"]
523
530
  if "supports_reasoning_effort" in raw:
524
- merged["supports_reasoning_effort"] = raw.get("supports_reasoning_effort")
531
+ merged["supports_reasoning_effort"] = raw["supports_reasoning_effort"]
532
+ if "legacy_max_tokens" in raw:
533
+ merged["legacy_max_tokens"] = raw["legacy_max_tokens"]
525
534
 
526
535
  raw_providers[name] = merged
527
536
 
528
- default = data.get("default")
529
- if isinstance(default, dict):
530
- if "provider" in default:
531
- v = default.get("provider")
532
- default_provider = v if isinstance(v, str) else None
533
- if "model" in default:
534
- v = default.get("model")
535
- default_model = v if isinstance(v, str) else None
536
- if "compact_threshold" in default:
537
- parsed_threshold = parse_compact_threshold(default.get("compact_threshold"))
538
- if parsed_threshold is not None:
539
- compact_threshold = parsed_threshold
537
+ default = data.get("default", {})
538
+ if "provider" in default:
539
+ default_provider = default["provider"]
540
+ if "model" in default:
541
+ default_model = default["model"]
542
+ if "compact_threshold" in default:
543
+ compact_threshold = float(default["compact_threshold"])
540
544
 
541
545
  if "permission" in data:
542
546
  permission = parse_permission(data.get("permission"), permission)
543
547
 
544
- if data.get("web") is not None:
545
- web = _validate_web_config(data["web"])
548
+ if "web" in data:
549
+ web = data["web"]
546
550
  for key in ("fetch", "search"):
547
551
  if key in web:
548
552
  raw_web[key] = web[key]
@@ -631,6 +635,7 @@ def _build_providers(raw_providers: dict[str, dict[str, Any]]) -> dict[str, Prov
631
635
  api_key_env_var=raw.get("api_key_env_var") or None,
632
636
  base_url=raw.get("base_url") or None,
633
637
  supports_reasoning_effort=raw.get("supports_reasoning_effort") is True,
638
+ legacy_max_tokens=raw.get("legacy_max_tokens") is True,
634
639
  )
635
640
 
636
641
  return providers
@@ -768,14 +773,12 @@ def _available_provider_references(settings: Settings) -> list[str]:
768
773
 
769
774
  add(settings.default_provider)
770
775
 
771
- for name, provider in settings.providers.items():
772
- if provider_is_available(provider):
773
- add(name)
776
+ for name in settings.providers:
777
+ add(name)
774
778
 
775
779
  for provider_id in list_env_discoverable_providers():
776
- if provider_id in configured_types_with_credentials or not provider_api_key_from_env(provider_id):
777
- continue
778
- add(provider_id)
780
+ if provider_id not in configured_types_with_credentials:
781
+ add(provider_id)
779
782
 
780
783
  return available
781
784
 
@@ -825,6 +828,8 @@ def _resolve_provider_runtime(
825
828
  supports_effort = adapter.supports_reasoning_effort or bool(
826
829
  provider_config and provider_config.supports_reasoning_effort and isinstance(adapter, OpenAIChatAdapter)
827
830
  )
831
+ # The legacy max_tokens opt-in only applies to generic openai_chat providers.
832
+ legacy_max_tokens = bool(provider_config and provider_config.legacy_max_tokens and provider_type == "openai_chat")
828
833
  resolved_api_key = api_key
829
834
  if not resolved_api_key and provider_config:
830
835
  if env_name := provider_config.api_key_env_var:
@@ -851,5 +856,6 @@ def _resolve_provider_runtime(
851
856
  reasoning_effort=None,
852
857
  model_config=model_config,
853
858
  supports_reasoning_effort=supports_effort,
859
+ legacy_max_tokens=legacy_max_tokens,
854
860
  reasoning_efforts=reasoning_efforts,
855
861
  )
@@ -5,9 +5,9 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  import os
7
7
  import sys
8
- from contextlib import suppress
8
+ from contextlib import aclosing, suppress
9
9
  from dataclasses import dataclass, replace
10
- from typing import Annotated, Any, Literal
10
+ from typing import TYPE_CHECKING, Annotated, Any, Literal
11
11
  from uuid import uuid4
12
12
 
13
13
  import typer
@@ -28,8 +28,9 @@ from mycode_cli.permissions import PERMISSION_DENIED_BY_USER_OUTPUT, PERMISSION_
28
28
  from mycode_cli.sessions import SessionStore
29
29
 
30
30
  from .runtime import build_agent
31
- from .tui.chat import TerminalChat
32
- from .tui.render import TerminalView
31
+
32
+ if TYPE_CHECKING:
33
+ from .tui.render import TerminalView
33
34
 
34
35
  app = typer.Typer(add_completion=False, pretty_exceptions_enable=False)
35
36
  session_app = typer.Typer(help="Session management")
@@ -106,13 +107,14 @@ async def run_noninteractive(agent: Agent, message: str, *, store: SessionStore,
106
107
  latest_assistant = payload
107
108
 
108
109
  error_message = ""
109
- async for event in agent.achat(message, on_persist=track):
110
- if event.type == "error":
111
- error_message = str(event.data.get("message") or "agent error")
112
- elif event.type == "tool_done" and event.data.get("is_error"):
113
- output = str(event.data.get("output") or "")
114
- if output in {PERMISSION_DENIED_OUTPUT, PERMISSION_DENIED_BY_USER_OUTPUT}:
115
- error_message = output
110
+ async with aclosing(agent.achat(message, on_persist=track)) as stream:
111
+ async for event in stream:
112
+ if event.type == "error":
113
+ error_message = str(event.data.get("message") or "agent error")
114
+ elif event.type == "tool_done" and event.data.get("is_error"):
115
+ output = str(event.data.get("output") or "")
116
+ if output in {PERMISSION_DENIED_OUTPUT, PERMISSION_DENIED_BY_USER_OUTPUT}:
117
+ error_message = output
116
118
 
117
119
  reply = ""
118
120
  if latest_assistant:
@@ -157,6 +159,8 @@ def _bootstrap(
157
159
  ) -> _BootstrapContext:
158
160
  """Shared setup for the chat and run commands."""
159
161
 
162
+ from .tui.render import TerminalView
163
+
160
164
  if session and continue_last:
161
165
  raise typer.BadParameter("--session and --continue are mutually exclusive")
162
166
 
@@ -244,6 +248,8 @@ def chat(
244
248
  if ctx.invoked_subcommand is not None:
245
249
  return
246
250
 
251
+ from .tui.chat import TerminalChat
252
+
247
253
  setup = _bootstrap(
248
254
  provider=provider,
249
255
  model=model,
@@ -323,6 +329,7 @@ def web(
323
329
  resolved_port = port or settings.port
324
330
 
325
331
  import uvicorn
332
+ from uvicorn.config import LOGGING_CONFIG
326
333
 
327
334
  app_factory = "mycode_cli.server.app:create_web_app"
328
335
  if dev:
@@ -334,6 +341,11 @@ def web(
334
341
  port=resolved_port,
335
342
  reload=dev,
336
343
  factory=True,
344
+ timeout_graceful_shutdown=5,
345
+ log_config={
346
+ **LOGGING_CONFIG,
347
+ "root": {"handlers": ["default"], "level": "INFO"},
348
+ },
337
349
  )
338
350
 
339
351
 
@@ -343,6 +355,8 @@ def session_list(
343
355
  ) -> None:
344
356
  """List saved sessions."""
345
357
 
358
+ from .tui.render import TerminalView
359
+
346
360
  cwd = os.path.abspath(os.getcwd())
347
361
  store = SessionStore(data_dir=resolve_sessions_dir())
348
362
  view = TerminalView()
@@ -13,7 +13,6 @@ from mycode_cli.config import PermissionConfig, PermissionLevel, Settings
13
13
  from mycode_cli.system_prompt import discover_skills
14
14
  from mycode_cli.workspace import CliDeps, resolve_path
15
15
 
16
- PermissionTier = Literal["readonly", "safe", "standard", "yolo"]
17
16
  PermissionDecision = Literal["allow", "ask", "deny"]
18
17
  ToolReviewDecision = Literal["allow", "deny"]
19
18
 
@@ -54,7 +53,7 @@ _FIND_DANGEROUS_FLAGS = {
54
53
 
55
54
 
56
55
  class PermissionCheck(NamedTuple):
57
- tier: PermissionTier
56
+ tier: PermissionLevel
58
57
  preview: str
59
58
 
60
59
 
@@ -102,10 +101,8 @@ def build_permission_hooks(
102
101
  return hooks
103
102
 
104
103
 
105
- def permission_decision(permission: PermissionConfig, tier: PermissionTier) -> PermissionDecision:
106
- if permission.level == "yolo":
107
- return "allow"
108
- if tier != "yolo" and _LEVEL_RANK[tier] <= _LEVEL_RANK[permission.level]:
104
+ def permission_decision(permission: PermissionConfig, tier: PermissionLevel) -> PermissionDecision:
105
+ if _LEVEL_RANK[tier] <= _LEVEL_RANK[permission.level]:
109
106
  return "allow"
110
107
  return permission.mode
111
108
 
@@ -147,7 +144,7 @@ def classify_tool(
147
144
  return PermissionCheck("yolo", ctx.tool_name)
148
145
 
149
146
 
150
- def _classify_bash(command: str) -> PermissionTier:
147
+ def _classify_bash(command: str) -> PermissionLevel:
151
148
  if not command:
152
149
  return "yolo"
153
150
  # Newlines and shell expansion bypass static analysis; treat as compound.
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  from mycode.agent import Agent
6
6
  from mycode_cli.config import ResolvedProvider, Settings
7
7
  from mycode_cli.permissions import ToolReviewCallback, build_permission_hooks
8
- from mycode_cli.sessions import SessionStore
8
+ from mycode_cli.sessions import SessionStore, sum_session_cost
9
9
  from mycode_cli.system_prompt import build_system_prompt
10
10
  from mycode_cli.tools import DEFAULT_TOOLS
11
11
  from mycode_cli.web_tools import build_web_tools
@@ -24,18 +24,7 @@ async def load_session_cost(store: SessionStore, session_id: str) -> float | Non
24
24
  discarded by rewind. Records without a cost are skipped.
25
25
  """
26
26
 
27
- total: float | None = None
28
- for message in await store.load_raw_messages(session_id):
29
- if message.get("role") not in {"assistant", "compact"}:
30
- continue
31
- meta = message.get("meta") or {}
32
- cost = meta.get("cost")
33
- if not isinstance(cost, dict):
34
- continue
35
- request_total = cost.get("total")
36
- if isinstance(request_total, int | float):
37
- total = sum_known_costs(total, float(request_total))
38
- return total
27
+ return sum_session_cost(await store.load_raw_messages(session_id))
39
28
 
40
29
 
41
30
  def build_agent(
@@ -65,6 +54,7 @@ def build_agent(
65
54
  api_base=resolved_provider.api_base,
66
55
  reasoning_effort=resolved_provider.reasoning_effort,
67
56
  supports_reasoning_effort=resolved_provider.supports_reasoning_effort,
57
+ legacy_max_tokens=resolved_provider.legacy_max_tokens,
68
58
  max_tokens=model_config.max_output_tokens if model_config else None,
69
59
  context_window=model_config.context_window if model_config else None,
70
60
  supports_image_input=model_config.supports_image_input if model_config else None,
@@ -1,20 +1,24 @@
1
1
  """FastAPI application entry point."""
2
2
 
3
+ import asyncio
3
4
  import logging
4
- from collections.abc import Sequence
5
+ from collections.abc import AsyncGenerator, Sequence
6
+ from contextlib import asynccontextmanager
5
7
  from pathlib import Path
6
8
 
7
9
  from fastapi import FastAPI
8
10
  from fastapi.middleware.cors import CORSMiddleware
9
11
  from fastapi.staticfiles import StaticFiles
10
12
 
13
+ from mycode_cli.config import resolve_sessions_dir
11
14
  from mycode_cli.server.routers.chat import router as chat_router
12
15
  from mycode_cli.server.routers.sessions import router as sessions_router
13
16
  from mycode_cli.server.routers.settings import router as settings_router
14
17
  from mycode_cli.server.routers.workspaces import router as workspaces_router
18
+ from mycode_cli.server.run_manager import RunManager
19
+ from mycode_cli.sessions import SessionStore
15
20
 
16
21
  logger = logging.getLogger(__name__)
17
- logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
18
22
  DEV_CORS_ORIGINS = ("http://localhost:5173", "http://127.0.0.1:5173")
19
23
 
20
24
 
@@ -24,9 +28,20 @@ def web_static_path() -> Path:
24
28
  return Path(__file__).resolve().parent / "static"
25
29
 
26
30
 
31
+ @asynccontextmanager
32
+ async def lifespan(app: FastAPI) -> AsyncGenerator[None]:
33
+ app.state.store = await asyncio.to_thread(SessionStore, data_dir=resolve_sessions_dir())
34
+ runs = RunManager()
35
+ app.state.runs = runs
36
+ try:
37
+ yield
38
+ finally:
39
+ await runs.aclose()
40
+
41
+
27
42
  def create_app(*, serve_web: bool = True, cors_origins: Sequence[str] = ()) -> FastAPI:
28
43
  """Create the FastAPI app."""
29
- application = FastAPI(title="mycode")
44
+ application = FastAPI(title="mycode", lifespan=lifespan)
30
45
 
31
46
  if cors_origins:
32
47
  application.add_middleware(
@@ -3,12 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import os
6
- from functools import cache
7
- from typing import Annotated
6
+ from typing import Annotated, cast
8
7
 
9
- from fastapi import Depends, HTTPException
8
+ from fastapi import Depends, HTTPException, Request
10
9
 
11
- from mycode_cli.config import resolve_sessions_dir
12
10
  from mycode_cli.server.run_manager import RunManager
13
11
  from mycode_cli.sessions import SessionStore
14
12
 
@@ -22,18 +20,16 @@ def resolve_workspace_cwd(raw: str | None) -> str:
22
20
  return cwd
23
21
 
24
22
 
25
- @cache
26
- def get_store() -> SessionStore:
27
- """Return the shared session store for server requests."""
23
+ async def get_store(request: Request) -> SessionStore:
24
+ """Return this application's session store."""
28
25
 
29
- return SessionStore(data_dir=resolve_sessions_dir())
26
+ return cast(SessionStore, request.app.state.store)
30
27
 
31
28
 
32
- @cache
33
- def get_run_manager() -> RunManager:
34
- """Return the shared in-process run manager."""
29
+ async def get_run_manager(request: Request) -> RunManager:
30
+ """Return this application's run manager."""
35
31
 
36
- return RunManager()
32
+ return cast(RunManager, request.app.state.runs)
37
33
 
38
34
 
39
35
  StoreDep = Annotated[SessionStore, Depends(get_store)]
@@ -63,7 +63,7 @@ router = APIRouter()
63
63
  def _resolve_workspace_attachment_path(rel_path: str, *, cwd: str) -> Path:
64
64
  base = resolve_path(".", cwd=cwd)
65
65
  path = resolve_path(rel_path, cwd=cwd)
66
- if base != path and not path.is_relative_to(base):
66
+ if not path.is_relative_to(base):
67
67
  raise HTTPException(status_code=400, detail=f"path outside workspace: {rel_path}")
68
68
  return path
69
69
 
@@ -97,7 +97,9 @@ async def _build_user_message(chat: ChatRequest, cwd: str) -> ConversationMessag
97
97
  for block in chat.input:
98
98
  if block.type == "text":
99
99
  if block.path:
100
- blocks.extend(_read_workspace_text_attachment(block.path, name=block.name, cwd=cwd))
100
+ blocks.extend(
101
+ await asyncio.to_thread(_read_workspace_text_attachment, block.path, name=block.name, cwd=cwd)
102
+ )
101
103
  continue
102
104
  text = block.text or ""
103
105
  if block.is_attachment:
@@ -145,11 +147,8 @@ def _validate_rewind_request(
145
147
  *,
146
148
  session: dict[str, Any] | None,
147
149
  messages: list[ConversationMessage],
148
- rewind_to: int | None,
150
+ rewind_to: int,
149
151
  ) -> None:
150
- if rewind_to is None:
151
- return
152
-
153
152
  if session is None:
154
153
  raise HTTPException(status_code=400, detail="rewind_to requires an existing session")
155
154
 
@@ -236,10 +235,11 @@ async def chat(chat: ChatRequest, store: StoreDep, runs: RunManagerDep) -> ChatR
236
235
  detail={"message": "session already has a running task", "run": active},
237
236
  )
238
237
 
239
- data = await store.load_session(session_id)
240
- session = cast(dict[str, Any] | None, data["session"] if data else None)
241
- existing_messages = data["messages"] if data else []
242
- _validate_rewind_request(session=session, messages=existing_messages, rewind_to=chat.rewind_to)
238
+ if chat.rewind_to is not None:
239
+ data = await store.load_session(session_id)
240
+ session = cast(dict[str, Any] | None, data["session"] if data else None)
241
+ existing_messages = data["messages"] if data else []
242
+ _validate_rewind_request(session=session, messages=existing_messages, rewind_to=chat.rewind_to)
243
243
 
244
244
  # All validation passed. Land the rewind marker (if any) and register
245
245
  # the user turn in the catalog: first turn creates the entry and sets
@@ -374,6 +374,7 @@ async def compact_session(
374
374
  session_id=session_id,
375
375
  base_messages=agent.messages,
376
376
  agent=agent,
377
+ session_cost_base=data["session_cost"],
377
378
  on_complete=store.touch,
378
379
  )
379
380
  except ActiveRunError as exc:
@@ -9,7 +9,6 @@ from fastapi import APIRouter, HTTPException, Query
9
9
  from fastapi import Path as PathParam
10
10
 
11
11
  from mycode.messages import ConversationMessage
12
- from mycode_cli.runtime import load_session_cost
13
12
  from mycode_cli.server.deps import RunManagerDep, StoreDep, resolve_workspace_cwd
14
13
  from mycode_cli.server.schemas import SessionCreateRequest, StatusResponse
15
14
 
@@ -57,19 +56,18 @@ async def load_session(
57
56
  ) -> dict[str, Any]:
58
57
  """Load a session, overlaying any active in-memory run state."""
59
58
 
60
- data = await store.load_session(session_id)
61
- # Folded from the raw JSONL: counts everything persisted so far, including
62
- # rewound-away turns. During an active run the SSE usage events supersede it.
63
- session_cost = await load_session_cost(store, session_id)
64
- active = await runs.snapshot_session(session_id)
65
- if active:
66
- return {
67
- "session": data["session"] if data else None,
68
- "messages": _redact_document_data(active["messages"]),
69
- "session_cost": session_cost,
70
- "active_run": active["run"],
71
- "pending_events": active["pending_events"],
72
- }
59
+ async with runs.session_operation(session_id):
60
+ active = await runs.snapshot_session(session_id)
61
+ if active:
62
+ return {
63
+ "session": await store.load_metadata(session_id),
64
+ "messages": _redact_document_data(active["messages"]),
65
+ "session_cost": active["session_cost"],
66
+ "active_run": active["run"],
67
+ "pending_events": active["pending_events"],
68
+ }
69
+
70
+ data = await store.load_session(session_id)
73
71
 
74
72
  if data is None:
75
73
  return {"session": None, "messages": [], "session_cost": None, "active_run": None, "pending_events": []}
@@ -77,7 +75,7 @@ async def load_session(
77
75
  return {
78
76
  "session": data["session"],
79
77
  "messages": _redact_document_data(data["messages"]),
80
- "session_cost": session_cost,
78
+ "session_cost": data["session_cost"],
81
79
  "active_run": None,
82
80
  "pending_events": [],
83
81
  }
@@ -168,14 +168,16 @@ def put_settings_endpoint(payload: SettingsRequest) -> dict[str, Any]:
168
168
  # Three-state api_key merge: when the UI sends null / omits it, we copy the
169
169
  # existing literal forward so secrets survive a save without round-tripping.
170
170
  existing_providers = existing.get("providers") or {}
171
- for name, entry in (incoming.get("providers") or {}).items():
172
- if not isinstance(entry, dict) or entry.get("api_key") is not None:
173
- continue
174
- prior = existing_providers.get(name) if isinstance(existing_providers, dict) else None
175
- if isinstance(prior, dict) and "api_key" in prior:
176
- entry["api_key"] = prior["api_key"]
177
- else:
178
- entry.pop("api_key", None)
171
+ incoming_providers = incoming.get("providers")
172
+ if isinstance(incoming_providers, dict):
173
+ for name, entry in incoming_providers.items():
174
+ if not isinstance(entry, dict) or entry.get("api_key") is not None:
175
+ continue
176
+ prior = existing_providers.get(name) if isinstance(existing_providers, dict) else None
177
+ if isinstance(prior, dict) and "api_key" in prior:
178
+ entry["api_key"] = prior["api_key"]
179
+ else:
180
+ entry.pop("api_key", None)
179
181
 
180
182
  existing_web = existing.get("web") or {}
181
183
  incoming_web = incoming.get("web") or {}
@@ -121,7 +121,7 @@ def list_workspace_files(
121
121
 
122
122
  target = (base / dir).resolve(strict=False)
123
123
  # Reject traversal outside cwd after resolving symlinks.
124
- if target != base and not target.is_relative_to(base):
124
+ if not target.is_relative_to(base):
125
125
  return {"entries": [], "truncated": False, "error": "path outside workspace"}
126
126
  if not target.is_dir():
127
127
  return {"entries": [], "truncated": False, "error": "not a directory"}
@@ -133,7 +133,7 @@ def list_workspace_files(
133
133
  continue
134
134
  try:
135
135
  resolved = entry.resolve()
136
- if resolved != base and not resolved.is_relative_to(base):
136
+ if not resolved.is_relative_to(base):
137
137
  continue
138
138
  is_dir = entry.is_dir()
139
139
  except OSError: