cecli-dev 0.96.3__tar.gz → 0.96.5__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.3 → cecli_dev-0.96.5}/PKG-INFO +1 -1
  2. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/_version.py +3 -3
  4. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/agent_coder.py +1 -0
  5. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/architect_coder.py +25 -39
  6. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/base_coder.py +13 -4
  7. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/editor_model.py +14 -28
  8. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/model.py +14 -28
  9. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/utils/base_command.py +11 -28
  10. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/weak_model.py +14 -28
  11. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/base_message.py +3 -3
  12. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/manager.py +42 -4
  13. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/io.py +44 -10
  14. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/main.py +2 -0
  15. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/sessions.py +29 -24
  16. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/app.py +36 -12
  17. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/styles.tcss +1 -0
  18. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/__init__.py +2 -0
  19. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/footer.py +5 -5
  20. cecli_dev-0.96.5/cecli/tui/widgets/input_container.py +19 -0
  21. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/worker.py +1 -0
  22. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/PKG-INFO +1 -1
  23. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/SOURCES.txt +1 -0
  24. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.dockerignore +0 -0
  25. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.flake8 +0 -0
  26. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.gitattributes +0 -0
  27. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  28. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/check_pypi_version.yml +0 -0
  29. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/docker-build-test.yml +0 -0
  30. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/docker-release.yml +0 -0
  31. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/issues.yml +0 -0
  32. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/pages.yml +0 -0
  33. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/pre-commit.yml +0 -0
  34. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/release.yml +0 -0
  35. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/ubuntu-tests.yml +0 -0
  36. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/windows-tests.yml +0 -0
  37. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.github/workflows/windows_check_pypi_version.yml +0 -0
  38. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.gitignore +0 -0
  39. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/.pre-commit-config.yaml +0 -0
  40. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/CHANGELOG.md +0 -0
  41. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/CNAME +0 -0
  42. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/CONTRIBUTING.md +0 -0
  43. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/HISTORY.md +0 -0
  44. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/LICENSE.txt +0 -0
  45. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/MANIFEST.in +0 -0
  46. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/README.md +0 -0
  47. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/Dockerfile +0 -0
  48. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/README.md +0 -0
  49. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/__init__.py +0 -0
  50. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/benchmark.py +0 -0
  51. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/benchmark_classic.py +0 -0
  52. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/clone-exercism.sh +0 -0
  53. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/cpp-test.sh +0 -0
  54. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/docker.sh +0 -0
  55. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/docker_build.sh +0 -0
  56. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/install-docker-ubuntu.sh +0 -0
  57. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/npm-test.sh +0 -0
  58. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/over_time.py +0 -0
  59. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/plot.sh +0 -0
  60. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/plots.py +0 -0
  61. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/problem_stats.py +0 -0
  62. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/prompts.py +0 -0
  63. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/refactor_tools.py +0 -0
  64. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/rsync.sh +0 -0
  65. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/rungrid.py +0 -0
  66. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/swe-bench-lite.txt +0 -0
  67. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/swe-bench.txt +0 -0
  68. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/swe_bench.py +0 -0
  69. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/benchmark/test_benchmark.py +0 -0
  70. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/__main__.py +0 -0
  71. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/args.py +0 -0
  72. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/args_formatter.py +0 -0
  73. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/change_tracker.py +0 -0
  74. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/__init__.py +0 -0
  75. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/ask_coder.py +0 -0
  76. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/chat_chunks.py +0 -0
  77. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/context_coder.py +0 -0
  78. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/copypaste_coder.py +0 -0
  79. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editblock_coder.py +0 -0
  80. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editblock_fenced_coder.py +0 -0
  81. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editblock_func_coder.py +0 -0
  82. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  83. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editor_editblock_coder.py +0 -0
  84. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/editor_whole_coder.py +0 -0
  85. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/help_coder.py +0 -0
  86. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/patch_coder.py +0 -0
  87. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/search_replace.py +0 -0
  88. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/shell.py +0 -0
  89. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/single_wholefile_func_coder.py +0 -0
  90. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/udiff_coder.py +0 -0
  91. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/udiff_simple.py +0 -0
  92. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/wholefile_coder.py +0 -0
  93. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/coders/wholefile_func_coder.py +0 -0
  94. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/__init__.py +0 -0
  95. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/add.py +0 -0
  96. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/agent.py +0 -0
  97. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/architect.py +0 -0
  98. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/ask.py +0 -0
  99. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/chat_mode.py +0 -0
  100. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/clear.py +0 -0
  101. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/code.py +0 -0
  102. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/command_prefix.py +0 -0
  103. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/commit.py +0 -0
  104. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/compact.py +0 -0
  105. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/context.py +0 -0
  106. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/context_blocks.py +0 -0
  107. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/context_management.py +0 -0
  108. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/copy.py +0 -0
  109. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/copy_context.py +0 -0
  110. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/core.py +0 -0
  111. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/diff.py +0 -0
  112. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/drop.py +0 -0
  113. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/editor.py +0 -0
  114. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/exit.py +0 -0
  115. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/git.py +0 -0
  116. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/help.py +0 -0
  117. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/history_search.py +0 -0
  118. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/lint.py +0 -0
  119. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/list_sessions.py +0 -0
  120. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/load.py +0 -0
  121. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/load_mcp.py +0 -0
  122. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/load_session.py +0 -0
  123. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/load_skill.py +0 -0
  124. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/ls.py +0 -0
  125. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/map.py +0 -0
  126. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/map_refresh.py +0 -0
  127. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/models.py +0 -0
  128. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/multiline_mode.py +0 -0
  129. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/paste.py +0 -0
  130. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/quit.py +0 -0
  131. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/read_only.py +0 -0
  132. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/read_only_stub.py +0 -0
  133. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/reasoning_effort.py +0 -0
  134. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/remove_mcp.py +0 -0
  135. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/remove_skill.py +0 -0
  136. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/report.py +0 -0
  137. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/reset.py +0 -0
  138. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/run.py +0 -0
  139. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/save.py +0 -0
  140. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/save_session.py +0 -0
  141. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/settings.py +0 -0
  142. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/terminal_data/linux.keytab +0 -0
  143. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/terminal_setup.py +0 -0
  144. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/test.py +0 -0
  145. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/think_tokens.py +0 -0
  146. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/tokens.py +0 -0
  147. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/undo.py +0 -0
  148. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/utils/__init__.py +0 -0
  149. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/utils/helpers.py +0 -0
  150. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/utils/registry.py +0 -0
  151. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/utils/save_load_manager.py +0 -0
  152. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/voice.py +0 -0
  153. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/commands/web.py +0 -0
  154. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/deprecated_args.py +0 -0
  155. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/diffs.py +0 -0
  156. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/dump.py +0 -0
  157. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/editor.py +0 -0
  158. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/exceptions.py +0 -0
  159. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/format_settings.py +0 -0
  160. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/help.py +0 -0
  161. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/help_pats.py +0 -0
  162. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/__init__.py +0 -0
  163. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/background_commands.py +0 -0
  164. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/__init__.py +0 -0
  165. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/files.py +0 -0
  166. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/integration.py +0 -0
  167. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/tags.py +0 -0
  168. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/conversation/utils.py +0 -0
  169. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/copypaste.py +0 -0
  170. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/coroutines.py +0 -0
  171. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/file_searcher.py +0 -0
  172. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/model_providers.py +0 -0
  173. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/nested.py +0 -0
  174. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/plugin_manager.py +0 -0
  175. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/profiler.py +0 -0
  176. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/requests.py +0 -0
  177. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/similarity.py +0 -0
  178. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/helpers/skills.py +0 -0
  179. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/history.py +0 -0
  180. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/linter.py +0 -0
  181. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/llm.py +0 -0
  182. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mcp/__init__.py +0 -0
  183. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mcp/manager.py +0 -0
  184. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mcp/oauth.py +0 -0
  185. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mcp/server.py +0 -0
  186. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mcp/utils.py +0 -0
  187. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/mdstream.py +0 -0
  188. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/models.py +0 -0
  189. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/onboarding.py +0 -0
  190. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/__init__.py +0 -0
  191. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/agent.yml +0 -0
  192. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/architect.yml +0 -0
  193. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/ask.yml +0 -0
  194. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/base.yml +0 -0
  195. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/context.yml +0 -0
  196. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/copypaste.yml +0 -0
  197. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editblock.yml +0 -0
  198. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editblock_fenced.yml +0 -0
  199. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editblock_func.yml +0 -0
  200. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editor_diff_fenced.yml +0 -0
  201. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editor_editblock.yml +0 -0
  202. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/editor_whole.yml +0 -0
  203. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/help.yml +0 -0
  204. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/patch.yml +0 -0
  205. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/single_wholefile_func.yml +0 -0
  206. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/udiff.yml +0 -0
  207. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/udiff_simple.yml +0 -0
  208. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/utils/__init__.py +0 -0
  209. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/utils/registry.py +0 -0
  210. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/utils/system.py +0 -0
  211. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/wholefile.yml +0 -0
  212. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/prompts/wholefile_func.yml +0 -0
  213. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  214. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  215. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  216. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  217. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  218. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  219. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  220. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  221. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  222. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  223. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  224. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  225. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  226. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  227. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  228. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  229. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  230. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  231. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  232. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  233. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  234. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  235. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  236. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  237. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  238. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  239. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  240. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  241. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  242. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  243. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  244. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/README.md +0 -0
  245. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  246. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  247. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  248. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  249. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  250. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  251. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  252. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  253. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  254. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  255. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  256. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  257. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  258. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  259. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  260. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  261. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  262. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  263. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  264. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  265. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  266. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  267. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  268. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  269. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  270. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  271. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/reasoning_tags.py +0 -0
  272. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/repo.py +0 -0
  273. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/repomap.py +0 -0
  274. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/report.py +0 -0
  275. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/resources/__init__.py +0 -0
  276. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/resources/model-metadata.json +0 -0
  277. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/resources/model-settings.yml +0 -0
  278. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/resources/providers.json +0 -0
  279. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/run_cmd.py +0 -0
  280. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/scrape.py +0 -0
  281. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/sendchat.py +0 -0
  282. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/special.py +0 -0
  283. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/__init__.py +0 -0
  284. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/command.py +0 -0
  285. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/command_interactive.py +0 -0
  286. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/context_manager.py +0 -0
  287. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/delete_block.py +0 -0
  288. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/delete_line.py +0 -0
  289. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/delete_lines.py +0 -0
  290. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/extract_lines.py +0 -0
  291. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/finished.py +0 -0
  292. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_branch.py +0 -0
  293. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_diff.py +0 -0
  294. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_log.py +0 -0
  295. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_remote.py +0 -0
  296. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_show.py +0 -0
  297. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/git_status.py +0 -0
  298. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/grep.py +0 -0
  299. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/indent_lines.py +0 -0
  300. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/insert_block.py +0 -0
  301. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/list_changes.py +0 -0
  302. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/load_skill.py +0 -0
  303. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/ls.py +0 -0
  304. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/remove_skill.py +0 -0
  305. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/replace_text.py +0 -0
  306. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/show_numbered_context.py +0 -0
  307. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/thinking.py +0 -0
  308. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/undo_change.py +0 -0
  309. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/update_todo_list.py +0 -0
  310. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/utils/base_tool.py +0 -0
  311. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/utils/helpers.py +0 -0
  312. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/utils/output.py +0 -0
  313. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/utils/registry.py +0 -0
  314. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/view_files_matching.py +0 -0
  315. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tools/view_files_with_symbol.py +0 -0
  316. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/__init__.py +0 -0
  317. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/io.py +0 -0
  318. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/completion_bar.py +0 -0
  319. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/file_list.py +0 -0
  320. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/input_area.py +0 -0
  321. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/key_hints.py +0 -0
  322. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/output.py +0 -0
  323. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/tui/widgets/status_bar.py +0 -0
  324. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/urls.py +0 -0
  325. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/utils.py +0 -0
  326. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/versioncheck.py +0 -0
  327. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/voice.py +0 -0
  328. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/waiting.py +0 -0
  329. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/watch.py +0 -0
  330. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/watch_prompts.py +0 -0
  331. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/Gemfile +0 -0
  332. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/blame.md +0 -0
  333. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/get-started.md +0 -0
  334. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/help-tip.md +0 -0
  335. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/help.md +0 -0
  336. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/install.md +0 -0
  337. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/keys.md +0 -0
  338. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/model-warnings.md +0 -0
  339. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/multi-line.md +0 -0
  340. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/python-m-aider.md +0 -0
  341. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/recording.css +0 -0
  342. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/recording.md +0 -0
  343. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/replit-pipx.md +0 -0
  344. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_includes/works-best.md +0 -0
  345. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/_sass/custom/custom.scss +0 -0
  346. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/adv-model-settings.md +0 -0
  347. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/agent-mode.md +0 -0
  348. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/aider_conf.md +0 -0
  349. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/api-keys.md +0 -0
  350. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/custom-commands.md +0 -0
  351. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  352. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/dotenv.md +0 -0
  353. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/editor.md +0 -0
  354. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/mcp.md +0 -0
  355. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/model-aliases.md +0 -0
  356. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/options.md +0 -0
  357. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/reasoning.md +0 -0
  358. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/skills.md +0 -0
  359. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config/tui.md +0 -0
  360. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/config.md +0 -0
  361. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/faq.md +0 -0
  362. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/git.md +0 -0
  363. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/index.md +0 -0
  364. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/install/codespaces.md +0 -0
  365. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/install/docker.md +0 -0
  366. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/install/optional.md +0 -0
  367. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/install/replit.md +0 -0
  368. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/install.md +0 -0
  369. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/languages.md +0 -0
  370. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  371. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/legal/privacy.md +0 -0
  372. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/anthropic.md +0 -0
  373. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/azure.md +0 -0
  374. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/bedrock.md +0 -0
  375. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/cohere.md +0 -0
  376. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/deepseek.md +0 -0
  377. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/gemini.md +0 -0
  378. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/github.md +0 -0
  379. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/groq.md +0 -0
  380. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/lm-studio.md +0 -0
  381. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/ollama.md +0 -0
  382. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/openai-compat.md +0 -0
  383. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/openai.md +0 -0
  384. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/openrouter.md +0 -0
  385. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/other.md +0 -0
  386. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/vertex.md +0 -0
  387. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/warnings.md +0 -0
  388. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms/xai.md +0 -0
  389. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/llms.md +0 -0
  390. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/more/analytics.md +0 -0
  391. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/more/edit-formats.md +0 -0
  392. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/more/infinite-output.md +0 -0
  393. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/more-info.md +0 -0
  394. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
  395. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
  396. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/recordings/index.md +0 -0
  397. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
  398. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
  399. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/repomap.md +0 -0
  400. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/scripting.md +0 -0
  401. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/sessions.md +0 -0
  402. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/aider-not-found.md +0 -0
  403. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  404. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/imports.md +0 -0
  405. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  406. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/support.md +0 -0
  407. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  408. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  409. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/troubleshooting.md +0 -0
  410. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/browser.md +0 -0
  411. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/caching.md +0 -0
  412. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/commands.md +0 -0
  413. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/conventions.md +0 -0
  414. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/copypaste.md +0 -0
  415. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/images-urls.md +0 -0
  416. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/lint-test.md +0 -0
  417. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/modes.md +0 -0
  418. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/not-code.md +0 -0
  419. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/notifications.md +0 -0
  420. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/tips.md +0 -0
  421. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/tutorials.md +0 -0
  422. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/voice.md +0 -0
  423. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage/watch.md +0 -0
  424. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/docs/usage.md +0 -0
  425. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli/website/share/index.md +0 -0
  426. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/dependency_links.txt +0 -0
  427. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/entry_points.txt +0 -0
  428. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/requires.txt +0 -0
  429. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/cecli_dev.egg-info/top_level.txt +0 -0
  430. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/docker/Dockerfile +0 -0
  431. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  432. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/pyproject.toml +0 -0
  433. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/pytest.ini +0 -0
  434. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/common-constraints.txt +0 -0
  435. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-dev.in +0 -0
  436. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-dev.txt +0 -0
  437. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-help.in +0 -0
  438. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-help.txt +0 -0
  439. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-playwright.in +0 -0
  440. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements-playwright.txt +0 -0
  441. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/requirements.in +0 -0
  442. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements/tree-sitter.in +0 -0
  443. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/requirements.txt +0 -0
  444. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/30k-image.py +0 -0
  445. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/Dockerfile.jekyll +0 -0
  446. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/__init__.py +0 -0
  447. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/blame.py +0 -0
  448. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/clean_metadata.py +0 -0
  449. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/cost_analyzer.py +0 -0
  450. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/dl_icons.py +0 -0
  451. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/filter-chat-mode.js +0 -0
  452. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/generate_providers.py +0 -0
  453. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/get_contributor_list.js +0 -0
  454. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/history_prompts.py +0 -0
  455. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/homepage.py +0 -0
  456. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/issues.py +0 -0
  457. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/jekyll_build.sh +0 -0
  458. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/jekyll_run.sh +0 -0
  459. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/logo_svg.py +0 -0
  460. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/pip-compile.sh +0 -0
  461. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/recording_audio.py +0 -0
  462. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/redact-cast.py +0 -0
  463. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/rename_to_cecli.py +0 -0
  464. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/tmux_record.sh +0 -0
  465. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/tsl_pack_langs.py +0 -0
  466. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/update-blame.sh +0 -0
  467. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/update-docs.sh +0 -0
  468. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/update-history.py +0 -0
  469. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/versionbump.py +0 -0
  470. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/scripts/yank-old-versions.py +0 -0
  471. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/setup.cfg +0 -0
  472. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/shim.pyproject.toml +0 -0
  473. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/__init__.py +0 -0
  474. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/__init__.py +0 -0
  475. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_aws_credentials.py +0 -0
  476. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_background_commands.py +0 -0
  477. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_coder.py +0 -0
  478. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_commands.py +0 -0
  479. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_custom_commands.py +0 -0
  480. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_deprecated.py +0 -0
  481. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_editblock.py +0 -0
  482. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_editor.py +0 -0
  483. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_exceptions.py +0 -0
  484. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_find_or_blocks.py +0 -0
  485. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_history.py +0 -0
  486. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_io.py +0 -0
  487. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_linter.py +0 -0
  488. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_main.py +0 -0
  489. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_model_info_manager.py +0 -0
  490. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_model_provider_manager.py +0 -0
  491. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_models.py +0 -0
  492. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_onboarding.py +0 -0
  493. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_plugin_manager.py +0 -0
  494. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_prompts.py +0 -0
  495. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_reasoning.py +0 -0
  496. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_repo.py +0 -0
  497. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_repomap.py +0 -0
  498. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_run_cmd.py +0 -0
  499. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_sanity_check_repo.py +0 -0
  500. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_scripting.py +0 -0
  501. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_sendchat.py +0 -0
  502. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_sessions.py +0 -0
  503. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_skills.py +0 -0
  504. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_special.py +0 -0
  505. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_ssl_verification.py +0 -0
  506. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_udiff.py +0 -0
  507. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_urls.py +0 -0
  508. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_voice.py +0 -0
  509. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_watch.py +0 -0
  510. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/basic/test_wholefile.py +0 -0
  511. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/coders/test_copypaste_coder.py +0 -0
  512. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/conftest.py +0 -0
  513. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  514. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/chat-history.md +0 -0
  515. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/arduino/test.ino +0 -0
  516. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/c/test.c +0 -0
  517. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/chatito/test.chatito +0 -0
  518. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/clojure/test.clj +0 -0
  519. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  520. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/cpp/test.cpp +0 -0
  521. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/csharp/test.cs +0 -0
  522. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/d/test.d +0 -0
  523. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/dart/test.dart +0 -0
  524. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/elisp/test.el +0 -0
  525. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/elixir/test.ex +0 -0
  526. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/elm/test.elm +0 -0
  527. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/gleam/test.gleam +0 -0
  528. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/go/test.go +0 -0
  529. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/haskell/test.hs +0 -0
  530. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/hcl/test.tf +0 -0
  531. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/java/test.java +0 -0
  532. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/javascript/test.js +0 -0
  533. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/kotlin/test.kt +0 -0
  534. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/lua/test.lua +0 -0
  535. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/matlab/test.m +0 -0
  536. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/ocaml/test.ml +0 -0
  537. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  538. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/php/test.php +0 -0
  539. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/pony/test.pony +0 -0
  540. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/properties/test.properties +0 -0
  541. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/python/test.py +0 -0
  542. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/ql/test.ql +0 -0
  543. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/r/test.r +0 -0
  544. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/racket/test.rkt +0 -0
  545. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/ruby/test.rb +0 -0
  546. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/rust/test.rs +0 -0
  547. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/scala/test.scala +0 -0
  548. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/solidity/test.sol +0 -0
  549. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/swift/test.swift +0 -0
  550. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/tsx/test.tsx +0 -0
  551. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/typescript/test.ts +0 -0
  552. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/udev/test.rules +0 -0
  553. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/languages/zig/test.zig +0 -0
  554. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/sample-code-base/sample.js +0 -0
  555. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/sample-code-base/sample.py +0 -0
  556. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  557. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/watch.js +0 -0
  558. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/watch.lisp +0 -0
  559. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/watch.py +0 -0
  560. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/fixtures/watch_question.js +0 -0
  561. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/help/test_help.py +0 -0
  562. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/mcp/__init__.py +0 -0
  563. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/mcp/test_manager.py +0 -0
  564. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/scrape/test_playwright_disable.py +0 -0
  565. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/scrape/test_scrape.py +0 -0
  566. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/test_conversation_integration.py +0 -0
  567. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/test_conversation_system.py +0 -0
  568. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/tools/test_git_branch.py +0 -0
  569. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/tools/test_git_diff.py +0 -0
  570. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/tools/test_grep.py +0 -0
  571. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/tools/test_insert_block.py +0 -0
  572. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/tests/tools/test_registry.py +0 -0
  573. {cecli_dev-0.96.3 → cecli_dev-0.96.5}/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.3
3
+ Version: 0.96.5
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
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.96.3.dev"
3
+ __version__ = "0.96.5.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.3'
32
- __version_tuple__ = version_tuple = (0, 96, 3)
31
+ __version__ = version = '0.96.5'
32
+ __version_tuple__ = version_tuple = (0, 96, 5)
33
33
 
34
- __commit_id__ = commit_id = 'gc5417d2f9'
34
+ __commit_id__ = commit_id = 'g495cbfd20'
@@ -724,6 +724,7 @@ class AgentCoder(Coder):
724
724
  ) = await self._process_tool_commands(content)
725
725
  if self.agent_finished:
726
726
  self.tool_usage_history = []
727
+ self.reflected_message = None
727
728
  if self.files_edited_by_tools:
728
729
  _ = await self.auto_commit(self.files_edited_by_tools)
729
730
  return False
@@ -42,68 +42,54 @@ class ArchitectCoder(AskCoder):
42
42
  kwargs["cache_prompts"] = False
43
43
  kwargs["num_cache_warming_pings"] = 0
44
44
  kwargs["summarize_from_coder"] = False
45
+ kwargs["done_messages"] = []
46
+ kwargs["cur_messages"] = []
45
47
 
46
48
  new_kwargs = dict(io=self.io, from_coder=self)
47
49
  new_kwargs.update(kwargs)
48
50
 
49
51
  # Save current conversation state
50
- original_all_messages = ConversationManager.get_messages()
51
52
  original_coder = self
52
53
 
53
54
  editor_coder = await Coder.create(**new_kwargs)
54
55
 
55
56
  # Re-initialize ConversationManager with editor coder
56
- ConversationManager.initialize(editor_coder, reset=True, reformat=True)
57
+ ConversationManager.initialize(
58
+ editor_coder, reset=True, reformat=True, preserve_tags=[MessageTag.DONE, MessageTag.CUR]
59
+ )
57
60
 
58
61
  if self.verbose:
59
62
  editor_coder.show_announcements()
60
63
 
64
+ postamble = """
65
+ The above changes are proposed changes.
66
+ You must repeat SEARCH/REPLACE blocks in order to apply edits.
67
+ Shell commands must also be duplicated in order to run them.
68
+ """
69
+
70
+ content = f"Please implement all requested changes from:\n{content}\n{postamble}"
71
+
61
72
  try:
62
73
  await editor_coder.generate(user_message=content, preproc=False)
63
74
 
64
- # Save editor's ALL messages
65
- editor_all_messages = ConversationManager.get_messages()
66
-
67
75
  # Clear manager and restore original state
68
- ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
69
-
70
- # Restore original messages with all metadata
71
- for msg in original_all_messages:
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
- )
80
-
81
- # Append editor's DONE and CUR messages (but not other tags like SYSTEM)
82
- for msg in editor_all_messages:
83
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
84
- ConversationManager.add_message(
85
- message_dict=msg.message_dict,
86
- tag=MessageTag(msg.tag),
87
- priority=msg.priority,
88
- mark_for_delete=msg.mark_for_delete,
89
- force=True,
90
- )
76
+ ConversationManager.initialize(
77
+ original_coder or self,
78
+ reset=True,
79
+ reformat=True,
80
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
81
+ )
91
82
 
92
83
  self.total_cost = editor_coder.total_cost
93
84
  self.coder_commit_hashes = editor_coder.coder_commit_hashes
94
85
  except Exception as e:
95
86
  self.io.tool_error(e)
96
87
  # Restore original state on error
97
- ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
98
-
99
- for msg in original_all_messages:
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
- )
88
+ ConversationManager.initialize(
89
+ original_coder or self,
90
+ reset=True,
91
+ reformat=True,
92
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
93
+ )
108
94
 
109
95
  raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")
@@ -1584,6 +1584,7 @@ class Coder:
1584
1584
  pass
1585
1585
 
1586
1586
  if not self.reflected_message:
1587
+ await self.auto_save_session(force=True)
1587
1588
  break
1588
1589
 
1589
1590
  if self.num_reflections >= self.max_reflections:
@@ -1603,6 +1604,8 @@ class Coder:
1603
1604
  if self.enable_context_compaction:
1604
1605
  await self.compact_context_if_needed()
1605
1606
 
1607
+ await self.auto_save_session(force=True)
1608
+
1606
1609
  async def check_and_open_urls(self, exc, friendly_msg=None):
1607
1610
  """Check exception for URLs, offer to open in a browser, with user-friendly error msgs."""
1608
1611
  text = str(exc)
@@ -2096,7 +2099,7 @@ class Coder:
2096
2099
  ConversationManager.add_message(
2097
2100
  message_dict=dict(role="user", content=inp),
2098
2101
  tag=MessageTag.CUR,
2099
- hash_key=("user_message", inp, str(time.time_ns())),
2102
+ hash_key=("user_message", inp, str(time.monotonic_ns())),
2100
2103
  )
2101
2104
 
2102
2105
  loop = asyncio.get_running_loop()
@@ -3776,7 +3779,7 @@ class Coder:
3776
3779
  def apply_edits_dry_run(self, edits):
3777
3780
  return edits
3778
3781
 
3779
- async def auto_save_session(self):
3782
+ async def auto_save_session(self, force=False):
3780
3783
  """Automatically save the current session to {auto-save-session-name}.json."""
3781
3784
  if not getattr(self.args, "auto_save", False):
3782
3785
  return
@@ -3789,11 +3792,17 @@ class Coder:
3789
3792
  self._autosave_future = None
3790
3793
 
3791
3794
  if self._autosave_future and not self._autosave_future.done():
3792
- return
3795
+ if force:
3796
+ try:
3797
+ await self._autosave_future
3798
+ except Exception:
3799
+ pass
3800
+ else:
3801
+ return
3793
3802
 
3794
3803
  # Throttle autosave to run at most once every 15 seconds
3795
3804
  current_time = time.time()
3796
- if current_time - self._last_autosave_time >= 15.0:
3805
+ if current_time - self._last_autosave_time >= 15.0 or force:
3797
3806
  try:
3798
3807
  self._last_autosave_time = current_time
3799
3808
  session_manager = SessionManager(self, self.io)
@@ -52,18 +52,24 @@ class EditorModelCommand(BaseCommand):
52
52
  kwargs["total_cost"] = coder.total_cost
53
53
  kwargs["num_cache_warming_pings"] = 0
54
54
  kwargs["summarize_from_coder"] = False
55
+ kwargs["done_messages"] = []
56
+ kwargs["cur_messages"] = []
55
57
 
56
58
  new_kwargs = dict(io=io, from_coder=coder)
57
59
  new_kwargs.update(kwargs)
58
60
 
59
61
  # Save current conversation state
60
- original_all_messages = ConversationManager.get_messages()
61
62
  original_coder = coder
62
63
 
63
64
  temp_coder = await Coder.create(**new_kwargs)
64
65
 
65
66
  # Re-initialize ConversationManager with temp coder
66
- ConversationManager.initialize(temp_coder, reset=True, reformat=True)
67
+ ConversationManager.initialize(
68
+ temp_coder,
69
+ reset=True,
70
+ reformat=True,
71
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72
+ )
67
73
 
68
74
  verbose = kwargs.get("verbose", False)
69
75
  if verbose:
@@ -74,33 +80,13 @@ class EditorModelCommand(BaseCommand):
74
80
  coder.total_cost = temp_coder.total_cost
75
81
  coder.coder_commit_hashes = temp_coder.coder_commit_hashes
76
82
 
77
- # Save temp coder's ALL messages
78
- temp_all_messages = ConversationManager.get_messages()
79
-
80
83
  # Clear manager and restore original state
81
- ConversationManager.initialize(original_coder, reset=True, reformat=True)
82
-
83
- # Restore original messages with all metadata
84
- for msg in original_all_messages:
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
- )
93
-
94
- # Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
95
- for msg in temp_all_messages:
96
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
97
- ConversationManager.add_message(
98
- message_dict=msg.message_dict,
99
- tag=MessageTag(msg.tag),
100
- priority=msg.priority,
101
- mark_for_delete=msg.mark_for_delete,
102
- force=True,
103
- )
84
+ ConversationManager.initialize(
85
+ original_coder,
86
+ reset=True,
87
+ reformat=True,
88
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89
+ )
104
90
 
105
91
  # Restore the original model configuration
106
92
  from cecli.commands import SwitchCoderSignal
@@ -57,18 +57,24 @@ class ModelCommand(BaseCommand):
57
57
  kwargs["total_cost"] = coder.total_cost
58
58
  kwargs["num_cache_warming_pings"] = 0
59
59
  kwargs["summarize_from_coder"] = False
60
+ kwargs["done_messages"] = []
61
+ kwargs["cur_messages"] = []
60
62
 
61
63
  new_kwargs = dict(io=io, from_coder=coder)
62
64
  new_kwargs.update(kwargs)
63
65
 
64
66
  # Save current conversation state
65
- original_all_messages = ConversationManager.get_messages()
66
67
  original_coder = coder
67
68
 
68
69
  temp_coder = await Coder.create(**new_kwargs)
69
70
 
70
71
  # Re-initialize ConversationManager with temp coder
71
- ConversationManager.initialize(temp_coder, reset=True, reformat=True)
72
+ ConversationManager.initialize(
73
+ temp_coder,
74
+ reset=True,
75
+ reformat=True,
76
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
77
+ )
72
78
 
73
79
  verbose = kwargs.get("verbose", False)
74
80
  if verbose:
@@ -79,33 +85,13 @@ class ModelCommand(BaseCommand):
79
85
  coder.total_cost = temp_coder.total_cost
80
86
  coder.coder_commit_hashes = temp_coder.coder_commit_hashes
81
87
 
82
- # Save temp coder's ALL messages
83
- temp_all_messages = ConversationManager.get_messages()
84
-
85
88
  # Clear manager and restore original state
86
- ConversationManager.initialize(original_coder, reset=True, reformat=True)
87
-
88
- # Restore original messages with all metadata
89
- for msg in original_all_messages:
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
- )
98
-
99
- # Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
100
- for msg in temp_all_messages:
101
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
102
- ConversationManager.add_message(
103
- message_dict=msg.message_dict,
104
- tag=MessageTag(msg.tag),
105
- priority=msg.priority,
106
- mark_for_delete=msg.mark_for_delete,
107
- force=True,
108
- )
89
+ ConversationManager.initialize(
90
+ original_coder,
91
+ reset=True,
92
+ reformat=True,
93
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
94
+ )
109
95
 
110
96
  # Restore the original model configuration
111
97
  from cecli.commands import SwitchCoderSignal
@@ -142,47 +142,30 @@ class BaseCommand(ABC, metaclass=CommandMeta):
142
142
  "num_cache_warming_pings": 0,
143
143
  "coder_commit_hashes": coder.coder_commit_hashes,
144
144
  "args": coder.args,
145
+ "done_messages": [],
146
+ "cur_messages": [],
145
147
  }
146
148
 
147
149
  # Save current conversation state
148
- original_all_messages = ConversationManager.get_messages()
149
150
  original_coder = coder
150
151
 
151
152
  new_coder = await Coder.create(**kwargs)
152
153
 
153
154
  # Re-initialize ConversationManager with new coder
154
- ConversationManager.initialize(new_coder, reset=True, reformat=True)
155
+ ConversationManager.initialize(
156
+ new_coder, reset=True, reformat=True, preserve_tags=[MessageTag.DONE, MessageTag.CUR]
157
+ )
155
158
 
156
159
  await new_coder.generate(user_message=user_msg, preproc=False)
157
160
  coder.coder_commit_hashes = new_coder.coder_commit_hashes
158
161
 
159
- # Save new coder's ALL messages
160
- new_all_messages = ConversationManager.get_messages()
161
-
162
162
  # Clear manager and restore original state
163
- ConversationManager.initialize(original_coder, reset=True, reformat=True)
164
-
165
- # Restore original messages with all metadata
166
- for msg in original_all_messages:
167
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
168
- ConversationManager.add_message(
169
- message_dict=msg.message_dict,
170
- tag=MessageTag(msg.tag),
171
- priority=msg.priority,
172
- mark_for_delete=msg.mark_for_delete,
173
- force=True,
174
- )
175
-
176
- # Append new coder's DONE and CUR messages (but not other tags like SYSTEM)
177
- for msg in new_all_messages:
178
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
179
- ConversationManager.add_message(
180
- message_dict=msg.message_dict,
181
- tag=MessageTag(msg.tag),
182
- priority=msg.priority,
183
- mark_for_delete=msg.mark_for_delete,
184
- force=True,
185
- )
163
+ ConversationManager.initialize(
164
+ original_coder,
165
+ reset=True,
166
+ reformat=True,
167
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
168
+ )
186
169
 
187
170
  from cecli.commands import SwitchCoderSignal
188
171
 
@@ -52,18 +52,24 @@ class WeakModelCommand(BaseCommand):
52
52
  kwargs["total_cost"] = coder.total_cost
53
53
  kwargs["num_cache_warming_pings"] = 0
54
54
  kwargs["summarize_from_coder"] = False
55
+ kwargs["done_messages"] = []
56
+ kwargs["cur_messages"] = []
55
57
 
56
58
  new_kwargs = dict(io=io, from_coder=coder)
57
59
  new_kwargs.update(kwargs)
58
60
 
59
61
  # Save current conversation state
60
- original_all_messages = ConversationManager.get_messages()
61
62
  original_coder = coder
62
63
 
63
64
  temp_coder = await Coder.create(**new_kwargs)
64
65
 
65
66
  # Re-initialize ConversationManager with temp coder
66
- ConversationManager.initialize(temp_coder, reset=True, reformat=True)
67
+ ConversationManager.initialize(
68
+ temp_coder,
69
+ reset=True,
70
+ reformat=True,
71
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72
+ )
67
73
 
68
74
  verbose = kwargs.get("verbose", False)
69
75
  if verbose:
@@ -74,33 +80,13 @@ class WeakModelCommand(BaseCommand):
74
80
  coder.total_cost = temp_coder.total_cost
75
81
  coder.coder_commit_hashes = temp_coder.coder_commit_hashes
76
82
 
77
- # Save temp coder's ALL messages
78
- temp_all_messages = ConversationManager.get_messages()
79
-
80
83
  # Clear manager and restore original state
81
- ConversationManager.initialize(original_coder, reset=True, reformat=True)
82
-
83
- # Restore original messages with all metadata
84
- for msg in original_all_messages:
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
- )
93
-
94
- # Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
95
- for msg in temp_all_messages:
96
- if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
97
- ConversationManager.add_message(
98
- message_dict=msg.message_dict,
99
- tag=MessageTag(msg.tag),
100
- priority=msg.priority,
101
- mark_for_delete=msg.mark_for_delete,
102
- force=True,
103
- )
84
+ ConversationManager.initialize(
85
+ original_coder,
86
+ reset=True,
87
+ reformat=True,
88
+ preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89
+ )
104
90
 
105
91
  # Restore the original model configuration
106
92
  from cecli.commands import SwitchCoderSignal
@@ -26,7 +26,7 @@ class BaseMessage:
26
26
  message_dict: Dict[str, Any]
27
27
  tag: str
28
28
  priority: int = field(default=0)
29
- timestamp: int = field(default_factory=lambda: time.time_ns())
29
+ timestamp: int = field(default_factory=lambda: time.monotonic_ns())
30
30
  mark_for_delete: Optional[int] = field(default=None)
31
31
  hash_key: Optional[Tuple[str, ...]] = field(default=None)
32
32
  message_id: str = field(init=False)
@@ -136,6 +136,6 @@ class BaseMessage:
136
136
  content_preview = str(self.message_dict.get("content", ""))[:50]
137
137
  return (
138
138
  f"BaseMessage(id={self.message_id[:8]}..., "
139
- f"tag={self.tag}, priority={self.priority}, "
140
- f"role={role}, content='{content_preview}...')"
139
+ f"tag={self.tag}, priority={self.priority}, timestamp={self.timestamp}, "
140
+ f"role={role}, content='{content_preview}...', )"
141
141
  )
@@ -33,7 +33,13 @@ class ConversationManager:
33
33
  _ALL_MESSAGES_CACHE_KEY = "__all__" # Special key for caching all messages (tag=None)
34
34
 
35
35
  @classmethod
36
- def initialize(cls, coder, reset: bool = False, reformat: bool = False) -> None:
36
+ def initialize(
37
+ cls,
38
+ coder,
39
+ reset: bool = False,
40
+ reformat: bool = False,
41
+ preserve_tags: Optional[List[str]] = None,
42
+ ) -> None:
37
43
  """
38
44
  Set up singleton with weak reference to coder.
39
45
 
@@ -42,17 +48,49 @@ class ConversationManager:
42
48
  reset: Whether to re-initialize the conversation history itself
43
49
  reformat: Whether to format chat history
44
50
  (useful for initialization outside of coder class)
51
+ preserve_tags: Optional list of tag strings to preserve during reset.
52
+ If provided, messages with these tags will be preserved
53
+ when reset=True and re-added AFTER the reformat block.
45
54
  """
46
55
  cls._coder_ref = weakref.ref(coder)
47
56
  cls._initialized = True
48
57
 
49
- if reset:
58
+ preserved_messages = []
59
+ if reset and preserve_tags:
60
+ # New approach: loop over every single tag type and only clear tags NOT in preserve_tags
61
+ # Get all MessageTag values
62
+ all_tag_types = list(MessageTag)
63
+
64
+ # Clear tags that are NOT in preserve_tags
65
+ for tag_type in all_tag_types:
66
+ if tag_type.value not in preserve_tags:
67
+ cls.clear_tag(tag_type)
68
+
69
+ # Get all remaining messages left over after preservation
70
+ preserved_messages = cls.get_messages()
71
+ elif reset:
72
+ # Original behavior: clear everything
50
73
  cls.reset()
51
74
 
52
75
  if reformat:
53
76
  if hasattr(coder, "format_chat_chunks"):
54
77
  coder.format_chat_chunks()
55
78
 
79
+ # If preserve_tags is truthy, re-add preserved messages with updated timestamps after reformat block
80
+ if preserve_tags and preserved_messages:
81
+ for tag_type in preserve_tags:
82
+ cls.clear_tag(tag_type)
83
+
84
+ for msg in preserved_messages:
85
+ cls.add_message(
86
+ message_dict=msg.message_dict,
87
+ tag=MessageTag(msg.tag),
88
+ priority=msg.priority,
89
+ timestamp=time.monotonic_ns(), # Updated timestamp
90
+ mark_for_delete=msg.mark_for_delete,
91
+ force=True,
92
+ )
93
+
56
94
  # Enable debug mode if coder has verbose attribute and it's True
57
95
  if hasattr(coder, "verbose") and coder.verbose:
58
96
  cls._debug_enabled = True
@@ -110,7 +148,7 @@ class ConversationManager:
110
148
  priority = get_default_priority(tag)
111
149
 
112
150
  if timestamp is None:
113
- timestamp = time.time_ns() + get_default_timestamp_offset(tag)
151
+ timestamp = time.monotonic_ns() + get_default_timestamp_offset(tag)
114
152
 
115
153
  # Create message instance
116
154
  message = BaseMessage(
@@ -152,7 +190,7 @@ class ConversationManager:
152
190
  @classmethod
153
191
  def get_messages(cls) -> List[BaseMessage]:
154
192
  """
155
- Returns messages sorted by priority (lowest first), then timestamp (earliest first).
193
+ Returns messages sorted by priority (lowest first), then raw order in list.
156
194
 
157
195
  Returns:
158
196
  List of BaseMessage instances in sorted order
@@ -213,22 +213,48 @@ class AutoCompleter(Completer):
213
213
 
214
214
  def get_command_completions(self, document, complete_event, text, words):
215
215
  if len(words) == 1 and not text[-1].isspace():
216
+ # Handle command completion (e.g., typing "/ad" should complete to "/add")
216
217
  partial = words[0].lower()
217
- candidates = [cmd for cmd in self.command_names if cmd.startswith(partial)]
218
+ # Strip leading '/' if present for comparison with command names
219
+ if partial.startswith("/"):
220
+ partial = partial[1:]
221
+ # Compare with command names without leading '/'
222
+ candidates = [cmd for cmd in self.command_names if cmd[1:].startswith(partial)]
218
223
  for candidate in sorted(candidates):
224
+ # Add back the leading '/' for the completion
219
225
  yield Completion(candidate, start_position=-len(words[-1]))
220
226
  return
221
227
 
222
- if len(words) <= 1 or text[-1].isspace():
223
- return
228
+ # Handle command followed by space: trigger auto-completion with empty partial
229
+ if text[-1].isspace():
230
+ # We have a command followed by space, trigger auto-completion with empty string
231
+ if len(words) == 1:
232
+ # Command with no arguments yet, just a trailing space
233
+ partial = ""
234
+ # We need to get the command name without the trailing space
235
+ # The command is words[0] but might have leading '/'
236
+ cmd_text = words[0]
237
+ else:
238
+ # Command with arguments and trailing space
239
+ partial = ""
240
+ cmd_text = text.rstrip() # Remove trailing space for matching
241
+ else:
242
+ # No trailing space
243
+ if len(words) <= 1:
244
+ return
245
+ partial = words[-1].lower()
246
+ cmd_text = text
224
247
 
225
- cmd = words[0]
226
- partial = words[-1].lower()
248
+ # Pass the text (without trailing space if present) to matching_commands
249
+ matches, matched_cmd, _ = self.commands.matching_commands(cmd_text.rstrip())
250
+ if not matches:
251
+ return
227
252
 
228
- matches, _, _ = self.commands.matching_commands(cmd)
229
253
  if len(matches) == 1:
230
254
  cmd = matches[0]
231
- elif cmd not in matches:
255
+ elif matched_cmd in matches:
256
+ cmd = matched_cmd
257
+ else:
232
258
  return
233
259
 
234
260
  raw_completer = self.commands.get_raw_completions(cmd)
@@ -240,8 +266,15 @@ class AutoCompleter(Completer):
240
266
 
241
267
  if candidates is None:
242
268
  return
269
+
270
+ candidates = [word for word in candidates if partial in word.lower()]
271
+
243
272
  for candidate in sorted(candidates):
244
- yield Completion(candidate, start_position=-len(words[-1]))
273
+ # Calculate start position based on partial, not words[-1]
274
+ # When partial is empty (trailing space), start_position should be 0
275
+ # When partial is not empty, replace that many characters
276
+ start_position = -len(partial) if partial else 0
277
+ yield Completion(candidate, start_position=start_position)
245
278
 
246
279
  def get_completions(self, document, complete_event):
247
280
  self.tokenize()
@@ -251,8 +284,9 @@ class AutoCompleter(Completer):
251
284
  if not words:
252
285
  return
253
286
 
254
- if text and text[-1].isspace():
255
- # don't keep completing after a space
287
+ if text and text[-1].isspace() and not text.startswith("/"):
288
+ # don't keep completing after a space for non-commands
289
+ # For commands, we want to allow completion with empty string partial
256
290
  return
257
291
 
258
292
  if text[0] == "/":
@@ -1202,6 +1202,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
1202
1202
  return await graceful_exit(coder)
1203
1203
  except SwitchCoderSignal as switch:
1204
1204
  coder.ok_to_warm_cache = False
1205
+ await coder.auto_save_session(force=True)
1205
1206
 
1206
1207
  if hasattr(switch, "placeholder") and switch.placeholder is not None:
1207
1208
  io.placeholder = switch.placeholder
@@ -1229,6 +1230,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
1229
1230
 
1230
1231
  except SystemExit:
1231
1232
  sys.settrace(None)
1233
+ await coder.auto_save_session(force=True)
1232
1234
  return await graceful_exit(coder)
1233
1235
 
1234
1236