cecli-dev 0.96.1__tar.gz → 0.96.3__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 (573) hide show
  1. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/PKG-INFO +1 -2
  2. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/_version.py +3 -3
  4. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/agent_coder.py +2 -5
  5. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/architect_coder.py +23 -30
  6. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/base_coder.py +13 -33
  7. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/compact.py +3 -1
  8. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/editor_model.py +13 -24
  9. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/model.py +13 -22
  10. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/reset.py +1 -1
  11. cecli_dev-0.96.3/cecli/commands/tokens.py +235 -0
  12. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/base_command.py +13 -19
  13. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/weak_model.py +13 -24
  14. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/base_message.py +5 -1
  15. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/manager.py +11 -1
  16. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/model_providers.py +159 -148
  17. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/requests.py +27 -31
  18. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/skills.py +2 -2
  19. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/llm.py +2 -1
  20. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/main.py +8 -1
  21. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/manager.py +6 -4
  22. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/server.py +22 -4
  23. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/thinking.py +1 -1
  24. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/app.py +9 -1
  25. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/worker.py +4 -0
  26. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/PKG-INFO +1 -2
  27. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/requires.txt +0 -1
  28. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/common-constraints.txt +2 -32
  29. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements.in +0 -1
  30. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements.txt +0 -89
  31. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_reasoning.py +1 -2
  32. cecli_dev-0.96.1/cecli/commands/tokens.py +0 -208
  33. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.dockerignore +0 -0
  34. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.flake8 +0 -0
  35. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.gitattributes +0 -0
  36. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  37. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/check_pypi_version.yml +0 -0
  38. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/docker-build-test.yml +0 -0
  39. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/docker-release.yml +0 -0
  40. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/issues.yml +0 -0
  41. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/pages.yml +0 -0
  42. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/pre-commit.yml +0 -0
  43. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/release.yml +0 -0
  44. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/ubuntu-tests.yml +0 -0
  45. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/windows-tests.yml +0 -0
  46. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/windows_check_pypi_version.yml +0 -0
  47. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.gitignore +0 -0
  48. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.pre-commit-config.yaml +0 -0
  49. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CHANGELOG.md +0 -0
  50. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CNAME +0 -0
  51. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CONTRIBUTING.md +0 -0
  52. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/HISTORY.md +0 -0
  53. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/LICENSE.txt +0 -0
  54. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/MANIFEST.in +0 -0
  55. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/README.md +0 -0
  56. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/Dockerfile +0 -0
  57. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/README.md +0 -0
  58. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/__init__.py +0 -0
  59. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/benchmark.py +0 -0
  60. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/benchmark_classic.py +0 -0
  61. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/clone-exercism.sh +0 -0
  62. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/cpp-test.sh +0 -0
  63. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/docker.sh +0 -0
  64. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/docker_build.sh +0 -0
  65. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/install-docker-ubuntu.sh +0 -0
  66. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/npm-test.sh +0 -0
  67. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/over_time.py +0 -0
  68. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/plot.sh +0 -0
  69. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/plots.py +0 -0
  70. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/problem_stats.py +0 -0
  71. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/prompts.py +0 -0
  72. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/refactor_tools.py +0 -0
  73. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/rsync.sh +0 -0
  74. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/rungrid.py +0 -0
  75. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe-bench-lite.txt +0 -0
  76. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe-bench.txt +0 -0
  77. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe_bench.py +0 -0
  78. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/test_benchmark.py +0 -0
  79. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/__main__.py +0 -0
  80. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/args.py +0 -0
  81. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/args_formatter.py +0 -0
  82. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/change_tracker.py +0 -0
  83. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/__init__.py +0 -0
  84. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/ask_coder.py +0 -0
  85. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/chat_chunks.py +0 -0
  86. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/context_coder.py +0 -0
  87. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/copypaste_coder.py +0 -0
  88. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_coder.py +0 -0
  89. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_fenced_coder.py +0 -0
  90. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_func_coder.py +0 -0
  91. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  92. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_editblock_coder.py +0 -0
  93. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_whole_coder.py +0 -0
  94. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/help_coder.py +0 -0
  95. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/patch_coder.py +0 -0
  96. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/search_replace.py +0 -0
  97. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/shell.py +0 -0
  98. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/single_wholefile_func_coder.py +0 -0
  99. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/udiff_coder.py +0 -0
  100. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/udiff_simple.py +0 -0
  101. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/wholefile_coder.py +0 -0
  102. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/wholefile_func_coder.py +0 -0
  103. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/__init__.py +0 -0
  104. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/add.py +0 -0
  105. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/agent.py +0 -0
  106. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/architect.py +0 -0
  107. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/ask.py +0 -0
  108. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/chat_mode.py +0 -0
  109. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/clear.py +0 -0
  110. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/code.py +0 -0
  111. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/command_prefix.py +0 -0
  112. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/commit.py +0 -0
  113. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context.py +0 -0
  114. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context_blocks.py +0 -0
  115. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context_management.py +0 -0
  116. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/copy.py +0 -0
  117. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/copy_context.py +0 -0
  118. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/core.py +0 -0
  119. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/diff.py +0 -0
  120. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/drop.py +0 -0
  121. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/editor.py +0 -0
  122. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/exit.py +0 -0
  123. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/git.py +0 -0
  124. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/help.py +0 -0
  125. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/history_search.py +0 -0
  126. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/lint.py +0 -0
  127. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/list_sessions.py +0 -0
  128. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load.py +0 -0
  129. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_mcp.py +0 -0
  130. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_session.py +0 -0
  131. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_skill.py +0 -0
  132. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/ls.py +0 -0
  133. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/map.py +0 -0
  134. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/map_refresh.py +0 -0
  135. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/models.py +0 -0
  136. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/multiline_mode.py +0 -0
  137. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/paste.py +0 -0
  138. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/quit.py +0 -0
  139. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/read_only.py +0 -0
  140. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/read_only_stub.py +0 -0
  141. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/reasoning_effort.py +0 -0
  142. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/remove_mcp.py +0 -0
  143. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/remove_skill.py +0 -0
  144. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/report.py +0 -0
  145. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/run.py +0 -0
  146. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/save.py +0 -0
  147. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/save_session.py +0 -0
  148. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/settings.py +0 -0
  149. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/terminal_data/linux.keytab +0 -0
  150. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/terminal_setup.py +0 -0
  151. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/test.py +0 -0
  152. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/think_tokens.py +0 -0
  153. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/undo.py +0 -0
  154. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/__init__.py +0 -0
  155. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/helpers.py +0 -0
  156. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/registry.py +0 -0
  157. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/save_load_manager.py +0 -0
  158. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/voice.py +0 -0
  159. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/web.py +0 -0
  160. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/deprecated_args.py +0 -0
  161. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/diffs.py +0 -0
  162. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/dump.py +0 -0
  163. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/editor.py +0 -0
  164. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/exceptions.py +0 -0
  165. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/format_settings.py +0 -0
  166. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/help.py +0 -0
  167. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/help_pats.py +0 -0
  168. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/__init__.py +0 -0
  169. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/background_commands.py +0 -0
  170. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/__init__.py +0 -0
  171. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/files.py +0 -0
  172. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/integration.py +0 -0
  173. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/tags.py +0 -0
  174. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/utils.py +0 -0
  175. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/copypaste.py +0 -0
  176. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/coroutines.py +0 -0
  177. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/file_searcher.py +0 -0
  178. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/nested.py +0 -0
  179. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/plugin_manager.py +0 -0
  180. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/profiler.py +0 -0
  181. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/similarity.py +0 -0
  182. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/history.py +0 -0
  183. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/io.py +0 -0
  184. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/linter.py +0 -0
  185. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/__init__.py +0 -0
  186. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/oauth.py +0 -0
  187. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/utils.py +0 -0
  188. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mdstream.py +0 -0
  189. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/models.py +0 -0
  190. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/onboarding.py +0 -0
  191. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/__init__.py +0 -0
  192. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/agent.yml +0 -0
  193. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/architect.yml +0 -0
  194. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/ask.yml +0 -0
  195. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/base.yml +0 -0
  196. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/context.yml +0 -0
  197. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/copypaste.yml +0 -0
  198. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock.yml +0 -0
  199. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock_fenced.yml +0 -0
  200. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock_func.yml +0 -0
  201. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_diff_fenced.yml +0 -0
  202. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_editblock.yml +0 -0
  203. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_whole.yml +0 -0
  204. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/help.yml +0 -0
  205. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/patch.yml +0 -0
  206. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/single_wholefile_func.yml +0 -0
  207. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/udiff.yml +0 -0
  208. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/udiff_simple.yml +0 -0
  209. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/__init__.py +0 -0
  210. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/registry.py +0 -0
  211. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/system.py +0 -0
  212. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/wholefile.yml +0 -0
  213. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/wholefile_func.yml +0 -0
  214. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  215. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  216. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  217. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  218. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  219. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  220. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  221. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  222. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  223. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  224. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  225. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  226. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  227. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  228. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  229. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  230. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  231. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  232. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  233. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  234. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  235. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  236. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  237. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  238. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  239. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  240. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  241. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  242. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  243. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  244. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  245. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/README.md +0 -0
  246. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  247. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  248. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  249. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  250. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  251. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  252. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  253. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  254. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  255. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  256. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  257. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  258. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  259. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  260. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  261. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  262. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  263. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  264. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  265. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  266. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  267. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  268. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  269. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  270. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  271. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  272. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/reasoning_tags.py +0 -0
  273. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/repo.py +0 -0
  274. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/repomap.py +0 -0
  275. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/report.py +0 -0
  276. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/__init__.py +0 -0
  277. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/model-metadata.json +0 -0
  278. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/model-settings.yml +0 -0
  279. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/providers.json +0 -0
  280. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/run_cmd.py +0 -0
  281. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/scrape.py +0 -0
  282. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/sendchat.py +0 -0
  283. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/sessions.py +0 -0
  284. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/special.py +0 -0
  285. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/__init__.py +0 -0
  286. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/command.py +0 -0
  287. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/command_interactive.py +0 -0
  288. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/context_manager.py +0 -0
  289. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_block.py +0 -0
  290. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_line.py +0 -0
  291. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_lines.py +0 -0
  292. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/extract_lines.py +0 -0
  293. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/finished.py +0 -0
  294. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_branch.py +0 -0
  295. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_diff.py +0 -0
  296. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_log.py +0 -0
  297. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_remote.py +0 -0
  298. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_show.py +0 -0
  299. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_status.py +0 -0
  300. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/grep.py +0 -0
  301. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/indent_lines.py +0 -0
  302. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/insert_block.py +0 -0
  303. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/list_changes.py +0 -0
  304. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/load_skill.py +0 -0
  305. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/ls.py +0 -0
  306. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/remove_skill.py +0 -0
  307. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/replace_text.py +0 -0
  308. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/show_numbered_context.py +0 -0
  309. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/undo_change.py +0 -0
  310. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/update_todo_list.py +0 -0
  311. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/base_tool.py +0 -0
  312. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/helpers.py +0 -0
  313. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/output.py +0 -0
  314. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/registry.py +0 -0
  315. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/view_files_matching.py +0 -0
  316. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/view_files_with_symbol.py +0 -0
  317. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/__init__.py +0 -0
  318. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/io.py +0 -0
  319. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/styles.tcss +0 -0
  320. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/__init__.py +0 -0
  321. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/completion_bar.py +0 -0
  322. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/file_list.py +0 -0
  323. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/footer.py +0 -0
  324. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/input_area.py +0 -0
  325. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/key_hints.py +0 -0
  326. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/output.py +0 -0
  327. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/status_bar.py +0 -0
  328. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/urls.py +0 -0
  329. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/utils.py +0 -0
  330. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/versioncheck.py +0 -0
  331. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/voice.py +0 -0
  332. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/waiting.py +0 -0
  333. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/watch.py +0 -0
  334. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/watch_prompts.py +0 -0
  335. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/Gemfile +0 -0
  336. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/blame.md +0 -0
  337. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/get-started.md +0 -0
  338. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/help-tip.md +0 -0
  339. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/help.md +0 -0
  340. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/install.md +0 -0
  341. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/keys.md +0 -0
  342. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/model-warnings.md +0 -0
  343. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/multi-line.md +0 -0
  344. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/python-m-aider.md +0 -0
  345. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/recording.css +0 -0
  346. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/recording.md +0 -0
  347. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/replit-pipx.md +0 -0
  348. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/works-best.md +0 -0
  349. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_sass/custom/custom.scss +0 -0
  350. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/adv-model-settings.md +0 -0
  351. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/agent-mode.md +0 -0
  352. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/aider_conf.md +0 -0
  353. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/api-keys.md +0 -0
  354. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/custom-commands.md +0 -0
  355. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  356. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/dotenv.md +0 -0
  357. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/editor.md +0 -0
  358. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/mcp.md +0 -0
  359. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/model-aliases.md +0 -0
  360. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/options.md +0 -0
  361. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/reasoning.md +0 -0
  362. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/skills.md +0 -0
  363. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/tui.md +0 -0
  364. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config.md +0 -0
  365. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/faq.md +0 -0
  366. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/git.md +0 -0
  367. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/index.md +0 -0
  368. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/codespaces.md +0 -0
  369. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/docker.md +0 -0
  370. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/optional.md +0 -0
  371. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/replit.md +0 -0
  372. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install.md +0 -0
  373. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/languages.md +0 -0
  374. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  375. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/legal/privacy.md +0 -0
  376. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/anthropic.md +0 -0
  377. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/azure.md +0 -0
  378. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/bedrock.md +0 -0
  379. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/cohere.md +0 -0
  380. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/deepseek.md +0 -0
  381. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/gemini.md +0 -0
  382. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/github.md +0 -0
  383. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/groq.md +0 -0
  384. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/lm-studio.md +0 -0
  385. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/ollama.md +0 -0
  386. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openai-compat.md +0 -0
  387. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openai.md +0 -0
  388. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openrouter.md +0 -0
  389. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/other.md +0 -0
  390. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/vertex.md +0 -0
  391. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/warnings.md +0 -0
  392. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/xai.md +0 -0
  393. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms.md +0 -0
  394. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/analytics.md +0 -0
  395. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/edit-formats.md +0 -0
  396. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/infinite-output.md +0 -0
  397. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more-info.md +0 -0
  398. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
  399. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
  400. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/index.md +0 -0
  401. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
  402. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
  403. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/repomap.md +0 -0
  404. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/scripting.md +0 -0
  405. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/sessions.md +0 -0
  406. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/aider-not-found.md +0 -0
  407. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  408. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/imports.md +0 -0
  409. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  410. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/support.md +0 -0
  411. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  412. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  413. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting.md +0 -0
  414. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/browser.md +0 -0
  415. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/caching.md +0 -0
  416. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/commands.md +0 -0
  417. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/conventions.md +0 -0
  418. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/copypaste.md +0 -0
  419. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/images-urls.md +0 -0
  420. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/lint-test.md +0 -0
  421. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/modes.md +0 -0
  422. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/not-code.md +0 -0
  423. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/notifications.md +0 -0
  424. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/tips.md +0 -0
  425. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/tutorials.md +0 -0
  426. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/voice.md +0 -0
  427. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/watch.md +0 -0
  428. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage.md +0 -0
  429. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/share/index.md +0 -0
  430. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/SOURCES.txt +0 -0
  431. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/dependency_links.txt +0 -0
  432. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/entry_points.txt +0 -0
  433. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/top_level.txt +0 -0
  434. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/docker/Dockerfile +0 -0
  435. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  436. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/pyproject.toml +0 -0
  437. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/pytest.ini +0 -0
  438. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-dev.in +0 -0
  439. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-dev.txt +0 -0
  440. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-help.in +0 -0
  441. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-help.txt +0 -0
  442. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-playwright.in +0 -0
  443. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-playwright.txt +0 -0
  444. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/tree-sitter.in +0 -0
  445. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/30k-image.py +0 -0
  446. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/Dockerfile.jekyll +0 -0
  447. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/__init__.py +0 -0
  448. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/blame.py +0 -0
  449. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/clean_metadata.py +0 -0
  450. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/cost_analyzer.py +0 -0
  451. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/dl_icons.py +0 -0
  452. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/filter-chat-mode.js +0 -0
  453. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/generate_providers.py +0 -0
  454. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/get_contributor_list.js +0 -0
  455. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/history_prompts.py +0 -0
  456. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/homepage.py +0 -0
  457. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/issues.py +0 -0
  458. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/jekyll_build.sh +0 -0
  459. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/jekyll_run.sh +0 -0
  460. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/logo_svg.py +0 -0
  461. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/pip-compile.sh +0 -0
  462. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/recording_audio.py +0 -0
  463. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/redact-cast.py +0 -0
  464. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/rename_to_cecli.py +0 -0
  465. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/tmux_record.sh +0 -0
  466. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/tsl_pack_langs.py +0 -0
  467. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-blame.sh +0 -0
  468. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-docs.sh +0 -0
  469. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-history.py +0 -0
  470. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/versionbump.py +0 -0
  471. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/yank-old-versions.py +0 -0
  472. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/setup.cfg +0 -0
  473. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/shim.pyproject.toml +0 -0
  474. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/__init__.py +0 -0
  475. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/__init__.py +0 -0
  476. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_aws_credentials.py +0 -0
  477. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_background_commands.py +0 -0
  478. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_coder.py +0 -0
  479. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_commands.py +0 -0
  480. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_custom_commands.py +0 -0
  481. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_deprecated.py +0 -0
  482. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_editblock.py +0 -0
  483. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_editor.py +0 -0
  484. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_exceptions.py +0 -0
  485. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_find_or_blocks.py +0 -0
  486. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_history.py +0 -0
  487. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_io.py +0 -0
  488. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_linter.py +0 -0
  489. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_main.py +0 -0
  490. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_model_info_manager.py +0 -0
  491. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_model_provider_manager.py +0 -0
  492. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_models.py +0 -0
  493. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_onboarding.py +0 -0
  494. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_plugin_manager.py +0 -0
  495. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_prompts.py +0 -0
  496. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_repo.py +0 -0
  497. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_repomap.py +0 -0
  498. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_run_cmd.py +0 -0
  499. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sanity_check_repo.py +0 -0
  500. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_scripting.py +0 -0
  501. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sendchat.py +0 -0
  502. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sessions.py +0 -0
  503. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_skills.py +0 -0
  504. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_special.py +0 -0
  505. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_ssl_verification.py +0 -0
  506. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_udiff.py +0 -0
  507. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_urls.py +0 -0
  508. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_voice.py +0 -0
  509. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_watch.py +0 -0
  510. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_wholefile.py +0 -0
  511. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/coders/test_copypaste_coder.py +0 -0
  512. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/conftest.py +0 -0
  513. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  514. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/chat-history.md +0 -0
  515. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/arduino/test.ino +0 -0
  516. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/c/test.c +0 -0
  517. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/chatito/test.chatito +0 -0
  518. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/clojure/test.clj +0 -0
  519. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  520. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/cpp/test.cpp +0 -0
  521. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/csharp/test.cs +0 -0
  522. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/d/test.d +0 -0
  523. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/dart/test.dart +0 -0
  524. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elisp/test.el +0 -0
  525. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elixir/test.ex +0 -0
  526. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elm/test.elm +0 -0
  527. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/gleam/test.gleam +0 -0
  528. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/go/test.go +0 -0
  529. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/haskell/test.hs +0 -0
  530. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/hcl/test.tf +0 -0
  531. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/java/test.java +0 -0
  532. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/javascript/test.js +0 -0
  533. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/kotlin/test.kt +0 -0
  534. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/lua/test.lua +0 -0
  535. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/matlab/test.m +0 -0
  536. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ocaml/test.ml +0 -0
  537. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  538. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/php/test.php +0 -0
  539. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/pony/test.pony +0 -0
  540. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/properties/test.properties +0 -0
  541. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/python/test.py +0 -0
  542. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ql/test.ql +0 -0
  543. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/r/test.r +0 -0
  544. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/racket/test.rkt +0 -0
  545. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ruby/test.rb +0 -0
  546. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/rust/test.rs +0 -0
  547. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/scala/test.scala +0 -0
  548. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/solidity/test.sol +0 -0
  549. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/swift/test.swift +0 -0
  550. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/tsx/test.tsx +0 -0
  551. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/typescript/test.ts +0 -0
  552. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/udev/test.rules +0 -0
  553. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/zig/test.zig +0 -0
  554. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base/sample.js +0 -0
  555. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base/sample.py +0 -0
  556. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  557. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.js +0 -0
  558. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.lisp +0 -0
  559. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.py +0 -0
  560. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch_question.js +0 -0
  561. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/help/test_help.py +0 -0
  562. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/mcp/__init__.py +0 -0
  563. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/mcp/test_manager.py +0 -0
  564. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/scrape/test_playwright_disable.py +0 -0
  565. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/scrape/test_scrape.py +0 -0
  566. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/test_conversation_integration.py +0 -0
  567. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/test_conversation_system.py +0 -0
  568. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_git_branch.py +0 -0
  569. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_git_diff.py +0 -0
  570. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_grep.py +0 -0
  571. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_insert_block.py +0 -0
  572. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_registry.py +0 -0
  573. {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_show_numbered_context.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.96.1
3
+ Version: 0.96.3
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -47,7 +47,6 @@ Requires-Dist: socksio>=1.0.0
47
47
  Requires-Dist: pillow>=11.3.0
48
48
  Requires-Dist: shtab>=1.7.2
49
49
  Requires-Dist: oslex>=0.1.3
50
- Requires-Dist: google-generativeai>=0.8.5
51
50
  Requires-Dist: mcp>=1.24.0
52
51
  Requires-Dist: textual>=6.0.0
53
52
  Requires-Dist: truststore
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.96.1.dev"
3
+ __version__ = "0.96.3.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.96.1'
32
- __version_tuple__ = version_tuple = (0, 96, 1)
31
+ __version__ = version = '0.96.3'
32
+ __version_tuple__ = version_tuple = (0, 96, 3)
33
33
 
34
- __commit_id__ = commit_id = 'g537255968'
34
+ __commit_id__ = commit_id = 'gc5417d2f9'
@@ -12,8 +12,6 @@ from collections import Counter, defaultdict
12
12
  from datetime import datetime
13
13
  from pathlib import Path
14
14
 
15
- from litellm import experimental_mcp_client
16
-
17
15
  from cecli import urls, utils
18
16
  from cecli.change_tracker import ChangeTracker
19
17
  from cecli.helpers import nested
@@ -29,6 +27,7 @@ from cecli.helpers.similarity import (
29
27
  normalize_vector,
30
28
  )
31
29
  from cecli.helpers.skills import SkillsManager
30
+ from cecli.llm import litellm
32
31
  from cecli.mcp import LocalServer, McpServerManager
33
32
  from cecli.repo import ANY_GIT_ERROR
34
33
  from cecli.tools.utils.registry import ToolRegistry
@@ -306,7 +305,7 @@ class AgentCoder(Coder):
306
305
  }
307
306
  try:
308
307
  session = await server.connect()
309
- call_result = await experimental_mcp_client.call_openai_tool(
308
+ call_result = await litellm.experimental_mcp_client.call_openai_tool(
310
309
  session=session, openai_tool=tool_call_dict
311
310
  )
312
311
  content_parts = []
@@ -800,11 +799,9 @@ I will proceed based on the current context.""")
800
799
  saved_message = await self.auto_commit(self.files_edited_by_tools)
801
800
  if not saved_message and hasattr(self.gpt_prompts, "files_content_gpt_edits_no_repo"):
802
801
  saved_message = self.gpt_prompts.files_content_gpt_edits_no_repo
803
- self.move_back_cur_messages(saved_message)
804
802
  self.tool_call_count = 0
805
803
  self.files_added_in_exploration = set()
806
804
  self.files_edited_by_tools = set()
807
- self.move_back_cur_messages(None)
808
805
  return False
809
806
 
810
807
  async def _execute_tool_with_registry(self, norm_tool_name, params):
@@ -52,12 +52,8 @@ class ArchitectCoder(AskCoder):
52
52
 
53
53
  editor_coder = await Coder.create(**new_kwargs)
54
54
 
55
- # Clear ALL messages for editor coder (start fresh)
56
- ConversationManager.reset()
57
-
58
55
  # Re-initialize ConversationManager with editor coder
59
- ConversationManager.initialize(editor_coder)
60
- ConversationManager.clear_cache()
56
+ ConversationManager.initialize(editor_coder, reset=True, reformat=True)
61
57
 
62
58
  if self.verbose:
63
59
  editor_coder.show_announcements()
@@ -69,48 +65,45 @@ class ArchitectCoder(AskCoder):
69
65
  editor_all_messages = ConversationManager.get_messages()
70
66
 
71
67
  # Clear manager and restore original state
72
- ConversationManager.reset()
73
- ConversationManager.initialize(original_coder or self)
68
+ ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
74
69
 
75
70
  # Restore original messages with all metadata
76
71
  for msg in original_all_messages:
77
- ConversationManager.add_message(
78
- msg.to_dict(),
79
- MessageTag(msg.tag),
80
- priority=msg.priority,
81
- timestamp=msg.timestamp,
82
- mark_for_delete=msg.mark_for_delete,
83
- hash_key=msg.hash_key,
84
- )
72
+ if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
73
+ ConversationManager.add_message(
74
+ message_dict=msg.message_dict,
75
+ tag=MessageTag(msg.tag),
76
+ priority=msg.priority,
77
+ mark_for_delete=msg.mark_for_delete,
78
+ force=True,
79
+ )
85
80
 
86
81
  # Append editor's DONE and CUR messages (but not other tags like SYSTEM)
87
82
  for msg in editor_all_messages:
88
83
  if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
89
84
  ConversationManager.add_message(
90
- msg.to_dict(),
91
- MessageTag(msg.tag),
85
+ message_dict=msg.message_dict,
86
+ tag=MessageTag(msg.tag),
92
87
  priority=msg.priority,
93
- timestamp=msg.timestamp,
94
88
  mark_for_delete=msg.mark_for_delete,
95
- hash_key=msg.hash_key,
89
+ force=True,
96
90
  )
97
91
 
98
- self.move_back_cur_messages("I made those changes to the files.")
99
92
  self.total_cost = editor_coder.total_cost
100
93
  self.coder_commit_hashes = editor_coder.coder_commit_hashes
101
94
  except Exception as e:
102
95
  self.io.tool_error(e)
103
96
  # Restore original state on error
104
- ConversationManager.reset()
105
- ConversationManager.initialize(original_coder or self)
97
+ ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
98
+
106
99
  for msg in original_all_messages:
107
- ConversationManager.add_message(
108
- msg.to_dict(),
109
- MessageTag(msg.tag),
110
- priority=msg.priority,
111
- timestamp=msg.timestamp,
112
- mark_for_delete=msg.mark_for_delete,
113
- hash_key=msg.hash_key,
114
- )
100
+ if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
101
+ ConversationManager.add_message(
102
+ message_dict=msg.message_dict,
103
+ tag=MessageTag(msg.tag),
104
+ priority=msg.priority,
105
+ mark_for_delete=msg.mark_for_delete,
106
+ force=True,
107
+ )
115
108
 
116
109
  raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")
@@ -1659,7 +1659,7 @@ class Coder:
1659
1659
 
1660
1660
  # Old summarization system removed - using context compaction logic instead
1661
1661
 
1662
- async def compact_context_if_needed(self, force=False):
1662
+ async def compact_context_if_needed(self, force=False, message=""):
1663
1663
  if not self.enable_context_compaction:
1664
1664
  return
1665
1665
 
@@ -1687,9 +1687,14 @@ class Coder:
1687
1687
  # Check if done_messages alone exceed the limit
1688
1688
  if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
1689
1689
  # Create a summary of the done_messages
1690
+ # Append custom message to compaction prompt if provided
1691
+ compaction_prompt = self.gpt_prompts.compaction_prompt
1692
+ if message:
1693
+ compaction_prompt = f"{compaction_prompt}\n\n{message}"
1694
+
1690
1695
  summary_text = await self.summarizer.summarize_all_as_text(
1691
1696
  done_messages,
1692
- self.gpt_prompts.compaction_prompt,
1697
+ compaction_prompt,
1693
1698
  self.context_compaction_summary_tokens,
1694
1699
  )
1695
1700
 
@@ -1719,9 +1724,14 @@ class Coder:
1719
1724
  # Check if cur_messages alone exceed the limit (after potentially compacting done_messages)
1720
1725
  if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
1721
1726
  # Create a summary of the cur_messages
1727
+ # Append custom message to compaction prompt if provided
1728
+ compaction_prompt = self.gpt_prompts.compaction_prompt
1729
+ if message:
1730
+ compaction_prompt = f"{compaction_prompt}\n\n{message}"
1731
+
1722
1732
  cur_summary_text = await self.summarizer.summarize_all_as_text(
1723
1733
  cur_messages,
1724
- self.gpt_prompts.compaction_prompt,
1734
+ compaction_prompt,
1725
1735
  self.context_compaction_summary_tokens,
1726
1736
  )
1727
1737
 
@@ -1774,32 +1784,6 @@ class Coder:
1774
1784
  self.io.tool_warning("Proceeding with full history for now.")
1775
1785
  return
1776
1786
 
1777
- def move_back_cur_messages(self, message):
1778
- # Move CUR messages to DONE in ConversationManager
1779
- # Get current CUR messages
1780
- cur_messages = ConversationManager.get_messages_dict(MessageTag.CUR)
1781
-
1782
- # Clear CUR messages from ConversationManager
1783
- ConversationManager.clear_tag(MessageTag.CUR)
1784
-
1785
- # Add them back as DONE messages
1786
- for msg in cur_messages:
1787
- ConversationManager.add_message(
1788
- message_dict=msg,
1789
- tag=MessageTag.DONE,
1790
- )
1791
-
1792
- # TODO check for impact on image messages
1793
- if message:
1794
- ConversationManager.add_message(
1795
- message_dict=dict(role="user", content=message),
1796
- tag=MessageTag.DONE,
1797
- )
1798
- ConversationManager.add_message(
1799
- message_dict=dict(role="assistant", content="Ok."),
1800
- tag=MessageTag.DONE,
1801
- )
1802
-
1803
1787
  def normalize_language(self, lang_code):
1804
1788
  """
1805
1789
  Convert a locale code such as ``en_US`` or ``fr`` into a readable
@@ -2277,8 +2261,6 @@ class Coder:
2277
2261
  if not saved_message and hasattr(self.gpt_prompts, "files_content_gpt_edits_no_repo"):
2278
2262
  saved_message = self.gpt_prompts.files_content_gpt_edits_no_repo
2279
2263
 
2280
- self.move_back_cur_messages(saved_message)
2281
-
2282
2264
  if not interrupted:
2283
2265
  add_rel_files_message = await self.check_for_file_mentions(content)
2284
2266
  if add_rel_files_message:
@@ -3783,8 +3765,6 @@ class Coder:
3783
3765
 
3784
3766
  await self.repo.commit(fnames=self.need_commit_before_edits, coder=self)
3785
3767
 
3786
- # files changed, move cur messages back behind the files messages
3787
- # self.move_back_cur_messages(self.gpt_prompts.files_content_local_edits)
3788
3768
  return True
3789
3769
 
3790
3770
  def get_edits(self, mode="update"):
@@ -7,7 +7,9 @@ class CompactCommand(BaseCommand):
7
7
 
8
8
  @classmethod
9
9
  async def execute(cls, io, coder, args, **kwargs):
10
- await coder.compact_context_if_needed(force=True)
10
+ # Pass args as message parameter if it's not empty
11
+ message = args.strip() if args else ""
12
+ await coder.compact_context_if_needed(force=True, message=message)
11
13
 
12
14
  @classmethod
13
15
  def get_help(cls) -> str:
@@ -62,12 +62,8 @@ class EditorModelCommand(BaseCommand):
62
62
 
63
63
  temp_coder = await Coder.create(**new_kwargs)
64
64
 
65
- # Clear ALL messages for temp coder (start fresh)
66
- ConversationManager.reset()
67
-
68
65
  # Re-initialize ConversationManager with temp coder
69
- ConversationManager.initialize(temp_coder)
70
- ConversationManager.clear_cache()
66
+ ConversationManager.initialize(temp_coder, reset=True, reformat=True)
71
67
 
72
68
  verbose = kwargs.get("verbose", False)
73
69
  if verbose:
@@ -82,37 +78,30 @@ class EditorModelCommand(BaseCommand):
82
78
  temp_all_messages = ConversationManager.get_messages()
83
79
 
84
80
  # Clear manager and restore original state
85
- ConversationManager.reset()
86
- ConversationManager.initialize(original_coder)
81
+ ConversationManager.initialize(original_coder, reset=True, reformat=True)
87
82
 
88
83
  # Restore original messages with all metadata
89
84
  for msg in original_all_messages:
90
- ConversationManager.add_message(
91
- msg.to_dict(),
92
- MessageTag(msg.tag),
93
- priority=msg.priority,
94
- timestamp=msg.timestamp,
95
- mark_for_delete=msg.mark_for_delete,
96
- hash_key=msg.hash_key,
97
- )
85
+ if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
86
+ ConversationManager.add_message(
87
+ message_dict=msg.message_dict,
88
+ tag=MessageTag(msg.tag),
89
+ priority=msg.priority,
90
+ mark_for_delete=msg.mark_for_delete,
91
+ force=True,
92
+ )
98
93
 
99
94
  # Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
100
95
  for msg in temp_all_messages:
101
96
  if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
102
97
  ConversationManager.add_message(
103
- msg.to_dict(),
104
- MessageTag(msg.tag),
98
+ message_dict=msg.message_dict,
99
+ tag=MessageTag(msg.tag),
105
100
  priority=msg.priority,
106
- timestamp=msg.timestamp,
107
101
  mark_for_delete=msg.mark_for_delete,
108
- hash_key=msg.hash_key,
102
+ force=True,
109
103
  )
110
104
 
111
- # Move back cur messages with appropriate message
112
- coder.move_back_cur_messages(
113
- f"Editor model {model_name} made those changes to the files."
114
- )
115
-
116
105
  # Restore the original model configuration
117
106
  from cecli.commands import SwitchCoderSignal
118
107
 
@@ -67,12 +67,8 @@ class ModelCommand(BaseCommand):
67
67
 
68
68
  temp_coder = await Coder.create(**new_kwargs)
69
69
 
70
- # Clear ALL messages for temp coder (start fresh)
71
- ConversationManager.reset()
72
-
73
70
  # Re-initialize ConversationManager with temp coder
74
- ConversationManager.initialize(temp_coder)
75
- ConversationManager.clear_cache()
71
+ ConversationManager.initialize(temp_coder, reset=True, reformat=True)
76
72
 
77
73
  verbose = kwargs.get("verbose", False)
78
74
  if verbose:
@@ -87,35 +83,30 @@ class ModelCommand(BaseCommand):
87
83
  temp_all_messages = ConversationManager.get_messages()
88
84
 
89
85
  # Clear manager and restore original state
90
- ConversationManager.reset()
91
- ConversationManager.initialize(original_coder)
86
+ ConversationManager.initialize(original_coder, reset=True, reformat=True)
92
87
 
93
88
  # Restore original messages with all metadata
94
89
  for msg in original_all_messages:
95
- ConversationManager.add_message(
96
- msg.to_dict(),
97
- MessageTag(msg.tag),
98
- priority=msg.priority,
99
- timestamp=msg.timestamp,
100
- mark_for_delete=msg.mark_for_delete,
101
- hash_key=msg.hash_key,
102
- )
90
+ if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
91
+ ConversationManager.add_message(
92
+ message_dict=msg.message_dict,
93
+ tag=MessageTag(msg.tag),
94
+ priority=msg.priority,
95
+ mark_for_delete=msg.mark_for_delete,
96
+ force=True,
97
+ )
103
98
 
104
99
  # Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
105
100
  for msg in temp_all_messages:
106
101
  if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
107
102
  ConversationManager.add_message(
108
- msg.to_dict(),
109
- MessageTag(msg.tag),
103
+ message_dict=msg.message_dict,
104
+ tag=MessageTag(msg.tag),
110
105
  priority=msg.priority,
111
- timestamp=msg.timestamp,
112
106
  mark_for_delete=msg.mark_for_delete,
113
- hash_key=msg.hash_key,
107
+ force=True,
114
108
  )
115
109
 
116
- # Move back cur messages with appropriate message
117
- coder.move_back_cur_messages(f"Model {model_name} made those changes to the files.")
118
-
119
110
  # Restore the original model configuration
120
111
  from cecli.commands import SwitchCoderSignal
121
112
 
@@ -20,7 +20,7 @@ class ResetCommand(BaseCommand):
20
20
  ConversationFiles.reset() # Clear all file caches
21
21
 
22
22
  # Re-initialize ConversationManager with current coder
23
- ConversationManager.initialize(coder)
23
+ ConversationManager.initialize(coder, reformat=True)
24
24
  ConversationFiles.initialize(coder)
25
25
 
26
26
  # Clear TUI output if available
@@ -0,0 +1,235 @@
1
+ from typing import List
2
+
3
+ from cecli.commands.utils.base_command import BaseCommand
4
+ from cecli.commands.utils.helpers import format_command_result
5
+ from cecli.helpers.conversation import ConversationManager, MessageTag
6
+
7
+
8
+ class TokensCommand(BaseCommand):
9
+ NORM_NAME = "tokens"
10
+ DESCRIPTION = "Report on the number of tokens used by the current chat context"
11
+
12
+ @classmethod
13
+ async def execute(cls, io, coder, args, **kwargs):
14
+ res = []
15
+
16
+ coder.choose_fence()
17
+ coder.format_chat_chunks()
18
+
19
+ # Show progress indicator
20
+ total_files = len(coder.abs_fnames) + len(coder.abs_read_only_fnames)
21
+ if total_files > 20:
22
+ io.tool_output(f"Calculating tokens for {total_files} files...")
23
+
24
+ # system messages - sum of SYSTEM, STATIC, EXAMPLES, and REMINDER tags
25
+ system_tags = [
26
+ MessageTag.SYSTEM,
27
+ MessageTag.STATIC,
28
+ MessageTag.EXAMPLES,
29
+ MessageTag.REMINDER,
30
+ ]
31
+ system_tokens = 0
32
+
33
+ for tag in system_tags:
34
+ msgs = ConversationManager.get_messages_dict(tag=tag)
35
+ if msgs:
36
+ system_tokens += coder.main_model.token_count(msgs)
37
+
38
+ # Calculate context block tokens (they are part of STATIC messages)
39
+ context_block_total = 0
40
+
41
+ # Enhanced context blocks (only for agent mode)
42
+ if hasattr(coder, "use_enhanced_context") and coder.use_enhanced_context:
43
+ # Force token calculation if it hasn't been done yet
44
+ if hasattr(coder, "_calculate_context_block_tokens"):
45
+ if not hasattr(coder, "tokens_calculated") or not coder.tokens_calculated:
46
+ coder._calculate_context_block_tokens()
47
+
48
+ # Calculate total context block tokens
49
+ if hasattr(coder, "context_block_tokens") and coder.context_block_tokens:
50
+ context_block_total = sum(coder.context_block_tokens.values())
51
+
52
+ # Subtract context block tokens from system token count
53
+ # Context blocks are part of STATIC messages, so we need to subtract them
54
+ system_tokens = max(0, system_tokens - context_block_total)
55
+
56
+ res.append((system_tokens, "system messages", ""))
57
+
58
+ # chat history
59
+ msgs_done = ConversationManager.get_messages_dict(tag=MessageTag.DONE)
60
+ msgs_cur = ConversationManager.get_messages_dict(tag=MessageTag.CUR)
61
+ tokens_done = 0
62
+ tokens_cur = 0
63
+
64
+ if msgs_done:
65
+ tokens_done = coder.main_model.token_count(msgs_done)
66
+
67
+ if msgs_cur:
68
+ tokens_cur = coder.main_model.token_count(msgs_cur)
69
+
70
+ if tokens_cur + tokens_done:
71
+ res.append((tokens_cur + tokens_done, "chat history", "use /clear to clear"))
72
+
73
+ # repo map
74
+ if coder.repo_map:
75
+ tokens = coder.main_model.token_count(
76
+ ConversationManager.get_messages_dict(tag=MessageTag.REPO)
77
+ )
78
+ res.append((tokens, "repository map", "use --map-tokens to resize"))
79
+
80
+ # Display enhanced context blocks (only for agent mode)
81
+ # Note: Context block tokens were already calculated and subtracted from system messages
82
+ if hasattr(coder, "use_enhanced_context") and coder.use_enhanced_context:
83
+ if hasattr(coder, "context_block_tokens") and coder.context_block_tokens:
84
+ for block_name, tokens in coder.context_block_tokens.items():
85
+ # Format the block name more nicely
86
+ display_name = block_name.replace("_", " ").title()
87
+ res.append(
88
+ (tokens, f"{display_name} context block", "/context-blocks to toggle")
89
+ )
90
+
91
+ file_res = []
92
+
93
+ # Calculate tokens for read-only files using READONLY_FILES tag
94
+ readonly_msgs = ConversationManager.get_messages_dict(tag=MessageTag.READONLY_FILES)
95
+ if readonly_msgs:
96
+ # Group messages by file (each file has user and assistant messages)
97
+ file_tokens = {}
98
+ for msg in readonly_msgs:
99
+ # Extract file name from message content
100
+ content = msg.get("content", "")
101
+ if content.startswith("File Contents"):
102
+ # Extract file path from "File Contents {path}:"
103
+ lines = content.split("\n", 1)
104
+ if lines:
105
+ file_line = lines[0]
106
+ if file_line.startswith("File Contents"):
107
+ fname = file_line[13:].rstrip(":")
108
+ # Calculate tokens for this message
109
+ tokens = coder.main_model.token_count([msg])
110
+ if fname not in file_tokens:
111
+ file_tokens[fname] = 0
112
+ file_tokens[fname] += tokens
113
+ elif "image_file" in msg:
114
+ # Handle image files
115
+ fname = msg.get("image_file")
116
+ if fname:
117
+ tokens = coder.main_model.token_count([msg])
118
+ if fname not in file_tokens:
119
+ file_tokens[fname] = 0
120
+ file_tokens[fname] += tokens
121
+
122
+ # Add to results
123
+ for fname, tokens in file_tokens.items():
124
+ relative_fname = coder.get_rel_fname(fname)
125
+ file_res.append((tokens, f"{relative_fname} (read-only)", "/drop to remove"))
126
+
127
+ # Calculate tokens for editable files using CHAT_FILES and EDIT_FILES tags
128
+ editable_tags = [MessageTag.CHAT_FILES, MessageTag.EDIT_FILES]
129
+ editable_file_tokens = {}
130
+
131
+ for tag in editable_tags:
132
+ msgs = ConversationManager.get_messages_dict(tag=tag)
133
+ if msgs:
134
+ for msg in msgs:
135
+ # Extract file name from message content
136
+ content = msg.get("content", "")
137
+ if content.startswith("File Contents"):
138
+ # Extract file path from "File Contents {path}:"
139
+ lines = content.split("\n", 1)
140
+ if lines:
141
+ file_line = lines[0]
142
+ if file_line.startswith("File Contents"):
143
+ fname = file_line[13:].rstrip(":")
144
+ # Calculate tokens for this message
145
+ tokens = coder.main_model.token_count([msg])
146
+ if fname not in editable_file_tokens:
147
+ editable_file_tokens[fname] = 0
148
+ editable_file_tokens[fname] += tokens
149
+ elif "image_file" in msg:
150
+ # Handle image files
151
+ fname = msg.get("image_file")
152
+ if fname:
153
+ tokens = coder.main_model.token_count([msg])
154
+ if fname not in editable_file_tokens:
155
+ editable_file_tokens[fname] = 0
156
+ editable_file_tokens[fname] += tokens
157
+
158
+ # Add editable files to results
159
+ for fname, tokens in editable_file_tokens.items():
160
+ relative_fname = coder.get_rel_fname(fname)
161
+ file_res.append((tokens, f"{relative_fname}", "/drop to remove"))
162
+
163
+ if file_res:
164
+ file_res.sort()
165
+ res.extend(file_res)
166
+
167
+ io.tool_output(f"Approximate context window usage for {coder.main_model.name}, in tokens:")
168
+ io.tool_output()
169
+
170
+ width = 8
171
+ cost_width = 9
172
+
173
+ def fmt(v):
174
+ return format(int(v), ",").rjust(width)
175
+
176
+ col_width = max(len(row[1]) for row in res) if res else 0
177
+
178
+ cost_pad = " " * cost_width
179
+ total = 0
180
+ total_cost = 0.0
181
+ for tk, msg, tip in res:
182
+ total += tk
183
+ cost = tk * (coder.main_model.info.get("input_cost_per_token") or 0)
184
+ total_cost += cost
185
+ msg = msg.ljust(col_width)
186
+ io.tool_output(f"${cost:7.4f} {fmt(tk)} {msg} {tip}") # noqa: E231
187
+
188
+ io.tool_output("=" * (width + cost_width + 1))
189
+ io.tool_output(f"${total_cost:7.4f} {fmt(total)} tokens total") # noqa: E231
190
+
191
+ limit = coder.main_model.info.get("max_input_tokens") or 0
192
+ if not limit:
193
+ return format_command_result(io, "tokens", "Token report generated")
194
+
195
+ remaining = limit - total
196
+ if remaining > 1024:
197
+ io.tool_output(f"{cost_pad}{fmt(remaining)} tokens remaining in context window")
198
+ elif remaining > 0:
199
+ io.tool_error(
200
+ f"{cost_pad}{fmt(remaining)} tokens remaining in context window (use /drop or"
201
+ " /clear to make space)"
202
+ )
203
+ else:
204
+ io.tool_error(
205
+ f"{cost_pad}{fmt(remaining)} tokens remaining, window exhausted (use /drop or"
206
+ " /clear to make space)"
207
+ )
208
+ io.tool_output(f"{cost_pad}{fmt(limit)} tokens max context window size")
209
+
210
+ return format_command_result(io, "tokens", "Token report generated")
211
+
212
+ @classmethod
213
+ def get_completions(cls, io, coder, args) -> List[str]:
214
+ """Get completion options for tokens command."""
215
+ return []
216
+
217
+ @classmethod
218
+ def get_help(cls) -> str:
219
+ """Get help text for the tokens command."""
220
+ help_text = super().get_help()
221
+ help_text += "\nUsage:\n"
222
+ help_text += " /tokens # Show token usage for current chat context\n"
223
+ help_text += "\nThis command calculates and displays the approximate token usage for:\n"
224
+ help_text += " - System messages\n"
225
+ help_text += " - Chat history\n"
226
+ help_text += " - Repository map\n"
227
+ help_text += " - Editable files in chat\n"
228
+ help_text += " - Read-only files\n"
229
+ help_text += " - Read-only stub files\n"
230
+ help_text += " - Enhanced context blocks (agent mode only)\n"
231
+ help_text += (
232
+ "\nThe report shows token counts, estimated costs, and remaining context window"
233
+ " space.\n"
234
+ )
235
+ return help_text