cecli-dev 1.2.3rc4__tar.gz → 1.3.0rc1__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 (836) hide show
  1. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/PKG-INFO +2 -1
  2. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/__init__.py +1 -1
  3. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/_version.py +3 -3
  4. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/base_coder.py +93 -16
  5. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/defaults/memorizer.md +1 -1
  6. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/integration.py +15 -4
  7. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/hashline.py +145 -51
  8. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/hashpos/hashpos.py +1 -1
  9. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/config.py +2 -2
  10. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/chat.py +7 -3
  11. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/messages.py +6 -144
  12. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/litellm_compat.py +57 -15
  13. cecli_dev-1.3.0rc1/cecli/helpers/loop_detect.py +121 -0
  14. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/agent.py +3 -3
  15. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/pipeline.py +32 -5
  16. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/main.py +20 -1
  17. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mcp/manager.py +76 -39
  18. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mcp/server.py +65 -33
  19. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/model-metadata.json +535 -60
  20. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/command.py +3 -2
  21. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/edit_file.py +61 -20
  22. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/read_file.py +11 -4
  23. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/worker.py +22 -0
  24. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/PKG-INFO +2 -1
  25. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/SOURCES.txt +2 -0
  26. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/requires.txt +1 -0
  27. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/scm_file_list.json +2 -0
  28. cecli_dev-1.3.0rc1/cecli_dev.egg-info/scm_version.json +8 -0
  29. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/common-constraints.txt +1 -0
  30. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements.in +2 -0
  31. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements.txt +4 -0
  32. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_hashline.py +95 -0
  33. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_main.py +0 -1
  34. cecli_dev-1.3.0rc1/tests/coders/test_tool_call_consolidation.py +539 -0
  35. cecli_dev-1.3.0rc1/tests/helpers/test_llms_cache_control.py +121 -0
  36. cecli_dev-1.3.0rc1/tests/helpers/test_loop_detect.py +430 -0
  37. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_insert_block.py +7 -7
  38. cecli_dev-1.2.3rc4/cecli_dev.egg-info/scm_version.json +0 -8
  39. cecli_dev-1.2.3rc4/tests/coders/test_tool_call_consolidation.py +0 -197
  40. cecli_dev-1.2.3rc4/tests/helpers/test_llms_cache_control.py +0 -192
  41. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.dockerignore +0 -0
  42. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.flake8 +0 -0
  43. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.gitattributes +0 -0
  44. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  45. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/check_pypi_version.yml +0 -0
  46. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/docker-build-test.yml +0 -0
  47. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/docker-release.yml +0 -0
  48. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/issues.yml +0 -0
  49. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/pages.yml +0 -0
  50. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/pre-commit.yml +0 -0
  51. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/release.yml +0 -0
  52. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/ubuntu-tests.yml +0 -0
  53. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/windows-tests.yml +0 -0
  54. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.github/workflows/windows_check_pypi_version.yml +0 -0
  55. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.gitignore +0 -0
  56. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/.pre-commit-config.yaml +0 -0
  57. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/CHANGELOG.md +0 -0
  58. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/CNAME +0 -0
  59. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/CONTRIBUTING.md +0 -0
  60. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/HISTORY.md +0 -0
  61. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/LICENSE.txt +0 -0
  62. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/MANIFEST.in +0 -0
  63. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/README.md +0 -0
  64. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/Dockerfile +0 -0
  65. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/README.md +0 -0
  66. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/__init__.py +0 -0
  67. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/benchmark.py +0 -0
  68. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/benchmark_classic.py +0 -0
  69. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/clone-exercism.sh +0 -0
  70. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/cpp-test.sh +0 -0
  71. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/docker.sh +0 -0
  72. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/docker_build.sh +0 -0
  73. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/install-docker-ubuntu.sh +0 -0
  74. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/npm-test.sh +0 -0
  75. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/over_time.py +0 -0
  76. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/plot.sh +0 -0
  77. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/plots.py +0 -0
  78. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/problem_stats.py +0 -0
  79. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/prompts.py +0 -0
  80. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/refactor_tools.py +0 -0
  81. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/rsync.sh +0 -0
  82. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/rungrid.py +0 -0
  83. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/swe-bench-lite.txt +0 -0
  84. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/swe-bench.txt +0 -0
  85. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/swe_bench.py +0 -0
  86. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/test_benchmark.py +0 -0
  87. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/variations.1.sh +0 -0
  88. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/variations.2.sh +0 -0
  89. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/variations.3.sh +0 -0
  90. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/benchmark/variations.4.sh +0 -0
  91. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/__main__.py +0 -0
  92. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/args.py +0 -0
  93. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/args_formatter.py +0 -0
  94. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/change_tracker.py +0 -0
  95. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/__init__.py +0 -0
  96. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/agent_coder.py +0 -0
  97. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/architect_coder.py +0 -0
  98. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/ask_coder.py +0 -0
  99. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/chat_chunks.py +0 -0
  100. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/context_coder.py +0 -0
  101. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/copypaste_coder.py +0 -0
  102. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editblock_coder.py +0 -0
  103. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editblock_fenced_coder.py +0 -0
  104. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editblock_func_coder.py +0 -0
  105. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  106. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editor_editblock_coder.py +0 -0
  107. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/editor_whole_coder.py +0 -0
  108. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/hashline_coder.py +0 -0
  109. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/help_coder.py +0 -0
  110. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/patch_coder.py +0 -0
  111. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/search_replace.py +0 -0
  112. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/shell.py +0 -0
  113. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/single_wholefile_func_coder.py +0 -0
  114. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/sub_agent_coder.py +0 -0
  115. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/udiff_coder.py +0 -0
  116. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/udiff_simple.py +0 -0
  117. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/wholefile_coder.py +0 -0
  118. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/coders/wholefile_func_coder.py +0 -0
  119. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/__init__.py +0 -0
  120. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/add.py +0 -0
  121. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/agent.py +0 -0
  122. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/agent_model.py +0 -0
  123. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/agent_tree.py +0 -0
  124. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/architect.py +0 -0
  125. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/ask.py +0 -0
  126. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/auto_memory.py +0 -0
  127. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/chat_mode.py +0 -0
  128. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/clear.py +0 -0
  129. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/code.py +0 -0
  130. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/command_prefix.py +0 -0
  131. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/commit.py +0 -0
  132. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/compact.py +0 -0
  133. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/context.py +0 -0
  134. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/context_blocks.py +0 -0
  135. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/context_management.py +0 -0
  136. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/copy.py +0 -0
  137. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/copy_context.py +0 -0
  138. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/core.py +0 -0
  139. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/diff.py +0 -0
  140. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/drop.py +0 -0
  141. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/editor.py +0 -0
  142. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/editor_model.py +0 -0
  143. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/exclude_skill.py +0 -0
  144. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/exit.py +0 -0
  145. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/git.py +0 -0
  146. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/hashline.py +0 -0
  147. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/help.py +0 -0
  148. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/history_search.py +0 -0
  149. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/hooks.py +0 -0
  150. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/hot_reload.py +0 -0
  151. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/include_skill.py +0 -0
  152. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/lint.py +0 -0
  153. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/list_mcp.py +0 -0
  154. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/list_queue.py +0 -0
  155. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/list_sessions.py +0 -0
  156. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/list_skills.py +0 -0
  157. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/load.py +0 -0
  158. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/load_hook.py +0 -0
  159. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/load_mcp.py +0 -0
  160. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/load_session.py +0 -0
  161. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/load_skill.py +0 -0
  162. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/ls.py +0 -0
  163. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/map.py +0 -0
  164. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/map_refresh.py +0 -0
  165. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/merge.py +0 -0
  166. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/model.py +0 -0
  167. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/models.py +0 -0
  168. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/multiline_mode.py +0 -0
  169. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/paste.py +0 -0
  170. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/queue.py +0 -0
  171. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/quit.py +0 -0
  172. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/read_only.py +0 -0
  173. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/read_only_stub.py +0 -0
  174. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/reap_agent.py +0 -0
  175. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/reasoning_effort.py +0 -0
  176. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/remove_hook.py +0 -0
  177. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/remove_mcp.py +0 -0
  178. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/remove_memory.py +0 -0
  179. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/remove_queue.py +0 -0
  180. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/remove_skill.py +0 -0
  181. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/report.py +0 -0
  182. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/reset.py +0 -0
  183. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/rules.py +0 -0
  184. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/run.py +0 -0
  185. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/save.py +0 -0
  186. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/save_session.py +0 -0
  187. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/search_memory.py +0 -0
  188. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/settings.py +0 -0
  189. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/spawn_agent.py +0 -0
  190. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/switch_agent.py +0 -0
  191. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/terminal_data/linux.keytab +0 -0
  192. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/terminal_setup.py +0 -0
  193. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/test.py +0 -0
  194. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/think_tokens.py +0 -0
  195. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/tokens.py +0 -0
  196. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/undo.py +0 -0
  197. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/utils/__init__.py +0 -0
  198. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/utils/base_command.py +0 -0
  199. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/utils/helpers.py +0 -0
  200. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/utils/registry.py +0 -0
  201. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/utils/save_load_manager.py +0 -0
  202. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/voice.py +0 -0
  203. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/weak_model.py +0 -0
  204. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/web.py +0 -0
  205. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/commands/workspace.py +0 -0
  206. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/decoding.py +0 -0
  207. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/deprecated_args.py +0 -0
  208. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/diffs.py +0 -0
  209. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/dump.py +0 -0
  210. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/editor.py +0 -0
  211. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/exceptions.py +0 -0
  212. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/format_settings.py +0 -0
  213. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/help.py +0 -0
  214. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/help_pats.py +0 -0
  215. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/__init__.py +0 -0
  216. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/__init__.py +0 -0
  217. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/config.py +0 -0
  218. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/defaults/__init__.py +0 -0
  219. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/defaults/worker.md +0 -0
  220. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/agents/service.py +0 -0
  221. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/background_commands.py +0 -0
  222. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/command_parser.py +0 -0
  223. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/command_queue.py +0 -0
  224. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/config_utils.py +0 -0
  225. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/__init__.py +0 -0
  226. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/base_message.py +0 -0
  227. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/files.py +0 -0
  228. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/manager.py +0 -0
  229. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/service.py +0 -0
  230. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/tags.py +0 -0
  231. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/conversation/utils.py +0 -0
  232. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/copypaste.py +0 -0
  233. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/coroutines.py +0 -0
  234. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/crypto.py +0 -0
  235. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_searcher.py +0 -0
  236. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/__init__.py +0 -0
  237. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/builders.py +0 -0
  238. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/ignore.py +0 -0
  239. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/ngram_index.py +0 -0
  240. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/service.py +0 -0
  241. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/file_system/trie_index.py +0 -0
  242. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/__init__.py +0 -0
  243. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/dump.py +0 -0
  244. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  245. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/main.py +0 -0
  246. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/parsers.py +0 -0
  247. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/grep_ast/tsl.py +0 -0
  248. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/hashpos/__init__.py +0 -0
  249. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  250. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/hashpos/transformations.py +0 -0
  251. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/io_proxy.py +0 -0
  252. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/leak_detect.py +0 -0
  253. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/__init__.py +0 -0
  254. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/aws_sigv4.py +0 -0
  255. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/__init__.py +0 -0
  256. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/bedrock.py +0 -0
  257. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/gemini.py +0 -0
  258. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/domains/responses.py +0 -0
  259. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/formatters/__init__.py +0 -0
  260. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/formatters/reasoning.py +0 -0
  261. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/formatters/thinking.py +0 -0
  262. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/identifiers.py +0 -0
  263. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/pipeline.py +0 -0
  264. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/__init__.py +0 -0
  265. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/anthropic.py +0 -0
  266. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/azure.py +0 -0
  267. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/base.py +0 -0
  268. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/bedrock.py +0 -0
  269. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
  270. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/deepseek.py +0 -0
  271. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/gemini.py +0 -0
  272. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/github_copilot.py +0 -0
  273. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/meta.py +0 -0
  274. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/openai.py +0 -0
  275. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/providers/openrouter.py +0 -0
  276. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/runtime.py +0 -0
  277. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/types.py +0 -0
  278. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/llms/utils.py +0 -0
  279. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/lock_detect.py +0 -0
  280. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/memory/__init__.py +0 -0
  281. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/memory/db.py +0 -0
  282. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/memory/utils.py +0 -0
  283. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/memory_control.py +0 -0
  284. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/__init__.py +0 -0
  285. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/api.py +0 -0
  286. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/formatters/__init__.py +0 -0
  287. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
  288. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/formatters/thinking.py +0 -0
  289. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/identifiers.py +0 -0
  290. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/llm.py +0 -0
  291. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_config/utils.py +0 -0
  292. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/model_providers.py +0 -0
  293. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/__init__.py +0 -0
  294. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/config.py +0 -0
  295. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/local_workspace.py +0 -0
  296. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/project.py +0 -0
  297. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/workspace.py +0 -0
  298. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/monorepo/worktree.py +0 -0
  299. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/nested.py +0 -0
  300. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/observations/__init__.py +0 -0
  301. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/observations/service.py +0 -0
  302. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/__init__.py +0 -0
  303. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  304. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/environment.py +0 -0
  305. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/region_resolver.py +0 -0
  306. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/safe_methods.py +0 -0
  307. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/security.py +0 -0
  308. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/service.py +0 -0
  309. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  310. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/plugin_manager.py +0 -0
  311. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/profiler.py +0 -0
  312. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/queues.py +0 -0
  313. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/requests.py +0 -0
  314. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/responses.py +0 -0
  315. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/__init__.py +0 -0
  316. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/acp/__init__.py +0 -0
  317. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/acp/bridge.py +0 -0
  318. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/acp/models.py +0 -0
  319. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/acp/protocol.py +0 -0
  320. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/signals.py +0 -0
  321. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/server/ws_server.py +0 -0
  322. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/similarity.py +0 -0
  323. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/skills.py +0 -0
  324. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/helpers/threading.py +0 -0
  325. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/history.py +0 -0
  326. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/__init__.py +0 -0
  327. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/base.py +0 -0
  328. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/helpers.py +0 -0
  329. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/integration.py +0 -0
  330. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/manager.py +0 -0
  331. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/registry.py +0 -0
  332. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/service.py +0 -0
  333. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/hooks/types.py +0 -0
  334. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/http.py +0 -0
  335. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/interruptible_input.py +0 -0
  336. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/io.py +0 -0
  337. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/linter.py +0 -0
  338. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/llm.py +0 -0
  339. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mcp/__init__.py +0 -0
  340. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mcp/oauth.py +0 -0
  341. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mcp/utils.py +0 -0
  342. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/mdstream.py +0 -0
  343. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/models.py +0 -0
  344. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/onboarding.py +0 -0
  345. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/__init__.py +0 -0
  346. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/agent.yml +0 -0
  347. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/architect.yml +0 -0
  348. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/ask.yml +0 -0
  349. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/base.yml +0 -0
  350. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/context.yml +0 -0
  351. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/copypaste.yml +0 -0
  352. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editblock.yml +0 -0
  353. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editblock_fenced.yml +0 -0
  354. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editblock_func.yml +0 -0
  355. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editor_diff_fenced.yml +0 -0
  356. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editor_editblock.yml +0 -0
  357. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/editor_whole.yml +0 -0
  358. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/hashline.yml +0 -0
  359. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/help.yml +0 -0
  360. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/patch.yml +0 -0
  361. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/single_wholefile_func.yml +0 -0
  362. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/subagent.yml +0 -0
  363. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/udiff.yml +0 -0
  364. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/udiff_simple.yml +0 -0
  365. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/utils/__init__.py +0 -0
  366. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/utils/registry.py +0 -0
  367. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/utils/system.py +0 -0
  368. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/wholefile.yml +0 -0
  369. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/prompts/wholefile_func.yml +0 -0
  370. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  371. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  372. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  373. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  374. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  375. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  376. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  377. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  378. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  379. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  380. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  381. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  382. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  383. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  384. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  385. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  386. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  387. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  388. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  389. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  390. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  391. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  392. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  393. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  394. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  395. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  396. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  397. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  398. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  399. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  400. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  401. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  402. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/README.md +0 -0
  403. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  404. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  405. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  406. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  407. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  408. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  409. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  410. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  411. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  412. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  413. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  414. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  415. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  416. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  417. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  418. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  419. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  420. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  421. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  422. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  423. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  424. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  425. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  426. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  427. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  428. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  429. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  430. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/reasoning_tags.py +0 -0
  431. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/repo.py +0 -0
  432. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/repomap.py +0 -0
  433. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/report.py +0 -0
  434. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/__init__.py +0 -0
  435. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/model-metadata.ext.json +0 -0
  436. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/model-settings-condensed.yml +0 -0
  437. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/model-settings.yml +0 -0
  438. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/resources/providers.json +0 -0
  439. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/run_cmd.py +0 -0
  440. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/scrape.py +0 -0
  441. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/sendchat.py +0 -0
  442. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/sessions.py +0 -0
  443. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/signals.py +0 -0
  444. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/special.py +0 -0
  445. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tests/test_queue_commands.py +0 -0
  446. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/__init__.py +0 -0
  447. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/_yield.py +0 -0
  448. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/delegate.py +0 -0
  449. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/explore_code.py +0 -0
  450. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_branch.py +0 -0
  451. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_diff.py +0 -0
  452. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_log.py +0 -0
  453. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_remote.py +0 -0
  454. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_show.py +0 -0
  455. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/git_status.py +0 -0
  456. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/grep.py +0 -0
  457. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/ls.py +0 -0
  458. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/orchestrate.py +0 -0
  459. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/replace_facts.py +0 -0
  460. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/resource_manager.py +0 -0
  461. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/search_facts.py +0 -0
  462. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/thinking.py +0 -0
  463. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/undo_change.py +0 -0
  464. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/update_todo_list.py +0 -0
  465. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/__init__.py +0 -0
  466. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/base_tool.py +0 -0
  467. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/helpers.py +0 -0
  468. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/output.py +0 -0
  469. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/registry.py +0 -0
  470. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/utils/responses.py +0 -0
  471. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/validations/__init__.py +0 -0
  472. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tools/validations/validations.py +0 -0
  473. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/__init__.py +0 -0
  474. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/app.py +0 -0
  475. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/io.py +0 -0
  476. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/styles.tcss +0 -0
  477. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/__init__.py +0 -0
  478. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/completion_bar.py +0 -0
  479. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/file_list.py +0 -0
  480. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/footer.py +0 -0
  481. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/input_area.py +0 -0
  482. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/input_container.py +0 -0
  483. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/key_hints.py +0 -0
  484. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/output.py +0 -0
  485. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/output_alt.bak +0 -0
  486. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/selectable_log.py +0 -0
  487. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/status_bar.py +0 -0
  488. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/tui/widgets/subagent_pills.py +0 -0
  489. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/urls.py +0 -0
  490. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/utils.py +0 -0
  491. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/versioncheck.py +0 -0
  492. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/voice.py +0 -0
  493. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/waiting.py +0 -0
  494. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/watch.py +0 -0
  495. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/watch_prompts.py +0 -0
  496. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/blame.md +0 -0
  497. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/get-started.md +0 -0
  498. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/help-tip.md +0 -0
  499. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/help.md +0 -0
  500. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/install.md +0 -0
  501. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/keys.md +0 -0
  502. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/model-warnings.md +0 -0
  503. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/multi-line.md +0 -0
  504. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/python-m-aider.md +0 -0
  505. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/recording.css +0 -0
  506. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/recording.md +0 -0
  507. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_includes/works-best.md +0 -0
  508. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_features.scss +0 -0
  509. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_footer.scss +0 -0
  510. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_hero.scss +0 -0
  511. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_info.scss +0 -0
  512. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_layout.scss +0 -0
  513. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_reset.scss +0 -0
  514. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_testimonials.scss +0 -0
  515. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_typography.scss +0 -0
  516. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/_variables.scss +0 -0
  517. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/custom/custom.scss +0 -0
  518. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/_sass/global-overrides.scss +0 -0
  519. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docmd.config.json +0 -0
  520. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
  521. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/adv-model-settings.md +0 -0
  522. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/agent-mode.md +0 -0
  523. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/api-keys.md +0 -0
  524. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/api.md +0 -0
  525. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/conf.md +0 -0
  526. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/custom-commands.md +0 -0
  527. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  528. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/dotenv.md +0 -0
  529. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/editor.md +0 -0
  530. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/hooks.md +0 -0
  531. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/mcp.md +0 -0
  532. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/model-aliases.md +0 -0
  533. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/model-configuration.md +0 -0
  534. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/model-providers.md +0 -0
  535. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/options.md +0 -0
  536. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/persistent-memory.md +0 -0
  537. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/reasoning.md +0 -0
  538. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/retries.md +0 -0
  539. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/security.md +0 -0
  540. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/skills.md +0 -0
  541. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/subagents.md +0 -0
  542. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/tui.md +0 -0
  543. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config/workspaces.md +0 -0
  544. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/config.md +0 -0
  545. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/git.md +0 -0
  546. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/index.md +0 -0
  547. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/install/docker.md +0 -0
  548. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/install.md +0 -0
  549. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/languages.md +0 -0
  550. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  551. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/legal/privacy.md +0 -0
  552. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/anthropic.md +0 -0
  553. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/azure.md +0 -0
  554. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/bedrock.md +0 -0
  555. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/cohere.md +0 -0
  556. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/deepseek.md +0 -0
  557. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/gemini.md +0 -0
  558. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/github.md +0 -0
  559. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/groq.md +0 -0
  560. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/lm-studio.md +0 -0
  561. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/ollama.md +0 -0
  562. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/openai-compat.md +0 -0
  563. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/openai.md +0 -0
  564. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/opencode-go.md +0 -0
  565. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/openrouter.md +0 -0
  566. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/other.md +0 -0
  567. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/vertex.md +0 -0
  568. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/warnings.md +0 -0
  569. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms/xai.md +0 -0
  570. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/llms.md +0 -0
  571. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/more/analytics.md +0 -0
  572. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/more/edit-formats.md +0 -0
  573. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/more/infinite-output.md +0 -0
  574. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/more-info.md +0 -0
  575. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/repomap.md +0 -0
  576. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/scripting.md +0 -0
  577. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  578. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  579. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/imports.md +0 -0
  580. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  581. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/support.md +0 -0
  582. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  583. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  584. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/troubleshooting.md +0 -0
  585. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/commands.md +0 -0
  586. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/conventions.md +0 -0
  587. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/copypaste.md +0 -0
  588. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/images-urls.md +0 -0
  589. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/lint-test.md +0 -0
  590. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/modes.md +0 -0
  591. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/not-code.md +0 -0
  592. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/notifications.md +0 -0
  593. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/optional.md +0 -0
  594. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/sessions.md +0 -0
  595. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/tips.md +0 -0
  596. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/voice.md +0 -0
  597. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage/watch.md +0 -0
  598. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/docs/usage.md +0 -0
  599. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/package-lock.json +0 -0
  600. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/package.json +0 -0
  601. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli/website/share/index.md +0 -0
  602. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/dependency_links.txt +0 -0
  603. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/entry_points.txt +0 -0
  604. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/cecli_dev.egg-info/top_level.txt +0 -0
  605. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/docker/Dockerfile +0 -0
  606. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  607. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/pyproject.toml +0 -0
  608. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/pytest.ini +0 -0
  609. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-dev.in +0 -0
  610. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-dev.txt +0 -0
  611. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-help.in +0 -0
  612. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-help.txt +0 -0
  613. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-playwright.in +0 -0
  614. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/requirements-playwright.txt +0 -0
  615. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/requirements/tree-sitter.in +0 -0
  616. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/30k-image.py +0 -0
  617. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/__init__.py +0 -0
  618. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/blame.py +0 -0
  619. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/clean_metadata.py +0 -0
  620. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/compare-message-history.py +0 -0
  621. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/condense_model_settings.py +0 -0
  622. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/cost_analyzer.py +0 -0
  623. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/cost_calculator.py +0 -0
  624. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/dl_icons.py +0 -0
  625. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/docmd_build.sh +0 -0
  626. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/filter-chat-mode.js +0 -0
  627. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/generate_providers.py +0 -0
  628. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/get_contributor_list.js +0 -0
  629. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/get_hashline.py +0 -0
  630. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/history_prompts.py +0 -0
  631. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/homepage.py +0 -0
  632. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/issues.py +0 -0
  633. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/logo_svg.py +0 -0
  634. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/optimize_tokens.sh +0 -0
  635. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/pip-compile.sh +0 -0
  636. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/recording_audio.py +0 -0
  637. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/redact-cast.py +0 -0
  638. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/rename_to_cecli.py +0 -0
  639. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/tmux_record.sh +0 -0
  640. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/tsl_pack_langs.py +0 -0
  641. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/update-blame.sh +0 -0
  642. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/update-docs.sh +0 -0
  643. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/update-history.py +0 -0
  644. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/versionbump.py +0 -0
  645. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/scripts/yank-old-versions.py +0 -0
  646. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/setup.cfg +0 -0
  647. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/shim.pyproject.toml +0 -0
  648. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/__init__.py +0 -0
  649. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/__init__.py +0 -0
  650. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/conftest.py +0 -0
  651. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_agent_config_merge.py +0 -0
  652. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_aws_credentials.py +0 -0
  653. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_background_commands.py +0 -0
  654. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_coder.py +0 -0
  655. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_commands.py +0 -0
  656. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_custom_commands.py +0 -0
  657. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_deprecated.py +0 -0
  658. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_editblock.py +0 -0
  659. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_editor.py +0 -0
  660. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_exceptions.py +0 -0
  661. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_find_or_blocks.py +0 -0
  662. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_hashline_closure.py +0 -0
  663. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_history.py +0 -0
  664. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_io.py +0 -0
  665. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_linter.py +0 -0
  666. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_model_info_manager.py +0 -0
  667. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_model_provider_manager.py +0 -0
  668. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_models.py +0 -0
  669. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_onboarding.py +0 -0
  670. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_plugin_manager.py +0 -0
  671. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_prompts.py +0 -0
  672. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_reasoning.py +0 -0
  673. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_repo.py +0 -0
  674. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_repomap.py +0 -0
  675. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_run_cmd.py +0 -0
  676. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_sanity_check_repo.py +0 -0
  677. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_scripting.py +0 -0
  678. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_select_selector.py +0 -0
  679. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_sendchat.py +0 -0
  680. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_session_args.py +0 -0
  681. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_session_crypto.py +0 -0
  682. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_sessions.py +0 -0
  683. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_sessions_manager.py +0 -0
  684. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_skills.py +0 -0
  685. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_special.py +0 -0
  686. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_spinner.py +0 -0
  687. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_ssl_verification.py +0 -0
  688. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_udiff.py +0 -0
  689. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_urls.py +0 -0
  690. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_voice.py +0 -0
  691. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_watch.py +0 -0
  692. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/basic/test_wholefile.py +0 -0
  693. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/coders/test_coder_switching.py +0 -0
  694. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/coders/test_copypaste_coder.py +0 -0
  695. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/commands/test_auto_memory.py +0 -0
  696. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/commands/test_compaction.py +0 -0
  697. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/commands/test_remove_memory.py +0 -0
  698. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/commands/test_search_memory.py +0 -0
  699. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/commands/test_switch_agent.py +0 -0
  700. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/conftest.py +0 -0
  701. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/conversations/test_conversation_integration.py +0 -0
  702. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/conversations/test_conversation_system.py +0 -0
  703. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  704. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/chat-history.md +0 -0
  705. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/arduino/test.ino +0 -0
  706. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/bash/test.sh +0 -0
  707. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/c/test.c +0 -0
  708. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/chatito/test.chatito +0 -0
  709. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/clojure/test.clj +0 -0
  710. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  711. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/cpp/test.cpp +0 -0
  712. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/csharp/test.cs +0 -0
  713. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/d/test.d +0 -0
  714. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/dart/test.dart +0 -0
  715. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/elisp/test.el +0 -0
  716. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/elixir/test.ex +0 -0
  717. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/elm/test.elm +0 -0
  718. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/gleam/test.gleam +0 -0
  719. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/go/test.go +0 -0
  720. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/haskell/test.hs +0 -0
  721. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/hcl/test.tf +0 -0
  722. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/java/test.java +0 -0
  723. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/javascript/test.js +0 -0
  724. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/kotlin/test.kt +0 -0
  725. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/lua/test.lua +0 -0
  726. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/matlab/test.m +0 -0
  727. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/ocaml/test.ml +0 -0
  728. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  729. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/php/test.php +0 -0
  730. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/pony/test.pony +0 -0
  731. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/properties/test.properties +0 -0
  732. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/python/test.py +0 -0
  733. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/ql/test.ql +0 -0
  734. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/r/test.r +0 -0
  735. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/racket/test.rkt +0 -0
  736. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/ruby/test.rb +0 -0
  737. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/rust/test.rs +0 -0
  738. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/scala/test.scala +0 -0
  739. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/solidity/test.sol +0 -0
  740. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/swift/test.swift +0 -0
  741. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/tsx/test.tsx +0 -0
  742. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/typescript/test.ts +0 -0
  743. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/udev/test.rules +0 -0
  744. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/languages/zig/test.zig +0 -0
  745. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/sample-code-base/sample.js +0 -0
  746. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/sample-code-base/sample.py +0 -0
  747. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  748. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/watch.js +0 -0
  749. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/watch.lisp +0 -0
  750. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/watch.py +0 -0
  751. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/fixtures/watch_question.js +0 -0
  752. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/help/test_help.py +0 -0
  753. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  754. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_config.py +0 -0
  755. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_config_active.py +0 -0
  756. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  757. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  758. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  759. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/monorepo/test_workspace.py +0 -0
  760. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/observations/test_observation_service.py +0 -0
  761. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/server/acp/__init__.py +0 -0
  762. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/server/acp/test_bridge.py +0 -0
  763. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/server/acp/test_dispatch.py +0 -0
  764. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/server/acp/test_models.py +0 -0
  765. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/server/acp/test_protocol.py +0 -0
  766. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_api_base.py +0 -0
  767. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_aws_sigv4.py +0 -0
  768. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
  769. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_hyperscalers.py +0 -0
  770. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_messages_stream.py +0 -0
  771. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_messages_wire.py +0 -0
  772. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_providers_json.py +0 -0
  773. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_reasoning_config.py +0 -0
  774. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_reasoning_extract.py +0 -0
  775. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_llms_vision.py +0 -0
  776. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_memory_control.py +0 -0
  777. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_model_config.py +0 -0
  778. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/helpers/test_orchestration.py +0 -0
  779. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/hooks/__init__.py +0 -0
  780. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/hooks/test_base.py +0 -0
  781. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/hooks/test_manager.py +0 -0
  782. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/hooks/test_registry.py +0 -0
  783. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/integration/test_agent_mcp_management.py +0 -0
  784. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/integration/test_config_loading.py +0 -0
  785. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/integration/test_mcp_management.py +0 -0
  786. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/__init__.py +0 -0
  787. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/conftest.py +0 -0
  788. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/mock_server.py +0 -0
  789. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_concurrency.py +0 -0
  790. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_config.py +0 -0
  791. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_integration.py +0 -0
  792. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_logging.py +0 -0
  793. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_resilience.py +0 -0
  794. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_keepalive_unit.py +0 -0
  795. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_manager.py +0 -0
  796. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_manager_retry.py +0 -0
  797. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_server_name_normalization.py +0 -0
  798. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/mcp/test_server_sdk_compat.py +0 -0
  799. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/scrape/test_playwright_disable.py +0 -0
  800. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/scrape/test_scrape.py +0 -0
  801. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/__init__.py +0 -0
  802. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/conftest.py +0 -0
  803. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_commands.py +0 -0
  804. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_config.py +0 -0
  805. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_delegate.py +0 -0
  806. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_finished.py +0 -0
  807. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_io_proxy.py +0 -0
  808. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_service.py +0 -0
  809. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/subagents/test_sub_agent_coder.py +0 -0
  810. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/test_requests.py +0 -0
  811. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_command_format_output.py +0 -0
  812. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_edit_file_format_output.py +0 -0
  813. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_extractions.py +0 -0
  814. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_get_lines.py +0 -0
  815. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_git_branch.py +0 -0
  816. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_git_diff.py +0 -0
  817. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_grep.py +0 -0
  818. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_read_range_execute.py +0 -0
  819. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_registry.py +0 -0
  820. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_remove_mcp_tool.py +0 -0
  821. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_tool_arguments.py +0 -0
  822. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  823. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tools/validations.py +0 -0
  824. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/tui/test_app.py +0 -0
  825. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/conftest.py +0 -0
  826. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_deep_merge.py +0 -0
  827. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_edge_cases.py +0 -0
  828. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_load_mcp.py +0 -0
  829. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_performance.py +0 -0
  830. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_queues.py +0 -0
  831. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_remove_mcp.py +0 -0
  832. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_shallow_merge.py +0 -0
  833. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_signals.py +0 -0
  834. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  835. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
  836. {cecli_dev-1.2.3rc4 → cecli_dev-1.3.0rc1}/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.2.3rc4
3
+ Version: 1.3.0rc1
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
@@ -43,6 +43,7 @@ Requires-Dist: PyYAML>=6.0.2
43
43
  Requires-Dist: tomli>=2.3.0; python_version <= "3.10"
44
44
  Requires-Dist: tomlkit>=0.14.0
45
45
  Requires-Dist: diff-match-patch>=20241021
46
+ Requires-Dist: tqdm>3.0.0
46
47
  Requires-Dist: pyperclip>=1.9.0
47
48
  Requires-Dist: pydub>=0.25.1
48
49
  Requires-Dist: sounddevice>=0.5.2
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "1.2.0.dev"
3
+ __version__ = "1.3.0.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.2.3rc4'
22
- __version_tuple__ = version_tuple = (1, 2, 3, 'rc4')
21
+ __version__ = version = '1.3.0rc1'
22
+ __version_tuple__ = version_tuple = (1, 3, 0, 'rc1')
23
23
 
24
- __commit_id__ = commit_id = 'g0cce57c1b'
24
+ __commit_id__ = commit_id = 'gee851b36f'
@@ -42,6 +42,7 @@ from cecli.helpers import command_parser, command_queue, coroutines, nested, res
42
42
  from cecli.helpers.conversation import ConversationService, MessageTag
43
43
  from cecli.helpers.file_system import FileSystemService
44
44
  from cecli.helpers.io_proxy import IOProxy
45
+ from cecli.helpers.loop_detect import LoopDetectedError, LoopDetector
45
46
  from cecli.helpers.memory_control import trim_memory
46
47
  from cecli.helpers.observations.service import ObservationService
47
48
  from cecli.helpers.profiler import TokenProfiler
@@ -250,6 +251,8 @@ class Coder(metaclass=UsageMeta):
250
251
  cost_multiplier = 1
251
252
  stop_on_empty = True
252
253
  error_code = None
254
+ _output_loop_detected = False
255
+ _output_loop_message = ""
253
256
 
254
257
  # Task coordination state variables
255
258
  input_running = False
@@ -3649,6 +3652,8 @@ class Coder(metaclass=UsageMeta):
3649
3652
  self.got_reasoning_content = False
3650
3653
  self.ended_reasoning_content = False
3651
3654
  self.empty_response = False
3655
+ self._output_loop_detected = False
3656
+ self._output_loop_message = ""
3652
3657
 
3653
3658
  self._streaming_buffer_length = 0
3654
3659
  self.io.reset_streaming_response()
@@ -3857,11 +3862,14 @@ class Coder(metaclass=UsageMeta):
3857
3862
  async def show_send_output_stream(self, completion):
3858
3863
  received_content = False
3859
3864
  chunk_index = 0
3865
+ content_detector = LoopDetector()
3866
+ tool_detector = LoopDetector()
3867
+ loop_detected = False
3868
+
3869
+ stream = coroutines.interruptible_async_generator(completion, self.interrupt_event)
3860
3870
 
3861
3871
  try:
3862
- async for chunk in coroutines.interruptible_async_generator(
3863
- completion, self.interrupt_event
3864
- ):
3872
+ async for chunk in stream:
3865
3873
  if self.args.debug:
3866
3874
  with safe_open(".cecli/logs/chunks.log", "a") as f:
3867
3875
  print(chunk, file=f)
@@ -3902,6 +3910,8 @@ class Coder(metaclass=UsageMeta):
3902
3910
  tool_call_chunk.function.arguments
3903
3911
  )
3904
3912
 
3913
+ tool_detector.push(tool_call_chunk.function.arguments)
3914
+
3905
3915
  except (AttributeError, IndexError):
3906
3916
  # Handle cases where the response structure doesn't match expectations
3907
3917
  pass
@@ -3965,6 +3975,9 @@ class Coder(metaclass=UsageMeta):
3965
3975
  chunk._hidden_params["created_at"] = chunk_index
3966
3976
  self.partial_response_chunks.append(chunk)
3967
3977
 
3978
+ if text:
3979
+ content_detector.push(text)
3980
+
3968
3981
  if self.show_pretty():
3969
3982
  # Use simplified streaming - just call the method with full content
3970
3983
  content_to_show = self.live_incremental_response(False)
@@ -3985,6 +3998,30 @@ class Coder(metaclass=UsageMeta):
3985
3998
  except (asyncio.CancelledError, KeyboardInterrupt):
3986
3999
  raise KeyboardInterrupt
3987
4000
 
4001
+ except LoopDetectedError as e:
4002
+ self._output_loop_detected = True
4003
+ self._output_loop_message = str(e)
4004
+ loop_detected = True
4005
+
4006
+ if loop_detected:
4007
+ self.io.tool_warning(
4008
+ f"Output loop detected while streaming: {self._output_loop_message}"
4009
+ )
4010
+ # Explicitly close the async generators so the wrapper's interrupt
4011
+ # task and the underlying provider generator are cleaned up instead
4012
+ # of being left suspended after we stop consuming them.
4013
+ if hasattr(stream, "aclose"):
4014
+ try:
4015
+ await stream.aclose()
4016
+ except Exception:
4017
+ pass
4018
+ if hasattr(completion, "aclose"):
4019
+ try:
4020
+ await completion.aclose()
4021
+ except Exception:
4022
+ pass
4023
+ return
4024
+
3988
4025
  if (
3989
4026
  self.show_pretty()
3990
4027
  and nested.getter(self.args, "show_thinking")
@@ -4130,22 +4167,45 @@ class Coder(metaclass=UsageMeta):
4130
4167
  self.tool_reflection = True
4131
4168
  self.partial_response_tool_calls = extracted_calls
4132
4169
 
4170
+ if self._output_loop_detected:
4171
+ # A repeating output loop was caught while streaming; turn it into an
4172
+ # assistant message so the model can adjust and drop any tool calls.
4173
+ marker = "\n\n[SYSTEM CANCEL: OUTPUT LOOP DETECTED]\n"
4174
+ self.partial_response_content += marker
4175
+ self.partial_response_tool_calls = []
4176
+ self.partial_response_function_call = dict()
4177
+
4178
+ # The assistant message stored in the conversation is built from the
4179
+ # response object (via model_dump()), so the marker has to be written
4180
+ # there too, otherwise it never reaches the model to react to.
4181
+ message = response.choices[0].message
4182
+ message.content = (message.content or "") + marker
4183
+ message.tool_calls = []
4184
+ if hasattr(message, "function_call"):
4185
+ message.function_call = None
4186
+
4133
4187
  self.partial_response_consolidated = (response, func_err, content_err)
4134
4188
  return response, func_err, content_err
4135
4189
 
4136
4190
  def _build_tool_calls_from_chunks(self):
4137
- """Rebuild tool calls from the raw streaming chunks, keyed by delta index.
4138
-
4139
- Streaming deltas for parallel tool calls arrive interleaved and may start
4140
- at any index (not necessarily 0). Indexing into a dict by the delta's
4141
- tool-call ``index`` before converting it back to a list ensures every
4142
- parallel call is preserved, correctly ordered, and keeps its
4143
- provider-specific fields (e.g. thought signatures) attached.
4191
+ """Rebuild tool calls from the raw streaming chunks.
4192
+
4193
+ Parallel tool calls arrive interleaved and may start at any index.
4194
+ Most providers key fragments by a per-call ``index`` (openai / anthropic /
4195
+ gemini), but some (e.g. deepseek) reuse index0 for every call and only
4196
+ distinguish them by the ``id`` announced on the first fragment. Keying
4197
+ by id when present -- and remembering the index -> key mapping so later
4198
+ id-less fragments resolve to the right call -- preserves every parallel
4199
+ call instead of collapsing them onto one, keeps them ordered by first
4200
+ appearance, and retains provider-specific fields (e.g. thought
4201
+ signatures) attached.
4144
4202
  """
4145
4203
  ChatCompletionMessageToolCall = litellm.types.utils.ChatCompletionMessageToolCall
4146
4204
  Function = litellm.types.utils.Function
4147
4205
 
4148
4206
  tool_calls_dict = {}
4207
+ index_lookup = {}
4208
+ last_key = None
4149
4209
 
4150
4210
  for chunk in self.partial_response_chunks:
4151
4211
  try:
@@ -4160,22 +4220,39 @@ class Coder(metaclass=UsageMeta):
4160
4220
  if nested.getter(tool_call, "function") is None:
4161
4221
  continue
4162
4222
 
4223
+ tool_id = nested.getter(tool_call, "id") or ""
4163
4224
  index = nested.getter(tool_call, "index")
4164
- if index is None:
4165
- index = len(tool_calls_dict)
4225
+
4226
+ if tool_id:
4227
+ key = ("id", tool_id)
4228
+
4229
+ if index is not None:
4230
+ index_lookup[index] = key
4231
+
4232
+ last_key = key
4233
+ elif index is not None and index in index_lookup:
4234
+ key = index_lookup[index]
4235
+ elif index is not None:
4236
+ key = ("index", index)
4237
+ index_lookup[index] = key
4238
+ elif last_key is not None:
4239
+ key = last_key
4240
+ else:
4241
+ key = ("slot", len(tool_calls_dict))
4166
4242
 
4167
4243
  entry = tool_calls_dict.setdefault(
4168
- index,
4244
+ key,
4169
4245
  {
4170
4246
  "id": None,
4171
4247
  "name": None,
4172
4248
  "type": "function",
4173
4249
  "arguments": [],
4174
4250
  "provider_specific_fields": {},
4251
+ "_order": len(tool_calls_dict),
4175
4252
  },
4176
4253
  )
4177
4254
 
4178
- entry["id"] = nested.getter(tool_call, "id") or entry["id"]
4255
+ entry["id"] = tool_id or entry["id"]
4179
4256
  entry["type"] = nested.getter(tool_call, "type") or entry["type"]
4180
4257
  entry["name"] = nested.getter(tool_call, "function.name") or entry["name"]
4181
4258
 
@@ -4192,8 +4269,8 @@ class Coder(metaclass=UsageMeta):
4192
4269
  continue
4193
4270
 
4194
4271
  tool_calls = []
4195
- for index in sorted(tool_calls_dict.keys()):
4196
- data = tool_calls_dict[index]
4272
+ for key in sorted(tool_calls_dict.keys(), key=lambda k: tool_calls_dict[k]["_order"]):
4273
+ data = tool_calls_dict[key]
4197
4274
  if not (data["id"] and data["name"]):
4198
4275
  continue
4199
4276
 
@@ -76,4 +76,4 @@ Before this number hits at most 10, update what you can and yield. Do not delibe
76
76
  Important facts will be easy to search for and extract from the given context.
77
77
 
78
78
  Always prefer **concrete, reusable** facts over vague prose.
79
- Focus on extracting clear results and aids for navigating, modifying, and extending the project in the future.
79
+ Focus on extracting aids for navigating, modifying, and extending the project in the future.
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import random
3
+ import time
3
4
  import weakref
4
5
  from typing import Any, Dict, List
5
6
 
@@ -959,13 +960,23 @@ class ConversationChunks:
959
960
  if not block:
960
961
  return
961
962
 
963
+ if not hasattr(coder, "_last_child_agent_hash") or not coder._last_child_agent_hash:
964
+ coder._last_child_agent_hash = ""
965
+
966
+ message_hash = xxhash.xxh3_128_hexdigest(block.encode("utf-8"))
967
+
968
+ if message_hash == coder._last_child_agent_hash:
969
+ return # No change in sub-agent states, skip adding message
970
+
971
+ coder._last_child_agent_hash = message_hash
972
+
962
973
  ConversationService.get_manager(coder).add_message(
963
974
  message_dict={"role": "user", "content": block},
964
975
  tag=MessageTag.STATIC,
965
- priority=DEFAULT_TAG_PRIORITY[MessageTag.REMINDER] + 25, # After post_message blocks
966
- mark_for_delete=0,
967
- hash_key=("sub_agent_states",),
968
- force=True,
976
+ priority=DEFAULT_TAG_PRIORITY[
977
+ MessageTag.CUR
978
+ ], # Inject on change in normal message sequence
979
+ hash_key=("sub_agent_states", str(time.monotonic_ns())),
969
980
  )
970
981
 
971
982
  def defer_removal(self, file_path: str):
@@ -1341,28 +1341,43 @@ def _honor_cancellations(resolved_ops):
1341
1341
 
1342
1342
  def _deduplicate_ranges(resolved_ops):
1343
1343
  """
1344
- Deduplicate operations that start on the same line.
1345
- If multiple operations start on the same line, keep only the latest one.
1346
- This handles cases where a model might generate multiple operations for the same line while "thinking"
1344
+ Deduplicate operations that target the same line and operation type.
1345
+
1346
+ Inserts are anchored after their target line, so an insert and a replace
1347
+ sharing a start index are independent operations and must both be retained.
1348
+ Multiple operations of the same type still keep only the latest one.
1349
+
1350
+ Returns:
1351
+ tuple: (deduplicated_ops, dropped_ops) where dropped_ops describes the
1352
+ operations that were removed so callers can surface them as failures.
1347
1353
  """
1348
1354
  deduplicated_ops = []
1349
- # Group operations by start_idx
1350
- start_idx_to_ops = {}
1351
- # Loop to group operations by their start index
1355
+ dropped = []
1356
+ ops_by_key = {}
1357
+
1352
1358
  for op in resolved_ops:
1353
- start_idx = op["start_idx"]
1354
- if start_idx not in start_idx_to_ops:
1355
- start_idx_to_ops[start_idx] = []
1356
- start_idx_to_ops[start_idx].append(op)
1357
-
1358
- # For each start_idx, keep only the operation with the highest original index (latest in the list)
1359
- # Loop to select only the latest operation per start index
1360
- for start_idx, ops in start_idx_to_ops.items():
1361
- # Sort by original index descending and take the first one
1359
+ key = (op["start_idx"], op["op"]["operation"])
1360
+ ops_by_key.setdefault(key, []).append(op)
1361
+
1362
+ for ops in ops_by_key.values():
1362
1363
  ops.sort(key=lambda x: x["index"], reverse=True)
1363
- deduplicated_ops.append(ops[0])
1364
+ kept = ops[0]
1365
+ deduplicated_ops.append(kept)
1366
+
1367
+ for dropped_op in ops[1:]:
1368
+ dropped.append(
1369
+ {
1370
+ "index": dropped_op["index"],
1371
+ "error": (
1372
+ f"Edit {dropped_op['index'] + 1} targets the same start line and "
1373
+ f"operation type as Edit {kept['index'] + 1} and was not applied"
1374
+ ),
1375
+ "operation": dropped_op["op"],
1376
+ "failure_type": "not_applied",
1377
+ }
1378
+ )
1364
1379
 
1365
- return deduplicated_ops
1380
+ return deduplicated_ops, dropped
1366
1381
 
1367
1382
 
1368
1383
  def _honor_special_markers(resolved_ops):
@@ -1376,9 +1391,21 @@ def _honor_special_markers(resolved_ops):
1376
1391
  starting between beginning of file and that end hash.
1377
1392
  3. If an operation has a normal start hash and "000@" as end hash,
1378
1393
  remove any operations ending between that start hash and end of file.
1394
+
1395
+ Returns:
1396
+ tuple: (remaining_ops, dropped_ops) where dropped_ops describes the
1397
+ operations removed by the special markers so callers can surface them
1398
+ as failures instead of silently discarding them.
1379
1399
  """
1380
1400
  if not resolved_ops:
1381
- return resolved_ops
1401
+ return resolved_ops, []
1402
+
1403
+ def _drop(op, reason):
1404
+ return {
1405
+ "index": op["index"],
1406
+ "error": f"Edit {op['index'] + 1} {reason}",
1407
+ "operation": op["op"],
1408
+ }
1382
1409
 
1383
1410
  # Check for full file replacement (@000 to 000@)
1384
1411
  for op in resolved_ops:
@@ -1388,7 +1415,12 @@ def _honor_special_markers(resolved_ops):
1388
1415
 
1389
1416
  if start_hash == "@000" and end_hash == "000@":
1390
1417
  # This operation replaces the entire file, keep only this one
1391
- return [op]
1418
+ dropped = [
1419
+ _drop(other, "was superseded by a full-file replacement (@000..000@)")
1420
+ for other in resolved_ops
1421
+ if other is not op
1422
+ ]
1423
+ return [op], dropped
1392
1424
 
1393
1425
  # Track which operations have special markers
1394
1426
  has_special_marker = [False] * len(resolved_ops)
@@ -1399,8 +1431,8 @@ def _honor_special_markers(resolved_ops):
1399
1431
  if start_hash == "@000" or end_hash == "000@":
1400
1432
  has_special_marker[i] = True
1401
1433
 
1402
- # Mark operations for removal
1403
- ops_to_remove = set()
1434
+ # Mark operations for removal, along with the reason they were removed
1435
+ ops_to_remove = {}
1404
1436
 
1405
1437
  for i, op in enumerate(resolved_ops):
1406
1438
  original_op = op["op"]
@@ -1416,7 +1448,10 @@ def _honor_special_markers(resolved_ops):
1416
1448
  if j != i and not has_special_marker[j]:
1417
1449
  other_start_idx = other_op["start_idx"]
1418
1450
  if other_start_idx <= end_idx:
1419
- ops_to_remove.add(j)
1451
+ ops_to_remove.setdefault(
1452
+ j,
1453
+ "was superseded by an operation starting at the top of the file (@000)",
1454
+ )
1420
1455
  elif end_hash == "000@":
1421
1456
  # Operation ends at end of file
1422
1457
  # Remove any operations ending at or after this operation's start_idx
@@ -1426,26 +1461,39 @@ def _honor_special_markers(resolved_ops):
1426
1461
  if j != i and not has_special_marker[j]:
1427
1462
  other_end_idx = other_op["end_idx"]
1428
1463
  if other_end_idx >= start_idx:
1429
- ops_to_remove.add(j)
1464
+ ops_to_remove.setdefault(
1465
+ j,
1466
+ "was superseded by an operation ending at the bottom of the file (000@)",
1467
+ )
1430
1468
 
1431
1469
  # Filter out operations marked for removal
1432
1470
  result = []
1471
+ dropped = []
1433
1472
  for i, op in enumerate(resolved_ops):
1434
1473
  if i not in ops_to_remove:
1435
1474
  result.append(op)
1475
+ else:
1476
+ dropped.append(_drop(op, ops_to_remove[i]))
1436
1477
 
1437
- return result
1478
+ return result, dropped
1438
1479
 
1439
1480
 
1440
1481
  def _merged_contained_ranges(resolved_ops):
1441
1482
  """
1442
1483
  Discard inner ranges that are completely contained within outer ranges.
1443
1484
  This prevents redundant operations and potential errors.
1485
+
1486
+ Returns:
1487
+ tuple: (optimized_ops, dropped_ops) where dropped_ops describes the
1488
+ contained operations that were removed so callers can surface them
1489
+ as failures instead of silently discarding them.
1444
1490
  """
1445
1491
  optimized_ops = []
1492
+ dropped = []
1446
1493
  # Loop to remove operations that are completely contained within other operations
1447
1494
  for i, op_a in enumerate(resolved_ops):
1448
1495
  keep_op = True
1496
+ container = None
1449
1497
 
1450
1498
  # Check if this operation is contained within any other operation
1451
1499
  for j, op_b in enumerate(resolved_ops):
@@ -1466,13 +1514,25 @@ def _merged_contained_ranges(resolved_ops):
1466
1514
  # Keep both operations if they have different types
1467
1515
  continue
1468
1516
  # op_a is inside op_b, discard op_a
1517
+ container = op_b
1469
1518
  keep_op = False
1470
1519
  break
1471
1520
 
1472
1521
  if keep_op:
1473
1522
  optimized_ops.append(op_a)
1523
+ else:
1524
+ dropped.append(
1525
+ {
1526
+ "index": op_a["index"],
1527
+ "error": (
1528
+ f"Edit {op_a['index'] + 1} range is contained within "
1529
+ f"Edit {container['index'] + 1} and was not applied"
1530
+ ),
1531
+ "operation": op_a["op"],
1532
+ }
1533
+ )
1474
1534
 
1475
- return optimized_ops
1535
+ return optimized_ops, dropped
1476
1536
 
1477
1537
 
1478
1538
  def sort_ranges(op):
@@ -2002,13 +2062,6 @@ def apply_hashline_operations(
2002
2062
 
2003
2063
  if not normalized_operations:
2004
2064
  return original_content, [], failed_ops
2005
- # Convert insert operations without @000 marker to inclusive replace operations
2006
- for op in normalized_operations:
2007
- if op["operation"] == "insert":
2008
- start_hash_fragment, _, _ = parse_hashline(op["start_line_hash"])
2009
- if start_hash_fragment != "@000" and start_hash_fragment != "000@":
2010
- op["operation"] = "replace"
2011
- op["end_line_hash"] = op["start_line_hash"]
2012
2065
 
2013
2066
  # Apply hashline to original content once
2014
2067
  # This converts content to hashed lines for line tracking
@@ -2029,6 +2082,9 @@ def apply_hashline_operations(
2029
2082
  # Genesis anchor - if empty, insert at 0. If not empty, insert at -1
2030
2083
  # so that hashed_lines.insert(found_start + 1, text) inserts at 0.
2031
2084
  found_start = 0 if not hashed_lines else -1
2085
+ elif start_hash_fragment == "000@":
2086
+ # Bottom-of-file anchor - insert after the last line
2087
+ found_start = len(hashed_lines) - 1 if hashed_lines else -1
2032
2088
  else:
2033
2089
  # Try exact match first for insert operations
2034
2090
  found_start = find_hashline_by_exact_match(
@@ -2100,14 +2156,23 @@ def apply_hashline_operations(
2100
2156
 
2101
2157
  # Honor cancellations: remove operations that are cancelled by later cancel operations
2102
2158
  resolved_ops = _honor_cancellations(resolved_ops)
2103
- # Deduplicate: if multiple operations start on the same line, keep only the latest one
2104
- # This handles cases where a model might generate multiple operations for the same line while "thinking"
2105
- resolved_ops = _deduplicate_ranges(resolved_ops)
2159
+ # Deduplicate: if multiple operations start on the same line, keep only the latest one.
2160
+ # This handles cases where a model might generate multiple operations for the same line while "thinking".
2161
+ # Dropped operations are surfaced as failures instead of being silently discarded.
2162
+ resolved_ops, dropped = _deduplicate_ranges(resolved_ops)
2163
+ for drop in dropped:
2164
+ failed_ops.append(drop)
2165
+
2106
2166
  # Honor special markers: handle @000 and 000@ special markers for whole-file or partial-file operations
2107
- resolved_ops = _honor_special_markers(resolved_ops)
2108
- # Optimize: discard inner ranges that are completely contained within outer ranges
2109
- # This prevents redundant operations and potential errors
2110
- resolved_ops = _merged_contained_ranges(resolved_ops)
2167
+ resolved_ops, dropped = _honor_special_markers(resolved_ops)
2168
+ for drop in dropped:
2169
+ failed_ops.append(drop)
2170
+
2171
+ # Optimize: discard inner ranges that are completely contained within outer ranges.
2172
+ # This prevents redundant operations and potential errors.
2173
+ resolved_ops, dropped = _merged_contained_ranges(resolved_ops)
2174
+ for drop in dropped:
2175
+ failed_ops.append(drop)
2111
2176
  # Merge contiguous replace operations
2112
2177
  resolved_ops = _merge_replace_operations(resolved_ops)
2113
2178
 
@@ -2140,19 +2205,22 @@ def apply_hashline_operations(
2140
2205
  op = resolved["op"]
2141
2206
  start_idx = resolved["start_idx"]
2142
2207
  end_idx = resolved["end_idx"]
2208
+ changed = True
2143
2209
 
2144
2210
  if op["operation"] == "insert":
2145
2211
  text = op["text"]
2146
- if text and not text.endswith("\n"):
2147
- text += "\n"
2148
- # Special handling for empty hashed_lines (genesis anchor case)
2149
- if hashed_lines:
2150
- if not hashed_lines[start_idx].endswith("\n"):
2151
- hashed_lines[start_idx] += "\n"
2152
- hashed_lines.insert(start_idx + 1, text)
2212
+ if not text:
2213
+ changed = False
2153
2214
  else:
2154
- # Empty content with genesis anchor - just add the text
2155
- hashed_lines.append(text)
2215
+ if not text.endswith("\n"):
2216
+ text += "\n"
2217
+ # Special handling for empty hashed_lines (genesis anchor case)
2218
+ if hashed_lines:
2219
+ if not hashed_lines[start_idx].endswith("\n"):
2220
+ hashed_lines[start_idx] += "\n"
2221
+ hashed_lines.insert(start_idx + 1, text)
2222
+ else:
2223
+ hashed_lines.append(text)
2156
2224
  elif op["operation"] == "delete":
2157
2225
  del hashed_lines[start_idx : end_idx + 1]
2158
2226
  elif op["operation"] == "replace":
@@ -2161,6 +2229,13 @@ def apply_hashline_operations(
2161
2229
  end_idx = len(hashed_lines) - 1
2162
2230
 
2163
2231
  text = op["text"]
2232
+ # Snapshot the pre-edit range content so no-op replacements are
2233
+ # not counted as successful edits. Normalize line endings because
2234
+ # the apply path enforces a trailing newline on replacement lines.
2235
+ before_range = [
2236
+ strip_hashline(line).rstrip("\r\n")
2237
+ for line in hashed_lines[start_idx : end_idx + 1]
2238
+ ]
2164
2239
  if text:
2165
2240
  # Split text into lines, preserving trailing newline behavior
2166
2241
  # If text doesn't end with newline, we add one to ensure proper line separation
@@ -2207,12 +2282,31 @@ def apply_hashline_operations(
2207
2282
 
2208
2283
  else:
2209
2284
  # Empty text - replace with nothing (delete)
2285
+ replacement_lines = []
2210
2286
  hashed_lines[start_idx : end_idx + 1] = []
2211
2287
 
2212
- if "merged_indices" in resolved:
2213
- successful_ops.extend(resolved["merged_indices"])
2288
+ replacement_content = [line.rstrip("\r\n") for line in replacement_lines]
2289
+ if before_range == replacement_content:
2290
+ changed = False
2291
+
2292
+ if changed:
2293
+ if "merged_indices" in resolved:
2294
+ successful_ops.extend(resolved["merged_indices"])
2295
+ else:
2296
+ successful_ops.append(resolved["index"])
2214
2297
  else:
2215
- successful_ops.append(resolved["index"])
2298
+ # No-op edit: report it as failed so the caller's success count
2299
+ # reflects edits that actually changed the file
2300
+ indices = resolved.get("merged_indices") or [resolved["index"]]
2301
+ for idx in indices:
2302
+ failed_ops.append(
2303
+ {
2304
+ "index": idx,
2305
+ "error": "Edit resulted in no changes to the file content",
2306
+ "operation": op,
2307
+ "failure_type": "no_change",
2308
+ }
2309
+ )
2216
2310
  except Exception as e:
2217
2311
  failed_ops.append(
2218
2312
  {"index": resolved["index"], "error": str(e), "operation": resolved["op"]}
@@ -76,7 +76,7 @@ class HashPos:
76
76
 
77
77
  # Loose prefix for robust stripping: Matches a tilde-wrapped 4-char string containing non-ASCII
78
78
  _LOOSE_PREFIX_RE = re.compile(
79
- rf"^{HASH_DELIMITER}(?=.{{0,3}}[^\x00-\x7f]).{{4}}{HASH_DELIMITER}"
79
+ rf"^[{HASH_DELIMITER}]?(?=.{{0,3}}[^\x00-\x7f]).{{4}}{HASH_DELIMITER}"
80
80
  )
81
81
 
82
82
  def __init__(self, source_text: str = ""):
@@ -143,8 +143,8 @@ def resolve_model_config(model: str) -> Dict[str, Any]:
143
143
 
144
144
  # Effective cache flags for the domain adapters. Anthropic messages-API
145
145
  # models never cache "by default": prompt caching only happens when the
146
- # request carries explicit ``cache_control`` breakpoints, so the messages
147
- # domain injects them (agent.cache_control True + caches_by_default False).
146
+ # request asks for it, so the messages domain requests top-level automatic
147
+ # caching (agent.cache_control True + caches_by_default False).
148
148
  if family == "messages":
149
149
  agent_block["cache_control"] = True
150
150
  agent_block["caches_by_default"] = False
@@ -274,14 +274,18 @@ def parse_chat_chunk(data: Dict[str, Any]) -> Optional[CompletionChunk]:
274
274
 
275
275
  # Tool-call deltas arrive as fragments keyed by provider ``index``: the
276
276
  # first fragment carries id+name, later fragments only argument deltas.
277
- # Preserve that contract -- consumers (base_coder / stream_chunk_builder)
278
- # merge fragments by index and concatenate the ``_fragment`` JSON.
277
+ # Preserve the raw index AND the id -- consumers (base_coder /
278
+ # stream_chunk_builder) key by id when present and fall back to the index,
279
+ # so parallel calls that reuse index0 (e.g. deepseek) are not collapsed.
279
280
  for tc in delta.get("tool_calls") or []:
280
281
  fn = tc.get("function") or {}
281
282
  args_raw = fn.get("arguments") or ""
282
283
  tool_calls.append(
283
284
  ToolCall(
284
- id=tc.get("id", ""), name=fn.get("name", ""), arguments={"_fragment": args_raw}
285
+ id=tc.get("id", ""),
286
+ name=fn.get("name", ""),
287
+ index=tc.get("index"),
288
+ arguments={"_fragment": args_raw},
285
289
  )
286
290
  )
287
291