cecli-dev 1.0.0rc6__tar.gz → 1.0.0rc8__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.0rc6 → cecli_dev-1.0.0rc8}/PKG-INFO +1 -1
  2. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/README.md +15 -6
  3. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/__init__.py +1 -1
  4. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/_version.py +3 -3
  5. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/args.py +6 -0
  6. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/agent_coder.py +19 -0
  7. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/base_coder.py +32 -5
  8. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/environment.py +78 -8
  9. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/safe_methods.py +24 -3
  10. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/security.py +84 -12
  11. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/service.py +5 -1
  12. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/interruptible_input.py +8 -1
  13. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/io.py +14 -1
  14. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/main.py +15 -0
  15. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mcp/manager.py +44 -16
  16. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mcp/server.py +42 -0
  17. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/repo.py +1 -0
  18. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/agent-mode.md +59 -1
  19. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/conf.md +3 -0
  20. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/options.md +8 -0
  21. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/PKG-INFO +1 -1
  22. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/SOURCES.txt +3 -0
  23. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/scm_file_list.json +3 -0
  24. cecli_dev-1.0.0rc8/cecli_dev.egg-info/scm_version.json +8 -0
  25. cecli_dev-1.0.0rc8/tests/basic/test_select_selector.py +140 -0
  26. cecli_dev-1.0.0rc8/tests/basic/test_spinner.py +86 -0
  27. cecli_dev-1.0.0rc8/tests/conftest.py +35 -0
  28. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_repomap_workspace.py +2 -2
  29. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/observations/test_observation_service.py +2 -0
  30. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/test_orchestration.py +334 -0
  31. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_resilience.py +1 -1
  32. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_manager.py +6 -2
  33. cecli_dev-1.0.0rc8/tests/mcp/test_manager_retry.py +826 -0
  34. cecli_dev-1.0.0rc6/cecli_dev.egg-info/scm_version.json +0 -8
  35. cecli_dev-1.0.0rc6/tests/conftest.py +0 -16
  36. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.dockerignore +0 -0
  37. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.flake8 +0 -0
  38. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.gitattributes +0 -0
  39. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  40. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/check_pypi_version.yml +0 -0
  41. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/docker-build-test.yml +0 -0
  42. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/docker-release.yml +0 -0
  43. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/issues.yml +0 -0
  44. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/pages.yml +0 -0
  45. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/pre-commit.yml +0 -0
  46. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/release.yml +0 -0
  47. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/ubuntu-tests.yml +0 -0
  48. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/windows-tests.yml +0 -0
  49. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.github/workflows/windows_check_pypi_version.yml +0 -0
  50. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.gitignore +0 -0
  51. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/.pre-commit-config.yaml +0 -0
  52. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/CHANGELOG.md +0 -0
  53. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/CNAME +0 -0
  54. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/CONTRIBUTING.md +0 -0
  55. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/HISTORY.md +0 -0
  56. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/LICENSE.txt +0 -0
  57. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/MANIFEST.in +0 -0
  58. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/README.md +0 -0
  59. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/Dockerfile +0 -0
  60. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/__init__.py +0 -0
  61. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/benchmark.py +0 -0
  62. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/benchmark_classic.py +0 -0
  63. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/clone-exercism.sh +0 -0
  64. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/cpp-test.sh +0 -0
  65. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/docker.sh +0 -0
  66. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/docker_build.sh +0 -0
  67. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/install-docker-ubuntu.sh +0 -0
  68. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/npm-test.sh +0 -0
  69. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/over_time.py +0 -0
  70. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/plot.sh +0 -0
  71. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/plots.py +0 -0
  72. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/problem_stats.py +0 -0
  73. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/prompts.py +0 -0
  74. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/refactor_tools.py +0 -0
  75. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/rsync.sh +0 -0
  76. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/rungrid.py +0 -0
  77. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/swe-bench-lite.txt +0 -0
  78. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/swe-bench.txt +0 -0
  79. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/swe_bench.py +0 -0
  80. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/test_benchmark.py +0 -0
  81. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/variations.1.sh +0 -0
  82. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/variations.2.sh +0 -0
  83. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/variations.3.sh +0 -0
  84. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/benchmark/variations.4.sh +0 -0
  85. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/__main__.py +0 -0
  86. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/args_formatter.py +0 -0
  87. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/change_tracker.py +0 -0
  88. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/__init__.py +0 -0
  89. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/architect_coder.py +0 -0
  90. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/ask_coder.py +0 -0
  91. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/chat_chunks.py +0 -0
  92. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/context_coder.py +0 -0
  93. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/copypaste_coder.py +0 -0
  94. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editblock_coder.py +0 -0
  95. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editblock_fenced_coder.py +0 -0
  96. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editblock_func_coder.py +0 -0
  97. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  98. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editor_editblock_coder.py +0 -0
  99. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/editor_whole_coder.py +0 -0
  100. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/hashline_coder.py +0 -0
  101. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/help_coder.py +0 -0
  102. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/patch_coder.py +0 -0
  103. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/search_replace.py +0 -0
  104. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/shell.py +0 -0
  105. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/single_wholefile_func_coder.py +0 -0
  106. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/sub_agent_coder.py +0 -0
  107. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/udiff_coder.py +0 -0
  108. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/udiff_simple.py +0 -0
  109. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/wholefile_coder.py +0 -0
  110. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/coders/wholefile_func_coder.py +0 -0
  111. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/__init__.py +0 -0
  112. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/add.py +0 -0
  113. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/agent.py +0 -0
  114. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/agent_model.py +0 -0
  115. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/agent_tree.py +0 -0
  116. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/architect.py +0 -0
  117. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/ask.py +0 -0
  118. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/chat_mode.py +0 -0
  119. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/clear.py +0 -0
  120. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/code.py +0 -0
  121. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/command_prefix.py +0 -0
  122. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/commit.py +0 -0
  123. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/compact.py +0 -0
  124. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/context.py +0 -0
  125. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/context_blocks.py +0 -0
  126. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/context_management.py +0 -0
  127. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/copy.py +0 -0
  128. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/copy_context.py +0 -0
  129. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/core.py +0 -0
  130. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/diff.py +0 -0
  131. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/drop.py +0 -0
  132. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/editor.py +0 -0
  133. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/editor_model.py +0 -0
  134. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/exclude_skill.py +0 -0
  135. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/exit.py +0 -0
  136. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/git.py +0 -0
  137. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/hashline.py +0 -0
  138. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/help.py +0 -0
  139. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/history_search.py +0 -0
  140. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/hooks.py +0 -0
  141. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/hot_reload.py +0 -0
  142. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/include_skill.py +0 -0
  143. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/lint.py +0 -0
  144. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/list_mcp.py +0 -0
  145. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/list_sessions.py +0 -0
  146. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/list_skills.py +0 -0
  147. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/load.py +0 -0
  148. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/load_hook.py +0 -0
  149. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/load_mcp.py +0 -0
  150. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/load_session.py +0 -0
  151. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/load_skill.py +0 -0
  152. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/ls.py +0 -0
  153. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/map.py +0 -0
  154. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/map_refresh.py +0 -0
  155. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/merge.py +0 -0
  156. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/model.py +0 -0
  157. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/models.py +0 -0
  158. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/multiline_mode.py +0 -0
  159. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/paste.py +0 -0
  160. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/quit.py +0 -0
  161. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/read_only.py +0 -0
  162. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/read_only_stub.py +0 -0
  163. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/reap_agent.py +0 -0
  164. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/reasoning_effort.py +0 -0
  165. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/remove_hook.py +0 -0
  166. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/remove_mcp.py +0 -0
  167. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/remove_skill.py +0 -0
  168. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/report.py +0 -0
  169. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/reset.py +0 -0
  170. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/rules.py +0 -0
  171. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/run.py +0 -0
  172. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/save.py +0 -0
  173. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/save_session.py +0 -0
  174. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/settings.py +0 -0
  175. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/spawn_agent.py +0 -0
  176. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/switch_agent.py +0 -0
  177. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/terminal_data/linux.keytab +0 -0
  178. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/terminal_setup.py +0 -0
  179. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/test.py +0 -0
  180. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/think_tokens.py +0 -0
  181. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/tokens.py +0 -0
  182. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/undo.py +0 -0
  183. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/utils/__init__.py +0 -0
  184. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/utils/base_command.py +0 -0
  185. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/utils/helpers.py +0 -0
  186. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/utils/registry.py +0 -0
  187. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/utils/save_load_manager.py +0 -0
  188. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/voice.py +0 -0
  189. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/weak_model.py +0 -0
  190. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/web.py +0 -0
  191. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/commands/workspace.py +0 -0
  192. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/deprecated_args.py +0 -0
  193. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/diffs.py +0 -0
  194. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/dump.py +0 -0
  195. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/editor.py +0 -0
  196. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/exceptions.py +0 -0
  197. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/format_settings.py +0 -0
  198. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/help.py +0 -0
  199. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/help_pats.py +0 -0
  200. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/__init__.py +0 -0
  201. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/agents/__init__.py +0 -0
  202. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/agents/config.py +0 -0
  203. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/agents/service.py +0 -0
  204. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/background_commands.py +0 -0
  205. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/command_parser.py +0 -0
  206. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/__init__.py +0 -0
  207. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/base_message.py +0 -0
  208. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/files.py +0 -0
  209. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/integration.py +0 -0
  210. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/manager.py +0 -0
  211. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/service.py +0 -0
  212. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/tags.py +0 -0
  213. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/conversation/utils.py +0 -0
  214. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/copypaste.py +0 -0
  215. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/coroutines.py +0 -0
  216. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/crypto.py +0 -0
  217. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_searcher.py +0 -0
  218. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/__init__.py +0 -0
  219. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/builders.py +0 -0
  220. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/ignore.py +0 -0
  221. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/ngram_index.py +0 -0
  222. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/service.py +0 -0
  223. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/file_system/trie_index.py +0 -0
  224. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/__init__.py +0 -0
  225. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/dump.py +0 -0
  226. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  227. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/main.py +0 -0
  228. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/parsers.py +0 -0
  229. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/grep_ast/tsl.py +0 -0
  230. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/hashline.py +0 -0
  231. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/hashpos/__init__.py +0 -0
  232. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/hashpos/hashpos.py +0 -0
  233. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  234. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/hashpos/transformations.py +0 -0
  235. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/io_proxy.py +0 -0
  236. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/leak_detect.py +0 -0
  237. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/model_providers.py +0 -0
  238. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/__init__.py +0 -0
  239. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/config.py +0 -0
  240. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/local_workspace.py +0 -0
  241. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/project.py +0 -0
  242. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/workspace.py +0 -0
  243. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/monorepo/worktree.py +0 -0
  244. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/nested.py +0 -0
  245. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/observations/__init__.py +0 -0
  246. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/observations/service.py +0 -0
  247. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/__init__.py +0 -0
  248. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  249. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/region_resolver.py +0 -0
  250. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  251. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/plugin_manager.py +0 -0
  252. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/profiler.py +0 -0
  253. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/requests.py +0 -0
  254. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/responses.py +0 -0
  255. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/similarity.py +0 -0
  256. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/skills.py +0 -0
  257. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/helpers/threading.py +0 -0
  258. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/history.py +0 -0
  259. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/__init__.py +0 -0
  260. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/base.py +0 -0
  261. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/helpers.py +0 -0
  262. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/integration.py +0 -0
  263. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/manager.py +0 -0
  264. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/registry.py +0 -0
  265. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/service.py +0 -0
  266. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/hooks/types.py +0 -0
  267. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/linter.py +0 -0
  268. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/llm.py +0 -0
  269. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mcp/__init__.py +0 -0
  270. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mcp/oauth.py +0 -0
  271. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mcp/utils.py +0 -0
  272. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/mdstream.py +0 -0
  273. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/models.py +0 -0
  274. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/onboarding.py +0 -0
  275. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/__init__.py +0 -0
  276. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/agent.yml +0 -0
  277. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/architect.yml +0 -0
  278. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/ask.yml +0 -0
  279. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/base.yml +0 -0
  280. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/context.yml +0 -0
  281. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/copypaste.yml +0 -0
  282. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editblock.yml +0 -0
  283. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editblock_fenced.yml +0 -0
  284. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editblock_func.yml +0 -0
  285. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editor_diff_fenced.yml +0 -0
  286. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editor_editblock.yml +0 -0
  287. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/editor_whole.yml +0 -0
  288. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/hashline.yml +0 -0
  289. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/help.yml +0 -0
  290. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/patch.yml +0 -0
  291. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/single_wholefile_func.yml +0 -0
  292. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/subagent.yml +0 -0
  293. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/udiff.yml +0 -0
  294. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/udiff_simple.yml +0 -0
  295. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/utils/__init__.py +0 -0
  296. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/utils/registry.py +0 -0
  297. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/utils/system.py +0 -0
  298. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/wholefile.yml +0 -0
  299. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/prompts/wholefile_func.yml +0 -0
  300. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  301. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  302. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  303. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  304. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  305. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  306. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  307. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  308. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  309. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  310. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  311. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  312. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  313. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  314. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  315. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  316. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  317. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  318. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  319. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  320. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  321. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  322. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  323. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  324. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  325. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  326. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  327. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  328. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  329. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  330. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  331. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  332. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/README.md +0 -0
  333. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  334. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  335. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  336. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  337. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  338. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  339. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  340. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  341. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  342. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  343. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  344. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  345. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  346. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  347. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  348. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  349. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  350. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  351. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  352. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  353. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  354. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  355. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  356. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  357. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  358. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  359. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  360. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/reasoning_tags.py +0 -0
  361. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/repomap.py +0 -0
  362. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/report.py +0 -0
  363. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/resources/__init__.py +0 -0
  364. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/resources/model-metadata.json +0 -0
  365. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/resources/model-settings.yml +0 -0
  366. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/resources/providers.json +0 -0
  367. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/run_cmd.py +0 -0
  368. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/scrape.py +0 -0
  369. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/sendchat.py +0 -0
  370. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/sessions.py +0 -0
  371. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/signals.py +0 -0
  372. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/special.py +0 -0
  373. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/__init__.py +0 -0
  374. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/_yield.py +0 -0
  375. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/command.py +0 -0
  376. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/delegate.py +0 -0
  377. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/edit_file.py +0 -0
  378. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/explore_code.py +0 -0
  379. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_branch.py +0 -0
  380. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_diff.py +0 -0
  381. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_log.py +0 -0
  382. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_remote.py +0 -0
  383. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_show.py +0 -0
  384. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/git_status.py +0 -0
  385. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/grep.py +0 -0
  386. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/ls.py +0 -0
  387. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/orchestrate.py +0 -0
  388. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/read_file.py +0 -0
  389. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/resource_manager.py +0 -0
  390. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/thinking.py +0 -0
  391. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/undo_change.py +0 -0
  392. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/update_todo_list.py +0 -0
  393. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/__init__.py +0 -0
  394. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/base_tool.py +0 -0
  395. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/helpers.py +0 -0
  396. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/output.py +0 -0
  397. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/registry.py +0 -0
  398. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/utils/responses.py +0 -0
  399. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/validations/__init__.py +0 -0
  400. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tools/validations/validations.py +0 -0
  401. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/__init__.py +0 -0
  402. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/app.py +0 -0
  403. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/io.py +0 -0
  404. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/styles.tcss +0 -0
  405. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/__init__.py +0 -0
  406. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/completion_bar.py +0 -0
  407. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/file_list.py +0 -0
  408. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/footer.py +0 -0
  409. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/input_area.py +0 -0
  410. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/input_container.py +0 -0
  411. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/key_hints.py +0 -0
  412. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/output.py +0 -0
  413. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/status_bar.py +0 -0
  414. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/widgets/subagent_pills.py +0 -0
  415. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/tui/worker.py +0 -0
  416. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/urls.py +0 -0
  417. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/utils.py +0 -0
  418. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/versioncheck.py +0 -0
  419. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/voice.py +0 -0
  420. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/waiting.py +0 -0
  421. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/watch.py +0 -0
  422. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/watch_prompts.py +0 -0
  423. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/Gemfile +0 -0
  424. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/blame.md +0 -0
  425. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/get-started.md +0 -0
  426. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/help-tip.md +0 -0
  427. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/help.md +0 -0
  428. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/install.md +0 -0
  429. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/keys.md +0 -0
  430. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/model-warnings.md +0 -0
  431. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/multi-line.md +0 -0
  432. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/python-m-aider.md +0 -0
  433. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/recording.css +0 -0
  434. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/recording.md +0 -0
  435. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_includes/works-best.md +0 -0
  436. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_features.scss +0 -0
  437. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_footer.scss +0 -0
  438. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_hero.scss +0 -0
  439. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_info.scss +0 -0
  440. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_layout.scss +0 -0
  441. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_reset.scss +0 -0
  442. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_testimonials.scss +0 -0
  443. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_typography.scss +0 -0
  444. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/_variables.scss +0 -0
  445. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/custom/custom.scss +0 -0
  446. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/_sass/global-overrides.scss +0 -0
  447. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/adv-model-settings.md +0 -0
  448. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/api-keys.md +0 -0
  449. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/custom-commands.md +0 -0
  450. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  451. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/dotenv.md +0 -0
  452. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/editor.md +0 -0
  453. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/hooks.md +0 -0
  454. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/mcp.md +0 -0
  455. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/model-aliases.md +0 -0
  456. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/model-configuration.md +0 -0
  457. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/model-providers.md +0 -0
  458. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/reasoning.md +0 -0
  459. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/retries.md +0 -0
  460. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/security.md +0 -0
  461. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/skills.md +0 -0
  462. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/subagents.md +0 -0
  463. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/tui.md +0 -0
  464. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config/workspaces.md +0 -0
  465. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/config.md +0 -0
  466. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/git.md +0 -0
  467. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/index.md +0 -0
  468. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/install/docker.md +0 -0
  469. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/install.md +0 -0
  470. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/languages.md +0 -0
  471. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  472. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/legal/privacy.md +0 -0
  473. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/anthropic.md +0 -0
  474. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/azure.md +0 -0
  475. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/bedrock.md +0 -0
  476. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/cohere.md +0 -0
  477. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/deepseek.md +0 -0
  478. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/gemini.md +0 -0
  479. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/github.md +0 -0
  480. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/groq.md +0 -0
  481. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/lm-studio.md +0 -0
  482. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/ollama.md +0 -0
  483. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/openai-compat.md +0 -0
  484. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/openai.md +0 -0
  485. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/openrouter.md +0 -0
  486. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/other.md +0 -0
  487. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/vertex.md +0 -0
  488. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/warnings.md +0 -0
  489. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms/xai.md +0 -0
  490. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/llms.md +0 -0
  491. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/more/analytics.md +0 -0
  492. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/more/edit-formats.md +0 -0
  493. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/more/infinite-output.md +0 -0
  494. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/more-info.md +0 -0
  495. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/repomap.md +0 -0
  496. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/scripting.md +0 -0
  497. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  498. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  499. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/imports.md +0 -0
  500. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  501. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/support.md +0 -0
  502. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  503. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  504. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/troubleshooting.md +0 -0
  505. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/commands.md +0 -0
  506. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/conventions.md +0 -0
  507. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/copypaste.md +0 -0
  508. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/images-urls.md +0 -0
  509. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/lint-test.md +0 -0
  510. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/modes.md +0 -0
  511. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/not-code.md +0 -0
  512. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/notifications.md +0 -0
  513. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/optional.md +0 -0
  514. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/sessions.md +0 -0
  515. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/tips.md +0 -0
  516. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/voice.md +0 -0
  517. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage/watch.md +0 -0
  518. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/docs/usage.md +0 -0
  519. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli/website/share/index.md +0 -0
  520. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/dependency_links.txt +0 -0
  521. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/entry_points.txt +0 -0
  522. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/requires.txt +0 -0
  523. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/cecli_dev.egg-info/top_level.txt +0 -0
  524. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/docker/Dockerfile +0 -0
  525. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  526. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/pyproject.toml +0 -0
  527. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/pytest.ini +0 -0
  528. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/common-constraints.txt +0 -0
  529. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-dev.in +0 -0
  530. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-dev.txt +0 -0
  531. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-help.in +0 -0
  532. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-help.txt +0 -0
  533. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-playwright.in +0 -0
  534. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements-playwright.txt +0 -0
  535. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/requirements.in +0 -0
  536. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements/tree-sitter.in +0 -0
  537. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/requirements.txt +0 -0
  538. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/30k-image.py +0 -0
  539. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/Dockerfile.jekyll +0 -0
  540. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/__init__.py +0 -0
  541. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/blame.py +0 -0
  542. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/clean_metadata.py +0 -0
  543. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/compare-message-history.py +0 -0
  544. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/cost_analyzer.py +0 -0
  545. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/cost_calculator.py +0 -0
  546. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/dl_icons.py +0 -0
  547. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/filter-chat-mode.js +0 -0
  548. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/generate_providers.py +0 -0
  549. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/get_contributor_list.js +0 -0
  550. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/get_hashline.py +0 -0
  551. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/history_prompts.py +0 -0
  552. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/homepage.py +0 -0
  553. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/issues.py +0 -0
  554. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/jekyll_build.sh +0 -0
  555. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/jekyll_run.sh +0 -0
  556. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/logo_svg.py +0 -0
  557. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/optimize_tokens.sh +0 -0
  558. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/pip-compile.sh +0 -0
  559. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/recording_audio.py +0 -0
  560. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/redact-cast.py +0 -0
  561. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/rename_to_cecli.py +0 -0
  562. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/tmux_record.sh +0 -0
  563. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/tsl_pack_langs.py +0 -0
  564. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/update-blame.sh +0 -0
  565. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/update-docs.sh +0 -0
  566. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/update-history.py +0 -0
  567. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/versionbump.py +0 -0
  568. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/scripts/yank-old-versions.py +0 -0
  569. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/setup.cfg +0 -0
  570. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/shim.pyproject.toml +0 -0
  571. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/__init__.py +0 -0
  572. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/__init__.py +0 -0
  573. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/conftest.py +0 -0
  574. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_aws_credentials.py +0 -0
  575. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_background_commands.py +0 -0
  576. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_coder.py +0 -0
  577. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_commands.py +0 -0
  578. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_custom_commands.py +0 -0
  579. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_deprecated.py +0 -0
  580. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_editblock.py +0 -0
  581. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_editor.py +0 -0
  582. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_exceptions.py +0 -0
  583. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_find_or_blocks.py +0 -0
  584. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_hashline.py +0 -0
  585. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_hashline_closure.py +0 -0
  586. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_history.py +0 -0
  587. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_io.py +0 -0
  588. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_linter.py +0 -0
  589. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_main.py +0 -0
  590. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_model_info_manager.py +0 -0
  591. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_model_provider_manager.py +0 -0
  592. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_models.py +0 -0
  593. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_onboarding.py +0 -0
  594. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_plugin_manager.py +0 -0
  595. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_prompts.py +0 -0
  596. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_reasoning.py +0 -0
  597. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_repo.py +0 -0
  598. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_repomap.py +0 -0
  599. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_run_cmd.py +0 -0
  600. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_sanity_check_repo.py +0 -0
  601. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_scripting.py +0 -0
  602. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_sendchat.py +0 -0
  603. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_session_args.py +0 -0
  604. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_session_crypto.py +0 -0
  605. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_sessions.py +0 -0
  606. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_sessions_manager.py +0 -0
  607. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_skills.py +0 -0
  608. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_special.py +0 -0
  609. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_ssl_verification.py +0 -0
  610. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_udiff.py +0 -0
  611. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_urls.py +0 -0
  612. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_voice.py +0 -0
  613. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_watch.py +0 -0
  614. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/basic/test_wholefile.py +0 -0
  615. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/coders/test_coder_switching.py +0 -0
  616. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/coders/test_copypaste_coder.py +0 -0
  617. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/commands/test_compaction.py +0 -0
  618. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/commands/test_switch_agent.py +0 -0
  619. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/conversations/test_conversation_integration.py +0 -0
  620. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/conversations/test_conversation_system.py +0 -0
  621. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  622. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/chat-history.md +0 -0
  623. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/arduino/test.ino +0 -0
  624. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/bash/test.sh +0 -0
  625. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/c/test.c +0 -0
  626. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/chatito/test.chatito +0 -0
  627. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/clojure/test.clj +0 -0
  628. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  629. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/cpp/test.cpp +0 -0
  630. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/csharp/test.cs +0 -0
  631. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/d/test.d +0 -0
  632. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/dart/test.dart +0 -0
  633. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/elisp/test.el +0 -0
  634. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/elixir/test.ex +0 -0
  635. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/elm/test.elm +0 -0
  636. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/gleam/test.gleam +0 -0
  637. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/go/test.go +0 -0
  638. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/haskell/test.hs +0 -0
  639. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/hcl/test.tf +0 -0
  640. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/java/test.java +0 -0
  641. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/javascript/test.js +0 -0
  642. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/kotlin/test.kt +0 -0
  643. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/lua/test.lua +0 -0
  644. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/matlab/test.m +0 -0
  645. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/ocaml/test.ml +0 -0
  646. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  647. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/php/test.php +0 -0
  648. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/pony/test.pony +0 -0
  649. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/properties/test.properties +0 -0
  650. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/python/test.py +0 -0
  651. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/ql/test.ql +0 -0
  652. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/r/test.r +0 -0
  653. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/racket/test.rkt +0 -0
  654. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/ruby/test.rb +0 -0
  655. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/rust/test.rs +0 -0
  656. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/scala/test.scala +0 -0
  657. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/solidity/test.sol +0 -0
  658. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/swift/test.swift +0 -0
  659. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/tsx/test.tsx +0 -0
  660. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/typescript/test.ts +0 -0
  661. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/udev/test.rules +0 -0
  662. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/languages/zig/test.zig +0 -0
  663. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/sample-code-base/sample.js +0 -0
  664. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/sample-code-base/sample.py +0 -0
  665. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  666. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/watch.js +0 -0
  667. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/watch.lisp +0 -0
  668. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/watch.py +0 -0
  669. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/fixtures/watch_question.js +0 -0
  670. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/help/test_help.py +0 -0
  671. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  672. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_config.py +0 -0
  673. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_config_active.py +0 -0
  674. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  675. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  676. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/helpers/monorepo/test_workspace.py +0 -0
  677. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/hooks/__init__.py +0 -0
  678. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/hooks/test_base.py +0 -0
  679. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/hooks/test_manager.py +0 -0
  680. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/hooks/test_registry.py +0 -0
  681. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/integration/test_agent_mcp_management.py +0 -0
  682. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/integration/test_mcp_management.py +0 -0
  683. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/__init__.py +0 -0
  684. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/conftest.py +0 -0
  685. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/mock_server.py +0 -0
  686. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_concurrency.py +0 -0
  687. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_config.py +0 -0
  688. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_integration.py +0 -0
  689. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_logging.py +0 -0
  690. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/mcp/test_keepalive_unit.py +0 -0
  691. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/scrape/test_playwright_disable.py +0 -0
  692. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/scrape/test_scrape.py +0 -0
  693. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/__init__.py +0 -0
  694. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/conftest.py +0 -0
  695. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_commands.py +0 -0
  696. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_config.py +0 -0
  697. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_delegate.py +0 -0
  698. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_finished.py +0 -0
  699. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_io_proxy.py +0 -0
  700. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_service.py +0 -0
  701. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/subagents/test_sub_agent_coder.py +0 -0
  702. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/test_requests.py +0 -0
  703. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_extractions.py +0 -0
  704. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_get_lines.py +0 -0
  705. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_git_branch.py +0 -0
  706. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_git_diff.py +0 -0
  707. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_grep.py +0 -0
  708. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_insert_block.py +0 -0
  709. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_read_range_execute.py +0 -0
  710. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_registry.py +0 -0
  711. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_remove_mcp_tool.py +0 -0
  712. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_tool_arguments.py +0 -0
  713. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  714. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tools/validations.py +0 -0
  715. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/tui/test_app.py +0 -0
  716. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/unit/test_load_mcp.py +0 -0
  717. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/unit/test_remove_mcp.py +0 -0
  718. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  719. {cecli_dev-1.0.0rc6 → cecli_dev-1.0.0rc8}/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.0rc6
3
+ Version: 1.0.0rc8
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.0rc6'
22
- __version_tuple__ = version_tuple = (1, 0, 0, 'rc6')
21
+ __version__ = version = '1.0.0rc8'
22
+ __version_tuple__ = version_tuple = (1, 0, 0, 'rc8')
23
23
 
24
- __commit_id__ = commit_id = 'gddead555a'
24
+ __commit_id__ = commit_id = 'g98591f5a3'
@@ -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
@@ -202,16 +202,30 @@ class AgentExecutionEnv:
202
202
  # Shared across all AgentExecutionEnv instances — any agent can read/write
203
203
  _shared_state: TrackedDict = TrackedDict()
204
204
 
205
- def __init__(self, coder: Any) -> None:
205
+ def __init__(self, coder: Any, orchestration_config: dict[str, Any] | None = None) -> None:
206
+ from typing import Any as _Any
207
+
208
+ self._orchestration_config: dict[str, _Any] = orchestration_config or {}
209
+ self._DANGEROUS_BUILTINS: set[str] = {
210
+ "eval",
211
+ "exec",
212
+ "open",
213
+ "__import__",
214
+ "compile",
215
+ "breakpoint",
216
+ "globals",
217
+ "locals",
218
+ }
219
+
206
220
  self.state = TrackedDict()
207
221
  self.state._set_owner(self)
208
222
  self._shared_state._set_owner(self, is_shared=True)
209
223
 
210
224
  # Initialize early so _safe_builtins can reference them
211
- self.globals: dict[str, Any] = {}
212
- self.locals: dict[str, Any] = {}
225
+ self.globals: dict[str, _Any] = {}
226
+ self.locals: dict[str, _Any] = {}
213
227
 
214
- self._safe_builtins: dict[str, Any] = {
228
+ self._safe_builtins: dict[str, _Any] = {
215
229
  "print": print,
216
230
  "range": range,
217
231
  "len": len,
@@ -267,6 +281,32 @@ class AgentExecutionEnv:
267
281
  "pathlib": _SafePathlib,
268
282
  }
269
283
 
284
+ # Task 3: allowed_builtins — extend _safe_builtins with user-requested builtins
285
+ allowed_builtins: list[str] = self._orchestration_config.get("allowed_builtins", [])
286
+ for name in allowed_builtins:
287
+ if name.startswith("_"):
288
+ raise ValueError(f"Cannot allow private builtin '{name}'")
289
+ if name in self._DANGEROUS_BUILTINS and not self._orchestration_config.get(
290
+ "disable_security"
291
+ ):
292
+ raise ValueError(f"Cannot allow dangerous builtin '{name}'")
293
+ self._safe_builtins[name] = __builtins__[name]
294
+
295
+ # When security is fully disabled, expose dangerous builtins
296
+ if self._orchestration_config.get("disable_security", False):
297
+ for name in self._DANGEROUS_BUILTINS:
298
+ self._safe_builtins[name] = __builtins__[name]
299
+
300
+ # When allow_classes is enabled, expose __build_class__ needed by Python
301
+ if self._orchestration_config.get("allow_classes", False):
302
+ self._safe_builtins["__build_class__"] = __builtins__["__build_class__"]
303
+
304
+ # When allowed_imports is configured, expose __import__ so imports work,
305
+ # and add __name__ since imported modules reference it.
306
+ if self._orchestration_config.get("allowed_imports"):
307
+ self._safe_builtins["__import__"] = __builtins__["__import__"]
308
+ self._safe_builtins["__name__"] = "__sandbox__"
309
+
270
310
  self.globals.clear()
271
311
  _agent = AgentProxy(coder)
272
312
  _agent._env = self
@@ -382,7 +422,8 @@ class AgentExecutionEnv:
382
422
 
383
423
  code_str = code_str.strip()
384
424
  code_str = _escape_newlines_in_strings(code_str)
385
- code_str, extra_globals = _strip_allowed_imports(code_str)
425
+ extra_allowed = frozenset(self._orchestration_config.get("allowed_imports", []))
426
+ code_str, extra_globals = _strip_allowed_imports(code_str, extra_allowed=extra_allowed)
386
427
  self.globals.update(extra_globals)
387
428
  if not code_str:
388
429
  return {"results": "", "state_variables": self._state_snapshot()}
@@ -411,8 +452,13 @@ class AgentExecutionEnv:
411
452
  return {"results": code, "state_variables": self._state_snapshot()}
412
453
 
413
454
  try:
414
- tree = SecurityFilter().visit(tree)
415
- tree = LoopYieldInjector().visit(tree)
455
+ if not self._orchestration_config.get("disable_security", False):
456
+ tree = SecurityFilter(
457
+ allowed_imports=extra_allowed,
458
+ allow_classes=self._orchestration_config.get("allow_classes", False),
459
+ ).visit(tree)
460
+ if not self._orchestration_config.get("disable_loop_protection", False):
461
+ tree = LoopYieldInjector().visit(tree)
416
462
  ast.fix_missing_locations(tree)
417
463
  except SecurityError as e:
418
464
  return _build_result(f"Security Error: {e}")
@@ -477,7 +523,9 @@ def build_orchestration_context_block(agent_config: dict[str, Any]) -> str | Non
477
523
  if not agent_config.get("allow_orchestration", True):
478
524
  return None
479
525
 
480
- return """<context name="orchestration" from="agent">
526
+ orchestration_config = agent_config.get("orchestration", {})
527
+
528
+ context = """<context name="orchestration" from="agent">
481
529
  The `Orchestrate` tool lets you batch multiple tool calls in a single step by writing Python code in a limited, secure sandbox.
482
530
  This is much more efficient than making individual tool calls for loop-heavy workflows.
483
531
  Variables and methods defined in a script are persisted in subsequent turns.
@@ -611,6 +659,28 @@ await Agent.edit_region(
611
659
  4. Use `print(...)` to output results — only printed output is returned
612
660
  </context>"""
613
661
 
662
+ # Task 6: Append sandbox configuration overrides when non-empty
663
+ if orchestration_config:
664
+ overrides: list[str] = []
665
+ if orchestration_config.get("allowed_imports"):
666
+ overrides.append(
667
+ f"- Allowed extra imports: {orchestration_config['allowed_imports']}"
668
+ )
669
+ if orchestration_config.get("allowed_builtins"):
670
+ overrides.append(
671
+ f"- Allowed extra builtins: {orchestration_config['allowed_builtins']}"
672
+ )
673
+ if orchestration_config.get("allow_classes"):
674
+ overrides.append("- Class definitions are allowed (__init__, __str__, etc.)")
675
+ if orchestration_config.get("disable_security"):
676
+ overrides.append("- ⚠ Security filtering is DISABLED")
677
+ if orchestration_config.get("disable_loop_protection"):
678
+ overrides.append("- ⚠ Loop protection is DISABLED")
679
+ if overrides:
680
+ context += "\n### Sandbox Configuration Overrides\n" + "\n".join(overrides) + "\n"
681
+
682
+ return context
683
+
614
684
 
615
685
  # flake8: noqa
616
686
  # fmt: on
@@ -586,12 +586,21 @@ _PREIMPORTED_MODULES: frozenset[str] = frozenset(
586
586
  )
587
587
 
588
588
 
589
- def _strip_allowed_imports(code: str) -> tuple[str, dict[str, object]]:
589
+ def _strip_allowed_imports(
590
+ code: str,
591
+ extra_allowed: frozenset[str] | None = None,
592
+ ) -> tuple[str, dict[str, object]]:
590
593
  """Strip import lines for modules already pre-imported in the sandbox.
591
594
 
592
595
  The sandbox provides ``re``, ``math``, ``itertools``, ``collections``,
593
596
  ``datetime``, ``traceback``, and ``json`` as read-only proxies.
594
597
 
598
+ When *extra_allowed* is provided, import statements for those modules
599
+ are also allowed through (neither stripped nor commented out). The caller
600
+ is responsible for ensuring those names are resolvable at execution time
601
+ (either by pre-importing them into the sandbox globals or letting the
602
+ ``SecurityFilter`` allow the ``import`` statement through).
603
+
595
604
  Returns ``(code, extra_globals)`` where *extra_globals* maps imported
596
605
  names to their resolved values. The caller must inject these into the
597
606
  execution namespace before running the code.
@@ -606,7 +615,11 @@ def _strip_allowed_imports(code: str) -> tuple[str, dict[str, object]]:
606
615
 
607
616
  import re as _re
608
617
 
618
+ preimported = _PREIMPORTED_MODULES
619
+ skip_allowed = extra_allowed or frozenset()
620
+
609
621
  lines = code.splitlines()
622
+
610
623
  result = []
611
624
  extra_globals: dict[str, object] = {}
612
625
 
@@ -619,7 +632,11 @@ def _strip_allowed_imports(code: str) -> tuple[str, dict[str, object]]:
619
632
  r"import\s+(\w+)(?:\s+as\s+(\w+))?\s*$",
620
633
  stripped,
621
634
  )
622
- if m and m.group(1) in _PREIMPORTED_MODULES:
635
+ if m and m.group(1) in skip_allowed:
636
+ result.append(line)
637
+ continue
638
+
639
+ if m and m.group(1) in preimported:
623
640
  mod_name = m.group(1)
624
641
  alias = m.group(2) or mod_name
625
642
 
@@ -637,7 +654,11 @@ def _strip_allowed_imports(code: str) -> tuple[str, dict[str, object]]:
637
654
  r"from\s+(\w+)\s+import\s+(.*)$",
638
655
  stripped,
639
656
  )
640
- if m and m.group(1) in _PREIMPORTED_MODULES:
657
+ if m and m.group(1) in skip_allowed:
658
+ result.append(line)
659
+ continue
660
+
661
+ if m and m.group(1) in preimported:
641
662
  mod_name = m.group(1)
642
663
  names_clause = m.group(2)
643
664
 
@@ -59,6 +59,41 @@ class SecurityFilter(ast.NodeTransformer):
59
59
 
60
60
  _SAFE_DUNDER: set[str] = {"__name__", "__doc__"}
61
61
 
62
+ _SAFE_CLASS_DUNDERS: frozenset[str] = frozenset(
63
+ {
64
+ "__init__",
65
+ "__str__",
66
+ "__repr__",
67
+ "__iter__",
68
+ "__next__",
69
+ "__len__",
70
+ "__getitem__",
71
+ "__setitem__",
72
+ "__contains__",
73
+ "__enter__",
74
+ "__exit__",
75
+ "__aenter__",
76
+ "__aexit__",
77
+ "__await__",
78
+ "__anext__",
79
+ "__aiter__",
80
+ "__del__",
81
+ "__init_subclass__",
82
+ "__set_name__",
83
+ "__class_getitem__",
84
+ }
85
+ )
86
+
87
+ def __init__(
88
+ self,
89
+ allowed_imports: frozenset[str] | None = None,
90
+ allow_classes: bool = False,
91
+ ):
92
+ super().__init__()
93
+ self._allowed_imports = allowed_imports or frozenset()
94
+ self._allow_classes = allow_classes
95
+ self._class_depth = 0
96
+
62
97
  # ------------------------------------------------------------------
63
98
  # Helpers
64
99
  # ------------------------------------------------------------------
@@ -89,17 +124,24 @@ class SecurityFilter(ast.NodeTransformer):
89
124
  # Statement visitors (import / global / nonlocal)
90
125
  # ------------------------------------------------------------------
91
126
 
92
- def visit_Import(self, node: ast.Import) -> ast.Expr:
93
- return self._make_raise_stmt(
94
- f"Security filter error at line {node.lineno}: "
95
- "Imports are disabled in the agent orchestration environment."
96
- )
127
+ def visit_Import(self, node: ast.Import) -> ast.Expr | ast.Import:
128
+ for alias in node.names:
129
+ if alias.name not in self._allowed_imports:
130
+ return self._make_raise_stmt(
131
+ f"Security filter error at line {node.lineno}: "
132
+ f"Import '{alias.name}' is not in allowed_imports."
133
+ )
97
134
 
98
- def visit_ImportFrom(self, node: ast.ImportFrom) -> ast.Expr:
99
- return self._make_raise_stmt(
100
- f"Security filter error at line {node.lineno}: "
101
- "Imports are disabled in the agent orchestration environment."
102
- )
135
+ return node
136
+
137
+ def visit_ImportFrom(self, node: ast.ImportFrom) -> ast.Expr | ast.ImportFrom:
138
+ if node.module is None or node.module not in self._allowed_imports:
139
+ return self._make_raise_stmt(
140
+ f"Security filter error at line {node.lineno}: "
141
+ f"Import from '{node.module}' is not in allowed_imports."
142
+ )
143
+
144
+ return node
103
145
 
104
146
  def visit_Global(self, node: ast.Global) -> ast.Expr:
105
147
  return self._make_raise_stmt(
@@ -114,17 +156,47 @@ class SecurityFilter(ast.NodeTransformer):
114
156
  )
115
157
 
116
158
  # ------------------------------------------------------------------
117
- # Expression visitors (attribute access / dangerous calls)
159
+ def visit_ClassDef(self, node: ast.ClassDef) -> ast.ClassDef | ast.Expr:
160
+ if self._allow_classes:
161
+ self._class_depth += 1
162
+ self.generic_visit(node)
163
+ self._class_depth -= 1
164
+ return node
165
+
166
+ return self._make_raise_stmt(
167
+ f"Security filter error at line {node.lineno}: "
168
+ "Class definitions are disabled in the orchestration environment."
169
+ )
170
+
171
+ def visit_FunctionDef(self, node: ast.FunctionDef) -> ast.FunctionDef | ast.Expr:
172
+ if self._allow_classes and self._class_depth > 0 and node.name.startswith("__"):
173
+ if node.name not in self._SAFE_CLASS_DUNDERS:
174
+ return self._make_raise_stmt(
175
+ f"Security filter error at line {node.lineno}: "
176
+ f"Method name '{node.name}' is not allowed. "
177
+ f"Only safe dunder methods are permitted inside class bodies."
178
+ )
179
+
180
+ return self.generic_visit(node)
181
+
118
182
  # ------------------------------------------------------------------
183
+ # Expression visitors (attribute access / dangerous calls)
119
184
 
120
185
  def visit_Attribute(self, node: ast.Attribute):
121
186
  if node.attr.startswith("_"):
122
187
  if node.attr in self._SAFE_DUNDER:
123
188
  return self.generic_visit(node)
124
189
 
190
+ if (
191
+ self._allow_classes
192
+ and self._class_depth > 0
193
+ and node.attr in self._SAFE_CLASS_DUNDERS
194
+ ):
195
+ return self.generic_visit(node)
196
+
125
197
  if isinstance(node.ctx, (ast.Store, ast.Del)):
126
198
  verb = "assign to" if isinstance(node.ctx, ast.Store) else "delete"
127
- raise SecurityError(
199
+ return self._make_raise_expr(
128
200
  f"Security filter error at line {node.lineno}: "
129
201
  f"cannot {verb} private attribute '{node.attr}'"
130
202
  )
@@ -24,7 +24,11 @@ class OrchestrationService:
24
24
  cls._instances[coder] = instance
25
25
  return instance
26
26
 
27
- instance = AgentExecutionEnv(coder)
27
+ orchestration_config = {}
28
+ if hasattr(coder, "agent_config"):
29
+ orchestration_config = coder.agent_config.get("orchestration", {})
30
+
31
+ instance = AgentExecutionEnv(coder, orchestration_config=orchestration_config)
28
32
  cls._instances[coder] = instance
29
33
  cls._uuid_index[coder.uuid] = instance
30
34
  return instance
@@ -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)