cecli-dev 0.100.0rc5__tar.gz → 0.100.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 (650) hide show
  1. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/PKG-INFO +1 -1
  2. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/_version.py +3 -3
  3. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/agent_coder.py +18 -3
  4. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/base_coder.py +234 -132
  5. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/sub_agent_coder.py +2 -1
  6. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/lint.py +1 -1
  7. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/run.py +3 -5
  8. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/spawn_agent.py +3 -1
  9. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/integration.py +1 -1
  10. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/coroutines.py +38 -0
  11. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/skills.py +1 -0
  12. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/io.py +8 -0
  13. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/linter.py +36 -36
  14. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/main.py +5 -6
  15. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/models.py +5 -1
  16. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/agent.yml +1 -1
  17. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/subagent.yml +1 -1
  18. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/run_cmd.py +81 -0
  19. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/io.py +5 -0
  20. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/agent-mode.md +3 -1
  21. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/subagents.md +3 -28
  22. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/PKG-INFO +1 -1
  23. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/SOURCES.txt +1 -0
  24. cecli_dev-0.100.0rc8/tests/basic/test_linter.py +74 -0
  25. cecli_dev-0.100.0rc8/tests/coders/test_coder_switching.py +74 -0
  26. cecli_dev-0.100.0rc5/tests/basic/test_linter.py +0 -92
  27. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.dockerignore +0 -0
  28. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.flake8 +0 -0
  29. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.gitattributes +0 -0
  30. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  31. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/check_pypi_version.yml +0 -0
  32. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/docker-build-test.yml +0 -0
  33. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/docker-release.yml +0 -0
  34. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/issues.yml +0 -0
  35. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/pages.yml +0 -0
  36. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/pre-commit.yml +0 -0
  37. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/release.yml +0 -0
  38. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/ubuntu-tests.yml +0 -0
  39. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/windows-tests.yml +0 -0
  40. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.github/workflows/windows_check_pypi_version.yml +0 -0
  41. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.gitignore +0 -0
  42. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/.pre-commit-config.yaml +0 -0
  43. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/CHANGELOG.md +0 -0
  44. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/CNAME +0 -0
  45. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/CONTRIBUTING.md +0 -0
  46. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/HISTORY.md +0 -0
  47. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/LICENSE.txt +0 -0
  48. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/MANIFEST.in +0 -0
  49. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/README.md +0 -0
  50. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/Dockerfile +0 -0
  51. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/README.md +0 -0
  52. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/__init__.py +0 -0
  53. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/benchmark.py +0 -0
  54. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/benchmark_classic.py +0 -0
  55. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/clone-exercism.sh +0 -0
  56. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/cpp-test.sh +0 -0
  57. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/docker.sh +0 -0
  58. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/docker_build.sh +0 -0
  59. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/install-docker-ubuntu.sh +0 -0
  60. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/npm-test.sh +0 -0
  61. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/over_time.py +0 -0
  62. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/plot.sh +0 -0
  63. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/plots.py +0 -0
  64. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/problem_stats.py +0 -0
  65. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/prompts.py +0 -0
  66. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/refactor_tools.py +0 -0
  67. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/rsync.sh +0 -0
  68. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/rungrid.py +0 -0
  69. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/swe-bench-lite.txt +0 -0
  70. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/swe-bench.txt +0 -0
  71. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/swe_bench.py +0 -0
  72. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/test_benchmark.py +0 -0
  73. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/variations.1.sh +0 -0
  74. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/variations.2.sh +0 -0
  75. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/variations.3.sh +0 -0
  76. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/benchmark/variations.4.sh +0 -0
  77. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/__init__.py +0 -0
  78. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/__main__.py +0 -0
  79. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/args.py +0 -0
  80. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/args_formatter.py +0 -0
  81. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/change_tracker.py +0 -0
  82. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/__init__.py +0 -0
  83. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/architect_coder.py +0 -0
  84. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/ask_coder.py +0 -0
  85. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/chat_chunks.py +0 -0
  86. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/context_coder.py +0 -0
  87. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/copypaste_coder.py +0 -0
  88. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editblock_coder.py +0 -0
  89. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editblock_fenced_coder.py +0 -0
  90. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editblock_func_coder.py +0 -0
  91. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  92. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editor_editblock_coder.py +0 -0
  93. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/editor_whole_coder.py +0 -0
  94. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/hashline_coder.py +0 -0
  95. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/help_coder.py +0 -0
  96. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/patch_coder.py +0 -0
  97. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/search_replace.py +0 -0
  98. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/shell.py +0 -0
  99. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/single_wholefile_func_coder.py +0 -0
  100. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/udiff_coder.py +0 -0
  101. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/udiff_simple.py +0 -0
  102. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/wholefile_coder.py +0 -0
  103. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/coders/wholefile_func_coder.py +0 -0
  104. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/__init__.py +0 -0
  105. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/add.py +0 -0
  106. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/agent.py +0 -0
  107. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/agent_model.py +0 -0
  108. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/architect.py +0 -0
  109. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/ask.py +0 -0
  110. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/chat_mode.py +0 -0
  111. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/clear.py +0 -0
  112. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/code.py +0 -0
  113. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/command_prefix.py +0 -0
  114. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/commit.py +0 -0
  115. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/compact.py +0 -0
  116. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/context.py +0 -0
  117. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/context_blocks.py +0 -0
  118. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/context_management.py +0 -0
  119. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/copy.py +0 -0
  120. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/copy_context.py +0 -0
  121. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/core.py +0 -0
  122. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/diff.py +0 -0
  123. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/drop.py +0 -0
  124. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/editor.py +0 -0
  125. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/editor_model.py +0 -0
  126. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/exclude_skill.py +0 -0
  127. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/exit.py +0 -0
  128. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/git.py +0 -0
  129. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/hashline.py +0 -0
  130. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/help.py +0 -0
  131. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/history_search.py +0 -0
  132. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/hooks.py +0 -0
  133. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/include_skill.py +0 -0
  134. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/invoke_agent.py +0 -0
  135. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/list_sessions.py +0 -0
  136. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/list_skills.py +0 -0
  137. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/load.py +0 -0
  138. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/load_hook.py +0 -0
  139. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/load_mcp.py +0 -0
  140. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/load_session.py +0 -0
  141. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/load_skill.py +0 -0
  142. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/ls.py +0 -0
  143. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/map.py +0 -0
  144. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/map_refresh.py +0 -0
  145. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/model.py +0 -0
  146. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/models.py +0 -0
  147. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/multiline_mode.py +0 -0
  148. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/paste.py +0 -0
  149. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/quit.py +0 -0
  150. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/read_only.py +0 -0
  151. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/read_only_stub.py +0 -0
  152. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/reap_agent.py +0 -0
  153. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/reasoning_effort.py +0 -0
  154. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/remove_hook.py +0 -0
  155. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/remove_mcp.py +0 -0
  156. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/remove_skill.py +0 -0
  157. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/report.py +0 -0
  158. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/reset.py +0 -0
  159. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/rules.py +0 -0
  160. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/save.py +0 -0
  161. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/save_session.py +0 -0
  162. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/settings.py +0 -0
  163. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/terminal_data/linux.keytab +0 -0
  164. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/terminal_setup.py +0 -0
  165. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/test.py +0 -0
  166. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/think_tokens.py +0 -0
  167. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/tokens.py +0 -0
  168. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/undo.py +0 -0
  169. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/utils/__init__.py +0 -0
  170. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/utils/base_command.py +0 -0
  171. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/utils/helpers.py +0 -0
  172. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/utils/registry.py +0 -0
  173. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/utils/save_load_manager.py +0 -0
  174. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/voice.py +0 -0
  175. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/weak_model.py +0 -0
  176. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/web.py +0 -0
  177. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/commands/workspace.py +0 -0
  178. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/deprecated_args.py +0 -0
  179. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/diffs.py +0 -0
  180. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/dump.py +0 -0
  181. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/editor.py +0 -0
  182. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/exceptions.py +0 -0
  183. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/format_settings.py +0 -0
  184. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/help.py +0 -0
  185. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/help_pats.py +0 -0
  186. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/__init__.py +0 -0
  187. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/agents/__init__.py +0 -0
  188. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/agents/config.py +0 -0
  189. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/agents/service.py +0 -0
  190. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/background_commands.py +0 -0
  191. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/command_parser.py +0 -0
  192. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/__init__.py +0 -0
  193. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/base_message.py +0 -0
  194. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/files.py +0 -0
  195. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/manager.py +0 -0
  196. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/service.py +0 -0
  197. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/tags.py +0 -0
  198. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/conversation/utils.py +0 -0
  199. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/copypaste.py +0 -0
  200. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/file_searcher.py +0 -0
  201. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/__init__.py +0 -0
  202. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/dump.py +0 -0
  203. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  204. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/main.py +0 -0
  205. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/parsers.py +0 -0
  206. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/grep_ast/tsl.py +0 -0
  207. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/hashline.py +0 -0
  208. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/hashpos/__init__.py +0 -0
  209. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/hashpos/hashpos.py +0 -0
  210. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/io_proxy.py +0 -0
  211. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/leak_detect.py +0 -0
  212. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/model_providers.py +0 -0
  213. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/monorepo/__init__.py +0 -0
  214. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/monorepo/config.py +0 -0
  215. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/monorepo/project.py +0 -0
  216. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/monorepo/workspace.py +0 -0
  217. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/monorepo/worktree.py +0 -0
  218. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/nested.py +0 -0
  219. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/observations/__init__.py +0 -0
  220. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/observations/service.py +0 -0
  221. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/plugin_manager.py +0 -0
  222. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/profiler.py +0 -0
  223. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/requests.py +0 -0
  224. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/responses.py +0 -0
  225. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/helpers/similarity.py +0 -0
  226. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/history.py +0 -0
  227. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/__init__.py +0 -0
  228. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/base.py +0 -0
  229. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/integration.py +0 -0
  230. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/manager.py +0 -0
  231. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/registry.py +0 -0
  232. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/hooks/types.py +0 -0
  233. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/interruptible_input.py +0 -0
  234. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/llm.py +0 -0
  235. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mcp/__init__.py +0 -0
  236. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mcp/manager.py +0 -0
  237. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mcp/oauth.py +0 -0
  238. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mcp/server.py +0 -0
  239. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mcp/utils.py +0 -0
  240. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/mdstream.py +0 -0
  241. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/onboarding.py +0 -0
  242. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/__init__.py +0 -0
  243. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/architect.yml +0 -0
  244. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/ask.yml +0 -0
  245. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/base.yml +0 -0
  246. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/context.yml +0 -0
  247. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/copypaste.yml +0 -0
  248. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editblock.yml +0 -0
  249. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editblock_fenced.yml +0 -0
  250. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editblock_func.yml +0 -0
  251. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editor_diff_fenced.yml +0 -0
  252. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editor_editblock.yml +0 -0
  253. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/editor_whole.yml +0 -0
  254. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/hashline.yml +0 -0
  255. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/help.yml +0 -0
  256. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/patch.yml +0 -0
  257. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/single_wholefile_func.yml +0 -0
  258. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/udiff.yml +0 -0
  259. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/udiff_simple.yml +0 -0
  260. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/utils/__init__.py +0 -0
  261. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/utils/registry.py +0 -0
  262. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/utils/system.py +0 -0
  263. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/wholefile.yml +0 -0
  264. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/prompts/wholefile_func.yml +0 -0
  265. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  266. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  267. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  268. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  269. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  270. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  271. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  272. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  273. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  274. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  275. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  276. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  277. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  278. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  279. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  280. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  281. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  282. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  283. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  284. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  285. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  286. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  287. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  288. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  289. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  290. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  291. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  292. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  293. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  294. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  295. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  296. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  297. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/README.md +0 -0
  298. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  299. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  300. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  301. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  302. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  303. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  304. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  305. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  306. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  307. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  308. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  309. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  310. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  311. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  312. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  313. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  314. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  315. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  316. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  317. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  318. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  319. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  320. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  321. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  322. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  323. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  324. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  325. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/reasoning_tags.py +0 -0
  326. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/repo.py +0 -0
  327. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/repomap.py +0 -0
  328. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/report.py +0 -0
  329. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/resources/__init__.py +0 -0
  330. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/resources/model-metadata.json +0 -0
  331. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/resources/model-settings.yml +0 -0
  332. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/resources/providers.json +0 -0
  333. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/scrape.py +0 -0
  334. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/sendchat.py +0 -0
  335. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/sessions.py +0 -0
  336. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/special.py +0 -0
  337. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/__init__.py +0 -0
  338. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/command.py +0 -0
  339. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/command_interactive.py +0 -0
  340. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/context_manager.py +0 -0
  341. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/delegate.py +0 -0
  342. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/edit_text.py +0 -0
  343. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/explore_code.py +0 -0
  344. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/finished.py +0 -0
  345. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_branch.py +0 -0
  346. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_diff.py +0 -0
  347. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_log.py +0 -0
  348. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_remote.py +0 -0
  349. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_show.py +0 -0
  350. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/git_status.py +0 -0
  351. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/grep.py +0 -0
  352. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/load_skill.py +0 -0
  353. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/ls.py +0 -0
  354. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/read_range.py +0 -0
  355. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/remove_skill.py +0 -0
  356. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/thinking.py +0 -0
  357. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/undo_change.py +0 -0
  358. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/update_todo_list.py +0 -0
  359. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/utils/base_tool.py +0 -0
  360. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/utils/helpers.py +0 -0
  361. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/utils/output.py +0 -0
  362. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tools/utils/registry.py +0 -0
  363. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/__init__.py +0 -0
  364. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/app.py +0 -0
  365. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/styles.tcss +0 -0
  366. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/__init__.py +0 -0
  367. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/completion_bar.py +0 -0
  368. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/file_list.py +0 -0
  369. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/footer.py +0 -0
  370. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/input_area.py +0 -0
  371. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/input_container.py +0 -0
  372. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/key_hints.py +0 -0
  373. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/output.py +0 -0
  374. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/status_bar.py +0 -0
  375. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/widgets/subagent_pills.py +0 -0
  376. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/tui/worker.py +0 -0
  377. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/urls.py +0 -0
  378. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/utils.py +0 -0
  379. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/versioncheck.py +0 -0
  380. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/voice.py +0 -0
  381. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/waiting.py +0 -0
  382. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/watch.py +0 -0
  383. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/watch_prompts.py +0 -0
  384. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/Gemfile +0 -0
  385. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/blame.md +0 -0
  386. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/get-started.md +0 -0
  387. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/help-tip.md +0 -0
  388. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/help.md +0 -0
  389. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/install.md +0 -0
  390. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/keys.md +0 -0
  391. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/model-warnings.md +0 -0
  392. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/multi-line.md +0 -0
  393. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/python-m-aider.md +0 -0
  394. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/recording.css +0 -0
  395. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/recording.md +0 -0
  396. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_includes/works-best.md +0 -0
  397. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_features.scss +0 -0
  398. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_footer.scss +0 -0
  399. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_hero.scss +0 -0
  400. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_info.scss +0 -0
  401. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_layout.scss +0 -0
  402. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_reset.scss +0 -0
  403. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_testimonials.scss +0 -0
  404. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_typography.scss +0 -0
  405. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/_variables.scss +0 -0
  406. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/custom/custom.scss +0 -0
  407. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/_sass/global-overrides.scss +0 -0
  408. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/adv-model-settings.md +0 -0
  409. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/aider_conf.md +0 -0
  410. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/api-keys.md +0 -0
  411. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/custom-commands.md +0 -0
  412. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  413. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/dotenv.md +0 -0
  414. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/editor.md +0 -0
  415. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/hooks.md +0 -0
  416. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/mcp.md +0 -0
  417. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/model-aliases.md +0 -0
  418. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/options.md +0 -0
  419. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/reasoning.md +0 -0
  420. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/security.md +0 -0
  421. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/skills.md +0 -0
  422. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/tui.md +0 -0
  423. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config/workspaces.md +0 -0
  424. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/config.md +0 -0
  425. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/faq.md +0 -0
  426. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/git.md +0 -0
  427. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/index.md +0 -0
  428. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/install/docker.md +0 -0
  429. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/install/optional.md +0 -0
  430. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/install.md +0 -0
  431. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/languages.md +0 -0
  432. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  433. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/legal/privacy.md +0 -0
  434. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/anthropic.md +0 -0
  435. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/azure.md +0 -0
  436. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/bedrock.md +0 -0
  437. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/cohere.md +0 -0
  438. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/deepseek.md +0 -0
  439. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/gemini.md +0 -0
  440. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/github.md +0 -0
  441. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/groq.md +0 -0
  442. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/lm-studio.md +0 -0
  443. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/ollama.md +0 -0
  444. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/openai-compat.md +0 -0
  445. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/openai.md +0 -0
  446. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/openrouter.md +0 -0
  447. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/other.md +0 -0
  448. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/vertex.md +0 -0
  449. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/warnings.md +0 -0
  450. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms/xai.md +0 -0
  451. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/llms.md +0 -0
  452. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/more/analytics.md +0 -0
  453. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/more/edit-formats.md +0 -0
  454. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/more/infinite-output.md +0 -0
  455. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/more-info.md +0 -0
  456. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/repomap.md +0 -0
  457. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/scripting.md +0 -0
  458. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  459. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  460. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/imports.md +0 -0
  461. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  462. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/support.md +0 -0
  463. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  464. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  465. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/troubleshooting.md +0 -0
  466. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/commands.md +0 -0
  467. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/conventions.md +0 -0
  468. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/copypaste.md +0 -0
  469. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/images-urls.md +0 -0
  470. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/lint-test.md +0 -0
  471. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/modes.md +0 -0
  472. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/not-code.md +0 -0
  473. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/notifications.md +0 -0
  474. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/sessions.md +0 -0
  475. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/tips.md +0 -0
  476. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/voice.md +0 -0
  477. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage/watch.md +0 -0
  478. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/docs/usage.md +0 -0
  479. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli/website/share/index.md +0 -0
  480. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/dependency_links.txt +0 -0
  481. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/entry_points.txt +0 -0
  482. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/requires.txt +0 -0
  483. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/cecli_dev.egg-info/top_level.txt +0 -0
  484. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/docker/Dockerfile +0 -0
  485. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  486. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/pyproject.toml +0 -0
  487. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/pytest.ini +0 -0
  488. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/common-constraints.txt +0 -0
  489. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-dev.in +0 -0
  490. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-dev.txt +0 -0
  491. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-help.in +0 -0
  492. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-help.txt +0 -0
  493. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-playwright.in +0 -0
  494. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements-playwright.txt +0 -0
  495. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/requirements.in +0 -0
  496. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements/tree-sitter.in +0 -0
  497. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/requirements.txt +0 -0
  498. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/30k-image.py +0 -0
  499. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/Dockerfile.jekyll +0 -0
  500. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/__init__.py +0 -0
  501. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/blame.py +0 -0
  502. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/clean_metadata.py +0 -0
  503. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/cost_analyzer.py +0 -0
  504. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/cost_calculator.py +0 -0
  505. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/dl_icons.py +0 -0
  506. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/filter-chat-mode.js +0 -0
  507. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/generate_providers.py +0 -0
  508. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/get_contributor_list.js +0 -0
  509. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/get_hashline.py +0 -0
  510. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/history_prompts.py +0 -0
  511. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/homepage.py +0 -0
  512. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/issues.py +0 -0
  513. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/jekyll_build.sh +0 -0
  514. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/jekyll_run.sh +0 -0
  515. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/logo_svg.py +0 -0
  516. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/pip-compile.sh +0 -0
  517. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/recording_audio.py +0 -0
  518. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/redact-cast.py +0 -0
  519. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/rename_to_cecli.py +0 -0
  520. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/tmux_record.sh +0 -0
  521. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/tsl_pack_langs.py +0 -0
  522. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/update-blame.sh +0 -0
  523. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/update-docs.sh +0 -0
  524. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/update-history.py +0 -0
  525. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/versionbump.py +0 -0
  526. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/scripts/yank-old-versions.py +0 -0
  527. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/setup.cfg +0 -0
  528. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/shim.pyproject.toml +0 -0
  529. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/__init__.py +0 -0
  530. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/__init__.py +0 -0
  531. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_aws_credentials.py +0 -0
  532. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_background_commands.py +0 -0
  533. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_coder.py +0 -0
  534. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_commands.py +0 -0
  535. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_custom_commands.py +0 -0
  536. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_deprecated.py +0 -0
  537. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_editblock.py +0 -0
  538. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_editor.py +0 -0
  539. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_exceptions.py +0 -0
  540. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_find_or_blocks.py +0 -0
  541. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_hashline.py +0 -0
  542. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_history.py +0 -0
  543. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_io.py +0 -0
  544. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_main.py +0 -0
  545. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_model_info_manager.py +0 -0
  546. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_model_provider_manager.py +0 -0
  547. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_models.py +0 -0
  548. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_onboarding.py +0 -0
  549. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_plugin_manager.py +0 -0
  550. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_prompts.py +0 -0
  551. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_reasoning.py +0 -0
  552. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_repo.py +0 -0
  553. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_repomap.py +0 -0
  554. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_run_cmd.py +0 -0
  555. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_sanity_check_repo.py +0 -0
  556. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_scripting.py +0 -0
  557. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_sendchat.py +0 -0
  558. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_sessions.py +0 -0
  559. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_skills.py +0 -0
  560. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_special.py +0 -0
  561. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_ssl_verification.py +0 -0
  562. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_udiff.py +0 -0
  563. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_urls.py +0 -0
  564. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_voice.py +0 -0
  565. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_watch.py +0 -0
  566. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/basic/test_wholefile.py +0 -0
  567. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/coders/test_copypaste_coder.py +0 -0
  568. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/conftest.py +0 -0
  569. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/conversations/test_conversation_integration.py +0 -0
  570. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/conversations/test_conversation_system.py +0 -0
  571. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  572. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/chat-history.md +0 -0
  573. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/arduino/test.ino +0 -0
  574. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/bash/test.sh +0 -0
  575. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/c/test.c +0 -0
  576. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/chatito/test.chatito +0 -0
  577. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/clojure/test.clj +0 -0
  578. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  579. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/cpp/test.cpp +0 -0
  580. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/csharp/test.cs +0 -0
  581. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/d/test.d +0 -0
  582. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/dart/test.dart +0 -0
  583. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/elisp/test.el +0 -0
  584. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/elixir/test.ex +0 -0
  585. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/elm/test.elm +0 -0
  586. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/gleam/test.gleam +0 -0
  587. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/go/test.go +0 -0
  588. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/haskell/test.hs +0 -0
  589. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/hcl/test.tf +0 -0
  590. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/java/test.java +0 -0
  591. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/javascript/test.js +0 -0
  592. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/kotlin/test.kt +0 -0
  593. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/lua/test.lua +0 -0
  594. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/matlab/test.m +0 -0
  595. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/ocaml/test.ml +0 -0
  596. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  597. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/php/test.php +0 -0
  598. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/pony/test.pony +0 -0
  599. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/properties/test.properties +0 -0
  600. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/python/test.py +0 -0
  601. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/ql/test.ql +0 -0
  602. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/r/test.r +0 -0
  603. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/racket/test.rkt +0 -0
  604. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/ruby/test.rb +0 -0
  605. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/rust/test.rs +0 -0
  606. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/scala/test.scala +0 -0
  607. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/solidity/test.sol +0 -0
  608. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/swift/test.swift +0 -0
  609. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/tsx/test.tsx +0 -0
  610. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/typescript/test.ts +0 -0
  611. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/udev/test.rules +0 -0
  612. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/languages/zig/test.zig +0 -0
  613. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/sample-code-base/sample.js +0 -0
  614. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/sample-code-base/sample.py +0 -0
  615. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  616. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/watch.js +0 -0
  617. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/watch.lisp +0 -0
  618. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/watch.py +0 -0
  619. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/fixtures/watch_question.js +0 -0
  620. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/help/test_help.py +0 -0
  621. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/monorepo/test_config.py +0 -0
  622. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/monorepo/test_config_active.py +0 -0
  623. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  624. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  625. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/monorepo/test_workspace.py +0 -0
  626. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/helpers/observations/test_observation_service.py +0 -0
  627. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/hooks/__init__.py +0 -0
  628. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/hooks/test_base.py +0 -0
  629. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/hooks/test_manager.py +0 -0
  630. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/hooks/test_registry.py +0 -0
  631. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/mcp/__init__.py +0 -0
  632. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/mcp/test_manager.py +0 -0
  633. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/scrape/test_playwright_disable.py +0 -0
  634. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/scrape/test_scrape.py +0 -0
  635. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/__init__.py +0 -0
  636. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/conftest.py +0 -0
  637. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_commands.py +0 -0
  638. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_config.py +0 -0
  639. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_delegate.py +0 -0
  640. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_finished.py +0 -0
  641. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_io_proxy.py +0 -0
  642. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_service.py +0 -0
  643. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/subagents/test_sub_agent_coder.py +0 -0
  644. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_get_lines.py +0 -0
  645. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_git_branch.py +0 -0
  646. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_git_diff.py +0 -0
  647. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_grep.py +0 -0
  648. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_insert_block.py +0 -0
  649. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tools/test_registry.py +0 -0
  650. {cecli_dev-0.100.0rc5 → cecli_dev-0.100.0rc8}/tests/tui/test_app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.100.0rc5
3
+ Version: 0.100.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
@@ -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.0rc5'
22
- __version_tuple__ = version_tuple = (0, 100, 0, 'rc5')
21
+ __version__ = version = '0.100.0rc8'
22
+ __version_tuple__ = version_tuple = (0, 100, 0, 'rc8')
23
23
 
24
- __commit_id__ = commit_id = 'g5e5d5ba3d'
24
+ __commit_id__ = commit_id = 'g4af9ad954'
@@ -154,6 +154,7 @@ class AgentCoder(Coder):
154
154
  )
155
155
  config["command_timeout"] = nested.getter(config, "command_timeout", 30)
156
156
  config["hot_reload"] = nested.getter(config, "hot_reload", False)
157
+ config["allow_nested_delegation"] = nested.getter(config, "allow_nested_delegation", False)
157
158
 
158
159
  config["tools_paths"] = nested.getter(config, ["tools_paths", "tool_paths"], [])
159
160
  config["tools_includelist"] = nested.getter(
@@ -350,6 +351,7 @@ class AgentCoder(Coder):
350
351
  "git_status",
351
352
  "symbol_outline",
352
353
  "skills",
354
+ "sub_agents",
353
355
  "loaded_skills",
354
356
  ]
355
357
  for block_type in block_types:
@@ -385,7 +387,9 @@ class AgentCoder(Coder):
385
387
  content = self.get_skills_context()
386
388
  elif block_name == "loaded_skills":
387
389
  content = self.get_skills_content()
388
- elif block_name == "sub_agents":
390
+ elif block_name == "sub_agents" and (
391
+ not self.parent_uuid or self.agent_config.get("allow_nested_delegation", False)
392
+ ):
389
393
  content = self.get_sub_agents_context()
390
394
  if content is not None:
391
395
  self.context_blocks_cache[block_name] = content
@@ -795,7 +799,13 @@ class AgentCoder(Coder):
795
799
 
796
800
  if self.auto_lint and used_write_tool:
797
801
  edited = list(self.files_edited_by_tools)
798
- lint_errors = self.lint_edited(edited, show_output=False)
802
+ lint_coro = self.lint_edited(edited, show_output=False)
803
+ lint_errors, interrupted = await self.coroutines.interruptible(
804
+ lint_coro, self.interrupt_event
805
+ )
806
+ if interrupted:
807
+ raise KeyboardInterrupt("Interrupted during linting")
808
+
799
809
  self.lint_outcome = not lint_errors
800
810
 
801
811
  if lint_errors:
@@ -898,7 +908,12 @@ class AgentCoder(Coder):
898
908
  " its outputs are no longer necessary"
899
909
  )
900
910
  self.io.tool_output(waiting_msg)
901
- await asyncio.sleep(command_timeout / 2)
911
+ sleep_coro = asyncio.sleep(command_timeout / 2)
912
+ _res, interrupted = await self.coroutines.interruptible(
913
+ sleep_coro, self.interrupt_event
914
+ )
915
+ if interrupted:
916
+ raise KeyboardInterrupt("Interrupted while waiting for background commands")
902
917
  return True
903
918
 
904
919
  # Check for recently finished commands that need reflection
@@ -61,7 +61,7 @@ from cecli.reasoning_tags import (
61
61
  from cecli.repo import ANY_GIT_ERROR, GitRepo
62
62
  from cecli.repomap import RepoMap
63
63
  from cecli.report import update_error_prefix
64
- from cecli.run_cmd import run_cmd
64
+ from cecli.run_cmd import run_cmd_async
65
65
  from cecli.sessions import SessionManager
66
66
  from cecli.tools.utils.output import print_tool_response
67
67
  from cecli.tools.utils.registry import ToolRegistry
@@ -105,7 +105,83 @@ all_fences = [
105
105
  ]
106
106
 
107
107
 
108
- class Coder:
108
+ class UsageMeta(type):
109
+ """Metaclass that provides shared accumulator properties across all Coder subclasses.
110
+ Every instance shares the same unified total token and cost amounts."""
111
+
112
+ _total_cost = 0
113
+ _total_tokens_sent = 0
114
+ _total_tokens_received = 0
115
+ _total_cached_tokens = 0
116
+
117
+ @property
118
+ def total_cost(cls):
119
+ return UsageMeta._total_cost
120
+
121
+ @total_cost.setter
122
+ def total_cost(cls, value):
123
+ UsageMeta._total_cost = value
124
+
125
+ @property
126
+ def total_tokens_sent(cls):
127
+ return UsageMeta._total_tokens_sent
128
+
129
+ @total_tokens_sent.setter
130
+ def total_tokens_sent(cls, value):
131
+ UsageMeta._total_tokens_sent = value
132
+
133
+ @property
134
+ def total_tokens_received(cls):
135
+ return UsageMeta._total_tokens_received
136
+
137
+ @total_tokens_received.setter
138
+ def total_tokens_received(cls, value):
139
+ UsageMeta._total_tokens_received = value
140
+
141
+ @property
142
+ def total_cached_tokens(cls):
143
+ return UsageMeta._total_cached_tokens
144
+
145
+ @total_cached_tokens.setter
146
+ def total_cached_tokens(cls, value):
147
+ UsageMeta._total_cached_tokens = value
148
+
149
+
150
+ class Coder(metaclass=UsageMeta):
151
+
152
+ # Instance-level properties that delegate to the shared metaclass storage
153
+ @property
154
+ def total_cost(self):
155
+ return type(self).total_cost
156
+
157
+ @total_cost.setter
158
+ def total_cost(self, value):
159
+ type(self).total_cost = value
160
+
161
+ @property
162
+ def total_tokens_sent(self):
163
+ return type(self).total_tokens_sent
164
+
165
+ @total_tokens_sent.setter
166
+ def total_tokens_sent(self, value):
167
+ type(self).total_tokens_sent = value
168
+
169
+ @property
170
+ def total_tokens_received(self):
171
+ return type(self).total_tokens_received
172
+
173
+ @total_tokens_received.setter
174
+ def total_tokens_received(self, value):
175
+ type(self).total_tokens_received = value
176
+
177
+ @property
178
+ def total_cached_tokens(self):
179
+ return type(self).total_cached_tokens
180
+
181
+ @total_cached_tokens.setter
182
+ def total_cached_tokens(self, value):
183
+ type(self).total_cached_tokens = value
184
+
109
185
  abs_fnames = None
110
186
  abs_read_only_fnames = None
111
187
  abs_read_only_stubs_fnames = None
@@ -141,9 +217,6 @@ class Coder:
141
217
  partial_response_consolidated = None
142
218
  commit_before_message = []
143
219
  message_cost = 0.0
144
- total_tokens_sent = 0
145
- total_tokens_received = 0
146
- total_cached_tokens = 0
147
220
  message_tokens_sent = 0
148
221
  message_tokens_received = 0
149
222
  message_cached_tokens = 0
@@ -205,8 +278,8 @@ class Coder:
205
278
  main_model = models.Model(models.DEFAULT_MODEL_NAME, io=io)
206
279
 
207
280
  if edit_format == "code":
208
- edit_format = None
209
- if edit_format is None:
281
+ edit_format = main_model.edit_format
282
+ elif edit_format is None:
210
283
  if from_coder:
211
284
  edit_format = from_coder.edit_format
212
285
  else:
@@ -232,11 +305,7 @@ class Coder:
232
305
  cur_messages=[],
233
306
  coder_commit_hashes=from_coder.coder_commit_hashes,
234
307
  commands=from_coder.commands.clone(),
235
- total_cost=from_coder.total_cost,
236
308
  ignore_mentions=from_coder.ignore_mentions,
237
- total_tokens_sent=from_coder.total_tokens_sent,
238
- total_tokens_received=from_coder.total_tokens_received,
239
- total_cached_tokens=from_coder.total_cached_tokens,
240
309
  file_watcher=from_coder.file_watcher,
241
310
  mcp_manager=from_coder.mcp_manager,
242
311
  uuid=from_coder.uuid,
@@ -263,12 +332,18 @@ class Coder:
263
332
 
264
333
  if res is not None:
265
334
  if from_coder:
266
- if from_coder.mcp_manager:
267
- res.mcp_manager = from_coder.mcp_manager
268
-
269
- # Transfer TUI app weak reference
270
- res.tui = from_coder.tui
271
- res.context_management_enabled = from_coder.context_management_enabled
335
+ # Preserve TUI ref in all child coders
336
+ if from_coder.tui:
337
+ res.tui = from_coder.tui
338
+
339
+ if res.mcp_manager:
340
+ # When switching to a non-agent coder, disconnect the "Local" MCP server
341
+ # (which provides agent-only tools like tool calling and file editing)
342
+ # so it's not available in non-agent modes.
343
+ if not isinstance(res, coders.AgentCoder):
344
+ local_server = res.mcp_manager.get_server("Local")
345
+ if local_server and local_server.is_connected:
346
+ await res.mcp_manager.disconnect_server("Local")
272
347
 
273
348
  await res.initialize_mcp_tools()
274
349
 
@@ -316,7 +391,6 @@ class Coder:
316
391
  map_max_line_length=100,
317
392
  commands=None,
318
393
  summarizer=None,
319
- total_cost=0.0,
320
394
  map_refresh="auto",
321
395
  cache_prompts=False,
322
396
  num_cache_warming_pings=0,
@@ -325,9 +399,6 @@ class Coder:
325
399
  commit_language=None,
326
400
  detect_urls=True,
327
401
  ignore_mentions=None,
328
- total_tokens_sent=0,
329
- total_tokens_received=0,
330
- total_cached_tokens=0,
331
402
  file_watcher=None,
332
403
  auto_copy_context=False,
333
404
  auto_accept_architect=True,
@@ -407,10 +478,6 @@ class Coder:
407
478
  self.chat_completion_response_hashes = []
408
479
  self.need_commit_before_edits = set()
409
480
 
410
- self.total_cost = total_cost
411
- self.total_tokens_sent = total_tokens_sent
412
- self.total_tokens_received = total_tokens_received
413
- self.total_cached_tokens = total_cached_tokens
414
481
  self.message_tokens_sent = 0
415
482
  self.message_tokens_received = 0
416
483
  self.message_cached_tokens = 0
@@ -600,7 +667,9 @@ class Coder:
600
667
  self.files_edited_by_tools = set()
601
668
 
602
669
  # Linting and testing
603
- self.linter = Linter(root=self.root, encoding=io.encoding)
670
+ self.linter = Linter(
671
+ root=self.root, encoding=io.encoding, interrupt_event=self.interrupt_event
672
+ )
604
673
  self.auto_lint = auto_lint
605
674
  self.setup_lint_cmds(lint_cmds)
606
675
  self.lint_cmds = lint_cmds
@@ -2224,6 +2293,10 @@ class Coder:
2224
2293
 
2225
2294
  ConversationService.get_manager(self).flush_queue()
2226
2295
 
2296
+ # Clear any stale interrupt state before starting formatting
2297
+ # to avoid immediately re-catching a previous interrupt
2298
+ self.interrupt_event.clear()
2299
+
2227
2300
  if inp:
2228
2301
  # Make sure current coder actually has control of conversation system
2229
2302
  ConversationService.get_chunks(self).initialize_conversation_system()
@@ -2242,7 +2315,22 @@ class Coder:
2242
2315
  import asyncio
2243
2316
 
2244
2317
  loop = asyncio.get_running_loop()
2245
- result = await loop.run_in_executor(None, self.format_messages)
2318
+
2319
+ async def format_in_executor():
2320
+ return await loop.run_in_executor(None, self.format_messages)
2321
+
2322
+ result, interrupted = await self.coroutines.interruptible(
2323
+ format_in_executor(), self.interrupt_event
2324
+ )
2325
+
2326
+ if interrupted:
2327
+ # Use CancelledError instead of KeyboardInterrupt to avoid
2328
+ # propagating through the asyncio event loop during cleanup.
2329
+ # KeyboardInterrupt is re-raised by Task.__step and bypasses
2330
+ # asyncio.gather(return_exceptions=True), causing crashes
2331
+ # when tasks are gathered during _cleanup_loop.
2332
+ raise asyncio.CancelledError("Interrupted during message formatting")
2333
+
2246
2334
  messages = result
2247
2335
 
2248
2336
  if not await self.check_tokens(messages):
@@ -2451,7 +2539,10 @@ class Coder:
2451
2539
  return
2452
2540
 
2453
2541
  if edited and self.auto_lint:
2454
- lint_errors = self.lint_edited(edited)
2542
+ lint_errors = await self.lint_edited(edited)
2543
+ if lint_errors is None: # Interrupted
2544
+ return
2545
+
2455
2546
  await self.auto_commit(edited, context="Ran the linter")
2456
2547
  self.lint_outcome = not lint_errors
2457
2548
  if lint_errors:
@@ -2952,12 +3043,16 @@ class Coder:
2952
3043
  self.io.tool_error(res)
2953
3044
  await self.io.offer_url(urls.token_limits)
2954
3045
 
2955
- def lint_edited(self, fnames, show_output=True):
3046
+ async def lint_edited(self, fnames, show_output=True):
2956
3047
  res = ""
2957
3048
  for fname in fnames:
2958
3049
  if not fname:
2959
3050
  continue
2960
- errors = self.linter.lint(self.abs_root_path(fname))
3051
+ try:
3052
+ errors = await self.linter.lint(self.abs_root_path(fname))
3053
+ except asyncio.CancelledError:
3054
+ self.io.tool_warning("Linting interrupted.")
3055
+ return None
2961
3056
 
2962
3057
  if errors:
2963
3058
  res += "\n"
@@ -3276,122 +3371,127 @@ class Coder:
3276
3371
  received_content = False
3277
3372
  chunk_index = 0
3278
3373
 
3279
- async for chunk in completion:
3280
- if self.args.debug:
3281
- with open(".cecli/logs/chunks.log", "a") as f:
3282
- print(chunk, file=f)
3374
+ try:
3375
+ async for chunk in coroutines.interruptible_async_generator(
3376
+ completion, self.interrupt_event
3377
+ ):
3378
+ if self.args.debug:
3379
+ with open(".cecli/logs/chunks.log", "a") as f:
3380
+ print(chunk, file=f)
3283
3381
 
3284
- # Check if confirmation is in progress and wait if needed
3285
- if not self.io.confirmation_in_progress_event.is_set():
3286
- await self.io.confirmation_in_progress_event.wait()
3382
+ # Check if confirmation is in progress and wait if needed
3383
+ if not self.io.confirmation_in_progress_event.is_set():
3384
+ await self.io.confirmation_in_progress_event.wait()
3287
3385
 
3288
- if isinstance(chunk, str):
3289
- self.io.tool_error(chunk)
3290
- continue
3291
- else:
3292
- if len(chunk.choices) == 0:
3386
+ if isinstance(chunk, str):
3387
+ self.io.tool_error(chunk)
3293
3388
  continue
3389
+ else:
3390
+ if len(chunk.choices) == 0:
3391
+ continue
3294
3392
 
3295
- if (
3296
- hasattr(chunk.choices[0], "finish_reason")
3297
- and chunk.choices[0].finish_reason == "length"
3298
- ):
3299
- raise FinishReasonLength()
3393
+ if (
3394
+ hasattr(chunk.choices[0], "finish_reason")
3395
+ and chunk.choices[0].finish_reason == "length"
3396
+ ):
3397
+ raise FinishReasonLength()
3300
3398
 
3301
- try:
3302
- if chunk.choices[0].delta.tool_calls:
3303
- received_content = True
3304
- self.token_profiler.on_token()
3305
- for tool_call_chunk in chunk.choices[0].delta.tool_calls:
3306
- self.tool_reflection = True
3399
+ try:
3400
+ if chunk.choices[0].delta.tool_calls:
3401
+ received_content = True
3402
+ self.token_profiler.on_token()
3403
+ for tool_call_chunk in chunk.choices[0].delta.tool_calls:
3404
+ self.tool_reflection = True
3307
3405
 
3308
- if tool_call_chunk.type:
3309
- self.io.update_spinner_suffix(tool_call_chunk.type)
3406
+ if tool_call_chunk.type:
3407
+ self.io.update_spinner_suffix(tool_call_chunk.type)
3310
3408
 
3311
- if tool_call_chunk.function:
3312
- if tool_call_chunk.function.name:
3313
- self.io.update_spinner_suffix(tool_call_chunk.function.name)
3409
+ if tool_call_chunk.function:
3410
+ if tool_call_chunk.function.name:
3411
+ self.io.update_spinner_suffix(tool_call_chunk.function.name)
3314
3412
 
3315
- if tool_call_chunk.function.arguments:
3316
- self.io.update_spinner_suffix(
3317
- tool_call_chunk.function.arguments
3318
- )
3413
+ if tool_call_chunk.function.arguments:
3414
+ self.io.update_spinner_suffix(
3415
+ tool_call_chunk.function.arguments
3416
+ )
3319
3417
 
3320
- except (AttributeError, IndexError):
3321
- # Handle cases where the response structure doesn't match expectations
3322
- pass
3418
+ except (AttributeError, IndexError):
3419
+ # Handle cases where the response structure doesn't match expectations
3420
+ pass
3323
3421
 
3324
- try:
3325
- func = chunk.choices[0].delta.function_call
3326
- # dump(func)
3327
- if func:
3328
- for k, v in func.items():
3329
- self.tool_reflection = True
3330
- self.io.update_spinner_suffix(v)
3331
-
3332
- received_content = True
3333
- self.token_profiler.on_token()
3334
- except AttributeError:
3335
- pass
3336
-
3337
- text = ""
3338
-
3339
- try:
3340
- reasoning_content = chunk.choices[0].delta.reasoning_content
3341
- except AttributeError:
3342
3422
  try:
3343
- reasoning_content = chunk.choices[0].delta.reasoning
3423
+ func = chunk.choices[0].delta.function_call
3424
+ # dump(func)
3425
+ if func:
3426
+ for k, v in func.items():
3427
+ self.tool_reflection = True
3428
+ self.io.update_spinner_suffix(v)
3429
+
3430
+ received_content = True
3431
+ self.token_profiler.on_token()
3344
3432
  except AttributeError:
3345
- reasoning_content = None
3433
+ pass
3346
3434
 
3347
- if reasoning_content:
3348
- if nested.getter(self.args, "show_thinking"):
3349
- if not self.got_reasoning_content:
3350
- text += f"<{REASONING_TAG}>\n\n"
3351
- text += reasoning_content
3352
- self.got_reasoning_content = True
3353
- received_content = True
3354
- self.token_profiler.on_token()
3355
- self.io.update_spinner_suffix(reasoning_content)
3356
- self.partial_response_reasoning_content += reasoning_content
3435
+ text = ""
3357
3436
 
3358
- try:
3359
- content = chunk.choices[0].delta.content
3360
- if content:
3361
- if self.got_reasoning_content and not self.ended_reasoning_content:
3362
- text += f"\n\n</{self.reasoning_tag_name}>\n\n"
3363
- self.ended_reasoning_content = True
3364
-
3365
- text += content
3366
- received_content = True
3437
+ try:
3438
+ reasoning_content = chunk.choices[0].delta.reasoning_content
3439
+ except AttributeError:
3440
+ try:
3441
+ reasoning_content = chunk.choices[0].delta.reasoning
3442
+ except AttributeError:
3443
+ reasoning_content = None
3444
+
3445
+ if reasoning_content:
3446
+ if nested.getter(self.args, "show_thinking"):
3447
+ if not self.got_reasoning_content:
3448
+ text += f"<{REASONING_TAG}>\n\n"
3449
+ text += reasoning_content
3450
+ self.got_reasoning_content = True
3451
+ received_content = True
3367
3452
  self.token_profiler.on_token()
3368
- self.io.update_spinner_suffix(content)
3369
- except AttributeError:
3370
- pass
3453
+ self.io.update_spinner_suffix(reasoning_content)
3454
+ self.partial_response_reasoning_content += reasoning_content
3371
3455
 
3372
- self.partial_response_content += text
3456
+ try:
3457
+ content = chunk.choices[0].delta.content
3458
+ if content:
3459
+ if self.got_reasoning_content and not self.ended_reasoning_content:
3460
+ text += f"\n\n</{self.reasoning_tag_name}>\n\n"
3461
+ self.ended_reasoning_content = True
3462
+
3463
+ text += content
3464
+ received_content = True
3465
+ self.token_profiler.on_token()
3466
+ self.io.update_spinner_suffix(content)
3467
+ except AttributeError:
3468
+ pass
3373
3469
 
3374
- chunk_index += 1
3375
- chunk._hidden_params["created_at"] = chunk_index
3376
- self.partial_response_chunks.append(chunk)
3470
+ self.partial_response_content += text
3377
3471
 
3378
- if self.show_pretty():
3379
- # Use simplified streaming - just call the method with full content
3380
- content_to_show = self.live_incremental_response(False)
3381
- self.stream_wrapper(content_to_show, final=False)
3382
- elif text:
3383
- # Apply reasoning tag formatting for non-pretty output
3384
- if nested.getter(self.args, "show_thinking"):
3385
- text = replace_reasoning_tags(text, self.reasoning_tag_name)
3386
- try:
3387
- self.stream_wrapper(text, final=False)
3388
- except UnicodeEncodeError:
3389
- # Safely encode and decode the text
3390
- safe_text = text.encode(sys.stdout.encoding, errors="backslashreplace").decode(
3391
- sys.stdout.encoding
3392
- )
3393
- self.stream_wrapper(safe_text, final=False)
3394
- yield text
3472
+ chunk_index += 1
3473
+ chunk._hidden_params["created_at"] = chunk_index
3474
+ self.partial_response_chunks.append(chunk)
3475
+
3476
+ if self.show_pretty():
3477
+ # Use simplified streaming - just call the method with full content
3478
+ content_to_show = self.live_incremental_response(False)
3479
+ self.stream_wrapper(content_to_show, final=False)
3480
+ elif text:
3481
+ # Apply reasoning tag formatting for non-pretty output
3482
+ if nested.getter(self.args, "show_thinking"):
3483
+ text = replace_reasoning_tags(text, self.reasoning_tag_name)
3484
+ try:
3485
+ self.stream_wrapper(text, final=False)
3486
+ except UnicodeEncodeError:
3487
+ # Safely encode and decode the text
3488
+ safe_text = text.encode(
3489
+ sys.stdout.encoding, errors="backslashreplace"
3490
+ ).decode(sys.stdout.encoding)
3491
+ self.stream_wrapper(safe_text, final=False)
3492
+ yield text
3493
+ except (asyncio.CancelledError, KeyboardInterrupt):
3494
+ raise KeyboardInterrupt
3395
3495
 
3396
3496
  # The Part Doing the Heavy Lifting Now
3397
3497
  self.consolidate_chunks()
@@ -3650,7 +3750,7 @@ class Coder:
3650
3750
  total_stats += " ↑↓"
3651
3751
 
3652
3752
  if not self.get_active_model().info.get("input_cost_per_token"):
3653
- self.usage_report = tokens_report + "\n" + total_stats
3753
+ self.usage_report = tokens_report + " " + total_stats
3654
3754
  return
3655
3755
 
3656
3756
  try:
@@ -3673,7 +3773,7 @@ class Coder:
3673
3773
  )
3674
3774
 
3675
3775
  if cache_hit_tokens and cache_write_tokens:
3676
- sep = "\n"
3776
+ sep = " "
3677
3777
  else:
3678
3778
  sep = " "
3679
3779
 
@@ -4226,8 +4326,10 @@ class Coder:
4226
4326
  self.io.tool_output(f"Running {command}")
4227
4327
  # Add the command to input history
4228
4328
  # self.io.add_to_input_history(f"/run {command.strip()}")
4229
- exit_status, output = await asyncio.to_thread(
4230
- run_cmd, command, error_print=self.io.tool_error, cwd=self.root
4329
+ exit_status, output = await run_cmd_async(
4330
+ command,
4331
+ self.interrupt_event,
4332
+ cwd=self.root,
4231
4333
  )
4232
4334
 
4233
4335
  if output:
@@ -19,4 +19,5 @@ class SubAgentCoder(AgentCoder):
19
19
 
20
20
  def post_init(self):
21
21
  super().post_init()
22
- self.registered_tools["excluded"].add("delegate")
22
+ if not self.agent_config.get("allow_nested_delegation", False):
23
+ self.registered_tools["excluded"].add("delegate")
@@ -43,7 +43,7 @@ class LintCommand(BaseCommand):
43
43
  lint_coder = None
44
44
  for fname in fnames:
45
45
  try:
46
- errors = coder.linter.lint(fname)
46
+ errors = await coder.linter.lint(fname)
47
47
  except FileNotFoundError as err:
48
48
  io.tool_error(f"Unable to lint {fname}")
49
49
  io.tool_output(str(err))
@@ -1,11 +1,10 @@
1
- import asyncio
2
1
  from typing import List
3
2
 
4
3
  import cecli.prompts.utils.system as prompts
5
4
  from cecli.commands.utils.base_command import BaseCommand
6
5
  from cecli.commands.utils.helpers import format_command_result
7
6
  from cecli.helpers.conversation import ConversationService, MessageTag
8
- from cecli.run_cmd import run_cmd
7
+ from cecli.run_cmd import run_cmd_async
9
8
 
10
9
 
11
10
  class RunCommand(BaseCommand):
@@ -22,11 +21,10 @@ class RunCommand(BaseCommand):
22
21
  if coder.args.tui:
23
22
  should_print = False
24
23
 
25
- exit_status, combined_output = await asyncio.to_thread(
26
- run_cmd,
24
+ exit_status, combined_output = await run_cmd_async(
27
25
  args,
26
+ coder.interrupt_event,
28
27
  verbose=coder.args.verbose if hasattr(coder.args, "verbose") else False,
29
- error_print=io.tool_error,
30
28
  cwd=coder.root,
31
29
  should_print=should_print,
32
30
  )
@@ -20,7 +20,9 @@ class SpawnAgentCommand(BaseCommand):
20
20
  try:
21
21
  agent_service = AgentService.get_instance(coder)
22
22
  await agent_service.spawn(name)
23
- io.tool_output(f"Sub-agent '{name}' spawned. " "Switch to it with Ctrl+Alt+Right.")
23
+ if coder.tui and coder.tui():
24
+ switch_key = coder.tui().get_keys_for("next_agent")
25
+ io.tool_output(f"Sub-agent '{name}' spawned. " f"Switch to it with {switch_key}")
24
26
  except ValueError as e:
25
27
  io.tool_error(f"Error: {e}")
26
28
  except RuntimeError as e:
@@ -891,7 +891,7 @@ class ConversationChunks:
891
891
  block = coder.get_cached_context_block("directory_structure")
892
892
  if block:
893
893
  message_blocks["directory_structure"] = block
894
- if "sub_agents" in coder.allowed_context_blocks and not coder.parent_uuid:
894
+ if "sub_agents" in coder.allowed_context_blocks:
895
895
  block = coder._generate_context_block("sub_agents")
896
896
  if block:
897
897
  message_blocks["sub_agents"] = block