cecli-dev 0.99.10__tar.gz → 0.99.11__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 (626) hide show
  1. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/_version.py +3 -3
  3. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/agent_coder.py +145 -145
  4. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/base_coder.py +2 -0
  5. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/hashline_coder.py +2 -2
  6. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/drop.py +4 -0
  7. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/reset.py +2 -0
  8. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/files.py +87 -13
  9. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/integration.py +16 -44
  10. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/hashline.py +18 -18
  11. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/hashpos/hashpos.py +2 -1
  12. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/io.py +35 -10
  13. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/agent.yml +15 -15
  14. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/resources/model-metadata.json +1045 -185
  15. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/resources/model-settings.yml +777 -43
  16. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/sessions.py +19 -6
  17. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/context_manager.py +8 -0
  18. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/edit_text.py +10 -10
  19. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/finished.py +6 -2
  20. cecli_dev-0.99.11/cecli/tools/read_range.py +620 -0
  21. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/app.py +5 -1
  22. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/output.py +4 -3
  23. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/PKG-INFO +1 -1
  24. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/SOURCES.txt +1 -0
  25. cecli_dev-0.99.11/scripts/cost_calculator.py +533 -0
  26. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_hashline.py +4 -4
  27. cecli_dev-0.99.11/tests/basic/test_sessions.py +334 -0
  28. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_get_lines.py +4 -4
  29. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_insert_block.py +1 -1
  30. cecli_dev-0.99.10/cecli/tools/read_range.py +0 -357
  31. cecli_dev-0.99.10/tests/basic/test_sessions.py +0 -309
  32. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.dockerignore +0 -0
  33. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.flake8 +0 -0
  34. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.gitattributes +0 -0
  35. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  36. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/check_pypi_version.yml +0 -0
  37. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/docker-build-test.yml +0 -0
  38. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/docker-release.yml +0 -0
  39. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/issues.yml +0 -0
  40. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/pages.yml +0 -0
  41. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/pre-commit.yml +0 -0
  42. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/release.yml +0 -0
  43. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/ubuntu-tests.yml +0 -0
  44. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/windows-tests.yml +0 -0
  45. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.github/workflows/windows_check_pypi_version.yml +0 -0
  46. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.gitignore +0 -0
  47. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/.pre-commit-config.yaml +0 -0
  48. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/CHANGELOG.md +0 -0
  49. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/CNAME +0 -0
  50. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/CONTRIBUTING.md +0 -0
  51. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/HISTORY.md +0 -0
  52. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/LICENSE.txt +0 -0
  53. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/MANIFEST.in +0 -0
  54. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/README.md +0 -0
  55. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/Dockerfile +0 -0
  56. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/README.md +0 -0
  57. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/__init__.py +0 -0
  58. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/benchmark.py +0 -0
  59. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/benchmark_classic.py +0 -0
  60. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/clone-exercism.sh +0 -0
  61. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/cpp-test.sh +0 -0
  62. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/docker.sh +0 -0
  63. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/docker_build.sh +0 -0
  64. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/install-docker-ubuntu.sh +0 -0
  65. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/npm-test.sh +0 -0
  66. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/over_time.py +0 -0
  67. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/plot.sh +0 -0
  68. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/plots.py +0 -0
  69. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/problem_stats.py +0 -0
  70. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/prompts.py +0 -0
  71. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/refactor_tools.py +0 -0
  72. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/rsync.sh +0 -0
  73. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/rungrid.py +0 -0
  74. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/swe-bench-lite.txt +0 -0
  75. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/swe-bench.txt +0 -0
  76. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/swe_bench.py +0 -0
  77. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/test_benchmark.py +0 -0
  78. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/variations.1.sh +0 -0
  79. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/variations.2.sh +0 -0
  80. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/variations.3.sh +0 -0
  81. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/benchmark/variations.4.sh +0 -0
  82. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/__init__.py +0 -0
  83. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/__main__.py +0 -0
  84. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/args.py +0 -0
  85. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/args_formatter.py +0 -0
  86. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/change_tracker.py +0 -0
  87. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/__init__.py +0 -0
  88. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/architect_coder.py +0 -0
  89. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/ask_coder.py +0 -0
  90. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/chat_chunks.py +0 -0
  91. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/context_coder.py +0 -0
  92. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/copypaste_coder.py +0 -0
  93. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editblock_coder.py +0 -0
  94. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editblock_fenced_coder.py +0 -0
  95. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editblock_func_coder.py +0 -0
  96. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  97. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editor_editblock_coder.py +0 -0
  98. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/editor_whole_coder.py +0 -0
  99. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/help_coder.py +0 -0
  100. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/patch_coder.py +0 -0
  101. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/search_replace.py +0 -0
  102. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/shell.py +0 -0
  103. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/single_wholefile_func_coder.py +0 -0
  104. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/udiff_coder.py +0 -0
  105. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/udiff_simple.py +0 -0
  106. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/wholefile_coder.py +0 -0
  107. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/coders/wholefile_func_coder.py +0 -0
  108. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/__init__.py +0 -0
  109. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/add.py +0 -0
  110. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/agent.py +0 -0
  111. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/agent_model.py +0 -0
  112. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/architect.py +0 -0
  113. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/ask.py +0 -0
  114. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/chat_mode.py +0 -0
  115. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/clear.py +0 -0
  116. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/code.py +0 -0
  117. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/command_prefix.py +0 -0
  118. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/commit.py +0 -0
  119. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/compact.py +0 -0
  120. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/context.py +0 -0
  121. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/context_blocks.py +0 -0
  122. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/context_management.py +0 -0
  123. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/copy.py +0 -0
  124. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/copy_context.py +0 -0
  125. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/core.py +0 -0
  126. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/diff.py +0 -0
  127. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/editor.py +0 -0
  128. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/editor_model.py +0 -0
  129. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/exclude_skill.py +0 -0
  130. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/exit.py +0 -0
  131. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/git.py +0 -0
  132. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/hashline.py +0 -0
  133. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/help.py +0 -0
  134. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/history_search.py +0 -0
  135. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/hooks.py +0 -0
  136. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/include_skill.py +0 -0
  137. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/lint.py +0 -0
  138. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/list_sessions.py +0 -0
  139. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/list_skills.py +0 -0
  140. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/load.py +0 -0
  141. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/load_hook.py +0 -0
  142. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/load_mcp.py +0 -0
  143. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/load_session.py +0 -0
  144. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/load_skill.py +0 -0
  145. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/ls.py +0 -0
  146. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/map.py +0 -0
  147. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/map_refresh.py +0 -0
  148. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/model.py +0 -0
  149. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/models.py +0 -0
  150. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/multiline_mode.py +0 -0
  151. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/paste.py +0 -0
  152. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/quit.py +0 -0
  153. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/read_only.py +0 -0
  154. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/read_only_stub.py +0 -0
  155. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/reasoning_effort.py +0 -0
  156. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/remove_hook.py +0 -0
  157. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/remove_mcp.py +0 -0
  158. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/remove_skill.py +0 -0
  159. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/report.py +0 -0
  160. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/rules.py +0 -0
  161. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/run.py +0 -0
  162. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/save.py +0 -0
  163. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/save_session.py +0 -0
  164. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/settings.py +0 -0
  165. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/terminal_data/linux.keytab +0 -0
  166. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/terminal_setup.py +0 -0
  167. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/test.py +0 -0
  168. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/think_tokens.py +0 -0
  169. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/tokens.py +0 -0
  170. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/undo.py +0 -0
  171. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/utils/__init__.py +0 -0
  172. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/utils/base_command.py +0 -0
  173. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/utils/helpers.py +0 -0
  174. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/utils/registry.py +0 -0
  175. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/utils/save_load_manager.py +0 -0
  176. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/voice.py +0 -0
  177. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/weak_model.py +0 -0
  178. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/web.py +0 -0
  179. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/commands/workspace.py +0 -0
  180. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/deprecated_args.py +0 -0
  181. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/diffs.py +0 -0
  182. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/dump.py +0 -0
  183. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/editor.py +0 -0
  184. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/exceptions.py +0 -0
  185. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/format_settings.py +0 -0
  186. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/help.py +0 -0
  187. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/help_pats.py +0 -0
  188. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/__init__.py +0 -0
  189. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/background_commands.py +0 -0
  190. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/command_parser.py +0 -0
  191. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/__init__.py +0 -0
  192. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/base_message.py +0 -0
  193. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/manager.py +0 -0
  194. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/service.py +0 -0
  195. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/tags.py +0 -0
  196. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/conversation/utils.py +0 -0
  197. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/copypaste.py +0 -0
  198. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/coroutines.py +0 -0
  199. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/file_searcher.py +0 -0
  200. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/__init__.py +0 -0
  201. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/dump.py +0 -0
  202. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  203. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/main.py +0 -0
  204. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/parsers.py +0 -0
  205. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/grep_ast/tsl.py +0 -0
  206. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/hashpos/__init__.py +0 -0
  207. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/leak_detect.py +0 -0
  208. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/model_providers.py +0 -0
  209. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/monorepo/__init__.py +0 -0
  210. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/monorepo/config.py +0 -0
  211. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/monorepo/project.py +0 -0
  212. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/monorepo/workspace.py +0 -0
  213. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/monorepo/worktree.py +0 -0
  214. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/nested.py +0 -0
  215. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/observations/__init__.py +0 -0
  216. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/observations/manager.py +0 -0
  217. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/plugin_manager.py +0 -0
  218. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/profiler.py +0 -0
  219. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/requests.py +0 -0
  220. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/responses.py +0 -0
  221. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/similarity.py +0 -0
  222. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/helpers/skills.py +0 -0
  223. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/history.py +0 -0
  224. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/__init__.py +0 -0
  225. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/base.py +0 -0
  226. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/integration.py +0 -0
  227. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/manager.py +0 -0
  228. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/registry.py +0 -0
  229. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/hooks/types.py +0 -0
  230. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/interruptible_input.py +0 -0
  231. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/linter.py +0 -0
  232. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/llm.py +0 -0
  233. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/main.py +0 -0
  234. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mcp/__init__.py +0 -0
  235. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mcp/manager.py +0 -0
  236. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mcp/oauth.py +0 -0
  237. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mcp/server.py +0 -0
  238. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mcp/utils.py +0 -0
  239. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/mdstream.py +0 -0
  240. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/models.py +0 -0
  241. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/onboarding.py +0 -0
  242. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/__init__.py +0 -0
  243. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/architect.yml +0 -0
  244. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/ask.yml +0 -0
  245. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/base.yml +0 -0
  246. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/context.yml +0 -0
  247. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/copypaste.yml +0 -0
  248. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editblock.yml +0 -0
  249. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editblock_fenced.yml +0 -0
  250. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editblock_func.yml +0 -0
  251. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editor_diff_fenced.yml +0 -0
  252. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editor_editblock.yml +0 -0
  253. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/editor_whole.yml +0 -0
  254. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/hashline.yml +0 -0
  255. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/help.yml +0 -0
  256. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/patch.yml +0 -0
  257. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/single_wholefile_func.yml +0 -0
  258. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/udiff.yml +0 -0
  259. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/udiff_simple.yml +0 -0
  260. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/utils/__init__.py +0 -0
  261. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/utils/registry.py +0 -0
  262. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/utils/system.py +0 -0
  263. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/wholefile.yml +0 -0
  264. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/prompts/wholefile_func.yml +0 -0
  265. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  266. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  267. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  268. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  269. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  270. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  271. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  272. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  273. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  274. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  275. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  276. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  277. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  278. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  279. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  280. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  281. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  282. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  283. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  284. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  285. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  286. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  287. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  288. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  289. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  290. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  291. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  292. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  293. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  294. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  295. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  296. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/README.md +0 -0
  297. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  298. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  299. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  300. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  301. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  302. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  303. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  304. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  305. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  306. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  307. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  308. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  309. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  310. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  311. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  312. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  313. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  314. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  315. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  316. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  317. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  318. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  319. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  320. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  321. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  322. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  323. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/reasoning_tags.py +0 -0
  324. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/repo.py +0 -0
  325. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/repomap.py +0 -0
  326. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/report.py +0 -0
  327. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/resources/__init__.py +0 -0
  328. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/resources/providers.json +0 -0
  329. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/run_cmd.py +0 -0
  330. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/scrape.py +0 -0
  331. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/sendchat.py +0 -0
  332. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/special.py +0 -0
  333. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/__init__.py +0 -0
  334. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/command.py +0 -0
  335. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/command_interactive.py +0 -0
  336. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/explore_code.py +0 -0
  337. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_branch.py +0 -0
  338. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_diff.py +0 -0
  339. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_log.py +0 -0
  340. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_remote.py +0 -0
  341. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_show.py +0 -0
  342. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/git_status.py +0 -0
  343. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/grep.py +0 -0
  344. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/load_skill.py +0 -0
  345. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/ls.py +0 -0
  346. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/remove_skill.py +0 -0
  347. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/thinking.py +0 -0
  348. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/undo_change.py +0 -0
  349. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/update_todo_list.py +0 -0
  350. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/utils/base_tool.py +0 -0
  351. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/utils/helpers.py +0 -0
  352. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/utils/output.py +0 -0
  353. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tools/utils/registry.py +0 -0
  354. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/__init__.py +0 -0
  355. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/io.py +0 -0
  356. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/styles.tcss +0 -0
  357. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/__init__.py +0 -0
  358. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/completion_bar.py +0 -0
  359. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/file_list.py +0 -0
  360. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/footer.py +0 -0
  361. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/input_area.py +0 -0
  362. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/input_container.py +0 -0
  363. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/key_hints.py +0 -0
  364. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/widgets/status_bar.py +0 -0
  365. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/tui/worker.py +0 -0
  366. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/urls.py +0 -0
  367. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/utils.py +0 -0
  368. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/versioncheck.py +0 -0
  369. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/voice.py +0 -0
  370. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/waiting.py +0 -0
  371. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/watch.py +0 -0
  372. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/watch_prompts.py +0 -0
  373. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/Gemfile +0 -0
  374. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/blame.md +0 -0
  375. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/get-started.md +0 -0
  376. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/help-tip.md +0 -0
  377. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/help.md +0 -0
  378. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/install.md +0 -0
  379. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/keys.md +0 -0
  380. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/model-warnings.md +0 -0
  381. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/multi-line.md +0 -0
  382. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/python-m-aider.md +0 -0
  383. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/recording.css +0 -0
  384. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/recording.md +0 -0
  385. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_includes/works-best.md +0 -0
  386. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_features.scss +0 -0
  387. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_footer.scss +0 -0
  388. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_hero.scss +0 -0
  389. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_info.scss +0 -0
  390. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_layout.scss +0 -0
  391. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_reset.scss +0 -0
  392. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_testimonials.scss +0 -0
  393. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_typography.scss +0 -0
  394. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/_variables.scss +0 -0
  395. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/custom/custom.scss +0 -0
  396. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/_sass/global-overrides.scss +0 -0
  397. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/adv-model-settings.md +0 -0
  398. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/agent-mode.md +0 -0
  399. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/aider_conf.md +0 -0
  400. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/api-keys.md +0 -0
  401. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/custom-commands.md +0 -0
  402. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  403. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/dotenv.md +0 -0
  404. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/editor.md +0 -0
  405. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/hooks.md +0 -0
  406. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/mcp.md +0 -0
  407. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/model-aliases.md +0 -0
  408. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/options.md +0 -0
  409. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/reasoning.md +0 -0
  410. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/security.md +0 -0
  411. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/skills.md +0 -0
  412. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/tui.md +0 -0
  413. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config/workspaces.md +0 -0
  414. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/config.md +0 -0
  415. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/faq.md +0 -0
  416. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/git.md +0 -0
  417. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/index.md +0 -0
  418. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/install/docker.md +0 -0
  419. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/install/optional.md +0 -0
  420. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/install.md +0 -0
  421. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/languages.md +0 -0
  422. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  423. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/legal/privacy.md +0 -0
  424. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/anthropic.md +0 -0
  425. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/azure.md +0 -0
  426. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/bedrock.md +0 -0
  427. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/cohere.md +0 -0
  428. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/deepseek.md +0 -0
  429. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/gemini.md +0 -0
  430. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/github.md +0 -0
  431. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/groq.md +0 -0
  432. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/lm-studio.md +0 -0
  433. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/ollama.md +0 -0
  434. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/openai-compat.md +0 -0
  435. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/openai.md +0 -0
  436. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/openrouter.md +0 -0
  437. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/other.md +0 -0
  438. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/vertex.md +0 -0
  439. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/warnings.md +0 -0
  440. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms/xai.md +0 -0
  441. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/llms.md +0 -0
  442. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/more/analytics.md +0 -0
  443. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/more/edit-formats.md +0 -0
  444. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/more/infinite-output.md +0 -0
  445. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/more-info.md +0 -0
  446. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/repomap.md +0 -0
  447. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/scripting.md +0 -0
  448. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  449. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  450. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/imports.md +0 -0
  451. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  452. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/support.md +0 -0
  453. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  454. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  455. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/troubleshooting.md +0 -0
  456. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/commands.md +0 -0
  457. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/conventions.md +0 -0
  458. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/copypaste.md +0 -0
  459. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/images-urls.md +0 -0
  460. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/lint-test.md +0 -0
  461. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/modes.md +0 -0
  462. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/not-code.md +0 -0
  463. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/notifications.md +0 -0
  464. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/sessions.md +0 -0
  465. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/tips.md +0 -0
  466. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/voice.md +0 -0
  467. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage/watch.md +0 -0
  468. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/docs/usage.md +0 -0
  469. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli/website/share/index.md +0 -0
  470. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/dependency_links.txt +0 -0
  471. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/entry_points.txt +0 -0
  472. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/requires.txt +0 -0
  473. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/cecli_dev.egg-info/top_level.txt +0 -0
  474. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/docker/Dockerfile +0 -0
  475. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  476. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/pyproject.toml +0 -0
  477. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/pytest.ini +0 -0
  478. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/common-constraints.txt +0 -0
  479. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-dev.in +0 -0
  480. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-dev.txt +0 -0
  481. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-help.in +0 -0
  482. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-help.txt +0 -0
  483. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-playwright.in +0 -0
  484. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements-playwright.txt +0 -0
  485. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/requirements.in +0 -0
  486. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements/tree-sitter.in +0 -0
  487. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/requirements.txt +0 -0
  488. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/30k-image.py +0 -0
  489. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/Dockerfile.jekyll +0 -0
  490. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/__init__.py +0 -0
  491. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/blame.py +0 -0
  492. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/clean_metadata.py +0 -0
  493. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/cost_analyzer.py +0 -0
  494. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/dl_icons.py +0 -0
  495. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/filter-chat-mode.js +0 -0
  496. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/generate_providers.py +0 -0
  497. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/get_contributor_list.js +0 -0
  498. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/get_hashline.py +0 -0
  499. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/history_prompts.py +0 -0
  500. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/homepage.py +0 -0
  501. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/issues.py +0 -0
  502. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/jekyll_build.sh +0 -0
  503. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/jekyll_run.sh +0 -0
  504. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/logo_svg.py +0 -0
  505. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/pip-compile.sh +0 -0
  506. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/recording_audio.py +0 -0
  507. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/redact-cast.py +0 -0
  508. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/rename_to_cecli.py +0 -0
  509. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/tmux_record.sh +0 -0
  510. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/tsl_pack_langs.py +0 -0
  511. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/update-blame.sh +0 -0
  512. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/update-docs.sh +0 -0
  513. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/update-history.py +0 -0
  514. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/versionbump.py +0 -0
  515. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/scripts/yank-old-versions.py +0 -0
  516. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/setup.cfg +0 -0
  517. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/shim.pyproject.toml +0 -0
  518. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/__init__.py +0 -0
  519. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/__init__.py +0 -0
  520. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_aws_credentials.py +0 -0
  521. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_background_commands.py +0 -0
  522. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_coder.py +0 -0
  523. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_commands.py +0 -0
  524. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_custom_commands.py +0 -0
  525. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_deprecated.py +0 -0
  526. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_editblock.py +0 -0
  527. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_editor.py +0 -0
  528. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_exceptions.py +0 -0
  529. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_find_or_blocks.py +0 -0
  530. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_history.py +0 -0
  531. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_io.py +0 -0
  532. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_linter.py +0 -0
  533. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_main.py +0 -0
  534. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_model_info_manager.py +0 -0
  535. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_model_provider_manager.py +0 -0
  536. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_models.py +0 -0
  537. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_onboarding.py +0 -0
  538. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_plugin_manager.py +0 -0
  539. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_prompts.py +0 -0
  540. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_reasoning.py +0 -0
  541. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_repo.py +0 -0
  542. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_repomap.py +0 -0
  543. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_run_cmd.py +0 -0
  544. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_sanity_check_repo.py +0 -0
  545. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_scripting.py +0 -0
  546. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_sendchat.py +0 -0
  547. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_skills.py +0 -0
  548. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_special.py +0 -0
  549. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_ssl_verification.py +0 -0
  550. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_udiff.py +0 -0
  551. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_urls.py +0 -0
  552. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_voice.py +0 -0
  553. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_watch.py +0 -0
  554. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/basic/test_wholefile.py +0 -0
  555. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/coders/test_copypaste_coder.py +0 -0
  556. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/conftest.py +0 -0
  557. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/conversations/test_conversation_integration.py +0 -0
  558. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/conversations/test_conversation_system.py +0 -0
  559. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  560. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/chat-history.md +0 -0
  561. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/arduino/test.ino +0 -0
  562. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/c/test.c +0 -0
  563. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/chatito/test.chatito +0 -0
  564. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/clojure/test.clj +0 -0
  565. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  566. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/cpp/test.cpp +0 -0
  567. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/csharp/test.cs +0 -0
  568. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/d/test.d +0 -0
  569. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/dart/test.dart +0 -0
  570. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/elisp/test.el +0 -0
  571. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/elixir/test.ex +0 -0
  572. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/elm/test.elm +0 -0
  573. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/gleam/test.gleam +0 -0
  574. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/go/test.go +0 -0
  575. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/haskell/test.hs +0 -0
  576. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/hcl/test.tf +0 -0
  577. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/java/test.java +0 -0
  578. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/javascript/test.js +0 -0
  579. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/kotlin/test.kt +0 -0
  580. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/lua/test.lua +0 -0
  581. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/matlab/test.m +0 -0
  582. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/ocaml/test.ml +0 -0
  583. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  584. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/php/test.php +0 -0
  585. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/pony/test.pony +0 -0
  586. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/properties/test.properties +0 -0
  587. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/python/test.py +0 -0
  588. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/ql/test.ql +0 -0
  589. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/r/test.r +0 -0
  590. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/racket/test.rkt +0 -0
  591. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/ruby/test.rb +0 -0
  592. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/rust/test.rs +0 -0
  593. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/scala/test.scala +0 -0
  594. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/solidity/test.sol +0 -0
  595. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/swift/test.swift +0 -0
  596. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/tsx/test.tsx +0 -0
  597. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/typescript/test.ts +0 -0
  598. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/udev/test.rules +0 -0
  599. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/languages/zig/test.zig +0 -0
  600. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/sample-code-base/sample.js +0 -0
  601. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/sample-code-base/sample.py +0 -0
  602. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  603. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/watch.js +0 -0
  604. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/watch.lisp +0 -0
  605. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/watch.py +0 -0
  606. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/fixtures/watch_question.js +0 -0
  607. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/help/test_help.py +0 -0
  608. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/monorepo/test_config.py +0 -0
  609. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/monorepo/test_config_active.py +0 -0
  610. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  611. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  612. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/monorepo/test_workspace.py +0 -0
  613. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/helpers/observations/test_observation_manager.py +0 -0
  614. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/hooks/__init__.py +0 -0
  615. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/hooks/test_base.py +0 -0
  616. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/hooks/test_manager.py +0 -0
  617. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/hooks/test_registry.py +0 -0
  618. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/mcp/__init__.py +0 -0
  619. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/mcp/test_manager.py +0 -0
  620. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/scrape/test_playwright_disable.py +0 -0
  621. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/scrape/test_scrape.py +0 -0
  622. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_git_branch.py +0 -0
  623. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_git_diff.py +0 -0
  624. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_grep.py +0 -0
  625. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tools/test_registry.py +0 -0
  626. {cecli_dev-0.99.10 → cecli_dev-0.99.11}/tests/tui/test_app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.10
3
+ Version: 0.99.11
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
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.99.10'
22
- __version_tuple__ = version_tuple = (0, 99, 10)
21
+ __version__ = version = '0.99.11'
22
+ __version_tuple__ = version_tuple = (0, 99, 11)
23
23
 
24
- __commit_id__ = commit_id = 'gdd5ec67da'
24
+ __commit_id__ = commit_id = 'g2e5e3b75c'
@@ -145,7 +145,7 @@ class AgentCoder(Coder):
145
145
  "context_summary",
146
146
  # "directory_structure",
147
147
  "environment_info",
148
- "git_status",
148
+ # "git_status",
149
149
  # "symbol_outline",
150
150
  "todo_list",
151
151
  "skills",
@@ -246,132 +246,6 @@ class AgentCoder(Coder):
246
246
  else:
247
247
  await self.mcp_manager.connect_server(server_name)
248
248
 
249
- async def _execute_local_tool_calls(self, tool_calls_list):
250
- tool_responses = []
251
- used_write_tool = False
252
-
253
- for tool_call in tool_calls_list:
254
- tool_name = tool_call.function.name
255
- result_message = ""
256
- try:
257
- if responses.unprefix_tool_name(tool_name)[1].lower() in self.write_tools:
258
- used_write_tool = True
259
-
260
- args_string = tool_call.function.arguments.strip()
261
- parsed_args_list = []
262
-
263
- if not await HookIntegration.call_pre_tool_hooks(self, tool_name, args_string):
264
- tool_responses.append(
265
- {
266
- "role": "tool",
267
- "tool_call_id": tool_call.id,
268
- "content": "Tool Request Aborted.",
269
- }
270
- )
271
- continue
272
-
273
- if args_string:
274
- json_chunks = utils.split_concatenated_json(args_string)
275
- for chunk in json_chunks:
276
- try:
277
- parsed_args_list.append(json.loads(chunk))
278
- except json.JSONDecodeError as e:
279
- self.model_kwargs = {}
280
- self.io.tool_warning(
281
- f"Malformed JSON arguments in tool {tool_name}: {chunk}"
282
- )
283
- tool_responses.append(
284
- {
285
- "role": "tool",
286
- "tool_call_id": tool_call.id,
287
- "content": (
288
- f"Malformed JSON arguments in tool {tool_name}: {str(e)}"
289
- ),
290
- }
291
- )
292
- continue
293
- if not parsed_args_list and not args_string:
294
- parsed_args_list.append({})
295
- all_results_content = []
296
- norm_tool_name = tool_name.lower()
297
- tasks = []
298
- if norm_tool_name in ToolRegistry.get_registered_tools():
299
- tool_module = ToolRegistry.get_tool(norm_tool_name)
300
- for params in parsed_args_list:
301
- result = tool_module.process_response(self, params)
302
- if asyncio.iscoroutine(result):
303
- tasks.append(result)
304
- else:
305
- tasks.append(asyncio.to_thread(lambda: result))
306
- else:
307
- all_results_content.append(f"Error: Unknown tool name '{tool_name}'")
308
- if tasks:
309
-
310
- async def gather_and_await():
311
- return await asyncio.gather(*tasks, return_exceptions=True)
312
-
313
- task_results, interrupted = await interruptible(
314
- gather_and_await(), self.interrupt_event
315
- )
316
-
317
- if interrupted:
318
- self.io.tool_warning("Tool execution interrupted.")
319
- all_results_content.append("Tool execution interrupted by user.")
320
- elif task_results:
321
- for res in task_results:
322
- if isinstance(res, Exception):
323
- all_results_content.append(f"Error in tool execution: {res}")
324
- else:
325
- all_results_content.append(str(res))
326
-
327
- if not await HookIntegration.call_post_tool_hooks(
328
- self, tool_name, args_string, "\n\n".join(all_results_content)
329
- ):
330
- tool_responses.append(
331
- {
332
- "role": "tool",
333
- "tool_call_id": tool_call.id,
334
- "content": "Tool Response Redacted.",
335
- }
336
- )
337
- continue
338
-
339
- result_message = "\n\n".join(all_results_content)
340
- except Exception as e:
341
- self.model_kwargs = {}
342
- result_message = f"Error executing {tool_name}: {e}"
343
- self.io.tool_error(f"""Error during {tool_name} execution: {e}
344
- {traceback.format_exc()}""")
345
- tool_responses.append(
346
- {"role": "tool", "tool_call_id": tool_call.id, "content": result_message}
347
- )
348
-
349
- if self.auto_lint and used_write_tool:
350
- edited = list(self.files_edited_by_tools)
351
- lint_errors = self.lint_edited(edited, show_output=False)
352
- self.lint_outcome = not lint_errors
353
-
354
- if lint_errors:
355
- lint_errors = lint_errors.replace(
356
- "# Fix any linting errors below, if possible.",
357
- "# Fix any linting errors below, if possible and then continue with your task.",
358
- 1,
359
- )
360
- ConversationService.get_manager(self).add_message(
361
- message_dict=dict(role="user", content=lint_errors),
362
- tag=MessageTag.CUR,
363
- hash_key=("lint_errors", "agent"),
364
- promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
365
- mark_for_demotion=1,
366
- force=True,
367
- )
368
- else:
369
- ConversationService.get_manager(self).remove_message_by_hash_key(
370
- ("lint_errors", "agent")
371
- )
372
-
373
- return tool_responses
374
-
375
249
  async def _execute_mcp_tool(self, server, tool_name, params):
376
250
  """Helper to execute a single MCP tool call, created from legacy format."""
377
251
 
@@ -408,9 +282,9 @@ class AgentCoder(Coder):
408
282
  content_parts.append(item.text)
409
283
  return "".join(content_parts)
410
284
  except Exception as e:
411
- self.io.tool_warning(f"""Executing {tool_name} on {server.name} failed:
412
- Error: {e}
413
- """)
285
+ self.io.tool_warning(
286
+ (f"Executing {tool_name} on {server.name} failed:\nError: {e}")
287
+ )
414
288
  return f"Error executing tool call {tool_name}: {e}"
415
289
 
416
290
  result, interrupted = await interruptible(_exec_async(), self.interrupt_event)
@@ -507,9 +381,8 @@ class AgentCoder(Coder):
507
381
  try:
508
382
  result = '<context name="symbol_outline" from="agent">\n'
509
383
  result += "## Symbol Outline (Current Context)\n\n"
510
- result += """Code definitions (classes, functions, methods, etc.) found in files currently in chat context.
511
-
512
- """
384
+ result += "Code definitions (classes, functions, methods, etc.) found in files currently in chat context."
385
+ result += "\n\n"
513
386
  files_to_outline = list(self.abs_fnames) + list(self.abs_read_only_fnames)
514
387
  if not files_to_outline:
515
388
  result += "No files currently in context.\n"
@@ -649,9 +522,7 @@ class AgentCoder(Coder):
649
522
  )
650
523
  if editable_files:
651
524
  result += "\n".join(editable_files) + "\n\n"
652
- result += f"""**Total editable: {len(editable_files)} files, {editable_tokens:,} tokens**
653
-
654
- """
525
+ result += f"**Total editable: {len(editable_files)} files, {editable_tokens:,} tokens**\n\n"
655
526
  else:
656
527
  result += "No editable files in context\n\n"
657
528
  if self.abs_read_only_fnames:
@@ -671,9 +542,7 @@ class AgentCoder(Coder):
671
542
  )
672
543
  if readonly_files:
673
544
  result += "\n".join(readonly_files) + "\n\n"
674
- result += f"""**Total read-only: {len(readonly_files)} files, {readonly_tokens:,} tokens**
675
-
676
- """
545
+ result += f"**Total read-only: {len(readonly_files)} files, {readonly_tokens:,} tokens**\n\n"
677
546
  else:
678
547
  result += "No read-only files in context\n\n"
679
548
  extra_tokens = sum(self.context_block_tokens.values())
@@ -765,9 +634,133 @@ class AgentCoder(Coder):
765
634
  # Ensure we call base implementation to trigger execution of all tools (native + extracted)
766
635
  return await super().process_tool_calls(tool_call_response)
767
636
 
768
- async def _execute_local_tools(self, tool_calls):
637
+ async def _execute_local_tools(self, tool_calls_list):
769
638
  """Execute local tools via ToolRegistry."""
770
- return await self._execute_local_tool_calls(tool_calls)
639
+ tool_responses = []
640
+ used_write_tool = False
641
+
642
+ for tool_call in tool_calls_list:
643
+ tool_name = tool_call.function.name
644
+ result_message = ""
645
+ try:
646
+ if responses.unprefix_tool_name(tool_name)[1].lower() in self.write_tools:
647
+ used_write_tool = True
648
+
649
+ args_string = tool_call.function.arguments.strip()
650
+ parsed_args_list = []
651
+
652
+ if not await HookIntegration.call_pre_tool_hooks(self, tool_name, args_string):
653
+ tool_responses.append(
654
+ {
655
+ "role": "tool",
656
+ "tool_call_id": tool_call.id,
657
+ "content": "Tool Request Aborted.",
658
+ }
659
+ )
660
+ continue
661
+
662
+ if args_string:
663
+ json_chunks = utils.split_concatenated_json(args_string)
664
+ for chunk in json_chunks:
665
+ try:
666
+ parsed_args_list.append(json.loads(chunk))
667
+ except json.JSONDecodeError as e:
668
+ self.model_kwargs = {}
669
+ self.io.tool_warning(
670
+ f"Malformed JSON arguments in tool {tool_name}: {chunk}"
671
+ )
672
+ tool_responses.append(
673
+ {
674
+ "role": "tool",
675
+ "tool_call_id": tool_call.id,
676
+ "content": (
677
+ f"Malformed JSON arguments in tool {tool_name}: {str(e)}"
678
+ ),
679
+ }
680
+ )
681
+ continue
682
+ if not parsed_args_list and not args_string:
683
+ parsed_args_list.append({})
684
+ all_results_content = []
685
+ norm_tool_name = tool_name.lower()
686
+ tasks = []
687
+ if norm_tool_name in ToolRegistry.get_registered_tools():
688
+ tool_module = ToolRegistry.get_tool(norm_tool_name)
689
+ for params in parsed_args_list:
690
+ result = tool_module.process_response(self, params)
691
+ if asyncio.iscoroutine(result):
692
+ tasks.append(result)
693
+ else:
694
+ tasks.append(asyncio.to_thread(lambda: result))
695
+ else:
696
+ all_results_content.append(f"Error: Unknown tool name '{tool_name}'")
697
+ if tasks:
698
+
699
+ async def gather_and_await():
700
+ return await asyncio.gather(*tasks, return_exceptions=True)
701
+
702
+ task_results, interrupted = await interruptible(
703
+ gather_and_await(), self.interrupt_event
704
+ )
705
+
706
+ if interrupted:
707
+ self.io.tool_warning("Tool execution interrupted.")
708
+ all_results_content.append("Tool execution interrupted by user.")
709
+ elif task_results:
710
+ for res in task_results:
711
+ if isinstance(res, Exception):
712
+ all_results_content.append(f"Error in tool execution: {res}")
713
+ else:
714
+ all_results_content.append(str(res))
715
+
716
+ if not await HookIntegration.call_post_tool_hooks(
717
+ self, tool_name, args_string, "\n\n".join(all_results_content)
718
+ ):
719
+ tool_responses.append(
720
+ {
721
+ "role": "tool",
722
+ "tool_call_id": tool_call.id,
723
+ "content": "Tool Response Redacted.",
724
+ }
725
+ )
726
+ continue
727
+
728
+ result_message = "\n\n".join(all_results_content)
729
+ except Exception as e:
730
+ self.model_kwargs = {}
731
+ result_message = f"Error executing {tool_name}: {e}"
732
+ self.io.tool_error(
733
+ (f"Error during {tool_name} execution: {e}\n{traceback.format_exc()}")
734
+ )
735
+ tool_responses.append(
736
+ {"role": "tool", "tool_call_id": tool_call.id, "content": result_message}
737
+ )
738
+
739
+ if self.auto_lint and used_write_tool:
740
+ edited = list(self.files_edited_by_tools)
741
+ lint_errors = self.lint_edited(edited, show_output=False)
742
+ self.lint_outcome = not lint_errors
743
+
744
+ if lint_errors:
745
+ lint_errors = lint_errors.replace(
746
+ "# Fix any linting errors below, if possible.",
747
+ "# Fix any linting errors below, if possible and then continue with your task.",
748
+ 1,
749
+ )
750
+ ConversationService.get_manager(self).add_message(
751
+ message_dict=dict(role="user", content=lint_errors),
752
+ tag=MessageTag.CUR,
753
+ hash_key=("lint_errors", "agent"),
754
+ promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
755
+ mark_for_demotion=1,
756
+ force=True,
757
+ )
758
+ else:
759
+ ConversationService.get_manager(self).remove_message_by_hash_key(
760
+ ("lint_errors", "agent")
761
+ )
762
+
763
+ return tool_responses
771
764
 
772
765
  async def _execute_mcp_tools(self, server, tool_calls):
773
766
  """Execute MCP tools via LiteLLM."""
@@ -860,6 +853,12 @@ class AgentCoder(Coder):
860
853
  self.tool_usage_history = []
861
854
  return True
862
855
 
856
+ if content and not tool_calls_found and self.num_reflections < self.max_reflections:
857
+ self.reflected_message = (
858
+ "Continue with your task. If you have completed it, call the `Finished` tool."
859
+ )
860
+ return True
861
+
863
862
  if tool_calls_found and self.num_reflections < self.max_reflections:
864
863
  self.tool_call_count = 0
865
864
  self.files_added_in_exploration = set()
@@ -877,8 +876,9 @@ class AgentCoder(Coder):
877
876
  "I have processed the results of the previous tool calls. Let me analyze them"
878
877
  " and continue working towards your request."
879
878
  )
880
- next_prompt_parts.append("""
881
- I will proceed based on the tool results and updated context.""")
879
+ next_prompt_parts.append(
880
+ "\nI will proceed based on the tool results and updated context."
881
+ )
882
882
  next_prompt_parts.append(f"\nYour original question was: {original_question}")
883
883
  self.reflected_message = "\n".join(next_prompt_parts)
884
884
  self.io.tool_output("Continuing exploration...")
@@ -1019,8 +1019,8 @@ I will proceed based on the tool results and updated context.""")
1019
1019
  context_parts.append("\n\n")
1020
1020
  context_parts.append("## File Editing Tools Disabled")
1021
1021
  context_parts.append(
1022
- "File editing tools are currently disabled.Use `ReadRange` to determine the"
1023
- " current hashline prefixes needed to perform an edit and activate them when you"
1022
+ "File editing tools are currently disabled. Use `ReadRange` to determine the"
1023
+ " current content hash prefixes needed to perform an edit and activate them when you"
1024
1024
  " are ready to edit a file."
1025
1025
  )
1026
1026
 
@@ -1612,6 +1612,7 @@ class Coder:
1612
1612
  return
1613
1613
 
1614
1614
  if not self.commands.is_command(user_message):
1615
+ ConversationService.get_chunks(self).flush_removals()
1615
1616
  self.last_user_message = user_message
1616
1617
 
1617
1618
  while True:
@@ -1865,6 +1866,7 @@ class Coder:
1865
1866
  manager.clear_tag(MessageTag.DIFFS)
1866
1867
  manager.clear_tag(MessageTag.FILE_CONTEXTS)
1867
1868
  ConversationService.get_files(self).clear_file_cache()
1869
+ ConversationService.get_chunks(self).flush_removals()
1868
1870
 
1869
1871
  except Exception as e:
1870
1872
  self.io.tool_warning(f"Context compaction failed: {e}")
@@ -9,7 +9,7 @@ from pathlib import Path
9
9
  from cecli import utils
10
10
  from cecli.coders.base_coder import Coder
11
11
  from cecli.helpers.hashline import (
12
- HashlineError,
12
+ ContentHashError,
13
13
  apply_hashline_operations,
14
14
  strip_hashline,
15
15
  )
@@ -141,7 +141,7 @@ class HashLineCoder(Coder):
141
141
  self.io.write_text(full_path, new_content)
142
142
  passed.append((path, operations, "Batch hashline operations"))
143
143
 
144
- except (ValueError, HashlineError) as e:
144
+ except (ValueError, ContentHashError) as e:
145
145
  # Record failure
146
146
  failed.append((path, operations, f"Hashline batch operation failed: {e}"))
147
147
  continue
@@ -16,6 +16,10 @@ class DropCommand(BaseCommand):
16
16
 
17
17
  @classmethod
18
18
  async def execute(cls, io, coder, args, **kwargs):
19
+ from cecli.helpers.conversation import ConversationService
20
+
21
+ ConversationService.get_chunks(coder).flush_removals()
22
+
19
23
  try:
20
24
  if not args.strip():
21
25
  if kwargs.get("original_read_only_fnames"):
@@ -11,6 +11,8 @@ class ResetCommand(BaseCommand):
11
11
 
12
12
  @classmethod
13
13
  async def execute(cls, io, coder, args, **kwargs):
14
+ ConversationService.get_chunks(coder).flush_removals()
15
+
14
16
  try:
15
17
  # Drop all files
16
18
  cls._drop_all_files(io, coder, kwargs.get("original_read_only_fnames"))
@@ -3,6 +3,8 @@ import weakref
3
3
  from typing import Any, Dict, List, Optional, Tuple
4
4
  from uuid import UUID
5
5
 
6
+ import xxhash
7
+
6
8
  from cecli.helpers.hashline import get_hashline_content_diff, hashline
7
9
  from cecli.repomap import RepoMap
8
10
 
@@ -25,9 +27,11 @@ class ConversationFiles:
25
27
  self._file_contents_snapshot: Dict[str, str] = {}
26
28
  self._file_timestamps: Dict[str, float] = {}
27
29
  self._file_diffs: Dict[str, str] = {}
30
+ self._file_stub_contents: Dict[str, str] = {}
28
31
  self._file_to_message_id: Dict[str, str] = {}
29
32
  self._image_files: Dict[str, bool] = {}
30
33
  self._numbered_contexts: Dict[str, List[Tuple[int, int]]] = {}
34
+ self._last_merged_ranges: Dict[str, List[Tuple[int, int]]] = {}
31
35
  self._initialized = True
32
36
 
33
37
  @classmethod
@@ -153,8 +157,13 @@ class ConversationFiles:
153
157
  if content_length <= large_file_token_threshold:
154
158
  return content
155
159
 
156
- # Use RepoMap to generate file stub
157
- return RepoMap.get_file_stub(fname, coder.io, line_numbers=True)
160
+ # Use RepoMap to generate file stub (with read-through cache)
161
+ if abs_fname not in self._file_stub_contents:
162
+ self._file_stub_contents[abs_fname] = RepoMap.get_file_stub(
163
+ fname, coder.io, line_numbers=True
164
+ )
165
+
166
+ return self._file_stub_contents[abs_fname]
158
167
 
159
168
  def has_file_changed(self, fname: str) -> bool:
160
169
  """
@@ -250,6 +259,7 @@ class ConversationFiles:
250
259
  rel_fname = coder.get_rel_fname(fname)
251
260
 
252
261
  # Add diff message to conversation
262
+ content_hash = xxhash.xxh3_128_hexdigest(diff.encode("utf-8"))
253
263
  diff_message = {
254
264
  "role": "user",
255
265
  "content": (
@@ -258,11 +268,21 @@ class ConversationFiles:
258
268
  ),
259
269
  }
260
270
 
271
+ assistant_msg = {
272
+ "role": "assistant",
273
+ "content": f"Thank you for sharing this diff of the updates to {rel_fname}.",
274
+ }
275
+
261
276
  ConversationService.get_manager(coder).add_message(
262
277
  message_dict=diff_message,
263
278
  tag=MessageTag.DIFFS,
264
- # promotion=ConversationService.get_manager(coder).DEFAULT_TAG_PROMOTION_VALUE,
265
- # mark_for_demotion=1,
279
+ hash_key=("file_diff_user", rel_fname, content_hash),
280
+ )
281
+
282
+ ConversationService.get_manager(coder).add_message(
283
+ message_dict=assistant_msg,
284
+ tag=MessageTag.DIFFS,
285
+ hash_key=("file_diff_assistant", rel_fname, content_hash),
266
286
  )
267
287
 
268
288
  return diff
@@ -298,7 +318,7 @@ class ConversationFiles:
298
318
 
299
319
  return content or ""
300
320
 
301
- def clear_file_cache(self, fname: Optional[str] = None) -> None:
321
+ def clear_file_cache(self, fname: Optional[str] = None, clear_contexts=True) -> None:
302
322
  """
303
323
  Clear cache for specific file or all files.
304
324
 
@@ -310,17 +330,21 @@ class ConversationFiles:
310
330
  self._file_contents_snapshot.clear()
311
331
  self._file_timestamps.clear()
312
332
  self._file_diffs.clear()
333
+ self._file_stub_contents.clear()
313
334
  self._file_to_message_id.clear()
314
- self._numbered_contexts.clear()
335
+ if clear_contexts:
336
+ self._numbered_contexts.clear()
315
337
  else:
316
338
  abs_fname = os.path.abspath(fname)
317
339
  self._file_contents_original.pop(abs_fname, None)
318
340
  self._file_contents_snapshot.pop(abs_fname, None)
319
341
  self._file_timestamps.pop(abs_fname, None)
320
342
  self._file_diffs.pop(abs_fname, None)
343
+ self._file_stub_contents.pop(abs_fname, None)
321
344
  self._file_to_message_id.pop(abs_fname, None)
322
345
  self._image_files.pop(abs_fname, None)
323
- self._numbered_contexts.pop(abs_fname, None)
346
+ if clear_contexts:
347
+ self._numbered_contexts.pop(abs_fname, None)
324
348
 
325
349
  def add_image_file(self, fname: str) -> None:
326
350
  """
@@ -355,7 +379,7 @@ class ConversationFiles:
355
379
 
356
380
  def update_file_context(
357
381
  self, file_path: str, start_line: int, end_line: int, auto_remove=True
358
- ) -> None:
382
+ ) -> Tuple[int, int]:
359
383
  """
360
384
  Update numbered contexts for a file with a new range.
361
385
 
@@ -363,6 +387,9 @@ class ConversationFiles:
363
387
  file_path: Absolute file path
364
388
  start_line: Start line number (1-based)
365
389
  end_line: End line number (1-based)
390
+
391
+ Returns:
392
+ The merged range (start_line, end_line) that contains the input range.
366
393
  """
367
394
  abs_fname = os.path.abspath(file_path)
368
395
 
@@ -388,8 +415,9 @@ class ConversationFiles:
388
415
  else:
389
416
  last_start, last_end = merged_ranges[-1]
390
417
 
391
- # Check if ranges overlap or are close (within 20 lines)
392
- if current_start <= last_end + 20: # Overlap or close
418
+ # Check if new range overlaps/contains with the last range
419
+ # (since sorted by start, this means current_start is between last_start and last_end)
420
+ if current_start <= last_end: # Overlap or adjacent
393
421
  # Extend the range
394
422
  merged_ranges[-1][1] = max(last_end, current_end)
395
423
  else:
@@ -404,7 +432,46 @@ class ConversationFiles:
404
432
  if coder and auto_remove:
405
433
  self.remove_file_messages(abs_fname)
406
434
 
407
- def get_file_context(self, file_path: str) -> str:
435
+ # Find the merged range that contains the input range
436
+ for merged_start, merged_end in self._numbered_contexts[abs_fname]:
437
+ if merged_start <= start_line and merged_end >= end_line:
438
+ return (merged_start, merged_end)
439
+
440
+ return (start_line, end_line) # fallback
441
+
442
+ def push_range(self, file_path: str, ranges: List[Tuple[int, int]]) -> None:
443
+ """
444
+ Push merged ranges into the _last_merged_ranges cache for a file.
445
+
446
+ Args:
447
+ file_path: Absolute file path
448
+ ranges: List of (start_line, end_line) tuples, as returned by
449
+ update_file_context()
450
+ """
451
+ abs_fname = os.path.abspath(file_path)
452
+ if abs_fname not in self._last_merged_ranges:
453
+ self._last_merged_ranges[abs_fname] = []
454
+ self._last_merged_ranges[abs_fname].extend(ranges)
455
+ # Deduplicate and sort by start_line
456
+ self._last_merged_ranges[abs_fname] = sorted(
457
+ set(self._last_merged_ranges[abs_fname]),
458
+ key=lambda x: x[0],
459
+ )
460
+
461
+ def clear_ranges(self, file_path: Optional[str] = None) -> None:
462
+ """
463
+ Clear the _last_merged_ranges cache for a specific file or all files.
464
+
465
+ Args:
466
+ file_path: Optional absolute file path (None = clear all)
467
+ """
468
+ if file_path is None:
469
+ self._last_merged_ranges.clear()
470
+ else:
471
+ abs_fname = os.path.abspath(file_path)
472
+ self._last_merged_ranges.pop(abs_fname, None)
473
+
474
+ def get_file_context(self, file_path: str, all_ranges=False) -> str:
408
475
  """
409
476
  Generate hashline representation of cached context ranges.
410
477
 
@@ -416,8 +483,14 @@ class ConversationFiles:
416
483
  """
417
484
  abs_fname = os.path.abspath(file_path)
418
485
 
419
- # Get cached ranges
420
- ranges = self._numbered_contexts.get(abs_fname, [])
486
+ # Get cached ranges - prefer _last_merged_ranges over full _numbered_contexts
487
+ ranges = self._last_merged_ranges.get(abs_fname, []) or self._numbered_contexts.get(
488
+ abs_fname, []
489
+ )
490
+
491
+ if all_ranges:
492
+ ranges = self._numbered_contexts.get(abs_fname, [])
493
+
421
494
  if not ranges:
422
495
  return ""
423
496
 
@@ -516,6 +589,7 @@ class ConversationFiles:
516
589
  """Clear all file caches and reset to initial state."""
517
590
  self.clear_file_cache()
518
591
  self.clear_all_numbered_contexts()
592
+ self.clear_ranges()
519
593
  self._initialized = False
520
594
 
521
595
  def debug_print_cache(self) -> None: