cecli-dev 0.99.11__tar.gz → 0.99.12__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 (624) hide show
  1. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/agent_coder.py +16 -9
  5. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/base_coder.py +3 -5
  6. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/clear.py +2 -1
  7. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/reset.py +2 -1
  8. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/observations/manager.py +8 -5
  9. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/io.py +3 -5
  10. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/main.py +14 -8
  11. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/models.py +20 -0
  12. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/sessions.py +2 -2
  13. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/context_manager.py +1 -2
  14. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/edit_text.py +3 -3
  15. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/load_skill.py +1 -4
  16. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/read_range.py +25 -16
  17. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/remove_skill.py +1 -4
  18. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/thinking.py +2 -2
  19. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/utils/registry.py +11 -0
  20. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/PKG-INFO +1 -1
  21. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_models.py +52 -0
  22. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/observations/test_observation_manager.py +0 -2
  23. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.dockerignore +0 -0
  24. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.flake8 +0 -0
  25. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.gitattributes +0 -0
  26. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  27. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/check_pypi_version.yml +0 -0
  28. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/docker-build-test.yml +0 -0
  29. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/docker-release.yml +0 -0
  30. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/issues.yml +0 -0
  31. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/pages.yml +0 -0
  32. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/pre-commit.yml +0 -0
  33. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/release.yml +0 -0
  34. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/ubuntu-tests.yml +0 -0
  35. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/windows-tests.yml +0 -0
  36. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.github/workflows/windows_check_pypi_version.yml +0 -0
  37. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.gitignore +0 -0
  38. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/.pre-commit-config.yaml +0 -0
  39. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/CHANGELOG.md +0 -0
  40. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/CNAME +0 -0
  41. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/CONTRIBUTING.md +0 -0
  42. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/HISTORY.md +0 -0
  43. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/LICENSE.txt +0 -0
  44. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/MANIFEST.in +0 -0
  45. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/README.md +0 -0
  46. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/Dockerfile +0 -0
  47. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/README.md +0 -0
  48. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/__init__.py +0 -0
  49. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/benchmark.py +0 -0
  50. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/benchmark_classic.py +0 -0
  51. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/clone-exercism.sh +0 -0
  52. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/cpp-test.sh +0 -0
  53. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/docker.sh +0 -0
  54. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/docker_build.sh +0 -0
  55. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/install-docker-ubuntu.sh +0 -0
  56. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/npm-test.sh +0 -0
  57. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/over_time.py +0 -0
  58. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/plot.sh +0 -0
  59. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/plots.py +0 -0
  60. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/problem_stats.py +0 -0
  61. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/prompts.py +0 -0
  62. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/refactor_tools.py +0 -0
  63. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/rsync.sh +0 -0
  64. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/rungrid.py +0 -0
  65. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/swe-bench-lite.txt +0 -0
  66. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/swe-bench.txt +0 -0
  67. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/swe_bench.py +0 -0
  68. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/test_benchmark.py +0 -0
  69. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/variations.1.sh +0 -0
  70. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/variations.2.sh +0 -0
  71. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/variations.3.sh +0 -0
  72. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/benchmark/variations.4.sh +0 -0
  73. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/__main__.py +0 -0
  74. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/args.py +0 -0
  75. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/args_formatter.py +0 -0
  76. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/change_tracker.py +0 -0
  77. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/__init__.py +0 -0
  78. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/architect_coder.py +0 -0
  79. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/ask_coder.py +0 -0
  80. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/chat_chunks.py +0 -0
  81. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/context_coder.py +0 -0
  82. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/copypaste_coder.py +0 -0
  83. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editblock_coder.py +0 -0
  84. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editblock_fenced_coder.py +0 -0
  85. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editblock_func_coder.py +0 -0
  86. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  87. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editor_editblock_coder.py +0 -0
  88. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/editor_whole_coder.py +0 -0
  89. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/hashline_coder.py +0 -0
  90. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/help_coder.py +0 -0
  91. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/patch_coder.py +0 -0
  92. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/search_replace.py +0 -0
  93. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/shell.py +0 -0
  94. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/single_wholefile_func_coder.py +0 -0
  95. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/udiff_coder.py +0 -0
  96. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/udiff_simple.py +0 -0
  97. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/wholefile_coder.py +0 -0
  98. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/coders/wholefile_func_coder.py +0 -0
  99. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/__init__.py +0 -0
  100. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/add.py +0 -0
  101. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/agent.py +0 -0
  102. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/agent_model.py +0 -0
  103. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/architect.py +0 -0
  104. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/ask.py +0 -0
  105. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/chat_mode.py +0 -0
  106. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/code.py +0 -0
  107. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/command_prefix.py +0 -0
  108. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/commit.py +0 -0
  109. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/compact.py +0 -0
  110. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/context.py +0 -0
  111. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/context_blocks.py +0 -0
  112. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/context_management.py +0 -0
  113. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/copy.py +0 -0
  114. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/copy_context.py +0 -0
  115. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/core.py +0 -0
  116. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/diff.py +0 -0
  117. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/drop.py +0 -0
  118. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/editor.py +0 -0
  119. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/editor_model.py +0 -0
  120. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/exclude_skill.py +0 -0
  121. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/exit.py +0 -0
  122. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/git.py +0 -0
  123. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/hashline.py +0 -0
  124. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/help.py +0 -0
  125. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/history_search.py +0 -0
  126. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/hooks.py +0 -0
  127. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/include_skill.py +0 -0
  128. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/lint.py +0 -0
  129. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/list_sessions.py +0 -0
  130. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/list_skills.py +0 -0
  131. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/load.py +0 -0
  132. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/load_hook.py +0 -0
  133. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/load_mcp.py +0 -0
  134. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/load_session.py +0 -0
  135. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/load_skill.py +0 -0
  136. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/ls.py +0 -0
  137. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/map.py +0 -0
  138. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/map_refresh.py +0 -0
  139. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/model.py +0 -0
  140. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/models.py +0 -0
  141. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/multiline_mode.py +0 -0
  142. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/paste.py +0 -0
  143. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/quit.py +0 -0
  144. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/read_only.py +0 -0
  145. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/read_only_stub.py +0 -0
  146. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/reasoning_effort.py +0 -0
  147. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/remove_hook.py +0 -0
  148. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/remove_mcp.py +0 -0
  149. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/remove_skill.py +0 -0
  150. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/report.py +0 -0
  151. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/rules.py +0 -0
  152. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/run.py +0 -0
  153. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/save.py +0 -0
  154. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/save_session.py +0 -0
  155. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/settings.py +0 -0
  156. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/terminal_data/linux.keytab +0 -0
  157. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/terminal_setup.py +0 -0
  158. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/test.py +0 -0
  159. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/think_tokens.py +0 -0
  160. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/tokens.py +0 -0
  161. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/undo.py +0 -0
  162. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/utils/__init__.py +0 -0
  163. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/utils/base_command.py +0 -0
  164. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/utils/helpers.py +0 -0
  165. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/utils/registry.py +0 -0
  166. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/utils/save_load_manager.py +0 -0
  167. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/voice.py +0 -0
  168. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/weak_model.py +0 -0
  169. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/web.py +0 -0
  170. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/commands/workspace.py +0 -0
  171. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/deprecated_args.py +0 -0
  172. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/diffs.py +0 -0
  173. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/dump.py +0 -0
  174. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/editor.py +0 -0
  175. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/exceptions.py +0 -0
  176. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/format_settings.py +0 -0
  177. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/help.py +0 -0
  178. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/help_pats.py +0 -0
  179. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/__init__.py +0 -0
  180. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/background_commands.py +0 -0
  181. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/command_parser.py +0 -0
  182. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/__init__.py +0 -0
  183. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/base_message.py +0 -0
  184. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/files.py +0 -0
  185. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/integration.py +0 -0
  186. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/manager.py +0 -0
  187. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/service.py +0 -0
  188. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/tags.py +0 -0
  189. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/conversation/utils.py +0 -0
  190. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/copypaste.py +0 -0
  191. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/coroutines.py +0 -0
  192. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/file_searcher.py +0 -0
  193. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/__init__.py +0 -0
  194. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/dump.py +0 -0
  195. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  196. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/main.py +0 -0
  197. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/parsers.py +0 -0
  198. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/grep_ast/tsl.py +0 -0
  199. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/hashline.py +0 -0
  200. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/hashpos/__init__.py +0 -0
  201. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/hashpos/hashpos.py +0 -0
  202. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/leak_detect.py +0 -0
  203. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/model_providers.py +0 -0
  204. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/monorepo/__init__.py +0 -0
  205. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/monorepo/config.py +0 -0
  206. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/monorepo/project.py +0 -0
  207. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/monorepo/workspace.py +0 -0
  208. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/monorepo/worktree.py +0 -0
  209. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/nested.py +0 -0
  210. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/observations/__init__.py +0 -0
  211. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/plugin_manager.py +0 -0
  212. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/profiler.py +0 -0
  213. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/requests.py +0 -0
  214. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/responses.py +0 -0
  215. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/similarity.py +0 -0
  216. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/helpers/skills.py +0 -0
  217. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/history.py +0 -0
  218. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/__init__.py +0 -0
  219. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/base.py +0 -0
  220. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/integration.py +0 -0
  221. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/manager.py +0 -0
  222. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/registry.py +0 -0
  223. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/hooks/types.py +0 -0
  224. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/interruptible_input.py +0 -0
  225. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/linter.py +0 -0
  226. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/llm.py +0 -0
  227. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mcp/__init__.py +0 -0
  228. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mcp/manager.py +0 -0
  229. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mcp/oauth.py +0 -0
  230. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mcp/server.py +0 -0
  231. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mcp/utils.py +0 -0
  232. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/mdstream.py +0 -0
  233. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/onboarding.py +0 -0
  234. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/__init__.py +0 -0
  235. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/agent.yml +0 -0
  236. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/architect.yml +0 -0
  237. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/ask.yml +0 -0
  238. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/base.yml +0 -0
  239. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/context.yml +0 -0
  240. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/copypaste.yml +0 -0
  241. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editblock.yml +0 -0
  242. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editblock_fenced.yml +0 -0
  243. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editblock_func.yml +0 -0
  244. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editor_diff_fenced.yml +0 -0
  245. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editor_editblock.yml +0 -0
  246. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/editor_whole.yml +0 -0
  247. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/hashline.yml +0 -0
  248. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/help.yml +0 -0
  249. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/patch.yml +0 -0
  250. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/single_wholefile_func.yml +0 -0
  251. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/udiff.yml +0 -0
  252. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/udiff_simple.yml +0 -0
  253. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/utils/__init__.py +0 -0
  254. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/utils/registry.py +0 -0
  255. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/utils/system.py +0 -0
  256. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/wholefile.yml +0 -0
  257. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/prompts/wholefile_func.yml +0 -0
  258. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  259. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  260. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  261. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  262. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  263. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  264. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  265. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  266. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  267. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  268. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  269. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  270. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  271. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  272. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  273. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  274. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  275. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  276. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  277. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  278. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  279. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  280. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  281. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  282. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  283. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  284. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  285. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  286. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  287. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  288. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  289. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/README.md +0 -0
  290. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  291. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  292. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  293. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  294. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  295. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  296. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  297. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  298. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  299. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  300. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  301. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  302. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  303. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  304. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  305. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  306. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  307. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  308. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  309. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  310. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  311. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  312. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  313. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  314. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  315. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  316. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/reasoning_tags.py +0 -0
  317. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/repo.py +0 -0
  318. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/repomap.py +0 -0
  319. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/report.py +0 -0
  320. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/resources/__init__.py +0 -0
  321. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/resources/model-metadata.json +0 -0
  322. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/resources/model-settings.yml +0 -0
  323. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/resources/providers.json +0 -0
  324. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/run_cmd.py +0 -0
  325. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/scrape.py +0 -0
  326. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/sendchat.py +0 -0
  327. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/special.py +0 -0
  328. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/__init__.py +0 -0
  329. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/command.py +0 -0
  330. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/command_interactive.py +0 -0
  331. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/explore_code.py +0 -0
  332. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/finished.py +0 -0
  333. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_branch.py +0 -0
  334. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_diff.py +0 -0
  335. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_log.py +0 -0
  336. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_remote.py +0 -0
  337. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_show.py +0 -0
  338. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/git_status.py +0 -0
  339. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/grep.py +0 -0
  340. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/ls.py +0 -0
  341. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/undo_change.py +0 -0
  342. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/update_todo_list.py +0 -0
  343. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/utils/base_tool.py +0 -0
  344. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/utils/helpers.py +0 -0
  345. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tools/utils/output.py +0 -0
  346. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/__init__.py +0 -0
  347. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/app.py +0 -0
  348. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/io.py +0 -0
  349. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/styles.tcss +0 -0
  350. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/__init__.py +0 -0
  351. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/completion_bar.py +0 -0
  352. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/file_list.py +0 -0
  353. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/footer.py +0 -0
  354. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/input_area.py +0 -0
  355. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/input_container.py +0 -0
  356. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/key_hints.py +0 -0
  357. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/output.py +0 -0
  358. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/widgets/status_bar.py +0 -0
  359. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/tui/worker.py +0 -0
  360. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/urls.py +0 -0
  361. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/utils.py +0 -0
  362. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/versioncheck.py +0 -0
  363. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/voice.py +0 -0
  364. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/waiting.py +0 -0
  365. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/watch.py +0 -0
  366. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/watch_prompts.py +0 -0
  367. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/Gemfile +0 -0
  368. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/blame.md +0 -0
  369. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/get-started.md +0 -0
  370. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/help-tip.md +0 -0
  371. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/help.md +0 -0
  372. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/install.md +0 -0
  373. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/keys.md +0 -0
  374. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/model-warnings.md +0 -0
  375. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/multi-line.md +0 -0
  376. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/python-m-aider.md +0 -0
  377. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/recording.css +0 -0
  378. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/recording.md +0 -0
  379. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_includes/works-best.md +0 -0
  380. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_features.scss +0 -0
  381. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_footer.scss +0 -0
  382. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_hero.scss +0 -0
  383. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_info.scss +0 -0
  384. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_layout.scss +0 -0
  385. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_reset.scss +0 -0
  386. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_testimonials.scss +0 -0
  387. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_typography.scss +0 -0
  388. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/_variables.scss +0 -0
  389. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/custom/custom.scss +0 -0
  390. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/_sass/global-overrides.scss +0 -0
  391. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/adv-model-settings.md +0 -0
  392. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/agent-mode.md +0 -0
  393. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/aider_conf.md +0 -0
  394. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/api-keys.md +0 -0
  395. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/custom-commands.md +0 -0
  396. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  397. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/dotenv.md +0 -0
  398. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/editor.md +0 -0
  399. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/hooks.md +0 -0
  400. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/mcp.md +0 -0
  401. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/model-aliases.md +0 -0
  402. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/options.md +0 -0
  403. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/reasoning.md +0 -0
  404. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/security.md +0 -0
  405. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/skills.md +0 -0
  406. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/tui.md +0 -0
  407. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config/workspaces.md +0 -0
  408. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/config.md +0 -0
  409. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/faq.md +0 -0
  410. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/git.md +0 -0
  411. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/index.md +0 -0
  412. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/install/docker.md +0 -0
  413. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/install/optional.md +0 -0
  414. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/install.md +0 -0
  415. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/languages.md +0 -0
  416. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  417. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/legal/privacy.md +0 -0
  418. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/anthropic.md +0 -0
  419. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/azure.md +0 -0
  420. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/bedrock.md +0 -0
  421. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/cohere.md +0 -0
  422. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/deepseek.md +0 -0
  423. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/gemini.md +0 -0
  424. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/github.md +0 -0
  425. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/groq.md +0 -0
  426. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/lm-studio.md +0 -0
  427. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/ollama.md +0 -0
  428. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/openai-compat.md +0 -0
  429. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/openai.md +0 -0
  430. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/openrouter.md +0 -0
  431. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/other.md +0 -0
  432. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/vertex.md +0 -0
  433. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/warnings.md +0 -0
  434. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms/xai.md +0 -0
  435. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/llms.md +0 -0
  436. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/more/analytics.md +0 -0
  437. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/more/edit-formats.md +0 -0
  438. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/more/infinite-output.md +0 -0
  439. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/more-info.md +0 -0
  440. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/repomap.md +0 -0
  441. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/scripting.md +0 -0
  442. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  443. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  444. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/imports.md +0 -0
  445. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  446. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/support.md +0 -0
  447. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  448. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  449. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/troubleshooting.md +0 -0
  450. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/commands.md +0 -0
  451. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/conventions.md +0 -0
  452. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/copypaste.md +0 -0
  453. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/images-urls.md +0 -0
  454. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/lint-test.md +0 -0
  455. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/modes.md +0 -0
  456. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/not-code.md +0 -0
  457. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/notifications.md +0 -0
  458. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/sessions.md +0 -0
  459. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/tips.md +0 -0
  460. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/voice.md +0 -0
  461. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage/watch.md +0 -0
  462. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/docs/usage.md +0 -0
  463. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli/website/share/index.md +0 -0
  464. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/SOURCES.txt +0 -0
  465. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/dependency_links.txt +0 -0
  466. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/entry_points.txt +0 -0
  467. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/requires.txt +0 -0
  468. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/cecli_dev.egg-info/top_level.txt +0 -0
  469. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/docker/Dockerfile +0 -0
  470. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  471. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/pyproject.toml +0 -0
  472. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/pytest.ini +0 -0
  473. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/common-constraints.txt +0 -0
  474. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-dev.in +0 -0
  475. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-dev.txt +0 -0
  476. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-help.in +0 -0
  477. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-help.txt +0 -0
  478. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-playwright.in +0 -0
  479. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements-playwright.txt +0 -0
  480. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/requirements.in +0 -0
  481. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements/tree-sitter.in +0 -0
  482. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/requirements.txt +0 -0
  483. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/30k-image.py +0 -0
  484. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/Dockerfile.jekyll +0 -0
  485. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/__init__.py +0 -0
  486. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/blame.py +0 -0
  487. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/clean_metadata.py +0 -0
  488. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/cost_analyzer.py +0 -0
  489. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/cost_calculator.py +0 -0
  490. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/dl_icons.py +0 -0
  491. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/filter-chat-mode.js +0 -0
  492. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/generate_providers.py +0 -0
  493. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/get_contributor_list.js +0 -0
  494. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/get_hashline.py +0 -0
  495. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/history_prompts.py +0 -0
  496. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/homepage.py +0 -0
  497. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/issues.py +0 -0
  498. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/jekyll_build.sh +0 -0
  499. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/jekyll_run.sh +0 -0
  500. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/logo_svg.py +0 -0
  501. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/pip-compile.sh +0 -0
  502. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/recording_audio.py +0 -0
  503. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/redact-cast.py +0 -0
  504. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/rename_to_cecli.py +0 -0
  505. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/tmux_record.sh +0 -0
  506. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/tsl_pack_langs.py +0 -0
  507. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/update-blame.sh +0 -0
  508. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/update-docs.sh +0 -0
  509. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/update-history.py +0 -0
  510. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/versionbump.py +0 -0
  511. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/scripts/yank-old-versions.py +0 -0
  512. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/setup.cfg +0 -0
  513. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/shim.pyproject.toml +0 -0
  514. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/__init__.py +0 -0
  515. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/__init__.py +0 -0
  516. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_aws_credentials.py +0 -0
  517. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_background_commands.py +0 -0
  518. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_coder.py +0 -0
  519. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_commands.py +0 -0
  520. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_custom_commands.py +0 -0
  521. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_deprecated.py +0 -0
  522. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_editblock.py +0 -0
  523. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_editor.py +0 -0
  524. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_exceptions.py +0 -0
  525. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_find_or_blocks.py +0 -0
  526. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_hashline.py +0 -0
  527. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_history.py +0 -0
  528. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_io.py +0 -0
  529. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_linter.py +0 -0
  530. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_main.py +0 -0
  531. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_model_info_manager.py +0 -0
  532. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_model_provider_manager.py +0 -0
  533. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_onboarding.py +0 -0
  534. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_plugin_manager.py +0 -0
  535. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_prompts.py +0 -0
  536. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_reasoning.py +0 -0
  537. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_repo.py +0 -0
  538. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_repomap.py +0 -0
  539. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_run_cmd.py +0 -0
  540. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_sanity_check_repo.py +0 -0
  541. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_scripting.py +0 -0
  542. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_sendchat.py +0 -0
  543. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_sessions.py +0 -0
  544. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_skills.py +0 -0
  545. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_special.py +0 -0
  546. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_ssl_verification.py +0 -0
  547. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_udiff.py +0 -0
  548. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_urls.py +0 -0
  549. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_voice.py +0 -0
  550. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_watch.py +0 -0
  551. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/basic/test_wholefile.py +0 -0
  552. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/coders/test_copypaste_coder.py +0 -0
  553. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/conftest.py +0 -0
  554. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/conversations/test_conversation_integration.py +0 -0
  555. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/conversations/test_conversation_system.py +0 -0
  556. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  557. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/chat-history.md +0 -0
  558. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/arduino/test.ino +0 -0
  559. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/c/test.c +0 -0
  560. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/chatito/test.chatito +0 -0
  561. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/clojure/test.clj +0 -0
  562. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  563. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/cpp/test.cpp +0 -0
  564. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/csharp/test.cs +0 -0
  565. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/d/test.d +0 -0
  566. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/dart/test.dart +0 -0
  567. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/elisp/test.el +0 -0
  568. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/elixir/test.ex +0 -0
  569. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/elm/test.elm +0 -0
  570. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/gleam/test.gleam +0 -0
  571. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/go/test.go +0 -0
  572. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/haskell/test.hs +0 -0
  573. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/hcl/test.tf +0 -0
  574. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/java/test.java +0 -0
  575. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/javascript/test.js +0 -0
  576. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/kotlin/test.kt +0 -0
  577. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/lua/test.lua +0 -0
  578. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/matlab/test.m +0 -0
  579. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/ocaml/test.ml +0 -0
  580. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  581. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/php/test.php +0 -0
  582. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/pony/test.pony +0 -0
  583. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/properties/test.properties +0 -0
  584. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/python/test.py +0 -0
  585. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/ql/test.ql +0 -0
  586. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/r/test.r +0 -0
  587. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/racket/test.rkt +0 -0
  588. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/ruby/test.rb +0 -0
  589. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/rust/test.rs +0 -0
  590. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/scala/test.scala +0 -0
  591. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/solidity/test.sol +0 -0
  592. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/swift/test.swift +0 -0
  593. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/tsx/test.tsx +0 -0
  594. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/typescript/test.ts +0 -0
  595. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/udev/test.rules +0 -0
  596. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/languages/zig/test.zig +0 -0
  597. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/sample-code-base/sample.js +0 -0
  598. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/sample-code-base/sample.py +0 -0
  599. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  600. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/watch.js +0 -0
  601. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/watch.lisp +0 -0
  602. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/watch.py +0 -0
  603. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/fixtures/watch_question.js +0 -0
  604. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/help/test_help.py +0 -0
  605. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/monorepo/test_config.py +0 -0
  606. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/monorepo/test_config_active.py +0 -0
  607. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  608. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  609. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/helpers/monorepo/test_workspace.py +0 -0
  610. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/hooks/__init__.py +0 -0
  611. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/hooks/test_base.py +0 -0
  612. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/hooks/test_manager.py +0 -0
  613. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/hooks/test_registry.py +0 -0
  614. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/mcp/__init__.py +0 -0
  615. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/mcp/test_manager.py +0 -0
  616. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/scrape/test_playwright_disable.py +0 -0
  617. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/scrape/test_scrape.py +0 -0
  618. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_get_lines.py +0 -0
  619. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_git_branch.py +0 -0
  620. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_git_diff.py +0 -0
  621. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_grep.py +0 -0
  622. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_insert_block.py +0 -0
  623. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tools/test_registry.py +0 -0
  624. {cecli_dev-0.99.11 → cecli_dev-0.99.12}/tests/tui/test_app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.11
3
+ Version: 0.99.12
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.99.10.dev"
3
+ __version__ = "0.99.12.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.11'
22
- __version_tuple__ = version_tuple = (0, 99, 11)
21
+ __version__ = version = '0.99.12'
22
+ __version_tuple__ = version_tuple = (0, 99, 12)
23
23
 
24
- __commit_id__ = commit_id = 'g2e5e3b75c'
24
+ __commit_id__ = commit_id = 'gdd84a43a9'
@@ -282,9 +282,7 @@ class AgentCoder(Coder):
282
282
  content_parts.append(item.text)
283
283
  return "".join(content_parts)
284
284
  except Exception as e:
285
- self.io.tool_warning(
286
- (f"Executing {tool_name} on {server.name} failed:\nError: {e}")
287
- )
285
+ self.io.tool_warning(f"Executing {tool_name} on {server.name} failed:\nError: {e}")
288
286
  return f"Error executing tool call {tool_name}: {e}"
289
287
 
290
288
  result, interrupted = await interruptible(_exec_async(), self.interrupt_event)
@@ -381,7 +379,10 @@ class AgentCoder(Coder):
381
379
  try:
382
380
  result = '<context name="symbol_outline" from="agent">\n'
383
381
  result += "## Symbol Outline (Current Context)\n\n"
384
- result += "Code definitions (classes, functions, methods, etc.) found in files currently in chat context."
382
+ result += (
383
+ "Code definitions (classes, functions, methods, etc.) found in files currently in"
384
+ " chat context."
385
+ )
385
386
  result += "\n\n"
386
387
  files_to_outline = list(self.abs_fnames) + list(self.abs_read_only_fnames)
387
388
  if not files_to_outline:
@@ -522,7 +523,10 @@ class AgentCoder(Coder):
522
523
  )
523
524
  if editable_files:
524
525
  result += "\n".join(editable_files) + "\n\n"
525
- result += f"**Total editable: {len(editable_files)} files, {editable_tokens:,} tokens**\n\n"
526
+ result += (
527
+ f"**Total editable: {len(editable_files)} files,"
528
+ f" {editable_tokens:,} tokens**\n\n"
529
+ )
526
530
  else:
527
531
  result += "No editable files in context\n\n"
528
532
  if self.abs_read_only_fnames:
@@ -542,7 +546,10 @@ class AgentCoder(Coder):
542
546
  )
543
547
  if readonly_files:
544
548
  result += "\n".join(readonly_files) + "\n\n"
545
- result += f"**Total read-only: {len(readonly_files)} files, {readonly_tokens:,} tokens**\n\n"
549
+ result += (
550
+ f"**Total read-only: {len(readonly_files)} files,"
551
+ f" {readonly_tokens:,} tokens**\n\n"
552
+ )
546
553
  else:
547
554
  result += "No read-only files in context\n\n"
548
555
  extra_tokens = sum(self.context_block_tokens.values())
@@ -730,7 +737,7 @@ class AgentCoder(Coder):
730
737
  self.model_kwargs = {}
731
738
  result_message = f"Error executing {tool_name}: {e}"
732
739
  self.io.tool_error(
733
- (f"Error during {tool_name} execution: {e}\n{traceback.format_exc()}")
740
+ f"Error during {tool_name} execution: {e}\n{traceback.format_exc()}"
734
741
  )
735
742
  tool_responses.append(
736
743
  {"role": "tool", "tool_call_id": tool_call.id, "content": result_message}
@@ -1020,8 +1027,8 @@ class AgentCoder(Coder):
1020
1027
  context_parts.append("## File Editing Tools Disabled")
1021
1028
  context_parts.append(
1022
1029
  "File editing tools are currently disabled. Use `ReadRange` to determine the"
1023
- " current content hash prefixes needed to perform an edit and activate them when you"
1024
- " are ready to edit a file."
1030
+ " current content hash prefixes needed to perform an edit and activate them when"
1031
+ " you are ready to edit a file."
1025
1032
  )
1026
1033
 
1027
1034
  context_parts.append("\n\n")
@@ -453,7 +453,6 @@ class Coder:
453
453
 
454
454
  # Initialize conversation system if enabled
455
455
  ConversationService.get_chunks(self).initialize_conversation_system()
456
- self.observation_manager = ObservationManager.get_instance(self)
457
456
 
458
457
  self.commands = commands or Commands(self.io, self, args=args)
459
458
  self.commands.coder = self
@@ -1752,7 +1751,7 @@ class Coder:
1752
1751
  return
1753
1752
 
1754
1753
  # Trigger background observation/reflection check
1755
- await self.observation_manager.check_and_trigger()
1754
+ await ObservationManager.get_instance(self).check_and_trigger()
1756
1755
 
1757
1756
  manager = ConversationService.get_manager(self)
1758
1757
  done_messages = manager.get_messages_dict(MessageTag.DONE)
@@ -1789,8 +1788,8 @@ class Coder:
1789
1788
  if not text:
1790
1789
  raise ValueError(f"Summarization of {tag} messages returned empty.")
1791
1790
 
1792
- if self.observation_manager.observations:
1793
- obs_text = "\n".join(self.observation_manager.observations)
1791
+ if ObservationManager.get_instance(self).observations:
1792
+ obs_text = "\n".join(ObservationManager.get_instance(self).observations)
1794
1793
  text = f"HISTORICAL OBSERVATIONS:\n{obs_text}\n\n{text}"
1795
1794
 
1796
1795
  manager.clear_tag(tag)
@@ -2780,7 +2779,6 @@ class Coder:
2780
2779
 
2781
2780
  def _print_tool_call_info(self, server_tool_calls):
2782
2781
  """Print information about an MCP tool call."""
2783
- self.io.ring_bell()
2784
2782
  # self.io.tool_output("Preparing to run MCP tools", bold=False)
2785
2783
 
2786
2784
  for server, tool_calls in server_tool_calls.items():
@@ -2,6 +2,7 @@ from typing import List
2
2
 
3
3
  from cecli.commands.utils.base_command import BaseCommand
4
4
  from cecli.commands.utils.helpers import format_command_result
5
+ from cecli.helpers.observations.manager import ObservationManager
5
6
 
6
7
 
7
8
  class ClearCommand(BaseCommand):
@@ -19,7 +20,7 @@ class ClearCommand(BaseCommand):
19
20
  ConversationService.get_manager(coder).clear_tag(MessageTag.FILE_CONTEXTS)
20
21
 
21
22
  ConversationService.get_files(coder).reset()
22
- coder.observation_manager.reset()
23
+ ObservationManager.get_instance(coder).reset()
23
24
 
24
25
  # Clear TUI output if available
25
26
  if coder.tui and coder.tui():
@@ -3,6 +3,7 @@ from typing import List
3
3
  from cecli.commands.utils.base_command import BaseCommand
4
4
  from cecli.commands.utils.helpers import format_command_result
5
5
  from cecli.helpers.conversation import ConversationService
6
+ from cecli.helpers.observations.manager import ObservationManager
6
7
 
7
8
 
8
9
  class ResetCommand(BaseCommand):
@@ -24,7 +25,7 @@ class ResetCommand(BaseCommand):
24
25
  # Re-initialize Conversation components with current coder
25
26
  ConversationService.get_manager(coder).initialize(reformat=True)
26
27
  ConversationService.get_files(coder) # Ensure instance exists/initialized
27
- coder.observation_manager.reset()
28
+ ObservationManager.get_instance(coder).reset()
28
29
 
29
30
  # Clear TUI output if available
30
31
  if coder.tui and coder.tui():
@@ -26,17 +26,21 @@ class ObservationManager:
26
26
  if self.is_processing:
27
27
  return
28
28
 
29
- manager = ConversationService.get_manager(self.coder)
30
- cur_messages = manager.get_messages_dict(MessageTag.CUR)
29
+ cur_messages = ConversationService.get_manager(self.coder).get_messages_dict(MessageTag.CUR)
31
30
 
32
31
  # Calculate unobserved tokens
33
32
  unobserved = cur_messages[self._last_observed_index :]
33
+ current_index = len(cur_messages)
34
+
34
35
  if not unobserved:
35
36
  return
36
37
 
37
38
  tokens = self.coder.summarizer.count_tokens(unobserved)
38
39
 
39
- if tokens >= self.observation_threshold:
40
+ if (
41
+ tokens >= self.observation_threshold
42
+ and (not self._last_observed_index or current_index - self._last_observed_index >= 10)
43
+ ) or tokens >= 2 * self.observation_threshold:
40
44
  asyncio.create_task(self.run_observation(unobserved))
41
45
  self._last_observed_index = len(cur_messages)
42
46
 
@@ -50,8 +54,7 @@ class ObservationManager:
50
54
  async def run_observation(self, messages):
51
55
  self.is_processing = True
52
56
  try:
53
- manager = ConversationService.get_manager(self.coder)
54
- all_messages = manager.get_messages_dict()
57
+ all_messages = ConversationService.get_manager(self.coder).get_messages_dict()
55
58
  prompt = self.coder.gpt_prompts.observation_prompt
56
59
  observation = await self.coder.summarizer.summarize_all_as_text(
57
60
  all_messages, prompt, max_tokens=8192
@@ -1718,13 +1718,13 @@ class InputOutput:
1718
1718
  "$toastXml = $template.GetXml(); "
1719
1719
  "$toastXml.GetElementsByTagName('text')[0].AppendChild"
1720
1720
  "($template.CreateTextNode('cecli')) > $null; "
1721
- f"$toastXml.GetElementsByTagName('text')[1].AppendChild"
1721
+ "$toastXml.GetElementsByTagName('text')[1].AppendChild"
1722
1722
  f"($template.CreateTextNode('{NOTIFICATION_MESSAGE}')) > $null; "
1723
1723
  "$toast = [Windows.UI.Notifications.ToastNotification]::new($toastXml); "
1724
1724
  "[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('cecli')"
1725
1725
  '.Show($toast)"'
1726
1726
  )
1727
- return "powershell -command" + ps_command
1727
+ return "powershell -WindowStyle Hidden -Command" + ps_command
1728
1728
 
1729
1729
  return None # Unknown system
1730
1730
 
@@ -1739,9 +1739,7 @@ class InputOutput:
1739
1739
  "stderr": subprocess.DEVNULL,
1740
1740
  }
1741
1741
  if platform.system() == "Windows":
1742
- kwargs["creationflags"] = (
1743
- subprocess.CREATE_NO_WINDOW | subprocess.DETACHED_PROCESS
1744
- )
1742
+ kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW
1745
1743
  else:
1746
1744
  # For non-Windows systems, start a new session to detach
1747
1745
  kwargs["start_new_session"] = True
@@ -1194,15 +1194,21 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
1194
1194
  if args.exit:
1195
1195
  return await graceful_exit(coder)
1196
1196
  if args.auto_load:
1197
- try:
1198
- from cecli.sessions import SessionManager
1197
+ if await pre_init_io.confirm_ask(
1198
+ "Do you want to load your previous session?",
1199
+ acknowledge=True,
1200
+ explicit_yes_required=True,
1201
+ ):
1202
+ try:
1203
+ from cecli.sessions import SessionManager
1199
1204
 
1200
- session_manager = SessionManager(coder, io)
1201
- await session_manager.load_session(
1202
- args.auto_save_session_name if args.auto_save_session_name else "auto-save"
1203
- )
1204
- except Exception:
1205
- pass
1205
+ session_manager = SessionManager(coder, io)
1206
+ await session_manager.load_session(
1207
+ args.auto_save_session_name if args.auto_save_session_name else "auto-save",
1208
+ switch=False,
1209
+ )
1210
+ except Exception:
1211
+ pass
1206
1212
 
1207
1213
  if suppress_pre_init:
1208
1214
  await graceful_exit(coder)
@@ -1172,6 +1172,26 @@ class Model(ModelSettings):
1172
1172
  sorted_tools = sorted(
1173
1173
  effective_tools, key=lambda x: x.get("function", {}).get("name", "Invalid Name")
1174
1174
  )
1175
+
1176
+ try:
1177
+ # Deep copy to avoid modifying original tool schemas
1178
+ sorted_tools = json.loads(json.dumps(sorted_tools))
1179
+
1180
+ for tool in sorted_tools:
1181
+ function_schema = tool.get("function")
1182
+ if function_schema and "description" in function_schema:
1183
+ desc = function_schema.get("description")
1184
+ if isinstance(desc, str):
1185
+ # Escape the description string for JSON, but without the outer quotes.
1186
+ # This is a workaround for issues with special characters in descriptions.
1187
+ function_schema["description"] = json.dumps(desc, ensure_ascii=False)[
1188
+ 1:-1
1189
+ ]
1190
+ except (TypeError, json.JSONDecodeError):
1191
+ # If deep copy fails, proceed with original tools.
1192
+ # This is a safeguard.
1193
+ pass
1194
+
1175
1195
  kwargs["tools"] = sorted_tools
1176
1196
 
1177
1197
  if functions and len(functions) == 1:
@@ -88,7 +88,7 @@ class SessionManager:
88
88
 
89
89
  return sessions
90
90
 
91
- async def load_session(self, session_identifier: str) -> bool:
91
+ async def load_session(self, session_identifier: str, switch=True) -> bool:
92
92
  """Load a saved session by name or file path."""
93
93
  if not session_identifier:
94
94
  self.io.tool_error("Please provide a session name or file path.")
@@ -113,7 +113,7 @@ class SessionManager:
113
113
 
114
114
  # Apply session data
115
115
  applied, loaded_edit_format = await self._apply_session_data(session_data, session_file)
116
- if applied:
116
+ if applied and switch:
117
117
  from cecli.commands import SwitchCoderSignal
118
118
 
119
119
  edit_format_to_switch_to = self.coder.edit_format
@@ -32,8 +32,7 @@ class Tool(BaseTool):
32
32
  "type": "array",
33
33
  "items": {"type": "string"},
34
34
  "description": (
35
- "List of file paths to add as read-only. "
36
- "Limit to at most 2 at a time."
35
+ "List of file paths to add as read-only. Limit to at most 2 at a time."
37
36
  ),
38
37
  },
39
38
  "create": {
@@ -37,7 +37,7 @@ class Tool(BaseTool):
37
37
  "Can handle an array of up to 10 edits across multiple files. "
38
38
  "Each edit must include its own file_path and operation type. "
39
39
  "Use content hash ranges with the start_line and end_line parameters with format "
40
- '"{4 char hash}" (without the braces). For empty files, use "@000" as the '
40
+ "`{4 char hash}` (without the braces). For empty files, use `@000` as the "
41
41
  "content hash references."
42
42
  ),
43
43
  "parameters": {
@@ -71,14 +71,14 @@ class Tool(BaseTool):
71
71
  "start_line": {
72
72
  "type": "string",
73
73
  "description": (
74
- 'Content hash for start line: "{4 char hash}" (without '
74
+ "Content hash for start line: `{4 char hash}` (without "
75
75
  "the braces)"
76
76
  ),
77
77
  },
78
78
  "end_line": {
79
79
  "type": "string",
80
80
  "description": (
81
- 'Content hash for end line: "{4 char hash}" (without the'
81
+ "Content hash for end line: `{4 char hash}` (without the"
82
82
  " braces)"
83
83
  ),
84
84
  },
@@ -7,10 +7,7 @@ class Tool(BaseTool):
7
7
  "type": "function",
8
8
  "function": {
9
9
  "name": "LoadSkill",
10
- "description": (
11
- "Load a skill by name (agent mode only). Adds skill to include list and removes"
12
- " from exclude list."
13
- ),
10
+ "description": "Load a skill by name.",
14
11
  "parameters": {
15
12
  "type": "object",
16
13
  "properties": {
@@ -22,17 +22,16 @@ class Tool(BaseTool):
22
22
  "name": "ReadRange",
23
23
  "description": (
24
24
  "Get content hash prefixes of content between start and end patterns in files."
25
- " Accepts an array of `show` objects, each with file_path, start_text,"
26
- " end_text. These values must be lines from the content of the file."
27
- " They can contain up to 3 lines but newlines should generally be avoided."
28
- " Avoid using generic keywords and symbols."
29
- "Special markers @000 and 000@ represent the file boundaries and can be"
30
- " used for start_text and end_text for the first and last lines of"
31
- " the file respectively. Avoid using both of the special markers together on non-empty files."
32
- " Never use content hashes as the start_text and end_text values."
33
- " Do not use the same pattern for the start_text and end_text."
34
- " It is best to use function names, variable declarations and other block identifiers as "
35
- " start_texts and end_texts."
25
+ " Accepts an array of `show` objects, each with file_path, start_text, end_text."
26
+ " These values must be lines from the content of the file. They can contain up to 3"
27
+ " lines but newlines should generally be avoided. Avoid using generic keywords and"
28
+ " symbols.Special markers @000 and 000@ represent the file boundaries and can be"
29
+ " used for start_text and end_text for the first and last lines of the file"
30
+ " respectively. Avoid using both of the special markers together on non-empty"
31
+ " files. Never use content hashes as the start_text and end_text values. Do not use"
32
+ " the same pattern for the start_text and end_text. It is best to use function"
33
+ " names, variable declarations and other block identifiers as start_texts and"
34
+ " end_texts."
36
35
  ),
37
36
  "parameters": {
38
37
  "type": "object",
@@ -127,7 +126,10 @@ class Tool(BaseTool):
127
126
  error_outputs.append(
128
127
  cls.format_error(
129
128
  coder,
130
- f"Show operation {show_index + 1}: Provide both 'start_text' and 'end_text'.",
129
+ (
130
+ f"Show operation {show_index + 1}: Provide both 'start_text' and"
131
+ " 'end_text'."
132
+ ),
131
133
  file_path,
132
134
  start_text,
133
135
  end_text,
@@ -284,7 +286,10 @@ class Tool(BaseTool):
284
286
  error_outputs.append(
285
287
  cls.format_error(
286
288
  coder,
287
- f"End pattern '{end_text}' not found in {file_path}. Do not search for it again.",
289
+ (
290
+ f"End pattern '{end_text}' not found in {file_path}. Do not"
291
+ " search for it again."
292
+ ),
288
293
  file_path,
289
294
  start_text,
290
295
  end_text,
@@ -297,7 +302,10 @@ class Tool(BaseTool):
297
302
  error_outputs.append(
298
303
  cls.format_error(
299
304
  coder,
300
- f"End pattern '{end_text}' not found after start pattern in {file_path}.",
305
+ (
306
+ f"End pattern '{end_text}' not found after start pattern in"
307
+ f" {file_path}."
308
+ ),
301
309
  file_path,
302
310
  start_text,
303
311
  end_text,
@@ -314,7 +322,7 @@ class Tool(BaseTool):
314
322
  cls.format_error(
315
323
  coder,
316
324
  (
317
- f"Special markers cannot be used for ranges greater than 200 lines."
325
+ "Special markers cannot be used for ranges greater than 200 lines."
318
326
  f" The resolved range is {e_idx - s_idx + 1} lines."
319
327
  " Pick more refined boundaries."
320
328
  ),
@@ -466,7 +474,8 @@ class Tool(BaseTool):
466
474
  )
467
475
  if already_up_to_details:
468
476
  coder.io.tool_output(
469
- f"Lines already up to date in context for {len(already_up_to_details)} operation(s)"
477
+ "Lines already up to date in context for"
478
+ f" {len(already_up_to_details)} operation(s)"
470
479
  )
471
480
 
472
481
  detail_str = "\n".join(already_up_to_details)
@@ -7,10 +7,7 @@ class Tool(BaseTool):
7
7
  "type": "function",
8
8
  "function": {
9
9
  "name": "RemoveSkill",
10
- "description": (
11
- "Remove a skill by name (agent mode only). Removes skill from include list and adds"
12
- " to exclude list."
13
- ),
10
+ "description": "Remove a skill by name.",
14
11
  "parameters": {
15
12
  "type": "object",
16
13
  "properties": {
@@ -11,8 +11,8 @@ class Tool(BaseTool):
11
11
  "function": {
12
12
  "name": "Thinking",
13
13
  "description": (
14
- "Use this tool to store useful facts for later "
15
- "keep a scratch pad of your current efforts "
14
+ "Use this tool to store useful facts for later, "
15
+ "keep a scratch pad of your current efforts, "
16
16
  "and clarify your thoughts and intentions for your next steps."
17
17
  ),
18
18
  "parameters": {
@@ -6,6 +6,7 @@ this provides centralized tool registration, discovery, and filtering
6
6
  based on agent configuration.
7
7
  """
8
8
 
9
+ import json
9
10
  import traceback
10
11
  from pathlib import Path
11
12
  from typing import Dict, List, Optional, Set, Type
@@ -32,6 +33,16 @@ class ToolRegistry:
32
33
  except Exception:
33
34
  pass
34
35
 
36
+ description = tool_class.SCHEMA["function"]["description"]
37
+ wrapped = f'"{description}"'
38
+
39
+ try:
40
+ json.loads(wrapped)
41
+ except json.JSONDecodeError:
42
+ tool_class.SCHEMA["function"]["description"] = json.dumps(
43
+ description, ensure_ascii=False
44
+ )[1:-1]
45
+
35
46
  if not name and hasattr(tool_class, "NORM_NAME"):
36
47
  name = tool_class.NORM_NAME
37
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.11
3
+ Version: 0.99.12
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
@@ -810,3 +810,55 @@ class TestModels:
810
810
  output_found = any("$10.50/1m/output" in call for call in calls)
811
811
  assert input_found, "Input pricing format incorrect"
812
812
  assert output_found, "Output pricing format incorrect"
813
+
814
+ @patch("cecli.models.litellm.acompletion")
815
+ async def test_tool_description_escaping(self, mock_acompletion):
816
+ """
817
+ Test that tool descriptions with special characters are properly escaped.
818
+ """
819
+ model = Model("gpt-4")
820
+ messages = [{"role": "user", "content": "Hello"}]
821
+
822
+ # A complex description with various special characters
823
+ complex_description = (
824
+ 'This is a "test" description with `special` characters like \\, \n, and *.'
825
+ )
826
+
827
+ # Mock tool with the complex description
828
+ mock_tool = {
829
+ "type": "function",
830
+ "function": {
831
+ "name": "test_tool",
832
+ "description": complex_description,
833
+ "parameters": {
834
+ "type": "object",
835
+ "properties": {},
836
+ "required": [],
837
+ },
838
+ },
839
+ }
840
+
841
+ await model.send_completion(messages, functions=None, stream=False, tools=[mock_tool])
842
+
843
+ # Verify that acompletion was called
844
+ mock_acompletion.assert_called_once()
845
+
846
+ # Get the keyword arguments passed to acompletion
847
+ call_kwargs = mock_acompletion.call_args.kwargs
848
+
849
+ # Check that the 'tools' argument is present and correctly formatted
850
+ assert "tools" in call_kwargs
851
+ sent_tools = call_kwargs["tools"]
852
+ assert isinstance(sent_tools, list)
853
+ assert len(sent_tools) == 1
854
+
855
+ # Verify the description of the sent tool
856
+ sent_tool_function = sent_tools[0].get("function", {})
857
+ sent_description = sent_tool_function.get("description")
858
+
859
+ # The description should be a JSON-escaped string
860
+ # Expected: 'This is a \\"test\\" description with `special` characters like \\\\, \\n, and *.'
861
+ expected_escaped_description = (
862
+ 'This is a \\"test\\" description with `special` characters like \\\\, \\n, and *.'
863
+ )
864
+ assert sent_description == expected_escaped_description
@@ -71,7 +71,6 @@ async def test_compact_context_with_observations():
71
71
  # Mock observation manager with some observations
72
72
  obs_manager = ObservationManager.get_instance(coder)
73
73
  obs_manager.observations = ["Observation 1"]
74
- coder.observation_manager = obs_manager
75
74
 
76
75
  # Mock prompts
77
76
  coder.gpt_prompts = MagicMock()
@@ -136,7 +135,6 @@ async def test_compact_context_with_observations_integration():
136
135
  # Mock observation manager with some observations
137
136
  obs_manager = ObservationManager.get_instance(coder)
138
137
  obs_manager.observations = ["Observation 1"]
139
- coder.observation_manager = obs_manager
140
138
 
141
139
  # Mock prompts
142
140
  coder.gpt_prompts = MagicMock()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes