cecli-dev 0.99.2__tar.gz → 0.99.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/PKG-INFO +2 -1
  2. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/args.py +6 -0
  5. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/agent_coder.py +6 -7
  6. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/base_coder.py +114 -129
  7. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/clear.py +1 -0
  8. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/reset.py +1 -0
  9. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/integration.py +8 -2
  10. cecli_dev-0.99.3/cecli/helpers/observations/manager.py +98 -0
  11. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/agent.yml +7 -7
  12. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/base.yml +29 -15
  13. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/hashline.yml +2 -1
  14. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/__init__.py +2 -6
  15. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/command.py +51 -4
  16. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/context_manager.py +33 -0
  17. cecli_dev-0.99.3/cecli/tools/explore_symbols.py +287 -0
  18. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/grep.py +51 -0
  19. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/insert_text.py +2 -2
  20. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/ls.py +25 -0
  21. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/replace_text.py +2 -2
  22. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/show_context.py +36 -2
  23. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/utils/base_tool.py +21 -1
  24. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/app.py +8 -0
  25. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/styles.tcss +1 -0
  26. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/input_container.py +5 -0
  27. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/output.py +2 -2
  28. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/PKG-INFO +2 -1
  29. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/SOURCES.txt +4 -3
  30. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/requires.txt +1 -0
  31. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/pytest.ini +1 -0
  32. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/common-constraints.txt +2 -0
  33. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements.in +1 -0
  34. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements.txt +4 -0
  35. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_find_or_blocks.py +8 -4
  36. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_repo.py +36 -24
  37. cecli_dev-0.99.3/tests/helpers/observations/test_observation_manager.py +185 -0
  38. cecli_dev-0.99.3/tests/mcp/__init__.py +0 -0
  39. cecli_dev-0.99.2/cecli/tools/list_changes.py +0 -71
  40. cecli_dev-0.99.2/cecli/tools/view_files_matching.py +0 -138
  41. cecli_dev-0.99.2/cecli/tools/view_files_with_symbol.py +0 -117
  42. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.dockerignore +0 -0
  43. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.flake8 +0 -0
  44. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.gitattributes +0 -0
  45. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  46. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/check_pypi_version.yml +0 -0
  47. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/docker-build-test.yml +0 -0
  48. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/docker-release.yml +0 -0
  49. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/issues.yml +0 -0
  50. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/pages.yml +0 -0
  51. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/pre-commit.yml +0 -0
  52. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/release.yml +0 -0
  53. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/ubuntu-tests.yml +0 -0
  54. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/windows-tests.yml +0 -0
  55. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.github/workflows/windows_check_pypi_version.yml +0 -0
  56. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.gitignore +0 -0
  57. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/.pre-commit-config.yaml +0 -0
  58. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/CHANGELOG.md +0 -0
  59. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/CNAME +0 -0
  60. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/CONTRIBUTING.md +0 -0
  61. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/HISTORY.md +0 -0
  62. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/LICENSE.txt +0 -0
  63. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/MANIFEST.in +0 -0
  64. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/README.md +0 -0
  65. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/Dockerfile +0 -0
  66. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/README.md +0 -0
  67. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/__init__.py +0 -0
  68. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/benchmark.py +0 -0
  69. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/benchmark_classic.py +0 -0
  70. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/clone-exercism.sh +0 -0
  71. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/cpp-test.sh +0 -0
  72. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/docker.sh +0 -0
  73. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/docker_build.sh +0 -0
  74. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/install-docker-ubuntu.sh +0 -0
  75. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/npm-test.sh +0 -0
  76. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/over_time.py +0 -0
  77. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/plot.sh +0 -0
  78. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/plots.py +0 -0
  79. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/problem_stats.py +0 -0
  80. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/prompts.py +0 -0
  81. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/refactor_tools.py +0 -0
  82. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/rsync.sh +0 -0
  83. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/rungrid.py +0 -0
  84. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/swe-bench-lite.txt +0 -0
  85. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/swe-bench.txt +0 -0
  86. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/swe_bench.py +0 -0
  87. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/test_benchmark.py +0 -0
  88. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/variations.1.sh +0 -0
  89. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/variations.2.sh +0 -0
  90. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/variations.3.sh +0 -0
  91. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/benchmark/variations.4.sh +0 -0
  92. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/__main__.py +0 -0
  93. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/args_formatter.py +0 -0
  94. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/change_tracker.py +0 -0
  95. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/__init__.py +0 -0
  96. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/architect_coder.py +0 -0
  97. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/ask_coder.py +0 -0
  98. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/chat_chunks.py +0 -0
  99. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/context_coder.py +0 -0
  100. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/copypaste_coder.py +0 -0
  101. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editblock_coder.py +0 -0
  102. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editblock_fenced_coder.py +0 -0
  103. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editblock_func_coder.py +0 -0
  104. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  105. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editor_editblock_coder.py +0 -0
  106. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/editor_whole_coder.py +0 -0
  107. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/hashline_coder.py +0 -0
  108. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/help_coder.py +0 -0
  109. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/patch_coder.py +0 -0
  110. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/search_replace.py +0 -0
  111. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/shell.py +0 -0
  112. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/single_wholefile_func_coder.py +0 -0
  113. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/udiff_coder.py +0 -0
  114. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/udiff_simple.py +0 -0
  115. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/wholefile_coder.py +0 -0
  116. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/coders/wholefile_func_coder.py +0 -0
  117. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/__init__.py +0 -0
  118. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/add.py +0 -0
  119. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/agent.py +0 -0
  120. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/agent_model.py +0 -0
  121. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/architect.py +0 -0
  122. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/ask.py +0 -0
  123. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/chat_mode.py +0 -0
  124. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/code.py +0 -0
  125. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/command_prefix.py +0 -0
  126. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/commit.py +0 -0
  127. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/compact.py +0 -0
  128. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/context.py +0 -0
  129. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/context_blocks.py +0 -0
  130. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/context_management.py +0 -0
  131. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/copy.py +0 -0
  132. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/copy_context.py +0 -0
  133. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/core.py +0 -0
  134. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/diff.py +0 -0
  135. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/drop.py +0 -0
  136. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/editor.py +0 -0
  137. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/editor_model.py +0 -0
  138. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/exit.py +0 -0
  139. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/git.py +0 -0
  140. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/hashline.py +0 -0
  141. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/help.py +0 -0
  142. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/history_search.py +0 -0
  143. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/hooks.py +0 -0
  144. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/lint.py +0 -0
  145. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/list_sessions.py +0 -0
  146. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/load.py +0 -0
  147. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/load_hook.py +0 -0
  148. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/load_mcp.py +0 -0
  149. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/load_session.py +0 -0
  150. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/load_skill.py +0 -0
  151. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/ls.py +0 -0
  152. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/map.py +0 -0
  153. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/map_refresh.py +0 -0
  154. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/model.py +0 -0
  155. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/models.py +0 -0
  156. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/multiline_mode.py +0 -0
  157. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/paste.py +0 -0
  158. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/quit.py +0 -0
  159. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/read_only.py +0 -0
  160. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/read_only_stub.py +0 -0
  161. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/reasoning_effort.py +0 -0
  162. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/remove_hook.py +0 -0
  163. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/remove_mcp.py +0 -0
  164. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/remove_skill.py +0 -0
  165. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/report.py +0 -0
  166. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/rules.py +0 -0
  167. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/run.py +0 -0
  168. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/save.py +0 -0
  169. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/save_session.py +0 -0
  170. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/settings.py +0 -0
  171. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/terminal_data/linux.keytab +0 -0
  172. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/terminal_setup.py +0 -0
  173. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/test.py +0 -0
  174. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/think_tokens.py +0 -0
  175. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/tokens.py +0 -0
  176. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/undo.py +0 -0
  177. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/utils/__init__.py +0 -0
  178. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/utils/base_command.py +0 -0
  179. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/utils/helpers.py +0 -0
  180. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/utils/registry.py +0 -0
  181. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/utils/save_load_manager.py +0 -0
  182. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/voice.py +0 -0
  183. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/weak_model.py +0 -0
  184. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/web.py +0 -0
  185. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/commands/workspace.py +0 -0
  186. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/deprecated_args.py +0 -0
  187. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/diffs.py +0 -0
  188. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/dump.py +0 -0
  189. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/editor.py +0 -0
  190. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/exceptions.py +0 -0
  191. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/format_settings.py +0 -0
  192. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/help.py +0 -0
  193. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/help_pats.py +0 -0
  194. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/__init__.py +0 -0
  195. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/background_commands.py +0 -0
  196. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/command_parser.py +0 -0
  197. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/__init__.py +0 -0
  198. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/base_message.py +0 -0
  199. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/files.py +0 -0
  200. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/manager.py +0 -0
  201. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/service.py +0 -0
  202. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/tags.py +0 -0
  203. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/conversation/utils.py +0 -0
  204. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/copypaste.py +0 -0
  205. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/coroutines.py +0 -0
  206. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/file_searcher.py +0 -0
  207. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/hashline.py +0 -0
  208. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/hashpos/__init__.py +0 -0
  209. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/hashpos/hashpos.py +0 -0
  210. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/model_providers.py +0 -0
  211. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/monorepo/__init__.py +0 -0
  212. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/monorepo/config.py +0 -0
  213. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/monorepo/project.py +0 -0
  214. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/monorepo/workspace.py +0 -0
  215. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/monorepo/worktree.py +0 -0
  216. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/nested.py +0 -0
  217. {cecli_dev-0.99.2/cecli/prompts → cecli_dev-0.99.3/cecli/helpers/observations}/__init__.py +0 -0
  218. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/plugin_manager.py +0 -0
  219. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/profiler.py +0 -0
  220. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/requests.py +0 -0
  221. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/responses.py +0 -0
  222. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/similarity.py +0 -0
  223. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/helpers/skills.py +0 -0
  224. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/history.py +0 -0
  225. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/__init__.py +0 -0
  226. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/base.py +0 -0
  227. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/integration.py +0 -0
  228. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/manager.py +0 -0
  229. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/registry.py +0 -0
  230. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/hooks/types.py +0 -0
  231. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/interruptible_input.py +0 -0
  232. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/io.py +0 -0
  233. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/linter.py +0 -0
  234. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/llm.py +0 -0
  235. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/main.py +0 -0
  236. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mcp/__init__.py +0 -0
  237. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mcp/manager.py +0 -0
  238. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mcp/oauth.py +0 -0
  239. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mcp/server.py +0 -0
  240. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mcp/utils.py +0 -0
  241. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/mdstream.py +0 -0
  242. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/models.py +0 -0
  243. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/onboarding.py +0 -0
  244. {cecli_dev-0.99.2/cecli/prompts/utils → cecli_dev-0.99.3/cecli/prompts}/__init__.py +0 -0
  245. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/architect.yml +0 -0
  246. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/ask.yml +0 -0
  247. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/context.yml +0 -0
  248. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/copypaste.yml +0 -0
  249. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editblock.yml +0 -0
  250. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editblock_fenced.yml +0 -0
  251. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editblock_func.yml +0 -0
  252. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editor_diff_fenced.yml +0 -0
  253. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editor_editblock.yml +0 -0
  254. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/editor_whole.yml +0 -0
  255. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/help.yml +0 -0
  256. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/patch.yml +0 -0
  257. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/single_wholefile_func.yml +0 -0
  258. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/udiff.yml +0 -0
  259. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/udiff_simple.yml +0 -0
  260. {cecli_dev-0.99.2/scripts → cecli_dev-0.99.3/cecli/prompts/utils}/__init__.py +0 -0
  261. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/utils/registry.py +0 -0
  262. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/utils/system.py +0 -0
  263. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/wholefile.yml +0 -0
  264. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/prompts/wholefile_func.yml +0 -0
  265. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  266. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  267. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  268. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  269. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  270. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  271. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  272. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  273. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  274. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  275. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  276. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  277. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  278. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  279. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  280. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  281. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  282. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  283. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  284. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  285. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  286. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  287. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  288. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  289. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  290. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  291. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  292. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  293. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  294. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  295. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  296. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/README.md +0 -0
  297. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  298. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  299. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  300. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  301. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  302. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  303. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  304. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  305. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  306. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  307. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  308. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  309. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  310. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  311. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  312. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  313. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  314. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  315. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  316. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  317. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  318. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  319. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  320. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  321. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  322. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  323. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/reasoning_tags.py +0 -0
  324. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/repo.py +0 -0
  325. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/repomap.py +0 -0
  326. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/report.py +0 -0
  327. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/resources/__init__.py +0 -0
  328. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/resources/model-metadata.json +0 -0
  329. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/resources/model-settings.yml +0 -0
  330. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/resources/providers.json +0 -0
  331. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/run_cmd.py +0 -0
  332. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/scrape.py +0 -0
  333. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/sendchat.py +0 -0
  334. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/sessions.py +0 -0
  335. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/special.py +0 -0
  336. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/command_interactive.py +0 -0
  337. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/delete_text.py +0 -0
  338. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/finished.py +0 -0
  339. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_branch.py +0 -0
  340. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_diff.py +0 -0
  341. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_log.py +0 -0
  342. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_remote.py +0 -0
  343. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_show.py +0 -0
  344. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/git_status.py +0 -0
  345. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/load_skill.py +0 -0
  346. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/remove_skill.py +0 -0
  347. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/thinking.py +0 -0
  348. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/undo_change.py +0 -0
  349. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/update_todo_list.py +0 -0
  350. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/utils/helpers.py +0 -0
  351. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/utils/output.py +0 -0
  352. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tools/utils/registry.py +0 -0
  353. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/__init__.py +0 -0
  354. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/io.py +0 -0
  355. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/__init__.py +0 -0
  356. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/completion_bar.py +0 -0
  357. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/file_list.py +0 -0
  358. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/footer.py +0 -0
  359. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/input_area.py +0 -0
  360. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/key_hints.py +0 -0
  361. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/widgets/status_bar.py +0 -0
  362. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/tui/worker.py +0 -0
  363. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/urls.py +0 -0
  364. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/utils.py +0 -0
  365. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/versioncheck.py +0 -0
  366. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/voice.py +0 -0
  367. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/waiting.py +0 -0
  368. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/watch.py +0 -0
  369. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/watch_prompts.py +0 -0
  370. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/Gemfile +0 -0
  371. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/blame.md +0 -0
  372. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/get-started.md +0 -0
  373. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/help-tip.md +0 -0
  374. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/help.md +0 -0
  375. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/install.md +0 -0
  376. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/keys.md +0 -0
  377. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/model-warnings.md +0 -0
  378. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/multi-line.md +0 -0
  379. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/python-m-aider.md +0 -0
  380. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/recording.css +0 -0
  381. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/recording.md +0 -0
  382. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_includes/works-best.md +0 -0
  383. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_features.scss +0 -0
  384. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_footer.scss +0 -0
  385. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_hero.scss +0 -0
  386. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_info.scss +0 -0
  387. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_layout.scss +0 -0
  388. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_reset.scss +0 -0
  389. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_testimonials.scss +0 -0
  390. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_typography.scss +0 -0
  391. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/_variables.scss +0 -0
  392. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/custom/custom.scss +0 -0
  393. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/_sass/global-overrides.scss +0 -0
  394. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/adv-model-settings.md +0 -0
  395. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/agent-mode.md +0 -0
  396. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/aider_conf.md +0 -0
  397. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/api-keys.md +0 -0
  398. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/custom-commands.md +0 -0
  399. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  400. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/dotenv.md +0 -0
  401. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/editor.md +0 -0
  402. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/hooks.md +0 -0
  403. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/mcp.md +0 -0
  404. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/model-aliases.md +0 -0
  405. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/options.md +0 -0
  406. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/reasoning.md +0 -0
  407. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/security.md +0 -0
  408. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/skills.md +0 -0
  409. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/tui.md +0 -0
  410. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config/workspaces.md +0 -0
  411. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/config.md +0 -0
  412. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/faq.md +0 -0
  413. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/git.md +0 -0
  414. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/index.md +0 -0
  415. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/install/docker.md +0 -0
  416. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/install/optional.md +0 -0
  417. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/install.md +0 -0
  418. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/languages.md +0 -0
  419. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  420. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/legal/privacy.md +0 -0
  421. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/anthropic.md +0 -0
  422. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/azure.md +0 -0
  423. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/bedrock.md +0 -0
  424. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/cohere.md +0 -0
  425. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/deepseek.md +0 -0
  426. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/gemini.md +0 -0
  427. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/github.md +0 -0
  428. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/groq.md +0 -0
  429. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/lm-studio.md +0 -0
  430. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/ollama.md +0 -0
  431. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/openai-compat.md +0 -0
  432. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/openai.md +0 -0
  433. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/openrouter.md +0 -0
  434. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/other.md +0 -0
  435. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/vertex.md +0 -0
  436. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/warnings.md +0 -0
  437. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms/xai.md +0 -0
  438. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/llms.md +0 -0
  439. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/more/analytics.md +0 -0
  440. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/more/edit-formats.md +0 -0
  441. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/more/infinite-output.md +0 -0
  442. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/more-info.md +0 -0
  443. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/repomap.md +0 -0
  444. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/scripting.md +0 -0
  445. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  446. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  447. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/imports.md +0 -0
  448. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  449. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/support.md +0 -0
  450. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  451. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  452. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting.md +0 -0
  453. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/commands.md +0 -0
  454. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/conventions.md +0 -0
  455. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/copypaste.md +0 -0
  456. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/images-urls.md +0 -0
  457. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/lint-test.md +0 -0
  458. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/modes.md +0 -0
  459. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/not-code.md +0 -0
  460. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/notifications.md +0 -0
  461. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/sessions.md +0 -0
  462. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/tips.md +0 -0
  463. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/voice.md +0 -0
  464. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage/watch.md +0 -0
  465. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/docs/usage.md +0 -0
  466. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli/website/share/index.md +0 -0
  467. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/dependency_links.txt +0 -0
  468. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/entry_points.txt +0 -0
  469. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/cecli_dev.egg-info/top_level.txt +0 -0
  470. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/docker/Dockerfile +0 -0
  471. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  472. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/pyproject.toml +0 -0
  473. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-dev.in +0 -0
  474. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-dev.txt +0 -0
  475. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-help.in +0 -0
  476. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-help.txt +0 -0
  477. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-playwright.in +0 -0
  478. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/requirements-playwright.txt +0 -0
  479. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/requirements/tree-sitter.in +0 -0
  480. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/30k-image.py +0 -0
  481. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/Dockerfile.jekyll +0 -0
  482. {cecli_dev-0.99.2/tests → cecli_dev-0.99.3/scripts}/__init__.py +0 -0
  483. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/blame.py +0 -0
  484. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/clean_metadata.py +0 -0
  485. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/cost_analyzer.py +0 -0
  486. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/dl_icons.py +0 -0
  487. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/filter-chat-mode.js +0 -0
  488. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/generate_providers.py +0 -0
  489. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/get_contributor_list.js +0 -0
  490. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/get_hashline.py +0 -0
  491. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/history_prompts.py +0 -0
  492. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/homepage.py +0 -0
  493. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/issues.py +0 -0
  494. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/jekyll_build.sh +0 -0
  495. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/jekyll_run.sh +0 -0
  496. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/logo_svg.py +0 -0
  497. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/pip-compile.sh +0 -0
  498. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/recording_audio.py +0 -0
  499. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/redact-cast.py +0 -0
  500. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/rename_to_cecli.py +0 -0
  501. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/tmux_record.sh +0 -0
  502. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/tsl_pack_langs.py +0 -0
  503. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/update-blame.sh +0 -0
  504. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/update-docs.sh +0 -0
  505. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/update-history.py +0 -0
  506. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/versionbump.py +0 -0
  507. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/scripts/yank-old-versions.py +0 -0
  508. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/setup.cfg +0 -0
  509. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/shim.pyproject.toml +0 -0
  510. {cecli_dev-0.99.2/tests/basic → cecli_dev-0.99.3/tests}/__init__.py +0 -0
  511. {cecli_dev-0.99.2/tests/hooks → cecli_dev-0.99.3/tests/basic}/__init__.py +0 -0
  512. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_aws_credentials.py +0 -0
  513. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_background_commands.py +0 -0
  514. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_coder.py +0 -0
  515. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_commands.py +0 -0
  516. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_custom_commands.py +0 -0
  517. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_deprecated.py +0 -0
  518. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_editblock.py +0 -0
  519. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_editor.py +0 -0
  520. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_exceptions.py +0 -0
  521. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_hashline.py +0 -0
  522. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_history.py +0 -0
  523. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_io.py +0 -0
  524. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_linter.py +0 -0
  525. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_main.py +0 -0
  526. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_model_info_manager.py +0 -0
  527. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_model_provider_manager.py +0 -0
  528. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_models.py +0 -0
  529. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_onboarding.py +0 -0
  530. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_plugin_manager.py +0 -0
  531. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_prompts.py +0 -0
  532. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_reasoning.py +0 -0
  533. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_repomap.py +0 -0
  534. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_run_cmd.py +0 -0
  535. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_sanity_check_repo.py +0 -0
  536. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_scripting.py +0 -0
  537. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_sendchat.py +0 -0
  538. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_sessions.py +0 -0
  539. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_skills.py +0 -0
  540. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_special.py +0 -0
  541. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_ssl_verification.py +0 -0
  542. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_udiff.py +0 -0
  543. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_urls.py +0 -0
  544. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_voice.py +0 -0
  545. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_watch.py +0 -0
  546. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/basic/test_wholefile.py +0 -0
  547. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/coders/test_copypaste_coder.py +0 -0
  548. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/conftest.py +0 -0
  549. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/conversations/test_conversation_integration.py +0 -0
  550. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/conversations/test_conversation_system.py +0 -0
  551. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  552. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/chat-history.md +0 -0
  553. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/arduino/test.ino +0 -0
  554. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/c/test.c +0 -0
  555. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/chatito/test.chatito +0 -0
  556. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/clojure/test.clj +0 -0
  557. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  558. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/cpp/test.cpp +0 -0
  559. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/csharp/test.cs +0 -0
  560. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/d/test.d +0 -0
  561. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/dart/test.dart +0 -0
  562. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/elisp/test.el +0 -0
  563. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/elixir/test.ex +0 -0
  564. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/elm/test.elm +0 -0
  565. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/gleam/test.gleam +0 -0
  566. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/go/test.go +0 -0
  567. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/haskell/test.hs +0 -0
  568. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/hcl/test.tf +0 -0
  569. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/java/test.java +0 -0
  570. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/javascript/test.js +0 -0
  571. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/kotlin/test.kt +0 -0
  572. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/lua/test.lua +0 -0
  573. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/matlab/test.m +0 -0
  574. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/ocaml/test.ml +0 -0
  575. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  576. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/php/test.php +0 -0
  577. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/pony/test.pony +0 -0
  578. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/properties/test.properties +0 -0
  579. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/python/test.py +0 -0
  580. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/ql/test.ql +0 -0
  581. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/r/test.r +0 -0
  582. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/racket/test.rkt +0 -0
  583. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/ruby/test.rb +0 -0
  584. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/rust/test.rs +0 -0
  585. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/scala/test.scala +0 -0
  586. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/solidity/test.sol +0 -0
  587. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/swift/test.swift +0 -0
  588. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/tsx/test.tsx +0 -0
  589. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/typescript/test.ts +0 -0
  590. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/udev/test.rules +0 -0
  591. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/languages/zig/test.zig +0 -0
  592. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base/sample.js +0 -0
  593. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base/sample.py +0 -0
  594. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  595. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/watch.js +0 -0
  596. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/watch.lisp +0 -0
  597. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/watch.py +0 -0
  598. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/fixtures/watch_question.js +0 -0
  599. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/help/test_help.py +0 -0
  600. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_config.py +0 -0
  601. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_config_active.py +0 -0
  602. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  603. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  604. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_workspace.py +0 -0
  605. {cecli_dev-0.99.2/tests/mcp → cecli_dev-0.99.3/tests/hooks}/__init__.py +0 -0
  606. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/hooks/test_base.py +0 -0
  607. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/hooks/test_manager.py +0 -0
  608. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/hooks/test_registry.py +0 -0
  609. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/mcp/test_manager.py +0 -0
  610. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/scrape/test_playwright_disable.py +0 -0
  611. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/scrape/test_scrape.py +0 -0
  612. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_git_branch.py +0 -0
  613. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_git_diff.py +0 -0
  614. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_grep.py +0 -0
  615. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_insert_block.py +0 -0
  616. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_registry.py +0 -0
  617. {cecli_dev-0.99.2 → cecli_dev-0.99.3}/tests/tools/test_show_context.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.2
3
+ Version: 0.99.3
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -52,6 +52,7 @@ Requires-Dist: textual>=6.0.0
52
52
  Requires-Dist: tomlkit>=0.14.0
53
53
  Requires-Dist: truststore
54
54
  Requires-Dist: xxhash>=3.6.0
55
+ Requires-Dist: py-cymbal>=0.1.5
55
56
  Requires-Dist: rustworkx>=0.15.0
56
57
  Requires-Dist: scipy>=1.15.3
57
58
  Requires-Dist: importlib-metadata>=7.2.1
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.99.2.dev"
3
+ __version__ = "0.99.3.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -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.2'
22
- __version_tuple__ = version_tuple = (0, 99, 2)
21
+ __version__ = version = '0.99.3'
22
+ __version_tuple__ = version_tuple = (0, 99, 3)
23
23
 
24
- __commit_id__ = commit_id = 'g7361036c0'
24
+ __commit_id__ = commit_id = 'g2909d229a'
@@ -593,6 +593,12 @@ def get_parser(default_config_files, git_root):
593
593
  help="Show token processing and generation speed in usage report (default: False)",
594
594
  default=False,
595
595
  )
596
+ group.add_argument(
597
+ "--use-reminders",
598
+ action=argparse.BooleanOptionalAction,
599
+ default=True,
600
+ help="Enable/disable injecting reminder messages (default: True)",
601
+ )
596
602
  group.add_argument(
597
603
  "--completion-menu-color",
598
604
  metavar="COLOR",
@@ -25,6 +25,7 @@ from cecli.helpers.skills import SkillsManager
25
25
  from cecli.hooks import HookIntegration
26
26
  from cecli.llm import litellm
27
27
  from cecli.mcp import LocalServer, McpServerManager
28
+ from cecli.tools.utils.base_tool import BaseTool
28
29
  from cecli.tools.utils.registry import ToolRegistry
29
30
  from cecli.utils import copy_tool_call, tool_call_to_dict
30
31
 
@@ -52,12 +53,9 @@ class AgentCoder(Coder):
52
53
  self.read_tools = {
53
54
  "command",
54
55
  "commandinteractive",
55
- "viewfilesatglob",
56
- "viewfilesmatching",
56
+ "exploresymbols",
57
57
  "ls",
58
- "viewfileswithsymbol",
59
58
  "grep",
60
- "listchanges",
61
59
  "showcontext",
62
60
  "thinking",
63
61
  "updatetodolist",
@@ -328,7 +326,7 @@ class AgentCoder(Coder):
328
326
  {"role": "tool", "tool_call_id": tool_call.id, "content": result_message}
329
327
  )
330
328
 
331
- if self.auto_lint and used_write_tool and not self.edit_allowed:
329
+ if self.auto_lint and used_write_tool:
332
330
  edited = list(self.files_edited_by_tools)
333
331
  lint_errors = self.lint_edited(edited, show_output=False)
334
332
  self.lint_outcome = not lint_errors
@@ -1160,7 +1158,7 @@ I will proceed based on the tool results and updated context.""")
1160
1158
 
1161
1159
  Parameters:
1162
1160
  - file_path: Path to the file to add
1163
- - explicit: Whether this was an explicit view command (vs. implicit through ViewFilesMatching)
1161
+ - explicit: Whether this was an explicit view command (vs. implicit through other tools)
1164
1162
  """
1165
1163
  abs_path = self.abs_root_path(file_path)
1166
1164
  rel_path = self.get_rel_fname(abs_path)
@@ -1205,7 +1203,7 @@ I will proceed based on the tool results and updated context.""")
1205
1203
 
1206
1204
  Override parent's method to disable implicit file mention handling in agent mode.
1207
1205
  Files should only be added via explicit tool commands
1208
- (`View`, `ViewFilesAtGlob`, `ViewFilesMatching`, `ViewFilesWithSymbol`).
1206
+ (`ContextManager`).
1209
1207
  """
1210
1208
  pass
1211
1209
 
@@ -1217,6 +1215,7 @@ I will proceed based on the tool results and updated context.""")
1217
1215
  inp = await super().preproc_user_input(inp)
1218
1216
  inp = self.wrap_user_input(inp)
1219
1217
 
1218
+ BaseTool.clear_invocation_cache()
1220
1219
  self.agent_finished = False
1221
1220
  self.turn_count = 0
1222
1221
  return inp
@@ -42,6 +42,7 @@ from cecli.commands import Commands, SwitchCoderSignal
42
42
  from cecli.exceptions import LiteLLMExceptions
43
43
  from cecli.helpers import command_parser, coroutines, nested, responses
44
44
  from cecli.helpers.conversation import ConversationService, MessageTag
45
+ from cecli.helpers.observations.manager import ObservationManager
45
46
  from cecli.helpers.profiler import TokenProfiler
46
47
  from cecli.history import ChatSummary
47
48
  from cecli.hooks import HookIntegration
@@ -441,6 +442,7 @@ class Coder:
441
442
 
442
443
  # Initialize conversation system if enabled
443
444
  ConversationService.get_chunks(self).initialize_conversation_system()
445
+ self.observation_manager = ObservationManager.get_instance(self)
444
446
 
445
447
  self.commands = commands or Commands(self.io, self, args=args)
446
448
  self.commands.coder = self
@@ -921,10 +923,10 @@ class Coder:
921
923
  file_stub = RepoMap.get_file_stub(fname, self.io)
922
924
 
923
925
  # Add message about showing definitions instead of full content
924
- self.io.tool_output(
925
- f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
926
- "Use /context-management to toggle truncation off if needed."
927
- )
926
+ # self.io.tool_output(
927
+ # f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
928
+ # "Use /context-management to toggle truncation off if needed."
929
+ # )
928
930
 
929
931
  # Add a message in the content itself so the model knows it's truncated
930
932
  truncation_note = (
@@ -989,10 +991,10 @@ class Coder:
989
991
  file_stub = RepoMap.get_file_stub(fname, self.io)
990
992
 
991
993
  # Add message about showing definitions instead of full content
992
- self.io.tool_output(
993
- f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
994
- "Use /context-management to toggle truncation off if needed."
995
- )
994
+ # self.io.tool_output(
995
+ # f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
996
+ # "Use /context-management to toggle truncation off if needed."
997
+ # )
996
998
 
997
999
  # Add a message in the content itself so the model knows it's truncated
998
1000
  truncation_note = (
@@ -1746,11 +1748,14 @@ class Coder:
1746
1748
  if not self.enable_context_compaction:
1747
1749
  return
1748
1750
 
1749
- # Check if combined messages exceed the token limit,
1750
- # Get messages from ConversationManager
1751
- done_messages = ConversationService.get_manager(self).get_messages_dict(MessageTag.DONE)
1752
- cur_messages = ConversationService.get_manager(self).get_messages_dict(MessageTag.CUR)
1753
- diff_messages = ConversationService.get_manager(self).get_messages_dict(MessageTag.DIFFS)
1751
+ # Trigger background observation/reflection check
1752
+ await self.observation_manager.check_and_trigger()
1753
+
1754
+ manager = ConversationService.get_manager(self)
1755
+ done_messages = manager.get_messages_dict(MessageTag.DONE)
1756
+ cur_messages = manager.get_messages_dict(MessageTag.CUR)
1757
+ diff_messages = manager.get_messages_dict(MessageTag.DIFFS)
1758
+
1754
1759
  # Exclude first cur_message since that's the user's initial input
1755
1760
  done_tokens = self.summarizer.count_tokens(done_messages)
1756
1761
  cur_tokens = self.summarizer.count_tokens(cur_messages[1:] if len(cur_messages) > 1 else [])
@@ -1768,129 +1773,97 @@ class Coder:
1768
1773
  self.io.update_spinner("Compacting...")
1769
1774
 
1770
1775
  try:
1771
- # Check if done_messages alone exceed the limit
1772
- if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
1773
- # Create a summary of the done_messages
1774
- # Append custom message to compaction prompt if provided
1775
- compaction_prompt = self.gpt_prompts.compaction_prompt
1776
- if message:
1777
- compaction_prompt = f"{compaction_prompt}\n\n{message}"
1778
-
1779
- summary_text = await self.summarizer.summarize_all_as_text(
1780
- done_messages,
1776
+ compaction_prompt = self.gpt_prompts.compaction_prompt
1777
+ if message:
1778
+ compaction_prompt = f"{compaction_prompt}\n\n{message}"
1779
+
1780
+ async def summarize_and_update(messages, tag):
1781
+ text = await self.summarizer.summarize_all_as_text(
1782
+ messages,
1781
1783
  compaction_prompt,
1782
1784
  self.context_compaction_summary_tokens,
1783
1785
  )
1786
+ if not text:
1787
+ raise ValueError(f"Summarization of {tag} messages returned empty.")
1784
1788
 
1785
- if not summary_text:
1786
- raise ValueError("Summarization returned an empty result.")
1789
+ if self.observation_manager.observations:
1790
+ obs_text = "\n".join(self.observation_manager.observations)
1791
+ text = f"HISTORICAL OBSERVATIONS:\n{obs_text}\n\n{text}"
1787
1792
 
1788
- # Replace old DONE messages with the summary in ConversationManager
1789
- ConversationService.get_manager(self).clear_tag(MessageTag.DONE)
1790
- ConversationService.get_manager(self).add_message(
1791
- message_dict={
1792
- "role": "user",
1793
- "content": summary_text,
1794
- },
1795
- tag=MessageTag.DONE,
1796
- )
1797
- ConversationService.get_manager(self).add_message(
1798
- message_dict={
1799
- "role": "assistant",
1800
- "content": (
1801
- "Ok, I will use this summary as the context for our conversation going"
1802
- " forward."
1803
- ),
1804
- },
1805
- tag=MessageTag.DONE,
1806
- )
1793
+ manager.clear_tag(tag)
1807
1794
 
1808
- # Check if cur_messages alone exceed the limit (after potentially compacting done_messages)
1809
- if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
1810
- # Create a summary of the cur_messages
1811
- # Append custom message to compaction prompt if provided
1812
- compaction_prompt = self.gpt_prompts.compaction_prompt
1813
- if message:
1814
- compaction_prompt = f"{compaction_prompt}\n\n{message}"
1815
-
1816
- cur_summary_text = await self.summarizer.summarize_all_as_text(
1817
- cur_messages,
1818
- compaction_prompt,
1819
- self.context_compaction_summary_tokens,
1820
- )
1821
-
1822
- if not cur_summary_text:
1823
- raise ValueError("Summarization of current messages returned an empty result.")
1795
+ if tag == MessageTag.DONE:
1796
+ manager.add_message({"role": "user", "content": text}, tag=tag)
1797
+ manager.add_message(
1798
+ {
1799
+ "role": "assistant",
1800
+ "content": (
1801
+ "Ok, I will use this summary and the observations as context for"
1802
+ " our conversation going forward."
1803
+ ),
1804
+ },
1805
+ tag=tag,
1806
+ )
1807
+ else:
1808
+ if self.last_user_message:
1809
+ manager.add_message(
1810
+ {"role": "user", "content": self.last_user_message}, tag=tag
1811
+ )
1824
1812
 
1825
- # Replace current CUR messages with the summary in ConversationManager
1826
- ConversationService.get_manager(self).clear_tag(MessageTag.CUR)
1813
+ manager.add_message(
1814
+ {
1815
+ "role": "assistant",
1816
+ "content": "Ok. I am awaiting your summary of our goals to proceed.",
1817
+ },
1818
+ tag=tag,
1819
+ force=True,
1820
+ )
1827
1821
 
1828
- if self.last_user_message:
1829
- ConversationService.get_manager(self).add_message(
1830
- message_dict={
1822
+ manager.add_message(
1823
+ {
1831
1824
  "role": "user",
1832
- "content": self.last_user_message,
1825
+ "content": (
1826
+ "Here is a summary of our current goals and historical"
1827
+ f" context:\n{text}"
1828
+ ),
1833
1829
  },
1834
- tag=MessageTag.CUR,
1830
+ tag=tag,
1835
1831
  )
1836
1832
 
1837
- # Add the summary conversation
1838
- ConversationService.get_manager(self).add_message(
1839
- message_dict={
1840
- "role": "assistant",
1841
- "content": "Ok. I am awaiting your summary of our goals to proceed.",
1842
- },
1843
- tag=MessageTag.CUR,
1844
- force=True,
1845
- )
1846
- ConversationService.get_manager(self).add_message(
1847
- message_dict={
1848
- "role": "user",
1849
- "content": f"Here is a summary of our current goals:\n{cur_summary_text}",
1850
- },
1851
- tag=MessageTag.CUR,
1852
- )
1853
- ConversationService.get_manager(self).add_message(
1854
- message_dict={
1855
- "role": "assistant",
1856
- "content": (
1857
- "Ok, I will use this summary and proceed with our task."
1858
- " I will first apply any changes in the summary and then"
1859
- " continue exploration as necessary."
1860
- ),
1861
- },
1862
- tag=MessageTag.CUR,
1863
- force=True,
1864
- )
1865
-
1866
- # Find the last assistant messages in the current conversation
1867
- latest_messages = []
1833
+ manager.add_message(
1834
+ {
1835
+ "role": "assistant",
1836
+ "content": (
1837
+ "Ok, I will use this summary and proceed with our task. I will"
1838
+ " first apply any changes in the summary and then continue"
1839
+ " exploration as necessary."
1840
+ ),
1841
+ },
1842
+ tag=tag,
1843
+ force=True,
1844
+ )
1868
1845
 
1869
- # Search from the end to find the most recent assistant messages
1870
- for msg in reversed(cur_messages):
1871
- latest_messages.append(msg)
1846
+ latest_messages = []
1847
+ for msg in reversed(messages):
1848
+ latest_messages.append(msg)
1849
+ if msg["role"] == "assistant":
1850
+ break
1851
+ for msg in reversed(latest_messages):
1852
+ manager.add_message(msg, tag=tag)
1872
1853
 
1873
- if msg["role"] == "assistant":
1874
- break
1854
+ if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
1855
+ await summarize_and_update(done_messages, MessageTag.DONE)
1875
1856
 
1876
- for msg in reversed(latest_messages):
1877
- ConversationService.get_manager(self).add_message(
1878
- message_dict={
1879
- "role": msg["role"],
1880
- "content": msg["content"],
1881
- },
1882
- tag=MessageTag.CUR,
1883
- )
1857
+ if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
1858
+ await summarize_and_update(cur_messages, MessageTag.CUR)
1884
1859
 
1885
1860
  self.io.tool_output("...chat history compacted.")
1886
1861
  self.io.update_spinner(self.io.last_spinner_text)
1887
1862
 
1888
- # Clear all diff and file context messages
1889
- ConversationService.get_manager(self).clear_tag(MessageTag.DIFFS)
1890
- ConversationService.get_manager(self).clear_tag(MessageTag.FILE_CONTEXTS)
1891
-
1892
- # Reset ConversationFiles cache entirely
1863
+ manager.clear_tag(MessageTag.DIFFS)
1864
+ manager.clear_tag(MessageTag.FILE_CONTEXTS)
1893
1865
  ConversationService.get_files(self).clear_file_cache()
1866
+
1894
1867
  except Exception as e:
1895
1868
  self.io.tool_warning(f"Context compaction failed: {e}")
1896
1869
  self.io.tool_warning("Proceeding with full history for now.")
@@ -2233,10 +2206,11 @@ class Coder:
2233
2206
 
2234
2207
  self.multi_response_content = ""
2235
2208
  if self.show_pretty():
2236
- spinner_text = (
2237
- f"Waiting for {self.get_active_model().name} •"
2238
- f" ${self.format_cost(self.total_cost)} session"
2239
- )
2209
+ spinner_text = f"Waiting for {self.get_active_model().name}"
2210
+
2211
+ if not self.tui:
2212
+ spinner_text += f" • ${self.format_cost(self.total_cost)} session"
2213
+
2240
2214
  self.io.start_spinner(spinner_text)
2241
2215
  if self.stream:
2242
2216
  self.mdstream = True
@@ -3541,13 +3515,18 @@ class Coder:
3541
3515
 
3542
3516
  self.message_tokens_received += completion_tokens
3543
3517
 
3544
- tokens_report = f"Tokens: {format_tokens(self.message_tokens_sent)} sent"
3518
+ # Build the new streamlined format
3519
+ tokens_parts = [format_tokens(prompt_tokens)]
3545
3520
 
3546
- if cache_write_tokens:
3547
- tokens_report += f", {format_tokens(cache_write_tokens)} cache write"
3548
3521
  if cache_hit_tokens:
3549
- tokens_report += f", {format_tokens(cache_hit_tokens)} cache hit"
3550
- tokens_report += f", {format_tokens(self.message_tokens_received)} received."
3522
+ tokens_parts.append(f"{format_tokens(cache_hit_tokens)}")
3523
+ if cache_write_tokens:
3524
+ tokens_parts.append(f"{format_tokens(cache_write_tokens)}")
3525
+
3526
+ tokens_str = "/".join(tokens_parts)
3527
+
3528
+ tokens_report = f"{tokens_str} ↑ {format_tokens(completion_tokens)} ↓"
3529
+
3551
3530
  tokens_report = self.token_profiler.add_to_usage_report(
3552
3531
  tokens_report, self.message_tokens_sent, self.message_tokens_received
3553
3532
  )
@@ -3570,9 +3549,12 @@ class Coder:
3570
3549
  self.total_cost += cost
3571
3550
  self.message_cost += cost
3572
3551
 
3552
+ total_combined_tokens = (
3553
+ self.total_tokens_sent + self.total_tokens_received + prompt_tokens + completion_tokens
3554
+ )
3573
3555
  cost_report = (
3574
- f"Cost: ${self.format_cost(self.message_cost)} message,"
3575
- f" ${self.format_cost(self.total_cost)} session."
3556
+ f"${self.format_cost(self.message_cost)} • {format_tokens(total_combined_tokens)} ↑↓"
3557
+ f" ${self.format_cost(self.total_cost)}"
3576
3558
  )
3577
3559
 
3578
3560
  if cache_hit_tokens and cache_write_tokens:
@@ -3630,8 +3612,11 @@ class Coder:
3630
3612
  self.total_tokens_sent += self.message_tokens_sent
3631
3613
  self.total_tokens_received += self.message_tokens_received
3632
3614
 
3633
- self.io.tool_output(self.usage_report)
3634
- self.io.rule()
3615
+ if self.tui and self.tui():
3616
+ self.tui().update_cost(self.usage_report.replace("\n", " "))
3617
+ else:
3618
+ self.io.tool_output(self.usage_report)
3619
+ self.io.rule()
3635
3620
 
3636
3621
  self.message_cost = 0.0
3637
3622
  self.message_tokens_sent = 0
@@ -19,6 +19,7 @@ class ClearCommand(BaseCommand):
19
19
  ConversationService.get_manager(coder).clear_tag(MessageTag.FILE_CONTEXTS)
20
20
 
21
21
  ConversationService.get_files(coder).reset()
22
+ coder.observation_manager.reset()
22
23
 
23
24
  # Clear TUI output if available
24
25
  if coder.tui and coder.tui():
@@ -22,6 +22,7 @@ class ResetCommand(BaseCommand):
22
22
  # Re-initialize Conversation components with current coder
23
23
  ConversationService.get_manager(coder).initialize(reformat=True)
24
24
  ConversationService.get_files(coder) # Ensure instance exists/initialized
25
+ coder.observation_manager.reset()
25
26
 
26
27
  # Clear TUI output if available
27
28
  if coder.tui and coder.tui():
@@ -85,7 +85,12 @@ class ConversationChunks:
85
85
  )
86
86
 
87
87
  # Add system reminder as a pre-prompt context block
88
- if hasattr(coder.gpt_prompts, "system_reminder") and coder.gpt_prompts.system_reminder:
88
+ use_reminders = getattr(coder.args, "use_reminders", True)
89
+ if (
90
+ use_reminders
91
+ and hasattr(coder.gpt_prompts, "system_reminder")
92
+ and coder.gpt_prompts.system_reminder
93
+ ):
89
94
  msg = dict(
90
95
  role="user",
91
96
  content=coder.fmt_system_prompt(coder.gpt_prompts.system_reminder),
@@ -235,7 +240,8 @@ class ConversationChunks:
235
240
  for f in editable_rel_files:
236
241
  reminder_lines.append(f" - {f}")
237
242
 
238
- if len(reminder_lines) > 1: # Only add reminder if there are files
243
+ use_reminders = getattr(coder.args, "use_reminders", True)
244
+ if use_reminders and len(reminder_lines) > 1: # Only add reminder if there are files
239
245
  reminder_lines.append("</context>\n")
240
246
  reminder_content = "\n".join(reminder_lines)
241
247
  ConversationService.get_manager(coder).add_message(
@@ -0,0 +1,98 @@
1
+ import asyncio
2
+ from datetime import datetime
3
+
4
+ from cecli.helpers.conversation.service import ConversationService
5
+ from cecli.helpers.conversation.tags import MessageTag
6
+
7
+
8
+ class ObservationManager:
9
+ _instances = {}
10
+
11
+ @classmethod
12
+ def get_instance(cls, coder):
13
+ if coder.uuid not in cls._instances:
14
+ cls._instances[coder.uuid] = cls(coder)
15
+ return cls._instances[coder.uuid]
16
+
17
+ def __init__(self, coder):
18
+ self.coder = coder
19
+ self.observation_threshold = max((coder.context_compaction_max_tokens or 0) / 3, 20000)
20
+ self.reflection_threshold = self.observation_threshold * 2
21
+ self.is_processing = False
22
+ self._last_observed_index = 0
23
+ self.observations = [] # Internal storage
24
+
25
+ async def check_and_trigger(self):
26
+ if self.is_processing:
27
+ return
28
+
29
+ manager = ConversationService.get_manager(self.coder)
30
+ cur_messages = manager.get_messages_dict(MessageTag.CUR)
31
+
32
+ # Calculate unobserved tokens
33
+ unobserved = cur_messages[self._last_observed_index :]
34
+ if not unobserved:
35
+ return
36
+
37
+ tokens = self.coder.summarizer.count_tokens(unobserved)
38
+
39
+ if tokens >= self.observation_threshold:
40
+ asyncio.create_task(self.run_observation(unobserved))
41
+ self._last_observed_index = len(cur_messages)
42
+
43
+ obs_tokens = self.coder.summarizer.count_tokens(
44
+ [{"role": "user", "content": o} for o in self.observations]
45
+ )
46
+
47
+ if obs_tokens >= self.reflection_threshold:
48
+ asyncio.create_task(self.run_reflection())
49
+
50
+ async def run_observation(self, messages):
51
+ self.is_processing = True
52
+ try:
53
+ manager = ConversationService.get_manager(self.coder)
54
+ all_messages = manager.get_messages_dict()
55
+ prompt = self.coder.gpt_prompts.observation_prompt
56
+ observation = await self.coder.summarizer.summarize_all_as_text(
57
+ all_messages, prompt, max_tokens=8192
58
+ )
59
+ self.observations.append(self.format_observation(observation))
60
+ except asyncio.CancelledError:
61
+ raise
62
+ except Exception as e:
63
+ self.coder.io.tool_error(f"Error during observation: {e}")
64
+ finally:
65
+ self.is_processing = False
66
+
67
+ async def run_reflection(self):
68
+ self.is_processing = True
69
+ try:
70
+ # Prepare observations for the reflector
71
+ obs_text = "\n".join([f"- {o}" for o in self.observations])
72
+
73
+ # Use the Reflector to condense and get next steps
74
+ reflection_prompt = self.coder.gpt_prompts.reflection_prompt
75
+ reflection = await self.coder.summarizer.summarize_all_as_text(
76
+ [{"role": "user", "content": obs_text}],
77
+ reflection_prompt,
78
+ max_tokens=8192,
79
+ )
80
+
81
+ # 1. Internal State Update: Store the condensed log internally
82
+ self.observations = [reflection]
83
+
84
+ self._last_observed_index = 0
85
+ except asyncio.CancelledError:
86
+ raise
87
+ except Exception as e:
88
+ self.coder.io.tool_error(f"Error during reflection: {e}")
89
+ finally:
90
+ self.is_processing = False
91
+
92
+ def reset(self):
93
+ self.observations = []
94
+ self._last_observed_index = 0
95
+
96
+ def format_observation(self, text):
97
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
98
+ return f"[{timestamp}] {text}"
@@ -17,16 +17,16 @@ files_no_full_files_with_repo_map: |
17
17
  main_system: |
18
18
  <context name="role_and_directives">
19
19
  ## Core Directives
20
- **Act Proactively**: Autonomously use discovery and management tools (`ViewFilesAtGlob`, `ViewFilesMatching`, `Ls`, `ContextManager`) to fulfill the request. Chain tool calls across multiple turns for continuous exploration.
20
+ **Act Proactively**: Autonomously use discovery and management tools to fulfill the request. Chain tool calls across multiple turns for continuous exploration.
21
21
  **Be Decisive**: Trust your findings. Do not repeat identical searches or ask redundant questions.
22
- **Be Efficient**: Batch tool calls when tools allow you to. Respect usage limits while maximizing the utility of each turn.
22
+ **Be Efficient**: You may use multiple tools each turn. Batch tool calls when tools allow you to. Respect usage limits while maximizing the utility of each turn.
23
23
  **Be Persistent**: Do not take short cuts. Work through your task until completion. No task takes too long as long as you are making progress towards the goal.
24
24
  </context>
25
25
 
26
26
  <context name="file_format">
27
27
  ### 1. FILE FORMAT
28
- Files are provided in "hashline" format. Each line starts with a case-sensitive content hash followed by `::`.
29
- Do not attempt to write these content hashes. They are automatically generated, maintained, and subject to change.
28
+ Files are provided in "hashline" format. Each line starts with a case-sensitive content hash followed by `::`. These are used as identifiers for editing tools.
29
+ Do not attempt to search for these content hashes. They are automatically generated, maintained, and subject to change.
30
30
 
31
31
  **Example File Format :**
32
32
  il9n::#!/usr/bin/env python3
@@ -39,8 +39,8 @@ main_system: |
39
39
  <context name="workflow_and_tool_usage">
40
40
  ## Core Workflow
41
41
  1. **Plan**: Start by using `UpdateTodoList` to outline the task.
42
- 2. **Explore**: Use `Grep` for broad searches. If results exceed 50 matches, refine your pattern immediately. Use discovery tools to add files as context.
43
- 3. **Execute**: Use the appropriate editing tool. Mark files as editable with `ContextManager` when needed. Proactively use skills if they are available.
42
+ 2. **Explore**: Use discovery tools (`ExploreSymbols`, `Grep`, `Ls`) to research and gather understanding for you task. Use `ContextManager` to add files contents as context.
43
+ 3. **Execute**: Use the appropriate editing tool. Mark files as editable with `ContextManager` before attempting edits. Proactively use skills if they are available.
44
44
  4. **Verify & Recover**: Review the diff output of every edit. If an edit fails or introduces linting errors, use `UndoChange` immediately.
45
45
  5. **Finished**: Use the `Finished` tool only after verifying the solution. Briefly summarize the changes for the user.
46
46
 
@@ -65,7 +65,7 @@ system_reminder: |
65
65
  <context name="critical_reminders">
66
66
  ## Reminders
67
67
  **Strict Scope**: Stay on task. Do not alter functionality and syntax that is out of scope or pursue unrequested refactors. Do not attempt to modify large files in one shot. Work step by step.
68
- **Context Hygiene**: Remove files and loaded skills from context using `ContextManager` or `RemoveSkill` once they are no longer needed to save tokens and prevent confusion.
68
+ **Context Hygiene**: Remove files and loaded skills from context using `ContextManager` and/or `RemoveSkill` once they are no longer needed to save tokens and prevent confusion.
69
69
  **Turn Management**: Tool calls trigger the next turn. Do not include tool calls in your final summary to the user. You must use `ShowContext` to view the relevant hashline range before each edit.
70
70
  **Sandbox**: Use `.cecli/temp` for all verification and temporary logic.
71
71
  **Novelty**: Do not repeat phrases in your responses to the user. You do not need to declare you understand the task. Simply proceed. Only give status updates when you have new information.