cecli-dev 0.97.2__tar.gz → 0.97.4__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 (606) hide show
  1. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/PKG-INFO +4 -4
  2. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/README.md +3 -3
  3. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/benchmark.py +1 -0
  4. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/__init__.py +1 -1
  5. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/_version.py +3 -3
  6. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/args.py +12 -0
  7. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/agent_coder.py +43 -23
  8. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/architect_coder.py +4 -6
  9. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/base_coder.py +41 -104
  10. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/agent_model.py +3 -3
  11. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/editor_model.py +3 -3
  12. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/model.py +3 -3
  13. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/save_session.py +10 -3
  14. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/tokens.py +1 -0
  15. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/utils/base_command.py +3 -5
  16. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/weak_model.py +3 -3
  17. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/integration.py +2 -0
  18. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/manager.py +28 -23
  19. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/hashline.py +434 -199
  20. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/nested.py +15 -0
  21. cecli_dev-0.97.4/cecli/helpers/responses.py +132 -0
  22. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/skills.py +5 -0
  23. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/main.py +29 -2
  24. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/models.py +4 -0
  25. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/agent.yml +3 -2
  26. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/hashline.yml +16 -19
  27. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/resources/model-metadata.json +22789 -15822
  28. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/scrape.py +1 -1
  29. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/command.py +6 -0
  30. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/context_manager.py +9 -1
  31. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/grep.py +22 -5
  32. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/update_todo_list.py +0 -3
  33. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/app.py +44 -0
  34. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/input_area.py +15 -11
  35. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/output.py +4 -3
  36. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/agent-mode.md +1 -0
  37. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/tui.md +1 -0
  38. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/imports.md +1 -5
  39. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/PKG-INFO +4 -4
  40. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/SOURCES.txt +0 -3
  41. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/filter-chat-mode.js +35 -5
  42. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_hashline.py +4 -79
  43. cecli_dev-0.97.2/cecli/helpers/responses.py +0 -21
  44. cecli_dev-0.97.2/cecli/website/docs/install/codespaces.md +0 -39
  45. cecli_dev-0.97.2/cecli/website/docs/install/replit.md +0 -8
  46. cecli_dev-0.97.2/cecli/website/docs/usage/tutorials.md +0 -30
  47. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.dockerignore +0 -0
  48. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.flake8 +0 -0
  49. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.gitattributes +0 -0
  50. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  51. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/check_pypi_version.yml +0 -0
  52. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/docker-build-test.yml +0 -0
  53. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/docker-release.yml +0 -0
  54. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/issues.yml +0 -0
  55. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/pages.yml +0 -0
  56. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/pre-commit.yml +0 -0
  57. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/release.yml +0 -0
  58. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/ubuntu-tests.yml +0 -0
  59. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/windows-tests.yml +0 -0
  60. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.github/workflows/windows_check_pypi_version.yml +0 -0
  61. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.gitignore +0 -0
  62. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/.pre-commit-config.yaml +0 -0
  63. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/CHANGELOG.md +0 -0
  64. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/CNAME +0 -0
  65. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/CONTRIBUTING.md +0 -0
  66. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/HISTORY.md +0 -0
  67. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/LICENSE.txt +0 -0
  68. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/MANIFEST.in +0 -0
  69. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/Dockerfile +0 -0
  70. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/README.md +0 -0
  71. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/__init__.py +0 -0
  72. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/benchmark_classic.py +0 -0
  73. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/clone-exercism.sh +0 -0
  74. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/cpp-test.sh +0 -0
  75. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/docker.sh +0 -0
  76. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/docker_build.sh +0 -0
  77. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/install-docker-ubuntu.sh +0 -0
  78. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/npm-test.sh +0 -0
  79. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/over_time.py +0 -0
  80. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/plot.sh +0 -0
  81. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/plots.py +0 -0
  82. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/primary_variations.sh +0 -0
  83. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/problem_stats.py +0 -0
  84. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/prompts.py +0 -0
  85. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/refactor_tools.py +0 -0
  86. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/rsync.sh +0 -0
  87. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/rungrid.py +0 -0
  88. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/swe-bench-lite.txt +0 -0
  89. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/swe-bench.txt +0 -0
  90. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/swe_bench.py +0 -0
  91. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/benchmark/test_benchmark.py +0 -0
  92. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/__main__.py +0 -0
  93. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/args_formatter.py +0 -0
  94. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/change_tracker.py +0 -0
  95. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/__init__.py +0 -0
  96. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/ask_coder.py +0 -0
  97. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/chat_chunks.py +0 -0
  98. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/context_coder.py +0 -0
  99. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/copypaste_coder.py +0 -0
  100. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editblock_coder.py +0 -0
  101. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editblock_fenced_coder.py +0 -0
  102. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editblock_func_coder.py +0 -0
  103. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  104. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editor_editblock_coder.py +0 -0
  105. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/editor_whole_coder.py +0 -0
  106. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/hashline_coder.py +0 -0
  107. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/help_coder.py +0 -0
  108. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/patch_coder.py +0 -0
  109. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/search_replace.py +0 -0
  110. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/shell.py +0 -0
  111. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/single_wholefile_func_coder.py +0 -0
  112. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/udiff_coder.py +0 -0
  113. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/udiff_simple.py +0 -0
  114. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/wholefile_coder.py +0 -0
  115. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/coders/wholefile_func_coder.py +0 -0
  116. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/__init__.py +0 -0
  117. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/add.py +0 -0
  118. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/agent.py +0 -0
  119. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/architect.py +0 -0
  120. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/ask.py +0 -0
  121. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/chat_mode.py +0 -0
  122. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/clear.py +0 -0
  123. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/code.py +0 -0
  124. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/command_prefix.py +0 -0
  125. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/commit.py +0 -0
  126. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/compact.py +0 -0
  127. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/context.py +0 -0
  128. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/context_blocks.py +0 -0
  129. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/context_management.py +0 -0
  130. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/copy.py +0 -0
  131. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/copy_context.py +0 -0
  132. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/core.py +0 -0
  133. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/diff.py +0 -0
  134. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/drop.py +0 -0
  135. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/editor.py +0 -0
  136. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/exit.py +0 -0
  137. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/git.py +0 -0
  138. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/hashline.py +0 -0
  139. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/help.py +0 -0
  140. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/history_search.py +0 -0
  141. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/hooks.py +0 -0
  142. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/lint.py +0 -0
  143. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/list_sessions.py +0 -0
  144. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/load.py +0 -0
  145. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/load_hook.py +0 -0
  146. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/load_mcp.py +0 -0
  147. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/load_session.py +0 -0
  148. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/load_skill.py +0 -0
  149. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/ls.py +0 -0
  150. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/map.py +0 -0
  151. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/map_refresh.py +0 -0
  152. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/models.py +0 -0
  153. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/multiline_mode.py +0 -0
  154. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/paste.py +0 -0
  155. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/quit.py +0 -0
  156. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/read_only.py +0 -0
  157. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/read_only_stub.py +0 -0
  158. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/reasoning_effort.py +0 -0
  159. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/remove_hook.py +0 -0
  160. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/remove_mcp.py +0 -0
  161. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/remove_skill.py +0 -0
  162. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/report.py +0 -0
  163. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/reset.py +0 -0
  164. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/run.py +0 -0
  165. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/save.py +0 -0
  166. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/settings.py +0 -0
  167. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/terminal_data/linux.keytab +0 -0
  168. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/terminal_setup.py +0 -0
  169. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/test.py +0 -0
  170. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/think_tokens.py +0 -0
  171. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/undo.py +0 -0
  172. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/utils/__init__.py +0 -0
  173. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/utils/helpers.py +0 -0
  174. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/utils/registry.py +0 -0
  175. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/utils/save_load_manager.py +0 -0
  176. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/voice.py +0 -0
  177. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/commands/web.py +0 -0
  178. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/deprecated_args.py +0 -0
  179. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/diffs.py +0 -0
  180. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/dump.py +0 -0
  181. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/editor.py +0 -0
  182. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/exceptions.py +0 -0
  183. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/format_settings.py +0 -0
  184. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/help.py +0 -0
  185. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/help_pats.py +0 -0
  186. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/__init__.py +0 -0
  187. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/background_commands.py +0 -0
  188. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/command_parser.py +0 -0
  189. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/__init__.py +0 -0
  190. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/base_message.py +0 -0
  191. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/files.py +0 -0
  192. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/tags.py +0 -0
  193. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/conversation/utils.py +0 -0
  194. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/copypaste.py +0 -0
  195. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/coroutines.py +0 -0
  196. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/file_searcher.py +0 -0
  197. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/model_providers.py +0 -0
  198. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/plugin_manager.py +0 -0
  199. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/profiler.py +0 -0
  200. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/requests.py +0 -0
  201. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/helpers/similarity.py +0 -0
  202. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/history.py +0 -0
  203. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/__init__.py +0 -0
  204. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/base.py +0 -0
  205. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/integration.py +0 -0
  206. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/manager.py +0 -0
  207. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/registry.py +0 -0
  208. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/hooks/types.py +0 -0
  209. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/interruptible_input.py +0 -0
  210. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/io.py +0 -0
  211. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/linter.py +0 -0
  212. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/llm.py +0 -0
  213. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mcp/__init__.py +0 -0
  214. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mcp/manager.py +0 -0
  215. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mcp/oauth.py +0 -0
  216. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mcp/server.py +0 -0
  217. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mcp/utils.py +0 -0
  218. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/mdstream.py +0 -0
  219. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/onboarding.py +0 -0
  220. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/__init__.py +0 -0
  221. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/architect.yml +0 -0
  222. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/ask.yml +0 -0
  223. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/base.yml +0 -0
  224. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/context.yml +0 -0
  225. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/copypaste.yml +0 -0
  226. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editblock.yml +0 -0
  227. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editblock_fenced.yml +0 -0
  228. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editblock_func.yml +0 -0
  229. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editor_diff_fenced.yml +0 -0
  230. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editor_editblock.yml +0 -0
  231. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/editor_whole.yml +0 -0
  232. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/help.yml +0 -0
  233. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/patch.yml +0 -0
  234. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/single_wholefile_func.yml +0 -0
  235. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/udiff.yml +0 -0
  236. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/udiff_simple.yml +0 -0
  237. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/utils/__init__.py +0 -0
  238. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/utils/registry.py +0 -0
  239. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/utils/system.py +0 -0
  240. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/wholefile.yml +0 -0
  241. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/prompts/wholefile_func.yml +0 -0
  242. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  243. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  244. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  245. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  246. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  247. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  248. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  249. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  250. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  251. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  252. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  253. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  254. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  255. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  256. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  257. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  258. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  259. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  260. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  261. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  262. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  263. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  264. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  265. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  266. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  267. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  268. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  269. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  270. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  271. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  272. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  273. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/README.md +0 -0
  274. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  275. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  276. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  277. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  278. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  279. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  280. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  281. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  282. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  283. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  284. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  285. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  286. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  287. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  288. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  289. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  290. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  291. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  292. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  293. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  294. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  295. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  296. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  297. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  298. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  299. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  300. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/reasoning_tags.py +0 -0
  301. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/repo.py +0 -0
  302. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/repomap.py +0 -0
  303. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/report.py +0 -0
  304. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/resources/__init__.py +0 -0
  305. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/resources/model-settings.yml +0 -0
  306. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/resources/providers.json +0 -0
  307. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/run_cmd.py +0 -0
  308. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/sendchat.py +0 -0
  309. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/sessions.py +0 -0
  310. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/special.py +0 -0
  311. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/__init__.py +0 -0
  312. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/command_interactive.py +0 -0
  313. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/delete_text.py +0 -0
  314. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/finished.py +0 -0
  315. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_branch.py +0 -0
  316. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_diff.py +0 -0
  317. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_log.py +0 -0
  318. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_remote.py +0 -0
  319. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_show.py +0 -0
  320. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/git_status.py +0 -0
  321. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/indent_text.py +0 -0
  322. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/insert_text.py +0 -0
  323. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/list_changes.py +0 -0
  324. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/load_skill.py +0 -0
  325. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/ls.py +0 -0
  326. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/remove_skill.py +0 -0
  327. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/replace_text.py +0 -0
  328. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/show_numbered_context.py +0 -0
  329. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/thinking.py +0 -0
  330. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/undo_change.py +0 -0
  331. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/utils/base_tool.py +0 -0
  332. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/utils/helpers.py +0 -0
  333. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/utils/output.py +0 -0
  334. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/utils/registry.py +0 -0
  335. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/view_files_matching.py +0 -0
  336. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tools/view_files_with_symbol.py +0 -0
  337. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/__init__.py +0 -0
  338. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/io.py +0 -0
  339. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/styles.tcss +0 -0
  340. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/__init__.py +0 -0
  341. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/completion_bar.py +0 -0
  342. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/file_list.py +0 -0
  343. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/footer.py +0 -0
  344. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/input_container.py +0 -0
  345. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/key_hints.py +0 -0
  346. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/widgets/status_bar.py +0 -0
  347. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/tui/worker.py +0 -0
  348. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/urls.py +0 -0
  349. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/utils.py +0 -0
  350. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/versioncheck.py +0 -0
  351. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/voice.py +0 -0
  352. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/waiting.py +0 -0
  353. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/watch.py +0 -0
  354. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/watch_prompts.py +0 -0
  355. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/Gemfile +0 -0
  356. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/blame.md +0 -0
  357. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/get-started.md +0 -0
  358. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/help-tip.md +0 -0
  359. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/help.md +0 -0
  360. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/install.md +0 -0
  361. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/keys.md +0 -0
  362. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/model-warnings.md +0 -0
  363. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/multi-line.md +0 -0
  364. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/python-m-aider.md +0 -0
  365. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/recording.css +0 -0
  366. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/recording.md +0 -0
  367. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_includes/works-best.md +0 -0
  368. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_features.scss +0 -0
  369. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_footer.scss +0 -0
  370. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_hero.scss +0 -0
  371. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_info.scss +0 -0
  372. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_layout.scss +0 -0
  373. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_reset.scss +0 -0
  374. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_testimonials.scss +0 -0
  375. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_typography.scss +0 -0
  376. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/_variables.scss +0 -0
  377. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/custom/custom.scss +0 -0
  378. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/_sass/global-overrides.scss +0 -0
  379. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/adv-model-settings.md +0 -0
  380. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/aider_conf.md +0 -0
  381. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/api-keys.md +0 -0
  382. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/custom-commands.md +0 -0
  383. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  384. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/dotenv.md +0 -0
  385. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/editor.md +0 -0
  386. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/hooks.md +0 -0
  387. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/mcp.md +0 -0
  388. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/model-aliases.md +0 -0
  389. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/options.md +0 -0
  390. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/reasoning.md +0 -0
  391. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/security.md +0 -0
  392. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config/skills.md +0 -0
  393. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/config.md +0 -0
  394. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/faq.md +0 -0
  395. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/git.md +0 -0
  396. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/index.md +0 -0
  397. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/install/docker.md +0 -0
  398. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/install/optional.md +0 -0
  399. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/install.md +0 -0
  400. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/languages.md +0 -0
  401. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  402. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/legal/privacy.md +0 -0
  403. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/anthropic.md +0 -0
  404. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/azure.md +0 -0
  405. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/bedrock.md +0 -0
  406. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/cohere.md +0 -0
  407. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/deepseek.md +0 -0
  408. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/gemini.md +0 -0
  409. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/github.md +0 -0
  410. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/groq.md +0 -0
  411. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/lm-studio.md +0 -0
  412. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/ollama.md +0 -0
  413. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/openai-compat.md +0 -0
  414. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/openai.md +0 -0
  415. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/openrouter.md +0 -0
  416. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/other.md +0 -0
  417. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/vertex.md +0 -0
  418. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/warnings.md +0 -0
  419. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms/xai.md +0 -0
  420. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/llms.md +0 -0
  421. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/more/analytics.md +0 -0
  422. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/more/edit-formats.md +0 -0
  423. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/more/infinite-output.md +0 -0
  424. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/more-info.md +0 -0
  425. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
  426. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
  427. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/recordings/index.md +0 -0
  428. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
  429. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
  430. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/repomap.md +0 -0
  431. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/scripting.md +0 -0
  432. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/sessions.md +0 -0
  433. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  434. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  435. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  436. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/support.md +0 -0
  437. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  438. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  439. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/troubleshooting.md +0 -0
  440. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/browser.md +0 -0
  441. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/caching.md +0 -0
  442. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/commands.md +0 -0
  443. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/conventions.md +0 -0
  444. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/copypaste.md +0 -0
  445. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/images-urls.md +0 -0
  446. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/lint-test.md +0 -0
  447. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/modes.md +0 -0
  448. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/not-code.md +0 -0
  449. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/notifications.md +0 -0
  450. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/tips.md +0 -0
  451. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/voice.md +0 -0
  452. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage/watch.md +0 -0
  453. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/docs/usage.md +0 -0
  454. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli/website/share/index.md +0 -0
  455. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/dependency_links.txt +0 -0
  456. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/entry_points.txt +0 -0
  457. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/requires.txt +0 -0
  458. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/cecli_dev.egg-info/top_level.txt +0 -0
  459. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/docker/Dockerfile +0 -0
  460. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  461. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/pyproject.toml +0 -0
  462. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/pytest.ini +0 -0
  463. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/common-constraints.txt +0 -0
  464. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-dev.in +0 -0
  465. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-dev.txt +0 -0
  466. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-help.in +0 -0
  467. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-help.txt +0 -0
  468. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-playwright.in +0 -0
  469. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements-playwright.txt +0 -0
  470. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/requirements.in +0 -0
  471. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements/tree-sitter.in +0 -0
  472. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/requirements.txt +0 -0
  473. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/30k-image.py +0 -0
  474. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/Dockerfile.jekyll +0 -0
  475. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/__init__.py +0 -0
  476. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/blame.py +0 -0
  477. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/clean_metadata.py +0 -0
  478. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/cost_analyzer.py +0 -0
  479. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/dl_icons.py +0 -0
  480. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/generate_providers.py +0 -0
  481. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/get_contributor_list.js +0 -0
  482. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/get_hashline.py +0 -0
  483. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/history_prompts.py +0 -0
  484. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/homepage.py +0 -0
  485. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/issues.py +0 -0
  486. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/jekyll_build.sh +0 -0
  487. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/jekyll_run.sh +0 -0
  488. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/logo_svg.py +0 -0
  489. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/pip-compile.sh +0 -0
  490. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/recording_audio.py +0 -0
  491. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/redact-cast.py +0 -0
  492. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/rename_to_cecli.py +0 -0
  493. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/tmux_record.sh +0 -0
  494. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/tsl_pack_langs.py +0 -0
  495. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/update-blame.sh +0 -0
  496. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/update-docs.sh +0 -0
  497. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/update-history.py +0 -0
  498. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/versionbump.py +0 -0
  499. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/scripts/yank-old-versions.py +0 -0
  500. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/setup.cfg +0 -0
  501. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/shim.pyproject.toml +0 -0
  502. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/__init__.py +0 -0
  503. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/__init__.py +0 -0
  504. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_aws_credentials.py +0 -0
  505. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_background_commands.py +0 -0
  506. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_coder.py +0 -0
  507. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_commands.py +0 -0
  508. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_custom_commands.py +0 -0
  509. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_deprecated.py +0 -0
  510. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_editblock.py +0 -0
  511. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_editor.py +0 -0
  512. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_exceptions.py +0 -0
  513. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_find_or_blocks.py +0 -0
  514. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_history.py +0 -0
  515. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_io.py +0 -0
  516. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_linter.py +0 -0
  517. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_main.py +0 -0
  518. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_model_info_manager.py +0 -0
  519. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_model_provider_manager.py +0 -0
  520. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_models.py +0 -0
  521. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_onboarding.py +0 -0
  522. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_plugin_manager.py +0 -0
  523. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_prompts.py +0 -0
  524. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_reasoning.py +0 -0
  525. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_repo.py +0 -0
  526. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_repomap.py +0 -0
  527. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_run_cmd.py +0 -0
  528. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_sanity_check_repo.py +0 -0
  529. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_scripting.py +0 -0
  530. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_sendchat.py +0 -0
  531. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_sessions.py +0 -0
  532. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_skills.py +0 -0
  533. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_special.py +0 -0
  534. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_ssl_verification.py +0 -0
  535. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_udiff.py +0 -0
  536. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_urls.py +0 -0
  537. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_voice.py +0 -0
  538. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_watch.py +0 -0
  539. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/basic/test_wholefile.py +0 -0
  540. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/coders/test_copypaste_coder.py +0 -0
  541. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/conftest.py +0 -0
  542. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  543. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/chat-history.md +0 -0
  544. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/arduino/test.ino +0 -0
  545. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/c/test.c +0 -0
  546. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/chatito/test.chatito +0 -0
  547. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/clojure/test.clj +0 -0
  548. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  549. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/cpp/test.cpp +0 -0
  550. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/csharp/test.cs +0 -0
  551. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/d/test.d +0 -0
  552. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/dart/test.dart +0 -0
  553. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/elisp/test.el +0 -0
  554. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/elixir/test.ex +0 -0
  555. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/elm/test.elm +0 -0
  556. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/gleam/test.gleam +0 -0
  557. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/go/test.go +0 -0
  558. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/haskell/test.hs +0 -0
  559. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/hcl/test.tf +0 -0
  560. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/java/test.java +0 -0
  561. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/javascript/test.js +0 -0
  562. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/kotlin/test.kt +0 -0
  563. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/lua/test.lua +0 -0
  564. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/matlab/test.m +0 -0
  565. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/ocaml/test.ml +0 -0
  566. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  567. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/php/test.php +0 -0
  568. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/pony/test.pony +0 -0
  569. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/properties/test.properties +0 -0
  570. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/python/test.py +0 -0
  571. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/ql/test.ql +0 -0
  572. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/r/test.r +0 -0
  573. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/racket/test.rkt +0 -0
  574. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/ruby/test.rb +0 -0
  575. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/rust/test.rs +0 -0
  576. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/scala/test.scala +0 -0
  577. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/solidity/test.sol +0 -0
  578. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/swift/test.swift +0 -0
  579. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/tsx/test.tsx +0 -0
  580. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/typescript/test.ts +0 -0
  581. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/udev/test.rules +0 -0
  582. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/languages/zig/test.zig +0 -0
  583. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/sample-code-base/sample.js +0 -0
  584. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/sample-code-base/sample.py +0 -0
  585. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  586. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/watch.js +0 -0
  587. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/watch.lisp +0 -0
  588. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/watch.py +0 -0
  589. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/fixtures/watch_question.js +0 -0
  590. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/help/test_help.py +0 -0
  591. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/hooks/__init__.py +0 -0
  592. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/hooks/test_base.py +0 -0
  593. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/hooks/test_manager.py +0 -0
  594. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/hooks/test_registry.py +0 -0
  595. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/mcp/__init__.py +0 -0
  596. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/mcp/test_manager.py +0 -0
  597. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/scrape/test_playwright_disable.py +0 -0
  598. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/scrape/test_scrape.py +0 -0
  599. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/test_conversation_integration.py +0 -0
  600. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/test_conversation_system.py +0 -0
  601. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/tools/test_git_branch.py +0 -0
  602. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/tools/test_git_diff.py +0 -0
  603. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/tools/test_grep.py +0 -0
  604. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/tools/test_insert_block.py +0 -0
  605. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/tests/tools/test_registry.py +0 -0
  606. {cecli_dev-0.97.2 → cecli_dev-0.97.4}/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.97.2
3
+ Version: 0.97.4
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
@@ -84,12 +84,12 @@ Dynamic: license-file
84
84
 
85
85
  ## Why `cecli`?
86
86
 
87
- `cecli` (probably pronounced like "Cecily", aka `aider-ce`) is a community-driven fork of the [Aider](https://cecli.dev/) AI pair programming tool.
88
- Aider is a fantastic piece of software with a wonderful community but it has been painfully slow in receiving updates in the quickly evolving AI tooling space.
87
+ `cecli` (probably pronounced like "Cecily") is yet another cli agent crafted for extensibility and customization. Originally a fork of the [Aider](https://cecli.dev/) AI pair programming tool, we aim to make agentic coding as maximally effective as it can be based on the growing capabilities of large language models.
89
88
 
90
- We aim to foster an open, collaborative ecosystem where new features, experiments, and improvements can be developed and shared rapidly. We believe in genuine FOSS principles and actively welcome contributors of all skill levels.
89
+ We aim to foster an open, collaborative ecosystem where new features, experiments, and improvements can be developed and shared rapidly. We believe in the principles of FOSS and actively welcome contributors of all skill levels.
91
90
 
92
91
  If you are looking for bleeding-edge features or want to get your hands dirty with the internals of an AI coding agent, here's your sign.
92
+
93
93
  LLMs are a part of our lives from here on out so join us in learning about and crafting the future.
94
94
 
95
95
  ### Links
@@ -1,11 +1,11 @@
1
1
  ## Why `cecli`?
2
2
 
3
- `cecli` (probably pronounced like "Cecily", aka `aider-ce`) is a community-driven fork of the [Aider](https://cecli.dev/) AI pair programming tool.
4
- Aider is a fantastic piece of software with a wonderful community but it has been painfully slow in receiving updates in the quickly evolving AI tooling space.
3
+ `cecli` (probably pronounced like "Cecily") is yet another cli agent crafted for extensibility and customization. Originally a fork of the [Aider](https://cecli.dev/) AI pair programming tool, we aim to make agentic coding as maximally effective as it can be based on the growing capabilities of large language models.
5
4
 
6
- We aim to foster an open, collaborative ecosystem where new features, experiments, and improvements can be developed and shared rapidly. We believe in genuine FOSS principles and actively welcome contributors of all skill levels.
5
+ We aim to foster an open, collaborative ecosystem where new features, experiments, and improvements can be developed and shared rapidly. We believe in the principles of FOSS and actively welcome contributors of all skill levels.
7
6
 
8
7
  If you are looking for bleeding-edge features or want to get your hands dirty with the internals of an AI coding agent, here's your sign.
8
+
9
9
  LLMs are a part of our lives from here on out so join us in learning about and crafting the future.
10
10
 
11
11
  ### Links
@@ -1155,6 +1155,7 @@ async def run_test_real(
1155
1155
  use_enhanced_map=True,
1156
1156
  verbose=verbose,
1157
1157
  yes_always_commands=True,
1158
+ max_reflections=0,
1158
1159
  ),
1159
1160
  map_mul_no_files=4,
1160
1161
  mcp_manager=None,
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.97.1.dev"
3
+ __version__ = "0.97.4.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.97.2'
32
- __version_tuple__ = version_tuple = (0, 97, 2)
31
+ __version__ = version = '0.97.4'
32
+ __version_tuple__ = version_tuple = (0, 97, 4)
33
33
 
34
- __commit_id__ = commit_id = 'g49fc44517'
34
+ __commit_id__ = commit_id = 'g3f41a1bc9'
@@ -254,6 +254,18 @@ def get_parser(default_config_files, git_root):
254
254
  " If unspecified, defaults to the model's max_chat_history_tokens."
255
255
  ),
256
256
  )
257
+ group.add_argument(
258
+ "--max-reflections",
259
+ type=int,
260
+ default=3,
261
+ help="Maximum number of retries a model gets on malformed outputs (default: 3)",
262
+ )
263
+ group.add_argument(
264
+ "--cost-limit",
265
+ type=float,
266
+ default=None,
267
+ help="Cost limit per session, exceeding this forces prompt confirmation (default: None)",
268
+ )
257
269
  group.add_argument(
258
270
  "--file-diffs",
259
271
  action=argparse.BooleanOptionalAction,
@@ -7,7 +7,7 @@ import platform
7
7
  import random
8
8
  import time
9
9
  import traceback
10
- from collections import Counter, defaultdict
10
+ from collections import defaultdict
11
11
  from datetime import datetime
12
12
  from pathlib import Path
13
13
 
@@ -85,13 +85,18 @@ class AgentCoder(Coder):
85
85
  self.allowed_context_blocks = set()
86
86
  self.context_block_tokens = {}
87
87
  self.context_blocks_cache = {}
88
+ self.hot_reload_enabled = False
88
89
  self.tokens_calculated = False
89
90
  self.skip_cli_confirmations = False
90
91
  self.agent_finished = False
91
92
  self.agent_config = self._get_agent_config()
93
+ self._setup_agent()
92
94
  ToolRegistry.build_registry(agent_config=self.agent_config)
93
95
  super().__init__(*args, **kwargs)
94
96
 
97
+ def _setup_agent(self):
98
+ os.makedirs(".cecli/workspace", exist_ok=True)
99
+
95
100
  def _get_agent_config(self):
96
101
  """
97
102
  Parse and return agent configuration from args.agent_config.
@@ -119,6 +124,7 @@ class AgentCoder(Coder):
119
124
  config, "skip_cli_confirmations", nested.getter(config, "yolo", [])
120
125
  )
121
126
  config["command_timeout"] = nested.getter(config, "command_timeout", 30)
127
+ config["hot_reload"] = nested.getter(config, "hot_reload", False)
122
128
 
123
129
  config["tools_paths"] = nested.getter(config, "tools_paths", [])
124
130
  config["tools_includelist"] = nested.getter(
@@ -147,7 +153,7 @@ class AgentCoder(Coder):
147
153
 
148
154
  self.large_file_token_threshold = config["large_file_token_threshold"]
149
155
  self.skip_cli_confirmations = config["skip_cli_confirmations"]
150
-
156
+ self.hot_reload_enabled = config["hot_reload"]
151
157
  self.allowed_context_blocks = config["include_context_blocks"]
152
158
 
153
159
  for context_block in config["exclude_context_blocks"]:
@@ -259,6 +265,7 @@ class AgentCoder(Coder):
259
265
  try:
260
266
  parsed_args_list.append(json.loads(chunk))
261
267
  except json.JSONDecodeError as e:
268
+ self.model_kwargs = {}
262
269
  self.io.tool_warning(
263
270
  f"Could not parse JSON chunk for tool {tool_name}: {chunk}"
264
271
  )
@@ -320,6 +327,7 @@ class AgentCoder(Coder):
320
327
 
321
328
  result_message = "\n\n".join(all_results_content)
322
329
  except Exception as e:
330
+ self.model_kwargs = {}
323
331
  result_message = f"Error executing {tool_name}: {e}"
324
332
  self.io.tool_error(f"""Error during {tool_name} execution: {e}
325
333
  {traceback.format_exc()}""")
@@ -843,6 +851,10 @@ I will proceed based on the tool results and updated context.""")
843
851
  self.files_edited_by_tools = set()
844
852
  return False
845
853
 
854
+ async def hot_reload(self):
855
+ if self.hot_reload_enabled:
856
+ self.skills_manager.hot_reload()
857
+
846
858
  async def _execute_tool_with_registry(self, norm_tool_name, params):
847
859
  """
848
860
  Execute a tool using the tool registry.
@@ -879,12 +891,9 @@ I will proceed based on the tool results and updated context.""")
879
891
  """
880
892
  Identifies repetitive tool usage patterns from rounds of tool calls.
881
893
 
882
- This method combines count-based and similarity-based detection:
894
+ This method uses similarity-based detection:
883
895
  1. If the last round contained a write tool, it assumes progress and returns no repetitive tools.
884
- 2. It checks for any read tool that has been used 2 or more times across rounds.
885
- 3. If no tools are repeated, but all tools in the history are read tools,
886
- it flags all of them as potentially repetitive.
887
- 4. It checks for similarity-based repetition using cosine similarity on tool call strings.
896
+ 2. It checks for similarity-based repetition using cosine similarity on tool call strings.
888
897
 
889
898
  It avoids flagging repetition if a "write" tool was used recently,
890
899
  as that suggests progress is being made.
@@ -893,9 +902,6 @@ I will proceed based on the tool results and updated context.""")
893
902
  if history_len < 5:
894
903
  return set()
895
904
  similarity_repetitive_tools = self._get_repetitive_tools_by_similarity()
896
- all_tools = []
897
- for round_tools in self.tool_usage_history:
898
- all_tools.extend(round_tools)
899
905
  if self.last_round_tools:
900
906
  last_round_has_write = any(
901
907
  tool.lower() in self.write_tools for tool in self.last_round_tools
@@ -909,24 +915,14 @@ I will proceed based on the tool results and updated context.""")
909
915
  if tool.lower() in self.read_tools or tool.lower() in self.write_tools
910
916
  }
911
917
  return filtered_similarity_tools if len(filtered_similarity_tools) else set()
912
- if all(tool.lower() in self.read_tools for tool in all_tools):
913
- # Only return tools that are in read_tools
914
- return {tool for tool in all_tools if tool.lower() in self.read_tools}
915
- tool_counts = Counter(all_tools)
916
- count_repetitive_tools = {
917
- tool
918
- for tool, count in tool_counts.items()
919
- if count >= 5 and tool.lower() in self.read_tools
920
- }
921
918
  # Filter similarity_repetitive_tools to only include tools in read_tools or write_tools
922
919
  filtered_similarity_tools = {
923
920
  tool
924
921
  for tool in similarity_repetitive_tools
925
922
  if tool.lower() in self.read_tools or tool.lower() in self.write_tools
926
923
  }
927
- repetitive_tools = count_repetitive_tools.union(filtered_similarity_tools)
928
- if repetitive_tools:
929
- return repetitive_tools
924
+ if filtered_similarity_tools:
925
+ return filtered_similarity_tools
930
926
  return set()
931
927
 
932
928
  def _get_repetitive_tools_by_similarity(self):
@@ -983,6 +979,27 @@ I will proceed based on the tool results and updated context.""")
983
979
 
984
980
  context_parts.append("\n\n")
985
981
  if repetitive_tools:
982
+ if not self.model_kwargs:
983
+ self.model_kwargs = {
984
+ "temperature": (self.main_model.use_temperature or 1) + 0.1,
985
+ "frequency_penalty": 0.2,
986
+ "presence_penalty": 0.1,
987
+ }
988
+ else:
989
+ temperature = nested.getter(self.model_kwargs, "temperature")
990
+ freq_penalty = nested.getter(self.model_kwargs, "frequency_penalty")
991
+ if temperature and freq_penalty:
992
+ self.model_kwargs["temperature"] = min(temperature + 0.1, 2)
993
+ self.model_kwargs["frequency_penalty"] = min(freq_penalty + 0.1, 1)
994
+
995
+ if random.random() < 0.25:
996
+ self.model_kwargs["temperature"] = max(temperature - 0.2, 1)
997
+ self.model_kwargs["frequency_penalty"] = max(freq_penalty - 0.2, 0)
998
+
999
+ # One tenth of the time, just straight reset the randomness
1000
+ if random.random() < 0.1:
1001
+ self.model_kwargs = {}
1002
+
986
1003
  if self.turn_count - self._last_repetitive_warning_turn > 2:
987
1004
  self._last_repetitive_warning_turn = self.turn_count
988
1005
  self._last_repetitive_warning_severity += 1
@@ -1040,7 +1057,7 @@ I have detected repetitive usage of the following tools: {', '.join([f'`{t}`' fo
1040
1057
 
1041
1058
  repetition_warning += f"""
1042
1059
  ### CRITICAL: Execution Loop Detected
1043
- You are currently "spinning." To break the logic trap, you must:
1060
+ You are currently "spinning gears". To break the exploration loop, you must:
1044
1061
  1. **Analyze**: Use the `Thinking` tool to summarize exactly what you have found so far and why you were stuck.
1045
1062
  2. **Pivot**: Abandon or modify your current exploration strategy. Try focusing on different files or running tests.
1046
1063
  3. **Reframe**: To ensure your logic reset, include a 2-sentence story about {animal} {verb} {fruit} in your thoughts.
@@ -1049,6 +1066,9 @@ Prioritize editing or verification over further exploration.
1049
1066
  """
1050
1067
 
1051
1068
  context_parts.append(repetition_warning)
1069
+ else:
1070
+ self.model_kwargs = {}
1071
+
1052
1072
  context_parts.append("</context>")
1053
1073
  return "\n".join(context_parts)
1054
1074
 
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  from ..commands import SwitchCoderSignal
4
- from ..helpers.conversation import ConversationManager, MessageTag
4
+ from ..helpers.conversation import ConversationManager
5
5
  from .ask_coder import AskCoder
6
6
  from .base_coder import Coder
7
7
 
@@ -61,9 +61,7 @@ class ArchitectCoder(AskCoder):
61
61
  editor_coder = await Coder.create(**new_kwargs)
62
62
 
63
63
  # Re-initialize ConversationManager with editor coder
64
- ConversationManager.initialize(
65
- editor_coder, reset=True, reformat=True, preserve_tags=[MessageTag.DONE, MessageTag.CUR]
66
- )
64
+ ConversationManager.initialize(editor_coder, reset=True, reformat=True, preserve_tags=True)
67
65
 
68
66
  if self.verbose:
69
67
  editor_coder.show_announcements()
@@ -84,7 +82,7 @@ class ArchitectCoder(AskCoder):
84
82
  original_coder or self,
85
83
  reset=True,
86
84
  reformat=True,
87
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
85
+ preserve_tags=True,
88
86
  )
89
87
 
90
88
  self.total_cost = editor_coder.total_cost
@@ -96,7 +94,7 @@ class ArchitectCoder(AskCoder):
96
94
  original_coder or self,
97
95
  reset=True,
98
96
  reformat=True,
99
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
97
+ preserve_tags=True,
100
98
  )
101
99
 
102
100
  raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")
@@ -32,7 +32,7 @@ from uuid import uuid4 as generate_unique_id
32
32
 
33
33
  import httpx
34
34
  from litellm import experimental_mcp_client
35
- from litellm.types.utils import ChatCompletionMessageToolCall, Function, ModelResponse
35
+ from litellm.types.utils import ModelResponse
36
36
  from prompt_toolkit.patch_stdout import patch_stdout
37
37
  from rich.console import Console
38
38
 
@@ -40,7 +40,7 @@ import cecli.prompts.utils.system as prompts
40
40
  from cecli import __version__, models, urls, utils
41
41
  from cecli.commands import Commands, SwitchCoderSignal
42
42
  from cecli.exceptions import LiteLLMExceptions
43
- from cecli.helpers import command_parser, coroutines, nested
43
+ from cecli.helpers import command_parser, coroutines, nested, responses
44
44
  from cecli.helpers.conversation import (
45
45
  ConversationChunks,
46
46
  ConversationManager,
@@ -156,6 +156,8 @@ class Coder:
156
156
  tool_reflection = False
157
157
  last_user_message = ""
158
158
  uuid = ""
159
+ model_kwargs = {}
160
+ cost_multiplier = 1
159
161
 
160
162
  # Task coordination state variables
161
163
  input_running = False
@@ -210,34 +212,14 @@ class Coder:
210
212
 
211
213
  use_kwargs = dict(from_coder.original_kwargs) # copy orig kwargs
212
214
 
213
- # If the edit format changes, we can't leave old ASSISTANT
214
- # messages in the chat history. The old edit format will
215
- # confused the new LLM. It may try and imitate it, disobeying
216
- # the system prompt.
217
- # Get DONE messages from ConversationManager
218
- done_messages = ConversationManager.get_messages_dict(MessageTag.DONE)
219
- if edit_format != from_coder.edit_format and done_messages and summarize_from_coder:
220
- try:
221
- io.tool_warning("Summarizing messages, please wait...")
222
- done_messages = await from_coder.summarizer.summarize_all(done_messages)
223
- except (KeyboardInterrupt, ValueError):
224
- # If summarization fails, keep the original messages and warn the user
225
- io.tool_warning(
226
- "Chat history summarization failed, continuing with full history"
227
- )
228
-
229
- # Bring along context from the old Coder
230
- # Get CUR messages from ConversationManager
231
- cur_messages = ConversationManager.get_messages_dict(MessageTag.CUR)
232
-
233
215
  update = dict(
234
216
  fnames=list(from_coder.abs_fnames),
235
217
  read_only_fnames=list(from_coder.abs_read_only_fnames), # Copy read-only files
236
218
  read_only_stubs_fnames=list(
237
219
  from_coder.abs_read_only_stubs_fnames
238
220
  ), # Copy read-only stubs
239
- done_messages=done_messages,
240
- cur_messages=cur_messages,
221
+ done_messages=[],
222
+ cur_messages=[],
241
223
  coder_commit_hashes=from_coder.coder_commit_hashes,
242
224
  commands=from_coder.commands.clone(),
243
225
  total_cost=from_coder.total_cost,
@@ -380,6 +362,9 @@ class Coder:
380
362
 
381
363
  self.context_compaction_max_tokens = context_compaction_max_tokens
382
364
  self.context_compaction_summary_tokens = context_compaction_summary_tokens
365
+ self.max_reflections = (
366
+ 3 if self.edit_format == "agent" else nested.getter(self.args, "max_reflections", 3)
367
+ )
383
368
 
384
369
  if not fnames:
385
370
  fnames = []
@@ -411,22 +396,6 @@ class Coder:
411
396
  self.add_gitignore_files = add_gitignore_files
412
397
  self.abs_read_only_stubs_fnames = set()
413
398
 
414
- # Always use ConversationManager as the source of truth
415
- # Add any provided messages to ConversationManager
416
- if done_messages:
417
- for msg in done_messages:
418
- ConversationManager.add_message(
419
- message_dict=msg,
420
- tag=MessageTag.DONE,
421
- )
422
-
423
- if cur_messages:
424
- for msg in cur_messages:
425
- ConversationManager.add_message(
426
- message_dict=msg,
427
- tag=MessageTag.CUR,
428
- )
429
-
430
399
  self.io = io
431
400
  self.io.coder = weakref.ref(self)
432
401
 
@@ -1612,9 +1581,23 @@ class Coder:
1612
1581
  self.reflected_message = None
1613
1582
  self.tool_reflection = False
1614
1583
 
1584
+ if float(self.total_cost) > self.cost_multiplier * (
1585
+ nested.getter(self.args, "cost_limit", float("inf")) or float("inf")
1586
+ ):
1587
+ if await self.io.confirm_ask(
1588
+ "You have reached your configured cost limit. Continue?",
1589
+ group_response="Cost Limit",
1590
+ explicit_yes_required=True,
1591
+ ):
1592
+ Coder.cost_multiplier += 1
1593
+ else:
1594
+ return
1595
+
1615
1596
  async for _ in self.send_message(message):
1616
1597
  pass
1617
1598
 
1599
+ await self.hot_reload()
1600
+
1618
1601
  if not self.reflected_message:
1619
1602
  await self.auto_save_session(force=True)
1620
1603
  break
@@ -2399,7 +2382,7 @@ class Coder:
2399
2382
  force=True, # Force update existing message
2400
2383
  )
2401
2384
 
2402
- if edited and self.auto_test:
2385
+ if edited and self.auto_test and self.test_cmd:
2403
2386
  test_errors = await self.commands.execute("test", self.test_cmd)
2404
2387
  self.test_outcome = not test_errors
2405
2388
  if test_errors:
@@ -2750,6 +2733,9 @@ class Coder:
2750
2733
  async def reply_completed(self):
2751
2734
  pass
2752
2735
 
2736
+ async def hot_reload(self):
2737
+ pass
2738
+
2753
2739
  async def show_exhausted_error(self):
2754
2740
  output_tokens = 0
2755
2741
  if self.partial_response_content:
@@ -2995,6 +2981,7 @@ class Coder:
2995
2981
  self.temperature,
2996
2982
  # This could include any tools, but for now it is just MCP tools
2997
2983
  tools=tools,
2984
+ override_kwargs=self.model_kwargs,
2998
2985
  )
2999
2986
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3000
2987
 
@@ -3166,7 +3153,7 @@ class Coder:
3166
3153
  reasoning_content = None
3167
3154
 
3168
3155
  if reasoning_content:
3169
- if nested.getter(self, "args.show_thinking"):
3156
+ if nested.getter(self.args, "show_thinking"):
3170
3157
  if not self.got_reasoning_content:
3171
3158
  text += f"<{REASONING_TAG}>\n\n"
3172
3159
  text += reasoning_content
@@ -3202,7 +3189,7 @@ class Coder:
3202
3189
  self.stream_wrapper(content_to_show, final=False)
3203
3190
  elif text:
3204
3191
  # Apply reasoning tag formatting for non-pretty output
3205
- if nested.getter(self, "args.show_thinking"):
3192
+ if nested.getter(self.args, "show_thinking"):
3206
3193
  text = replace_reasoning_tags(text, self.reasoning_tag_name)
3207
3194
  try:
3208
3195
  self.stream_wrapper(text, final=False)
@@ -3324,66 +3311,16 @@ class Coder:
3324
3311
  # If no native tool calls, check if the content contains JSON tool calls
3325
3312
  # This handles models that write JSON in text instead of using native calling
3326
3313
  if not self.partial_response_tool_calls and self.partial_response_content:
3327
- try:
3328
- # Simple extraction of JSON-like structures that look like tool calls
3329
- # Only look for tool calls if it looks like JSON
3330
- if "{" in self.partial_response_content or "[" in self.partial_response_content:
3331
- json_chunks = utils.split_concatenated_json(self.partial_response_content)
3332
- extracted_calls = []
3333
- chunk_index = 0
3334
-
3335
- for chunk in json_chunks:
3336
- chunk_index += 1
3337
- try:
3338
- json_obj = json.loads(chunk)
3339
- if (
3340
- isinstance(json_obj, dict)
3341
- and "name" in json_obj
3342
- and "arguments" in json_obj
3343
- ):
3344
- # Create a Pydantic model for the tool call
3345
- function_obj = Function(
3346
- name=json_obj["name"],
3347
- arguments=(
3348
- json.dumps(json_obj["arguments"])
3349
- if isinstance(json_obj["arguments"], (dict, list))
3350
- else str(json_obj["arguments"])
3351
- ),
3352
- )
3353
- tool_call_obj = ChatCompletionMessageToolCall(
3354
- type="function",
3355
- function=function_obj,
3356
- id=f"call_{len(extracted_calls)}_{int(time.time())}_{chunk_index}",
3357
- )
3358
- extracted_calls.append(tool_call_obj)
3359
- elif isinstance(json_obj, list):
3360
- for item in json_obj:
3361
- if (
3362
- isinstance(item, dict)
3363
- and "name" in item
3364
- and "arguments" in item
3365
- ):
3366
- function_obj = Function(
3367
- name=item["name"],
3368
- arguments=(
3369
- json.dumps(item["arguments"])
3370
- if isinstance(item["arguments"], (dict, list))
3371
- else str(item["arguments"])
3372
- ),
3373
- )
3374
- tool_call_obj = ChatCompletionMessageToolCall(
3375
- type="function",
3376
- function=function_obj,
3377
- id=f"call_{len(extracted_calls)}_{int(time.time())}_{chunk_index}",
3378
- )
3379
- extracted_calls.append(tool_call_obj)
3380
- except json.JSONDecodeError:
3381
- continue
3382
-
3383
- if extracted_calls:
3384
- self.partial_response_tool_calls = extracted_calls
3385
- except Exception:
3386
- pass
3314
+ extracted_calls = responses.extract_tools_from_content_json(
3315
+ self.partial_response_content
3316
+ )
3317
+ if not extracted_calls:
3318
+ extracted_calls = responses.extract_tools_from_content_xml(
3319
+ self.partial_response_content
3320
+ )
3321
+
3322
+ if extracted_calls:
3323
+ self.partial_response_tool_calls = extracted_calls
3387
3324
 
3388
3325
  return response, func_err, content_err
3389
3326
 
@@ -3405,7 +3342,7 @@ class Coder:
3405
3342
  def live_incremental_response(self, final):
3406
3343
  show_resp = self.render_incremental_response(final)
3407
3344
  # Apply any reasoning tag formatting
3408
- if nested.getter(self, "args.show_thinking"):
3345
+ if nested.getter(self.args, "show_thinking"):
3409
3346
  show_resp = replace_reasoning_tags(show_resp, self.reasoning_tag_name)
3410
3347
 
3411
3348
  # Track streaming state to avoid repetitive output
@@ -3,7 +3,7 @@ from typing import List
3
3
  import cecli.models as models
4
4
  from cecli.commands.utils.base_command import BaseCommand
5
5
  from cecli.commands.utils.helpers import format_command_result
6
- from cecli.helpers.conversation import ConversationManager, MessageTag
6
+ from cecli.helpers.conversation import ConversationManager
7
7
 
8
8
 
9
9
  class AgentModelCommand(BaseCommand):
@@ -69,7 +69,7 @@ class AgentModelCommand(BaseCommand):
69
69
  temp_coder,
70
70
  reset=True,
71
71
  reformat=True,
72
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72
+ preserve_tags=True,
73
73
  )
74
74
 
75
75
  verbose = kwargs.get("verbose", False)
@@ -86,7 +86,7 @@ class AgentModelCommand(BaseCommand):
86
86
  original_coder,
87
87
  reset=True,
88
88
  reformat=True,
89
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89
+ preserve_tags=True,
90
90
  )
91
91
 
92
92
  # Restore the original model configuration
@@ -3,7 +3,7 @@ from typing import List
3
3
  import cecli.models as models
4
4
  from cecli.commands.utils.base_command import BaseCommand
5
5
  from cecli.commands.utils.helpers import format_command_result
6
- from cecli.helpers.conversation import ConversationManager, MessageTag
6
+ from cecli.helpers.conversation import ConversationManager
7
7
 
8
8
 
9
9
  class EditorModelCommand(BaseCommand):
@@ -69,7 +69,7 @@ class EditorModelCommand(BaseCommand):
69
69
  temp_coder,
70
70
  reset=True,
71
71
  reformat=True,
72
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72
+ preserve_tags=True,
73
73
  )
74
74
 
75
75
  verbose = kwargs.get("verbose", False)
@@ -86,7 +86,7 @@ class EditorModelCommand(BaseCommand):
86
86
  original_coder,
87
87
  reset=True,
88
88
  reformat=True,
89
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89
+ preserve_tags=True,
90
90
  )
91
91
 
92
92
  # Restore the original model configuration
@@ -3,7 +3,7 @@ from typing import List
3
3
  import cecli.models as models
4
4
  from cecli.commands.utils.base_command import BaseCommand
5
5
  from cecli.commands.utils.helpers import format_command_result
6
- from cecli.helpers.conversation import ConversationManager, MessageTag
6
+ from cecli.helpers.conversation import ConversationManager
7
7
 
8
8
 
9
9
  class ModelCommand(BaseCommand):
@@ -73,7 +73,7 @@ class ModelCommand(BaseCommand):
73
73
  temp_coder,
74
74
  reset=True,
75
75
  reformat=True,
76
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
76
+ preserve_tags=True,
77
77
  )
78
78
 
79
79
  verbose = kwargs.get("verbose", False)
@@ -90,7 +90,7 @@ class ModelCommand(BaseCommand):
90
90
  original_coder,
91
91
  reset=True,
92
92
  reformat=True,
93
- preserve_tags=[MessageTag.DONE, MessageTag.CUR],
93
+ preserve_tags=True,
94
94
  )
95
95
 
96
96
  # Restore the original model configuration
@@ -25,9 +25,12 @@ class SaveSessionCommand(BaseCommand):
25
25
  @classmethod
26
26
  def get_completions(cls, io, coder, args) -> List[str]:
27
27
  """Get completion options for save-session command."""
28
- # For save-session, we could return existing session names for completion
29
- # For now, return empty list
30
- return []
28
+ # Return existing session names for completion to prevent accidental overwrites
29
+ from cecli import sessions
30
+
31
+ session_manager = sessions.SessionManager(coder, io)
32
+ sessions_list = session_manager.list_sessions()
33
+ return [session_info["name"] for session_info in sessions_list]
31
34
 
32
35
  @classmethod
33
36
  def get_help(cls) -> str:
@@ -40,4 +43,8 @@ class SaveSessionCommand(BaseCommand):
40
43
  help_text += " /save-session bug-fix # Save session as 'bug-fix'\n"
41
44
  help_text += "\nSessions are saved in the .cecli/sessions/ directory as JSON files.\n"
42
45
  help_text += "Use /list-sessions to see saved sessions and /load-session to load them.\n"
46
+ help_text += (
47
+ "\nNote: Existing session names will be shown for tab completion to help prevent"
48
+ " accidental overwrites.\n"
49
+ )
43
50
  return help_text
@@ -64,6 +64,7 @@ class TokensCommand(BaseCommand):
64
64
  tokens_done = 0
65
65
  tokens_cur = 0
66
66
  tokens_diffs = 0
67
+ tokens_file_contexts = 0
67
68
 
68
69
  if msgs_done:
69
70
  tokens_done = coder.main_model.token_count(msgs_done)