cecli-dev 1.0.4__tar.gz → 1.1.0__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 (781) hide show
  1. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/PKG-INFO +1 -1
  2. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/__init__.py +1 -1
  3. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/_version.py +3 -3
  4. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/agent_coder.py +2 -8
  5. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/base_coder.py +179 -80
  6. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/add.py +18 -1
  7. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/reasoning_effort.py +1 -1
  8. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/think_tokens.py +1 -1
  9. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/help.py +12 -1
  10. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/hashline.py +22 -0
  11. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/io_proxy.py +5 -1
  12. cecli_dev-1.1.0/cecli/helpers/model_config/__init__.py +10 -0
  13. cecli_dev-1.1.0/cecli/helpers/model_config/agent.py +40 -0
  14. cecli_dev-1.1.0/cecli/helpers/model_config/api.py +62 -0
  15. cecli_dev-1.1.0/cecli/helpers/model_config/formatters/__init__.py +20 -0
  16. cecli_dev-1.1.0/cecli/helpers/model_config/formatters/reasoning.py +83 -0
  17. cecli_dev-1.1.0/cecli/helpers/model_config/formatters/thinking.py +108 -0
  18. cecli_dev-1.1.0/cecli/helpers/model_config/identifiers.py +77 -0
  19. cecli_dev-1.1.0/cecli/helpers/model_config/llm.py +108 -0
  20. cecli_dev-1.1.0/cecli/helpers/model_config/pipeline.py +361 -0
  21. cecli_dev-1.1.0/cecli/helpers/model_config/utils.py +163 -0
  22. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/queues.py +26 -3
  23. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/requests.py +54 -1
  24. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/io.py +6 -1
  25. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mcp/manager.py +55 -4
  26. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mcp/server.py +67 -5
  27. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/models.py +230 -145
  28. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/resources/model-metadata.json +308 -152
  29. cecli_dev-1.1.0/cecli/resources/model-settings-condensed.yml +502 -0
  30. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/edit_file.py +18 -0
  31. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/grep.py +49 -0
  32. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/ls.py +2 -2
  33. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/output.py +2 -1
  34. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/app.py +8 -6
  35. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/io.py +18 -16
  36. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/worker.py +8 -0
  37. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/urls.py +9 -9
  38. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docmd.config.json +34 -34
  39. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/agent-mode.md +123 -102
  40. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/conf.md +1 -1
  41. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/editor.md +1 -1
  42. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/model-configuration.md +2 -0
  43. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/options.md +1 -1
  44. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/reasoning.md +2 -0
  45. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/skills.md +1 -1
  46. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/git.md +1 -1
  47. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/index.md +1 -3
  48. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/languages.md +1 -1
  49. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/more/edit-formats.md +1 -1
  50. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/repomap.md +1 -1
  51. cecli_dev-1.1.0/cecli/website/docs/troubleshooting.md +30 -0
  52. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/copypaste.md +2 -3
  53. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/images-urls.md +1 -1
  54. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/lint-test.md +1 -1
  55. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/modes.md +1 -1
  56. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/voice.md +1 -1
  57. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage.md +16 -12
  58. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/package-lock.json +19 -5
  59. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/package.json +1 -1
  60. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/PKG-INFO +1 -1
  61. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/SOURCES.txt +16 -0
  62. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/scm_file_list.json +932 -916
  63. cecli_dev-1.1.0/cecli_dev.egg-info/scm_version.json +8 -0
  64. cecli_dev-1.1.0/scripts/condense_model_settings.py +256 -0
  65. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_coder.py +6 -6
  66. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_commands.py +1 -1
  67. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_hashline.py +94 -0
  68. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_main.py +9 -2
  69. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_models.py +17 -10
  70. cecli_dev-1.1.0/tests/coders/test_tool_call_consolidation.py +206 -0
  71. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/help/test_help.py +15 -8
  72. cecli_dev-1.1.0/tests/helpers/test_model_config.py +886 -0
  73. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/conftest.py +18 -3
  74. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_concurrency.py +2 -2
  75. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_config.py +18 -11
  76. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_manager.py +62 -27
  77. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_manager_retry.py +72 -60
  78. cecli_dev-1.1.0/tests/mcp/test_server_sdk_compat.py +230 -0
  79. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/test_requests.py +84 -0
  80. cecli_dev-1.1.0/tests/tools/test_edit_file_format_output.py +238 -0
  81. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_tool_arguments.py +3 -1
  82. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_queues.py +66 -0
  83. cecli_dev-1.0.4/cecli/website/docs/troubleshooting.md +0 -14
  84. cecli_dev-1.0.4/cecli_dev.egg-info/scm_version.json +0 -8
  85. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.dockerignore +0 -0
  86. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.flake8 +0 -0
  87. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.gitattributes +0 -0
  88. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  89. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/check_pypi_version.yml +0 -0
  90. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/docker-build-test.yml +0 -0
  91. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/docker-release.yml +0 -0
  92. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/issues.yml +0 -0
  93. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/pages.yml +0 -0
  94. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/pre-commit.yml +0 -0
  95. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/release.yml +0 -0
  96. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/ubuntu-tests.yml +0 -0
  97. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/windows-tests.yml +0 -0
  98. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.github/workflows/windows_check_pypi_version.yml +0 -0
  99. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.gitignore +0 -0
  100. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/.pre-commit-config.yaml +0 -0
  101. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/CHANGELOG.md +0 -0
  102. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/CNAME +0 -0
  103. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/CONTRIBUTING.md +0 -0
  104. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/HISTORY.md +0 -0
  105. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/LICENSE.txt +0 -0
  106. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/MANIFEST.in +0 -0
  107. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/README.md +0 -0
  108. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/Dockerfile +0 -0
  109. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/README.md +0 -0
  110. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/__init__.py +0 -0
  111. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/benchmark.py +0 -0
  112. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/benchmark_classic.py +0 -0
  113. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/clone-exercism.sh +0 -0
  114. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/cpp-test.sh +0 -0
  115. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/docker.sh +0 -0
  116. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/docker_build.sh +0 -0
  117. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/install-docker-ubuntu.sh +0 -0
  118. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/npm-test.sh +0 -0
  119. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/over_time.py +0 -0
  120. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/plot.sh +0 -0
  121. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/plots.py +0 -0
  122. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/problem_stats.py +0 -0
  123. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/prompts.py +0 -0
  124. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/refactor_tools.py +0 -0
  125. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/rsync.sh +0 -0
  126. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/rungrid.py +0 -0
  127. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/swe-bench-lite.txt +0 -0
  128. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/swe-bench.txt +0 -0
  129. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/swe_bench.py +0 -0
  130. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/test_benchmark.py +0 -0
  131. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/variations.1.sh +0 -0
  132. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/variations.2.sh +0 -0
  133. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/variations.3.sh +0 -0
  134. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/benchmark/variations.4.sh +0 -0
  135. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/__main__.py +0 -0
  136. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/args.py +0 -0
  137. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/args_formatter.py +0 -0
  138. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/change_tracker.py +0 -0
  139. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/__init__.py +0 -0
  140. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/architect_coder.py +0 -0
  141. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/ask_coder.py +0 -0
  142. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/chat_chunks.py +0 -0
  143. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/context_coder.py +0 -0
  144. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/copypaste_coder.py +0 -0
  145. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editblock_coder.py +0 -0
  146. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editblock_fenced_coder.py +0 -0
  147. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editblock_func_coder.py +0 -0
  148. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  149. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editor_editblock_coder.py +0 -0
  150. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/editor_whole_coder.py +0 -0
  151. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/hashline_coder.py +0 -0
  152. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/help_coder.py +0 -0
  153. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/patch_coder.py +0 -0
  154. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/search_replace.py +0 -0
  155. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/shell.py +0 -0
  156. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/single_wholefile_func_coder.py +0 -0
  157. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/sub_agent_coder.py +0 -0
  158. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/udiff_coder.py +0 -0
  159. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/udiff_simple.py +0 -0
  160. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/wholefile_coder.py +0 -0
  161. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/coders/wholefile_func_coder.py +0 -0
  162. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/__init__.py +0 -0
  163. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/agent.py +0 -0
  164. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/agent_model.py +0 -0
  165. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/agent_tree.py +0 -0
  166. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/architect.py +0 -0
  167. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/ask.py +0 -0
  168. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/auto_memory.py +0 -0
  169. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/chat_mode.py +0 -0
  170. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/clear.py +0 -0
  171. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/code.py +0 -0
  172. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/command_prefix.py +0 -0
  173. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/commit.py +0 -0
  174. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/compact.py +0 -0
  175. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/context.py +0 -0
  176. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/context_blocks.py +0 -0
  177. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/context_management.py +0 -0
  178. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/copy.py +0 -0
  179. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/copy_context.py +0 -0
  180. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/core.py +0 -0
  181. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/diff.py +0 -0
  182. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/drop.py +0 -0
  183. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/editor.py +0 -0
  184. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/editor_model.py +0 -0
  185. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/exclude_skill.py +0 -0
  186. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/exit.py +0 -0
  187. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/git.py +0 -0
  188. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/hashline.py +0 -0
  189. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/help.py +0 -0
  190. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/history_search.py +0 -0
  191. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/hooks.py +0 -0
  192. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/hot_reload.py +0 -0
  193. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/include_skill.py +0 -0
  194. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/lint.py +0 -0
  195. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/list_mcp.py +0 -0
  196. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/list_sessions.py +0 -0
  197. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/list_skills.py +0 -0
  198. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/load.py +0 -0
  199. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/load_hook.py +0 -0
  200. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/load_mcp.py +0 -0
  201. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/load_session.py +0 -0
  202. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/load_skill.py +0 -0
  203. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/ls.py +0 -0
  204. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/map.py +0 -0
  205. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/map_refresh.py +0 -0
  206. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/merge.py +0 -0
  207. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/model.py +0 -0
  208. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/models.py +0 -0
  209. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/multiline_mode.py +0 -0
  210. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/paste.py +0 -0
  211. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/quit.py +0 -0
  212. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/read_only.py +0 -0
  213. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/read_only_stub.py +0 -0
  214. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/reap_agent.py +0 -0
  215. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/remove_hook.py +0 -0
  216. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/remove_mcp.py +0 -0
  217. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/remove_memory.py +0 -0
  218. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/remove_skill.py +0 -0
  219. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/report.py +0 -0
  220. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/reset.py +0 -0
  221. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/rules.py +0 -0
  222. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/run.py +0 -0
  223. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/save.py +0 -0
  224. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/save_session.py +0 -0
  225. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/search_memory.py +0 -0
  226. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/settings.py +0 -0
  227. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/spawn_agent.py +0 -0
  228. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/switch_agent.py +0 -0
  229. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/terminal_data/linux.keytab +0 -0
  230. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/terminal_setup.py +0 -0
  231. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/test.py +0 -0
  232. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/tokens.py +0 -0
  233. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/undo.py +0 -0
  234. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/utils/__init__.py +0 -0
  235. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/utils/base_command.py +0 -0
  236. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/utils/helpers.py +0 -0
  237. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/utils/registry.py +0 -0
  238. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/utils/save_load_manager.py +0 -0
  239. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/voice.py +0 -0
  240. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/weak_model.py +0 -0
  241. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/web.py +0 -0
  242. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/commands/workspace.py +0 -0
  243. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/decoding.py +0 -0
  244. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/deprecated_args.py +0 -0
  245. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/diffs.py +0 -0
  246. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/dump.py +0 -0
  247. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/editor.py +0 -0
  248. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/exceptions.py +0 -0
  249. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/format_settings.py +0 -0
  250. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/help_pats.py +0 -0
  251. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/__init__.py +0 -0
  252. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/__init__.py +0 -0
  253. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/config.py +0 -0
  254. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/defaults/__init__.py +0 -0
  255. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/defaults/memorizer.md +0 -0
  256. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/defaults/worker.md +0 -0
  257. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/agents/service.py +0 -0
  258. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/background_commands.py +0 -0
  259. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/command_parser.py +0 -0
  260. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/config_utils.py +0 -0
  261. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/__init__.py +0 -0
  262. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/base_message.py +0 -0
  263. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/files.py +0 -0
  264. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/integration.py +0 -0
  265. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/manager.py +0 -0
  266. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/service.py +0 -0
  267. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/tags.py +0 -0
  268. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/conversation/utils.py +0 -0
  269. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/copypaste.py +0 -0
  270. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/coroutines.py +0 -0
  271. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/crypto.py +0 -0
  272. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_searcher.py +0 -0
  273. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/__init__.py +0 -0
  274. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/builders.py +0 -0
  275. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/ignore.py +0 -0
  276. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/ngram_index.py +0 -0
  277. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/service.py +0 -0
  278. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/file_system/trie_index.py +0 -0
  279. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/__init__.py +0 -0
  280. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/dump.py +0 -0
  281. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  282. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/main.py +0 -0
  283. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/parsers.py +0 -0
  284. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/grep_ast/tsl.py +0 -0
  285. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/hashpos/__init__.py +0 -0
  286. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/hashpos/hashpos.py +0 -0
  287. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  288. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/hashpos/transformations.py +0 -0
  289. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/leak_detect.py +0 -0
  290. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/lock_detect.py +0 -0
  291. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/memory/__init__.py +0 -0
  292. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/memory/db.py +0 -0
  293. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/memory/utils.py +0 -0
  294. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/memory_control.py +0 -0
  295. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/model_providers.py +0 -0
  296. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/__init__.py +0 -0
  297. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/config.py +0 -0
  298. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/local_workspace.py +0 -0
  299. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/project.py +0 -0
  300. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/workspace.py +0 -0
  301. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/monorepo/worktree.py +0 -0
  302. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/nested.py +0 -0
  303. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/observations/__init__.py +0 -0
  304. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/observations/service.py +0 -0
  305. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/__init__.py +0 -0
  306. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  307. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/environment.py +0 -0
  308. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/region_resolver.py +0 -0
  309. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/safe_methods.py +0 -0
  310. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/security.py +0 -0
  311. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/service.py +0 -0
  312. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  313. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/plugin_manager.py +0 -0
  314. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/profiler.py +0 -0
  315. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/responses.py +0 -0
  316. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/__init__.py +0 -0
  317. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/acp/__init__.py +0 -0
  318. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/acp/bridge.py +0 -0
  319. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/acp/models.py +0 -0
  320. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/acp/protocol.py +0 -0
  321. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/signals.py +0 -0
  322. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/server/ws_server.py +0 -0
  323. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/similarity.py +0 -0
  324. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/skills.py +0 -0
  325. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/helpers/threading.py +0 -0
  326. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/history.py +0 -0
  327. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/__init__.py +0 -0
  328. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/base.py +0 -0
  329. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/helpers.py +0 -0
  330. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/integration.py +0 -0
  331. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/manager.py +0 -0
  332. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/registry.py +0 -0
  333. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/service.py +0 -0
  334. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/hooks/types.py +0 -0
  335. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/interruptible_input.py +0 -0
  336. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/linter.py +0 -0
  337. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/llm.py +0 -0
  338. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/main.py +0 -0
  339. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mcp/__init__.py +0 -0
  340. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mcp/oauth.py +0 -0
  341. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mcp/utils.py +0 -0
  342. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/mdstream.py +0 -0
  343. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/onboarding.py +0 -0
  344. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/__init__.py +0 -0
  345. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/agent.yml +0 -0
  346. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/architect.yml +0 -0
  347. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/ask.yml +0 -0
  348. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/base.yml +0 -0
  349. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/context.yml +0 -0
  350. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/copypaste.yml +0 -0
  351. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editblock.yml +0 -0
  352. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editblock_fenced.yml +0 -0
  353. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editblock_func.yml +0 -0
  354. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editor_diff_fenced.yml +0 -0
  355. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editor_editblock.yml +0 -0
  356. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/editor_whole.yml +0 -0
  357. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/hashline.yml +0 -0
  358. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/help.yml +0 -0
  359. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/patch.yml +0 -0
  360. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/single_wholefile_func.yml +0 -0
  361. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/subagent.yml +0 -0
  362. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/udiff.yml +0 -0
  363. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/udiff_simple.yml +0 -0
  364. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/utils/__init__.py +0 -0
  365. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/utils/registry.py +0 -0
  366. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/utils/system.py +0 -0
  367. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/wholefile.yml +0 -0
  368. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/prompts/wholefile_func.yml +0 -0
  369. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  370. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  371. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  372. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  373. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  374. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  375. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  376. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  377. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  378. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  379. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  380. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  381. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  382. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  383. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  384. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  385. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  386. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  387. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  388. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  389. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  390. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  391. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  392. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  393. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  394. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  395. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  396. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  397. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  398. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  399. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  400. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  401. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/README.md +0 -0
  402. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  403. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  404. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  405. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  406. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  407. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  408. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  409. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  410. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  411. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  412. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  413. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  414. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  415. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  416. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  417. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  418. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  419. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  420. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  421. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  422. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  423. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  424. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  425. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  426. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  427. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  428. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  429. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/reasoning_tags.py +0 -0
  430. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/repo.py +0 -0
  431. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/repomap.py +0 -0
  432. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/report.py +0 -0
  433. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/resources/__init__.py +0 -0
  434. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/resources/model-settings.yml +0 -0
  435. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/resources/providers.json +0 -0
  436. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/run_cmd.py +0 -0
  437. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/scrape.py +0 -0
  438. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/sendchat.py +0 -0
  439. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/sessions.py +0 -0
  440. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/signals.py +0 -0
  441. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/special.py +0 -0
  442. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/__init__.py +0 -0
  443. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/_yield.py +0 -0
  444. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/command.py +0 -0
  445. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/delegate.py +0 -0
  446. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/explore_code.py +0 -0
  447. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_branch.py +0 -0
  448. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_diff.py +0 -0
  449. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_log.py +0 -0
  450. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_remote.py +0 -0
  451. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_show.py +0 -0
  452. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/git_status.py +0 -0
  453. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/orchestrate.py +0 -0
  454. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/read_file.py +0 -0
  455. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/replace_facts.py +0 -0
  456. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/resource_manager.py +0 -0
  457. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/search_facts.py +0 -0
  458. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/thinking.py +0 -0
  459. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/undo_change.py +0 -0
  460. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/update_todo_list.py +0 -0
  461. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/__init__.py +0 -0
  462. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/base_tool.py +0 -0
  463. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/helpers.py +0 -0
  464. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/registry.py +0 -0
  465. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/utils/responses.py +0 -0
  466. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/validations/__init__.py +0 -0
  467. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tools/validations/validations.py +0 -0
  468. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/__init__.py +0 -0
  469. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/styles.tcss +0 -0
  470. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/__init__.py +0 -0
  471. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/completion_bar.py +0 -0
  472. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/file_list.py +0 -0
  473. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/footer.py +0 -0
  474. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/input_area.py +0 -0
  475. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/input_container.py +0 -0
  476. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/key_hints.py +0 -0
  477. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/output.py +0 -0
  478. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/output_alt.bak +0 -0
  479. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/selectable_log.py +0 -0
  480. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/status_bar.py +0 -0
  481. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/tui/widgets/subagent_pills.py +0 -0
  482. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/utils.py +0 -0
  483. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/versioncheck.py +0 -0
  484. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/voice.py +0 -0
  485. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/waiting.py +0 -0
  486. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/watch.py +0 -0
  487. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/watch_prompts.py +0 -0
  488. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/blame.md +0 -0
  489. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/get-started.md +0 -0
  490. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/help-tip.md +0 -0
  491. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/help.md +0 -0
  492. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/install.md +0 -0
  493. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/keys.md +0 -0
  494. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/model-warnings.md +0 -0
  495. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/multi-line.md +0 -0
  496. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/python-m-aider.md +0 -0
  497. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/recording.css +0 -0
  498. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/recording.md +0 -0
  499. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_includes/works-best.md +0 -0
  500. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_features.scss +0 -0
  501. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_footer.scss +0 -0
  502. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_hero.scss +0 -0
  503. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_info.scss +0 -0
  504. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_layout.scss +0 -0
  505. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_reset.scss +0 -0
  506. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_testimonials.scss +0 -0
  507. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_typography.scss +0 -0
  508. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/_variables.scss +0 -0
  509. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/custom/custom.scss +0 -0
  510. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/_sass/global-overrides.scss +0 -0
  511. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
  512. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/adv-model-settings.md +0 -0
  513. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/api-keys.md +0 -0
  514. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/api.md +0 -0
  515. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/custom-commands.md +0 -0
  516. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  517. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/dotenv.md +0 -0
  518. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/hooks.md +0 -0
  519. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/mcp.md +0 -0
  520. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/model-aliases.md +0 -0
  521. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/model-providers.md +0 -0
  522. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/persistent-memory.md +0 -0
  523. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/retries.md +0 -0
  524. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/security.md +0 -0
  525. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/subagents.md +0 -0
  526. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/tui.md +0 -0
  527. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config/workspaces.md +0 -0
  528. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/config.md +0 -0
  529. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/install/docker.md +0 -0
  530. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/install.md +0 -0
  531. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  532. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/legal/privacy.md +0 -0
  533. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/anthropic.md +0 -0
  534. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/azure.md +0 -0
  535. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/bedrock.md +0 -0
  536. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/cohere.md +0 -0
  537. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/deepseek.md +0 -0
  538. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/gemini.md +0 -0
  539. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/github.md +0 -0
  540. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/groq.md +0 -0
  541. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/lm-studio.md +0 -0
  542. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/ollama.md +0 -0
  543. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/openai-compat.md +0 -0
  544. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/openai.md +0 -0
  545. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/openrouter.md +0 -0
  546. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/other.md +0 -0
  547. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/vertex.md +0 -0
  548. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/warnings.md +0 -0
  549. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms/xai.md +0 -0
  550. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/llms.md +0 -0
  551. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/more/analytics.md +0 -0
  552. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/more/infinite-output.md +0 -0
  553. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/more-info.md +0 -0
  554. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/scripting.md +0 -0
  555. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  556. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  557. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/imports.md +0 -0
  558. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  559. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/support.md +0 -0
  560. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  561. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  562. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/commands.md +0 -0
  563. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/conventions.md +0 -0
  564. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/not-code.md +0 -0
  565. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/notifications.md +0 -0
  566. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/optional.md +0 -0
  567. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/sessions.md +0 -0
  568. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/tips.md +0 -0
  569. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/docs/usage/watch.md +0 -0
  570. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli/website/share/index.md +0 -0
  571. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/dependency_links.txt +0 -0
  572. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/entry_points.txt +0 -0
  573. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/requires.txt +0 -0
  574. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/cecli_dev.egg-info/top_level.txt +0 -0
  575. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/docker/Dockerfile +0 -0
  576. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  577. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/pyproject.toml +0 -0
  578. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/pytest.ini +0 -0
  579. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/common-constraints.txt +0 -0
  580. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-dev.in +0 -0
  581. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-dev.txt +0 -0
  582. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-help.in +0 -0
  583. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-help.txt +0 -0
  584. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-playwright.in +0 -0
  585. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements-playwright.txt +0 -0
  586. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/requirements.in +0 -0
  587. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements/tree-sitter.in +0 -0
  588. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/requirements.txt +0 -0
  589. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/30k-image.py +0 -0
  590. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/__init__.py +0 -0
  591. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/blame.py +0 -0
  592. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/clean_metadata.py +0 -0
  593. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/compare-message-history.py +0 -0
  594. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/cost_analyzer.py +0 -0
  595. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/cost_calculator.py +0 -0
  596. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/dl_icons.py +0 -0
  597. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/docmd_build.sh +0 -0
  598. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/filter-chat-mode.js +0 -0
  599. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/generate_providers.py +0 -0
  600. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/get_contributor_list.js +0 -0
  601. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/get_hashline.py +0 -0
  602. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/history_prompts.py +0 -0
  603. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/homepage.py +0 -0
  604. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/issues.py +0 -0
  605. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/logo_svg.py +0 -0
  606. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/optimize_tokens.sh +0 -0
  607. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/pip-compile.sh +0 -0
  608. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/recording_audio.py +0 -0
  609. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/redact-cast.py +0 -0
  610. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/rename_to_cecli.py +0 -0
  611. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/tmux_record.sh +0 -0
  612. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/tsl_pack_langs.py +0 -0
  613. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/update-blame.sh +0 -0
  614. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/update-docs.sh +0 -0
  615. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/update-history.py +0 -0
  616. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/versionbump.py +0 -0
  617. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/scripts/yank-old-versions.py +0 -0
  618. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/setup.cfg +0 -0
  619. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/shim.pyproject.toml +0 -0
  620. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/__init__.py +0 -0
  621. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/__init__.py +0 -0
  622. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/conftest.py +0 -0
  623. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_aws_credentials.py +0 -0
  624. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_background_commands.py +0 -0
  625. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_custom_commands.py +0 -0
  626. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_deprecated.py +0 -0
  627. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_editblock.py +0 -0
  628. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_editor.py +0 -0
  629. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_exceptions.py +0 -0
  630. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_find_or_blocks.py +0 -0
  631. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_hashline_closure.py +0 -0
  632. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_history.py +0 -0
  633. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_io.py +0 -0
  634. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_linter.py +0 -0
  635. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_model_info_manager.py +0 -0
  636. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_model_provider_manager.py +0 -0
  637. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_onboarding.py +0 -0
  638. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_plugin_manager.py +0 -0
  639. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_prompts.py +0 -0
  640. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_reasoning.py +0 -0
  641. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_repo.py +0 -0
  642. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_repomap.py +0 -0
  643. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_run_cmd.py +0 -0
  644. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_sanity_check_repo.py +0 -0
  645. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_scripting.py +0 -0
  646. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_select_selector.py +0 -0
  647. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_sendchat.py +0 -0
  648. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_session_args.py +0 -0
  649. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_session_crypto.py +0 -0
  650. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_sessions.py +0 -0
  651. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_sessions_manager.py +0 -0
  652. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_skills.py +0 -0
  653. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_special.py +0 -0
  654. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_spinner.py +0 -0
  655. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_ssl_verification.py +0 -0
  656. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_udiff.py +0 -0
  657. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_urls.py +0 -0
  658. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_voice.py +0 -0
  659. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_watch.py +0 -0
  660. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/basic/test_wholefile.py +0 -0
  661. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/coders/test_coder_switching.py +0 -0
  662. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/coders/test_copypaste_coder.py +0 -0
  663. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/commands/test_auto_memory.py +0 -0
  664. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/commands/test_compaction.py +0 -0
  665. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/commands/test_remove_memory.py +0 -0
  666. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/commands/test_search_memory.py +0 -0
  667. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/commands/test_switch_agent.py +0 -0
  668. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/conftest.py +0 -0
  669. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/conversations/test_conversation_integration.py +0 -0
  670. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/conversations/test_conversation_system.py +0 -0
  671. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  672. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/chat-history.md +0 -0
  673. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/arduino/test.ino +0 -0
  674. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/bash/test.sh +0 -0
  675. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/c/test.c +0 -0
  676. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/chatito/test.chatito +0 -0
  677. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/clojure/test.clj +0 -0
  678. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  679. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/cpp/test.cpp +0 -0
  680. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/csharp/test.cs +0 -0
  681. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/d/test.d +0 -0
  682. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/dart/test.dart +0 -0
  683. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/elisp/test.el +0 -0
  684. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/elixir/test.ex +0 -0
  685. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/elm/test.elm +0 -0
  686. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/gleam/test.gleam +0 -0
  687. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/go/test.go +0 -0
  688. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/haskell/test.hs +0 -0
  689. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/hcl/test.tf +0 -0
  690. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/java/test.java +0 -0
  691. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/javascript/test.js +0 -0
  692. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/kotlin/test.kt +0 -0
  693. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/lua/test.lua +0 -0
  694. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/matlab/test.m +0 -0
  695. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/ocaml/test.ml +0 -0
  696. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  697. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/php/test.php +0 -0
  698. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/pony/test.pony +0 -0
  699. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/properties/test.properties +0 -0
  700. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/python/test.py +0 -0
  701. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/ql/test.ql +0 -0
  702. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/r/test.r +0 -0
  703. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/racket/test.rkt +0 -0
  704. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/ruby/test.rb +0 -0
  705. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/rust/test.rs +0 -0
  706. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/scala/test.scala +0 -0
  707. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/solidity/test.sol +0 -0
  708. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/swift/test.swift +0 -0
  709. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/tsx/test.tsx +0 -0
  710. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/typescript/test.ts +0 -0
  711. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/udev/test.rules +0 -0
  712. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/languages/zig/test.zig +0 -0
  713. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/sample-code-base/sample.js +0 -0
  714. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/sample-code-base/sample.py +0 -0
  715. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  716. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/watch.js +0 -0
  717. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/watch.lisp +0 -0
  718. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/watch.py +0 -0
  719. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/fixtures/watch_question.js +0 -0
  720. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  721. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_config.py +0 -0
  722. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_config_active.py +0 -0
  723. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  724. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  725. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  726. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/monorepo/test_workspace.py +0 -0
  727. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/observations/test_observation_service.py +0 -0
  728. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/server/acp/__init__.py +0 -0
  729. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/server/acp/test_bridge.py +0 -0
  730. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/server/acp/test_dispatch.py +0 -0
  731. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/server/acp/test_models.py +0 -0
  732. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/server/acp/test_protocol.py +0 -0
  733. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/test_memory_control.py +0 -0
  734. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/helpers/test_orchestration.py +0 -0
  735. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/hooks/__init__.py +0 -0
  736. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/hooks/test_base.py +0 -0
  737. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/hooks/test_manager.py +0 -0
  738. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/hooks/test_registry.py +0 -0
  739. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/integration/test_agent_mcp_management.py +0 -0
  740. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/integration/test_config_loading.py +0 -0
  741. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/integration/test_mcp_management.py +0 -0
  742. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/__init__.py +0 -0
  743. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/mock_server.py +0 -0
  744. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_integration.py +0 -0
  745. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_logging.py +0 -0
  746. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_resilience.py +0 -0
  747. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/mcp/test_keepalive_unit.py +0 -0
  748. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/scrape/test_playwright_disable.py +0 -0
  749. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/scrape/test_scrape.py +0 -0
  750. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/__init__.py +0 -0
  751. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/conftest.py +0 -0
  752. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_commands.py +0 -0
  753. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_config.py +0 -0
  754. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_delegate.py +0 -0
  755. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_finished.py +0 -0
  756. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_io_proxy.py +0 -0
  757. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_service.py +0 -0
  758. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/subagents/test_sub_agent_coder.py +0 -0
  759. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_extractions.py +0 -0
  760. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_get_lines.py +0 -0
  761. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_git_branch.py +0 -0
  762. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_git_diff.py +0 -0
  763. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_grep.py +0 -0
  764. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_insert_block.py +0 -0
  765. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_read_range_execute.py +0 -0
  766. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_registry.py +0 -0
  767. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_remove_mcp_tool.py +0 -0
  768. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  769. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tools/validations.py +0 -0
  770. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/tui/test_app.py +0 -0
  771. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/conftest.py +0 -0
  772. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_deep_merge.py +0 -0
  773. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_edge_cases.py +0 -0
  774. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_load_mcp.py +0 -0
  775. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_performance.py +0 -0
  776. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_remove_mcp.py +0 -0
  777. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_shallow_merge.py +0 -0
  778. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_signals.py +0 -0
  779. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  780. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
  781. {cecli_dev-1.0.4 → cecli_dev-1.1.0}/tests/unit/test_ws_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 1.0.4
3
+ Version: 1.1.0
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__ = "1.0.3.dev"
3
+ __version__ = "1.0.5.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 = '1.0.4'
22
- __version_tuple__ = version_tuple = (1, 0, 4)
21
+ __version__ = version = '1.1.0'
22
+ __version_tuple__ = version_tuple = (1, 1, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g906b4a888'
24
+ __commit_id__ = commit_id = 'g33493d1c4'
@@ -27,7 +27,6 @@ from cecli.helpers.similarity import (
27
27
  )
28
28
  from cecli.helpers.skills import SkillsManager
29
29
  from cecli.hooks import HookIntegration
30
- from cecli.llm import litellm
31
30
  from cecli.mcp import LocalServer, McpServerManager
32
31
  from cecli.tools.utils.base_tool import BaseTool
33
32
  from cecli.tools.utils.registry import ToolRegistry
@@ -89,7 +88,6 @@ class AgentCoder(Coder):
89
88
  self.file_read_cache = set()
90
89
  self.tool_call_count = 0
91
90
  self.turn_count = 0
92
- self.max_reflections = 15
93
91
  self.use_enhanced_context = True
94
92
  self._last_edited_file = None
95
93
  self._cur_message_divider = None
@@ -365,16 +363,12 @@ class AgentCoder(Coder):
365
363
  }
366
364
  try:
367
365
  session = await server.connect()
368
- call_result = await litellm.experimental_mcp_client.call_openai_tool(
369
- session=session, openai_tool=tool_call_dict
370
- )
366
+ call_result = await self.call_mcp_tool_from_session(session, tool_call_dict)
371
367
  except Exception as e:
372
368
  if server.is_session_expired_error(e):
373
369
  try:
374
370
  session = await server.reconnect()
375
- call_result = await litellm.experimental_mcp_client.call_openai_tool(
376
- session=session, openai_tool=tool_call_dict
377
- )
371
+ call_result = await self.call_mcp_tool_from_session(session, tool_call_dict)
378
372
  except Exception as retry_exc:
379
373
  self.io.tool_warning(
380
374
  f"Executing {tool_name} on {server.name} failed after reconnect:\n"
@@ -851,12 +851,12 @@ class Coder(metaclass=UsageMeta):
851
851
  settings_items.append(f"{self.edit_format} (edit format)")
852
852
 
853
853
  # Thinking tokens
854
- thinking_tokens = main_model.get_thinking_tokens()
854
+ thinking_tokens = self.get_active_model().get_thinking_tokens()
855
855
  if thinking_tokens:
856
856
  settings_items.append(f"{thinking_tokens} think tokens")
857
857
 
858
858
  # Reasoning effort
859
- reasoning_effort = main_model.get_reasoning_effort()
859
+ reasoning_effort = self.get_active_model().get_reasoning_effort()
860
860
  if reasoning_effort:
861
861
  settings_items.append(f"reasoning {reasoning_effort}")
862
862
 
@@ -1886,6 +1886,7 @@ class Coder(metaclass=UsageMeta):
1886
1886
  ConversationService.get_chunks(self).flush_removals()
1887
1887
  self.last_user_message = user_message
1888
1888
  self.error_code = None
1889
+ self.num_tool_calls = 0
1889
1890
  # Trim memory in the background so it doesn't delay the response
1890
1891
  coroutines.fire_and_forget(asyncio.to_thread(trim_memory))
1891
1892
  # Fire memorizer after each user request
@@ -3109,19 +3110,14 @@ class Coder(metaclass=UsageMeta):
3109
3110
 
3110
3111
  async def do_tool_call():
3111
3112
  nonlocal session
3112
- from litellm import experimental_mcp_client
3113
3113
 
3114
3114
  try:
3115
- return await experimental_mcp_client.call_openai_tool(
3116
- session=session,
3117
- openai_tool=new_tool_call,
3118
- )
3115
+ return await self.call_mcp_tool_from_session(session, new_tool_call)
3119
3116
  except Exception as e:
3120
3117
  if server.is_session_expired_error(e):
3121
3118
  session = await server.reconnect()
3122
- return await experimental_mcp_client.call_openai_tool(
3123
- session=session,
3124
- openai_tool=new_tool_call,
3119
+ return await self.call_mcp_tool_from_session(
3120
+ session, new_tool_call
3125
3121
  )
3126
3122
  raise
3127
3123
 
@@ -3208,6 +3204,34 @@ class Coder(metaclass=UsageMeta):
3208
3204
 
3209
3205
  return tool_responses
3210
3206
 
3207
+ async def call_mcp_tool_from_session(self, session, tool_call):
3208
+ """Call an MCP tool from an OpenAI-style tool call using the native SDK.
3209
+
3210
+ Accepts either a dict (``{"function": {"name": ..., "arguments": ...}}``)
3211
+ or a tool-call object (e.g. litellm's ChatCompletionMessageToolCall) and
3212
+ invokes the MCP session directly, avoiding litellm's lazily-imported
3213
+ ``experimental_mcp_client`` submodule.
3214
+ """
3215
+ if isinstance(tool_call, dict):
3216
+ function = tool_call.get("function", {})
3217
+ name = function.get("name")
3218
+ arguments = function.get("arguments", {})
3219
+ else:
3220
+ function = getattr(tool_call, "function", None)
3221
+ name = getattr(function, "name", None)
3222
+ arguments = getattr(function, "arguments", {})
3223
+
3224
+ if isinstance(arguments, str):
3225
+ try:
3226
+ arguments = json.loads(arguments)
3227
+ except json.JSONDecodeError:
3228
+ arguments = {}
3229
+
3230
+ if not isinstance(arguments, dict):
3231
+ arguments = {}
3232
+
3233
+ return await session.call_tool(name=name, arguments=arguments)
3234
+
3211
3235
  async def process_tool_calls(self, tool_call_response):
3212
3236
  """Simplified main entry point."""
3213
3237
  # Check if max tool calls exceeded
@@ -3439,11 +3463,17 @@ class Coder(metaclass=UsageMeta):
3439
3463
  to be `None` when `tool_calls` are present.
3440
3464
  """
3441
3465
  msg = dict(role="assistant")
3442
- response = (
3443
- self.partial_response_chunks[0]
3444
- if not self.stream
3445
- else litellm.stream_chunk_builder(self.partial_response_chunks)
3446
- )
3466
+
3467
+ # Prefer the response already produced by consolidate_chunks(): it carries
3468
+ # the provider-specific fields (e.g. reasoning_items) that we preserved
3469
+ # across all chunks, which a fresh litellm.stream_chunk_builder() pass
3470
+ # alone would drop or truncate.
3471
+ if self.partial_response_consolidated:
3472
+ response = self.partial_response_consolidated[0]
3473
+ elif not self.stream:
3474
+ response = self.partial_response_chunks[0]
3475
+ else:
3476
+ response = litellm.stream_chunk_builder(self.partial_response_chunks)
3447
3477
 
3448
3478
  try:
3449
3479
  # Use response_dict as a regular dictionary
@@ -3962,63 +3992,51 @@ class Coder(metaclass=UsageMeta):
3962
3992
  if getattr(last_chunk, "usage", None):
3963
3993
  response.usage = last_chunk.usage
3964
3994
 
3965
- # Collect provider-specific fields from chunks to preserve them
3966
- # We need to track both by ID (primary) and index (fallback) since
3967
- # early chunks might not have IDs established yet
3968
- provider_specific_fields_by_id = {}
3969
- provider_specific_fields_by_index = {}
3970
-
3995
+ # Collect message-level provider-specific fields (e.g. `reasoning_items`
3996
+ # for reasoning models) from ALL chunks. litellm's stream_chunk_builder()
3997
+ # merges these with last-wins semantics for list fields, silently dropping
3998
+ # every reasoning item except the final one. Reasoning models depend on the
3999
+ # full ordered item list being present in the assistant message so that
4000
+ # exact-prefix prompt caching keeps working across turns, so we collect the
4001
+ # fields ourselves and concatenate list-valued entries.
4002
+ message_provider_specific_fields = {}
3971
4003
  for chunk in self.partial_response_chunks:
3972
4004
  try:
3973
- if chunk.choices and chunk.choices[0].delta and chunk.choices[0].delta.tool_calls:
3974
- for tool_call in chunk.choices[0].delta.tool_calls:
3975
- if (
3976
- hasattr(tool_call, "provider_specific_fields")
3977
- and tool_call.provider_specific_fields
3978
- ):
3979
- # Ensure provider_specific_fields is a dictionary
3980
- psf = tool_call.provider_specific_fields
3981
- if not isinstance(psf, dict):
3982
- continue
3983
-
3984
- # Try to use ID first
3985
- if hasattr(tool_call, "id") and tool_call.id:
3986
- tool_id = tool_call.id
3987
- if tool_id not in provider_specific_fields_by_id:
3988
- provider_specific_fields_by_id[tool_id] = {}
3989
- # Merge provider-specific fields for this tool ID
3990
- provider_specific_fields_by_id[tool_id].update(psf)
3991
- # Also track by index as fallback
3992
- elif hasattr(tool_call, "index"):
3993
- tool_index = tool_call.index
3994
- if tool_index not in provider_specific_fields_by_index:
3995
- provider_specific_fields_by_index[tool_index] = {}
3996
- provider_specific_fields_by_index[tool_index].update(psf)
4005
+ if chunk.choices and chunk.choices[0].delta:
4006
+ psf = getattr(chunk.choices[0].delta, "provider_specific_fields", None)
4007
+ if psf and isinstance(psf, dict):
4008
+ for key, value in psf.items():
4009
+ if isinstance(value, list):
4010
+ message_provider_specific_fields.setdefault(key, []).extend(value)
4011
+ elif value is not None:
4012
+ message_provider_specific_fields[key] = value
3997
4013
  except (AttributeError, IndexError):
3998
4014
  continue
3999
4015
 
4016
+ if message_provider_specific_fields:
4017
+ message_psf = getattr(response.choices[0].message, "provider_specific_fields", None)
4018
+ if not isinstance(message_psf, dict):
4019
+ message_psf = {}
4020
+ message_psf.update(message_provider_specific_fields)
4021
+ response.choices[0].message.provider_specific_fields = message_psf
4022
+
4000
4023
  try:
4001
- if response.choices[0].message.tool_calls:
4002
- for i, tool_call in enumerate(response.choices[0].message.tool_calls):
4003
- # Add provider-specific fields if we collected any for this tool
4004
- tool_id = tool_call.id
4005
-
4006
- # Try ID first
4007
- if tool_id in provider_specific_fields_by_id:
4008
- # Add provider-specific fields directly to the tool call object
4009
- tool_call.provider_specific_fields = provider_specific_fields_by_id[tool_id]
4010
- # Fall back to index
4011
- elif i in provider_specific_fields_by_index:
4012
- # Add provider-specific fields directly to the tool call object
4013
- tool_call.provider_specific_fields = provider_specific_fields_by_index[i]
4014
-
4015
- # Only append to partial_response_tool_calls if it's empty
4016
- if len(self.partial_response_tool_calls) == 0:
4017
- self.partial_response_tool_calls.append(tool_call)
4018
-
4019
- self.partial_response_function_call = (
4020
- response.choices[0].message.tool_calls[0].function
4021
- )
4024
+ message_tool_calls = response.choices[0].message.tool_calls
4025
+ if message_tool_calls and len(message_tool_calls):
4026
+ if self.stream:
4027
+ built_tool_calls = self._build_tool_calls_from_chunks()
4028
+ if built_tool_calls:
4029
+ response.choices[0].message.tool_calls = built_tool_calls
4030
+ self.partial_response_tool_calls = built_tool_calls
4031
+ else:
4032
+ # Fall back to litellm's merged list, keeping every call
4033
+ self.partial_response_tool_calls = list(message_tool_calls)
4034
+ else:
4035
+ # Non-streaming: the single response chunk already carries the
4036
+ # full tool_calls list
4037
+ self.partial_response_tool_calls = list(message_tool_calls)
4038
+
4039
+ self.partial_response_function_call = self.partial_response_tool_calls[0].function
4022
4040
  except AttributeError as e:
4023
4041
  func_err = e
4024
4042
 
@@ -4074,6 +4092,85 @@ class Coder(metaclass=UsageMeta):
4074
4092
  self.partial_response_consolidated = (response, func_err, content_err)
4075
4093
  return response, func_err, content_err
4076
4094
 
4095
+ def _build_tool_calls_from_chunks(self):
4096
+ """Rebuild tool calls from the raw streaming chunks, keyed by delta index.
4097
+
4098
+ Streaming deltas for parallel tool calls arrive interleaved and may start
4099
+ at any index (not necessarily 0). Indexing into a dict by the delta's
4100
+ tool-call ``index`` before converting it back to a list ensures every
4101
+ parallel call is preserved, correctly ordered, and keeps its
4102
+ provider-specific fields (e.g. thought signatures) attached.
4103
+ """
4104
+ from litellm.types.utils import ChatCompletionMessageToolCall, Function
4105
+
4106
+ tool_calls_dict = {}
4107
+
4108
+ for chunk in self.partial_response_chunks:
4109
+ try:
4110
+ if not (chunk.choices and chunk.choices[0].delta):
4111
+ continue
4112
+
4113
+ delta = chunk.choices[0].delta
4114
+ for tool_call in delta.tool_calls or []:
4115
+ if tool_call is None:
4116
+ continue
4117
+
4118
+ if nested.getter(tool_call, "function") is None:
4119
+ continue
4120
+
4121
+ index = nested.getter(tool_call, "index")
4122
+ if index is None:
4123
+ index = len(tool_calls_dict)
4124
+
4125
+ entry = tool_calls_dict.setdefault(
4126
+ index,
4127
+ {
4128
+ "id": None,
4129
+ "name": None,
4130
+ "type": "function",
4131
+ "arguments": [],
4132
+ "provider_specific_fields": {},
4133
+ },
4134
+ )
4135
+
4136
+ entry["id"] = nested.getter(tool_call, "id") or entry["id"]
4137
+ entry["type"] = nested.getter(tool_call, "type") or entry["type"]
4138
+ entry["name"] = nested.getter(tool_call, "function.name") or entry["name"]
4139
+
4140
+ arguments = nested.getter(tool_call, "function.arguments")
4141
+ if arguments:
4142
+ entry["arguments"].append(arguments)
4143
+
4144
+ psf = nested.getter(tool_call, "provider_specific_fields")
4145
+ if not psf:
4146
+ psf = nested.getter(tool_call, "function.provider_specific_fields")
4147
+ if psf and isinstance(psf, dict):
4148
+ entry["provider_specific_fields"].update(psf)
4149
+ except (AttributeError, IndexError):
4150
+ continue
4151
+
4152
+ tool_calls = []
4153
+ for index in sorted(tool_calls_dict.keys()):
4154
+ data = tool_calls_dict[index]
4155
+ if not (data["id"] and data["name"]):
4156
+ continue
4157
+
4158
+ function = Function(
4159
+ arguments="".join(data["arguments"]) or "{}",
4160
+ name=data["name"],
4161
+ )
4162
+ params = {
4163
+ "id": data["id"],
4164
+ "function": function,
4165
+ "type": data["type"] or "function",
4166
+ }
4167
+ if data["provider_specific_fields"]:
4168
+ params["provider_specific_fields"] = data["provider_specific_fields"]
4169
+
4170
+ tool_calls.append(ChatCompletionMessageToolCall(**params))
4171
+
4172
+ return tool_calls
4173
+
4077
4174
  def stream_wrapper(self, content, final):
4078
4175
  if not hasattr(self, "_streaming_buffer_length"):
4079
4176
  self._streaming_buffer_length = 0
@@ -4174,15 +4271,12 @@ class Coder(metaclass=UsageMeta):
4174
4271
 
4175
4272
  self.message_tokens_received += completion_tokens
4176
4273
 
4177
- # Build the new streamlined format
4178
- tokens_parts = [format_tokens(prompt_tokens)]
4179
-
4180
- if cache_hit_tokens:
4181
- tokens_parts.append(f"{format_tokens(cache_hit_tokens)}")
4182
- if cache_write_tokens:
4183
- tokens_parts.append(f"{format_tokens(cache_write_tokens)}")
4184
-
4185
- tokens_str = "/".join(tokens_parts)
4274
+ # Build tokens string as "{prompt} CH {hit_rate:.1f}% ↑ {completion} ↓"
4275
+ if prompt_tokens > 0:
4276
+ hit_rate = round(cache_hit_tokens / prompt_tokens * 100, 1) if cache_hit_tokens else 0.0
4277
+ else:
4278
+ hit_rate = 0.0
4279
+ tokens_str = f"{format_tokens(prompt_tokens)} ◇ {hit_rate:.1f}%"
4186
4280
 
4187
4281
  tokens_report = f"{tokens_str} ↑ {format_tokens(completion_tokens)} ↓"
4188
4282
 
@@ -4197,12 +4291,17 @@ class Coder(metaclass=UsageMeta):
4197
4291
  + self.message_tokens_received
4198
4292
  )
4199
4293
  total_combined_cached = self.total_cached_tokens + self.message_cached_tokens
4294
+ total_input_tokens = self.total_tokens_sent + self.message_tokens_sent
4295
+ if total_input_tokens > 0:
4296
+ total_hit_rate = (
4297
+ round(total_combined_cached / total_input_tokens * 100, 1)
4298
+ if total_combined_cached
4299
+ else 0.0
4300
+ )
4301
+ else:
4302
+ total_hit_rate = 0.0
4200
4303
 
4201
- total_stats = f"{format_tokens(total_combined_tokens)}"
4202
- if total_combined_cached:
4203
- total_stats += f"/{format_tokens(total_combined_cached)}"
4204
-
4205
- total_stats += " ↑↓"
4304
+ total_stats = f"{format_tokens(total_combined_tokens)} ◇ {total_hit_rate:.1f}% ↑↓"
4206
4305
 
4207
4306
  if not self.get_active_model().info.get("input_cost_per_token"):
4208
4307
  self.usage_report = tokens_report + " " + total_stats
@@ -132,7 +132,24 @@ class AddCommand(BaseCommand):
132
132
  f" {active_model.name} does not support images."
133
133
  )
134
134
  continue
135
- content = io.read_text(abs_file_path)
135
+ try:
136
+ content = io.read_text(abs_file_path)
137
+ except (ValueError, UnicodeError, UnicodeDecodeError, OSError) as exc:
138
+ # Binary or undecodable files (e.g. .git/objects/pack/*.rev)
139
+ # raise ValueError("Could not determine text encoding ...")
140
+ # from decoding.safe_open. Skip them gracefully instead of
141
+ # crashing the session.
142
+ msg = str(exc)
143
+ if "Could not determine text encoding" in msg or isinstance(
144
+ exc, (UnicodeError, UnicodeDecodeError)
145
+ ):
146
+ io.tool_warning(
147
+ f"Skipping {matched_file}: not decodable as text "
148
+ "(binary or unknown encoding)"
149
+ )
150
+ else:
151
+ io.tool_error(f"Skipping {matched_file}: {exc}")
152
+ continue
136
153
  if content is None:
137
154
  io.tool_error(f"Unable to read {matched_file}")
138
155
  else:
@@ -14,7 +14,7 @@ class ReasoningEffortCommand(BaseCommand):
14
14
  @classmethod
15
15
  async def execute(cls, io, coder, args, **kwargs):
16
16
  """Execute the reasoning-effort command with given parameters."""
17
- model = coder.main_model
17
+ model = coder.get_active_model()
18
18
 
19
19
  if not args.strip():
20
20
  # Display current value if no args are provided
@@ -11,7 +11,7 @@ class ThinkTokensCommand(BaseCommand):
11
11
  @classmethod
12
12
  async def execute(cls, io, coder, args, **kwargs):
13
13
  """Execute the think-tokens command with given parameters."""
14
- model = coder.main_model
14
+ model = coder.get_active_model()
15
15
 
16
16
  if not args.strip():
17
17
  # Display current value if no args are provided
@@ -58,11 +58,22 @@ def fname_to_url(filepath):
58
58
  if relevant_parts and relevant_parts[0].lower() == "_includes":
59
59
  return ""
60
60
  url_path = "/".join(relevant_parts)
61
+
62
+ # docmd renders each .md source to <path>/index.html, so the published
63
+ # URLs are directory-style (e.g. /docs/usage/) rather than .html files.
64
+ is_doc = False
61
65
  if url_path.lower().endswith(index.lower()):
62
66
  url_path = url_path[: -len(index)]
67
+ is_doc = True
63
68
  elif url_path.lower().endswith(md.lower()):
64
- url_path = url_path[: -len(md)] + ".html"
69
+ url_path = url_path[: -len(md)]
70
+ is_doc = True
71
+
65
72
  url_path = url_path.strip("/")
73
+ if not url_path:
74
+ return "https://cecli.dev/"
75
+ if is_doc:
76
+ return f"https://cecli.dev/{url_path}/"
66
77
  return f"https://cecli.dev/{url_path}"
67
78
 
68
79
 
@@ -382,6 +382,20 @@ def resolve_content_to_hashline_ids(
382
382
  key=lambda idx: abs(idx - start_hint_line),
383
383
  )
384
384
  resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
385
+ else:
386
+ # Fallback: the value may be line content whose whitespace was
387
+ # normalized (e.g. stripped indentation). Resolve it against a
388
+ # single unique line — mirroring apply_hashline_operations — so
389
+ # the preview resolves exactly like the actual edit.
390
+ unique_resolved = _try_resolve_as_unique_line(hp, first_line)
391
+ if unique_resolved is not None:
392
+ resolved_start = unique_resolved
393
+ try:
394
+ candidates = hp.resolve_to_lines(normalize_hashline(unique_resolved))
395
+ if candidates:
396
+ resolved_start_idx = candidates[0]
397
+ except (ContentHashError, ValueError):
398
+ pass
385
399
  elif start_value is not None and _looks_like_content_id(start_value):
386
400
  # Already a content ID - try to resolve it to find the line position
387
401
  # for proximity matching with end_value
@@ -432,6 +446,14 @@ def resolve_content_to_hashline_ids(
432
446
  key=lambda idx: abs(idx - resolved_start_idx),
433
447
  )
434
448
  resolved_end = _resolve_to_hash_id(lines, closest_idx, hp)
449
+ else:
450
+ # Fallback: the value may be line content whose whitespace was
451
+ # normalized (e.g. stripped indentation). Resolve it against a
452
+ # single unique line — mirroring apply_hashline_operations — so
453
+ # the preview resolves exactly like the actual edit.
454
+ unique_resolved = _try_resolve_as_unique_line(hp, first_line)
455
+ if unique_resolved is not None:
456
+ resolved_end = unique_resolved
435
457
  elif end_value is not None and _looks_like_content_id(end_value):
436
458
  # Already a content ID - try to resolve it
437
459
  try:
@@ -51,6 +51,9 @@ class IOProxy(Generic[T]):
51
51
  super().__setattr__("_coder", weakref.ref(coder))
52
52
  # Per-coder task storage: {coder_uuid: {attr_name: asyncio.Task}}
53
53
  super().__setattr__("_per_coder", {coder_uuid: {}})
54
+ # Last tool `type` emitted via tool_output — lives on the proxy,
55
+ # never on the shared target (like coder_uuid)
56
+ super().__setattr__("_last_type", None)
54
57
 
55
58
  # Register a per-coder input queue (TUI mode only)
56
59
  # Allows the TUI to push input directly to this coder's queue,
@@ -76,6 +79,7 @@ class IOProxy(Generic[T]):
76
79
  """Forward tool_output with coder_uuid injected."""
77
80
  if "coder_uuid" not in kwargs:
78
81
  kwargs["coder_uuid"] = self._coder_uuid
82
+ self._last_type = kwargs.get("type")
79
83
  return self._target.tool_output(*messages, **kwargs)
80
84
 
81
85
  def tool_error(self, message: str = "", strip: bool = True, **kwargs: Any) -> Any:
@@ -265,7 +269,7 @@ class IOProxy(Generic[T]):
265
269
 
266
270
  def __setattr__(self, name: str, value: Any) -> None:
267
271
  # Proxy-internal attributes — store on proxy instance only
268
- if name in ("_target", "_coder_uuid", "_coder", "_per_coder"):
272
+ if name in ("_target", "_coder_uuid", "_coder", "_per_coder", "_last_type"):
269
273
  super().__setattr__(name, value)
270
274
  # Per-coder task attributes — isolate per-coder so coders don't
271
275
  # compete for the same promise on the shared InputOutput instance
@@ -0,0 +1,10 @@
1
+ """Derive default per-model configuration from model metadata.
2
+
3
+ The model config package turns a flat litellm-style model metadata file into the
4
+ ``{api, llm, agent}`` override blocks that :mod:`cecli.models` consumes,
5
+ mirroring the ``model-overrides`` section of ``.cecli.conf.yml``.
6
+ """
7
+
8
+ from .pipeline import ModelConfigPipeline, get_default_config
9
+
10
+ __all__ = ["ModelConfigPipeline", "get_default_config"]
@@ -0,0 +1,40 @@
1
+ """Derive the ``agent`` override block for a model.
2
+
3
+ The agent block holds ModelSettings overrides. :mod:`cecli.models` applies each
4
+ of these directly (``setattr``) the same way the ``agent`` section of a
5
+ ``model-overrides`` entry is applied.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Dict, Optional
11
+
12
+ from .identifiers import is_anthropic
13
+ from .utils import supports_reasoning
14
+
15
+
16
+ def derive_agent_config(provider: Optional[str], route: str, record: Optional[Dict]) -> Dict:
17
+ """Return the ``agent`` config block for a model.
18
+
19
+ Args:
20
+ provider: Provider portion of the model name (may be ``None``).
21
+ route: Model route (name after the provider prefix).
22
+ record: The matched model metadata record, or ``None`` for unknown models.
23
+
24
+ Returns:
25
+ A dict of ModelSettings overrides (caching, temperature handling).
26
+ """
27
+ reasoning = supports_reasoning(record)
28
+ record = record or {}
29
+ agent: Dict = {
30
+ "cache_control": is_anthropic(provider, route, record),
31
+ # ``cache_read_input_token_cost`` in the metadata is the determinant for
32
+ # whether a model supports prompt caching. Unknown models default to
33
+ # assuming caching support.
34
+ "caches_by_default": bool(record.get("cache_read_input_token_cost")) if record else True,
35
+ }
36
+
37
+ if reasoning or record.get("supports_adaptive_thinking"):
38
+ agent["use_temperature"] = False
39
+
40
+ return agent
@@ -0,0 +1,62 @@
1
+ """Derive the ``api`` override block for a model.
2
+
3
+ The api block holds request-level parameters. :mod:`cecli.models` merges each
4
+ of these keys into ``extra_params`` the same way the ``api`` section of a
5
+ ``model-overrides`` entry is applied.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Dict, Optional
11
+
12
+ from .identifiers import is_anthropic, is_claude_5_plus, is_gemini_2_5
13
+ from .utils import supports_reasoning
14
+
15
+ _THINKING_BUDGET_TOKENS = 2048
16
+ #: Default thinking budget for Gemini 2.5 models (Gemini 2.5 Pro's default).
17
+ _GEMINI_THINKING_BUDGET_TOKENS = 8192
18
+
19
+
20
+ def derive_api_config(provider: Optional[str], route: str, record: Optional[Dict]) -> Dict:
21
+ """Return the ``api`` config block for a model.
22
+
23
+ Args:
24
+ provider: Provider portion of the model name (may be ``None``).
25
+ route: Model route (name after the provider prefix).
26
+ record: The matched model metadata record, or ``None`` for unknown models.
27
+
28
+ Returns:
29
+ A dict of request-level params (reasoning format, thinking, tool calls).
30
+ """
31
+ reasoning = supports_reasoning(record)
32
+ record = record or {}
33
+ gemini_2_5 = is_gemini_2_5(provider, route, record)
34
+ api: Dict = {}
35
+
36
+ if reasoning and not gemini_2_5:
37
+ effort = _default_reasoning_effort(record)
38
+
39
+ if effort:
40
+ api["reasoning_effort"] = effort
41
+
42
+ if is_anthropic(provider, route, record) and not is_claude_5_plus(provider, route, record):
43
+ # Claude 5+ uses adaptive thinking via ``reasoning_effort`` instead of
44
+ # the ``thinking.type.enabled`` budget block.
45
+ api["thinking"] = {"type": "enabled", "budget_tokens": _THINKING_BUDGET_TOKENS}
46
+ elif gemini_2_5:
47
+ # Gemini 2.5 configures thinking via a token budget; litellm maps the
48
+ # generic ``thinking`` param onto ``thinkingBudget`` + ``includeThoughts``.
49
+ api["thinking"] = {"type": "enabled", "budget_tokens": _GEMINI_THINKING_BUDGET_TOKENS}
50
+
51
+ if record.get("supports_parallel_function_calling", True):
52
+ api["parallel_tool_calls"] = True
53
+
54
+ return api
55
+
56
+
57
+ def _default_reasoning_effort(record):
58
+ """Default reasoning effort for a reasoning-capable model.
59
+
60
+ Always ``medium``; the metadata effort flags are intentionally not used.
61
+ """
62
+ return "medium"