cecli-dev 0.99.1__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.1 → cecli_dev-0.99.3}/PKG-INFO +2 -1
  2. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/args.py +6 -0
  5. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/agent_coder.py +8 -9
  6. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/base_coder.py +145 -137
  7. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/clear.py +1 -0
  8. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/reset.py +1 -0
  9. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/integration.py +8 -2
  10. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/monorepo/project.py +1 -0
  11. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/monorepo/workspace.py +11 -0
  12. cecli_dev-0.99.3/cecli/helpers/observations/manager.py +98 -0
  13. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/skills.py +33 -1
  14. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/io.py +25 -13
  15. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/main.py +1 -1
  16. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/agent.yml +17 -18
  17. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/base.yml +29 -15
  18. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/hashline.yml +2 -1
  19. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/repo.py +105 -12
  20. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/resources/model-metadata.json +1343 -195
  21. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/__init__.py +2 -6
  22. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/command.py +51 -4
  23. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/context_manager.py +33 -0
  24. cecli_dev-0.99.3/cecli/tools/explore_symbols.py +287 -0
  25. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/grep.py +51 -0
  26. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/insert_text.py +2 -2
  27. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/ls.py +25 -0
  28. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/replace_text.py +2 -2
  29. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/show_context.py +36 -2
  30. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/utils/base_tool.py +24 -2
  31. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/app.py +8 -0
  32. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/styles.tcss +1 -0
  33. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/input_container.py +5 -0
  34. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/output.py +2 -2
  35. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/agent-mode.md +1 -0
  36. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/skills.md +113 -6
  37. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/workspaces.md +1 -0
  38. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/PKG-INFO +2 -1
  39. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/SOURCES.txt +5 -3
  40. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/requires.txt +1 -0
  41. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/pytest.ini +1 -0
  42. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/common-constraints.txt +2 -0
  43. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements.in +1 -0
  44. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements.txt +4 -0
  45. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_find_or_blocks.py +8 -4
  46. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_repo.py +36 -24
  47. cecli_dev-0.99.3/tests/helpers/monorepo/test_ignore_logic.py +103 -0
  48. cecli_dev-0.99.3/tests/helpers/observations/test_observation_manager.py +185 -0
  49. cecli_dev-0.99.3/tests/mcp/__init__.py +0 -0
  50. cecli_dev-0.99.1/cecli/tools/list_changes.py +0 -71
  51. cecli_dev-0.99.1/cecli/tools/view_files_matching.py +0 -138
  52. cecli_dev-0.99.1/cecli/tools/view_files_with_symbol.py +0 -117
  53. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.dockerignore +0 -0
  54. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.flake8 +0 -0
  55. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.gitattributes +0 -0
  56. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  57. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/check_pypi_version.yml +0 -0
  58. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/docker-build-test.yml +0 -0
  59. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/docker-release.yml +0 -0
  60. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/issues.yml +0 -0
  61. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/pages.yml +0 -0
  62. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/pre-commit.yml +0 -0
  63. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/release.yml +0 -0
  64. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/ubuntu-tests.yml +0 -0
  65. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/windows-tests.yml +0 -0
  66. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.github/workflows/windows_check_pypi_version.yml +0 -0
  67. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.gitignore +0 -0
  68. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/.pre-commit-config.yaml +0 -0
  69. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/CHANGELOG.md +0 -0
  70. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/CNAME +0 -0
  71. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/CONTRIBUTING.md +0 -0
  72. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/HISTORY.md +0 -0
  73. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/LICENSE.txt +0 -0
  74. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/MANIFEST.in +0 -0
  75. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/README.md +0 -0
  76. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/Dockerfile +0 -0
  77. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/README.md +0 -0
  78. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/__init__.py +0 -0
  79. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/benchmark.py +0 -0
  80. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/benchmark_classic.py +0 -0
  81. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/clone-exercism.sh +0 -0
  82. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/cpp-test.sh +0 -0
  83. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/docker.sh +0 -0
  84. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/docker_build.sh +0 -0
  85. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/install-docker-ubuntu.sh +0 -0
  86. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/npm-test.sh +0 -0
  87. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/over_time.py +0 -0
  88. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/plot.sh +0 -0
  89. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/plots.py +0 -0
  90. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/problem_stats.py +0 -0
  91. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/prompts.py +0 -0
  92. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/refactor_tools.py +0 -0
  93. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/rsync.sh +0 -0
  94. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/rungrid.py +0 -0
  95. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/swe-bench-lite.txt +0 -0
  96. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/swe-bench.txt +0 -0
  97. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/swe_bench.py +0 -0
  98. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/test_benchmark.py +0 -0
  99. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/variations.1.sh +0 -0
  100. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/variations.2.sh +0 -0
  101. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/variations.3.sh +0 -0
  102. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/benchmark/variations.4.sh +0 -0
  103. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/__main__.py +0 -0
  104. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/args_formatter.py +0 -0
  105. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/change_tracker.py +0 -0
  106. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/__init__.py +0 -0
  107. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/architect_coder.py +0 -0
  108. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/ask_coder.py +0 -0
  109. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/chat_chunks.py +0 -0
  110. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/context_coder.py +0 -0
  111. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/copypaste_coder.py +0 -0
  112. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editblock_coder.py +0 -0
  113. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editblock_fenced_coder.py +0 -0
  114. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editblock_func_coder.py +0 -0
  115. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  116. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editor_editblock_coder.py +0 -0
  117. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/editor_whole_coder.py +0 -0
  118. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/hashline_coder.py +0 -0
  119. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/help_coder.py +0 -0
  120. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/patch_coder.py +0 -0
  121. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/search_replace.py +0 -0
  122. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/shell.py +0 -0
  123. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/single_wholefile_func_coder.py +0 -0
  124. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/udiff_coder.py +0 -0
  125. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/udiff_simple.py +0 -0
  126. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/wholefile_coder.py +0 -0
  127. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/coders/wholefile_func_coder.py +0 -0
  128. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/__init__.py +0 -0
  129. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/add.py +0 -0
  130. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/agent.py +0 -0
  131. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/agent_model.py +0 -0
  132. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/architect.py +0 -0
  133. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/ask.py +0 -0
  134. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/chat_mode.py +0 -0
  135. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/code.py +0 -0
  136. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/command_prefix.py +0 -0
  137. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/commit.py +0 -0
  138. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/compact.py +0 -0
  139. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/context.py +0 -0
  140. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/context_blocks.py +0 -0
  141. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/context_management.py +0 -0
  142. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/copy.py +0 -0
  143. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/copy_context.py +0 -0
  144. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/core.py +0 -0
  145. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/diff.py +0 -0
  146. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/drop.py +0 -0
  147. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/editor.py +0 -0
  148. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/editor_model.py +0 -0
  149. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/exit.py +0 -0
  150. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/git.py +0 -0
  151. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/hashline.py +0 -0
  152. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/help.py +0 -0
  153. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/history_search.py +0 -0
  154. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/hooks.py +0 -0
  155. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/lint.py +0 -0
  156. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/list_sessions.py +0 -0
  157. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/load.py +0 -0
  158. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/load_hook.py +0 -0
  159. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/load_mcp.py +0 -0
  160. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/load_session.py +0 -0
  161. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/load_skill.py +0 -0
  162. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/ls.py +0 -0
  163. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/map.py +0 -0
  164. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/map_refresh.py +0 -0
  165. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/model.py +0 -0
  166. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/models.py +0 -0
  167. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/multiline_mode.py +0 -0
  168. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/paste.py +0 -0
  169. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/quit.py +0 -0
  170. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/read_only.py +0 -0
  171. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/read_only_stub.py +0 -0
  172. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/reasoning_effort.py +0 -0
  173. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/remove_hook.py +0 -0
  174. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/remove_mcp.py +0 -0
  175. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/remove_skill.py +0 -0
  176. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/report.py +0 -0
  177. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/rules.py +0 -0
  178. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/run.py +0 -0
  179. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/save.py +0 -0
  180. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/save_session.py +0 -0
  181. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/settings.py +0 -0
  182. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/terminal_data/linux.keytab +0 -0
  183. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/terminal_setup.py +0 -0
  184. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/test.py +0 -0
  185. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/think_tokens.py +0 -0
  186. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/tokens.py +0 -0
  187. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/undo.py +0 -0
  188. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/utils/__init__.py +0 -0
  189. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/utils/base_command.py +0 -0
  190. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/utils/helpers.py +0 -0
  191. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/utils/registry.py +0 -0
  192. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/utils/save_load_manager.py +0 -0
  193. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/voice.py +0 -0
  194. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/weak_model.py +0 -0
  195. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/web.py +0 -0
  196. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/commands/workspace.py +0 -0
  197. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/deprecated_args.py +0 -0
  198. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/diffs.py +0 -0
  199. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/dump.py +0 -0
  200. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/editor.py +0 -0
  201. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/exceptions.py +0 -0
  202. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/format_settings.py +0 -0
  203. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/help.py +0 -0
  204. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/help_pats.py +0 -0
  205. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/__init__.py +0 -0
  206. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/background_commands.py +0 -0
  207. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/command_parser.py +0 -0
  208. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/__init__.py +0 -0
  209. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/base_message.py +0 -0
  210. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/files.py +0 -0
  211. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/manager.py +0 -0
  212. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/service.py +0 -0
  213. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/tags.py +0 -0
  214. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/conversation/utils.py +0 -0
  215. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/copypaste.py +0 -0
  216. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/coroutines.py +0 -0
  217. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/file_searcher.py +0 -0
  218. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/hashline.py +0 -0
  219. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/hashpos/__init__.py +0 -0
  220. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/hashpos/hashpos.py +0 -0
  221. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/model_providers.py +0 -0
  222. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/monorepo/__init__.py +0 -0
  223. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/monorepo/config.py +0 -0
  224. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/monorepo/worktree.py +0 -0
  225. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/nested.py +0 -0
  226. {cecli_dev-0.99.1/cecli/prompts → cecli_dev-0.99.3/cecli/helpers/observations}/__init__.py +0 -0
  227. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/plugin_manager.py +0 -0
  228. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/profiler.py +0 -0
  229. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/requests.py +0 -0
  230. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/responses.py +0 -0
  231. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/helpers/similarity.py +0 -0
  232. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/history.py +0 -0
  233. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/__init__.py +0 -0
  234. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/base.py +0 -0
  235. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/integration.py +0 -0
  236. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/manager.py +0 -0
  237. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/registry.py +0 -0
  238. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/hooks/types.py +0 -0
  239. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/interruptible_input.py +0 -0
  240. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/linter.py +0 -0
  241. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/llm.py +0 -0
  242. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mcp/__init__.py +0 -0
  243. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mcp/manager.py +0 -0
  244. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mcp/oauth.py +0 -0
  245. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mcp/server.py +0 -0
  246. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mcp/utils.py +0 -0
  247. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/mdstream.py +0 -0
  248. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/models.py +0 -0
  249. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/onboarding.py +0 -0
  250. {cecli_dev-0.99.1/cecli/prompts/utils → cecli_dev-0.99.3/cecli/prompts}/__init__.py +0 -0
  251. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/architect.yml +0 -0
  252. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/ask.yml +0 -0
  253. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/context.yml +0 -0
  254. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/copypaste.yml +0 -0
  255. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editblock.yml +0 -0
  256. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editblock_fenced.yml +0 -0
  257. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editblock_func.yml +0 -0
  258. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editor_diff_fenced.yml +0 -0
  259. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editor_editblock.yml +0 -0
  260. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/editor_whole.yml +0 -0
  261. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/help.yml +0 -0
  262. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/patch.yml +0 -0
  263. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/single_wholefile_func.yml +0 -0
  264. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/udiff.yml +0 -0
  265. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/udiff_simple.yml +0 -0
  266. {cecli_dev-0.99.1/scripts → cecli_dev-0.99.3/cecli/prompts/utils}/__init__.py +0 -0
  267. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/utils/registry.py +0 -0
  268. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/utils/system.py +0 -0
  269. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/wholefile.yml +0 -0
  270. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/prompts/wholefile_func.yml +0 -0
  271. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  272. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  273. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  274. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  275. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  276. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  277. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  278. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  279. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  280. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  281. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  282. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  283. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  284. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  285. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  286. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  287. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  288. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  289. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  290. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  291. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  292. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  293. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  294. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  295. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  296. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  297. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  298. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  299. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  300. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  301. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  302. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/README.md +0 -0
  303. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  304. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  305. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  306. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  307. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  308. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  309. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  310. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  311. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  312. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  313. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  314. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  315. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  316. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  317. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  318. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  319. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  320. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  321. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  322. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  323. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  324. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  325. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  326. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  327. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  328. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  329. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/reasoning_tags.py +0 -0
  330. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/repomap.py +0 -0
  331. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/report.py +0 -0
  332. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/resources/__init__.py +0 -0
  333. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/resources/model-settings.yml +0 -0
  334. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/resources/providers.json +0 -0
  335. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/run_cmd.py +0 -0
  336. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/scrape.py +0 -0
  337. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/sendchat.py +0 -0
  338. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/sessions.py +0 -0
  339. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/special.py +0 -0
  340. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/command_interactive.py +0 -0
  341. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/delete_text.py +0 -0
  342. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/finished.py +0 -0
  343. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_branch.py +0 -0
  344. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_diff.py +0 -0
  345. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_log.py +0 -0
  346. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_remote.py +0 -0
  347. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_show.py +0 -0
  348. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/git_status.py +0 -0
  349. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/load_skill.py +0 -0
  350. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/remove_skill.py +0 -0
  351. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/thinking.py +0 -0
  352. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/undo_change.py +0 -0
  353. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/update_todo_list.py +0 -0
  354. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/utils/helpers.py +0 -0
  355. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/utils/output.py +0 -0
  356. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tools/utils/registry.py +0 -0
  357. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/__init__.py +0 -0
  358. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/io.py +0 -0
  359. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/__init__.py +0 -0
  360. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/completion_bar.py +0 -0
  361. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/file_list.py +0 -0
  362. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/footer.py +0 -0
  363. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/input_area.py +0 -0
  364. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/key_hints.py +0 -0
  365. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/widgets/status_bar.py +0 -0
  366. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/tui/worker.py +0 -0
  367. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/urls.py +0 -0
  368. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/utils.py +0 -0
  369. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/versioncheck.py +0 -0
  370. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/voice.py +0 -0
  371. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/waiting.py +0 -0
  372. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/watch.py +0 -0
  373. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/watch_prompts.py +0 -0
  374. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/Gemfile +0 -0
  375. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/blame.md +0 -0
  376. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/get-started.md +0 -0
  377. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/help-tip.md +0 -0
  378. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/help.md +0 -0
  379. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/install.md +0 -0
  380. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/keys.md +0 -0
  381. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/model-warnings.md +0 -0
  382. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/multi-line.md +0 -0
  383. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/python-m-aider.md +0 -0
  384. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/recording.css +0 -0
  385. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/recording.md +0 -0
  386. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_includes/works-best.md +0 -0
  387. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_features.scss +0 -0
  388. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_footer.scss +0 -0
  389. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_hero.scss +0 -0
  390. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_info.scss +0 -0
  391. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_layout.scss +0 -0
  392. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_reset.scss +0 -0
  393. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_testimonials.scss +0 -0
  394. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_typography.scss +0 -0
  395. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/_variables.scss +0 -0
  396. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/custom/custom.scss +0 -0
  397. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/_sass/global-overrides.scss +0 -0
  398. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/adv-model-settings.md +0 -0
  399. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/aider_conf.md +0 -0
  400. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/api-keys.md +0 -0
  401. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/custom-commands.md +0 -0
  402. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  403. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/dotenv.md +0 -0
  404. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/editor.md +0 -0
  405. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/hooks.md +0 -0
  406. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/mcp.md +0 -0
  407. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/model-aliases.md +0 -0
  408. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/options.md +0 -0
  409. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/reasoning.md +0 -0
  410. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/security.md +0 -0
  411. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config/tui.md +0 -0
  412. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/config.md +0 -0
  413. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/faq.md +0 -0
  414. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/git.md +0 -0
  415. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/index.md +0 -0
  416. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/install/docker.md +0 -0
  417. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/install/optional.md +0 -0
  418. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/install.md +0 -0
  419. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/languages.md +0 -0
  420. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  421. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/legal/privacy.md +0 -0
  422. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/anthropic.md +0 -0
  423. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/azure.md +0 -0
  424. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/bedrock.md +0 -0
  425. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/cohere.md +0 -0
  426. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/deepseek.md +0 -0
  427. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/gemini.md +0 -0
  428. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/github.md +0 -0
  429. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/groq.md +0 -0
  430. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/lm-studio.md +0 -0
  431. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/ollama.md +0 -0
  432. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/openai-compat.md +0 -0
  433. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/openai.md +0 -0
  434. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/openrouter.md +0 -0
  435. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/other.md +0 -0
  436. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/vertex.md +0 -0
  437. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/warnings.md +0 -0
  438. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms/xai.md +0 -0
  439. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/llms.md +0 -0
  440. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/more/analytics.md +0 -0
  441. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/more/edit-formats.md +0 -0
  442. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/more/infinite-output.md +0 -0
  443. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/more-info.md +0 -0
  444. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/repomap.md +0 -0
  445. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/scripting.md +0 -0
  446. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  447. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  448. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/imports.md +0 -0
  449. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  450. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/support.md +0 -0
  451. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  452. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  453. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/troubleshooting.md +0 -0
  454. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/commands.md +0 -0
  455. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/conventions.md +0 -0
  456. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/copypaste.md +0 -0
  457. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/images-urls.md +0 -0
  458. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/lint-test.md +0 -0
  459. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/modes.md +0 -0
  460. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/not-code.md +0 -0
  461. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/notifications.md +0 -0
  462. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/sessions.md +0 -0
  463. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/tips.md +0 -0
  464. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/voice.md +0 -0
  465. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage/watch.md +0 -0
  466. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/docs/usage.md +0 -0
  467. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli/website/share/index.md +0 -0
  468. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/dependency_links.txt +0 -0
  469. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/entry_points.txt +0 -0
  470. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/cecli_dev.egg-info/top_level.txt +0 -0
  471. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/docker/Dockerfile +0 -0
  472. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  473. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/pyproject.toml +0 -0
  474. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-dev.in +0 -0
  475. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-dev.txt +0 -0
  476. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-help.in +0 -0
  477. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-help.txt +0 -0
  478. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-playwright.in +0 -0
  479. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/requirements-playwright.txt +0 -0
  480. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/requirements/tree-sitter.in +0 -0
  481. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/30k-image.py +0 -0
  482. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/Dockerfile.jekyll +0 -0
  483. {cecli_dev-0.99.1/tests → cecli_dev-0.99.3/scripts}/__init__.py +0 -0
  484. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/blame.py +0 -0
  485. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/clean_metadata.py +0 -0
  486. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/cost_analyzer.py +0 -0
  487. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/dl_icons.py +0 -0
  488. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/filter-chat-mode.js +0 -0
  489. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/generate_providers.py +0 -0
  490. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/get_contributor_list.js +0 -0
  491. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/get_hashline.py +0 -0
  492. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/history_prompts.py +0 -0
  493. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/homepage.py +0 -0
  494. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/issues.py +0 -0
  495. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/jekyll_build.sh +0 -0
  496. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/jekyll_run.sh +0 -0
  497. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/logo_svg.py +0 -0
  498. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/pip-compile.sh +0 -0
  499. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/recording_audio.py +0 -0
  500. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/redact-cast.py +0 -0
  501. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/rename_to_cecli.py +0 -0
  502. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/tmux_record.sh +0 -0
  503. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/tsl_pack_langs.py +0 -0
  504. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/update-blame.sh +0 -0
  505. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/update-docs.sh +0 -0
  506. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/update-history.py +0 -0
  507. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/versionbump.py +0 -0
  508. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/scripts/yank-old-versions.py +0 -0
  509. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/setup.cfg +0 -0
  510. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/shim.pyproject.toml +0 -0
  511. {cecli_dev-0.99.1/tests/basic → cecli_dev-0.99.3/tests}/__init__.py +0 -0
  512. {cecli_dev-0.99.1/tests/hooks → cecli_dev-0.99.3/tests/basic}/__init__.py +0 -0
  513. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_aws_credentials.py +0 -0
  514. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_background_commands.py +0 -0
  515. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_coder.py +0 -0
  516. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_commands.py +0 -0
  517. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_custom_commands.py +0 -0
  518. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_deprecated.py +0 -0
  519. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_editblock.py +0 -0
  520. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_editor.py +0 -0
  521. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_exceptions.py +0 -0
  522. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_hashline.py +0 -0
  523. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_history.py +0 -0
  524. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_io.py +0 -0
  525. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_linter.py +0 -0
  526. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_main.py +0 -0
  527. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_model_info_manager.py +0 -0
  528. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_model_provider_manager.py +0 -0
  529. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_models.py +0 -0
  530. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_onboarding.py +0 -0
  531. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_plugin_manager.py +0 -0
  532. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_prompts.py +0 -0
  533. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_reasoning.py +0 -0
  534. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_repomap.py +0 -0
  535. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_run_cmd.py +0 -0
  536. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_sanity_check_repo.py +0 -0
  537. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_scripting.py +0 -0
  538. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_sendchat.py +0 -0
  539. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_sessions.py +0 -0
  540. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_skills.py +0 -0
  541. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_special.py +0 -0
  542. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_ssl_verification.py +0 -0
  543. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_udiff.py +0 -0
  544. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_urls.py +0 -0
  545. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_voice.py +0 -0
  546. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_watch.py +0 -0
  547. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/basic/test_wholefile.py +0 -0
  548. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/coders/test_copypaste_coder.py +0 -0
  549. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/conftest.py +0 -0
  550. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/conversations/test_conversation_integration.py +0 -0
  551. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/conversations/test_conversation_system.py +0 -0
  552. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  553. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/chat-history.md +0 -0
  554. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/arduino/test.ino +0 -0
  555. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/c/test.c +0 -0
  556. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/chatito/test.chatito +0 -0
  557. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/clojure/test.clj +0 -0
  558. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  559. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/cpp/test.cpp +0 -0
  560. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/csharp/test.cs +0 -0
  561. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/d/test.d +0 -0
  562. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/dart/test.dart +0 -0
  563. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/elisp/test.el +0 -0
  564. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/elixir/test.ex +0 -0
  565. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/elm/test.elm +0 -0
  566. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/gleam/test.gleam +0 -0
  567. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/go/test.go +0 -0
  568. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/haskell/test.hs +0 -0
  569. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/hcl/test.tf +0 -0
  570. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/java/test.java +0 -0
  571. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/javascript/test.js +0 -0
  572. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/kotlin/test.kt +0 -0
  573. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/lua/test.lua +0 -0
  574. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/matlab/test.m +0 -0
  575. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/ocaml/test.ml +0 -0
  576. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  577. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/php/test.php +0 -0
  578. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/pony/test.pony +0 -0
  579. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/properties/test.properties +0 -0
  580. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/python/test.py +0 -0
  581. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/ql/test.ql +0 -0
  582. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/r/test.r +0 -0
  583. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/racket/test.rkt +0 -0
  584. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/ruby/test.rb +0 -0
  585. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/rust/test.rs +0 -0
  586. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/scala/test.scala +0 -0
  587. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/solidity/test.sol +0 -0
  588. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/swift/test.swift +0 -0
  589. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/tsx/test.tsx +0 -0
  590. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/typescript/test.ts +0 -0
  591. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/udev/test.rules +0 -0
  592. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/languages/zig/test.zig +0 -0
  593. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base/sample.js +0 -0
  594. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base/sample.py +0 -0
  595. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  596. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/watch.js +0 -0
  597. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/watch.lisp +0 -0
  598. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/watch.py +0 -0
  599. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/fixtures/watch_question.js +0 -0
  600. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/help/test_help.py +0 -0
  601. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_config.py +0 -0
  602. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_config_active.py +0 -0
  603. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  604. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/helpers/monorepo/test_workspace.py +0 -0
  605. {cecli_dev-0.99.1/tests/mcp → cecli_dev-0.99.3/tests/hooks}/__init__.py +0 -0
  606. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/hooks/test_base.py +0 -0
  607. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/hooks/test_manager.py +0 -0
  608. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/hooks/test_registry.py +0 -0
  609. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/mcp/test_manager.py +0 -0
  610. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/scrape/test_playwright_disable.py +0 -0
  611. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/scrape/test_scrape.py +0 -0
  612. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/tools/test_git_branch.py +0 -0
  613. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/tools/test_git_diff.py +0 -0
  614. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/tools/test_grep.py +0 -0
  615. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/tools/test_insert_block.py +0 -0
  616. {cecli_dev-0.99.1 → cecli_dev-0.99.3}/tests/tools/test_registry.py +0 -0
  617. {cecli_dev-0.99.1 → 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.1
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.1.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.1'
22
- __version_tuple__ = version_tuple = (0, 99, 1)
21
+ __version__ = version = '0.99.3'
22
+ __version_tuple__ = version_tuple = (0, 99, 3)
23
23
 
24
- __commit_id__ = commit_id = 'g587390916'
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",
@@ -95,7 +93,7 @@ class AgentCoder(Coder):
95
93
  super().__init__(*args, **kwargs)
96
94
 
97
95
  def _setup_agent(self):
98
- os.makedirs(".cecli/workspace", exist_ok=True)
96
+ os.makedirs(".cecli/temp", exist_ok=True)
99
97
 
100
98
  def _get_agent_config(self):
101
99
  """
@@ -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
@@ -1020,7 +1018,7 @@ I will proceed based on the tool results and updated context.""")
1020
1018
  self.model_kwargs = {
1021
1019
  "temperature": default_temp + 0.1,
1022
1020
  "frequency_penalty": default_fp + 0.2,
1023
- "presence_penalty": 0.1,
1021
+ # "presence_penalty": 0.1,
1024
1022
  }
1025
1023
  else:
1026
1024
  temperature = nested.getter(self.model_kwargs, "temperature", default_temp)
@@ -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
@@ -229,6 +230,7 @@ class Coder:
229
230
  file_watcher=from_coder.file_watcher,
230
231
  mcp_manager=from_coder.mcp_manager,
231
232
  uuid=from_coder.uuid,
233
+ repo=from_coder.repo,
232
234
  )
233
235
  use_kwargs.update(update) # override to complete the switch
234
236
  use_kwargs.update(kwargs) # override passed kwargs
@@ -328,6 +330,7 @@ class Coder:
328
330
  uuid="",
329
331
  ):
330
332
  # initialize from args.map_cache_dir
333
+ self.interrupt_event = asyncio.Event()
331
334
  self.uuid = generate_unique_id()
332
335
  if uuid:
333
336
  self.uuid = uuid
@@ -439,6 +442,7 @@ class Coder:
439
442
 
440
443
  # Initialize conversation system if enabled
441
444
  ConversationService.get_chunks(self).initialize_conversation_system()
445
+ self.observation_manager = ObservationManager.get_instance(self)
442
446
 
443
447
  self.commands = commands or Commands(self.io, self, args=args)
444
448
  self.commands.coder = self
@@ -919,10 +923,10 @@ class Coder:
919
923
  file_stub = RepoMap.get_file_stub(fname, self.io)
920
924
 
921
925
  # Add message about showing definitions instead of full content
922
- self.io.tool_output(
923
- f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
924
- "Use /context-management to toggle truncation off if needed."
925
- )
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
+ # )
926
930
 
927
931
  # Add a message in the content itself so the model knows it's truncated
928
932
  truncation_note = (
@@ -987,10 +991,10 @@ class Coder:
987
991
  file_stub = RepoMap.get_file_stub(fname, self.io)
988
992
 
989
993
  # Add message about showing definitions instead of full content
990
- self.io.tool_output(
991
- f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
992
- "Use /context-management to toggle truncation off if needed."
993
- )
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
+ # )
994
998
 
995
999
  # Add a message in the content itself so the model knows it's truncated
996
1000
  truncation_note = (
@@ -1735,6 +1739,7 @@ class Coder:
1735
1739
 
1736
1740
  self.io.tool_warning("\n\n^C KeyboardInterrupt")
1737
1741
 
1742
+ self.interrupt_event.set()
1738
1743
  self.last_keyboard_interrupt = time.time()
1739
1744
 
1740
1745
  # Old summarization system removed - using context compaction logic instead
@@ -1743,11 +1748,14 @@ class Coder:
1743
1748
  if not self.enable_context_compaction:
1744
1749
  return
1745
1750
 
1746
- # Check if combined messages exceed the token limit,
1747
- # Get messages from ConversationManager
1748
- done_messages = ConversationService.get_manager(self).get_messages_dict(MessageTag.DONE)
1749
- cur_messages = ConversationService.get_manager(self).get_messages_dict(MessageTag.CUR)
1750
- 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
+
1751
1759
  # Exclude first cur_message since that's the user's initial input
1752
1760
  done_tokens = self.summarizer.count_tokens(done_messages)
1753
1761
  cur_tokens = self.summarizer.count_tokens(cur_messages[1:] if len(cur_messages) > 1 else [])
@@ -1765,129 +1773,97 @@ class Coder:
1765
1773
  self.io.update_spinner("Compacting...")
1766
1774
 
1767
1775
  try:
1768
- # Check if done_messages alone exceed the limit
1769
- if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
1770
- # Create a summary of the done_messages
1771
- # Append custom message to compaction prompt if provided
1772
- compaction_prompt = self.gpt_prompts.compaction_prompt
1773
- if message:
1774
- compaction_prompt = f"{compaction_prompt}\n\n{message}"
1775
-
1776
- summary_text = await self.summarizer.summarize_all_as_text(
1777
- 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,
1778
1783
  compaction_prompt,
1779
1784
  self.context_compaction_summary_tokens,
1780
1785
  )
1786
+ if not text:
1787
+ raise ValueError(f"Summarization of {tag} messages returned empty.")
1781
1788
 
1782
- if not summary_text:
1783
- raise ValueError("Summarization returned an empty result.")
1784
-
1785
- # Replace old DONE messages with the summary in ConversationManager
1786
- ConversationService.get_manager(self).clear_tag(MessageTag.DONE)
1787
- ConversationService.get_manager(self).add_message(
1788
- message_dict={
1789
- "role": "user",
1790
- "content": summary_text,
1791
- },
1792
- tag=MessageTag.DONE,
1793
- )
1794
- ConversationService.get_manager(self).add_message(
1795
- message_dict={
1796
- "role": "assistant",
1797
- "content": (
1798
- "Ok, I will use this summary as the context for our conversation going"
1799
- " forward."
1800
- ),
1801
- },
1802
- tag=MessageTag.DONE,
1803
- )
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}"
1804
1792
 
1805
- # Check if cur_messages alone exceed the limit (after potentially compacting done_messages)
1806
- if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
1807
- # Create a summary of the cur_messages
1808
- # Append custom message to compaction prompt if provided
1809
- compaction_prompt = self.gpt_prompts.compaction_prompt
1810
- if message:
1811
- compaction_prompt = f"{compaction_prompt}\n\n{message}"
1812
-
1813
- cur_summary_text = await self.summarizer.summarize_all_as_text(
1814
- cur_messages,
1815
- compaction_prompt,
1816
- self.context_compaction_summary_tokens,
1817
- )
1793
+ manager.clear_tag(tag)
1818
1794
 
1819
- if not cur_summary_text:
1820
- 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
+ )
1821
1812
 
1822
- # Replace current CUR messages with the summary in ConversationManager
1823
- 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
+ )
1824
1821
 
1825
- if self.last_user_message:
1826
- ConversationService.get_manager(self).add_message(
1827
- message_dict={
1822
+ manager.add_message(
1823
+ {
1828
1824
  "role": "user",
1829
- "content": self.last_user_message,
1825
+ "content": (
1826
+ "Here is a summary of our current goals and historical"
1827
+ f" context:\n{text}"
1828
+ ),
1830
1829
  },
1831
- tag=MessageTag.CUR,
1830
+ tag=tag,
1832
1831
  )
1833
1832
 
1834
- # Add the summary conversation
1835
- ConversationService.get_manager(self).add_message(
1836
- message_dict={
1837
- "role": "assistant",
1838
- "content": "Ok. I am awaiting your summary of our goals to proceed.",
1839
- },
1840
- tag=MessageTag.CUR,
1841
- force=True,
1842
- )
1843
- ConversationService.get_manager(self).add_message(
1844
- message_dict={
1845
- "role": "user",
1846
- "content": f"Here is a summary of our current goals:\n{cur_summary_text}",
1847
- },
1848
- tag=MessageTag.CUR,
1849
- )
1850
- ConversationService.get_manager(self).add_message(
1851
- message_dict={
1852
- "role": "assistant",
1853
- "content": (
1854
- "Ok, I will use this summary and proceed with our task."
1855
- " I will first apply any changes in the summary and then"
1856
- " continue exploration as necessary."
1857
- ),
1858
- },
1859
- tag=MessageTag.CUR,
1860
- force=True,
1861
- )
1862
-
1863
- # Find the last assistant messages in the current conversation
1864
- 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
+ )
1865
1845
 
1866
- # Search from the end to find the most recent assistant messages
1867
- for msg in reversed(cur_messages):
1868
- 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)
1869
1853
 
1870
- if msg["role"] == "assistant":
1871
- break
1854
+ if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
1855
+ await summarize_and_update(done_messages, MessageTag.DONE)
1872
1856
 
1873
- for msg in reversed(latest_messages):
1874
- ConversationService.get_manager(self).add_message(
1875
- message_dict={
1876
- "role": msg["role"],
1877
- "content": msg["content"],
1878
- },
1879
- tag=MessageTag.CUR,
1880
- )
1857
+ if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
1858
+ await summarize_and_update(cur_messages, MessageTag.CUR)
1881
1859
 
1882
1860
  self.io.tool_output("...chat history compacted.")
1883
1861
  self.io.update_spinner(self.io.last_spinner_text)
1884
1862
 
1885
- # Clear all diff and file context messages
1886
- ConversationService.get_manager(self).clear_tag(MessageTag.DIFFS)
1887
- ConversationService.get_manager(self).clear_tag(MessageTag.FILE_CONTEXTS)
1888
-
1889
- # Reset ConversationFiles cache entirely
1863
+ manager.clear_tag(MessageTag.DIFFS)
1864
+ manager.clear_tag(MessageTag.FILE_CONTEXTS)
1890
1865
  ConversationService.get_files(self).clear_file_cache()
1866
+
1891
1867
  except Exception as e:
1892
1868
  self.io.tool_warning(f"Context compaction failed: {e}")
1893
1869
  self.io.tool_warning("Proceeding with full history for now.")
@@ -2230,10 +2206,11 @@ class Coder:
2230
2206
 
2231
2207
  self.multi_response_content = ""
2232
2208
  if self.show_pretty():
2233
- spinner_text = (
2234
- f"Waiting for {self.get_active_model().name} •"
2235
- f" ${self.format_cost(self.total_cost)} session"
2236
- )
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
+
2237
2214
  self.io.start_spinner(spinner_text)
2238
2215
  if self.stream:
2239
2216
  self.mdstream = True
@@ -2768,6 +2745,7 @@ class Coder:
2768
2745
 
2769
2746
  def _print_tool_call_info(self, server_tool_calls):
2770
2747
  """Print information about an MCP tool call."""
2748
+ self.io.ring_bell()
2771
2749
  # self.io.tool_output("Preparing to run MCP tools", bold=False)
2772
2750
 
2773
2751
  for server, tool_calls in server_tool_calls.items():
@@ -3039,6 +3017,7 @@ class Coder:
3039
3017
  return prompts.added_files.format(fnames=", ".join(added_fnames))
3040
3018
 
3041
3019
  async def send(self, messages, model=None, functions=None, tools=None):
3020
+ self.interrupt_event.clear()
3042
3021
  self.got_reasoning_content = False
3043
3022
  self.ended_reasoning_content = False
3044
3023
 
@@ -3058,15 +3037,33 @@ class Coder:
3058
3037
  self.token_profiler.start()
3059
3038
 
3060
3039
  try:
3061
- hash_object, completion = await model.send_completion(
3062
- messages,
3063
- functions,
3064
- self.stream,
3065
- self.temperature,
3066
- # This could include any tools, but for now it is just MCP tools
3067
- tools=tools,
3068
- override_kwargs=self.model_kwargs.copy(),
3040
+ completion_task = asyncio.create_task(
3041
+ model.send_completion(
3042
+ messages,
3043
+ functions,
3044
+ self.stream,
3045
+ self.temperature,
3046
+ # This could include any tools, but for now it is just MCP tools
3047
+ tools=tools,
3048
+ override_kwargs=self.model_kwargs.copy(),
3049
+ )
3050
+ )
3051
+ interrupt_task = asyncio.create_task(self.interrupt_event.wait())
3052
+
3053
+ done, pending = await asyncio.wait(
3054
+ {completion_task, interrupt_task},
3055
+ return_when=asyncio.FIRST_COMPLETED,
3069
3056
  )
3057
+
3058
+ if interrupt_task in done:
3059
+ completion_task.cancel()
3060
+ try:
3061
+ await completion_task
3062
+ except asyncio.CancelledError:
3063
+ pass
3064
+ raise KeyboardInterrupt
3065
+
3066
+ hash_object, completion = completion_task.result()
3070
3067
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3071
3068
 
3072
3069
  if not isinstance(completion, ModelResponse):
@@ -3518,13 +3515,18 @@ class Coder:
3518
3515
 
3519
3516
  self.message_tokens_received += completion_tokens
3520
3517
 
3521
- tokens_report = f"Tokens: {format_tokens(self.message_tokens_sent)} sent"
3518
+ # Build the new streamlined format
3519
+ tokens_parts = [format_tokens(prompt_tokens)]
3522
3520
 
3523
- if cache_write_tokens:
3524
- tokens_report += f", {format_tokens(cache_write_tokens)} cache write"
3525
3521
  if cache_hit_tokens:
3526
- tokens_report += f", {format_tokens(cache_hit_tokens)} cache hit"
3527
- 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
+
3528
3530
  tokens_report = self.token_profiler.add_to_usage_report(
3529
3531
  tokens_report, self.message_tokens_sent, self.message_tokens_received
3530
3532
  )
@@ -3547,9 +3549,12 @@ class Coder:
3547
3549
  self.total_cost += cost
3548
3550
  self.message_cost += cost
3549
3551
 
3552
+ total_combined_tokens = (
3553
+ self.total_tokens_sent + self.total_tokens_received + prompt_tokens + completion_tokens
3554
+ )
3550
3555
  cost_report = (
3551
- f"Cost: ${self.format_cost(self.message_cost)} message,"
3552
- 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)}"
3553
3558
  )
3554
3559
 
3555
3560
  if cache_hit_tokens and cache_write_tokens:
@@ -3607,8 +3612,11 @@ class Coder:
3607
3612
  self.total_tokens_sent += self.message_tokens_sent
3608
3613
  self.total_tokens_received += self.message_tokens_received
3609
3614
 
3610
- self.io.tool_output(self.usage_report)
3611
- 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()
3612
3620
 
3613
3621
  self.message_cost = 0.0
3614
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(
@@ -11,6 +11,7 @@ class Project:
11
11
  self.config = config
12
12
  self.name = config["name"]
13
13
  self.repo_url = config["repo"]
14
+ self.ignore_file = config.get("ignore")
14
15
  self.base_path = workspace_path / self.name
15
16
  self.main_path = self.base_path / "main"
16
17
 
@@ -24,6 +24,17 @@ class WorkspaceManager:
24
24
  project = Project(self.path, proj_cfg)
25
25
  project.initialize()
26
26
 
27
+ # Copy ignore files to workspace root
28
+ for proj_cfg in projects_config:
29
+ ignore_file = proj_cfg.get("ignore")
30
+ if ignore_file:
31
+ ignore_path = Path(ignore_file).expanduser()
32
+ if ignore_path.exists():
33
+ import shutil
34
+
35
+ dest_path = self.path / f"{proj_cfg['name']}.ignore"
36
+ shutil.copy2(ignore_path, dest_path)
37
+
27
38
  # Write metadata
28
39
  import json
29
40