cecli-dev 0.100.13__tar.gz → 0.100.14__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 (707) hide show
  1. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/PKG-INFO +2 -1
  2. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/README.md +15 -6
  3. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/__init__.py +1 -1
  4. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/_version.py +3 -3
  5. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/args.py +6 -0
  6. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/agent_coder.py +19 -0
  7. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/base_coder.py +32 -5
  8. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/interruptible_input.py +8 -1
  9. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/io.py +14 -1
  10. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/main.py +15 -0
  11. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mcp/manager.py +44 -16
  12. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mcp/server.py +44 -0
  13. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/repo.py +1 -0
  14. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/conf.md +3 -0
  15. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/options.md +8 -0
  16. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/PKG-INFO +2 -1
  17. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/SOURCES.txt +3 -0
  18. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/requires.txt +1 -0
  19. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/scm_file_list.json +3 -0
  20. cecli_dev-0.100.14/cecli_dev.egg-info/scm_version.json +8 -0
  21. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/common-constraints.txt +2 -0
  22. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements.in +3 -0
  23. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements.txt +4 -0
  24. cecli_dev-0.100.14/tests/basic/test_select_selector.py +140 -0
  25. cecli_dev-0.100.14/tests/basic/test_spinner.py +86 -0
  26. cecli_dev-0.100.14/tests/conftest.py +35 -0
  27. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_repomap_workspace.py +2 -2
  28. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/observations/test_observation_service.py +2 -0
  29. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_resilience.py +1 -1
  30. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_manager.py +6 -2
  31. cecli_dev-0.100.14/tests/mcp/test_manager_retry.py +826 -0
  32. cecli_dev-0.100.13/cecli_dev.egg-info/scm_version.json +0 -8
  33. cecli_dev-0.100.13/tests/conftest.py +0 -16
  34. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.dockerignore +0 -0
  35. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.flake8 +0 -0
  36. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.gitattributes +0 -0
  37. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  38. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/check_pypi_version.yml +0 -0
  39. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/docker-build-test.yml +0 -0
  40. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/docker-release.yml +0 -0
  41. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/issues.yml +0 -0
  42. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/pages.yml +0 -0
  43. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/pre-commit.yml +0 -0
  44. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/release.yml +0 -0
  45. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/ubuntu-tests.yml +0 -0
  46. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/windows-tests.yml +0 -0
  47. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.github/workflows/windows_check_pypi_version.yml +0 -0
  48. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.gitignore +0 -0
  49. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/.pre-commit-config.yaml +0 -0
  50. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/CHANGELOG.md +0 -0
  51. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/CNAME +0 -0
  52. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/CONTRIBUTING.md +0 -0
  53. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/HISTORY.md +0 -0
  54. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/LICENSE.txt +0 -0
  55. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/MANIFEST.in +0 -0
  56. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/README.md +0 -0
  57. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/Dockerfile +0 -0
  58. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/__init__.py +0 -0
  59. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/benchmark.py +0 -0
  60. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/benchmark_classic.py +0 -0
  61. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/clone-exercism.sh +0 -0
  62. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/cpp-test.sh +0 -0
  63. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/docker.sh +0 -0
  64. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/docker_build.sh +0 -0
  65. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/install-docker-ubuntu.sh +0 -0
  66. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/npm-test.sh +0 -0
  67. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/over_time.py +0 -0
  68. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/plot.sh +0 -0
  69. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/plots.py +0 -0
  70. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/problem_stats.py +0 -0
  71. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/prompts.py +0 -0
  72. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/refactor_tools.py +0 -0
  73. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/rsync.sh +0 -0
  74. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/rungrid.py +0 -0
  75. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/swe-bench-lite.txt +0 -0
  76. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/swe-bench.txt +0 -0
  77. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/swe_bench.py +0 -0
  78. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/test_benchmark.py +0 -0
  79. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/variations.1.sh +0 -0
  80. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/variations.2.sh +0 -0
  81. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/variations.3.sh +0 -0
  82. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/benchmark/variations.4.sh +0 -0
  83. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/__main__.py +0 -0
  84. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/args_formatter.py +0 -0
  85. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/change_tracker.py +0 -0
  86. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/__init__.py +0 -0
  87. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/architect_coder.py +0 -0
  88. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/ask_coder.py +0 -0
  89. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/chat_chunks.py +0 -0
  90. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/context_coder.py +0 -0
  91. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/copypaste_coder.py +0 -0
  92. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editblock_coder.py +0 -0
  93. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editblock_fenced_coder.py +0 -0
  94. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editblock_func_coder.py +0 -0
  95. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  96. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editor_editblock_coder.py +0 -0
  97. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/editor_whole_coder.py +0 -0
  98. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/hashline_coder.py +0 -0
  99. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/help_coder.py +0 -0
  100. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/patch_coder.py +0 -0
  101. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/search_replace.py +0 -0
  102. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/shell.py +0 -0
  103. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/single_wholefile_func_coder.py +0 -0
  104. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/sub_agent_coder.py +0 -0
  105. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/udiff_coder.py +0 -0
  106. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/udiff_simple.py +0 -0
  107. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/wholefile_coder.py +0 -0
  108. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/coders/wholefile_func_coder.py +0 -0
  109. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/__init__.py +0 -0
  110. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/add.py +0 -0
  111. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/agent.py +0 -0
  112. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/agent_model.py +0 -0
  113. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/agent_tree.py +0 -0
  114. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/architect.py +0 -0
  115. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/ask.py +0 -0
  116. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/chat_mode.py +0 -0
  117. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/clear.py +0 -0
  118. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/code.py +0 -0
  119. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/command_prefix.py +0 -0
  120. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/commit.py +0 -0
  121. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/compact.py +0 -0
  122. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/context.py +0 -0
  123. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/context_blocks.py +0 -0
  124. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/context_management.py +0 -0
  125. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/copy.py +0 -0
  126. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/copy_context.py +0 -0
  127. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/core.py +0 -0
  128. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/diff.py +0 -0
  129. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/drop.py +0 -0
  130. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/editor.py +0 -0
  131. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/editor_model.py +0 -0
  132. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/exclude_skill.py +0 -0
  133. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/exit.py +0 -0
  134. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/git.py +0 -0
  135. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/hashline.py +0 -0
  136. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/help.py +0 -0
  137. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/history_search.py +0 -0
  138. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/hooks.py +0 -0
  139. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/hot_reload.py +0 -0
  140. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/include_skill.py +0 -0
  141. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/lint.py +0 -0
  142. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/list_mcp.py +0 -0
  143. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/list_sessions.py +0 -0
  144. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/list_skills.py +0 -0
  145. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/load.py +0 -0
  146. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/load_hook.py +0 -0
  147. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/load_mcp.py +0 -0
  148. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/load_session.py +0 -0
  149. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/load_skill.py +0 -0
  150. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/ls.py +0 -0
  151. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/map.py +0 -0
  152. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/map_refresh.py +0 -0
  153. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/merge.py +0 -0
  154. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/model.py +0 -0
  155. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/models.py +0 -0
  156. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/multiline_mode.py +0 -0
  157. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/paste.py +0 -0
  158. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/quit.py +0 -0
  159. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/read_only.py +0 -0
  160. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/read_only_stub.py +0 -0
  161. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/reap_agent.py +0 -0
  162. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/reasoning_effort.py +0 -0
  163. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/remove_hook.py +0 -0
  164. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/remove_mcp.py +0 -0
  165. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/remove_skill.py +0 -0
  166. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/report.py +0 -0
  167. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/reset.py +0 -0
  168. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/rules.py +0 -0
  169. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/run.py +0 -0
  170. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/save.py +0 -0
  171. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/save_session.py +0 -0
  172. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/settings.py +0 -0
  173. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/spawn_agent.py +0 -0
  174. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/switch_agent.py +0 -0
  175. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/terminal_data/linux.keytab +0 -0
  176. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/terminal_setup.py +0 -0
  177. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/test.py +0 -0
  178. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/think_tokens.py +0 -0
  179. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/tokens.py +0 -0
  180. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/undo.py +0 -0
  181. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/utils/__init__.py +0 -0
  182. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/utils/base_command.py +0 -0
  183. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/utils/helpers.py +0 -0
  184. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/utils/registry.py +0 -0
  185. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/utils/save_load_manager.py +0 -0
  186. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/voice.py +0 -0
  187. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/weak_model.py +0 -0
  188. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/web.py +0 -0
  189. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/commands/workspace.py +0 -0
  190. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/deprecated_args.py +0 -0
  191. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/diffs.py +0 -0
  192. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/dump.py +0 -0
  193. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/editor.py +0 -0
  194. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/exceptions.py +0 -0
  195. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/format_settings.py +0 -0
  196. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/help.py +0 -0
  197. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/help_pats.py +0 -0
  198. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/__init__.py +0 -0
  199. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/agents/__init__.py +0 -0
  200. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/agents/config.py +0 -0
  201. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/agents/service.py +0 -0
  202. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/background_commands.py +0 -0
  203. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/command_parser.py +0 -0
  204. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/__init__.py +0 -0
  205. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/base_message.py +0 -0
  206. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/files.py +0 -0
  207. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/integration.py +0 -0
  208. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/manager.py +0 -0
  209. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/service.py +0 -0
  210. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/tags.py +0 -0
  211. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/conversation/utils.py +0 -0
  212. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/copypaste.py +0 -0
  213. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/coroutines.py +0 -0
  214. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/crypto.py +0 -0
  215. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_searcher.py +0 -0
  216. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/__init__.py +0 -0
  217. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/builders.py +0 -0
  218. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/ignore.py +0 -0
  219. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/ngram_index.py +0 -0
  220. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/service.py +0 -0
  221. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/file_system/trie_index.py +0 -0
  222. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/__init__.py +0 -0
  223. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/dump.py +0 -0
  224. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  225. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/main.py +0 -0
  226. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/parsers.py +0 -0
  227. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/tsl.py +0 -0
  228. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/hashline.py +0 -0
  229. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/hashpos/__init__.py +0 -0
  230. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/hashpos/hashpos.py +0 -0
  231. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  232. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/io_proxy.py +0 -0
  233. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/leak_detect.py +0 -0
  234. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/model_providers.py +0 -0
  235. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/__init__.py +0 -0
  236. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/config.py +0 -0
  237. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/local_workspace.py +0 -0
  238. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/project.py +0 -0
  239. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/workspace.py +0 -0
  240. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/monorepo/worktree.py +0 -0
  241. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/nested.py +0 -0
  242. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/observations/__init__.py +0 -0
  243. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/observations/service.py +0 -0
  244. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/plugin_manager.py +0 -0
  245. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/profiler.py +0 -0
  246. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/requests.py +0 -0
  247. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/responses.py +0 -0
  248. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/similarity.py +0 -0
  249. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/skills.py +0 -0
  250. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/helpers/threading.py +0 -0
  251. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/history.py +0 -0
  252. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/__init__.py +0 -0
  253. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/base.py +0 -0
  254. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/helpers.py +0 -0
  255. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/integration.py +0 -0
  256. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/manager.py +0 -0
  257. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/registry.py +0 -0
  258. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/service.py +0 -0
  259. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/hooks/types.py +0 -0
  260. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/linter.py +0 -0
  261. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/llm.py +0 -0
  262. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mcp/__init__.py +0 -0
  263. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mcp/oauth.py +0 -0
  264. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mcp/utils.py +0 -0
  265. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/mdstream.py +0 -0
  266. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/models.py +0 -0
  267. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/onboarding.py +0 -0
  268. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/__init__.py +0 -0
  269. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/agent.yml +0 -0
  270. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/architect.yml +0 -0
  271. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/ask.yml +0 -0
  272. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/base.yml +0 -0
  273. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/context.yml +0 -0
  274. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/copypaste.yml +0 -0
  275. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editblock.yml +0 -0
  276. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editblock_fenced.yml +0 -0
  277. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editblock_func.yml +0 -0
  278. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editor_diff_fenced.yml +0 -0
  279. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editor_editblock.yml +0 -0
  280. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/editor_whole.yml +0 -0
  281. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/hashline.yml +0 -0
  282. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/help.yml +0 -0
  283. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/patch.yml +0 -0
  284. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/single_wholefile_func.yml +0 -0
  285. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/subagent.yml +0 -0
  286. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/udiff.yml +0 -0
  287. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/udiff_simple.yml +0 -0
  288. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/utils/__init__.py +0 -0
  289. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/utils/registry.py +0 -0
  290. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/utils/system.py +0 -0
  291. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/wholefile.yml +0 -0
  292. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/prompts/wholefile_func.yml +0 -0
  293. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  294. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  295. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  296. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  297. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  298. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  299. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  300. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  301. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  302. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  303. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  304. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  305. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  306. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  307. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  308. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  309. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  310. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  311. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  312. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  313. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  314. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  315. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  316. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  317. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  318. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  319. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  320. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  321. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  322. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  323. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  324. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  325. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/README.md +0 -0
  326. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  327. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  328. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  329. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  330. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  331. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  332. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  333. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  334. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  335. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  336. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  337. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  338. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  339. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  340. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  341. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  342. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  343. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  344. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  345. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  346. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  347. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  348. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  349. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  350. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  351. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  352. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  353. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/reasoning_tags.py +0 -0
  354. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/repomap.py +0 -0
  355. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/report.py +0 -0
  356. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/resources/__init__.py +0 -0
  357. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/resources/model-metadata.json +0 -0
  358. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/resources/model-settings.yml +0 -0
  359. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/resources/providers.json +0 -0
  360. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/run_cmd.py +0 -0
  361. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/scrape.py +0 -0
  362. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/sendchat.py +0 -0
  363. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/sessions.py +0 -0
  364. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/special.py +0 -0
  365. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/__init__.py +0 -0
  366. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/_yield.py +0 -0
  367. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/command.py +0 -0
  368. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/command_interactive.py +0 -0
  369. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/delegate.py +0 -0
  370. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/edit_file.py +0 -0
  371. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/explore_code.py +0 -0
  372. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_branch.py +0 -0
  373. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_diff.py +0 -0
  374. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_log.py +0 -0
  375. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_remote.py +0 -0
  376. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_show.py +0 -0
  377. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/git_status.py +0 -0
  378. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/grep.py +0 -0
  379. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/ls.py +0 -0
  380. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/read_file.py +0 -0
  381. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/resource_manager.py +0 -0
  382. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/thinking.py +0 -0
  383. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/undo_change.py +0 -0
  384. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/update_todo_list.py +0 -0
  385. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/utils/__init__.py +0 -0
  386. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/utils/base_tool.py +0 -0
  387. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/utils/helpers.py +0 -0
  388. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/utils/output.py +0 -0
  389. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/utils/registry.py +0 -0
  390. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/validations/__init__.py +0 -0
  391. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tools/validations/validations.py +0 -0
  392. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/__init__.py +0 -0
  393. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/app.py +0 -0
  394. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/io.py +0 -0
  395. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/styles.tcss +0 -0
  396. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/__init__.py +0 -0
  397. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/completion_bar.py +0 -0
  398. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/file_list.py +0 -0
  399. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/footer.py +0 -0
  400. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/input_area.py +0 -0
  401. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/input_container.py +0 -0
  402. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/key_hints.py +0 -0
  403. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/output.py +0 -0
  404. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/status_bar.py +0 -0
  405. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/widgets/subagent_pills.py +0 -0
  406. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/tui/worker.py +0 -0
  407. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/urls.py +0 -0
  408. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/utils.py +0 -0
  409. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/versioncheck.py +0 -0
  410. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/voice.py +0 -0
  411. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/waiting.py +0 -0
  412. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/watch.py +0 -0
  413. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/watch_prompts.py +0 -0
  414. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/Gemfile +0 -0
  415. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/blame.md +0 -0
  416. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/get-started.md +0 -0
  417. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/help-tip.md +0 -0
  418. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/help.md +0 -0
  419. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/install.md +0 -0
  420. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/keys.md +0 -0
  421. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/model-warnings.md +0 -0
  422. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/multi-line.md +0 -0
  423. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/python-m-aider.md +0 -0
  424. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/recording.css +0 -0
  425. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/recording.md +0 -0
  426. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_includes/works-best.md +0 -0
  427. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_features.scss +0 -0
  428. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_footer.scss +0 -0
  429. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_hero.scss +0 -0
  430. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_info.scss +0 -0
  431. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_layout.scss +0 -0
  432. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_reset.scss +0 -0
  433. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_testimonials.scss +0 -0
  434. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_typography.scss +0 -0
  435. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/_variables.scss +0 -0
  436. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/custom/custom.scss +0 -0
  437. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/_sass/global-overrides.scss +0 -0
  438. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/adv-model-settings.md +0 -0
  439. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/agent-mode.md +0 -0
  440. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/api-keys.md +0 -0
  441. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/custom-commands.md +0 -0
  442. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  443. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/dotenv.md +0 -0
  444. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/editor.md +0 -0
  445. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/hooks.md +0 -0
  446. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/mcp.md +0 -0
  447. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/model-aliases.md +0 -0
  448. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/model-configuration.md +0 -0
  449. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/model-providers.md +0 -0
  450. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/reasoning.md +0 -0
  451. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/retries.md +0 -0
  452. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/security.md +0 -0
  453. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/skills.md +0 -0
  454. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/subagents.md +0 -0
  455. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/tui.md +0 -0
  456. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config/workspaces.md +0 -0
  457. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/config.md +0 -0
  458. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/git.md +0 -0
  459. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/index.md +0 -0
  460. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/install/docker.md +0 -0
  461. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/install.md +0 -0
  462. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/languages.md +0 -0
  463. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  464. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/legal/privacy.md +0 -0
  465. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/anthropic.md +0 -0
  466. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/azure.md +0 -0
  467. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/bedrock.md +0 -0
  468. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/cohere.md +0 -0
  469. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/deepseek.md +0 -0
  470. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/gemini.md +0 -0
  471. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/github.md +0 -0
  472. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/groq.md +0 -0
  473. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/lm-studio.md +0 -0
  474. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/ollama.md +0 -0
  475. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/openai-compat.md +0 -0
  476. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/openai.md +0 -0
  477. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/openrouter.md +0 -0
  478. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/other.md +0 -0
  479. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/vertex.md +0 -0
  480. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/warnings.md +0 -0
  481. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms/xai.md +0 -0
  482. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/llms.md +0 -0
  483. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/more/analytics.md +0 -0
  484. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/more/edit-formats.md +0 -0
  485. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/more/infinite-output.md +0 -0
  486. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/more-info.md +0 -0
  487. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/repomap.md +0 -0
  488. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/scripting.md +0 -0
  489. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  490. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  491. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/imports.md +0 -0
  492. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  493. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/support.md +0 -0
  494. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  495. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  496. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting.md +0 -0
  497. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/commands.md +0 -0
  498. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/conventions.md +0 -0
  499. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/copypaste.md +0 -0
  500. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/images-urls.md +0 -0
  501. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/lint-test.md +0 -0
  502. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/modes.md +0 -0
  503. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/not-code.md +0 -0
  504. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/notifications.md +0 -0
  505. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/optional.md +0 -0
  506. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/sessions.md +0 -0
  507. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/tips.md +0 -0
  508. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/voice.md +0 -0
  509. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage/watch.md +0 -0
  510. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/docs/usage.md +0 -0
  511. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli/website/share/index.md +0 -0
  512. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/dependency_links.txt +0 -0
  513. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/entry_points.txt +0 -0
  514. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/cecli_dev.egg-info/top_level.txt +0 -0
  515. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/docker/Dockerfile +0 -0
  516. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  517. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/pyproject.toml +0 -0
  518. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/pytest.ini +0 -0
  519. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-dev.in +0 -0
  520. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-dev.txt +0 -0
  521. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-help.in +0 -0
  522. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-help.txt +0 -0
  523. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-playwright.in +0 -0
  524. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/requirements-playwright.txt +0 -0
  525. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/requirements/tree-sitter.in +0 -0
  526. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/30k-image.py +0 -0
  527. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/Dockerfile.jekyll +0 -0
  528. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/__init__.py +0 -0
  529. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/blame.py +0 -0
  530. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/clean_metadata.py +0 -0
  531. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/compare-message-history.py +0 -0
  532. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/cost_analyzer.py +0 -0
  533. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/cost_calculator.py +0 -0
  534. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/dl_icons.py +0 -0
  535. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/filter-chat-mode.js +0 -0
  536. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/generate_providers.py +0 -0
  537. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/get_contributor_list.js +0 -0
  538. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/get_hashline.py +0 -0
  539. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/history_prompts.py +0 -0
  540. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/homepage.py +0 -0
  541. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/issues.py +0 -0
  542. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/jekyll_build.sh +0 -0
  543. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/jekyll_run.sh +0 -0
  544. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/logo_svg.py +0 -0
  545. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/optimize_tokens.sh +0 -0
  546. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/pip-compile.sh +0 -0
  547. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/recording_audio.py +0 -0
  548. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/redact-cast.py +0 -0
  549. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/rename_to_cecli.py +0 -0
  550. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/tmux_record.sh +0 -0
  551. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/tsl_pack_langs.py +0 -0
  552. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/update-blame.sh +0 -0
  553. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/update-docs.sh +0 -0
  554. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/update-history.py +0 -0
  555. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/versionbump.py +0 -0
  556. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/scripts/yank-old-versions.py +0 -0
  557. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/setup.cfg +0 -0
  558. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/shim.pyproject.toml +0 -0
  559. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/__init__.py +0 -0
  560. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/__init__.py +0 -0
  561. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/conftest.py +0 -0
  562. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_aws_credentials.py +0 -0
  563. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_background_commands.py +0 -0
  564. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_coder.py +0 -0
  565. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_commands.py +0 -0
  566. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_custom_commands.py +0 -0
  567. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_deprecated.py +0 -0
  568. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_editblock.py +0 -0
  569. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_editor.py +0 -0
  570. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_exceptions.py +0 -0
  571. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_find_or_blocks.py +0 -0
  572. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_hashline.py +0 -0
  573. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_hashline_closure.py +0 -0
  574. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_history.py +0 -0
  575. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_io.py +0 -0
  576. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_linter.py +0 -0
  577. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_main.py +0 -0
  578. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_model_info_manager.py +0 -0
  579. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_model_provider_manager.py +0 -0
  580. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_models.py +0 -0
  581. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_onboarding.py +0 -0
  582. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_plugin_manager.py +0 -0
  583. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_prompts.py +0 -0
  584. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_reasoning.py +0 -0
  585. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_repo.py +0 -0
  586. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_repomap.py +0 -0
  587. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_run_cmd.py +0 -0
  588. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_sanity_check_repo.py +0 -0
  589. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_scripting.py +0 -0
  590. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_sendchat.py +0 -0
  591. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_session_args.py +0 -0
  592. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_session_crypto.py +0 -0
  593. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_sessions.py +0 -0
  594. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_sessions_manager.py +0 -0
  595. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_skills.py +0 -0
  596. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_special.py +0 -0
  597. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_ssl_verification.py +0 -0
  598. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_udiff.py +0 -0
  599. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_urls.py +0 -0
  600. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_voice.py +0 -0
  601. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_watch.py +0 -0
  602. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/basic/test_wholefile.py +0 -0
  603. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/coders/test_coder_switching.py +0 -0
  604. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/coders/test_copypaste_coder.py +0 -0
  605. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/commands/test_compaction.py +0 -0
  606. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/commands/test_switch_agent.py +0 -0
  607. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/conversations/test_conversation_integration.py +0 -0
  608. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/conversations/test_conversation_system.py +0 -0
  609. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  610. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/chat-history.md +0 -0
  611. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/arduino/test.ino +0 -0
  612. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/bash/test.sh +0 -0
  613. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/c/test.c +0 -0
  614. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/chatito/test.chatito +0 -0
  615. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/clojure/test.clj +0 -0
  616. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  617. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/cpp/test.cpp +0 -0
  618. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/csharp/test.cs +0 -0
  619. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/d/test.d +0 -0
  620. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/dart/test.dart +0 -0
  621. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/elisp/test.el +0 -0
  622. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/elixir/test.ex +0 -0
  623. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/elm/test.elm +0 -0
  624. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/gleam/test.gleam +0 -0
  625. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/go/test.go +0 -0
  626. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/haskell/test.hs +0 -0
  627. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/hcl/test.tf +0 -0
  628. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/java/test.java +0 -0
  629. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/javascript/test.js +0 -0
  630. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/kotlin/test.kt +0 -0
  631. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/lua/test.lua +0 -0
  632. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/matlab/test.m +0 -0
  633. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/ocaml/test.ml +0 -0
  634. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  635. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/php/test.php +0 -0
  636. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/pony/test.pony +0 -0
  637. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/properties/test.properties +0 -0
  638. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/python/test.py +0 -0
  639. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/ql/test.ql +0 -0
  640. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/r/test.r +0 -0
  641. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/racket/test.rkt +0 -0
  642. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/ruby/test.rb +0 -0
  643. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/rust/test.rs +0 -0
  644. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/scala/test.scala +0 -0
  645. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/solidity/test.sol +0 -0
  646. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/swift/test.swift +0 -0
  647. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/tsx/test.tsx +0 -0
  648. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/typescript/test.ts +0 -0
  649. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/udev/test.rules +0 -0
  650. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/languages/zig/test.zig +0 -0
  651. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base/sample.js +0 -0
  652. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base/sample.py +0 -0
  653. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  654. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/watch.js +0 -0
  655. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/watch.lisp +0 -0
  656. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/watch.py +0 -0
  657. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/fixtures/watch_question.js +0 -0
  658. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/help/test_help.py +0 -0
  659. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  660. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_config.py +0 -0
  661. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_config_active.py +0 -0
  662. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  663. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  664. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_workspace.py +0 -0
  665. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/hooks/__init__.py +0 -0
  666. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/hooks/test_base.py +0 -0
  667. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/hooks/test_manager.py +0 -0
  668. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/hooks/test_registry.py +0 -0
  669. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/integration/test_agent_mcp_management.py +0 -0
  670. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/integration/test_mcp_management.py +0 -0
  671. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/__init__.py +0 -0
  672. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/conftest.py +0 -0
  673. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/mock_server.py +0 -0
  674. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_concurrency.py +0 -0
  675. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_config.py +0 -0
  676. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_integration.py +0 -0
  677. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_logging.py +0 -0
  678. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_unit.py +0 -0
  679. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/scrape/test_playwright_disable.py +0 -0
  680. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/scrape/test_scrape.py +0 -0
  681. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/__init__.py +0 -0
  682. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/conftest.py +0 -0
  683. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_commands.py +0 -0
  684. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_config.py +0 -0
  685. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_delegate.py +0 -0
  686. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_finished.py +0 -0
  687. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_io_proxy.py +0 -0
  688. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_service.py +0 -0
  689. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/subagents/test_sub_agent_coder.py +0 -0
  690. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/test_requests.py +0 -0
  691. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_extractions.py +0 -0
  692. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_get_lines.py +0 -0
  693. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_git_branch.py +0 -0
  694. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_git_diff.py +0 -0
  695. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_grep.py +0 -0
  696. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_insert_block.py +0 -0
  697. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_read_range_execute.py +0 -0
  698. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_registry.py +0 -0
  699. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_remove_mcp_tool.py +0 -0
  700. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_tool_arguments.py +0 -0
  701. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  702. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tools/validations.py +0 -0
  703. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/tui/test_app.py +0 -0
  704. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/unit/test_load_mcp.py +0 -0
  705. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/unit/test_remove_mcp.py +0 -0
  706. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  707. {cecli_dev-0.100.13 → cecli_dev-0.100.14}/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: 0.100.13
3
+ Version: 0.100.14
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
@@ -59,6 +59,7 @@ Requires-Dist: rapidfuzz>=3.0
59
59
  Requires-Dist: ngram>=4.0.3
60
60
  Requires-Dist: rustworkx>=0.15.0
61
61
  Requires-Dist: scipy>=1.15.3
62
+ Requires-Dist: orjson>=3.11.6
62
63
  Requires-Dist: importlib-metadata>=7.2.1
63
64
  Requires-Dist: tomli>=2.3.0; python_version <= "3.10"
64
65
  Requires-Dist: tree-sitter==0.23.2; python_version < "3.10"
@@ -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 = '0.100.13'
22
- __version_tuple__ = version_tuple = (0, 100, 13)
21
+ __version__ = version = '0.100.14'
22
+ __version_tuple__ = version_tuple = (0, 100, 14)
23
23
 
24
- __commit_id__ = commit_id = 'g5879c9b5f'
24
+ __commit_id__ = commit_id = 'gd2fa11692'
@@ -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",
@@ -305,6 +305,25 @@ class AgentCoder(Coder):
305
305
  call_result = await litellm.experimental_mcp_client.call_openai_tool(
306
306
  session=session, openai_tool=tool_call_dict
307
307
  )
308
+ except Exception as e:
309
+ if server.is_session_expired_error(e):
310
+ try:
311
+ session = await server.reconnect()
312
+ call_result = await litellm.experimental_mcp_client.call_openai_tool(
313
+ session=session, openai_tool=tool_call_dict
314
+ )
315
+ except Exception as retry_exc:
316
+ self.io.tool_warning(
317
+ f"Executing {tool_name} on {server.name} failed after reconnect:\n"
318
+ f"Error: {retry_exc}"
319
+ )
320
+ return f"Error executing tool call {tool_name}: {retry_exc}"
321
+ else:
322
+ self.io.tool_warning(
323
+ f"Executing {tool_name} on {server.name} failed:\nError: {e}"
324
+ )
325
+ return f"Error executing tool call {tool_name}: {e}"
326
+ try:
308
327
  content_parts = []
309
328
  if call_result.content:
310
329
  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
@@ -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()
@@ -369,6 +369,7 @@ class InputOutput:
369
369
  notifications_command=None,
370
370
  notification_bell=False,
371
371
  verbose=False,
372
+ show_spinner=True,
372
373
  ):
373
374
  self.console = Console()
374
375
  self.pretty = pretty
@@ -499,6 +500,7 @@ class InputOutput:
499
500
  fancy_input = False
500
501
 
501
502
  # Spinner state
503
+ self.spinner_active = show_spinner
502
504
  self.spinner_running = False
503
505
  self.spinner_text = ""
504
506
  self.last_spinner_text = ""
@@ -507,7 +509,7 @@ class InputOutput:
507
509
  self.spinner_last_frame_index = 0
508
510
  self.unicode_palette = "░█"
509
511
  self.fallback_spinner = None
510
- self.fallback_spinner_enabled = True
512
+ self.fallback_spinner_enabled = show_spinner
511
513
 
512
514
  self.interruptible_input = None
513
515
 
@@ -569,7 +571,12 @@ class InputOutput:
569
571
  """Start the spinner."""
570
572
  self.stop_spinner()
571
573
 
574
+ if not self.spinner_active:
575
+ return
576
+
572
577
  if self.prompt_session:
578
+ if not self.fallback_spinner_enabled:
579
+ return
573
580
  self.spinner_running = True
574
581
  self.spinner_text = text
575
582
  self.spinner_frame_index = self.spinner_last_frame_index
@@ -582,9 +589,15 @@ class InputOutput:
582
589
  self.fallback_spinner.step()
583
590
 
584
591
  def update_spinner(self, text):
592
+ if not self.spinner_active:
593
+ return
594
+
585
595
  self.spinner_text = text
586
596
 
587
597
  def update_spinner_suffix(self, text=None):
598
+ if not self.spinner_active:
599
+ return
600
+
588
601
  if text:
589
602
  self.spinner_suffix = f" • {text[:16].strip()}"
590
603
  else:
@@ -40,6 +40,20 @@ from dotenv import load_dotenv
40
40
  if sys.platform == "win32":
41
41
  if hasattr(asyncio, "set_event_loop_policy"):
42
42
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
43
+ elif sys.platform == "darwin":
44
+ # The default KqueueSelector cannot handle pipe-based stdin
45
+ # (e.g. when running inside Emacs comint-mode). Fall back to
46
+ # SelectSelector which works with any file descriptor that supports select().
47
+ import selectors
48
+
49
+ if not sys.stdin.isatty():
50
+ _original_event_loop_policy = asyncio.DefaultEventLoopPolicy
51
+
52
+ class _SelectSelectorPolicy(asyncio.DefaultEventLoopPolicy):
53
+ def new_event_loop(self):
54
+ return asyncio.SelectorEventLoop(selectors.SelectSelector())
55
+
56
+ asyncio.set_event_loop_policy(_SelectSelectorPolicy())
43
57
  from prompt_toolkit.enums import EditingMode
44
58
 
45
59
  from .dump import dump # noqa
@@ -708,6 +722,7 @@ async def main_async(
708
722
  notifications_command=args.notifications_command,
709
723
  notification_bell=args.notification_bell,
710
724
  verbose=args.verbose,
725
+ show_spinner=args.spinner,
711
726
  )
712
727
 
713
728
  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)."""
@@ -272,6 +314,8 @@ class HttpBasedMcpServer(McpServer):
272
314
  server_info["client_info"]["token_endpoint"] = token_endpoint
273
315
 
274
316
  save_mcp_oauth_token(self.name, server_info)
317
+
318
+ return session
275
319
  except Exception as e:
276
320
  logging.error(f"Error initializing {self.name}: {e}")
277
321
  await self.disconnect()
@@ -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:
@@ -236,6 +236,9 @@ cog.outl("```")
236
236
  ## Enable/disable streaming responses (default: True)
237
237
  #stream: true
238
238
 
239
+ ## Enable/disable the spinner while waiting for LLM responses (default: True)
240
+ #spinner: true
241
+
239
242
  ## Set the color for user input (default: #00cc00)
240
243
  #user-input-color: "#00cc00"
241
244
 
@@ -351,6 +351,14 @@ Aliases:
351
351
  - `--stream`
352
352
  - `--no-stream`
353
353
 
354
+ ### `--spinner`
355
+ Enable/disable the spinner while waiting for LLM responses (default: True)
356
+ Default: True
357
+ Environment variable: `CECLI_SPINNER`
358
+ Aliases:
359
+ - `--spinner`
360
+ - `--no-spinner`
361
+
354
362
  ### `--user-input-color VALUE`
355
363
  Set the color for user input (default: #00cc00)
356
364
  Default: #00cc00
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.100.13
3
+ Version: 0.100.14
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
@@ -59,6 +59,7 @@ Requires-Dist: rapidfuzz>=3.0
59
59
  Requires-Dist: ngram>=4.0.3
60
60
  Requires-Dist: rustworkx>=0.15.0
61
61
  Requires-Dist: scipy>=1.15.3
62
+ Requires-Dist: orjson>=3.11.6
62
63
  Requires-Dist: importlib-metadata>=7.2.1
63
64
  Requires-Dist: tomli>=2.3.0; python_version <= "3.10"
64
65
  Requires-Dist: tree-sitter==0.23.2; python_version < "3.10"
@@ -577,6 +577,7 @@ tests/basic/test_repomap.py
577
577
  tests/basic/test_run_cmd.py
578
578
  tests/basic/test_sanity_check_repo.py
579
579
  tests/basic/test_scripting.py
580
+ tests/basic/test_select_selector.py
580
581
  tests/basic/test_sendchat.py
581
582
  tests/basic/test_session_args.py
582
583
  tests/basic/test_session_crypto.py
@@ -584,6 +585,7 @@ tests/basic/test_sessions.py
584
585
  tests/basic/test_sessions_manager.py
585
586
  tests/basic/test_skills.py
586
587
  tests/basic/test_special.py
588
+ tests/basic/test_spinner.py
587
589
  tests/basic/test_ssl_verification.py
588
590
  tests/basic/test_udiff.py
589
591
  tests/basic/test_urls.py
@@ -670,6 +672,7 @@ tests/mcp/test_keepalive_logging.py
670
672
  tests/mcp/test_keepalive_resilience.py
671
673
  tests/mcp/test_keepalive_unit.py
672
674
  tests/mcp/test_manager.py
675
+ tests/mcp/test_manager_retry.py
673
676
  tests/scrape/test_playwright_disable.py
674
677
  tests/scrape/test_scrape.py
675
678
  tests/subagents/__init__.py
@@ -39,6 +39,7 @@ rapidfuzz>=3.0
39
39
  ngram>=4.0.3
40
40
  rustworkx>=0.15.0
41
41
  scipy>=1.15.3
42
+ orjson>=3.11.6
42
43
  importlib-metadata>=7.2.1
43
44
  tree-sitter-language-pack<=0.13.0
44
45
 
@@ -786,6 +786,7 @@
786
786
  "tests/mcp/test_keepalive_resilience.py",
787
787
  "tests/mcp/test_keepalive_logging.py",
788
788
  "tests/mcp/conftest.py",
789
+ "tests/mcp/test_manager_retry.py",
789
790
  "tests/mcp/mock_server.py",
790
791
  "tests/mcp/test_keepalive_integration.py",
791
792
  "tests/mcp/test_keepalive_concurrency.py",
@@ -888,6 +889,7 @@
888
889
  "tests/basic/test_session_args.py",
889
890
  "tests/basic/test_find_or_blocks.py",
890
891
  "tests/basic/test_editblock.py",
892
+ "tests/basic/test_spinner.py",
891
893
  "tests/basic/test_exceptions.py",
892
894
  "tests/basic/test_sessions.py",
893
895
  "tests/basic/test_model_provider_manager.py",
@@ -896,6 +898,7 @@
896
898
  "tests/basic/test_repo.py",
897
899
  "tests/basic/test_urls.py",
898
900
  "tests/basic/test_voice.py",
901
+ "tests/basic/test_select_selector.py",
899
902
  "tests/basic/test_editor.py",
900
903
  "tests/basic/test_special.py",
901
904
  "tests/basic/test_session_crypto.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.100.14",
3
+ "distance": 0,
4
+ "node": "gd2fa11692b49a3c0d1c692e232e3edcea9c7b340",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-21"
8
+ }
@@ -302,6 +302,8 @@ objgraph==3.6.2
302
302
  # via -r requirements/requirements-dev.in
303
303
  openai==2.8.1
304
304
  # via litellm
305
+ orjson==3.11.9
306
+ # via -r requirements/requirements.in
305
307
  oslex==0.1.3
306
308
  # via -r requirements/requirements.in
307
309
  packaging==25.0
@@ -46,6 +46,9 @@ rustworkx>=0.15.0
46
46
  # scipy is still needed for other parts of the codebase
47
47
  scipy>=1.15.3
48
48
 
49
+ # dependencies added because litellm is so mid and doesn't declare all of its deps properly
50
+ orjson>=3.11.6
51
+
49
52
  # GitHub Release action failing on "KeyError: 'home-page'"
50
53
  # https://github.com/pypa/twine/blob/6fbf880ee60915cf1666348c4bdd78a10415f2ac/twine/__init__.py#L40
51
54
  # Uses importlib-metadata
@@ -240,6 +240,10 @@ openai==2.8.1
240
240
  # via
241
241
  # -c requirements/common-constraints.txt
242
242
  # litellm
243
+ orjson==3.11.9
244
+ # via
245
+ # -c requirements/common-constraints.txt
246
+ # -r requirements/requirements.in
243
247
  oslex==0.1.3
244
248
  # via
245
249
  # -c requirements/common-constraints.txt