mycode-cli 0.16.2__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/PKG-INFO +34 -25
  2. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/README.md +31 -23
  3. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/pyproject.toml +3 -2
  4. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/config.py +57 -108
  5. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/main.py +17 -33
  6. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/routers/chat.py +2 -8
  7. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/run_manager.py +3 -1
  8. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/schemas.py +3 -0
  9. mycode_cli-0.16.2/src/mycode_cli/server/static/assets/index-Cugw6tW0.js → mycode_cli-0.18.0/src/mycode_cli/server/static/assets/index-C7MhyuLY.js +83 -62
  10. mycode_cli-0.18.0/src/mycode_cli/server/static/assets/index-D71Nwfrp.css +1 -0
  11. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/index.html +2 -2
  12. mycode_cli-0.18.0/src/mycode_cli/state.py +105 -0
  13. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/tools.py +11 -4
  14. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/tui/chat.py +183 -333
  15. mycode_cli-0.18.0/src/mycode_cli/tui/markdown.py +362 -0
  16. mycode_cli-0.18.0/src/mycode_cli/tui/render.py +695 -0
  17. mycode_cli-0.18.0/src/mycode_cli/tui/terminal.py +628 -0
  18. mycode_cli-0.18.0/src/mycode_cli/tui/theme.py +92 -0
  19. mycode_cli-0.16.2/src/mycode_cli/server/static/assets/index-BWb1But9.css +0 -1
  20. mycode_cli-0.16.2/src/mycode_cli/tui/render.py +0 -738
  21. mycode_cli-0.16.2/src/mycode_cli/tui/state.py +0 -38
  22. mycode_cli-0.16.2/src/mycode_cli/tui/theme.py +0 -109
  23. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/.gitignore +0 -0
  24. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/LICENSE +0 -0
  25. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/hatch_build.py +0 -0
  26. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/__init__.py +0 -0
  27. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/permissions.py +0 -0
  28. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/runtime.py +0 -0
  29. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/__init__.py +0 -0
  30. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/app.py +0 -0
  31. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/deps.py +0 -0
  32. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/routers/__init__.py +0 -0
  33. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/routers/sessions.py +0 -0
  34. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/routers/settings.py +0 -0
  35. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/routers/workspaces.py +0 -0
  36. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/EditDiff-DOjxGJl-.js +0 -0
  37. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  38. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  39. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  40. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  41. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  42. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  43. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  44. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  45. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  46. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  47. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  48. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  49. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  50. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  51. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  52. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  53. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  54. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  55. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  56. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  57. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  58. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  59. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  60. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  61. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  62. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  63. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  64. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  65. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  66. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  67. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  68. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  69. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  70. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  71. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  72. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  73. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  74. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  75. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  76. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  77. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  78. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  79. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  80. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  81. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  82. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  83. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  84. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  85. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  86. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  87. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  88. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  89. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  90. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  91. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  92. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  93. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  94. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  95. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  96. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ThemeProvider-zTKbpxjH.js +0 -0
  97. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/abap-CLvhMVsD.js +0 -0
  98. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/actionscript-3--17pq3dv.js +0 -0
  99. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ada-C5qYipkI.js +0 -0
  100. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/andromeeda-vGVdxbeo.js +0 -0
  101. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/angular-html-BVBpGdXr.js +0 -0
  102. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/angular-ts-BfdufMKP.js +0 -0
  103. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/apache-U0d_L8uA.js +0 -0
  104. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/apex-VAyPSnFM.js +0 -0
  105. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/apl-DWBSSoBH.js +0 -0
  106. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/applescript-CCn79oCD.js +0 -0
  107. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ara-4CJ0cIlV.js +0 -0
  108. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/asciidoc-DE70LPWp.js +0 -0
  109. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/asm-Cmm7eHzH.js +0 -0
  110. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/astro-3LtMP0Sq.js +0 -0
  111. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/aurora-x-CDeNXAV0.js +0 -0
  112. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/awk-BWXHIvNe.js +0 -0
  113. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  114. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ayu-light-C3h-C4tm.js +0 -0
  115. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  116. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ballerina-B7ZEbQpA.js +0 -0
  117. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/bat-Bo4NYOV-.js +0 -0
  118. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/beancount-D-usSTwE.js +0 -0
  119. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/berry-DKpUyyne.js +0 -0
  120. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/bibtex-Ci_nEsc7.js +0 -0
  121. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/bicep-CUHmPFLl.js +0 -0
  122. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/bird2-C6vDhewU.js +0 -0
  123. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/blade-llJRbbtR.js +0 -0
  124. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/bsl-BkkzgIyY.js +0 -0
  125. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/c-Wt1voDr2.js +0 -0
  126. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/c3-BFHwR3_K.js +0 -0
  127. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cadence-CQ2zXKGN.js +0 -0
  128. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cairo-DLTphjLi.js +0 -0
  129. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  130. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  131. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  132. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  133. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/clarity-SemFz856.js +0 -0
  134. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/clojure-DqKBuwfJ.js +0 -0
  135. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cmake-Bj61d0ZC.js +0 -0
  136. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cobol-x_HIyl2P.js +0 -0
  137. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/codeowners-C8r90Shi.js +0 -0
  138. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/codeql-oeQT6MSM.js +0 -0
  139. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/coffee-CThvmt4R.js +0 -0
  140. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  141. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/coq-BrsZFFmf.js +0 -0
  142. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cpp-NtAeskI3.js +0 -0
  143. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/crystal-DNu_sX0G.js +0 -0
  144. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/csharp-oqKa8noW.js +0 -0
  145. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/css-DJp_X0uY.js +0 -0
  146. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/csv-Dx-8-gkx.js +0 -0
  147. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cue-CE9AQfxI.js +0 -0
  148. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/cypher-ClKdZ_lG.js +0 -0
  149. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/d-qD-0Kul2.js +0 -0
  150. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dark-plus-Cs2F2srj.js +0 -0
  151. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dart-CnvKMtbv.js +0 -0
  152. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dax-BkyTk9wS.js +0 -0
  153. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/desktop-Dlh5hvp9.js +0 -0
  154. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/diff-woXpYk--.js +0 -0
  155. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/docker-IyjqRm3v.js +0 -0
  156. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dotenv-_5a1GRtc.js +0 -0
  157. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dracula-BHWKrbxM.js +0 -0
  158. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dracula-soft-5eyTD99u.js +0 -0
  159. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  160. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/edge-ozw5tpLl.js +0 -0
  161. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/elixir-VhA6FeZt.js +0 -0
  162. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/elm-dREJmIFz.js +0 -0
  163. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/emacs-lisp-B4R74twV.js +0 -0
  164. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/engine-compile-Cbfz3NVV.js +0 -0
  165. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/erb-CIg6G69l.js +0 -0
  166. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/erlang-Cphh6RMH.js +0 -0
  167. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  168. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/everforest-light-Df2xbC6M.js +0 -0
  169. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fennel-DQxkIbk2.js +0 -0
  170. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fish-BJitypiv.js +0 -0
  171. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fluent-C03EYrpw.js +0 -0
  172. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  173. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  174. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/fsharp-D13ZGOAj.js +0 -0
  175. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gdresource-C0sCabJj.js +0 -0
  176. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gdscript-Cp2uCuqX.js +0 -0
  177. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gdshader-CBce3t8t.js +0 -0
  178. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/genie-CV2tkWYe.js +0 -0
  179. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gherkin-DExj1W_8.js +0 -0
  180. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/git-commit-BSykSTBG.js +0 -0
  181. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/git-rebase-B44mJPta.js +0 -0
  182. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-dark-C-LZuMrd.js +0 -0
  183. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  184. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  185. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  186. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-light-EUqPIrTm.js +0 -0
  187. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-light-default-BXViO-2h.js +0 -0
  188. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  189. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gleam-CSRkHgEL.js +0 -0
  190. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/glimmer-js-vH_gHG0-.js +0 -0
  191. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/glimmer-ts--abOzSAQ.js +0 -0
  192. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/glsl-Dv5r7kPw.js +0 -0
  193. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gn-ilITqXS6.js +0 -0
  194. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gnuplot-7GGW24-e.js +0 -0
  195. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/go-rLFTqkRN.js +0 -0
  196. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/graphql-CB4jsw2E.js +0 -0
  197. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/groovy-CacY0gHj.js +0 -0
  198. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  199. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  200. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  201. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  202. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  203. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  204. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hack-DvEYX148.js +0 -0
  205. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/haml-zE6W3STP.js +0 -0
  206. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/handlebars-CzBR2SDs.js +0 -0
  207. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/haskell-D8IpX4py.js +0 -0
  208. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/haxe-OTjmBuCE.js +0 -0
  209. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hcl-Dh228itO.js +0 -0
  210. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/highlighter-CZbuWYc3.js +0 -0
  211. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hjson-CxZEssPk.js +0 -0
  212. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hlsl-Cvrh5tZx.js +0 -0
  213. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/horizon-CE9ld1lL.js +0 -0
  214. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/horizon-bright-DSNQnXHK.js +0 -0
  215. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/houston-CsvMBhTu.js +0 -0
  216. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/html-C8UlPnhE.js +0 -0
  217. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/html-derivative-CY6NRz-J.js +0 -0
  218. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/http-Cyd7bS_S.js +0 -0
  219. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hurl-CWPsiEpf.js +0 -0
  220. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hxml-B0Qn7Nwc.js +0 -0
  221. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/hy-CZbG8q4J.js +0 -0
  222. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/imba-DsUTQ-LC.js +0 -0
  223. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ini-B5eOa1yu.js +0 -0
  224. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/java-CGc3VwQr.js +0 -0
  225. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/javascript-CUt1pgmJ.js +0 -0
  226. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jinja-CD-Z-FLd.js +0 -0
  227. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jison-imPNup1l.js +0 -0
  228. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/json-Bg9ijW3F.js +0 -0
  229. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/json5-BR5RXkoi.js +0 -0
  230. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jsonc-CYpm1nAK.js +0 -0
  231. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jsonl-CmCQp5Yx.js +0 -0
  232. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  233. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jssm-DXw9l8Rf.js +0 -0
  234. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/jsx-CY6oMTks.js +0 -0
  235. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/julia-Dc3O-irA.js +0 -0
  236. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/just-BhOq_Kbv.js +0 -0
  237. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  238. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  239. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  240. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kdl-CsD5j6eV.js +0 -0
  241. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kotlin-DhhofPvG.js +0 -0
  242. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/kusto-C7mF5XQf.js +0 -0
  243. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/laserwave-C_8bwKvT.js +0 -0
  244. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/latex-Cu4Y1d5w.js +0 -0
  245. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/lean-CewbzKMR.js +0 -0
  246. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/less-DVTAwKKz.js +0 -0
  247. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/light-plus-DVQuIRkW.js +0 -0
  248. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/liquid-CvXMrjlQ.js +0 -0
  249. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/llvm-Cm23YOpf.js +0 -0
  250. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/log-BNLmms1o.js +0 -0
  251. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/logo-Cluzi2Zq.js +0 -0
  252. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/lua-BjLEUjKY.js +0 -0
  253. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/luau-FMPmPwt6.js +0 -0
  254. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/make-Dixweg8N.js +0 -0
  255. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/markdown-BYOwaDjH.js +0 -0
  256. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/marko-DvhNOisQ.js +0 -0
  257. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/material-theme-Bm3Qr25_.js +0 -0
  258. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  259. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  260. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  261. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  262. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/matlab-D7qyCx1q.js +0 -0
  263. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/mdc-Bm9TpL1X.js +0 -0
  264. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/mdx-DQZ5AkYe.js +0 -0
  265. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/mermaid-Bk4SNUv9.js +0 -0
  266. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/min-dark-BSWPekZh.js +0 -0
  267. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/min-light-DDpmG2fV.js +0 -0
  268. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/mipsasm-BMqwQI7S.js +0 -0
  269. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/mojo-BgCJLMeH.js +0 -0
  270. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/monokai-CdkpiU2Y.js +0 -0
  271. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/moonbit-CaWjb8XO.js +0 -0
  272. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/move-B1IS1UjX.js +0 -0
  273. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/narrat-_X_XdTYD.js +0 -0
  274. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nextflow-BJtWHP5T.js +0 -0
  275. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nextflow-groovy-DJMQeKeT.js +0 -0
  276. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nginx-Bhc82uuv.js +0 -0
  277. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/night-owl-DhmEMT88.js +0 -0
  278. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  279. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nim-DXTVBFnF.js +0 -0
  280. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nix-IvuFDN5E.js +0 -0
  281. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nord-Cb4Vim4T.js +0 -0
  282. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/nushell-DcLAeLz5.js +0 -0
  283. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/objective-c-D1A_Heim.js +0 -0
  284. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  285. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ocaml-O90oeIOV.js +0 -0
  286. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/odin-B1RWQWA5.js +0 -0
  287. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  288. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/one-light-D7Lr4KcI.js +0 -0
  289. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/openscad-BUDT5pXO.js +0 -0
  290. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pascal-4ZHwLPI5.js +0 -0
  291. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/perl-C7veXV9z.js +0 -0
  292. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/php-BRiuMnnr.js +0 -0
  293. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-dark-sU4Zdns8.js +0 -0
  294. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-dark-soft-HXgun5vs.js +0 -0
  295. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-dark-vibrant-D4RhcSIK.js +0 -0
  296. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-light-DWBk51d8.js +0 -0
  297. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-light-soft-CodEzPxf.js +0 -0
  298. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pierre-light-vibrant-B76X7i5Y.js +0 -0
  299. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pkl-ot-7Btpt.js +0 -0
  300. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/plastic-DQwYfKfQ.js +0 -0
  301. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/plsql-DGHpHOYJ.js +0 -0
  302. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/po-BiJDBrnU.js +0 -0
  303. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/poimandres-DRFjx7u4.js +0 -0
  304. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/polar-C7UOKdEL.js +0 -0
  305. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/postcss-BXeXVLqQ.js +0 -0
  306. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/powerquery-DNMTfnFr.js +0 -0
  307. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/powershell-DshXNtvi.js +0 -0
  308. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/preload-helper-FMEmyu_K.js +0 -0
  309. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/prisma-BsRQq5mF.js +0 -0
  310. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/prolog-iXnhIJG7.js +0 -0
  311. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/proto-DB4EqR-F.js +0 -0
  312. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/pug-C5hz5LQ7.js +0 -0
  313. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/puppet-CDv2pdJW.js +0 -0
  314. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/purescript-9MfHhQsQ.js +0 -0
  315. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/python-gzcpVVnB.js +0 -0
  316. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/qml-BdUV3aTS.js +0 -0
  317. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/qmldir-DCQb3MpD.js +0 -0
  318. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/qss-Fe1Jh2GI.js +0 -0
  319. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/r-8R7vtdQc.js +0 -0
  320. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/racket-DcIDlBhZ.js +0 -0
  321. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/raku-B3gFvitq.js +0 -0
  322. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/razor-DRL52XO2.js +0 -0
  323. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/red-CJ3rzSJv.js +0 -0
  324. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/reg-CRGYupPL.js +0 -0
  325. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/regexp-Omp9DhTb.js +0 -0
  326. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rel-BtDbiS_P.js +0 -0
  327. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/riscv-Ckw8ddFX.js +0 -0
  328. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  329. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ron-VUp2lXgN.js +0 -0
  330. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rose-pine-BthvhNj6.js +0 -0
  331. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  332. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  333. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rosmsg-CAekHB0j.js +0 -0
  334. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rst-BHX71KW9.js +0 -0
  335. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ruby-B--HzjGU.js +0 -0
  336. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/rust-Cfkwpbl8.js +0 -0
  337. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/sas-DrLaYOK_.js +0 -0
  338. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/sass-DXrisJhu.js +0 -0
  339. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/scala-DKOlJaKm.js +0 -0
  340. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/scheme-DQCgrYNe.js +0 -0
  341. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/scss-DdSxiZKl.js +0 -0
  342. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/sdbl-bTVj8UrX.js +0 -0
  343. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/shaderlab-TOUzSsQk.js +0 -0
  344. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/shellscript-DwcUjJBL.js +0 -0
  345. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/shellsession-CPZkydE6.js +0 -0
  346. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/slack-dark-DnToyrRv.js +0 -0
  347. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  348. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/smalltalk-B16xEiuN.js +0 -0
  349. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  350. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/solarized-dark-DV17i1UV.js +0 -0
  351. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/solarized-light-DSh2HLQt.js +0 -0
  352. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/solidity-CKzVLygQ.js +0 -0
  353. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/soy-Br5FhD7c.js +0 -0
  354. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/sparql-D_iOobhT.js +0 -0
  355. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/splunk-BC2Px7Mm.js +0 -0
  356. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/sql-DNssxck8.js +0 -0
  357. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ssh-config-BgfXC-Er.js +0 -0
  358. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/stata-DXn1tqOr.js +0 -0
  359. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/stylus-B6D30XZt.js +0 -0
  360. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/surrealql-IeLNQw0f.js +0 -0
  361. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/svelte-DOdLCIlh.js +0 -0
  362. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/swift-DonLKvLd.js +0 -0
  363. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  364. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  365. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/systemd-BxMlprV5.js +0 -0
  366. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/talonscript-CohzipZa.js +0 -0
  367. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tasl-DMoTqEGO.js +0 -0
  368. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tcl-CZd0xW_V.js +0 -0
  369. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/templ-CIwIngms.js +0 -0
  370. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/terraform-DswuEJGm.js +0 -0
  371. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tex-D8QMumu5.js +0 -0
  372. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  373. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/toml-CcmNWLt0.js +0 -0
  374. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/ts-tags-BMVY4q-l.js +0 -0
  375. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tsv-sltzmVWM.js +0 -0
  376. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/tsx-5Eka4NBX.js +0 -0
  377. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/turtle-ByJddavk.js +0 -0
  378. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/twig-C8o_5mgw.js +0 -0
  379. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/typescript-DOu2WMV5.js +0 -0
  380. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/typespec-BRdr0IET.js +0 -0
  381. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/typst-DI99ib-x.js +0 -0
  382. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/v-DETTlOr0.js +0 -0
  383. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vala-zf12oZj6.js +0 -0
  384. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vb-Djn5o6TS.js +0 -0
  385. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/verilog-CiiDBU1e.js +0 -0
  386. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vesper-DdrHHSXu.js +0 -0
  387. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vhdl-BroJfC0k.js +0 -0
  388. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/viml-DvXPmvsu.js +0 -0
  389. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  390. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  391. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vitesse-light-VbXTXTou.js +0 -0
  392. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vue-BU18DNDL.js +0 -0
  393. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vue-html-BeluIYX0.js +0 -0
  394. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vue-vine-DGUAbOCX.js +0 -0
  395. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/vyper-CgoNMtux.js +0 -0
  396. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wasm-BnjxR4X6.js +0 -0
  397. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wasm-ByWQv1Qj.js +0 -0
  398. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wenyan-C8pVoKbM.js +0 -0
  399. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wgsl-BsKzXJz4.js +0 -0
  400. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wikitext-ClFFjSW2.js +0 -0
  401. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wit-DdvCle-K.js +0 -0
  402. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/wolfram-DLL8P-h_.js +0 -0
  403. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/xml-DIqSwXR3.js +0 -0
  404. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/xsl-Ct_-YIAy.js +0 -0
  405. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/yaml-DTtCYNlS.js +0 -0
  406. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/zenscript-BnlCZFoB.js +0 -0
  407. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/assets/zig-CMLA9XwU.js +0 -0
  408. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/favicon_slashes.svg +0 -0
  409. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/fonts/OFL.txt +0 -0
  410. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/fonts/SourceCodePro-Variable.woff2 +0 -0
  411. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/server/static/fonts/SourceSans3-Variable.woff2 +0 -0
  412. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/sessions.py +0 -0
  413. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/system_prompt.py +0 -0
  414. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/tui/__init__.py +0 -0
  415. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/web_tools.py +0 -0
  416. {mycode_cli-0.16.2 → mycode_cli-0.18.0}/src/mycode_cli/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: mycode-cli
3
- Version: 0.16.2
3
+ Version: 0.18.0
4
4
  Summary: Minimal coding agent CLI and web UI built on mycode-sdk.
5
5
  Project-URL: Homepage, https://github.com/legibet/mycode
6
6
  Project-URL: Repository, https://github.com/legibet/mycode
@@ -25,9 +25,10 @@ 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.16.2
28
+ Requires-Dist: mycode-sdk==0.18.0
29
29
  Requires-Dist: prompt-toolkit>=3.0.52
30
30
  Requires-Dist: pydantic>=2.13.4
31
+ Requires-Dist: pygments>=2.20.0
31
32
  Requires-Dist: pyyaml>=6.0.3
32
33
  Requires-Dist: rich>=15.0.0
33
34
  Requires-Dist: typer>=0.26.8
@@ -67,19 +68,19 @@ mycode run "explain how the session store works"
67
68
 
68
69
  ## Providers
69
70
 
70
- | Provider | id | Env var |
71
- | --- | --- | --- |
72
- | Anthropic | `anthropic` | `ANTHROPIC_API_KEY` |
73
- | OpenAI | `openai` | `OPENAI_API_KEY` |
74
- | Google Gemini | `google` | `GEMINI_API_KEY` |
75
- | Moonshot | `moonshotai` | `MOONSHOT_API_KEY` |
76
- | MiniMax | `minimax` | `MINIMAX_API_KEY` |
77
- | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |
78
- | Z.AI | `zai` | `ZAI_API_KEY` |
79
- | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` |
80
- | Alibaba Cloud | `alibaba` | `DASHSCOPE_API_KEY` |
81
- | xAI | `xai` | `XAI_API_KEY` |
82
- | OpenAI-compatible | `openai_chat` | - |
71
+ | Provider | id | Env var |
72
+ | ----------------- | ------------- | -------------------- |
73
+ | Anthropic | `anthropic` | `ANTHROPIC_API_KEY` |
74
+ | OpenAI | `openai` | `OPENAI_API_KEY` |
75
+ | Google Gemini | `google` | `GEMINI_API_KEY` |
76
+ | Moonshot | `moonshotai` | `MOONSHOT_API_KEY` |
77
+ | MiniMax | `minimax` | `MINIMAX_API_KEY` |
78
+ | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |
79
+ | Z.AI | `zai` | `ZAI_API_KEY` |
80
+ | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` |
81
+ | Alibaba Cloud | `alibaba` | `DASHSCOPE_API_KEY` |
82
+ | xAI | `xai` | `XAI_API_KEY` |
83
+ | OpenAI-compatible | `openai_chat` | - |
83
84
 
84
85
  Run `/model` in the TUI to see available models.
85
86
 
@@ -87,12 +88,6 @@ Run `/model` in the TUI to see available models.
87
88
 
88
89
  A config file is optional — API keys from the environment are usually enough. Create `~/.mycode/config.json` (global) or `.mycode/config.json` in a project to customize further.
89
90
 
90
- Set a default provider and model:
91
-
92
- ```json
93
- {"default": {"provider": "anthropic", "model": "claude-sonnet-5"}}
94
- ```
95
-
96
91
  Expose additional models on an existing provider, or register a custom endpoint such as a private or regional deployment:
97
92
 
98
93
  ```json
@@ -125,6 +120,24 @@ The CLI assembles the system prompt from instructions files and discovered skill
125
120
  - Skills are directories containing a `SKILL.md`. Scan roots, lowest to highest priority: `~/.agents/skills/`, `~/.mycode/skills/`, then `.agents/skills/` and `.mycode/skills/` from the project root down to the current directory. Later roots override earlier ones by skill name. `SKILL.md` needs YAML frontmatter with `name` and `description`.
126
121
  - A standalone `/<skill-name>` token in a message loads the matching skill, e.g. `Use /fastapi to review this route`. Names matching built-in slash commands are reserved.
127
122
 
123
+ ## Terminal UI
124
+
125
+ | Key | Action |
126
+ | ---------------------------- | --------------------------------------------------------------------------- |
127
+ | Enter | Send the message; with a completion menu open, accept the highlighted entry |
128
+ | Esc then Enter, or Alt+Enter | Insert a newline |
129
+ | Esc | Interrupt the reply; close a selection list |
130
+ | Ctrl+C | Interrupt the reply; otherwise clear the input |
131
+ | Ctrl+D | Exit (empty input only) |
132
+ | Ctrl+L | Clear the screen |
133
+ | Up / Down | Move between lines; on the first or last line, browse input history |
134
+
135
+ Messages typed while a reply runs are queued and sent in order after it finishes.
136
+
137
+ `@path` attaches a file to the message: text files as snapshots, images and PDFs as image or document input. Pasted file paths become `@path` references.
138
+
139
+ Slash commands: `/new` `/resume` `/rewind` `/model` `/effort` `/clear` `/compact` `/q`. `exit` and `quit` also exit.
140
+
128
141
  ## CLI Reference
129
142
 
130
143
  ```bash
@@ -138,10 +151,6 @@ mycode web --dev API only, no static files
138
151
  mycode session list list saved sessions
139
152
  ```
140
153
 
141
- Interactive slash commands: `/new` `/resume` `/rewind` `/provider` `/model` `/effort` `/clear` `/compact` `/q`
142
-
143
- Inside the TUI, `@path` attaches a file to the message — text files go as snapshots, images and PDFs as structured input.
144
-
145
154
  ## License
146
155
 
147
156
  MIT
@@ -31,19 +31,19 @@ mycode run "explain how the session store works"
31
31
 
32
32
  ## Providers
33
33
 
34
- | Provider | id | Env var |
35
- | --- | --- | --- |
36
- | Anthropic | `anthropic` | `ANTHROPIC_API_KEY` |
37
- | OpenAI | `openai` | `OPENAI_API_KEY` |
38
- | Google Gemini | `google` | `GEMINI_API_KEY` |
39
- | Moonshot | `moonshotai` | `MOONSHOT_API_KEY` |
40
- | MiniMax | `minimax` | `MINIMAX_API_KEY` |
41
- | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |
42
- | Z.AI | `zai` | `ZAI_API_KEY` |
43
- | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` |
44
- | Alibaba Cloud | `alibaba` | `DASHSCOPE_API_KEY` |
45
- | xAI | `xai` | `XAI_API_KEY` |
46
- | OpenAI-compatible | `openai_chat` | - |
34
+ | Provider | id | Env var |
35
+ | ----------------- | ------------- | -------------------- |
36
+ | Anthropic | `anthropic` | `ANTHROPIC_API_KEY` |
37
+ | OpenAI | `openai` | `OPENAI_API_KEY` |
38
+ | Google Gemini | `google` | `GEMINI_API_KEY` |
39
+ | Moonshot | `moonshotai` | `MOONSHOT_API_KEY` |
40
+ | MiniMax | `minimax` | `MINIMAX_API_KEY` |
41
+ | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |
42
+ | Z.AI | `zai` | `ZAI_API_KEY` |
43
+ | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` |
44
+ | Alibaba Cloud | `alibaba` | `DASHSCOPE_API_KEY` |
45
+ | xAI | `xai` | `XAI_API_KEY` |
46
+ | OpenAI-compatible | `openai_chat` | - |
47
47
 
48
48
  Run `/model` in the TUI to see available models.
49
49
 
@@ -51,12 +51,6 @@ Run `/model` in the TUI to see available models.
51
51
 
52
52
  A config file is optional — API keys from the environment are usually enough. Create `~/.mycode/config.json` (global) or `.mycode/config.json` in a project to customize further.
53
53
 
54
- Set a default provider and model:
55
-
56
- ```json
57
- {"default": {"provider": "anthropic", "model": "claude-sonnet-5"}}
58
- ```
59
-
60
54
  Expose additional models on an existing provider, or register a custom endpoint such as a private or regional deployment:
61
55
 
62
56
  ```json
@@ -89,6 +83,24 @@ The CLI assembles the system prompt from instructions files and discovered skill
89
83
  - Skills are directories containing a `SKILL.md`. Scan roots, lowest to highest priority: `~/.agents/skills/`, `~/.mycode/skills/`, then `.agents/skills/` and `.mycode/skills/` from the project root down to the current directory. Later roots override earlier ones by skill name. `SKILL.md` needs YAML frontmatter with `name` and `description`.
90
84
  - A standalone `/<skill-name>` token in a message loads the matching skill, e.g. `Use /fastapi to review this route`. Names matching built-in slash commands are reserved.
91
85
 
86
+ ## Terminal UI
87
+
88
+ | Key | Action |
89
+ | ---------------------------- | --------------------------------------------------------------------------- |
90
+ | Enter | Send the message; with a completion menu open, accept the highlighted entry |
91
+ | Esc then Enter, or Alt+Enter | Insert a newline |
92
+ | Esc | Interrupt the reply; close a selection list |
93
+ | Ctrl+C | Interrupt the reply; otherwise clear the input |
94
+ | Ctrl+D | Exit (empty input only) |
95
+ | Ctrl+L | Clear the screen |
96
+ | Up / Down | Move between lines; on the first or last line, browse input history |
97
+
98
+ Messages typed while a reply runs are queued and sent in order after it finishes.
99
+
100
+ `@path` attaches a file to the message: text files as snapshots, images and PDFs as image or document input. Pasted file paths become `@path` references.
101
+
102
+ Slash commands: `/new` `/resume` `/rewind` `/model` `/effort` `/clear` `/compact` `/q`. `exit` and `quit` also exit.
103
+
92
104
  ## CLI Reference
93
105
 
94
106
  ```bash
@@ -102,10 +114,6 @@ mycode web --dev API only, no static files
102
114
  mycode session list list saved sessions
103
115
  ```
104
116
 
105
- Interactive slash commands: `/new` `/resume` `/rewind` `/provider` `/model` `/effort` `/clear` `/compact` `/q`
106
-
107
- Inside the TUI, `@path` attaches a file to the message — text files go as snapshots, images and PDFs as structured input.
108
-
109
117
  ## License
110
118
 
111
119
  MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mycode-cli"
7
- version = "0.16.2"
7
+ version = "0.18.0"
8
8
  description = "Minimal coding agent CLI and web UI built on mycode-sdk."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -26,11 +26,12 @@ classifiers = [
26
26
  ]
27
27
  keywords = ["agent", "cli", "llm", "coding-agent", "fastapi"]
28
28
  dependencies = [
29
- "mycode-sdk==0.16.2",
29
+ "mycode-sdk==0.18.0",
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
+ "pygments>=2.20.0",
34
35
  "pydantic>=2.13.4",
35
36
  "typer>=0.26.8",
36
37
  "pyyaml>=6.0.3",
@@ -99,8 +99,6 @@ class WebConfig:
99
99
  @dataclass(frozen=True)
100
100
  class Settings:
101
101
  providers: dict[str, ProviderConfig]
102
- default_provider: str | None
103
- default_model: str | None
104
102
  port: int
105
103
  cwd: str
106
104
  project: str
@@ -305,10 +303,14 @@ def _clean_config_layer(data: Any) -> dict[str, Any]:
305
303
 
306
304
  out: dict[str, Any] = {}
307
305
 
308
- if data.get("default") is not None:
309
- default = _validate_default_config(data["default"])
310
- if default:
311
- out["default"] = default
306
+ compact_threshold = data.get("compact_threshold")
307
+ if compact_threshold is False:
308
+ out["compact_threshold"] = False
309
+ elif compact_threshold is not None:
310
+ parsed = None if isinstance(compact_threshold, bool) else parse_compact_threshold(compact_threshold)
311
+ if parsed is None:
312
+ raise ValueError("compact_threshold must be a number in [0, 1] or false")
313
+ out["compact_threshold"] = parsed
312
314
 
313
315
  if data.get("permission") is not None:
314
316
  out["permission"] = _validate_permission_config(data["permission"])
@@ -345,30 +347,6 @@ def _optional_config_string(raw: dict[str, Any], key: str, label: str) -> str |
345
347
  return value.strip() or None
346
348
 
347
349
 
348
- def _validate_default_config(raw: Any) -> dict[str, Any]:
349
- if not isinstance(raw, dict):
350
- raise ValueError("default must be an object")
351
-
352
- out: dict[str, Any] = {}
353
- for key in ("provider", "model"):
354
- value = _optional_config_string(raw, key, f"default.{key}")
355
- if value:
356
- out[key] = value
357
-
358
- compact_threshold = raw.get("compact_threshold")
359
- if compact_threshold is False:
360
- out["compact_threshold"] = False
361
- elif compact_threshold is not None:
362
- if isinstance(compact_threshold, bool):
363
- raise ValueError("default.compact_threshold must be a number in [0, 1] or false")
364
- parsed = parse_compact_threshold(compact_threshold)
365
- if parsed is None:
366
- raise ValueError("default.compact_threshold must be a number in [0, 1] or false")
367
- out["compact_threshold"] = parsed
368
-
369
- return out
370
-
371
-
372
350
  def _validate_permission_config(raw: Any) -> PermissionLevel | dict[str, Any]:
373
351
  if isinstance(raw, str):
374
352
  return normalize_permission_level(raw)
@@ -498,8 +476,6 @@ def get_settings(cwd: str | None = None) -> Settings:
498
476
  resolved_project = str(resolve_project(resolved_cwd))
499
477
 
500
478
  raw_providers: dict[str, dict[str, Any]] = {}
501
- default_provider: str | None = None
502
- default_model: str | None = None
503
479
  compact_threshold: float | None = None
504
480
  permission = PermissionConfig()
505
481
  raw_web: dict[str, Any] = {}
@@ -534,13 +510,8 @@ def get_settings(cwd: str | None = None) -> Settings:
534
510
 
535
511
  raw_providers[name] = merged
536
512
 
537
- default = data.get("default", {})
538
- if "provider" in default:
539
- default_provider = default["provider"]
540
- if "model" in default:
541
- default_model = default["model"]
542
- if "compact_threshold" in default:
543
- compact_threshold = float(default["compact_threshold"])
513
+ if "compact_threshold" in data:
514
+ compact_threshold = float(data["compact_threshold"])
544
515
 
545
516
  if "permission" in data:
546
517
  permission = parse_permission(data.get("permission"), permission)
@@ -561,8 +532,6 @@ def get_settings(cwd: str | None = None) -> Settings:
561
532
 
562
533
  return Settings(
563
534
  providers=_build_providers(raw_providers),
564
- default_provider=default_provider,
565
- default_model=default_model,
566
535
  compact_threshold=compact_threshold,
567
536
  permission=permission,
568
537
  web=_build_web_config(raw_web),
@@ -691,44 +660,35 @@ def resolve_provider(
691
660
  api_key: str | None = None,
692
661
  api_base: str | None = None,
693
662
  ) -> ResolvedProvider:
694
- """Resolve provider, model, api_key, and api_base from settings and overrides."""
695
-
696
- selected_name = (provider_name or settings.default_provider or "").strip()
697
- if selected_name:
698
- try:
699
- return _resolve_provider_runtime(
700
- settings,
701
- selected_name=selected_name,
702
- model=model,
703
- api_key=api_key,
704
- api_base=api_base,
663
+ """Resolve provider, model, api_key, and api_base from settings and overrides.
664
+
665
+ Without a provider name, the first available provider is used.
666
+ """
667
+
668
+ selected_name = (provider_name or "").strip()
669
+ if not selected_name:
670
+ refs = _available_provider_references(settings)
671
+ if not refs:
672
+ env_names = list(
673
+ dict.fromkeys(
674
+ env_name
675
+ for provider_id in list_env_discoverable_providers()
676
+ for env_name in provider_env_api_key_names(provider_id)
677
+ )
705
678
  )
706
- except ValueError:
707
- # A caller-supplied provider_name must fail loudly rather than silently fall back.
708
- if provider_name:
709
- raise
710
-
711
- refs = _available_provider_references(settings)
712
- if refs:
713
- return _resolve_provider_runtime(
714
- settings,
715
- selected_name=refs[0],
716
- model=model,
717
- api_key=api_key,
718
- api_base=api_base,
719
- )
679
+ checked = ", ".join(env_names) or "<api key env>"
680
+ raise ValueError(
681
+ "no available providers found; set one of the supported API key env vars "
682
+ + f"({checked}) or configure a provider in ~/.mycode/config.json or a project .mycode/config.json"
683
+ )
684
+ selected_name = refs[0]
720
685
 
721
- env_names = list(
722
- dict.fromkeys(
723
- env_name
724
- for provider_id in list_env_discoverable_providers()
725
- for env_name in provider_env_api_key_names(provider_id)
726
- )
727
- )
728
- checked = ", ".join(env_names) or "<api key env>"
729
- raise ValueError(
730
- "no available providers found; set one of the supported API key env vars "
731
- + f"({checked}) or configure a provider in ~/.mycode/config.json or a project .mycode/config.json"
686
+ return _resolve_provider_runtime(
687
+ settings,
688
+ selected_name=selected_name,
689
+ model=model,
690
+ api_key=api_key,
691
+ api_base=api_base,
732
692
  )
733
693
 
734
694
 
@@ -744,41 +704,32 @@ def resolve_provider_choices(settings: Settings) -> list[ResolvedProvider]:
744
704
  return choices
745
705
 
746
706
 
747
- def _available_provider_references(settings: Settings) -> list[str]:
748
- """Return usable provider names with the configured default first."""
749
-
750
- available: list[str] = []
751
- seen: set[str] = set()
752
- configured_types_with_credentials: set[str] = set()
707
+ def provider_models(settings: Settings, provider: ResolvedProvider) -> list[str]:
708
+ """Return a resolved provider's selectable models: configured ones, else the adapter defaults."""
753
709
 
754
- def add(name: str | None) -> None:
755
- cleaned = (name or "").strip()
756
- if not cleaned or cleaned in seen:
757
- return
710
+ provider_config = settings.providers.get(provider.provider_name or "")
711
+ if provider_config and provider_config.models:
712
+ return list(provider_config.models)
713
+ return list(provider_default_models(provider.provider)) or [provider.model]
758
714
 
759
- provider_config = settings.providers.get(cleaned)
760
- provider_type = provider_config.type if provider_config else cleaned
761
- if not is_supported_provider(provider_type):
762
- return
763
715
 
764
- if provider_config:
765
- if not provider_is_available(provider_config):
766
- return
767
- configured_types_with_credentials.add(provider_type)
768
- elif not provider_api_key_from_env(provider_type):
769
- return
770
-
771
- seen.add(cleaned)
772
- available.append(cleaned)
773
-
774
- add(settings.default_provider)
716
+ def _available_provider_references(settings: Settings) -> list[str]:
717
+ """Return usable provider names: configured providers in order, then env-discovered built-ins."""
775
718
 
776
- for name in settings.providers:
777
- add(name)
719
+ available: list[str] = []
720
+ configured_types: set[str] = set()
721
+ for name, config in settings.providers.items():
722
+ if is_supported_provider(config.type) and provider_is_available(config):
723
+ available.append(name)
724
+ configured_types.add(config.type)
778
725
 
779
726
  for provider_id in list_env_discoverable_providers():
780
- if provider_id not in configured_types_with_credentials:
781
- add(provider_id)
727
+ if (
728
+ provider_id not in configured_types
729
+ and provider_id not in settings.providers
730
+ and provider_api_key_from_env(provider_id)
731
+ ):
732
+ available.append(provider_id)
782
733
 
783
734
  return available
784
735
 
@@ -805,8 +756,6 @@ def _resolve_provider_runtime(
805
756
  resolved_model = requested_model
806
757
  elif provider_config and provider_config.models:
807
758
  resolved_model = next(iter(provider_config.models))
808
- elif selected_name == settings.default_provider and (settings.default_model or "").strip():
809
- resolved_model = str(settings.default_model).strip()
810
759
  else:
811
760
  defaults = provider_default_models(provider_type)
812
761
  if not defaults:
@@ -5,9 +5,9 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  import os
7
7
  import sys
8
- from contextlib import aclosing, suppress
8
+ from contextlib import aclosing
9
9
  from dataclasses import dataclass, replace
10
- from typing import TYPE_CHECKING, Annotated, Any, Literal
10
+ from typing import Annotated, Any, Literal
11
11
  from uuid import uuid4
12
12
 
13
13
  import typer
@@ -21,17 +21,14 @@ from mycode_cli.config import (
21
21
  get_settings,
22
22
  normalize_reasoning_effort,
23
23
  parse_permission,
24
- resolve_provider,
25
24
  resolve_sessions_dir,
26
25
  )
27
26
  from mycode_cli.permissions import PERMISSION_DENIED_BY_USER_OUTPUT, PERMISSION_DENIED_OUTPUT
28
27
  from mycode_cli.sessions import SessionStore
28
+ from mycode_cli.state import load_state, resolve_remembered_provider
29
29
 
30
30
  from .runtime import build_agent
31
31
 
32
- if TYPE_CHECKING:
33
- from .tui.render import TerminalView
34
-
35
32
  app = typer.Typer(add_completion=False, pretty_exceptions_enable=False)
36
33
  session_app = typer.Typer(help="Session management")
37
34
  app.add_typer(session_app, name="session")
@@ -140,7 +137,6 @@ async def run_noninteractive(agent: Agent, message: str, *, store: SessionStore,
140
137
  @dataclass
141
138
  class _BootstrapContext:
142
139
  store: SessionStore
143
- view: TerminalView
144
140
  settings: Settings
145
141
  resolved_provider: ResolvedProvider
146
142
  resolved_session: ResolvedSession
@@ -159,21 +155,20 @@ def _bootstrap(
159
155
  ) -> _BootstrapContext:
160
156
  """Shared setup for the chat and run commands."""
161
157
 
162
- from .tui.render import TerminalView
163
-
164
158
  if session and continue_last:
165
159
  raise typer.BadParameter("--session and --continue are mutually exclusive")
166
160
 
167
161
  cwd = os.path.abspath(os.getcwd())
168
162
  store = SessionStore(data_dir=resolve_sessions_dir())
169
- view = TerminalView()
170
163
  try:
171
164
  settings = get_settings(cwd)
172
165
  if permission is not None:
173
166
  settings = replace(settings, permission=parse_permission(permission, settings.permission))
174
- resolved_provider = resolve_provider(settings, provider_name=provider, model=model)
175
- resolved_effort = normalize_reasoning_effort(reasoning_effort)
176
- if resolved_effort is not None:
167
+ state = load_state()
168
+ resolved_provider = resolve_remembered_provider(settings, state, provider_name=provider, model=model)
169
+ if reasoning_effort is None:
170
+ resolved_effort = state.effort_for(resolved_provider)
171
+ elif (resolved_effort := normalize_reasoning_effort(reasoning_effort)) is not None:
177
172
  if not resolved_provider.supports_reasoning_effort:
178
173
  raise ValueError(f"provider {resolved_provider.provider!r} does not support reasoning effort")
179
174
  if resolved_effort not in resolved_provider.reasoning_efforts:
@@ -182,6 +177,7 @@ def _bootstrap(
182
177
  f"reasoning effort {resolved_effort!r} is not supported by model {resolved_provider.model!r}; "
183
178
  + f"supported efforts: {supported}"
184
179
  )
180
+ resolved_provider = replace(resolved_provider, reasoning_effort=resolved_effort)
185
181
  resolved_session = asyncio.run(
186
182
  resolve_session(
187
183
  store=store,
@@ -191,7 +187,9 @@ def _bootstrap(
191
187
  )
192
188
  )
193
189
  except ValueError as exc:
194
- view.console.print(f"[red]{exc}[/red]")
190
+ from .tui.render import console, error_line
191
+
192
+ console.print(error_line(str(exc)))
195
193
  raise SystemExit(1) from exc
196
194
 
197
195
  agent = build_agent(
@@ -202,12 +200,9 @@ def _bootstrap(
202
200
  session_id=resolved_session.session_id,
203
201
  max_turns=max_turns,
204
202
  )
205
- if reasoning_effort is not None:
206
- agent.reasoning_effort = resolved_effort
207
203
 
208
204
  return _BootstrapContext(
209
205
  store=store,
210
- view=view,
211
206
  settings=settings,
212
207
  resolved_provider=resolved_provider,
213
208
  resolved_session=resolved_session,
@@ -266,22 +261,11 @@ def chat(
266
261
  session_id=setup.resolved_session.session_id,
267
262
  provider_name=setup.resolved_provider.provider_name,
268
263
  reasoning_efforts=setup.resolved_provider.reasoning_efforts,
269
- view=setup.view,
270
- )
271
-
272
- setup.view.print_header(
273
- provider=setup.resolved_provider.provider,
274
- model=setup.resolved_provider.model,
275
264
  session=setup.resolved_session.session,
276
265
  mode=setup.resolved_session.mode,
277
- message_count=len(setup.resolved_session.messages),
278
- reasoning_effort=setup.agent.reasoning_effort,
266
+ messages=setup.resolved_session.messages,
279
267
  )
280
- if setup.resolved_session.mode == "resumed":
281
- setup.view.print_history_preview(setup.resolved_session.messages)
282
-
283
- with suppress(KeyboardInterrupt):
284
- asyncio.run(terminal_chat.run())
268
+ asyncio.run(terminal_chat.run())
285
269
 
286
270
 
287
271
  @app.command()
@@ -355,15 +339,15 @@ def session_list(
355
339
  ) -> None:
356
340
  """List saved sessions."""
357
341
 
358
- from .tui.render import TerminalView
342
+ from .tui.render import console, session_list_table
359
343
 
360
344
  cwd = os.path.abspath(os.getcwd())
361
345
  store = SessionStore(data_dir=resolve_sessions_dir())
362
- view = TerminalView()
363
346
 
364
347
  sessions = asyncio.run(store.list_sessions(cwd=None if all_workspaces else cwd))
365
348
  heading = "all sessions" if all_workspaces else f"sessions for {cwd}"
366
- view.print_session_list(sessions, include_cwd=all_workspaces, heading=heading)
349
+ for renderable in session_list_table(sessions, include_cwd=all_workspaces, heading=heading):
350
+ console.print(renderable)
367
351
 
368
352
 
369
353
  def main() -> None:
@@ -30,11 +30,11 @@ from mycode.messages import (
30
30
  image_block,
31
31
  text_block,
32
32
  )
33
- from mycode.providers import provider_default_models
34
33
  from mycode_cli.config import (
35
34
  ResolvedProvider,
36
35
  get_settings,
37
36
  normalize_reasoning_effort,
37
+ provider_models,
38
38
  resolve_configured_model_metadata,
39
39
  resolve_provider,
40
40
  resolve_provider_choices,
@@ -402,13 +402,7 @@ async def get_config(cwd: Annotated[str | None, Query()] = None) -> dict[str, An
402
402
  providers_info: dict[str, Any] = {}
403
403
  for provider in resolve_provider_choices(settings):
404
404
  provider_config = settings.providers.get(provider.provider_name or "")
405
- models = (
406
- list(provider_config.models)
407
- if provider_config and provider_config.models
408
- else list(provider_default_models(provider.provider))
409
- )
410
- if not models:
411
- models = [provider.model]
405
+ models = provider_models(settings, provider)
412
406
 
413
407
  info: dict[str, Any] = {
414
408
  "name": provider.provider_name,
@@ -370,7 +370,9 @@ class RunManager:
370
370
  marker = await state.agent.acompact()
371
371
  if state.on_complete is not None:
372
372
  await state.on_complete(state.session_id)
373
- await self._append_event(state, Event("compact", {}), compact_cost=sum_session_cost([marker]))
373
+ await self._append_event(
374
+ state, Event("compact", {"trigger": "manual"}), compact_cost=sum_session_cost([marker])
375
+ )
374
376
  else:
375
377
  assert state.user_message is not None
376
378
  async with aclosing(state.agent.achat(state.user_message)) as stream:
@@ -6,6 +6,7 @@ from typing import Any, Literal, Self
6
6
 
7
7
  from pydantic import BaseModel, Field, model_validator
8
8
 
9
+ from mycode.compact import CompactTrigger
9
10
  from mycode.models import Cost
10
11
 
11
12
  RunKind = Literal["chat", "compact"]
@@ -102,11 +103,13 @@ class StreamEvent(BaseModel):
102
103
  tool_name: str | None = None # permission_request
103
104
  preview: str | None = None # permission_request
104
105
  decision: str | None = None # permission_resolved
106
+ trigger: CompactTrigger | None = None # compact
105
107
  context_tokens: int | None = None # usage
106
108
  context_window: int | None = None # usage
107
109
  model: str | None = None # usage
108
110
  turn_usage: dict[str, int] | None = None # usage
109
111
  turn_cost: Cost | None = None # usage
112
+ turn_duration_ms: int | None = None # usage
110
113
  session_cost: float | None = None # usage; composed by the run manager
111
114
 
112
115