mycode-cli 0.19.0__tar.gz → 0.19.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 (412) hide show
  1. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/PKG-INFO +2 -2
  2. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/pyproject.toml +2 -2
  3. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/routers/chat.py +60 -16
  4. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tools.py +110 -48
  5. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/chat.py +9 -5
  6. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/terminal.py +3 -1
  7. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/.gitignore +0 -0
  8. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/LICENSE +0 -0
  9. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/README.md +0 -0
  10. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/hatch_build.py +0 -0
  11. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/__init__.py +0 -0
  12. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/config.py +0 -0
  13. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/main.py +0 -0
  14. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/permissions.py +0 -0
  15. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/runtime.py +0 -0
  16. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/__init__.py +0 -0
  17. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/app.py +0 -0
  18. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/deps.py +0 -0
  19. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/routers/__init__.py +0 -0
  20. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/routers/sessions.py +0 -0
  21. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/routers/settings.py +0 -0
  22. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/routers/workspaces.py +0 -0
  23. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/run_manager.py +0 -0
  24. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/schemas.py +0 -0
  25. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/EditDiff-DOjxGJl-.js +0 -0
  26. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  27. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  28. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  29. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  30. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  31. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  32. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  33. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  34. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  35. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  36. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  37. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  38. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  39. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  40. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  41. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  42. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  43. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  44. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  45. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  46. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  47. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  48. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  49. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  50. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  51. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  52. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  53. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  54. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  55. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  56. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  57. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  58. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  59. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  60. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  61. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  62. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  63. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  64. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  65. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  66. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  67. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  68. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  69. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  70. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  71. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  72. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  73. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  74. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  75. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  76. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  77. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  78. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  79. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  80. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  81. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  82. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  83. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  84. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  85. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ThemeProvider-zTKbpxjH.js +0 -0
  86. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
  87. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
  88. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
  89. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
  90. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/angular-html-BVBpGdXr.js +0 -0
  91. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/angular-ts-BfdufMKP.js +0 -0
  92. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
  93. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/apex-VAyPSnFM.js +0 -0
  94. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/apl-DWBSSoBH.js +0 -0
  95. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
  96. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
  97. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
  98. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
  99. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/astro-3LtMP0Sq.js +0 -0
  100. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
  101. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
  102. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  103. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
  104. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  105. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
  106. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
  107. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
  108. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
  109. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
  110. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
  111. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/bird2-C6vDhewU.js +0 -0
  112. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/blade-llJRbbtR.js +0 -0
  113. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
  114. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
  115. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/c3-BFHwR3_K.js +0 -0
  116. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
  117. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
  118. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  119. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  120. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  121. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  122. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
  123. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
  124. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
  125. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cobol-x_HIyl2P.js +0 -0
  126. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
  127. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
  128. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
  129. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  130. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
  131. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cpp-NtAeskI3.js +0 -0
  132. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/crystal-DNu_sX0G.js +0 -0
  133. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/csharp-oqKa8noW.js +0 -0
  134. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/css-DJp_X0uY.js +0 -0
  135. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
  136. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
  137. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
  138. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
  139. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
  140. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dart-CnvKMtbv.js +0 -0
  141. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
  142. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
  143. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
  144. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
  145. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
  146. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
  147. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
  148. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  149. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/edge-ozw5tpLl.js +0 -0
  150. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/elixir-VhA6FeZt.js +0 -0
  151. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
  152. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/emacs-lisp-B4R74twV.js +0 -0
  153. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/engine-compile-Cbfz3NVV.js +0 -0
  154. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/erb-CIg6G69l.js +0 -0
  155. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
  156. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  157. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
  158. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
  159. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
  160. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
  161. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  162. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  163. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
  164. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
  165. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
  166. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
  167. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
  168. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
  169. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
  170. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
  171. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
  172. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  173. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  174. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  175. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
  176. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
  177. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  178. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
  179. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/glimmer-js-vH_gHG0-.js +0 -0
  180. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/glimmer-ts--abOzSAQ.js +0 -0
  181. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
  182. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
  183. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
  184. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/go-rLFTqkRN.js +0 -0
  185. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
  186. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
  187. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  188. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  189. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  190. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  191. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  192. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  193. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hack-DvEYX148.js +0 -0
  194. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/haml-zE6W3STP.js +0 -0
  195. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/handlebars-CzBR2SDs.js +0 -0
  196. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
  197. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
  198. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
  199. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/highlighter-CZbuWYc3.js +0 -0
  200. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
  201. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
  202. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
  203. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/horizon-bright-DSNQnXHK.js +0 -0
  204. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
  205. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/html-C8UlPnhE.js +0 -0
  206. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/html-derivative-CY6NRz-J.js +0 -0
  207. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
  208. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
  209. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
  210. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
  211. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
  212. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/index-CrhooK9g.js +0 -0
  213. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/index-D9h4EXyc.css +0 -0
  214. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
  215. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
  216. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
  217. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jinja-CD-Z-FLd.js +0 -0
  218. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
  219. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
  220. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
  221. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
  222. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
  223. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  224. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
  225. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
  226. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/julia-Dc3O-irA.js +0 -0
  227. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/just-BhOq_Kbv.js +0 -0
  228. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  229. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  230. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  231. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
  232. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
  233. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/kusto-C7mF5XQf.js +0 -0
  234. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
  235. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/latex-Cu4Y1d5w.js +0 -0
  236. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
  237. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
  238. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
  239. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/liquid-CvXMrjlQ.js +0 -0
  240. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
  241. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
  242. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
  243. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
  244. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/luau-FMPmPwt6.js +0 -0
  245. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
  246. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
  247. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/marko-DvhNOisQ.js +0 -0
  248. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
  249. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  250. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  251. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  252. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  253. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
  254. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/mdc-Bm9TpL1X.js +0 -0
  255. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
  256. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
  257. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
  258. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
  259. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
  260. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
  261. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
  262. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
  263. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
  264. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
  265. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nextflow-BJtWHP5T.js +0 -0
  266. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nextflow-groovy-DJMQeKeT.js +0 -0
  267. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
  268. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
  269. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  270. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nim-DXTVBFnF.js +0 -0
  271. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
  272. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
  273. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
  274. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
  275. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  276. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
  277. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
  278. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  279. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
  280. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
  281. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
  282. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/perl-C7veXV9z.js +0 -0
  283. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/php-BRiuMnnr.js +0 -0
  284. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-dark-sU4Zdns8.js +0 -0
  285. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-dark-soft-HXgun5vs.js +0 -0
  286. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-dark-vibrant-D4RhcSIK.js +0 -0
  287. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-light-DWBk51d8.js +0 -0
  288. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-light-soft-CodEzPxf.js +0 -0
  289. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pierre-light-vibrant-B76X7i5Y.js +0 -0
  290. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
  291. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
  292. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
  293. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
  294. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
  295. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
  296. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
  297. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
  298. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
  299. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/preload-helper-FMEmyu_K.js +0 -0
  300. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
  301. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
  302. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
  303. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/pug-C5hz5LQ7.js +0 -0
  304. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
  305. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
  306. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
  307. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
  308. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
  309. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
  310. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
  311. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
  312. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
  313. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/razor-DRL52XO2.js +0 -0
  314. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
  315. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
  316. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
  317. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
  318. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
  319. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  320. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
  321. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
  322. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  323. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  324. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
  325. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rst-BHX71KW9.js +0 -0
  326. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ruby-B--HzjGU.js +0 -0
  327. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
  328. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/sas-DrLaYOK_.js +0 -0
  329. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
  330. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
  331. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
  332. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/scss-DdSxiZKl.js +0 -0
  333. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
  334. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
  335. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
  336. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
  337. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
  338. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  339. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
  340. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  341. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
  342. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
  343. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
  344. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/soy-Br5FhD7c.js +0 -0
  345. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
  346. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
  347. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/sql-DNssxck8.js +0 -0
  348. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
  349. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/stata-DXn1tqOr.js +0 -0
  350. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
  351. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
  352. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/svelte-DOdLCIlh.js +0 -0
  353. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
  354. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  355. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  356. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
  357. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
  358. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
  359. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
  360. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/templ-CIwIngms.js +0 -0
  361. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
  362. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
  363. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  364. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
  365. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/ts-tags-BMVY4q-l.js +0 -0
  366. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
  367. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
  368. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
  369. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/twig-C8o_5mgw.js +0 -0
  370. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
  371. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/typespec-BRdr0IET.js +0 -0
  372. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
  373. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
  374. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
  375. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
  376. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
  377. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vesper-DdrHHSXu.js +0 -0
  378. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
  379. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
  380. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  381. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  382. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
  383. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vue-BU18DNDL.js +0 -0
  384. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
  385. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vue-vine-DGUAbOCX.js +0 -0
  386. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
  387. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
  388. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
  389. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
  390. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
  391. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
  392. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
  393. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
  394. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
  395. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
  396. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
  397. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
  398. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
  399. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
  400. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
  401. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
  402. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
  403. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/server/static/index.html +0 -0
  404. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/sessions.py +0 -0
  405. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/state.py +0 -0
  406. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/system_prompt.py +0 -0
  407. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/__init__.py +0 -0
  408. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/markdown.py +0 -0
  409. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/render.py +0 -0
  410. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/tui/theme.py +0 -0
  411. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/src/mycode_cli/web_tools.py +0 -0
  412. {mycode_cli-0.19.0 → mycode_cli-0.19.1}/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.19.0
3
+ Version: 0.19.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
@@ -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.19.0
28
+ Requires-Dist: mycode-sdk==0.19.1
29
29
  Requires-Dist: prompt-toolkit>=3.0.52
30
30
  Requires-Dist: pydantic>=2.13.4
31
31
  Requires-Dist: pygments>=2.20.0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mycode-cli"
7
- version = "0.19.0"
7
+ version = "0.19.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,7 +26,7 @@ classifiers = [
26
26
  ]
27
27
  keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
28
28
  dependencies = [
29
- "mycode-sdk==0.19.0",
29
+ "mycode-sdk==0.19.1",
30
30
  "fastapi>=0.139.0",
31
31
  "uvicorn[standard]>=0.51.0",
32
32
  "rich>=15.0.0",
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import io
6
7
  import json
7
8
  import os
8
9
  from base64 import b64encode
@@ -10,6 +11,7 @@ from collections.abc import AsyncIterator
10
11
  from dataclasses import replace
11
12
  from pathlib import Path
12
13
  from typing import Annotated, Any, cast
14
+ from uuid import uuid4
13
15
 
14
16
  from fastapi import APIRouter, HTTPException, Query, Request
15
17
  from fastapi import Path as PathParam
@@ -58,7 +60,8 @@ from mycode_cli.server.schemas import (
58
60
  UserInputRequest,
59
61
  )
60
62
  from mycode_cli.system_prompt import build_skill_snapshot_blocks, discover_slash_skills
61
- from mycode_cli.workspace import resolve_path
63
+ from mycode_cli.tools import read_text_window
64
+ from mycode_cli.workspace import CliDeps, resolve_path
62
65
 
63
66
  router = APIRouter()
64
67
 
@@ -72,7 +75,7 @@ def _resolve_workspace_attachment_path(rel_path: str, *, cwd: str) -> Path:
72
75
 
73
76
 
74
77
  def _read_workspace_text_attachment(rel_path: str, *, name: str | None, cwd: str) -> list[dict[str, Any]]:
75
- """Read a workspace text file selected via the @ menu into a `<file>` block.
78
+ """Read a workspace text file selected via the @ menu into a `<file>` block, bounded like ``read``.
76
79
 
77
80
  Re-validates the path at send time: it must resolve inside ``cwd`` (guards
78
81
  against a symlink swapped in after selection), be a regular file, and be
@@ -84,16 +87,40 @@ def _read_workspace_text_attachment(rel_path: str, *, name: str | None, cwd: str
84
87
  if detect_image_mime_type(path) or detect_document_mime_type(path):
85
88
  raise HTTPException(status_code=400, detail=f"not a text file: {rel_path}")
86
89
  try:
87
- return build_attachment_blocks([Attachment.path(path, name=name or rel_path)])
88
- except ValueError as exc:
89
- raise HTTPException(status_code=400, detail=str(exc)) from exc
90
+ with path.open(encoding="utf-8") as file:
91
+ window = read_text_window(file)
92
+ except UnicodeDecodeError as exc:
93
+ raise HTTPException(status_code=400, detail=f"not UTF-8 text: {rel_path}") from exc
94
+ return build_attachment_blocks([Attachment.text(window.render(path), name=name or rel_path)])
95
+
96
+
97
+ def _write_uploads(uploads: dict[Path, str]) -> None:
98
+ for path, text in uploads.items():
99
+ path.parent.mkdir(parents=True, exist_ok=True)
100
+ path.write_text(text, encoding="utf-8")
101
+
102
+
103
+ def _remove_uploads(uploads: dict[Path, str]) -> None:
104
+ """Undo ``_write_uploads`` for a message the run refused."""
105
+
106
+ for path in uploads:
107
+ path.unlink(missing_ok=True)
90
108
 
91
109
 
92
- async def _build_user_message(chat: UserInputRequest, cwd: str) -> ConversationMessage:
110
+ async def _build_user_message(chat: UserInputRequest, deps: CliDeps) -> tuple[ConversationMessage, dict[Path, str]]:
111
+ """Build the user message and the uploads to save before it is sent.
112
+
113
+ A text upload that does not fit one read window is shown truncated, and its
114
+ full text is returned for ``tool_output_dir`` so the model can read the rest.
115
+ The caller writes it once the request has passed validation.
116
+ """
117
+
118
+ cwd = str(deps.cwd)
119
+ uploads: dict[Path, str] = {}
93
120
  if not chat.input:
94
121
  text = str(chat.message or "").strip()
95
122
  snapshots = await asyncio.to_thread(build_skill_snapshot_blocks, text, cwd)
96
- return build_message("user", [*snapshots, text_block(text)])
123
+ return build_message("user", [*snapshots, text_block(text)]), uploads
97
124
 
98
125
  blocks: list[dict[str, Any]] = []
99
126
  visible_text: list[str] = []
@@ -106,7 +133,12 @@ async def _build_user_message(chat: UserInputRequest, cwd: str) -> ConversationM
106
133
  continue
107
134
  text = block.text or ""
108
135
  if block.is_attachment:
109
- blocks.extend(build_attachment_blocks([Attachment.text(text, name=str(block.name or "attached-file"))]))
136
+ name = str(block.name or "attached-file")
137
+ window = read_text_window(io.StringIO(text, newline=None))
138
+ upload_path = deps.tool_output_dir / f"upload-{uuid4().hex}"
139
+ if window.partial:
140
+ uploads[upload_path] = text
141
+ blocks.extend(build_attachment_blocks([Attachment.text(window.render(upload_path), name=name)]))
110
142
  elif text:
111
143
  visible_text.append(text)
112
144
  blocks.append(text_block(text))
@@ -143,7 +175,7 @@ async def _build_user_message(chat: UserInputRequest, cwd: str) -> ConversationM
143
175
  raise HTTPException(status_code=400, detail="input must include at least one non-empty block")
144
176
  snapshots = await asyncio.to_thread(build_skill_snapshot_blocks, "\n".join(visible_text), cwd)
145
177
  blocks[:0] = snapshots
146
- return build_message("user", blocks)
178
+ return build_message("user", blocks), uploads
147
179
 
148
180
 
149
181
  def _check_input_support(message: ConversationMessage, model: ModelMetadata | RunAgent) -> None:
@@ -193,7 +225,9 @@ async def chat(chat: ChatRequest, store: StoreDep, runs: RunManagerDep) -> ChatR
193
225
  api_base=chat.api_base,
194
226
  )
195
227
  session_id = chat.session_id or "default"
196
- user_message = await _build_user_message(chat, cwd)
228
+ user_message, uploads = await _build_user_message(
229
+ chat, CliDeps.for_session(cwd=cwd, data_dir=store.data_dir, session_id=session_id)
230
+ )
197
231
 
198
232
  # Capability check before any disk mutation — a failed check must not
199
233
  # leave an empty session on disk or land a premature rewind marker.
@@ -248,9 +282,10 @@ async def chat(chat: ChatRequest, store: StoreDep, runs: RunManagerDep) -> ChatR
248
282
  existing_messages = data["messages"] if data else []
249
283
  _validate_rewind_request(session=session, messages=existing_messages, rewind_to=chat.rewind_to)
250
284
 
251
- # All validation passed. Land the rewind marker (if any) and register
252
- # the user turn in the catalog: first turn creates the entry and sets
253
- # the title, later turns bump updated_at.
285
+ # All validation passed. Save uploads, land the rewind marker (if any)
286
+ # and register the user turn in the catalog: first turn creates the
287
+ # entry and sets the title, later turns bump updated_at.
288
+ await asyncio.to_thread(_write_uploads, uploads)
254
289
  if chat.rewind_to is not None:
255
290
  await store.append_rewind(session_id, chat.rewind_to)
256
291
  session = await store.record_user_turn(
@@ -398,17 +433,22 @@ async def compact_session(
398
433
 
399
434
  @router.post("/runs/{run_id}/steer")
400
435
  async def steer_run(
401
- run_id: Annotated[str, PathParam(min_length=1)], body: PendingInputRequest, runs: RunManagerDep
436
+ run_id: Annotated[str, PathParam(min_length=1)], body: PendingInputRequest, store: StoreDep, runs: RunManagerDep
402
437
  ) -> RunResponse:
403
438
  """Hand a user message to the running chat for its next step boundary."""
404
439
 
405
440
  state = await runs.get_run(run_id)
406
441
  if state is None:
407
442
  raise HTTPException(status_code=404, detail="run not found")
408
- message = await _build_user_message(body, state.cwd)
443
+ message, uploads = await _build_user_message(
444
+ body, CliDeps.for_session(cwd=state.cwd, data_dir=store.data_dir, session_id=state.session_id)
445
+ )
409
446
  message["meta"] = {"input_id": body.input_id}
410
447
  _check_input_support(message, state.agent)
448
+ # Uploads are on disk before the model can see the message; a refusal removes them.
449
+ await asyncio.to_thread(_write_uploads, uploads)
411
450
  if not state.agent.steer(message):
451
+ await asyncio.to_thread(_remove_uploads, uploads)
412
452
  raise HTTPException(
413
453
  status_code=409,
414
454
  detail={"message": "run is not accepting steers", "run": state.info()},
@@ -428,10 +468,14 @@ async def queue_message(
428
468
  state = await runs.get_active_run(session_id)
429
469
  if state is None:
430
470
  raise HTTPException(status_code=409, detail={"message": "session has no running chat to queue on"})
431
- message = await _build_user_message(body, state.cwd)
471
+ message, uploads = await _build_user_message(
472
+ body, CliDeps.for_session(cwd=state.cwd, data_dir=store.data_dir, session_id=session_id)
473
+ )
432
474
  message["meta"] = {"input_id": body.input_id}
433
475
  _check_input_support(message, state.agent)
476
+ await asyncio.to_thread(_write_uploads, uploads)
434
477
  if not await runs.enqueue(state, message):
478
+ await asyncio.to_thread(_remove_uploads, uploads)
435
479
  raise HTTPException(status_code=409, detail={"message": "session has no running chat to queue on"})
436
480
  await store.record_user_turn(
437
481
  session_id,
@@ -20,7 +20,7 @@ from contextlib import suppress
20
20
  from dataclasses import dataclass
21
21
  from difflib import SequenceMatcher, unified_diff
22
22
  from pathlib import Path
23
- from typing import BinaryIO
23
+ from typing import BinaryIO, TextIO
24
24
  from uuid import uuid4
25
25
 
26
26
  from pydantic import BaseModel, ConfigDict, Field
@@ -37,6 +37,7 @@ from mycode_cli.workspace import CliDeps, resolve_path
37
37
  DEFAULT_MAX_LINES = 2000
38
38
  DEFAULT_MAX_BYTES = 50 * 1024
39
39
  READ_MAX_LINE_CHARS = 2000
40
+ _READ_SKIP_CHUNK_CHARS = 64 * 1024
40
41
  BASH_TIMEOUT_SECONDS = 120
41
42
  _BASH_READ_CHUNK_SIZE = 64 * 1024
42
43
 
@@ -46,6 +47,110 @@ _BASH_READ_CHUNK_SIZE = 64 * 1024
46
47
  # ---------------------------------------------------------------------------
47
48
 
48
49
 
50
+ @dataclass(frozen=True)
51
+ class TextWindow:
52
+ """One bounded read of a text file: the lines that fit and what was left out."""
53
+
54
+ text: str
55
+ start_line: int
56
+ # Lines consumed from the top of the file, skipped ones included.
57
+ lines_read: int
58
+ # First line not shown because a line or byte limit was reached.
59
+ next_offset: int | None
60
+ first_shortened_line: int | None
61
+ shortened_lines: int
62
+
63
+ @property
64
+ def partial(self) -> bool:
65
+ """Whether part of the file from ``start_line`` on is not in ``text``."""
66
+
67
+ return self.next_offset is not None or self.shortened_lines > 0
68
+
69
+ def render(self, path: Path) -> str:
70
+ """Return ``text`` followed by notices telling the model how to read what was left out of ``path``."""
71
+
72
+ parts = [self.text] if self.text else []
73
+ if self.next_offset is not None:
74
+ parts.append(
75
+ f"[Showing lines {self.start_line}-{self.next_offset - 1} of {path}. "
76
+ + f"Use read with offset={self.next_offset} to continue.]"
77
+ )
78
+ if self.first_shortened_line is not None:
79
+ quoted = shlex.quote(str(path))
80
+ line = self.first_shortened_line
81
+ prefix = f"[Line {line} was shortened to {READ_MAX_LINE_CHARS} chars."
82
+ if self.shortened_lines > 1:
83
+ prefix = (
84
+ f"[{self.shortened_lines} lines were shortened to {READ_MAX_LINE_CHARS} chars. "
85
+ f"First shortened line: {line}."
86
+ )
87
+ parts.append(
88
+ f"{prefix}\n"
89
+ + "Use bash to inspect it in bytes:\n"
90
+ + f"sed -n '{line}p' {quoted} | head -c 2000\n"
91
+ + f"sed -n '{line}p' {quoted} | tail -c +2001 | head -c 2000]"
92
+ )
93
+ return "\n\n".join(parts)
94
+
95
+
96
+ def read_text_window(file: TextIO, *, offset: int = 1, limit: int = DEFAULT_MAX_LINES) -> TextWindow:
97
+ """Read up to ``limit`` lines from 1-indexed ``offset``, capped at ``DEFAULT_MAX_BYTES`` of UTF-8.
98
+
99
+ At most ``READ_MAX_LINE_CHARS + 1`` chars of a line are held at once; longer
100
+ lines are shortened. Reading stops once the window is full, without
101
+ scanning the line that did not fit.
102
+ """
103
+
104
+ lines: list[str] = []
105
+ size = 0
106
+ lines_read = 0
107
+ next_offset: int | None = None
108
+ first_shortened_line: int | None = None
109
+ shortened_lines = 0
110
+ while True:
111
+ if len(lines) >= limit:
112
+ # Probe one char instead of reading a possibly huge next line.
113
+ if file.read(1):
114
+ next_offset = lines_read + 1
115
+ break
116
+ head = file.readline(READ_MAX_LINE_CHARS + 1)
117
+ if not head:
118
+ break
119
+ lines_read += 1
120
+ shortened = not head.endswith("\n") and len(head) > READ_MAX_LINE_CHARS
121
+ if lines_read < offset:
122
+ if shortened:
123
+ _skip_line(file)
124
+ continue
125
+ line = head[:READ_MAX_LINE_CHARS] + " ... [line truncated]" if shortened else head.rstrip("\r\n")
126
+ line_bytes = len(line.encode("utf-8")) + 1
127
+ # A shortened line is at most a few KB, so the first line always fits.
128
+ if size + line_bytes > DEFAULT_MAX_BYTES:
129
+ next_offset = lines_read
130
+ break
131
+ if shortened:
132
+ _skip_line(file)
133
+ first_shortened_line = first_shortened_line or lines_read
134
+ shortened_lines += 1
135
+ lines.append(line)
136
+ size += line_bytes
137
+ return TextWindow(
138
+ text="\n".join(lines),
139
+ start_line=offset,
140
+ lines_read=lines_read,
141
+ next_offset=next_offset,
142
+ first_shortened_line=first_shortened_line,
143
+ shortened_lines=shortened_lines,
144
+ )
145
+
146
+
147
+ def _skip_line(file: TextIO) -> None:
148
+ """Consume the rest of the current line in bounded chunks."""
149
+
150
+ while (rest := file.readline(_READ_SKIP_CHUNK_CHARS)) and not rest.endswith("\n"):
151
+ pass
152
+
153
+
49
154
  @tool(
50
155
  name="read",
51
156
  description=(
@@ -94,28 +199,9 @@ def read_tool(
94
199
 
95
200
  start_line = offset if offset is not None and offset > 0 else 1
96
201
  line_limit = limit if limit is not None and limit > 0 else DEFAULT_MAX_LINES
97
- lines: list[str] = []
98
- total_lines = 0
99
- next_offset: int | None = None
100
- first_shortened_line: int | None = None
101
- shortened_lines = 0
102
-
103
202
  try:
104
203
  with file_path.open("r", encoding="utf-8") as f:
105
- for total_lines, raw_line in enumerate(f, start=1):
106
- if total_lines < start_line:
107
- continue
108
- if len(lines) >= line_limit:
109
- next_offset = total_lines
110
- break
111
-
112
- line = raw_line.rstrip("\r\n")
113
- if len(line) > READ_MAX_LINE_CHARS:
114
- if first_shortened_line is None:
115
- first_shortened_line = total_lines
116
- shortened_lines += 1
117
- line = line[:READ_MAX_LINE_CHARS] + " ... [line truncated]"
118
- lines.append(line)
204
+ window = read_text_window(f, offset=start_line, limit=line_limit)
119
205
  except FileNotFoundError:
120
206
  return ToolExecutionResult(output=f"error: file not found: {path}", is_error=True)
121
207
  except IsADirectoryError:
@@ -125,37 +211,13 @@ def read_tool(
125
211
  except Exception as exc:
126
212
  return ToolExecutionResult(output=f"error: failed to read file: {exc}", is_error=True)
127
213
 
128
- if total_lines < start_line and not (total_lines == 0 and start_line == 1):
214
+ if window.lines_read < start_line and not (window.lines_read == 0 and start_line == 1):
129
215
  return ToolExecutionResult(
130
- output=f"error: offset {offset} beyond end of file ({total_lines} lines)",
216
+ output=f"error: offset {offset} beyond end of file ({window.lines_read} lines)",
131
217
  is_error=True,
132
218
  )
133
219
 
134
- parts: list[str] = []
135
- content = "\n".join(lines)
136
- if content:
137
- parts.append(content)
138
-
139
- if next_offset is not None:
140
- parts.append(f"[Showing lines {start_line}-{next_offset - 1}. Use offset={next_offset} to continue.]")
141
-
142
- if first_shortened_line is not None:
143
- quoted = shlex.quote(str(file_path))
144
- prefix = f"[Line {first_shortened_line} was shortened to {READ_MAX_LINE_CHARS} chars."
145
- if shortened_lines > 1:
146
- prefix = (
147
- f"[{shortened_lines} lines were shortened to {READ_MAX_LINE_CHARS} chars. "
148
- f"First shortened line: {first_shortened_line}."
149
- )
150
- parts.append(
151
- f"{prefix}\n"
152
- + "Use bash to inspect it in bytes:\n"
153
- + f"sed -n '{first_shortened_line}p' {quoted} | head -c 2000\n"
154
- + f"sed -n '{first_shortened_line}p' {quoted} | tail -c +2001 | head -c 2000]"
155
- )
156
-
157
- joined = "\n\n".join(parts) if parts else ""
158
- return ToolExecutionResult(output=joined)
220
+ return ToolExecutionResult(output=window.render(file_path))
159
221
 
160
222
 
161
223
  # ---------------------------------------------------------------------------
@@ -52,6 +52,7 @@ from mycode_cli.runtime import load_session_totals
52
52
  from mycode_cli.sessions import SessionStore
53
53
  from mycode_cli.state import load_state, save_state
54
54
  from mycode_cli.system_prompt import build_skill_snapshot_blocks, discover_slash_skills
55
+ from mycode_cli.tools import read_text_window
55
56
  from mycode_cli.workspace import CliDeps, resolve_path
56
57
 
57
58
  from .render import (
@@ -584,13 +585,16 @@ class TerminalChat:
584
585
  unsupported_attachment_block(name=path_text, mime_type=pdf, kind="document", path=path_text)
585
586
  )
586
587
  continue
587
- # Text snippets keep the resolved path as the visible name; image/PDF default to the basename.
588
- # A non-UTF-8 binary raises ValueError inside build_attachment_blocks and is skipped.
589
- name = None if img or pdf else path_text
588
+ if img or pdf:
589
+ blocks.extend(build_attachment_blocks([Attachment.path(path)]))
590
+ continue
591
+ # Text keeps the resolved path as its visible name; a non-UTF-8 binary is skipped.
590
592
  try:
591
- blocks.extend(build_attachment_blocks([Attachment.path(path_text, name=name)]))
592
- except ValueError:
593
+ with path.open(encoding="utf-8") as file:
594
+ window = read_text_window(file)
595
+ except UnicodeDecodeError:
593
596
  continue
597
+ blocks.extend(build_attachment_blocks([Attachment.text(window.render(path), name=path_text)]))
594
598
 
595
599
  return build_message("user", blocks)
596
600
 
@@ -28,7 +28,7 @@ from prompt_toolkit.key_binding import ConditionalKeyBindings, KeyBindings, merg
28
28
  from prompt_toolkit.key_binding.defaults import load_key_bindings
29
29
  from prompt_toolkit.key_binding.key_processor import KeyPressEvent
30
30
  from prompt_toolkit.keys import Keys
31
- from prompt_toolkit.layout import ConditionalContainer, Float, FloatContainer, HSplit, Layout, Window
31
+ from prompt_toolkit.layout import ConditionalContainer, Float, FloatContainer, HSplit, Layout, ScrollOffsets, Window
32
32
  from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
33
33
  from prompt_toolkit.layout.dimension import Dimension
34
34
  from prompt_toolkit.layout.menus import CompletionsMenu
@@ -198,6 +198,8 @@ class Terminal:
198
198
  height=lambda: Dimension(max=self.tail_height),
199
199
  dont_extend_height=True,
200
200
  always_hide_cursor=True,
201
+ # Keeps the heading above a group's first row in view when scrolling up.
202
+ scroll_offsets=ScrollOffsets(top=1),
201
203
  )
202
204
 
203
205
  busy = Condition(lambda: self._busy)
File without changes
File without changes
File without changes
File without changes