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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/PKG-INFO +2 -1
  2. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/args.py +6 -0
  5. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/agent_coder.py +12 -13
  6. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/base_coder.py +118 -133
  7. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/clear.py +1 -0
  8. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/load_hook.py +22 -18
  9. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/load_mcp.py +16 -19
  10. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/load_skill.py +13 -8
  11. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/remove_hook.py +21 -17
  12. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/remove_mcp.py +12 -12
  13. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/remove_skill.py +13 -8
  14. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/reset.py +1 -0
  15. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/files.py +2 -2
  16. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/integration.py +10 -4
  17. cecli_dev-0.99.4/cecli/helpers/observations/manager.py +98 -0
  18. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/agent.yml +13 -12
  19. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/base.yml +29 -15
  20. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/hashline.yml +2 -1
  21. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/__init__.py +2 -6
  22. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/command.py +51 -4
  23. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/context_manager.py +33 -0
  24. cecli_dev-0.99.4/cecli/tools/explore_symbols.py +287 -0
  25. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/grep.py +51 -0
  26. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/insert_text.py +2 -2
  27. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/ls.py +26 -0
  28. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/replace_text.py +2 -2
  29. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/show_context.py +36 -2
  30. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/utils/base_tool.py +35 -1
  31. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/app.py +8 -0
  32. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/styles.tcss +1 -0
  33. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/input_container.py +5 -0
  34. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/output.py +2 -2
  35. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/PKG-INFO +2 -1
  36. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/SOURCES.txt +4 -3
  37. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/requires.txt +1 -0
  38. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/pytest.ini +1 -0
  39. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/common-constraints.txt +2 -0
  40. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements.in +1 -0
  41. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements.txt +4 -0
  42. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_find_or_blocks.py +8 -4
  43. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_repo.py +36 -24
  44. cecli_dev-0.99.4/tests/helpers/observations/test_observation_manager.py +185 -0
  45. cecli_dev-0.99.4/tests/mcp/__init__.py +0 -0
  46. cecli_dev-0.99.2/cecli/tools/list_changes.py +0 -71
  47. cecli_dev-0.99.2/cecli/tools/view_files_matching.py +0 -138
  48. cecli_dev-0.99.2/cecli/tools/view_files_with_symbol.py +0 -117
  49. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.dockerignore +0 -0
  50. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.flake8 +0 -0
  51. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.gitattributes +0 -0
  52. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  53. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/check_pypi_version.yml +0 -0
  54. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/docker-build-test.yml +0 -0
  55. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/docker-release.yml +0 -0
  56. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/issues.yml +0 -0
  57. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/pages.yml +0 -0
  58. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/pre-commit.yml +0 -0
  59. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/release.yml +0 -0
  60. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/ubuntu-tests.yml +0 -0
  61. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/windows-tests.yml +0 -0
  62. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.github/workflows/windows_check_pypi_version.yml +0 -0
  63. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.gitignore +0 -0
  64. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/.pre-commit-config.yaml +0 -0
  65. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/CHANGELOG.md +0 -0
  66. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/CNAME +0 -0
  67. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/CONTRIBUTING.md +0 -0
  68. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/HISTORY.md +0 -0
  69. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/LICENSE.txt +0 -0
  70. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/MANIFEST.in +0 -0
  71. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/README.md +0 -0
  72. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/Dockerfile +0 -0
  73. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/README.md +0 -0
  74. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/__init__.py +0 -0
  75. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/benchmark.py +0 -0
  76. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/benchmark_classic.py +0 -0
  77. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/clone-exercism.sh +0 -0
  78. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/cpp-test.sh +0 -0
  79. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/docker.sh +0 -0
  80. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/docker_build.sh +0 -0
  81. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/install-docker-ubuntu.sh +0 -0
  82. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/npm-test.sh +0 -0
  83. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/over_time.py +0 -0
  84. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/plot.sh +0 -0
  85. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/plots.py +0 -0
  86. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/problem_stats.py +0 -0
  87. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/prompts.py +0 -0
  88. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/refactor_tools.py +0 -0
  89. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/rsync.sh +0 -0
  90. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/rungrid.py +0 -0
  91. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/swe-bench-lite.txt +0 -0
  92. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/swe-bench.txt +0 -0
  93. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/swe_bench.py +0 -0
  94. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/test_benchmark.py +0 -0
  95. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/variations.1.sh +0 -0
  96. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/variations.2.sh +0 -0
  97. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/variations.3.sh +0 -0
  98. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/benchmark/variations.4.sh +0 -0
  99. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/__main__.py +0 -0
  100. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/args_formatter.py +0 -0
  101. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/change_tracker.py +0 -0
  102. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/__init__.py +0 -0
  103. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/architect_coder.py +0 -0
  104. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/ask_coder.py +0 -0
  105. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/chat_chunks.py +0 -0
  106. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/context_coder.py +0 -0
  107. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/copypaste_coder.py +0 -0
  108. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editblock_coder.py +0 -0
  109. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editblock_fenced_coder.py +0 -0
  110. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editblock_func_coder.py +0 -0
  111. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  112. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editor_editblock_coder.py +0 -0
  113. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/editor_whole_coder.py +0 -0
  114. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/hashline_coder.py +0 -0
  115. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/help_coder.py +0 -0
  116. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/patch_coder.py +0 -0
  117. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/search_replace.py +0 -0
  118. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/shell.py +0 -0
  119. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/single_wholefile_func_coder.py +0 -0
  120. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/udiff_coder.py +0 -0
  121. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/udiff_simple.py +0 -0
  122. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/wholefile_coder.py +0 -0
  123. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/coders/wholefile_func_coder.py +0 -0
  124. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/__init__.py +0 -0
  125. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/add.py +0 -0
  126. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/agent.py +0 -0
  127. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/agent_model.py +0 -0
  128. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/architect.py +0 -0
  129. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/ask.py +0 -0
  130. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/chat_mode.py +0 -0
  131. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/code.py +0 -0
  132. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/command_prefix.py +0 -0
  133. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/commit.py +0 -0
  134. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/compact.py +0 -0
  135. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/context.py +0 -0
  136. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/context_blocks.py +0 -0
  137. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/context_management.py +0 -0
  138. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/copy.py +0 -0
  139. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/copy_context.py +0 -0
  140. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/core.py +0 -0
  141. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/diff.py +0 -0
  142. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/drop.py +0 -0
  143. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/editor.py +0 -0
  144. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/editor_model.py +0 -0
  145. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/exit.py +0 -0
  146. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/git.py +0 -0
  147. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/hashline.py +0 -0
  148. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/help.py +0 -0
  149. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/history_search.py +0 -0
  150. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/hooks.py +0 -0
  151. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/lint.py +0 -0
  152. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/list_sessions.py +0 -0
  153. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/load.py +0 -0
  154. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/load_session.py +0 -0
  155. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/ls.py +0 -0
  156. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/map.py +0 -0
  157. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/map_refresh.py +0 -0
  158. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/model.py +0 -0
  159. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/models.py +0 -0
  160. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/multiline_mode.py +0 -0
  161. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/paste.py +0 -0
  162. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/quit.py +0 -0
  163. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/read_only.py +0 -0
  164. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/read_only_stub.py +0 -0
  165. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/reasoning_effort.py +0 -0
  166. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/report.py +0 -0
  167. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/rules.py +0 -0
  168. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/run.py +0 -0
  169. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/save.py +0 -0
  170. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/save_session.py +0 -0
  171. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/settings.py +0 -0
  172. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/terminal_data/linux.keytab +0 -0
  173. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/terminal_setup.py +0 -0
  174. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/test.py +0 -0
  175. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/think_tokens.py +0 -0
  176. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/tokens.py +0 -0
  177. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/undo.py +0 -0
  178. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/utils/__init__.py +0 -0
  179. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/utils/base_command.py +0 -0
  180. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/utils/helpers.py +0 -0
  181. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/utils/registry.py +0 -0
  182. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/utils/save_load_manager.py +0 -0
  183. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/voice.py +0 -0
  184. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/weak_model.py +0 -0
  185. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/web.py +0 -0
  186. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/commands/workspace.py +0 -0
  187. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/deprecated_args.py +0 -0
  188. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/diffs.py +0 -0
  189. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/dump.py +0 -0
  190. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/editor.py +0 -0
  191. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/exceptions.py +0 -0
  192. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/format_settings.py +0 -0
  193. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/help.py +0 -0
  194. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/help_pats.py +0 -0
  195. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/__init__.py +0 -0
  196. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/background_commands.py +0 -0
  197. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/command_parser.py +0 -0
  198. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/__init__.py +0 -0
  199. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/base_message.py +0 -0
  200. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/manager.py +0 -0
  201. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/service.py +0 -0
  202. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/tags.py +0 -0
  203. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/conversation/utils.py +0 -0
  204. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/copypaste.py +0 -0
  205. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/coroutines.py +0 -0
  206. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/file_searcher.py +0 -0
  207. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/hashline.py +0 -0
  208. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/hashpos/__init__.py +0 -0
  209. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/hashpos/hashpos.py +0 -0
  210. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/model_providers.py +0 -0
  211. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/monorepo/__init__.py +0 -0
  212. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/monorepo/config.py +0 -0
  213. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/monorepo/project.py +0 -0
  214. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/monorepo/workspace.py +0 -0
  215. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/monorepo/worktree.py +0 -0
  216. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/nested.py +0 -0
  217. {cecli_dev-0.99.2/cecli/prompts → cecli_dev-0.99.4/cecli/helpers/observations}/__init__.py +0 -0
  218. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/plugin_manager.py +0 -0
  219. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/profiler.py +0 -0
  220. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/requests.py +0 -0
  221. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/responses.py +0 -0
  222. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/similarity.py +0 -0
  223. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/helpers/skills.py +0 -0
  224. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/history.py +0 -0
  225. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/__init__.py +0 -0
  226. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/base.py +0 -0
  227. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/integration.py +0 -0
  228. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/manager.py +0 -0
  229. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/registry.py +0 -0
  230. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/hooks/types.py +0 -0
  231. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/interruptible_input.py +0 -0
  232. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/io.py +0 -0
  233. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/linter.py +0 -0
  234. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/llm.py +0 -0
  235. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/main.py +0 -0
  236. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mcp/__init__.py +0 -0
  237. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mcp/manager.py +0 -0
  238. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mcp/oauth.py +0 -0
  239. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mcp/server.py +0 -0
  240. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mcp/utils.py +0 -0
  241. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/mdstream.py +0 -0
  242. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/models.py +0 -0
  243. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/onboarding.py +0 -0
  244. {cecli_dev-0.99.2/cecli/prompts/utils → cecli_dev-0.99.4/cecli/prompts}/__init__.py +0 -0
  245. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/architect.yml +0 -0
  246. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/ask.yml +0 -0
  247. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/context.yml +0 -0
  248. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/copypaste.yml +0 -0
  249. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editblock.yml +0 -0
  250. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editblock_fenced.yml +0 -0
  251. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editblock_func.yml +0 -0
  252. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editor_diff_fenced.yml +0 -0
  253. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editor_editblock.yml +0 -0
  254. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/editor_whole.yml +0 -0
  255. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/help.yml +0 -0
  256. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/patch.yml +0 -0
  257. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/single_wholefile_func.yml +0 -0
  258. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/udiff.yml +0 -0
  259. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/udiff_simple.yml +0 -0
  260. {cecli_dev-0.99.2/scripts → cecli_dev-0.99.4/cecli/prompts/utils}/__init__.py +0 -0
  261. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/utils/registry.py +0 -0
  262. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/utils/system.py +0 -0
  263. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/wholefile.yml +0 -0
  264. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/prompts/wholefile_func.yml +0 -0
  265. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  266. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  267. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  268. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  269. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  270. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  271. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  272. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  273. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  274. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  275. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  276. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  277. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  278. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  279. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  280. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  281. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  282. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  283. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  284. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  285. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  286. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  287. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  288. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  289. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  290. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  291. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  292. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  293. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  294. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  295. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  296. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/README.md +0 -0
  297. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  298. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  299. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  300. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  301. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  302. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  303. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  304. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  305. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  306. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  307. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  308. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  309. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  310. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  311. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  312. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  313. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  314. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  315. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  316. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  317. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  318. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  319. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  320. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  321. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  322. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  323. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/reasoning_tags.py +0 -0
  324. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/repo.py +0 -0
  325. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/repomap.py +0 -0
  326. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/report.py +0 -0
  327. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/resources/__init__.py +0 -0
  328. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/resources/model-metadata.json +0 -0
  329. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/resources/model-settings.yml +0 -0
  330. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/resources/providers.json +0 -0
  331. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/run_cmd.py +0 -0
  332. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/scrape.py +0 -0
  333. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/sendchat.py +0 -0
  334. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/sessions.py +0 -0
  335. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/special.py +0 -0
  336. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/command_interactive.py +0 -0
  337. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/delete_text.py +0 -0
  338. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/finished.py +0 -0
  339. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_branch.py +0 -0
  340. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_diff.py +0 -0
  341. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_log.py +0 -0
  342. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_remote.py +0 -0
  343. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_show.py +0 -0
  344. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/git_status.py +0 -0
  345. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/load_skill.py +0 -0
  346. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/remove_skill.py +0 -0
  347. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/thinking.py +0 -0
  348. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/undo_change.py +0 -0
  349. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/update_todo_list.py +0 -0
  350. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/utils/helpers.py +0 -0
  351. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/utils/output.py +0 -0
  352. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tools/utils/registry.py +0 -0
  353. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/__init__.py +0 -0
  354. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/io.py +0 -0
  355. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/__init__.py +0 -0
  356. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/completion_bar.py +0 -0
  357. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/file_list.py +0 -0
  358. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/footer.py +0 -0
  359. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/input_area.py +0 -0
  360. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/key_hints.py +0 -0
  361. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/widgets/status_bar.py +0 -0
  362. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/tui/worker.py +0 -0
  363. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/urls.py +0 -0
  364. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/utils.py +0 -0
  365. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/versioncheck.py +0 -0
  366. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/voice.py +0 -0
  367. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/waiting.py +0 -0
  368. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/watch.py +0 -0
  369. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/watch_prompts.py +0 -0
  370. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/Gemfile +0 -0
  371. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/blame.md +0 -0
  372. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/get-started.md +0 -0
  373. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/help-tip.md +0 -0
  374. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/help.md +0 -0
  375. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/install.md +0 -0
  376. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/keys.md +0 -0
  377. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/model-warnings.md +0 -0
  378. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/multi-line.md +0 -0
  379. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/python-m-aider.md +0 -0
  380. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/recording.css +0 -0
  381. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/recording.md +0 -0
  382. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_includes/works-best.md +0 -0
  383. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_features.scss +0 -0
  384. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_footer.scss +0 -0
  385. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_hero.scss +0 -0
  386. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_info.scss +0 -0
  387. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_layout.scss +0 -0
  388. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_reset.scss +0 -0
  389. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_testimonials.scss +0 -0
  390. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_typography.scss +0 -0
  391. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/_variables.scss +0 -0
  392. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/custom/custom.scss +0 -0
  393. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/_sass/global-overrides.scss +0 -0
  394. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/adv-model-settings.md +0 -0
  395. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/agent-mode.md +0 -0
  396. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/aider_conf.md +0 -0
  397. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/api-keys.md +0 -0
  398. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/custom-commands.md +0 -0
  399. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  400. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/dotenv.md +0 -0
  401. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/editor.md +0 -0
  402. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/hooks.md +0 -0
  403. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/mcp.md +0 -0
  404. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/model-aliases.md +0 -0
  405. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/options.md +0 -0
  406. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/reasoning.md +0 -0
  407. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/security.md +0 -0
  408. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/skills.md +0 -0
  409. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/tui.md +0 -0
  410. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config/workspaces.md +0 -0
  411. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/config.md +0 -0
  412. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/faq.md +0 -0
  413. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/git.md +0 -0
  414. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/index.md +0 -0
  415. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/install/docker.md +0 -0
  416. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/install/optional.md +0 -0
  417. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/install.md +0 -0
  418. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/languages.md +0 -0
  419. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  420. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/legal/privacy.md +0 -0
  421. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/anthropic.md +0 -0
  422. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/azure.md +0 -0
  423. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/bedrock.md +0 -0
  424. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/cohere.md +0 -0
  425. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/deepseek.md +0 -0
  426. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/gemini.md +0 -0
  427. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/github.md +0 -0
  428. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/groq.md +0 -0
  429. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/lm-studio.md +0 -0
  430. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/ollama.md +0 -0
  431. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/openai-compat.md +0 -0
  432. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/openai.md +0 -0
  433. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/openrouter.md +0 -0
  434. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/other.md +0 -0
  435. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/vertex.md +0 -0
  436. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/warnings.md +0 -0
  437. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms/xai.md +0 -0
  438. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/llms.md +0 -0
  439. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/more/analytics.md +0 -0
  440. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/more/edit-formats.md +0 -0
  441. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/more/infinite-output.md +0 -0
  442. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/more-info.md +0 -0
  443. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/repomap.md +0 -0
  444. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/scripting.md +0 -0
  445. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  446. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  447. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/imports.md +0 -0
  448. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  449. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/support.md +0 -0
  450. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  451. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  452. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/troubleshooting.md +0 -0
  453. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/commands.md +0 -0
  454. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/conventions.md +0 -0
  455. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/copypaste.md +0 -0
  456. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/images-urls.md +0 -0
  457. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/lint-test.md +0 -0
  458. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/modes.md +0 -0
  459. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/not-code.md +0 -0
  460. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/notifications.md +0 -0
  461. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/sessions.md +0 -0
  462. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/tips.md +0 -0
  463. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/voice.md +0 -0
  464. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage/watch.md +0 -0
  465. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/docs/usage.md +0 -0
  466. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli/website/share/index.md +0 -0
  467. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/dependency_links.txt +0 -0
  468. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/entry_points.txt +0 -0
  469. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/cecli_dev.egg-info/top_level.txt +0 -0
  470. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/docker/Dockerfile +0 -0
  471. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  472. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/pyproject.toml +0 -0
  473. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-dev.in +0 -0
  474. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-dev.txt +0 -0
  475. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-help.in +0 -0
  476. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-help.txt +0 -0
  477. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-playwright.in +0 -0
  478. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/requirements-playwright.txt +0 -0
  479. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/requirements/tree-sitter.in +0 -0
  480. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/30k-image.py +0 -0
  481. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/Dockerfile.jekyll +0 -0
  482. {cecli_dev-0.99.2/tests → cecli_dev-0.99.4/scripts}/__init__.py +0 -0
  483. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/blame.py +0 -0
  484. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/clean_metadata.py +0 -0
  485. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/cost_analyzer.py +0 -0
  486. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/dl_icons.py +0 -0
  487. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/filter-chat-mode.js +0 -0
  488. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/generate_providers.py +0 -0
  489. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/get_contributor_list.js +0 -0
  490. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/get_hashline.py +0 -0
  491. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/history_prompts.py +0 -0
  492. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/homepage.py +0 -0
  493. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/issues.py +0 -0
  494. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/jekyll_build.sh +0 -0
  495. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/jekyll_run.sh +0 -0
  496. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/logo_svg.py +0 -0
  497. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/pip-compile.sh +0 -0
  498. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/recording_audio.py +0 -0
  499. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/redact-cast.py +0 -0
  500. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/rename_to_cecli.py +0 -0
  501. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/tmux_record.sh +0 -0
  502. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/tsl_pack_langs.py +0 -0
  503. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/update-blame.sh +0 -0
  504. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/update-docs.sh +0 -0
  505. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/update-history.py +0 -0
  506. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/versionbump.py +0 -0
  507. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/scripts/yank-old-versions.py +0 -0
  508. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/setup.cfg +0 -0
  509. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/shim.pyproject.toml +0 -0
  510. {cecli_dev-0.99.2/tests/basic → cecli_dev-0.99.4/tests}/__init__.py +0 -0
  511. {cecli_dev-0.99.2/tests/hooks → cecli_dev-0.99.4/tests/basic}/__init__.py +0 -0
  512. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_aws_credentials.py +0 -0
  513. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_background_commands.py +0 -0
  514. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_coder.py +0 -0
  515. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_commands.py +0 -0
  516. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_custom_commands.py +0 -0
  517. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_deprecated.py +0 -0
  518. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_editblock.py +0 -0
  519. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_editor.py +0 -0
  520. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_exceptions.py +0 -0
  521. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_hashline.py +0 -0
  522. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_history.py +0 -0
  523. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_io.py +0 -0
  524. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_linter.py +0 -0
  525. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_main.py +0 -0
  526. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_model_info_manager.py +0 -0
  527. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_model_provider_manager.py +0 -0
  528. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_models.py +0 -0
  529. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_onboarding.py +0 -0
  530. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_plugin_manager.py +0 -0
  531. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_prompts.py +0 -0
  532. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_reasoning.py +0 -0
  533. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_repomap.py +0 -0
  534. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_run_cmd.py +0 -0
  535. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_sanity_check_repo.py +0 -0
  536. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_scripting.py +0 -0
  537. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_sendchat.py +0 -0
  538. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_sessions.py +0 -0
  539. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_skills.py +0 -0
  540. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_special.py +0 -0
  541. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_ssl_verification.py +0 -0
  542. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_udiff.py +0 -0
  543. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_urls.py +0 -0
  544. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_voice.py +0 -0
  545. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_watch.py +0 -0
  546. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/basic/test_wholefile.py +0 -0
  547. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/coders/test_copypaste_coder.py +0 -0
  548. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/conftest.py +0 -0
  549. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/conversations/test_conversation_integration.py +0 -0
  550. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/conversations/test_conversation_system.py +0 -0
  551. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  552. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/chat-history.md +0 -0
  553. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/arduino/test.ino +0 -0
  554. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/c/test.c +0 -0
  555. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/chatito/test.chatito +0 -0
  556. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/clojure/test.clj +0 -0
  557. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  558. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/cpp/test.cpp +0 -0
  559. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/csharp/test.cs +0 -0
  560. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/d/test.d +0 -0
  561. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/dart/test.dart +0 -0
  562. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/elisp/test.el +0 -0
  563. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/elixir/test.ex +0 -0
  564. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/elm/test.elm +0 -0
  565. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/gleam/test.gleam +0 -0
  566. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/go/test.go +0 -0
  567. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/haskell/test.hs +0 -0
  568. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/hcl/test.tf +0 -0
  569. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/java/test.java +0 -0
  570. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/javascript/test.js +0 -0
  571. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/kotlin/test.kt +0 -0
  572. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/lua/test.lua +0 -0
  573. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/matlab/test.m +0 -0
  574. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/ocaml/test.ml +0 -0
  575. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  576. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/php/test.php +0 -0
  577. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/pony/test.pony +0 -0
  578. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/properties/test.properties +0 -0
  579. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/python/test.py +0 -0
  580. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/ql/test.ql +0 -0
  581. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/r/test.r +0 -0
  582. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/racket/test.rkt +0 -0
  583. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/ruby/test.rb +0 -0
  584. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/rust/test.rs +0 -0
  585. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/scala/test.scala +0 -0
  586. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/solidity/test.sol +0 -0
  587. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/swift/test.swift +0 -0
  588. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/tsx/test.tsx +0 -0
  589. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/typescript/test.ts +0 -0
  590. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/udev/test.rules +0 -0
  591. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/languages/zig/test.zig +0 -0
  592. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/sample-code-base/sample.js +0 -0
  593. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/sample-code-base/sample.py +0 -0
  594. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  595. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/watch.js +0 -0
  596. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/watch.lisp +0 -0
  597. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/watch.py +0 -0
  598. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/fixtures/watch_question.js +0 -0
  599. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/help/test_help.py +0 -0
  600. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/helpers/monorepo/test_config.py +0 -0
  601. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/helpers/monorepo/test_config_active.py +0 -0
  602. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  603. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  604. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/helpers/monorepo/test_workspace.py +0 -0
  605. {cecli_dev-0.99.2/tests/mcp → cecli_dev-0.99.4/tests/hooks}/__init__.py +0 -0
  606. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/hooks/test_base.py +0 -0
  607. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/hooks/test_manager.py +0 -0
  608. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/hooks/test_registry.py +0 -0
  609. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/mcp/test_manager.py +0 -0
  610. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/scrape/test_playwright_disable.py +0 -0
  611. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/scrape/test_scrape.py +0 -0
  612. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/tools/test_git_branch.py +0 -0
  613. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/tools/test_git_diff.py +0 -0
  614. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/tools/test_grep.py +0 -0
  615. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/tools/test_insert_block.py +0 -0
  616. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/tests/tools/test_registry.py +0 -0
  617. {cecli_dev-0.99.2 → cecli_dev-0.99.4}/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.4
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -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.6
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.4'
22
+ __version_tuple__ = version_tuple = (0, 99, 4)
23
23
 
24
- __commit_id__ = commit_id = 'g7361036c0'
24
+ __commit_id__ = commit_id = 'g25cca8975'
@@ -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
@@ -1018,25 +1016,25 @@ I will proceed based on the tool results and updated context.""")
1018
1016
 
1019
1017
  if not self.model_kwargs:
1020
1018
  self.model_kwargs = {
1021
- "temperature": default_temp + 0.1,
1022
- "frequency_penalty": default_fp + 0.2,
1019
+ "temperature": default_temp + 2**-5,
1020
+ "frequency_penalty": default_fp + 2**-5,
1023
1021
  # "presence_penalty": 0.1,
1024
1022
  }
1025
1023
  else:
1026
1024
  temperature = nested.getter(self.model_kwargs, "temperature", default_temp)
1027
1025
  freq_penalty = nested.getter(self.model_kwargs, "frequency_penalty", default_fp)
1028
1026
 
1029
- self.model_kwargs["temperature"] = temperature + 0.1
1030
- self.model_kwargs["frequency_penalty"] = freq_penalty + 0.1
1027
+ self.model_kwargs["temperature"] = temperature + 2**-5
1028
+ self.model_kwargs["frequency_penalty"] = freq_penalty + 2**-5
1031
1029
 
1032
1030
  if random.random() < 0.2:
1033
1031
  self.model_kwargs["temperature"] = max(
1034
1032
  default_temp,
1035
- temperature - 0.15,
1033
+ temperature - 2**-4,
1036
1034
  )
1037
1035
  self.model_kwargs["frequency_penalty"] = max(
1038
1036
  default_fp,
1039
- freq_penalty - 0.15,
1037
+ freq_penalty - 2**-4,
1040
1038
  )
1041
1039
 
1042
1040
  self.model_kwargs["temperature"] = max(
@@ -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
@@ -2763,8 +2737,8 @@ class Coder:
2763
2737
  message_dict=tool_response,
2764
2738
  tag=MessageTag.CUR,
2765
2739
  hash_key=(tool_response["tool_call_id"], str(time.monotonic_ns())),
2766
- promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
2767
- mark_for_demotion=1,
2740
+ # promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
2741
+ # mark_for_demotion=1,
2768
2742
  )
2769
2743
 
2770
2744
  return bool(tool_responses)
@@ -2951,8 +2925,8 @@ class Coder:
2951
2925
  message_dict=msg,
2952
2926
  tag=MessageTag.CUR,
2953
2927
  hash_key=("assistant_message", str(msg), str(time.monotonic_ns())),
2954
- promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
2955
- mark_for_demotion=1,
2928
+ # promotion=ConversationService.get_manager(self).DEFAULT_TAG_PROMOTION_VALUE,
2929
+ # mark_for_demotion=1,
2956
2930
  )
2957
2931
 
2958
2932
  def get_file_mentions(self, content, ignore_current=False):
@@ -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():
@@ -15,24 +15,28 @@ class LoadHookCommand(BaseCommand):
15
15
  if not args.strip():
16
16
  io.tool_error("Usage: /load-hook <hook-name>")
17
17
  return 1
18
-
19
- hook_name = args.strip()
20
-
21
- # Check if hook exists
18
+ hook_names = args.strip().split()
22
19
  hook_manager = HookManager()
23
- if not hook_manager.hook_exists(hook_name):
24
- io.tool_error(f"Error: Hook '{hook_name}' not found")
25
- return 1
20
+ results = []
21
+ errors = 0
26
22
 
27
- # Enable the hook
28
- success = hook_manager.enable_hook(hook_name)
23
+ for hook_name in hook_names:
24
+ if not hook_manager.hook_exists(hook_name):
25
+ io.tool_error(f"Error: Hook '{hook_name}' not found")
26
+ results.append(f"Hook '{hook_name}' not found")
27
+ errors += 1
28
+ continue
29
29
 
30
- if success:
31
- io.tool_output(f"Hook '{hook_name}' enabled successfully")
32
- return 0
33
- else:
34
- io.tool_error(f"Error: Failed to enable hook '{hook_name}'")
35
- return 1
30
+ success = hook_manager.enable_hook(hook_name)
31
+ if success:
32
+ io.tool_output(f"Hook '{hook_name}' enabled successfully")
33
+ results.append(f"Hook '{hook_name}' enabled")
34
+ else:
35
+ io.tool_error(f"Error: Failed to enable hook '{hook_name}'")
36
+ results.append(f"Failed to enable hook '{hook_name}'")
37
+ errors += 1
38
+
39
+ return 0 if errors == 0 else 1
36
40
 
37
41
  @classmethod
38
42
  def get_completions(cls, io, coder, args) -> List[str]:
@@ -58,10 +62,10 @@ class LoadHookCommand(BaseCommand):
58
62
  """Get help text for the load-hook command."""
59
63
  help_text = super().get_help()
60
64
  help_text += "\nUsage:\n"
61
- help_text += " /load-hook <hook-name> # Enable a specific hook\n"
65
+ help_text += " /load-hook <hook-name>... # Enable one or more hooks\n"
62
66
  help_text += "\nExamples:\n"
63
67
  help_text += " /load-hook my_start_hook\n"
64
- help_text += " /load-hook check_commands\n"
65
- help_text += "\nThis command enables a hook that was previously disabled.\n"
68
+ help_text += " /load-hook check_commands my_start_hook\n"
69
+ help_text += "\nThis command enables one or more hooks that were previously disabled.\n"
66
70
  help_text += "Use /hooks to see all available hooks and their current state.\n"
67
71
  return help_text
@@ -19,25 +19,22 @@ class LoadMcpCommand(BaseCommand):
19
19
  io, cls.NORM_NAME, "No MCP servers found, nothing to load."
20
20
  )
21
21
 
22
- server_name = args.strip()
23
- server = coder.mcp_manager.get_server(server_name)
24
- if server is None:
25
- return format_command_result(
26
- io, cls.NORM_NAME, "", f"MCP server {server_name} does not exist."
27
- )
28
-
29
- did_connect = await coder.mcp_manager.connect_server(server.name)
30
-
31
- if not did_connect:
32
- return format_command_result(io, cls.NORM_NAME, f"Unable to load server: {server_name}")
22
+ server_names = args.strip().split()
23
+ results = []
24
+ for server_name in server_names:
25
+ server = coder.mcp_manager.get_server(server_name)
26
+ if server is None:
27
+ results.append(f"MCP server {server_name} does not exist.")
28
+ continue
33
29
 
34
- try:
30
+ did_connect = await coder.mcp_manager.connect_server(server.name)
35
31
  if did_connect:
36
- return format_command_result(io, cls.NORM_NAME, f"Loaded server: {server_name}")
32
+ results.append(f"Loaded server: {server_name}")
37
33
  else:
38
- return format_command_result(
39
- io, cls.NORM_NAME, "", f"Unable to Load server: {server_name}"
40
- )
34
+ results.append(f"Unable to load server: {server_name}")
35
+
36
+ try:
37
+ return format_command_result(io, cls.NORM_NAME, "\n".join(results))
41
38
  finally:
42
39
  from . import SwitchCoderSignal
43
40
 
@@ -69,9 +66,9 @@ class LoadMcpCommand(BaseCommand):
69
66
  """Get help text for the load-mcp command."""
70
67
  help_text = super().get_help()
71
68
  help_text += "\nUsage:\n"
72
- help_text += " /load-mcp <mcp-name> # Load a mcp by name\n"
69
+ help_text += " /load-mcp <mcp-name>... # Load one or more mcps by name\n"
73
70
  help_text += "\nExamples:\n"
74
71
  help_text += " /load-mcp context7 # Load the context7 mcp\n"
75
- help_text += " /load-mcp github # Load the github mcp\n"
76
- help_text += "\nThis command loads a MCP server by name.\n"
72
+ help_text += " /load-mcp github context7 # Load both github and context7 mcps\n"
73
+ help_text += "\nThis command loads one or more MCP servers by name.\n"
77
74
  return help_text