mycode-cli 0.14.1__tar.gz → 0.15.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.1 → mycode_cli-0.15.0}/PKG-INFO +2 -2
  2. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/pyproject.toml +2 -2
  3. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/config.py +20 -30
  4. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/main.py +16 -3
  5. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/permissions.py +4 -7
  6. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/runtime.py +2 -13
  7. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/app.py +18 -3
  8. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/deps.py +8 -12
  9. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/routers/chat.py +11 -10
  10. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/routers/sessions.py +13 -15
  11. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/routers/settings.py +10 -8
  12. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/routers/workspaces.py +2 -2
  13. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/run_manager.py +70 -33
  14. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/sessions.py +32 -2
  15. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/system_prompt.py +5 -4
  16. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tools.py +23 -21
  17. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tui/chat.py +21 -40
  18. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tui/render.py +3 -2
  19. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/.gitignore +0 -0
  20. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/LICENSE +0 -0
  21. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/README.md +0 -0
  22. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/hatch_build.py +0 -0
  23. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/__init__.py +0 -0
  24. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/__init__.py +0 -0
  25. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/routers/__init__.py +0 -0
  26. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/schemas.py +0 -0
  27. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/EditDiff-DOjxGJl-.js +0 -0
  28. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  29. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  30. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  31. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  32. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  33. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  34. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  35. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  36. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  37. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  38. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  39. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  40. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  41. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  42. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  43. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  44. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  45. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  46. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  47. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  48. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  49. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  50. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  51. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  52. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  53. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  54. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  55. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  56. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  57. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  58. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  59. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  60. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  61. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  62. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  63. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  64. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  65. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  66. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  67. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  68. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  69. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  70. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  71. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  72. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  73. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  74. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  75. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  76. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  77. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  78. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  79. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  80. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  81. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  82. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  83. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  84. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  85. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  86. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  87. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ThemeProvider-zTKbpxjH.js +0 -0
  88. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
  89. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
  90. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
  91. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
  92. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/angular-html-BVBpGdXr.js +0 -0
  93. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/angular-ts-BfdufMKP.js +0 -0
  94. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
  95. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/apex-VAyPSnFM.js +0 -0
  96. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/apl-DWBSSoBH.js +0 -0
  97. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
  98. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
  99. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
  100. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
  101. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/astro-3LtMP0Sq.js +0 -0
  102. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
  103. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
  104. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  105. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
  106. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  107. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
  108. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
  109. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
  110. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
  111. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
  112. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
  113. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/bird2-C6vDhewU.js +0 -0
  114. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/blade-llJRbbtR.js +0 -0
  115. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
  116. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
  117. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/c3-BFHwR3_K.js +0 -0
  118. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
  119. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
  120. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  121. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  122. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  123. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  124. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
  125. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
  126. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
  127. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cobol-x_HIyl2P.js +0 -0
  128. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
  129. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
  130. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
  131. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  132. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
  133. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cpp-NtAeskI3.js +0 -0
  134. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/crystal-DNu_sX0G.js +0 -0
  135. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/csharp-oqKa8noW.js +0 -0
  136. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/css-DJp_X0uY.js +0 -0
  137. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
  138. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
  139. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
  140. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
  141. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
  142. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dart-CnvKMtbv.js +0 -0
  143. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
  144. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
  145. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
  146. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
  147. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
  148. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
  149. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
  150. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  151. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/edge-ozw5tpLl.js +0 -0
  152. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/elixir-VhA6FeZt.js +0 -0
  153. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
  154. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/emacs-lisp-B4R74twV.js +0 -0
  155. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/engine-compile-Cbfz3NVV.js +0 -0
  156. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/erb-CIg6G69l.js +0 -0
  157. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
  158. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  159. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
  160. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
  161. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
  162. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
  163. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  164. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  165. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
  166. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
  167. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
  168. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
  169. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
  170. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
  171. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
  172. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
  173. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
  174. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  175. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  176. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  177. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
  178. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
  179. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  180. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
  181. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/glimmer-js-vH_gHG0-.js +0 -0
  182. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/glimmer-ts--abOzSAQ.js +0 -0
  183. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
  184. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
  185. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
  186. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/go-rLFTqkRN.js +0 -0
  187. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
  188. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
  189. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  190. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  191. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  192. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  193. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  194. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  195. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hack-DvEYX148.js +0 -0
  196. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/haml-zE6W3STP.js +0 -0
  197. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/handlebars-CzBR2SDs.js +0 -0
  198. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
  199. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
  200. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
  201. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/highlighter-CZbuWYc3.js +0 -0
  202. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
  203. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
  204. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
  205. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/horizon-bright-DSNQnXHK.js +0 -0
  206. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
  207. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/html-C8UlPnhE.js +0 -0
  208. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/html-derivative-CY6NRz-J.js +0 -0
  209. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
  210. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
  211. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
  212. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
  213. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
  214. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/index-DzNDonIR.js +0 -0
  215. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/index-g5_LkRCI.css +0 -0
  216. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
  217. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
  218. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
  219. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jinja-CD-Z-FLd.js +0 -0
  220. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
  221. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
  222. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
  223. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
  224. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
  225. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  226. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
  227. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
  228. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/julia-Dc3O-irA.js +0 -0
  229. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/just-BhOq_Kbv.js +0 -0
  230. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  231. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  232. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  233. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
  234. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
  235. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/kusto-C7mF5XQf.js +0 -0
  236. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
  237. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/latex-Cu4Y1d5w.js +0 -0
  238. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
  239. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
  240. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
  241. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/liquid-CvXMrjlQ.js +0 -0
  242. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
  243. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
  244. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
  245. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
  246. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/luau-FMPmPwt6.js +0 -0
  247. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
  248. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
  249. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/marko-DvhNOisQ.js +0 -0
  250. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
  251. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  252. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  253. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  254. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  255. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
  256. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/mdc-Bm9TpL1X.js +0 -0
  257. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
  258. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
  259. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
  260. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
  261. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
  262. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
  263. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
  264. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
  265. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
  266. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
  267. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nextflow-BJtWHP5T.js +0 -0
  268. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nextflow-groovy-DJMQeKeT.js +0 -0
  269. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
  270. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
  271. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  272. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nim-DXTVBFnF.js +0 -0
  273. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
  274. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
  275. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
  276. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
  277. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  278. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
  279. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
  280. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  281. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
  282. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
  283. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
  284. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/perl-C7veXV9z.js +0 -0
  285. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/php-BRiuMnnr.js +0 -0
  286. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-dark-sU4Zdns8.js +0 -0
  287. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-dark-soft-HXgun5vs.js +0 -0
  288. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-dark-vibrant-D4RhcSIK.js +0 -0
  289. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-light-DWBk51d8.js +0 -0
  290. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-light-soft-CodEzPxf.js +0 -0
  291. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pierre-light-vibrant-B76X7i5Y.js +0 -0
  292. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
  293. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
  294. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
  295. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
  296. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
  297. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
  298. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
  299. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
  300. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
  301. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/preload-helper-FMEmyu_K.js +0 -0
  302. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
  303. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
  304. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
  305. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/pug-C5hz5LQ7.js +0 -0
  306. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
  307. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
  308. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
  309. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
  310. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
  311. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
  312. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
  313. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
  314. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
  315. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/razor-DRL52XO2.js +0 -0
  316. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
  317. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
  318. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
  319. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
  320. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
  321. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  322. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
  323. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
  324. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  325. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  326. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
  327. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rst-BHX71KW9.js +0 -0
  328. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ruby-B--HzjGU.js +0 -0
  329. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
  330. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/sas-DrLaYOK_.js +0 -0
  331. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
  332. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
  333. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
  334. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/scss-DdSxiZKl.js +0 -0
  335. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
  336. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
  337. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
  338. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
  339. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
  340. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  341. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
  342. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  343. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
  344. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
  345. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
  346. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/soy-Br5FhD7c.js +0 -0
  347. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
  348. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
  349. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/sql-DNssxck8.js +0 -0
  350. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
  351. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/stata-DXn1tqOr.js +0 -0
  352. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
  353. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
  354. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/svelte-DOdLCIlh.js +0 -0
  355. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
  356. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  357. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  358. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
  359. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
  360. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
  361. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
  362. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/templ-CIwIngms.js +0 -0
  363. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
  364. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
  365. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  366. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
  367. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/ts-tags-BMVY4q-l.js +0 -0
  368. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
  369. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
  370. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
  371. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/twig-C8o_5mgw.js +0 -0
  372. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
  373. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/typespec-BRdr0IET.js +0 -0
  374. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
  375. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
  376. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
  377. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
  378. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
  379. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vesper-DdrHHSXu.js +0 -0
  380. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
  381. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
  382. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  383. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  384. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
  385. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vue-BU18DNDL.js +0 -0
  386. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
  387. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vue-vine-DGUAbOCX.js +0 -0
  388. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
  389. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
  390. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
  391. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
  392. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
  393. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
  394. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
  395. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
  396. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
  397. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
  398. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
  399. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
  400. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
  401. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
  402. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
  403. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
  404. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
  405. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/server/static/index.html +0 -0
  406. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tui/__init__.py +0 -0
  407. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tui/state.py +0 -0
  408. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/tui/theme.py +0 -0
  409. {mycode_cli-0.14.1 → mycode_cli-0.15.0}/src/mycode_cli/web_tools.py +0 -0
  410. {mycode_cli-0.14.1 → mycode_cli-0.15.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.1
3
+ Version: 0.15.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.1
28
+ Requires-Dist: mycode-sdk==0.15.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.1"
7
+ version = "0.15.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.1",
29
+ "mycode-sdk==0.15.0",
30
30
  "fastapi>=0.139.0",
31
31
  "uvicorn[standard]>=0.51.0",
32
32
  "rich>=15.0.0",
@@ -187,7 +187,7 @@ def parse_compact_threshold(value: Any) -> float | None:
187
187
  return None
188
188
  threshold = float(value)
189
189
 
190
- if threshold < 0 or threshold > 1:
190
+ if not 0 <= threshold <= 1:
191
191
  return None
192
192
  return threshold
193
193
 
@@ -504,45 +504,37 @@ def get_settings(cwd: str | None = None) -> Settings:
504
504
  if resolved_path not in config_paths:
505
505
  config_paths.append(resolved_path)
506
506
 
507
- for name, raw in (data.get("providers") or {}).items():
508
- if not isinstance(name, str) or not isinstance(raw, dict):
509
- continue
510
-
507
+ for name, raw in data.get("providers", {}).items():
511
508
  merged = dict(raw_providers.get(name, {}))
512
509
 
513
510
  if "type" in raw:
514
- merged["type"] = raw.get("type") or "anthropic"
511
+ merged["type"] = raw["type"]
515
512
  if "models" in raw:
516
- merged["models"] = raw.get("models")
513
+ merged["models"] = raw["models"]
517
514
  if "api_key" in raw:
518
- api_key, api_key_env_var = _parse_config_api_key(raw.get("api_key"))
515
+ api_key, api_key_env_var = _parse_config_api_key(raw["api_key"])
519
516
  merged["api_key"] = api_key
520
517
  merged["api_key_env_var"] = api_key_env_var
521
518
  if "base_url" in raw:
522
- merged["base_url"] = raw.get("base_url") or None
519
+ merged["base_url"] = raw["base_url"]
523
520
  if "supports_reasoning_effort" in raw:
524
- merged["supports_reasoning_effort"] = raw.get("supports_reasoning_effort")
521
+ merged["supports_reasoning_effort"] = raw["supports_reasoning_effort"]
525
522
 
526
523
  raw_providers[name] = merged
527
524
 
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
525
+ default = data.get("default", {})
526
+ if "provider" in default:
527
+ default_provider = default["provider"]
528
+ if "model" in default:
529
+ default_model = default["model"]
530
+ if "compact_threshold" in default:
531
+ compact_threshold = float(default["compact_threshold"])
540
532
 
541
533
  if "permission" in data:
542
534
  permission = parse_permission(data.get("permission"), permission)
543
535
 
544
- if data.get("web") is not None:
545
- web = _validate_web_config(data["web"])
536
+ if "web" in data:
537
+ web = data["web"]
546
538
  for key in ("fetch", "search"):
547
539
  if key in web:
548
540
  raw_web[key] = web[key]
@@ -768,14 +760,12 @@ def _available_provider_references(settings: Settings) -> list[str]:
768
760
 
769
761
  add(settings.default_provider)
770
762
 
771
- for name, provider in settings.providers.items():
772
- if provider_is_available(provider):
773
- add(name)
763
+ for name in settings.providers:
764
+ add(name)
774
765
 
775
766
  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)
767
+ if provider_id not in configured_types_with_credentials:
768
+ add(provider_id)
779
769
 
780
770
  return available
781
771
 
@@ -7,7 +7,7 @@ import os
7
7
  import sys
8
8
  from contextlib import 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")
@@ -157,6 +158,8 @@ def _bootstrap(
157
158
  ) -> _BootstrapContext:
158
159
  """Shared setup for the chat and run commands."""
159
160
 
161
+ from .tui.render import TerminalView
162
+
160
163
  if session and continue_last:
161
164
  raise typer.BadParameter("--session and --continue are mutually exclusive")
162
165
 
@@ -244,6 +247,8 @@ def chat(
244
247
  if ctx.invoked_subcommand is not None:
245
248
  return
246
249
 
250
+ from .tui.chat import TerminalChat
251
+
247
252
  setup = _bootstrap(
248
253
  provider=provider,
249
254
  model=model,
@@ -323,6 +328,7 @@ def web(
323
328
  resolved_port = port or settings.port
324
329
 
325
330
  import uvicorn
331
+ from uvicorn.config import LOGGING_CONFIG
326
332
 
327
333
  app_factory = "mycode_cli.server.app:create_web_app"
328
334
  if dev:
@@ -334,6 +340,11 @@ def web(
334
340
  port=resolved_port,
335
341
  reload=dev,
336
342
  factory=True,
343
+ timeout_graceful_shutdown=5,
344
+ log_config={
345
+ **LOGGING_CONFIG,
346
+ "root": {"handlers": ["default"], "level": "INFO"},
347
+ },
337
348
  )
338
349
 
339
350
 
@@ -343,6 +354,8 @@ def session_list(
343
354
  ) -> None:
344
355
  """List saved sessions."""
345
356
 
357
+ from .tui.render import TerminalView
358
+
346
359
  cwd = os.path.abspath(os.getcwd())
347
360
  store = SessionStore(data_dir=resolve_sessions_dir())
348
361
  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(
@@ -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: