mycode-cli 0.12.0__tar.gz → 0.13.1__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 (409) hide show
  1. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/PKG-INFO +7 -3
  2. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/hatch_build.py +3 -7
  3. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/pyproject.toml +6 -2
  4. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/config.py +105 -0
  5. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/permissions.py +12 -1
  6. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/runtime.py +11 -14
  7. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/routers/sessions.py +5 -29
  8. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/routers/settings.py +49 -23
  9. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/run_manager.py +27 -4
  10. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/schemas.py +4 -2
  11. mycode_cli-0.12.0/src/mycode_cli/server/static/assets/EditDiff-BdzVMJTv.js → mycode_cli-0.13.1/src/mycode_cli/server/static/assets/EditDiff-DOjxGJl-.js +2 -2
  12. mycode_cli-0.12.0/src/mycode_cli/server/static/assets/ThemeProvider-iAQ4moZx.js → mycode_cli-0.13.1/src/mycode_cli/server/static/assets/ThemeProvider-zTKbpxjH.js +1 -1
  13. mycode_cli-0.12.0/src/mycode_cli/server/static/assets/index-BBszk64q.js → mycode_cli-0.13.1/src/mycode_cli/server/static/assets/index-BZKFBzn7.js +64 -64
  14. mycode_cli-0.13.1/src/mycode_cli/server/static/assets/index-Ct4tr5LW.css +1 -0
  15. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/index.html +4 -9
  16. mycode_cli-0.13.1/src/mycode_cli/tools.py +730 -0
  17. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/tui/chat.py +1 -2
  18. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/tui/render.py +37 -16
  19. mycode_cli-0.13.1/src/mycode_cli/web_tools.py +490 -0
  20. mycode_cli-0.12.0/src/mycode_cli/server/static/assets/index-lAFTiS0F.css +0 -1
  21. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/.gitignore +0 -0
  22. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/LICENSE +0 -0
  23. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/README.md +0 -0
  24. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/__init__.py +0 -0
  25. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/main.py +0 -0
  26. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/__init__.py +0 -0
  27. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/app.py +0 -0
  28. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/deps.py +0 -0
  29. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/routers/__init__.py +0 -0
  30. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/routers/chat.py +0 -0
  31. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/routers/workspaces.py +0 -0
  32. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  33. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  34. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  35. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  36. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  37. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  38. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  39. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  40. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  41. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  42. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  43. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  44. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  45. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  46. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  47. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  48. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  49. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  50. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  51. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  52. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  53. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  54. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  55. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  56. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  57. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  58. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  59. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  60. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  61. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  62. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  63. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  64. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  65. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  66. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  67. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  68. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  69. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  70. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  71. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  72. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  73. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  74. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  75. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  76. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  77. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  78. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  79. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  80. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  81. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  82. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  83. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  84. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  85. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  86. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  87. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  88. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  89. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  90. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  91. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
  92. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
  93. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
  94. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
  95. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/angular-html-BVBpGdXr.js +0 -0
  96. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/angular-ts-BfdufMKP.js +0 -0
  97. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
  98. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/apex-VAyPSnFM.js +0 -0
  99. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/apl-DWBSSoBH.js +0 -0
  100. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
  101. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
  102. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
  103. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
  104. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/astro-3LtMP0Sq.js +0 -0
  105. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
  106. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
  107. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  108. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
  109. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  110. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
  111. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
  112. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
  113. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
  114. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
  115. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
  116. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/bird2-C6vDhewU.js +0 -0
  117. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/blade-llJRbbtR.js +0 -0
  118. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
  119. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
  120. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/c3-BFHwR3_K.js +0 -0
  121. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
  122. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
  123. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  124. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  125. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  126. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  127. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
  128. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
  129. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
  130. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cobol-x_HIyl2P.js +0 -0
  131. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
  132. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
  133. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
  134. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  135. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
  136. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cpp-NtAeskI3.js +0 -0
  137. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/crystal-DNu_sX0G.js +0 -0
  138. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/csharp-oqKa8noW.js +0 -0
  139. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/css-DJp_X0uY.js +0 -0
  140. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
  141. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
  142. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
  143. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
  144. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
  145. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dart-CnvKMtbv.js +0 -0
  146. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
  147. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
  148. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
  149. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
  150. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
  151. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
  152. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
  153. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  154. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/edge-ozw5tpLl.js +0 -0
  155. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/elixir-VhA6FeZt.js +0 -0
  156. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
  157. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/emacs-lisp-B4R74twV.js +0 -0
  158. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/engine-compile-Cbfz3NVV.js +0 -0
  159. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/erb-CIg6G69l.js +0 -0
  160. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
  161. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  162. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
  163. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
  164. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
  165. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
  166. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  167. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  168. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
  169. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
  170. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
  171. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
  172. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
  173. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
  174. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
  175. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
  176. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
  177. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  178. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  179. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  180. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
  181. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
  182. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  183. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
  184. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/glimmer-js-vH_gHG0-.js +0 -0
  185. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/glimmer-ts--abOzSAQ.js +0 -0
  186. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
  187. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
  188. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
  189. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/go-rLFTqkRN.js +0 -0
  190. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
  191. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
  192. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  193. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  194. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  195. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  196. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  197. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  198. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hack-DvEYX148.js +0 -0
  199. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/haml-zE6W3STP.js +0 -0
  200. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/handlebars-CzBR2SDs.js +0 -0
  201. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
  202. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
  203. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
  204. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/highlighter-CZbuWYc3.js +0 -0
  205. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
  206. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
  207. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
  208. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/horizon-bright-DSNQnXHK.js +0 -0
  209. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
  210. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/html-C8UlPnhE.js +0 -0
  211. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/html-derivative-CY6NRz-J.js +0 -0
  212. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
  213. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
  214. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
  215. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
  216. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
  217. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
  218. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
  219. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
  220. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jinja-CD-Z-FLd.js +0 -0
  221. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
  222. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
  223. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
  224. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
  225. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
  226. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  227. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
  228. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
  229. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/julia-Dc3O-irA.js +0 -0
  230. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/just-BhOq_Kbv.js +0 -0
  231. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  232. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  233. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  234. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
  235. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
  236. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/kusto-C7mF5XQf.js +0 -0
  237. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
  238. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/latex-Cu4Y1d5w.js +0 -0
  239. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
  240. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
  241. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
  242. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/liquid-CvXMrjlQ.js +0 -0
  243. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
  244. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
  245. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
  246. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
  247. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/luau-FMPmPwt6.js +0 -0
  248. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
  249. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
  250. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/marko-DvhNOisQ.js +0 -0
  251. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
  252. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  253. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  254. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  255. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  256. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
  257. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/mdc-Bm9TpL1X.js +0 -0
  258. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
  259. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
  260. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
  261. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
  262. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
  263. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
  264. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
  265. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
  266. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
  267. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
  268. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nextflow-BJtWHP5T.js +0 -0
  269. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nextflow-groovy-DJMQeKeT.js +0 -0
  270. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
  271. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
  272. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  273. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nim-DXTVBFnF.js +0 -0
  274. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
  275. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
  276. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
  277. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
  278. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  279. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
  280. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
  281. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  282. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
  283. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
  284. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
  285. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/perl-C7veXV9z.js +0 -0
  286. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/php-BRiuMnnr.js +0 -0
  287. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-dark-sU4Zdns8.js +0 -0
  288. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-dark-soft-HXgun5vs.js +0 -0
  289. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-dark-vibrant-D4RhcSIK.js +0 -0
  290. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-light-DWBk51d8.js +0 -0
  291. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-light-soft-CodEzPxf.js +0 -0
  292. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pierre-light-vibrant-B76X7i5Y.js +0 -0
  293. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
  294. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
  295. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
  296. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
  297. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
  298. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
  299. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
  300. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
  301. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
  302. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/preload-helper-FMEmyu_K.js +0 -0
  303. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
  304. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
  305. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
  306. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/pug-C5hz5LQ7.js +0 -0
  307. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
  308. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
  309. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
  310. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
  311. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
  312. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
  313. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
  314. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
  315. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
  316. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/razor-DRL52XO2.js +0 -0
  317. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
  318. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
  319. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
  320. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
  321. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
  322. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  323. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
  324. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
  325. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  326. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  327. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
  328. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rst-BHX71KW9.js +0 -0
  329. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ruby-B--HzjGU.js +0 -0
  330. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
  331. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/sas-DrLaYOK_.js +0 -0
  332. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
  333. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
  334. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
  335. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/scss-DdSxiZKl.js +0 -0
  336. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
  337. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
  338. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
  339. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
  340. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
  341. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  342. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
  343. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  344. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
  345. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
  346. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
  347. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/soy-Br5FhD7c.js +0 -0
  348. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
  349. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
  350. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/sql-DNssxck8.js +0 -0
  351. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
  352. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/stata-DXn1tqOr.js +0 -0
  353. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
  354. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
  355. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/svelte-DOdLCIlh.js +0 -0
  356. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
  357. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  358. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  359. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
  360. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
  361. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
  362. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
  363. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/templ-CIwIngms.js +0 -0
  364. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
  365. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
  366. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  367. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
  368. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/ts-tags-BMVY4q-l.js +0 -0
  369. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
  370. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
  371. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
  372. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/twig-C8o_5mgw.js +0 -0
  373. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
  374. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/typespec-BRdr0IET.js +0 -0
  375. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
  376. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
  377. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
  378. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
  379. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
  380. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vesper-DdrHHSXu.js +0 -0
  381. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
  382. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
  383. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  384. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  385. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
  386. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vue-BU18DNDL.js +0 -0
  387. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
  388. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vue-vine-DGUAbOCX.js +0 -0
  389. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
  390. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
  391. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
  392. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
  393. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
  394. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
  395. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
  396. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
  397. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
  398. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
  399. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
  400. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
  401. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
  402. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
  403. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
  404. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
  405. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
  406. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/system_prompt.py +0 -0
  407. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/tui/__init__.py +0 -0
  408. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/tui/state.py +0 -0
  409. {mycode_cli-0.12.0 → mycode_cli-0.13.1}/src/mycode_cli/tui/theme.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: mycode-cli
3
- Version: 0.12.0
3
+ Version: 0.13.1
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
@@ -21,9 +21,13 @@ Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Classifier: Topic :: Software Development
23
23
  Requires-Python: >=3.12
24
+ Requires-Dist: beautifulsoup4>=4.15.0
24
25
  Requires-Dist: fastapi>=0.139.0
25
- Requires-Dist: mycode-sdk==0.12.0
26
+ Requires-Dist: httpx2>=2.10.0
27
+ Requires-Dist: markdownify>=1.2.3
28
+ Requires-Dist: mycode-sdk==0.13.1
26
29
  Requires-Dist: prompt-toolkit>=3.0.52
30
+ Requires-Dist: pydantic>=2.13.4
27
31
  Requires-Dist: pyyaml>=6.0.3
28
32
  Requires-Dist: rich>=15.0.0
29
33
  Requires-Dist: typer>=0.26.8
@@ -27,12 +27,9 @@ def _build_web_assets(project_root: Path) -> None:
27
27
  static_dir = project_root / "src" / "mycode_cli" / "server" / "static"
28
28
 
29
29
  if not (web_dir / "package.json").is_file():
30
- if static_dir.is_dir():
30
+ if (static_dir / "index.html").is_file():
31
31
  return
32
- raise RuntimeError(
33
- f"web sources not found at {web_dir}; the web/ submodule is not "
34
- "initialized. Run: git submodule update --init --recursive"
35
- )
32
+ raise RuntimeError(f"web sources not found at {web_dir} and built assets not found at {static_dir}")
36
33
 
37
34
  _run_pnpm(["install", "--frozen-lockfile"], cwd=web_dir)
38
35
  _run_pnpm(["build"], cwd=web_dir)
@@ -48,8 +45,7 @@ def _build_web_assets(project_root: Path) -> None:
48
45
  class CustomBuildHook(BuildHookInterface[Any]):
49
46
  def initialize(self, version: str, build_data: dict[str, Any]) -> None:
50
47
  del build_data
51
- # Editable installs (uv sync) don't bundle web assets, so skip the build
52
- # and its web/ submodule + pnpm requirements. Wheel/sdist builds use "standard".
48
+ # Editable installs don't bundle web assets.
53
49
  if version == "editable":
54
50
  return
55
51
  _build_web_assets(Path(self.root))
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mycode-cli"
7
- version = "0.12.0"
7
+ version = "0.13.1"
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,13 +26,17 @@ classifiers = [
26
26
  ]
27
27
  keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
28
28
  dependencies = [
29
- "mycode-sdk==0.12.0",
29
+ "mycode-sdk==0.13.1",
30
30
  "fastapi>=0.139.0",
31
31
  "uvicorn[standard]>=0.51.0",
32
32
  "rich>=15.0.0",
33
33
  "prompt-toolkit>=3.0.52",
34
+ "pydantic>=2.13.4",
34
35
  "typer>=0.26.8",
35
36
  "pyyaml>=6.0.3",
37
+ "httpx2>=2.10.0",
38
+ "beautifulsoup4>=4.15.0",
39
+ "markdownify>=1.2.3",
36
40
  ]
37
41
 
38
42
  [project.scripts]
@@ -41,6 +41,13 @@ _EFFORT_OFF_ALIASES = frozenset({"off", "disabled"})
41
41
 
42
42
  PermissionLevel = Literal["readonly", "safe", "standard", "yolo"]
43
43
  PermissionMode = Literal["ask", "deny"]
44
+ WebFetchProvider = Literal["local", "tavily", "exa"]
45
+ WebSearchProvider = Literal["off", "tavily", "exa"]
46
+
47
+ WEB_PROVIDER_ENV_VARS = {
48
+ "tavily": "TAVILY_API_KEY",
49
+ "exa": "EXA_API_KEY",
50
+ }
44
51
 
45
52
 
46
53
  @dataclass(frozen=True)
@@ -71,6 +78,20 @@ class PermissionConfig:
71
78
  mode: PermissionMode = "ask"
72
79
 
73
80
 
81
+ @dataclass(frozen=True)
82
+ class WebProviderConfig:
83
+ api_key: str | None = None
84
+ api_key_env_var: str | None = None
85
+
86
+
87
+ @dataclass(frozen=True)
88
+ class WebConfig:
89
+ fetch: WebFetchProvider = "local"
90
+ search: WebSearchProvider = "off"
91
+ tavily: WebProviderConfig = field(default_factory=WebProviderConfig)
92
+ exa: WebProviderConfig = field(default_factory=WebProviderConfig)
93
+
94
+
74
95
  @dataclass(frozen=True)
75
96
  class Settings:
76
97
  providers: dict[str, ProviderConfig]
@@ -81,6 +102,7 @@ class Settings:
81
102
  project: str
82
103
  compact_threshold: float | None = None
83
104
  permission: PermissionConfig = field(default_factory=PermissionConfig)
105
+ web: WebConfig = field(default_factory=WebConfig)
84
106
  config_paths: list[str] = field(default_factory=list)
85
107
 
86
108
 
@@ -286,6 +308,11 @@ def _clean_config_layer(data: Any) -> dict[str, Any]:
286
308
  if data.get("permission") is not None:
287
309
  out["permission"] = _validate_permission_config(data["permission"])
288
310
 
311
+ if data.get("web") is not None:
312
+ web = _validate_web_config(data["web"])
313
+ if web:
314
+ out["web"] = web
315
+
289
316
  raw_providers = data.get("providers")
290
317
  if raw_providers is not None:
291
318
  if not isinstance(raw_providers, dict):
@@ -351,6 +378,36 @@ def _validate_permission_config(raw: Any) -> PermissionLevel | dict[str, Any]:
351
378
  return out
352
379
 
353
380
 
381
+ def _validate_web_config(raw: Any) -> dict[str, Any]:
382
+ if not isinstance(raw, dict):
383
+ raise ValueError("web must be an object")
384
+
385
+ out: dict[str, Any] = {}
386
+ options = {
387
+ "fetch": ("local", "tavily", "exa"),
388
+ "search": ("off", "tavily", "exa"),
389
+ }
390
+ for key, supported in options.items():
391
+ if key not in raw:
392
+ continue
393
+ value = raw[key]
394
+ if value not in supported:
395
+ raise ValueError(f"web.{key} must be one of: {', '.join(supported)}")
396
+ out[key] = value
397
+
398
+ for provider in ("tavily", "exa"):
399
+ if provider not in raw:
400
+ continue
401
+ entry = raw[provider]
402
+ if not isinstance(entry, dict):
403
+ raise ValueError(f"web.{provider} must be an object")
404
+ api_key = _optional_config_string(entry, "api_key", f"web.{provider}.api_key")
405
+ if api_key:
406
+ out[provider] = {"api_key": api_key}
407
+
408
+ return out
409
+
410
+
354
411
  def _validate_provider_config(name: str, raw: Any) -> dict[str, Any]:
355
412
  if not isinstance(raw, dict):
356
413
  raise ValueError(f"provider {name!r} must be an object")
@@ -434,6 +491,7 @@ def get_settings(cwd: str | None = None) -> Settings:
434
491
  default_model: str | None = None
435
492
  compact_threshold: float | None = None
436
493
  permission = PermissionConfig()
494
+ raw_web: dict[str, Any] = {}
437
495
  config_paths: list[str] = []
438
496
 
439
497
  for path in _candidate_config_paths(resolved_cwd, resolved_project):
@@ -482,12 +540,27 @@ def get_settings(cwd: str | None = None) -> Settings:
482
540
  if "permission" in data:
483
541
  permission = parse_permission(data.get("permission"), permission)
484
542
 
543
+ if data.get("web") is not None:
544
+ web = _validate_web_config(data["web"])
545
+ for key in ("fetch", "search"):
546
+ if key in web:
547
+ raw_web[key] = web[key]
548
+ for provider in ("tavily", "exa"):
549
+ entry = web.get(provider)
550
+ if entry:
551
+ api_key, api_key_env_var = _parse_config_api_key(entry["api_key"])
552
+ raw_web[provider] = {
553
+ "api_key": api_key,
554
+ "api_key_env_var": api_key_env_var,
555
+ }
556
+
485
557
  return Settings(
486
558
  providers=_build_providers(raw_providers),
487
559
  default_provider=default_provider,
488
560
  default_model=default_model,
489
561
  compact_threshold=compact_threshold,
490
562
  permission=permission,
563
+ web=_build_web_config(raw_web),
491
564
  port=int(os.environ.get("PORT", "8000")),
492
565
  cwd=resolved_cwd,
493
566
  project=resolved_project,
@@ -562,6 +635,38 @@ def _build_providers(raw_providers: dict[str, dict[str, Any]]) -> dict[str, Prov
562
635
  return providers
563
636
 
564
637
 
638
+ def _build_web_config(raw: dict[str, Any]) -> WebConfig:
639
+ def provider(name: str) -> WebProviderConfig:
640
+ entry = raw.get(name)
641
+ if not isinstance(entry, dict):
642
+ return WebProviderConfig()
643
+ return WebProviderConfig(
644
+ api_key=entry.get("api_key") or None,
645
+ api_key_env_var=entry.get("api_key_env_var") or None,
646
+ )
647
+
648
+ return WebConfig(
649
+ fetch=cast(WebFetchProvider, raw.get("fetch") or "local"),
650
+ search=cast(WebSearchProvider, raw.get("search") or "off"),
651
+ tavily=provider("tavily"),
652
+ exa=provider("exa"),
653
+ )
654
+
655
+
656
+ def resolve_web_api_key(web: WebConfig, provider: Literal["tavily", "exa"]) -> str | None:
657
+ """Resolve a web provider key without requiring one to exist."""
658
+
659
+ config = getattr(web, provider)
660
+ if config.api_key:
661
+ return config.api_key
662
+ if config.api_key_env_var:
663
+ value = (os.environ.get(config.api_key_env_var) or "").strip()
664
+ if value:
665
+ return value
666
+ raise ValueError(f"missing API key env var {config.api_key_env_var!r} referenced by web.{provider}")
667
+ return (os.environ.get(WEB_PROVIDER_ENV_VARS[provider]) or "").strip() or None
668
+
669
+
565
670
  def provider_has_api_key(provider: ProviderConfig) -> bool:
566
671
  """Return whether a configured provider can authenticate right now."""
567
672
 
@@ -123,12 +123,23 @@ def classify_tool(
123
123
  command = str(ctx.tool_input.get("command") or "").strip()
124
124
  return PermissionCheck(_classify_bash(command), command)
125
125
 
126
+ if name == "webfetch":
127
+ url = str(ctx.tool_input.get("url") or "").strip()
128
+ return PermissionCheck("standard", url)
129
+
130
+ if name == "websearch":
131
+ query = str(ctx.tool_input.get("query") or "").strip()
132
+ return PermissionCheck("standard", query)
133
+
126
134
  if name in {"read", "write", "edit"}:
127
135
  raw = str(ctx.tool_input.get("path") or "")
128
136
  path = resolve_path(raw, cwd=cwd)
129
137
  project_path = Path(project).resolve(strict=False)
130
138
  preview = raw or str(path)
131
- if name == "read" and any(path.is_relative_to(root) for root in skill_roots):
139
+ if name == "read" and (
140
+ path.is_relative_to(ctx.tool_output_dir.resolve(strict=False))
141
+ or any(path.is_relative_to(root) for root in skill_roots)
142
+ ):
132
143
  return PermissionCheck("readonly", preview)
133
144
  if not path.is_relative_to(project_path):
134
145
  return PermissionCheck("yolo", preview)
@@ -3,12 +3,12 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from mycode.agent import Agent
6
- from mycode.models import estimate_cost, resolve_model_metadata
7
6
  from mycode.session import SessionStore
8
- from mycode.tools import bash_tool, edit_tool, read_tool, write_tool
9
7
  from mycode_cli.config import ResolvedProvider, Settings
10
8
  from mycode_cli.permissions import ToolReviewCallback, build_permission_hooks
11
9
  from mycode_cli.system_prompt import build_system_prompt
10
+ from mycode_cli.tools import DEFAULT_TOOLS
11
+ from mycode_cli.web_tools import build_web_tools
12
12
 
13
13
 
14
14
  def sum_known_costs(*costs: float | None) -> float | None:
@@ -17,13 +17,10 @@ def sum_known_costs(*costs: float | None) -> float | None:
17
17
 
18
18
 
19
19
  async def load_session_cost(store: SessionStore, session_id: str) -> float | None:
20
- """Estimate the session's cumulative USD cost from its raw JSONL timeline.
20
+ """Load the session's cumulative USD cost from its raw JSONL timeline.
21
21
 
22
- Every persisted provider request counts: tool loops, compact summaries,
23
- and turns discarded by rewind (billed is billed). Each assistant/compact
24
- record is priced by its own ``meta.provider``/``meta.model`` through the
25
- SDK catalog; an upstream-reported ``reported_cost_usd`` wins. Records
26
- without a usable estimate are skipped.
22
+ Counts persisted costs from tool loops, compact summaries, and turns
23
+ discarded by rewind. Records without a cost are skipped.
27
24
  """
28
25
 
29
26
  total: float | None = None
@@ -31,12 +28,12 @@ async def load_session_cost(store: SessionStore, session_id: str) -> float | Non
31
28
  if message.get("role") not in {"assistant", "compact"}:
32
29
  continue
33
30
  meta = message.get("meta") or {}
34
- usage = meta.get("usage")
35
- if not isinstance(usage, dict):
31
+ cost = meta.get("cost")
32
+ if not isinstance(cost, dict):
36
33
  continue
37
- metadata = resolve_model_metadata(provider=str(meta.get("provider") or ""), model=str(meta.get("model") or ""))
38
- request_cost = estimate_cost(usage, metadata.cost)
39
- total = sum_known_costs(total, request_cost)
34
+ request_total = cost.get("total")
35
+ if isinstance(request_total, int | float):
36
+ total = sum_known_costs(total, float(request_total))
40
37
  return total
41
38
 
42
39
 
@@ -75,6 +72,6 @@ def build_agent(
75
72
  compact_threshold=settings.compact_threshold,
76
73
  max_turns=max_turns,
77
74
  system=build_system_prompt(cwd, settings),
78
- tools=[read_tool, write_tool, edit_tool, bash_tool],
75
+ tools=[*DEFAULT_TOOLS, *build_web_tools(settings.web)],
79
76
  hooks=hooks,
80
77
  )
@@ -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.models import estimate_cost, resolve_model_metadata
13
12
  from mycode_cli.runtime import load_session_cost
14
13
  from mycode_cli.server.deps import RunManagerDep, StoreDep, resolve_workspace_cwd
15
14
  from mycode_cli.server.schemas import SessionCreateRequest, StatusResponse
@@ -31,29 +30,6 @@ def _redact_document_data(messages: list[ConversationMessage]) -> list[dict[str,
31
30
  return redacted
32
31
 
33
32
 
34
- def _with_request_costs(messages: list[ConversationMessage]) -> list[ConversationMessage]:
35
- """Stamp the response-only ``meta.request_cost_usd`` on priced records.
36
-
37
- The UI sums these per turn to show a per-reply cost; pricing stays
38
- server-side. A record whose usage cannot be priced keeps no field —
39
- absent means unknown. Nothing is persisted.
40
- """
41
-
42
- enriched: list[ConversationMessage] = []
43
- for message in messages:
44
- meta = message.get("meta") or {}
45
- usage = meta.get("usage")
46
- if message.get("role") in {"assistant", "compact"} and isinstance(usage, dict):
47
- metadata = resolve_model_metadata(
48
- provider=str(meta.get("provider") or ""), model=str(meta.get("model") or "")
49
- )
50
- cost = estimate_cost(usage, metadata.cost)
51
- if cost is not None:
52
- message = {**message, "meta": {**meta, "request_cost_usd": cost}}
53
- enriched.append(message)
54
- return enriched
55
-
56
-
57
33
  @router.post("")
58
34
  async def create_session(req: SessionCreateRequest, store: StoreDep) -> dict[str, Any]:
59
35
  cwd = resolve_workspace_cwd(req.cwd)
@@ -89,19 +65,19 @@ async def load_session(
89
65
  if active:
90
66
  return {
91
67
  "session": data["session"] if data else None,
92
- "messages": _redact_document_data(_with_request_costs(active["messages"])),
93
- "session_cost_usd": session_cost,
68
+ "messages": _redact_document_data(active["messages"]),
69
+ "session_cost": session_cost,
94
70
  "active_run": active["run"],
95
71
  "pending_events": active["pending_events"],
96
72
  }
97
73
 
98
74
  if data is None:
99
- return {"session": None, "messages": [], "session_cost_usd": None, "active_run": None, "pending_events": []}
75
+ return {"session": None, "messages": [], "session_cost": None, "active_run": None, "pending_events": []}
100
76
 
101
77
  return {
102
78
  "session": data["session"],
103
- "messages": _redact_document_data(_with_request_costs(data["messages"])),
104
- "session_cost_usd": session_cost,
79
+ "messages": _redact_document_data(data["messages"]),
80
+ "session_cost": session_cost,
105
81
  "active_run": None,
106
82
  "pending_events": [],
107
83
  }
@@ -26,6 +26,7 @@ from mycode.providers import (
26
26
  from mycode_cli.config import (
27
27
  PERMISSION_LEVEL_OPTIONS,
28
28
  PERMISSION_MODE_OPTIONS,
29
+ WEB_PROVIDER_ENV_VARS,
29
30
  is_api_key_env_ref,
30
31
  resolve_mycode_home,
31
32
  validate_global_config,
@@ -54,33 +55,39 @@ def _present_config(raw: dict[str, Any]) -> dict[str, Any]:
54
55
 
55
56
  out = copy.deepcopy(raw)
56
57
  providers = out.get("providers")
57
- if not isinstance(providers, dict):
58
- return out
58
+ if isinstance(providers, dict):
59
+ for entry in providers.values():
60
+ if not isinstance(entry, dict):
61
+ continue
62
+ _mask_api_key(entry)
63
+ models = entry.get("models")
64
+ if isinstance(models, dict):
65
+ entry["models"] = list(models.keys())
66
+ overrides = {k: v for k, v in models.items() if isinstance(v, dict) and v}
67
+ if overrides:
68
+ entry["model_overrides"] = overrides
69
+
70
+ web = out.get("web")
71
+ if isinstance(web, dict):
72
+ for provider in ("tavily", "exa"):
73
+ entry = web.get(provider)
74
+ if isinstance(entry, dict):
75
+ _mask_api_key(entry)
76
+
77
+ return out
59
78
 
60
- for entry in providers.values():
61
- if not isinstance(entry, dict):
62
- continue
63
79
 
64
- api_key = entry.get("api_key")
65
- if isinstance(api_key, str) and api_key.strip():
66
- if is_api_key_env_ref(api_key):
67
- # ${VAR} stays visible — it's not the secret itself.
68
- entry["api_key_saved"] = False
69
- else:
70
- entry["api_key"] = None
71
- entry["api_key_saved"] = True
80
+ def _mask_api_key(entry: dict[str, Any]) -> None:
81
+ api_key = entry.get("api_key")
82
+ if isinstance(api_key, str) and api_key.strip():
83
+ if is_api_key_env_ref(api_key):
84
+ entry["api_key_saved"] = False
72
85
  else:
73
86
  entry["api_key"] = None
74
- entry["api_key_saved"] = False
75
-
76
- models = entry.get("models")
77
- if isinstance(models, dict):
78
- entry["models"] = list(models.keys())
79
- overrides = {k: v for k, v in models.items() if isinstance(v, dict) and v}
80
- if overrides:
81
- entry["model_overrides"] = overrides
82
-
83
- return out
87
+ entry["api_key_saved"] = True
88
+ else:
89
+ entry["api_key"] = None
90
+ entry["api_key_saved"] = False
84
91
 
85
92
 
86
93
  def _env_presence(raw: dict[str, Any]) -> dict[str, bool]:
@@ -90,6 +97,7 @@ def _env_presence(raw: dict[str, Any]) -> dict[str, bool]:
90
97
  names: set[str] = set()
91
98
  for provider_id in list_env_discoverable_providers():
92
99
  names.update(provider_env_api_key_names(provider_id))
100
+ names.update(WEB_PROVIDER_ENV_VARS.values())
93
101
 
94
102
  for entry in (raw.get("providers") or {}).values():
95
103
  if isinstance(entry, dict):
@@ -99,6 +107,12 @@ def _env_presence(raw: dict[str, Any]) -> dict[str, bool]:
99
107
  if ref:
100
108
  names.add(ref)
101
109
 
110
+ for entry in (raw.get("web") or {}).values():
111
+ if isinstance(entry, dict):
112
+ api_key = entry.get("api_key")
113
+ if isinstance(api_key, str) and (ref := is_api_key_env_ref(api_key)):
114
+ names.add(ref)
115
+
102
116
  return {name: bool((os.environ.get(name) or "").strip()) for name in sorted(names)}
103
117
 
104
118
 
@@ -163,6 +177,18 @@ def put_settings_endpoint(payload: SettingsRequest) -> dict[str, Any]:
163
177
  else:
164
178
  entry.pop("api_key", None)
165
179
 
180
+ existing_web = existing.get("web") or {}
181
+ incoming_web = incoming.get("web") or {}
182
+ for provider in ("tavily", "exa"):
183
+ entry = incoming_web.get(provider) if isinstance(incoming_web, dict) else None
184
+ if not isinstance(entry, dict) or entry.get("api_key") is not None:
185
+ continue
186
+ prior = existing_web.get(provider) if isinstance(existing_web, dict) else None
187
+ if isinstance(prior, dict) and "api_key" in prior:
188
+ entry["api_key"] = prior["api_key"]
189
+ else:
190
+ entry.pop("api_key", None)
191
+
166
192
  try:
167
193
  cleaned = validate_global_config(incoming)
168
194
  except ValueError as exc:
@@ -20,6 +20,14 @@ RunStatus = Literal["running", "completed", "failed", "cancelled"]
20
20
  RunKind = Literal["chat", "compact"]
21
21
  FINISHED_RUN_TTL_SECONDS = 300
22
22
  RUN_EVENT_BUFFER_SIZE = 2000
23
+ RUN_TOOL_OUTPUT_BUFFER_BYTES = 1_000_000
24
+
25
+
26
+ def _tool_output_bytes(payload: dict[str, Any]) -> int:
27
+ if payload.get("type") != "tool_output":
28
+ return 0
29
+ output = payload.get("output")
30
+ return len(output.encode("utf-8")) if isinstance(output, str) else 0
23
31
 
24
32
 
25
33
  class ActiveRunError(RuntimeError):
@@ -57,6 +65,7 @@ class RunState:
57
65
  status: RunStatus = "running"
58
66
  error: str | None = None
59
67
  events: list[dict[str, Any]] = field(default_factory=list)
68
+ tool_output_bytes: int = 0
60
69
  next_seq: int = 1
61
70
  task: asyncio.Task[None] | None = None
62
71
  finished_at: float | None = None
@@ -323,9 +332,11 @@ class RunManager:
323
332
  if event.type == "error":
324
333
  last_error = str(event.data.get("message") or "unknown error")
325
334
  elif event.type == "usage":
335
+ turn_cost = event.data.get("turn_cost")
336
+ turn_total = turn_cost.get("total") if isinstance(turn_cost, dict) else None
326
337
  session_cost = sum_known_costs(
327
338
  state.session_cost_base,
328
- event.data.get("turn_cost_usd"),
339
+ turn_total,
329
340
  )
330
341
  event = Event(
331
342
  "usage",
@@ -333,7 +344,7 @@ class RunManager:
333
344
  **event.data,
334
345
  "context_window": state.agent.context_window,
335
346
  "model": state.agent.model,
336
- "session_cost_usd": session_cost,
347
+ "session_cost": session_cost,
337
348
  },
338
349
  )
339
350
  await self._append_event(state, event)
@@ -360,11 +371,23 @@ class RunManager:
360
371
 
361
372
  async def _append_event(self, state: RunState, event: Event) -> None:
362
373
  async with state.condition:
374
+ if event.type == "tool_done":
375
+ tool_use_id = event.data.get("tool_use_id")
376
+ retained = [
377
+ payload
378
+ for payload in state.events
379
+ if payload.get("type") != "tool_output" or payload.get("tool_use_id") != tool_use_id
380
+ ]
381
+ state.events = retained
382
+ state.tool_output_bytes = sum(_tool_output_bytes(payload) for payload in retained)
383
+
363
384
  payload = {"seq": state.next_seq, "type": event.type, **event.data}
364
385
  state.next_seq += 1
365
386
  state.events.append(payload)
366
- if len(state.events) > RUN_EVENT_BUFFER_SIZE:
367
- del state.events[: len(state.events) - RUN_EVENT_BUFFER_SIZE]
387
+ state.tool_output_bytes += _tool_output_bytes(payload)
388
+ while len(state.events) > RUN_EVENT_BUFFER_SIZE or state.tool_output_bytes > RUN_TOOL_OUTPUT_BUFFER_BYTES:
389
+ removed = state.events.pop(0)
390
+ state.tool_output_bytes -= _tool_output_bytes(removed)
368
391
  state.condition.notify_all()
369
392
 
370
393
  async def _finish_run(self, state: RunState, *, status: RunStatus, error: str | None = None) -> None:
@@ -6,6 +6,8 @@ from typing import Any, Literal, Self
6
6
 
7
7
  from pydantic import BaseModel, Field, model_validator
8
8
 
9
+ from mycode.models import Cost
10
+
9
11
  RunKind = Literal["chat", "compact"]
10
12
 
11
13
 
@@ -104,8 +106,8 @@ class StreamEvent(BaseModel):
104
106
  context_window: int | None = None # usage
105
107
  model: str | None = None # usage
106
108
  turn_usage: dict[str, int] | None = None # usage
107
- turn_cost_usd: float | None = None # usage
108
- session_cost_usd: float | None = None # usage; composed by the run manager
109
+ turn_cost: Cost | None = None # usage
110
+ session_cost: float | None = None # usage; composed by the run manager
109
111
 
110
112
 
111
113
  class DecideRequest(BaseModel):