cecli-dev 1.0.0rc5__tar.gz → 1.0.0rc7__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 (719) hide show
  1. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/PKG-INFO +1 -1
  2. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/README.md +15 -6
  3. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/__init__.py +1 -1
  4. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/_version.py +3 -3
  5. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/args.py +6 -0
  6. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/agent_coder.py +19 -0
  7. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/base_coder.py +32 -5
  8. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/hashpos.py +3 -4
  9. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/environment.py +53 -3
  10. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/interruptible_input.py +8 -1
  11. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/io.py +14 -1
  12. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/main.py +15 -0
  13. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/manager.py +44 -16
  14. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/server.py +42 -0
  15. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/repo.py +1 -0
  16. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/grep.py +18 -18
  17. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/conf.md +3 -0
  18. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/options.md +8 -0
  19. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/PKG-INFO +1 -1
  20. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/SOURCES.txt +3 -0
  21. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/scm_file_list.json +3 -0
  22. cecli_dev-1.0.0rc7/cecli_dev.egg-info/scm_version.json +8 -0
  23. cecli_dev-1.0.0rc7/tests/basic/test_select_selector.py +140 -0
  24. cecli_dev-1.0.0rc7/tests/basic/test_spinner.py +86 -0
  25. cecli_dev-1.0.0rc7/tests/conftest.py +35 -0
  26. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_repomap_workspace.py +2 -2
  27. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/observations/test_observation_service.py +2 -0
  28. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_resilience.py +1 -1
  29. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_manager.py +6 -2
  30. cecli_dev-1.0.0rc7/tests/mcp/test_manager_retry.py +826 -0
  31. cecli_dev-1.0.0rc5/cecli_dev.egg-info/scm_version.json +0 -8
  32. cecli_dev-1.0.0rc5/tests/conftest.py +0 -16
  33. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.dockerignore +0 -0
  34. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.flake8 +0 -0
  35. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.gitattributes +0 -0
  36. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  37. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/check_pypi_version.yml +0 -0
  38. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/docker-build-test.yml +0 -0
  39. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/docker-release.yml +0 -0
  40. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/issues.yml +0 -0
  41. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/pages.yml +0 -0
  42. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/pre-commit.yml +0 -0
  43. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/release.yml +0 -0
  44. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/ubuntu-tests.yml +0 -0
  45. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/windows-tests.yml +0 -0
  46. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/windows_check_pypi_version.yml +0 -0
  47. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.gitignore +0 -0
  48. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.pre-commit-config.yaml +0 -0
  49. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CHANGELOG.md +0 -0
  50. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CNAME +0 -0
  51. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CONTRIBUTING.md +0 -0
  52. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/HISTORY.md +0 -0
  53. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/LICENSE.txt +0 -0
  54. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/MANIFEST.in +0 -0
  55. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/README.md +0 -0
  56. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/Dockerfile +0 -0
  57. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/__init__.py +0 -0
  58. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/benchmark.py +0 -0
  59. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/benchmark_classic.py +0 -0
  60. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/clone-exercism.sh +0 -0
  61. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/cpp-test.sh +0 -0
  62. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/docker.sh +0 -0
  63. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/docker_build.sh +0 -0
  64. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/install-docker-ubuntu.sh +0 -0
  65. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/npm-test.sh +0 -0
  66. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/over_time.py +0 -0
  67. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/plot.sh +0 -0
  68. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/plots.py +0 -0
  69. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/problem_stats.py +0 -0
  70. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/prompts.py +0 -0
  71. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/refactor_tools.py +0 -0
  72. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/rsync.sh +0 -0
  73. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/rungrid.py +0 -0
  74. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe-bench-lite.txt +0 -0
  75. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe-bench.txt +0 -0
  76. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe_bench.py +0 -0
  77. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/test_benchmark.py +0 -0
  78. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.1.sh +0 -0
  79. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.2.sh +0 -0
  80. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.3.sh +0 -0
  81. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.4.sh +0 -0
  82. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/__main__.py +0 -0
  83. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/args_formatter.py +0 -0
  84. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/change_tracker.py +0 -0
  85. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/__init__.py +0 -0
  86. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/architect_coder.py +0 -0
  87. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/ask_coder.py +0 -0
  88. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/chat_chunks.py +0 -0
  89. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/context_coder.py +0 -0
  90. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/copypaste_coder.py +0 -0
  91. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_coder.py +0 -0
  92. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_fenced_coder.py +0 -0
  93. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_func_coder.py +0 -0
  94. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  95. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_editblock_coder.py +0 -0
  96. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_whole_coder.py +0 -0
  97. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/hashline_coder.py +0 -0
  98. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/help_coder.py +0 -0
  99. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/patch_coder.py +0 -0
  100. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/search_replace.py +0 -0
  101. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/shell.py +0 -0
  102. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/single_wholefile_func_coder.py +0 -0
  103. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/sub_agent_coder.py +0 -0
  104. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/udiff_coder.py +0 -0
  105. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/udiff_simple.py +0 -0
  106. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/wholefile_coder.py +0 -0
  107. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/wholefile_func_coder.py +0 -0
  108. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/__init__.py +0 -0
  109. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/add.py +0 -0
  110. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent.py +0 -0
  111. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent_model.py +0 -0
  112. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent_tree.py +0 -0
  113. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/architect.py +0 -0
  114. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/ask.py +0 -0
  115. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/chat_mode.py +0 -0
  116. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/clear.py +0 -0
  117. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/code.py +0 -0
  118. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/command_prefix.py +0 -0
  119. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/commit.py +0 -0
  120. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/compact.py +0 -0
  121. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context.py +0 -0
  122. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context_blocks.py +0 -0
  123. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context_management.py +0 -0
  124. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/copy.py +0 -0
  125. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/copy_context.py +0 -0
  126. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/core.py +0 -0
  127. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/diff.py +0 -0
  128. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/drop.py +0 -0
  129. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/editor.py +0 -0
  130. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/editor_model.py +0 -0
  131. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/exclude_skill.py +0 -0
  132. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/exit.py +0 -0
  133. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/git.py +0 -0
  134. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hashline.py +0 -0
  135. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/help.py +0 -0
  136. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/history_search.py +0 -0
  137. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hooks.py +0 -0
  138. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hot_reload.py +0 -0
  139. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/include_skill.py +0 -0
  140. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/lint.py +0 -0
  141. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_mcp.py +0 -0
  142. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_sessions.py +0 -0
  143. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_skills.py +0 -0
  144. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load.py +0 -0
  145. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_hook.py +0 -0
  146. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_mcp.py +0 -0
  147. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_session.py +0 -0
  148. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_skill.py +0 -0
  149. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/ls.py +0 -0
  150. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/map.py +0 -0
  151. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/map_refresh.py +0 -0
  152. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/merge.py +0 -0
  153. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/model.py +0 -0
  154. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/models.py +0 -0
  155. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/multiline_mode.py +0 -0
  156. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/paste.py +0 -0
  157. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/quit.py +0 -0
  158. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/read_only.py +0 -0
  159. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/read_only_stub.py +0 -0
  160. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reap_agent.py +0 -0
  161. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reasoning_effort.py +0 -0
  162. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_hook.py +0 -0
  163. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_mcp.py +0 -0
  164. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_skill.py +0 -0
  165. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/report.py +0 -0
  166. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reset.py +0 -0
  167. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/rules.py +0 -0
  168. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/run.py +0 -0
  169. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/save.py +0 -0
  170. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/save_session.py +0 -0
  171. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/settings.py +0 -0
  172. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/spawn_agent.py +0 -0
  173. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/switch_agent.py +0 -0
  174. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/terminal_data/linux.keytab +0 -0
  175. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/terminal_setup.py +0 -0
  176. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/test.py +0 -0
  177. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/think_tokens.py +0 -0
  178. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/tokens.py +0 -0
  179. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/undo.py +0 -0
  180. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/__init__.py +0 -0
  181. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/base_command.py +0 -0
  182. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/helpers.py +0 -0
  183. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/registry.py +0 -0
  184. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/save_load_manager.py +0 -0
  185. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/voice.py +0 -0
  186. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/weak_model.py +0 -0
  187. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/web.py +0 -0
  188. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/workspace.py +0 -0
  189. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/deprecated_args.py +0 -0
  190. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/diffs.py +0 -0
  191. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/dump.py +0 -0
  192. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/editor.py +0 -0
  193. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/exceptions.py +0 -0
  194. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/format_settings.py +0 -0
  195. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/help.py +0 -0
  196. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/help_pats.py +0 -0
  197. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/__init__.py +0 -0
  198. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/__init__.py +0 -0
  199. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/config.py +0 -0
  200. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/service.py +0 -0
  201. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/background_commands.py +0 -0
  202. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/command_parser.py +0 -0
  203. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/__init__.py +0 -0
  204. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/base_message.py +0 -0
  205. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/files.py +0 -0
  206. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/integration.py +0 -0
  207. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/manager.py +0 -0
  208. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/service.py +0 -0
  209. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/tags.py +0 -0
  210. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/utils.py +0 -0
  211. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/copypaste.py +0 -0
  212. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/coroutines.py +0 -0
  213. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/crypto.py +0 -0
  214. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_searcher.py +0 -0
  215. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/__init__.py +0 -0
  216. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/builders.py +0 -0
  217. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/ignore.py +0 -0
  218. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/ngram_index.py +0 -0
  219. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/service.py +0 -0
  220. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/trie_index.py +0 -0
  221. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/__init__.py +0 -0
  222. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/dump.py +0 -0
  223. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  224. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/main.py +0 -0
  225. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/parsers.py +0 -0
  226. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/tsl.py +0 -0
  227. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashline.py +0 -0
  228. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/__init__.py +0 -0
  229. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  230. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/transformations.py +0 -0
  231. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/io_proxy.py +0 -0
  232. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/leak_detect.py +0 -0
  233. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/model_providers.py +0 -0
  234. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/__init__.py +0 -0
  235. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/config.py +0 -0
  236. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/local_workspace.py +0 -0
  237. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/project.py +0 -0
  238. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/workspace.py +0 -0
  239. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/worktree.py +0 -0
  240. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/nested.py +0 -0
  241. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/observations/__init__.py +0 -0
  242. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/observations/service.py +0 -0
  243. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/__init__.py +0 -0
  244. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  245. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/region_resolver.py +0 -0
  246. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/safe_methods.py +0 -0
  247. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/security.py +0 -0
  248. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/service.py +0 -0
  249. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  250. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/plugin_manager.py +0 -0
  251. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/profiler.py +0 -0
  252. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/requests.py +0 -0
  253. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/responses.py +0 -0
  254. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/similarity.py +0 -0
  255. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/skills.py +0 -0
  256. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/threading.py +0 -0
  257. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/history.py +0 -0
  258. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/__init__.py +0 -0
  259. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/base.py +0 -0
  260. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/helpers.py +0 -0
  261. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/integration.py +0 -0
  262. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/manager.py +0 -0
  263. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/registry.py +0 -0
  264. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/service.py +0 -0
  265. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/types.py +0 -0
  266. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/linter.py +0 -0
  267. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/llm.py +0 -0
  268. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/__init__.py +0 -0
  269. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/oauth.py +0 -0
  270. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/utils.py +0 -0
  271. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mdstream.py +0 -0
  272. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/models.py +0 -0
  273. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/onboarding.py +0 -0
  274. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/__init__.py +0 -0
  275. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/agent.yml +0 -0
  276. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/architect.yml +0 -0
  277. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/ask.yml +0 -0
  278. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/base.yml +0 -0
  279. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/context.yml +0 -0
  280. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/copypaste.yml +0 -0
  281. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock.yml +0 -0
  282. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock_fenced.yml +0 -0
  283. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock_func.yml +0 -0
  284. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_diff_fenced.yml +0 -0
  285. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_editblock.yml +0 -0
  286. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_whole.yml +0 -0
  287. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/hashline.yml +0 -0
  288. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/help.yml +0 -0
  289. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/patch.yml +0 -0
  290. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/single_wholefile_func.yml +0 -0
  291. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/subagent.yml +0 -0
  292. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/udiff.yml +0 -0
  293. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/udiff_simple.yml +0 -0
  294. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/__init__.py +0 -0
  295. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/registry.py +0 -0
  296. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/system.py +0 -0
  297. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/wholefile.yml +0 -0
  298. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/wholefile_func.yml +0 -0
  299. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  300. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  301. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  302. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  303. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  304. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  305. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  306. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  307. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  308. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  309. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  310. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  311. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  312. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  313. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  314. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  315. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  316. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  317. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  318. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  319. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  320. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  321. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  322. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  323. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  324. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  325. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  326. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  327. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  328. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  329. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  330. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  331. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/README.md +0 -0
  332. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  333. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  334. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  335. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  336. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  337. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  338. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  339. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  340. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  341. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  342. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  343. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  344. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  345. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  346. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  347. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  348. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  349. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  350. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  351. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  352. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  353. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  354. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  355. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  356. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  357. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  358. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  359. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/reasoning_tags.py +0 -0
  360. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/repomap.py +0 -0
  361. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/report.py +0 -0
  362. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/__init__.py +0 -0
  363. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/model-metadata.json +0 -0
  364. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/model-settings.yml +0 -0
  365. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/providers.json +0 -0
  366. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/run_cmd.py +0 -0
  367. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/scrape.py +0 -0
  368. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/sendchat.py +0 -0
  369. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/sessions.py +0 -0
  370. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/signals.py +0 -0
  371. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/special.py +0 -0
  372. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/__init__.py +0 -0
  373. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/_yield.py +0 -0
  374. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/command.py +0 -0
  375. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/delegate.py +0 -0
  376. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/edit_file.py +0 -0
  377. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/explore_code.py +0 -0
  378. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_branch.py +0 -0
  379. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_diff.py +0 -0
  380. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_log.py +0 -0
  381. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_remote.py +0 -0
  382. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_show.py +0 -0
  383. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_status.py +0 -0
  384. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/ls.py +0 -0
  385. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/orchestrate.py +0 -0
  386. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/read_file.py +0 -0
  387. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/resource_manager.py +0 -0
  388. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/thinking.py +0 -0
  389. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/undo_change.py +0 -0
  390. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/update_todo_list.py +0 -0
  391. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/__init__.py +0 -0
  392. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/base_tool.py +0 -0
  393. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/helpers.py +0 -0
  394. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/output.py +0 -0
  395. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/registry.py +0 -0
  396. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/responses.py +0 -0
  397. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/validations/__init__.py +0 -0
  398. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/validations/validations.py +0 -0
  399. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/__init__.py +0 -0
  400. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/app.py +0 -0
  401. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/io.py +0 -0
  402. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/styles.tcss +0 -0
  403. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/__init__.py +0 -0
  404. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/completion_bar.py +0 -0
  405. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/file_list.py +0 -0
  406. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/footer.py +0 -0
  407. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/input_area.py +0 -0
  408. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/input_container.py +0 -0
  409. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/key_hints.py +0 -0
  410. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/output.py +0 -0
  411. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/status_bar.py +0 -0
  412. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/subagent_pills.py +0 -0
  413. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/worker.py +0 -0
  414. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/urls.py +0 -0
  415. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/utils.py +0 -0
  416. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/versioncheck.py +0 -0
  417. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/voice.py +0 -0
  418. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/waiting.py +0 -0
  419. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/watch.py +0 -0
  420. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/watch_prompts.py +0 -0
  421. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/Gemfile +0 -0
  422. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/blame.md +0 -0
  423. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/get-started.md +0 -0
  424. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/help-tip.md +0 -0
  425. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/help.md +0 -0
  426. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/install.md +0 -0
  427. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/keys.md +0 -0
  428. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/model-warnings.md +0 -0
  429. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/multi-line.md +0 -0
  430. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/python-m-aider.md +0 -0
  431. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/recording.css +0 -0
  432. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/recording.md +0 -0
  433. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/works-best.md +0 -0
  434. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_features.scss +0 -0
  435. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_footer.scss +0 -0
  436. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_hero.scss +0 -0
  437. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_info.scss +0 -0
  438. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_layout.scss +0 -0
  439. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_reset.scss +0 -0
  440. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_testimonials.scss +0 -0
  441. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_typography.scss +0 -0
  442. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_variables.scss +0 -0
  443. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/custom/custom.scss +0 -0
  444. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/global-overrides.scss +0 -0
  445. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/adv-model-settings.md +0 -0
  446. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/agent-mode.md +0 -0
  447. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/api-keys.md +0 -0
  448. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/custom-commands.md +0 -0
  449. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  450. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/dotenv.md +0 -0
  451. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/editor.md +0 -0
  452. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/hooks.md +0 -0
  453. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/mcp.md +0 -0
  454. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-aliases.md +0 -0
  455. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-configuration.md +0 -0
  456. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-providers.md +0 -0
  457. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/reasoning.md +0 -0
  458. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/retries.md +0 -0
  459. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/security.md +0 -0
  460. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/skills.md +0 -0
  461. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/subagents.md +0 -0
  462. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/tui.md +0 -0
  463. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/workspaces.md +0 -0
  464. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config.md +0 -0
  465. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/git.md +0 -0
  466. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/index.md +0 -0
  467. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/install/docker.md +0 -0
  468. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/install.md +0 -0
  469. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/languages.md +0 -0
  470. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  471. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/legal/privacy.md +0 -0
  472. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/anthropic.md +0 -0
  473. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/azure.md +0 -0
  474. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/bedrock.md +0 -0
  475. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/cohere.md +0 -0
  476. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/deepseek.md +0 -0
  477. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/gemini.md +0 -0
  478. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/github.md +0 -0
  479. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/groq.md +0 -0
  480. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/lm-studio.md +0 -0
  481. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/ollama.md +0 -0
  482. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openai-compat.md +0 -0
  483. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openai.md +0 -0
  484. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openrouter.md +0 -0
  485. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/other.md +0 -0
  486. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/vertex.md +0 -0
  487. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/warnings.md +0 -0
  488. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/xai.md +0 -0
  489. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms.md +0 -0
  490. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/analytics.md +0 -0
  491. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/edit-formats.md +0 -0
  492. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/infinite-output.md +0 -0
  493. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more-info.md +0 -0
  494. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/repomap.md +0 -0
  495. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/scripting.md +0 -0
  496. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  497. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  498. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/imports.md +0 -0
  499. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  500. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/support.md +0 -0
  501. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  502. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  503. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting.md +0 -0
  504. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/commands.md +0 -0
  505. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/conventions.md +0 -0
  506. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/copypaste.md +0 -0
  507. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/images-urls.md +0 -0
  508. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/lint-test.md +0 -0
  509. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/modes.md +0 -0
  510. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/not-code.md +0 -0
  511. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/notifications.md +0 -0
  512. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/optional.md +0 -0
  513. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/sessions.md +0 -0
  514. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/tips.md +0 -0
  515. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/voice.md +0 -0
  516. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/watch.md +0 -0
  517. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage.md +0 -0
  518. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/share/index.md +0 -0
  519. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/dependency_links.txt +0 -0
  520. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/entry_points.txt +0 -0
  521. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/requires.txt +0 -0
  522. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/top_level.txt +0 -0
  523. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/docker/Dockerfile +0 -0
  524. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  525. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/pyproject.toml +0 -0
  526. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/pytest.ini +0 -0
  527. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/common-constraints.txt +0 -0
  528. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-dev.in +0 -0
  529. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-dev.txt +0 -0
  530. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-help.in +0 -0
  531. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-help.txt +0 -0
  532. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-playwright.in +0 -0
  533. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-playwright.txt +0 -0
  534. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements.in +0 -0
  535. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/tree-sitter.in +0 -0
  536. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements.txt +0 -0
  537. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/30k-image.py +0 -0
  538. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/Dockerfile.jekyll +0 -0
  539. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/__init__.py +0 -0
  540. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/blame.py +0 -0
  541. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/clean_metadata.py +0 -0
  542. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/compare-message-history.py +0 -0
  543. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/cost_analyzer.py +0 -0
  544. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/cost_calculator.py +0 -0
  545. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/dl_icons.py +0 -0
  546. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/filter-chat-mode.js +0 -0
  547. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/generate_providers.py +0 -0
  548. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/get_contributor_list.js +0 -0
  549. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/get_hashline.py +0 -0
  550. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/history_prompts.py +0 -0
  551. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/homepage.py +0 -0
  552. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/issues.py +0 -0
  553. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/jekyll_build.sh +0 -0
  554. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/jekyll_run.sh +0 -0
  555. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/logo_svg.py +0 -0
  556. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/optimize_tokens.sh +0 -0
  557. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/pip-compile.sh +0 -0
  558. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/recording_audio.py +0 -0
  559. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/redact-cast.py +0 -0
  560. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/rename_to_cecli.py +0 -0
  561. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/tmux_record.sh +0 -0
  562. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/tsl_pack_langs.py +0 -0
  563. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-blame.sh +0 -0
  564. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-docs.sh +0 -0
  565. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-history.py +0 -0
  566. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/versionbump.py +0 -0
  567. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/yank-old-versions.py +0 -0
  568. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/setup.cfg +0 -0
  569. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/shim.pyproject.toml +0 -0
  570. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/__init__.py +0 -0
  571. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/__init__.py +0 -0
  572. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/conftest.py +0 -0
  573. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_aws_credentials.py +0 -0
  574. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_background_commands.py +0 -0
  575. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_coder.py +0 -0
  576. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_commands.py +0 -0
  577. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_custom_commands.py +0 -0
  578. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_deprecated.py +0 -0
  579. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_editblock.py +0 -0
  580. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_editor.py +0 -0
  581. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_exceptions.py +0 -0
  582. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_find_or_blocks.py +0 -0
  583. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_hashline.py +0 -0
  584. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_hashline_closure.py +0 -0
  585. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_history.py +0 -0
  586. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_io.py +0 -0
  587. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_linter.py +0 -0
  588. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_main.py +0 -0
  589. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_model_info_manager.py +0 -0
  590. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_model_provider_manager.py +0 -0
  591. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_models.py +0 -0
  592. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_onboarding.py +0 -0
  593. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_plugin_manager.py +0 -0
  594. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_prompts.py +0 -0
  595. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_reasoning.py +0 -0
  596. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_repo.py +0 -0
  597. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_repomap.py +0 -0
  598. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_run_cmd.py +0 -0
  599. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sanity_check_repo.py +0 -0
  600. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_scripting.py +0 -0
  601. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sendchat.py +0 -0
  602. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_session_args.py +0 -0
  603. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_session_crypto.py +0 -0
  604. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sessions.py +0 -0
  605. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sessions_manager.py +0 -0
  606. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_skills.py +0 -0
  607. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_special.py +0 -0
  608. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_ssl_verification.py +0 -0
  609. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_udiff.py +0 -0
  610. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_urls.py +0 -0
  611. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_voice.py +0 -0
  612. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_watch.py +0 -0
  613. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_wholefile.py +0 -0
  614. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/coders/test_coder_switching.py +0 -0
  615. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/coders/test_copypaste_coder.py +0 -0
  616. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/commands/test_compaction.py +0 -0
  617. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/commands/test_switch_agent.py +0 -0
  618. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/conversations/test_conversation_integration.py +0 -0
  619. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/conversations/test_conversation_system.py +0 -0
  620. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  621. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/chat-history.md +0 -0
  622. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/arduino/test.ino +0 -0
  623. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/bash/test.sh +0 -0
  624. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/c/test.c +0 -0
  625. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/chatito/test.chatito +0 -0
  626. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/clojure/test.clj +0 -0
  627. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  628. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/cpp/test.cpp +0 -0
  629. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/csharp/test.cs +0 -0
  630. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/d/test.d +0 -0
  631. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/dart/test.dart +0 -0
  632. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elisp/test.el +0 -0
  633. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elixir/test.ex +0 -0
  634. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elm/test.elm +0 -0
  635. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/gleam/test.gleam +0 -0
  636. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/go/test.go +0 -0
  637. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/haskell/test.hs +0 -0
  638. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/hcl/test.tf +0 -0
  639. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/java/test.java +0 -0
  640. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/javascript/test.js +0 -0
  641. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/kotlin/test.kt +0 -0
  642. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/lua/test.lua +0 -0
  643. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/matlab/test.m +0 -0
  644. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ocaml/test.ml +0 -0
  645. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  646. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/php/test.php +0 -0
  647. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/pony/test.pony +0 -0
  648. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/properties/test.properties +0 -0
  649. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/python/test.py +0 -0
  650. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ql/test.ql +0 -0
  651. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/r/test.r +0 -0
  652. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/racket/test.rkt +0 -0
  653. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ruby/test.rb +0 -0
  654. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/rust/test.rs +0 -0
  655. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/scala/test.scala +0 -0
  656. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/solidity/test.sol +0 -0
  657. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/swift/test.swift +0 -0
  658. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/tsx/test.tsx +0 -0
  659. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/typescript/test.ts +0 -0
  660. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/udev/test.rules +0 -0
  661. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/zig/test.zig +0 -0
  662. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base/sample.js +0 -0
  663. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base/sample.py +0 -0
  664. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  665. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.js +0 -0
  666. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.lisp +0 -0
  667. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.py +0 -0
  668. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch_question.js +0 -0
  669. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/help/test_help.py +0 -0
  670. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  671. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_config.py +0 -0
  672. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_config_active.py +0 -0
  673. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  674. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  675. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_workspace.py +0 -0
  676. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/test_orchestration.py +0 -0
  677. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/__init__.py +0 -0
  678. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_base.py +0 -0
  679. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_manager.py +0 -0
  680. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_registry.py +0 -0
  681. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/integration/test_agent_mcp_management.py +0 -0
  682. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/integration/test_mcp_management.py +0 -0
  683. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/__init__.py +0 -0
  684. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/conftest.py +0 -0
  685. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/mock_server.py +0 -0
  686. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_concurrency.py +0 -0
  687. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_config.py +0 -0
  688. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_integration.py +0 -0
  689. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_logging.py +0 -0
  690. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_unit.py +0 -0
  691. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/scrape/test_playwright_disable.py +0 -0
  692. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/scrape/test_scrape.py +0 -0
  693. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/__init__.py +0 -0
  694. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/conftest.py +0 -0
  695. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_commands.py +0 -0
  696. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_config.py +0 -0
  697. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_delegate.py +0 -0
  698. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_finished.py +0 -0
  699. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_io_proxy.py +0 -0
  700. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_service.py +0 -0
  701. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_sub_agent_coder.py +0 -0
  702. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/test_requests.py +0 -0
  703. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_extractions.py +0 -0
  704. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_get_lines.py +0 -0
  705. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_git_branch.py +0 -0
  706. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_git_diff.py +0 -0
  707. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_grep.py +0 -0
  708. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_insert_block.py +0 -0
  709. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_read_range_execute.py +0 -0
  710. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_registry.py +0 -0
  711. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_remove_mcp_tool.py +0 -0
  712. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_tool_arguments.py +0 -0
  713. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  714. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/validations.py +0 -0
  715. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tui/test_app.py +0 -0
  716. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_load_mcp.py +0 -0
  717. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_remove_mcp.py +0 -0
  718. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  719. {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 1.0.0rc5
3
+ Version: 1.0.0rc7
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
@@ -26,6 +26,13 @@ without any human review or supervision! The LLM could generate dangerous python
26
26
  that harms your system, like this: `import os; os.system("sudo rm -rf /")`.
27
27
  Running inside a docker container helps limit the damage that could be done.
28
28
 
29
+ The current harness (`benchmark.py`) organizes the exercises as "Cats": each
30
+ exercise carries `cat.yaml` metadata, enabling per-test selection and
31
+ deterministic subsets (e.g. `--hash-re '^0'`) for spot-checking models. The
32
+ canonical exercises source is
33
+ [ErichBSchulz/cecli-cats](https://github.com/ErichBSchulz/cecli-cats), a
34
+ Cats-formatted conversion of the polyglot benchmark.
35
+
29
36
  ## Usage
30
37
 
31
38
  There are 3 main tasks involved in benchmarking:
@@ -41,8 +48,8 @@ There are 3 main tasks involved in benchmarking:
41
48
  These steps only need to be done once.
42
49
 
43
50
  ```
44
- ORG=Aider-AI
45
- REPO=aider
51
+ ORG=cecli-dev
52
+ REPO=cecli
46
53
  # Clone the main repo
47
54
  git clone https://github.com/$ORG/$REPO.git
48
55
 
@@ -50,8 +57,9 @@ git clone https://github.com/$ORG/$REPO.git
50
57
  cd $REPO
51
58
  mkdir tmp.benchmarks
52
59
 
53
- # Clone the repo with the exercises
54
- git clone https://github.com/$ORG/polyglot-benchmark tmp.benchmarks/polyglot-benchmark
60
+ # Clone the canonical exercises source for the Cats harness
61
+ git clone https://github.com/ErichBSchulz/cecli-cats tmp.benchmarks/cecli-cats
62
+
55
63
 
56
64
  # Build the docker container
57
65
  ./benchmark/docker_build.sh
@@ -69,10 +77,10 @@ Launch the docker container and run the benchmark inside it:
69
77
  ./benchmark/docker.sh
70
78
 
71
79
  # Run the benchmark:
72
- ./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir polyglot-benchmark
80
+ ./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir cecli-cats
73
81
 
74
82
  # Or with OpenRouter models (requires OPENROUTER_API_KEY environment variable):
75
- ./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir polyglot-benchmark
83
+ ./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir cecli-cats
76
84
  ```
77
85
 
78
86
  The above will create a folder
@@ -156,6 +164,7 @@ Note the roadmap priorities:
156
164
 
157
165
  ## Limitations
158
166
 
167
+ - `benchmark_classic.py` is deprecated (it predates the async Coder API).
159
168
  - These scripts are not intended for use by typical `cecli` end users.
160
169
  - Some of the old (?deprecated) tools are written as `bash` scripts, so it will be hard to use
161
170
  them on Windows.
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.100.11.dev"
3
+ __version__ = "0.100.14.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.0rc5'
22
- __version_tuple__ = version_tuple = (1, 0, 0, 'rc5')
21
+ __version__ = version = '1.0.0rc7'
22
+ __version_tuple__ = version_tuple = (1, 0, 0, 'rc7')
23
23
 
24
- __commit_id__ = commit_id = 'g5575d3301'
24
+ __commit_id__ = commit_id = 'g7153f3816'
@@ -598,6 +598,12 @@ def get_parser(default_config_files, git_root):
598
598
  default=True,
599
599
  help="Enable/disable streaming responses (default: True)",
600
600
  )
601
+ group.add_argument(
602
+ "--spinner",
603
+ action=argparse.BooleanOptionalAction,
604
+ default=True,
605
+ help="Enable/disable the spinner while waiting for LLM responses (default: True)",
606
+ )
601
607
  group.add_argument(
602
608
  "--user-input-color",
603
609
  default="#00cc00",
@@ -315,6 +315,25 @@ class AgentCoder(Coder):
315
315
  call_result = await litellm.experimental_mcp_client.call_openai_tool(
316
316
  session=session, openai_tool=tool_call_dict
317
317
  )
318
+ except Exception as e:
319
+ if server.is_session_expired_error(e):
320
+ try:
321
+ session = await server.reconnect()
322
+ call_result = await litellm.experimental_mcp_client.call_openai_tool(
323
+ session=session, openai_tool=tool_call_dict
324
+ )
325
+ except Exception as retry_exc:
326
+ self.io.tool_warning(
327
+ f"Executing {tool_name} on {server.name} failed after reconnect:\n"
328
+ f"Error: {retry_exc}"
329
+ )
330
+ return f"Error executing tool call {tool_name}: {retry_exc}"
331
+ else:
332
+ self.io.tool_warning(
333
+ f"Executing {tool_name} on {server.name} failed:\nError: {e}"
334
+ )
335
+ return f"Error executing tool call {tool_name}: {e}"
336
+ try:
318
337
  content_parts = []
319
338
  if call_result.content:
320
339
  for item in call_result.content:
@@ -221,6 +221,7 @@ class Coder(metaclass=UsageMeta):
221
221
  message_tokens_sent = 0
222
222
  message_tokens_received = 0
223
223
  message_cached_tokens = 0
224
+ message_cost_deferred = None
224
225
  add_cache_headers = False
225
226
  cache_warming_thread = None
226
227
  num_cache_warming_pings = 0
@@ -1497,6 +1498,10 @@ class Coder(metaclass=UsageMeta):
1497
1498
  self.show_announcements()
1498
1499
  self.suppress_announcements_for_next_prompt = True
1499
1500
 
1501
+ if self.message_cost_deferred and not self.io.spinner_active:
1502
+ self.io.tool_output(self.message_cost_deferred)
1503
+ self.message_cost_deferred = None
1504
+
1500
1505
  await self.io.recreate_input()
1501
1506
  await self.io.input_task
1502
1507
  user_message = self.io.input_task.result()
@@ -1645,6 +1650,10 @@ class Coder(metaclass=UsageMeta):
1645
1650
  self.show_announcements()
1646
1651
  self.suppress_announcements_for_next_prompt = True
1647
1652
 
1653
+ if self.message_cost_deferred and not self.io.spinner_active:
1654
+ self.io.tool_output(self.message_cost_deferred)
1655
+ self.message_cost_deferred = None
1656
+
1648
1657
  # Stop spinner before showing announcements or getting input
1649
1658
  self.io.stop_spinner()
1650
1659
  self.copy_context()
@@ -2512,7 +2521,11 @@ class Coder(metaclass=UsageMeta):
2512
2521
  if not self.tui:
2513
2522
  spinner_text += f" • ${self.format_cost(self.total_cost)} session"
2514
2523
 
2515
- self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
2524
+ if self.io.spinner_active:
2525
+ self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
2526
+ else:
2527
+ self.message_cost_deferred = spinner_text
2528
+
2516
2529
  if self.stream:
2517
2530
  self.mdstream = True
2518
2531
  else:
@@ -2635,6 +2648,10 @@ class Coder(metaclass=UsageMeta):
2635
2648
 
2636
2649
  # Ensure any waiting spinner is stopped
2637
2650
  self.io.start_spinner("Processing Answer...", coder_uuid=getattr(self, "uuid", None))
2651
+
2652
+ if not self.io.spinner_active:
2653
+ self.partial_response_content = self.get_multi_response_content_in_progress(True)
2654
+
2638
2655
  self.remove_reasoning_content()
2639
2656
  self.multi_response_content = ""
2640
2657
 
@@ -2980,12 +2997,22 @@ class Coder(metaclass=UsageMeta):
2980
2997
  continue
2981
2998
 
2982
2999
  async def do_tool_call():
3000
+ nonlocal session
2983
3001
  from litellm import experimental_mcp_client
2984
3002
 
2985
- return await experimental_mcp_client.call_openai_tool(
2986
- session=session,
2987
- openai_tool=new_tool_call,
2988
- )
3003
+ try:
3004
+ return await experimental_mcp_client.call_openai_tool(
3005
+ session=session,
3006
+ openai_tool=new_tool_call,
3007
+ )
3008
+ except Exception as e:
3009
+ if server.is_session_expired_error(e):
3010
+ session = await server.reconnect()
3011
+ return await experimental_mcp_client.call_openai_tool(
3012
+ session=session,
3013
+ openai_tool=new_tool_call,
3014
+ )
3015
+ raise
2989
3016
 
2990
3017
  call_result, interrupted = await coroutines.interruptible(
2991
3018
  do_tool_call(), self.interrupt_event
@@ -101,15 +101,14 @@ class HashPos:
101
101
  packed = (line_hash << 20) | (idx_bits << 6) | occ_bits
102
102
 
103
103
  res = ""
104
- for _ in range(4):
105
- res += self.B1024[packed % 1024]
106
- packed //= 1024
104
+ for i in range(3, -1, -1):
105
+ res += self.B1024[(packed >> (10 * i)) & 0x3FF]
107
106
  return res
108
107
 
109
108
  def unpack_public_id(self, public_id: str) -> tuple[int, int, int]:
110
109
  packed = 0
111
110
  for i, char in enumerate(public_id):
112
- packed |= self.B1024.index(char) << (10 * i)
111
+ packed |= self.B1024.index(char) << (10 * (3 - i))
113
112
 
114
113
  occ_bits = packed & 0x3F
115
114
  idx_bits = (packed >> 6) & 0x3FFF
@@ -478,7 +478,8 @@ def build_orchestration_context_block(agent_config: dict[str, Any]) -> str | Non
478
478
  return None
479
479
 
480
480
  return """<context name="orchestration" from="agent">
481
- The `Orchestrate` tool lets you coordinate chains of sub agents and tools with Python code in a limited, secure sandbox across multiple turns.
481
+ The `Orchestrate` tool lets you batch multiple tool calls in a single step by writing Python code in a limited, secure sandbox.
482
+ This is much more efficient than making individual tool calls for loop-heavy workflows.
482
483
  Variables and methods defined in a script are persisted in subsequent turns.
483
484
  As such, results from previous calls can be reused and helper methods can be defined to enhance ease of use within the environment.
484
485
 
@@ -495,6 +496,10 @@ As such, results from previous calls can be reused and helper methods can be def
495
496
  | `Agent.peek(result)` | Inspect a tool result's structure and leaf content — returns a string; use `print(Agent.peek(result))` to see it |
496
497
  | `Agent.get_value(result, path, default?)` | Safely access nested values in tool results using dot-notation (e.g. `"result.0.content"`) |
497
498
 
499
+ | `Agent.get_content_id(path, text)` | Resolve a content ID from `@L{num}` or line text for EditFile |
500
+ | `Agent.resolve_regions(path, regions)` | Batch-resolve text patterns to content IDs. Use `start_line_hint` / `end_line_hint` in region spec entries for disambiguation (supports `@L<num>`, `@A{{regex}}`, `@B{{regex}}` — same hint syntax as ReadFile). Ambiguous patterns raise immediately. The returned `AgentRegion` has `.get_start(name)`, `.get_end(name)`, `.names()`, `.get(name)` |
501
+ | `Agent.edit_region(path, edits)` | Thin wrapper around EditFile that accepts pre-resolved region dicts `{"start": content_id, "end": content_id}`. Use with `Agent.resolve_regions()` and `regions.get(name)` |
502
+
498
503
  | `await Agent.sleep(seconds)` | Pause execution (0-120s max) |
499
504
 
500
505
  | `gather(**named_tasks)` | Run tasks concurrently; returns an iterable with `.key` / `["key"]` access |
@@ -524,8 +529,8 @@ All other module imports will fail.
524
529
  ```python
525
530
  tool = Agent.get_tool("delegate")
526
531
  tool_outputs = await gather(
527
- a=tool.call(prompt="A", async=False),
528
- b=tool.call(prompt="B", async=False),
532
+ a=tool.call(prompt="A"),
533
+ b=tool.call(prompt="B"),
529
534
  )
530
535
  print(tool_outputs.a) # attribute access
531
536
  print(tool_outputs["b"]) # key access
@@ -547,6 +552,51 @@ to extract specific fields by dot-path::
547
552
  Result list items are plain dicts — use item['content'] / item.get('content')
548
553
  and item['_'] / item.get('_') to access data and metadata respectively.
549
554
 
555
+ ### Creating New Files
556
+
557
+ Use `ResourceManager` to create an empty file, then `EditFile` to write
558
+ initial content (use `@000` for start/end on empty files)::
559
+
560
+ rm = Agent.get_tool("ResourceManager")
561
+ edit = Agent.get_tool("EditFile")
562
+
563
+ await rm.call(create=["path/to/new_file.py"])
564
+ await edit.call(edits=[{
565
+ "file_path": "path/to/new_file.py",
566
+ "operation": "replace",
567
+ "start_line": "@000",
568
+ "end_line": "@000",
569
+ "text": "def greet(name):\n return f\"Hello, {name}!\"\n",
570
+ }])
571
+
572
+ After creation, use `resolve_regions` and `edit_region` for targeted edits.
573
+
574
+ ### Editing with Regions
575
+
576
+ Use `Agent.resolve_regions()` to convert text patterns into content IDs, then `Agent.edit_region()` to apply edits using the resolved IDs.
577
+
578
+ #### Step 1 — resolve region boundaries once
579
+
580
+ ```python
581
+ regions = Agent.resolve_regions("foo.py", [
582
+ {"name": "my_func", "start": "def my_func", "end": "return result"},
583
+ {"name": "init", "start": "def __init__", "end": "self.x = x"},
584
+ ])
585
+ ```
586
+
587
+ #### Step 2 — Use `regions.get(name)` with `Agent.edit_region()` (recommended shorthand)
588
+
589
+ ```python
590
+ await Agent.edit_region(
591
+ file_path="foo.py",
592
+ edits=[
593
+ {"region": regions.get("my_func"), "text": "def my_func():\n return 42"},
594
+ ],
595
+ )
596
+ ```
597
+
598
+ #### Alternative: Call `EditFile` directly with `regions.get_start()` / `regions.get_end()`
599
+
550
600
  ### Gotchas
551
601
 
552
602
  - **Types**: compare with `typeof(x) == dict` or `isinstance(x, dict)` — NOT `typeof(x) == "dict"`
@@ -17,7 +17,14 @@ class InterruptibleInput:
17
17
  raise RuntimeError("InterruptibleInput is Unix-only (requires selectable stdin).")
18
18
 
19
19
  self._cancel = threading.Event()
20
- self._sel = selectors.DefaultSelector()
20
+
21
+ # The default selector (Kqueue on macOS, Epoll on Linux) cannot
22
+ # handle pipe-based stdin (e.g. when running inside Emacs comint-mode).
23
+ # Fall back to SelectSelector which works with any fd that supports select().
24
+ if not sys.stdin.isatty():
25
+ self._sel = selectors.SelectSelector()
26
+ else:
27
+ self._sel = selectors.DefaultSelector()
21
28
 
22
29
  # self-pipe to wake up select() from interrupt()
23
30
  self._r, self._w = os.pipe()
@@ -368,6 +368,7 @@ class InputOutput:
368
368
  notifications_command=None,
369
369
  notification_bell=False,
370
370
  verbose=False,
371
+ show_spinner=True,
371
372
  ):
372
373
  self.console = Console()
373
374
  self.pretty = pretty
@@ -498,6 +499,7 @@ class InputOutput:
498
499
  fancy_input = False
499
500
 
500
501
  # Spinner state
502
+ self.spinner_active = show_spinner
501
503
  self.spinner_running = False
502
504
  self.spinner_text = ""
503
505
  self.last_spinner_text = ""
@@ -506,7 +508,7 @@ class InputOutput:
506
508
  self.spinner_last_frame_index = 0
507
509
  self.unicode_palette = "░█"
508
510
  self.fallback_spinner = None
509
- self.fallback_spinner_enabled = True
511
+ self.fallback_spinner_enabled = show_spinner
510
512
 
511
513
  self.interruptible_input = None
512
514
 
@@ -568,7 +570,12 @@ class InputOutput:
568
570
  """Start the spinner."""
569
571
  self.stop_spinner()
570
572
 
573
+ if not self.spinner_active:
574
+ return
575
+
571
576
  if self.prompt_session:
577
+ if not self.fallback_spinner_enabled:
578
+ return
572
579
  self.spinner_running = True
573
580
  self.spinner_text = text
574
581
  self.spinner_frame_index = self.spinner_last_frame_index
@@ -581,9 +588,15 @@ class InputOutput:
581
588
  self.fallback_spinner.step()
582
589
 
583
590
  def update_spinner(self, text):
591
+ if not self.spinner_active:
592
+ return
593
+
584
594
  self.spinner_text = text
585
595
 
586
596
  def update_spinner_suffix(self, text=None):
597
+ if not self.spinner_active:
598
+ return
599
+
587
600
  if text:
588
601
  self.spinner_suffix = f" • {text[:16].strip()}"
589
602
  else:
@@ -36,6 +36,20 @@ from dotenv import load_dotenv
36
36
  if sys.platform == "win32":
37
37
  if hasattr(asyncio, "set_event_loop_policy"):
38
38
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
39
+ elif sys.platform == "darwin":
40
+ # The default KqueueSelector cannot handle pipe-based stdin
41
+ # (e.g. when running inside Emacs comint-mode). Fall back to
42
+ # SelectSelector which works with any file descriptor that supports select().
43
+ import selectors
44
+
45
+ if not sys.stdin.isatty():
46
+ _original_event_loop_policy = asyncio.DefaultEventLoopPolicy
47
+
48
+ class _SelectSelectorPolicy(asyncio.DefaultEventLoopPolicy):
49
+ def new_event_loop(self):
50
+ return asyncio.SelectorEventLoop(selectors.SelectSelector())
51
+
52
+ asyncio.set_event_loop_policy(_SelectSelectorPolicy())
39
53
 
40
54
  from .dump import dump # noqa
41
55
 
@@ -704,6 +718,7 @@ async def main_async(
704
718
  notifications_command=args.notifications_command,
705
719
  notification_bell=args.notification_bell,
706
720
  verbose=args.verbose,
721
+ show_spinner=args.spinner,
707
722
  )
708
723
 
709
724
  validate_tui_args(args)
@@ -160,17 +160,46 @@ class McpServerManager:
160
160
  self._server_tools[server.name] = get_local_tool_schemas()
161
161
  return True
162
162
 
163
- try:
164
- session = await server.connect()
165
- tools = await experimental_mcp_client.load_mcp_tools(session=session, format="openai")
166
- self._server_tools[server.name] = tools
167
- self._connected_servers.add(server)
168
- self._log_verbose(f"Connected to MCP server: {name}")
169
- return True
170
- except (Exception, asyncio.CancelledError) as e:
171
- if server.name != "unnamed-server":
172
- self._log_error(f"Failed to connect to MCP server {name}: {e}")
173
- return False
163
+ # Retry with exponential backoff for transient connection failures.
164
+ # Note: This also fixes a latent bug where asyncio.CancelledError was
165
+ # silently caught and treated as a connection failure. CancelledError is
166
+ # now re-raised to properly propagate cancellation.
167
+ # When io is None (e.g., during from_servers before IO is assigned),
168
+ # _log_warning and _log_error silently return — retries still happen
169
+ # but with no user-visible feedback. This is intentional.
170
+ max_retries = 3 if server.name != "unnamed-server" else 1
171
+ delay = 1.0
172
+ backoff = 2.0
173
+ max_delay = 30.0
174
+
175
+ for attempt in range(1, max_retries + 1):
176
+ try:
177
+ session = await server.connect()
178
+ tools = await experimental_mcp_client.load_mcp_tools(
179
+ session=session, format="openai"
180
+ )
181
+ self._server_tools[server.name] = tools
182
+ self._connected_servers.add(server)
183
+ self._log_verbose(f"Connected to MCP server: {name}")
184
+ return True
185
+ except asyncio.CancelledError:
186
+ raise
187
+ except Exception as e:
188
+ if attempt < max_retries and server.name != "unnamed-server":
189
+ self._log_warning(
190
+ f"Connection attempt {attempt} failed for {name}, "
191
+ f"retrying in {delay}s... ({e})"
192
+ )
193
+
194
+ await asyncio.sleep(delay)
195
+ delay = min(delay * backoff, max_delay)
196
+ else:
197
+ if server.name != "unnamed-server":
198
+ self._log_error(
199
+ f"Failed to connect to MCP server {name} "
200
+ f"after {max_retries} attempts: {e}"
201
+ )
202
+ return False
174
203
 
175
204
  async def disconnect_server(self, name: str) -> bool:
176
205
  """
@@ -281,11 +310,10 @@ class McpServerManager:
281
310
  success = await mcp_manager.add_server(server, connect=False)
282
311
  return (server, success)
283
312
 
284
- for _attempt in range(max_retries):
285
- success = await mcp_manager.add_server(server, connect=True)
286
- if success:
287
- return (server, True)
288
- return (server, False)
313
+ # connect_server now has built-in retry logic, so we only need
314
+ # a single call here — no separate retry loop needed.
315
+ success = await mcp_manager.add_server(server, connect=True)
316
+ return (server, success)
289
317
 
290
318
  tasks = []
291
319
  for server in servers:
@@ -130,6 +130,48 @@ class McpServer:
130
130
  finally:
131
131
  self.session = None
132
132
 
133
+ async def reconnect(self):
134
+ """Disconnect and reconnect, establishing a fresh session.
135
+
136
+ Used when the server has invalidated the current session (e.g., after
137
+ a server restart), as indicated by an HTTP 404 response per the MCP
138
+ protocol specification.
139
+
140
+ Returns:
141
+ ClientSession: The new active session
142
+ """
143
+ if self.io:
144
+ self.io.tool_warning(f"MCP session expired for {self.name}, reconnecting...")
145
+ await self.disconnect()
146
+ self.exit_stack = AsyncExitStack()
147
+ return await self.connect()
148
+
149
+ @staticmethod
150
+ def is_session_expired_error(exc):
151
+ """Check if an exception indicates an expired MCP session (HTTP 404).
152
+
153
+ Per the MCP specification, when a server terminates a session it
154
+ responds with HTTP 404 Not Found. The client MUST then start a new
155
+ session by sending a new InitializeRequest.
156
+
157
+ Args:
158
+ exc: The exception to check
159
+
160
+ Returns:
161
+ bool: True if the error indicates a 404 session expiry
162
+ """
163
+ import httpx
164
+
165
+ if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code == 404:
166
+ return True
167
+
168
+ # Some transports wrap the status in the exception message
169
+ exc_str = str(exc).lower()
170
+ if "404" in exc_str and ("session" in exc_str or "not found" in exc_str):
171
+ return True
172
+
173
+ return False
174
+
133
175
 
134
176
  class HttpBasedMcpServer(McpServer):
135
177
  """Base class for HTTP-based MCP servers (HTTP streaming and SSE)."""
@@ -486,6 +486,7 @@ class GitRepo:
486
486
  commit_message = None
487
487
  for model in self.models:
488
488
  spinner_text = f"Generating commit message with {model.name}\n"
489
+
489
490
  self.io.start_spinner(spinner_text, update_last_text=False)
490
491
 
491
492
  if model.system_prompt_prefix:
@@ -228,25 +228,18 @@ class Tool(BaseTool):
228
228
  "default": True,
229
229
  "description": "Whether to perform a case-insensitive search.",
230
230
  },
231
- "count": {
232
- "type": "boolean",
233
- "default": True,
234
- "description": (
235
- "Include match counts per file in the output summary."
236
- ),
237
- },
238
231
  "context_before": {
239
232
  "type": "integer",
240
233
  "default": 2,
241
234
  "description": (
242
- "Number of context lines to show before each match."
235
+ "Number of context lines to show before each match. Max 5"
243
236
  ),
244
237
  },
245
238
  "context_after": {
246
239
  "type": "integer",
247
240
  "default": 2,
248
241
  "description": (
249
- "Number of context lines to show after each match."
242
+ "Number of context lines to show after each match. Max 5"
250
243
  ),
251
244
  },
252
245
  },
@@ -362,8 +355,8 @@ class Tool(BaseTool):
362
355
  directory = search_op.get("directory", search_op.get("path", "."))
363
356
  use_regex = search_op.get("use_regex", False)
364
357
  case_insensitive = search_op.get("case_insensitive", True)
365
- context_before = search_op.get("context_before", 2)
366
- context_after = search_op.get("context_after", 2)
358
+ context_before = max(min(int(search_op.get("context_before", 2)), 5), 0)
359
+ context_after = max(min(int(search_op.get("context_after", 2)), 5), 0)
367
360
  count_enabled = search_op.get("count", True)
368
361
 
369
362
  op_result = {
@@ -502,7 +495,7 @@ class Tool(BaseTool):
502
495
  MAX_MATCHES_PER_FILE = 10
503
496
  MAX_FILES = 20
504
497
 
505
- truncated_files = []
498
+ truncated_files = {}
506
499
  total_matches = 0
507
500
  total_files = 0
508
501
 
@@ -510,14 +503,21 @@ class Tool(BaseTool):
510
503
  file_lines = pf["content"].splitlines()
511
504
  # Find actual match lines (lines with `:LINE:` pattern)
512
505
  filepath_escaped = re.escape(pf["path"])
513
- match_line_re = re.compile(r"^" + filepath_escaped + r":\d+:")
506
+ match_line_re = re.compile(r"^" + filepath_escaped + r":(\d+):")
514
507
  match_lines_found = [ln for ln in file_lines if match_line_re.match(ln)]
515
508
 
516
509
  # Normalize path to be relative to repo root
517
510
  pf["path"] = os.path.relpath(pf["path"], repo.root)
518
511
 
519
512
  if len(match_lines_found) > MAX_MATCHES_PER_FILE:
520
- truncated_files.append(pf["path"])
513
+ # Extract line numbers from excess matches (beyond first 10)
514
+ extra_lines = match_lines_found[MAX_MATCHES_PER_FILE:]
515
+ extra_line_nums = []
516
+ for xline in extra_lines:
517
+ xm = match_line_re.match(xline)
518
+ if xm:
519
+ extra_line_nums.append(int(xm.group(1)))
520
+ truncated_files[pf["path"]] = extra_line_nums
521
521
  trimmed = "\n".join(match_lines_found[:MAX_MATCHES_PER_FILE])
522
522
  pf["content"] = trimmed
523
523
  total_matches += pf.get("count_from_pass", 0)
@@ -536,7 +536,7 @@ class Tool(BaseTool):
536
536
  {
537
537
  "file": pf["path"],
538
538
  "match_count": pf.get("count_from_pass", 0),
539
- "truncated": pf["path"] in truncated_files,
539
+ "additional_matched_lines": truncated_files.get(pf["path"], []),
540
540
  "content": pf["content"],
541
541
  }
542
542
  for pf in parsed_files[:MAX_FILES]
@@ -573,7 +573,7 @@ class Tool(BaseTool):
573
573
  response = ToolResponse(cls.NORM_NAME, result_type=cls.RESULT_TYPE)
574
574
  for op_result in all_operation_results:
575
575
  files = op_result.get("files", [])
576
- metadata = {k: v for k, v in op_result.items() if k != "files"}
576
+ metadata = op_result.copy()
577
577
 
578
578
  # Build a human-readable string summary as content
579
579
  pattern = op_result.get("pattern", "")
@@ -584,7 +584,7 @@ class Tool(BaseTool):
584
584
  else:
585
585
  lines = [f"[{pattern}]"]
586
586
  for f in files:
587
- truncated_mark = " (truncated)" if f.get("truncated") else ""
587
+ truncated_mark = " (truncated)" if f.get("additional_matched_lines") else ""
588
588
  lines.append(f"{f['file']}: {f['match_count']} match(es){truncated_mark}")
589
589
  if op_result.get("has_more_files"):
590
590
  lines.append(f"... ({op_result['total_files']} files total)")
@@ -616,7 +616,7 @@ class Tool(BaseTool):
616
616
  for i, search_op in enumerate(searches):
617
617
  pattern = search_op.get("pattern", "")
618
618
  file_pattern = search_op.get("file_glob", "*")
619
- directory = search_op.get("directory", ".")
619
+ directory = search_op.get("directory", search_op.get("path", "."))
620
620
  use_regex = search_op.get("use_regex", False)
621
621
  case_insensitive = search_op.get("case_insensitive", True)
622
622
  context_before = search_op.get("context_before", 2)