cecli-dev 0.100.5__tar.gz → 0.100.6__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 (676) hide show
  1. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/PKG-INFO +1 -1
  2. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/_version.py +3 -3
  4. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/args.py +4 -1
  5. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/args_formatter.py +10 -0
  6. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/agent_coder.py +30 -27
  7. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/base_coder.py +196 -68
  8. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/core.py +2 -2
  9. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/utils/base_command.py +6 -0
  10. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/utils/helpers.py +1 -1
  11. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/files.py +9 -3
  12. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/integration.py +30 -3
  13. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/coroutines.py +3 -1
  14. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/hashline.py +135 -122
  15. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/hashpos/hashpos.py +6 -8
  16. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/requests.py +25 -0
  17. cecli_dev-0.100.6/cecli/helpers/threading.py +46 -0
  18. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/io.py +3 -1
  19. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/linter.py +2 -1
  20. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mcp/server.py +26 -6
  21. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/agent.yml +21 -21
  22. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/hashline.yml +1 -1
  23. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/subagent.yml +20 -20
  24. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/reasoning_tags.py +19 -2
  25. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/_yield.py +6 -2
  26. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/command.py +18 -6
  27. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/command_interactive.py +28 -8
  28. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/context_manager.py +22 -11
  29. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/delegate.py +2 -2
  30. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/edit_text.py +26 -19
  31. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/explore_code.py +11 -4
  32. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/grep.py +17 -25
  33. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/ls.py +5 -3
  34. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/read_range.py +409 -149
  35. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/thinking.py +1 -1
  36. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/undo_change.py +3 -1
  37. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/update_todo_list.py +22 -10
  38. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/utils/helpers.py +4 -1
  39. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/validations/validations.py +103 -11
  40. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/app.py +2 -1
  41. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/io.py +3 -1
  42. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/agent-mode.md +2 -0
  43. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/skills.md +1 -0
  44. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/PKG-INFO +1 -1
  45. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/SOURCES.txt +2 -0
  46. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_get_lines.py +18 -17
  47. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_grep.py +1 -1
  48. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_insert_block.py +1 -1
  49. cecli_dev-0.100.6/tests/tools/test_read_range_execute.py +550 -0
  50. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/validations.py +206 -0
  51. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.dockerignore +0 -0
  52. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.flake8 +0 -0
  53. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.gitattributes +0 -0
  54. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  55. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/check_pypi_version.yml +0 -0
  56. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/docker-build-test.yml +0 -0
  57. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/docker-release.yml +0 -0
  58. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/issues.yml +0 -0
  59. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/pages.yml +0 -0
  60. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/pre-commit.yml +0 -0
  61. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/release.yml +0 -0
  62. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/ubuntu-tests.yml +0 -0
  63. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/windows-tests.yml +0 -0
  64. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.github/workflows/windows_check_pypi_version.yml +0 -0
  65. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.gitignore +0 -0
  66. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/.pre-commit-config.yaml +0 -0
  67. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/CHANGELOG.md +0 -0
  68. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/CNAME +0 -0
  69. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/CONTRIBUTING.md +0 -0
  70. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/HISTORY.md +0 -0
  71. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/LICENSE.txt +0 -0
  72. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/MANIFEST.in +0 -0
  73. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/README.md +0 -0
  74. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/Dockerfile +0 -0
  75. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/README.md +0 -0
  76. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/__init__.py +0 -0
  77. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/benchmark.py +0 -0
  78. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/benchmark_classic.py +0 -0
  79. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/clone-exercism.sh +0 -0
  80. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/cpp-test.sh +0 -0
  81. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/docker.sh +0 -0
  82. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/docker_build.sh +0 -0
  83. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/install-docker-ubuntu.sh +0 -0
  84. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/npm-test.sh +0 -0
  85. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/over_time.py +0 -0
  86. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/plot.sh +0 -0
  87. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/plots.py +0 -0
  88. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/problem_stats.py +0 -0
  89. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/prompts.py +0 -0
  90. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/refactor_tools.py +0 -0
  91. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/rsync.sh +0 -0
  92. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/rungrid.py +0 -0
  93. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/swe-bench-lite.txt +0 -0
  94. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/swe-bench.txt +0 -0
  95. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/swe_bench.py +0 -0
  96. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/test_benchmark.py +0 -0
  97. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/variations.1.sh +0 -0
  98. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/variations.2.sh +0 -0
  99. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/variations.3.sh +0 -0
  100. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/benchmark/variations.4.sh +0 -0
  101. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/__main__.py +0 -0
  102. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/change_tracker.py +0 -0
  103. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/__init__.py +0 -0
  104. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/architect_coder.py +0 -0
  105. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/ask_coder.py +0 -0
  106. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/chat_chunks.py +0 -0
  107. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/context_coder.py +0 -0
  108. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/copypaste_coder.py +0 -0
  109. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editblock_coder.py +0 -0
  110. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editblock_fenced_coder.py +0 -0
  111. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editblock_func_coder.py +0 -0
  112. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  113. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editor_editblock_coder.py +0 -0
  114. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/editor_whole_coder.py +0 -0
  115. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/hashline_coder.py +0 -0
  116. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/help_coder.py +0 -0
  117. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/patch_coder.py +0 -0
  118. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/search_replace.py +0 -0
  119. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/shell.py +0 -0
  120. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/single_wholefile_func_coder.py +0 -0
  121. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/sub_agent_coder.py +0 -0
  122. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/udiff_coder.py +0 -0
  123. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/udiff_simple.py +0 -0
  124. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/wholefile_coder.py +0 -0
  125. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/coders/wholefile_func_coder.py +0 -0
  126. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/__init__.py +0 -0
  127. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/add.py +0 -0
  128. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/agent.py +0 -0
  129. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/agent_model.py +0 -0
  130. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/architect.py +0 -0
  131. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/ask.py +0 -0
  132. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/chat_mode.py +0 -0
  133. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/clear.py +0 -0
  134. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/code.py +0 -0
  135. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/command_prefix.py +0 -0
  136. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/commit.py +0 -0
  137. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/compact.py +0 -0
  138. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/context.py +0 -0
  139. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/context_blocks.py +0 -0
  140. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/context_management.py +0 -0
  141. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/copy.py +0 -0
  142. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/copy_context.py +0 -0
  143. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/diff.py +0 -0
  144. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/drop.py +0 -0
  145. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/editor.py +0 -0
  146. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/editor_model.py +0 -0
  147. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/exclude_skill.py +0 -0
  148. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/exit.py +0 -0
  149. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/git.py +0 -0
  150. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/hashline.py +0 -0
  151. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/help.py +0 -0
  152. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/history_search.py +0 -0
  153. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/hooks.py +0 -0
  154. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/include_skill.py +0 -0
  155. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/lint.py +0 -0
  156. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/list_sessions.py +0 -0
  157. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/list_skills.py +0 -0
  158. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/load.py +0 -0
  159. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/load_hook.py +0 -0
  160. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/load_mcp.py +0 -0
  161. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/load_session.py +0 -0
  162. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/load_skill.py +0 -0
  163. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/ls.py +0 -0
  164. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/map.py +0 -0
  165. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/map_refresh.py +0 -0
  166. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/merge.py +0 -0
  167. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/model.py +0 -0
  168. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/models.py +0 -0
  169. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/multiline_mode.py +0 -0
  170. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/paste.py +0 -0
  171. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/quit.py +0 -0
  172. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/read_only.py +0 -0
  173. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/read_only_stub.py +0 -0
  174. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/reap_agent.py +0 -0
  175. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/reasoning_effort.py +0 -0
  176. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/remove_hook.py +0 -0
  177. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/remove_mcp.py +0 -0
  178. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/remove_skill.py +0 -0
  179. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/report.py +0 -0
  180. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/reset.py +0 -0
  181. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/rules.py +0 -0
  182. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/run.py +0 -0
  183. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/save.py +0 -0
  184. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/save_session.py +0 -0
  185. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/settings.py +0 -0
  186. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/spawn_agent.py +0 -0
  187. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/switch_agent.py +0 -0
  188. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/terminal_data/linux.keytab +0 -0
  189. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/terminal_setup.py +0 -0
  190. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/test.py +0 -0
  191. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/think_tokens.py +0 -0
  192. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/tokens.py +0 -0
  193. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/undo.py +0 -0
  194. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/utils/__init__.py +0 -0
  195. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/utils/registry.py +0 -0
  196. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/utils/save_load_manager.py +0 -0
  197. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/voice.py +0 -0
  198. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/weak_model.py +0 -0
  199. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/web.py +0 -0
  200. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/commands/workspace.py +0 -0
  201. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/deprecated_args.py +0 -0
  202. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/diffs.py +0 -0
  203. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/dump.py +0 -0
  204. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/editor.py +0 -0
  205. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/exceptions.py +0 -0
  206. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/format_settings.py +0 -0
  207. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/help.py +0 -0
  208. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/help_pats.py +0 -0
  209. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/__init__.py +0 -0
  210. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/agents/__init__.py +0 -0
  211. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/agents/config.py +0 -0
  212. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/agents/service.py +0 -0
  213. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/background_commands.py +0 -0
  214. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/command_parser.py +0 -0
  215. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/__init__.py +0 -0
  216. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/base_message.py +0 -0
  217. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/manager.py +0 -0
  218. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/service.py +0 -0
  219. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/tags.py +0 -0
  220. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/conversation/utils.py +0 -0
  221. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/copypaste.py +0 -0
  222. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/crypto.py +0 -0
  223. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_searcher.py +0 -0
  224. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/__init__.py +0 -0
  225. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/builders.py +0 -0
  226. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/ignore.py +0 -0
  227. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/ngram_index.py +0 -0
  228. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/service.py +0 -0
  229. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/file_system/trie_index.py +0 -0
  230. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/__init__.py +0 -0
  231. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/dump.py +0 -0
  232. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  233. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/main.py +0 -0
  234. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/parsers.py +0 -0
  235. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/grep_ast/tsl.py +0 -0
  236. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/hashpos/__init__.py +0 -0
  237. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  238. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/io_proxy.py +0 -0
  239. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/leak_detect.py +0 -0
  240. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/model_providers.py +0 -0
  241. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/__init__.py +0 -0
  242. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/config.py +0 -0
  243. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/local_workspace.py +0 -0
  244. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/project.py +0 -0
  245. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/workspace.py +0 -0
  246. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/monorepo/worktree.py +0 -0
  247. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/nested.py +0 -0
  248. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/observations/__init__.py +0 -0
  249. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/observations/service.py +0 -0
  250. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/plugin_manager.py +0 -0
  251. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/profiler.py +0 -0
  252. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/responses.py +0 -0
  253. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/similarity.py +0 -0
  254. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/helpers/skills.py +0 -0
  255. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/history.py +0 -0
  256. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/__init__.py +0 -0
  257. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/base.py +0 -0
  258. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/integration.py +0 -0
  259. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/manager.py +0 -0
  260. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/registry.py +0 -0
  261. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/service.py +0 -0
  262. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/hooks/types.py +0 -0
  263. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/interruptible_input.py +0 -0
  264. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/llm.py +0 -0
  265. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/main.py +0 -0
  266. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mcp/__init__.py +0 -0
  267. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mcp/manager.py +0 -0
  268. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mcp/oauth.py +0 -0
  269. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mcp/utils.py +0 -0
  270. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/mdstream.py +0 -0
  271. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/models.py +0 -0
  272. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/onboarding.py +0 -0
  273. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/__init__.py +0 -0
  274. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/architect.yml +0 -0
  275. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/ask.yml +0 -0
  276. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/base.yml +0 -0
  277. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/context.yml +0 -0
  278. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/copypaste.yml +0 -0
  279. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editblock.yml +0 -0
  280. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editblock_fenced.yml +0 -0
  281. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editblock_func.yml +0 -0
  282. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editor_diff_fenced.yml +0 -0
  283. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editor_editblock.yml +0 -0
  284. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/editor_whole.yml +0 -0
  285. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/help.yml +0 -0
  286. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/patch.yml +0 -0
  287. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/single_wholefile_func.yml +0 -0
  288. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/udiff.yml +0 -0
  289. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/udiff_simple.yml +0 -0
  290. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/utils/__init__.py +0 -0
  291. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/utils/registry.py +0 -0
  292. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/utils/system.py +0 -0
  293. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/wholefile.yml +0 -0
  294. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/prompts/wholefile_func.yml +0 -0
  295. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  296. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  297. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  298. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  299. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  300. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  301. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  302. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  303. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  304. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  305. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  306. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  307. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  308. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  309. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  310. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  311. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  312. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  313. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  314. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  315. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  316. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  317. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  318. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  319. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  320. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  321. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  322. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  323. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  324. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  325. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  326. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  327. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/README.md +0 -0
  328. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  329. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  330. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  331. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  332. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  333. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  334. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  335. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  336. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  337. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  338. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  339. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  340. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  341. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  342. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  343. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  344. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  345. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  346. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  347. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  348. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  349. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  350. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  351. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  352. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  353. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  354. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  355. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/repo.py +0 -0
  356. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/repomap.py +0 -0
  357. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/report.py +0 -0
  358. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/resources/__init__.py +0 -0
  359. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/resources/model-metadata.json +0 -0
  360. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/resources/model-settings.yml +0 -0
  361. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/resources/providers.json +0 -0
  362. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/run_cmd.py +0 -0
  363. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/scrape.py +0 -0
  364. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/sendchat.py +0 -0
  365. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/sessions.py +0 -0
  366. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/special.py +0 -0
  367. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/__init__.py +0 -0
  368. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_branch.py +0 -0
  369. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_diff.py +0 -0
  370. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_log.py +0 -0
  371. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_remote.py +0 -0
  372. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_show.py +0 -0
  373. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/git_status.py +0 -0
  374. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/load_skill.py +0 -0
  375. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/remove_skill.py +0 -0
  376. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/utils/base_tool.py +0 -0
  377. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/utils/output.py +0 -0
  378. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/utils/registry.py +0 -0
  379. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tools/validations/__init__.py +0 -0
  380. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/__init__.py +0 -0
  381. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/styles.tcss +0 -0
  382. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/__init__.py +0 -0
  383. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/completion_bar.py +0 -0
  384. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/file_list.py +0 -0
  385. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/footer.py +0 -0
  386. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/input_area.py +0 -0
  387. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/input_container.py +0 -0
  388. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/key_hints.py +0 -0
  389. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/output.py +0 -0
  390. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/status_bar.py +0 -0
  391. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/widgets/subagent_pills.py +0 -0
  392. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/tui/worker.py +0 -0
  393. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/urls.py +0 -0
  394. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/utils.py +0 -0
  395. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/versioncheck.py +0 -0
  396. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/voice.py +0 -0
  397. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/waiting.py +0 -0
  398. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/watch.py +0 -0
  399. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/watch_prompts.py +0 -0
  400. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/Gemfile +0 -0
  401. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/blame.md +0 -0
  402. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/get-started.md +0 -0
  403. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/help-tip.md +0 -0
  404. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/help.md +0 -0
  405. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/install.md +0 -0
  406. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/keys.md +0 -0
  407. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/model-warnings.md +0 -0
  408. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/multi-line.md +0 -0
  409. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/python-m-aider.md +0 -0
  410. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/recording.css +0 -0
  411. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/recording.md +0 -0
  412. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_includes/works-best.md +0 -0
  413. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_features.scss +0 -0
  414. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_footer.scss +0 -0
  415. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_hero.scss +0 -0
  416. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_info.scss +0 -0
  417. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_layout.scss +0 -0
  418. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_reset.scss +0 -0
  419. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_testimonials.scss +0 -0
  420. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_typography.scss +0 -0
  421. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/_variables.scss +0 -0
  422. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/custom/custom.scss +0 -0
  423. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/_sass/global-overrides.scss +0 -0
  424. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/adv-model-settings.md +0 -0
  425. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/aider_conf.md +0 -0
  426. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/api-keys.md +0 -0
  427. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/custom-commands.md +0 -0
  428. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  429. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/dotenv.md +0 -0
  430. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/editor.md +0 -0
  431. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/hooks.md +0 -0
  432. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/mcp.md +0 -0
  433. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/model-aliases.md +0 -0
  434. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/model-configuration.md +0 -0
  435. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/options.md +0 -0
  436. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/reasoning.md +0 -0
  437. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/security.md +0 -0
  438. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/subagents.md +0 -0
  439. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/tui.md +0 -0
  440. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config/workspaces.md +0 -0
  441. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/config.md +0 -0
  442. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/faq.md +0 -0
  443. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/git.md +0 -0
  444. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/index.md +0 -0
  445. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/install/docker.md +0 -0
  446. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/install/optional.md +0 -0
  447. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/install.md +0 -0
  448. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/languages.md +0 -0
  449. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  450. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/legal/privacy.md +0 -0
  451. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/anthropic.md +0 -0
  452. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/azure.md +0 -0
  453. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/bedrock.md +0 -0
  454. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/cohere.md +0 -0
  455. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/deepseek.md +0 -0
  456. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/gemini.md +0 -0
  457. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/github.md +0 -0
  458. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/groq.md +0 -0
  459. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/lm-studio.md +0 -0
  460. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/ollama.md +0 -0
  461. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/openai-compat.md +0 -0
  462. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/openai.md +0 -0
  463. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/openrouter.md +0 -0
  464. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/other.md +0 -0
  465. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/vertex.md +0 -0
  466. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/warnings.md +0 -0
  467. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms/xai.md +0 -0
  468. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/llms.md +0 -0
  469. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/more/analytics.md +0 -0
  470. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/more/edit-formats.md +0 -0
  471. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/more/infinite-output.md +0 -0
  472. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/more-info.md +0 -0
  473. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/repomap.md +0 -0
  474. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/scripting.md +0 -0
  475. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  476. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  477. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/imports.md +0 -0
  478. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  479. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/support.md +0 -0
  480. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  481. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  482. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/troubleshooting.md +0 -0
  483. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/commands.md +0 -0
  484. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/conventions.md +0 -0
  485. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/copypaste.md +0 -0
  486. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/images-urls.md +0 -0
  487. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/lint-test.md +0 -0
  488. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/modes.md +0 -0
  489. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/not-code.md +0 -0
  490. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/notifications.md +0 -0
  491. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/sessions.md +0 -0
  492. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/tips.md +0 -0
  493. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/voice.md +0 -0
  494. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage/watch.md +0 -0
  495. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/docs/usage.md +0 -0
  496. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli/website/share/index.md +0 -0
  497. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/dependency_links.txt +0 -0
  498. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/entry_points.txt +0 -0
  499. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/requires.txt +0 -0
  500. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/cecli_dev.egg-info/top_level.txt +0 -0
  501. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/docker/Dockerfile +0 -0
  502. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  503. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/pyproject.toml +0 -0
  504. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/pytest.ini +0 -0
  505. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/common-constraints.txt +0 -0
  506. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-dev.in +0 -0
  507. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-dev.txt +0 -0
  508. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-help.in +0 -0
  509. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-help.txt +0 -0
  510. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-playwright.in +0 -0
  511. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements-playwright.txt +0 -0
  512. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/requirements.in +0 -0
  513. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements/tree-sitter.in +0 -0
  514. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/requirements.txt +0 -0
  515. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/30k-image.py +0 -0
  516. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/Dockerfile.jekyll +0 -0
  517. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/__init__.py +0 -0
  518. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/blame.py +0 -0
  519. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/clean_metadata.py +0 -0
  520. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/cost_analyzer.py +0 -0
  521. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/cost_calculator.py +0 -0
  522. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/dl_icons.py +0 -0
  523. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/filter-chat-mode.js +0 -0
  524. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/generate_providers.py +0 -0
  525. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/get_contributor_list.js +0 -0
  526. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/get_hashline.py +0 -0
  527. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/history_prompts.py +0 -0
  528. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/homepage.py +0 -0
  529. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/issues.py +0 -0
  530. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/jekyll_build.sh +0 -0
  531. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/jekyll_run.sh +0 -0
  532. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/logo_svg.py +0 -0
  533. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/pip-compile.sh +0 -0
  534. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/recording_audio.py +0 -0
  535. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/redact-cast.py +0 -0
  536. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/rename_to_cecli.py +0 -0
  537. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/tmux_record.sh +0 -0
  538. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/tsl_pack_langs.py +0 -0
  539. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/update-blame.sh +0 -0
  540. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/update-docs.sh +0 -0
  541. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/update-history.py +0 -0
  542. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/versionbump.py +0 -0
  543. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/scripts/yank-old-versions.py +0 -0
  544. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/setup.cfg +0 -0
  545. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/shim.pyproject.toml +0 -0
  546. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/__init__.py +0 -0
  547. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/__init__.py +0 -0
  548. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/conftest.py +0 -0
  549. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_aws_credentials.py +0 -0
  550. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_background_commands.py +0 -0
  551. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_coder.py +0 -0
  552. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_commands.py +0 -0
  553. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_custom_commands.py +0 -0
  554. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_deprecated.py +0 -0
  555. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_editblock.py +0 -0
  556. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_editor.py +0 -0
  557. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_exceptions.py +0 -0
  558. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_find_or_blocks.py +0 -0
  559. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_hashline.py +0 -0
  560. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_history.py +0 -0
  561. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_io.py +0 -0
  562. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_linter.py +0 -0
  563. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_main.py +0 -0
  564. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_model_info_manager.py +0 -0
  565. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_model_provider_manager.py +0 -0
  566. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_models.py +0 -0
  567. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_onboarding.py +0 -0
  568. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_plugin_manager.py +0 -0
  569. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_prompts.py +0 -0
  570. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_reasoning.py +0 -0
  571. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_repo.py +0 -0
  572. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_repomap.py +0 -0
  573. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_run_cmd.py +0 -0
  574. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_sanity_check_repo.py +0 -0
  575. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_scripting.py +0 -0
  576. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_sendchat.py +0 -0
  577. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_session_args.py +0 -0
  578. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_session_crypto.py +0 -0
  579. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_sessions.py +0 -0
  580. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_sessions_manager.py +0 -0
  581. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_skills.py +0 -0
  582. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_special.py +0 -0
  583. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_ssl_verification.py +0 -0
  584. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_udiff.py +0 -0
  585. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_urls.py +0 -0
  586. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_voice.py +0 -0
  587. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_watch.py +0 -0
  588. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/basic/test_wholefile.py +0 -0
  589. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/coders/test_coder_switching.py +0 -0
  590. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/coders/test_copypaste_coder.py +0 -0
  591. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/commands/test_compaction.py +0 -0
  592. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/commands/test_switch_agent.py +0 -0
  593. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/conftest.py +0 -0
  594. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/conversations/test_conversation_integration.py +0 -0
  595. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/conversations/test_conversation_system.py +0 -0
  596. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  597. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/chat-history.md +0 -0
  598. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/arduino/test.ino +0 -0
  599. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/bash/test.sh +0 -0
  600. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/c/test.c +0 -0
  601. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/chatito/test.chatito +0 -0
  602. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/clojure/test.clj +0 -0
  603. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  604. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/cpp/test.cpp +0 -0
  605. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/csharp/test.cs +0 -0
  606. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/d/test.d +0 -0
  607. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/dart/test.dart +0 -0
  608. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/elisp/test.el +0 -0
  609. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/elixir/test.ex +0 -0
  610. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/elm/test.elm +0 -0
  611. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/gleam/test.gleam +0 -0
  612. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/go/test.go +0 -0
  613. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/haskell/test.hs +0 -0
  614. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/hcl/test.tf +0 -0
  615. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/java/test.java +0 -0
  616. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/javascript/test.js +0 -0
  617. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/kotlin/test.kt +0 -0
  618. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/lua/test.lua +0 -0
  619. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/matlab/test.m +0 -0
  620. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/ocaml/test.ml +0 -0
  621. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  622. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/php/test.php +0 -0
  623. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/pony/test.pony +0 -0
  624. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/properties/test.properties +0 -0
  625. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/python/test.py +0 -0
  626. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/ql/test.ql +0 -0
  627. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/r/test.r +0 -0
  628. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/racket/test.rkt +0 -0
  629. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/ruby/test.rb +0 -0
  630. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/rust/test.rs +0 -0
  631. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/scala/test.scala +0 -0
  632. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/solidity/test.sol +0 -0
  633. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/swift/test.swift +0 -0
  634. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/tsx/test.tsx +0 -0
  635. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/typescript/test.ts +0 -0
  636. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/udev/test.rules +0 -0
  637. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/languages/zig/test.zig +0 -0
  638. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/sample-code-base/sample.js +0 -0
  639. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/sample-code-base/sample.py +0 -0
  640. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  641. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/watch.js +0 -0
  642. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/watch.lisp +0 -0
  643. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/watch.py +0 -0
  644. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/fixtures/watch_question.js +0 -0
  645. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/help/test_help.py +0 -0
  646. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  647. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_config.py +0 -0
  648. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_config_active.py +0 -0
  649. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  650. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  651. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  652. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/monorepo/test_workspace.py +0 -0
  653. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/helpers/observations/test_observation_service.py +0 -0
  654. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/hooks/__init__.py +0 -0
  655. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/hooks/test_base.py +0 -0
  656. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/hooks/test_manager.py +0 -0
  657. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/hooks/test_registry.py +0 -0
  658. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/mcp/__init__.py +0 -0
  659. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/mcp/test_manager.py +0 -0
  660. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/scrape/test_playwright_disable.py +0 -0
  661. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/scrape/test_scrape.py +0 -0
  662. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/__init__.py +0 -0
  663. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/conftest.py +0 -0
  664. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_commands.py +0 -0
  665. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_config.py +0 -0
  666. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_delegate.py +0 -0
  667. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_finished.py +0 -0
  668. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_io_proxy.py +0 -0
  669. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_service.py +0 -0
  670. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/subagents/test_sub_agent_coder.py +0 -0
  671. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_extractions.py +0 -0
  672. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_git_branch.py +0 -0
  673. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_git_diff.py +0 -0
  674. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_registry.py +0 -0
  675. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/tests/tools/test_tool_arguments.py +0 -0
  676. {cecli_dev-0.100.5 → cecli_dev-0.100.6}/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.5
3
+ Version: 0.100.6
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
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.100.4.dev"
3
+ __version__ = "0.100.6.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.100.5'
22
- __version_tuple__ = version_tuple = (0, 100, 5)
21
+ __version__ = version = '0.100.6'
22
+ __version_tuple__ = version_tuple = (0, 100, 6)
23
23
 
24
- __commit_id__ = commit_id = 'g525f9aba5'
24
+ __commit_id__ = commit_id = 'gfdc90fcc4'
@@ -276,7 +276,10 @@ def get_parser(default_config_files, git_root):
276
276
  group.add_argument(
277
277
  "--retries",
278
278
  metavar="RETRIES_JSON",
279
- help="Specify LLM retry configuration as a JSON string",
279
+ help=(
280
+ 'Specify LLM retry configuration as a JSON/YAML string (e.g., \'{"retry_on_empty": '
281
+ "true}')"
282
+ ),
280
283
  default=None,
281
284
  )
282
285
 
@@ -132,6 +132,16 @@ class YamlHelpFormatter(argparse.HelpFormatter):
132
132
  break
133
133
  switch = switch.lstrip("-")
134
134
 
135
+ if switch == "retries":
136
+ parts.append(f"## {action.help}")
137
+ parts.append("#retries:")
138
+ parts.append("# retry-timeout: 60")
139
+ parts.append("# retry-backoff-factor: 2.0")
140
+ parts.append("# retry-on-unavailable: true")
141
+ parts.append("# retry-on-empty: false")
142
+ parts.append("")
143
+ return "\n".join(parts)
144
+
135
145
  if isinstance(action, argparse._StoreTrueAction):
136
146
  default = False
137
147
  elif isinstance(action, argparse._StoreConstAction):
@@ -91,6 +91,7 @@ class AgentCoder(Coder):
91
91
  self.allowed_context_blocks = set()
92
92
  self.context_block_tokens = {}
93
93
  self.context_blocks_cache = {}
94
+ self.current_tasks = []
94
95
  self.hot_reload_enabled = False
95
96
  self.tokens_calculated = False
96
97
  self.skip_cli_confirmations = False
@@ -152,6 +153,7 @@ class AgentCoder(Coder):
152
153
  config, "skip_cli_confirmations", nested.getter(config, "yolo", [])
153
154
  )
154
155
  config["command_timeout"] = nested.getter(config, "command_timeout", 30)
156
+ config["allowed_commands"] = nested.getter(config, "allowed_commands", [])
155
157
  config["hot_reload"] = nested.getter(config, "hot_reload", False)
156
158
  config["allow_nested_delegation"] = nested.getter(config, "allow_nested_delegation", False)
157
159
 
@@ -160,7 +162,9 @@ class AgentCoder(Coder):
160
162
  config, ["tools_includelist", "tools_whitelist"], []
161
163
  )
162
164
  config["tools_excludelist"] = nested.getter(
163
- config, ["tools_excludelist", "tools_blacklist"], []
165
+ config,
166
+ ["tools_excludelist", "tools_blacklist"],
167
+ ["gitbranch", "gitdiff", "gitlog", "gitremote", "gitshow", "gitstatus"],
164
168
  )
165
169
 
166
170
  config["servers_includelist"] = nested.getter(
@@ -174,7 +178,7 @@ class AgentCoder(Coder):
174
178
  config,
175
179
  "include_context_blocks",
176
180
  {
177
- "context_summary",
181
+ # "context_summary",
178
182
  # "directory_structure",
179
183
  "environment_info",
180
184
  # "git_status",
@@ -239,20 +243,6 @@ class AgentCoder(Coder):
239
243
  if self.loaded_custom_tools:
240
244
  self.io.tool_output(f"Loaded custom tools: {', '.join(self.loaded_custom_tools)}")
241
245
 
242
- skills = self.skills_manager.find_skills()
243
- if skills:
244
- skills_list = []
245
- for skill in skills:
246
- skills_list.append(skill.name)
247
- joined_skills = ", ".join(skills_list)
248
- self.io.tool_output(f"Available Skills: {joined_skills}")
249
-
250
- registry = AgentService.get_registry()
251
- if registry:
252
- names = sorted(registry.keys())
253
- joined_names = ", ".join(names)
254
- self.io.tool_output(f"Available Subagents: {joined_names}")
255
-
256
246
  def get_local_tool_schemas(self):
257
247
  """Returns the JSON schemas for all local tools using the tool registry."""
258
248
  schemas = []
@@ -625,7 +615,7 @@ class AgentCoder(Coder):
625
615
  percentage = total_tokens / max_input_tokens * 100
626
616
  result += f" ({percentage:.1f}% of limit)"
627
617
  if percentage > 80:
628
- result += "\n\n⚠️ **Context is getting full!**\n"
618
+ result += "\n\n **Context is getting full!**\n"
629
619
  result += "- Remove non-essential files via the `ContextManager` tool.\n"
630
620
  result += "- Keep only essential files in context for best performance"
631
621
  result += "\n</context>"
@@ -822,6 +812,9 @@ class AgentCoder(Coder):
822
812
  "# Fix any linting errors below, if possible and then continue with your task.",
823
813
  1,
824
814
  )
815
+ ConversationService.get_manager(self).remove_message_by_hash_key(
816
+ ("lint_errors", "agent")
817
+ )
825
818
  ConversationService.get_manager(self).add_message(
826
819
  message_dict=dict(role="user", content=lint_errors),
827
820
  tag=MessageTag.CUR,
@@ -1115,7 +1108,7 @@ class AgentCoder(Coder):
1115
1108
  context_parts.append("## File Editing Tools Disabled")
1116
1109
  context_parts.append(
1117
1110
  "File editing tools are currently disabled. Use `ReadRange` to determine the"
1118
- " current content hash prefixes needed to perform an edit and activate them when"
1111
+ " current content ID prefixes needed to perform an edit and activate them when"
1119
1112
  " you are ready to edit a file."
1120
1113
  )
1121
1114
 
@@ -1279,16 +1272,20 @@ class AgentCoder(Coder):
1279
1272
  abs_path = self.abs_root_path(file_path)
1280
1273
  rel_path = self.get_rel_fname(abs_path)
1281
1274
  if not os.path.isfile(abs_path):
1282
- self.io.tool_output(f"⚠️ File '{file_path}' not found")
1275
+ self.io.tool_output(f" File '{file_path}' not found", type="tool-result")
1283
1276
  return "File not found"
1284
1277
  if abs_path in self.abs_fnames:
1285
1278
  if explicit:
1286
- self.io.tool_output(f"📎 File '{file_path}' already in context as editable")
1279
+ self.io.tool_output(
1280
+ f"🗀 File '{file_path}' already in context as editable", type="tool-result"
1281
+ )
1287
1282
  return "File already in context as editable"
1288
1283
  return "File already in context as editable"
1289
1284
  if abs_path in self.abs_read_only_fnames:
1290
1285
  if explicit:
1291
- self.io.tool_output(f"📎 File '{file_path}' already in context as read-only")
1286
+ self.io.tool_output(
1287
+ f"🗀 File '{file_path}' already in context as read-only", type="tool-result"
1288
+ )
1292
1289
  return "File already in context as read-only"
1293
1290
  return "File already in context as read-only"
1294
1291
  try:
@@ -1299,13 +1296,18 @@ class AgentCoder(Coder):
1299
1296
  file_tokens = self.get_active_model().token_count(content)
1300
1297
  if file_tokens > self.large_file_token_threshold:
1301
1298
  self.io.tool_output(
1302
- f"⚠️ '{file_path}' is very large ({file_tokens} tokens). Use"
1303
- " /context-management to toggle truncation off if needed."
1299
+ (
1300
+ f" '{file_path}' is very large ({file_tokens} tokens). Use"
1301
+ " /context-management to toggle truncation off if needed."
1302
+ ),
1303
+ type="tool-result",
1304
1304
  )
1305
1305
  self.abs_read_only_fnames.add(abs_path)
1306
1306
  self.files_added_in_exploration.add(rel_path)
1307
1307
  if explicit:
1308
- self.io.tool_output(f"📎 Viewed '{file_path}' (added to context as read-only)")
1308
+ self.io.tool_output(
1309
+ f"🗀 Viewed '{file_path}' (added to context as read-only)", type="tool-result"
1310
+ )
1309
1311
  return "Viewed file (added to context as read-only)"
1310
1312
  else:
1311
1313
  return "Added file to context as read-only"
@@ -1432,10 +1434,11 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
1432
1434
  content = self.io.read_text(abs_path)
1433
1435
  if content is None or not content.strip():
1434
1436
  return None
1437
+
1438
+ current_tasks = "\n".join(self.current_tasks)
1435
1439
  result = '<context name="todo_list" from="agent">\n'
1436
- result += "## Current Todo List\n\n"
1437
- result += "Below is the current todo list managed via the `UpdateTodoList` tool:\n\n"
1438
- result += f"```\n{content}\n```\n"
1440
+ result += "## Current Active Tasks\n\n"
1441
+ result += f"```{current_tasks}```\n"
1439
1442
  result += "</context>"
1440
1443
  return result
1441
1444
  except Exception as e:
@@ -46,6 +46,7 @@ from cecli.helpers.file_system import FileSystemService
46
46
  from cecli.helpers.io_proxy import IOProxy
47
47
  from cecli.helpers.observations.service import ObservationService
48
48
  from cecli.helpers.profiler import TokenProfiler
49
+ from cecli.helpers.threading import ThreadSafeEvent
49
50
  from cecli.history import ChatSummary
50
51
  from cecli.hooks import HookIntegration
51
52
  from cecli.io import ConfirmGroup, InputOutput
@@ -91,6 +92,10 @@ class FinishReasonLength(Exception):
91
92
  pass
92
93
 
93
94
 
95
+ class EmptyResponseError(Exception):
96
+ pass
97
+
98
+
94
99
  def wrap_fence(name):
95
100
  return f"<{name}>", f"</{name}>"
96
101
 
@@ -420,8 +425,9 @@ class Coder(metaclass=UsageMeta):
420
425
  # Each contains "included" and "excluded" sets that filter from the global singletons
421
426
  self.registered_tools = {"included": set(), "excluded": set()}
422
427
  self.registered_servers = {"included": set(), "excluded": set()}
423
- self.interrupt_event = asyncio.Event()
428
+ self.interrupt_event = ThreadSafeEvent()
424
429
  self.uuid = str(generate_unique_id())
430
+ self.reflected_message = None
425
431
 
426
432
  if uuid:
427
433
  self.uuid = str(uuid)
@@ -773,91 +779,118 @@ class Coder(metaclass=UsageMeta):
773
779
  """Get CUR messages from ConversationManager."""
774
780
  return ConversationService.get_manager(self).get_messages_dict(MessageTag.CUR)
775
781
 
782
+ @staticmethod
783
+ def _strip_provider(model_name: str) -> str:
784
+ """Remove provider prefix from model name (e.g., 'openai/gpt-4' -> 'gpt-4')."""
785
+ if "/" in model_name:
786
+ return model_name.split("/", 1)[1]
787
+ return model_name
788
+
776
789
  def get_announcements(self):
777
- lines = []
778
- lines.append(f"cecli v{__version__}")
790
+ sections = {}
779
791
 
780
- # Model
792
+ # --- MODELS ---
781
793
  main_model = self.main_model
782
- weak_model = main_model.weak_model
794
+
795
+ models_items = [f"{self._strip_provider(main_model.name)} (main)"]
783
796
  agent_model = main_model.agent_model
797
+ weak_model = main_model.weak_model
784
798
 
785
- if weak_model is not main_model:
786
- prefix = "Main model"
787
- else:
788
- prefix = "Model"
799
+ if agent_model and agent_model.name != main_model.name:
800
+ models_items.append(f"{self._strip_provider(agent_model.name)} (agent)")
801
+
802
+ if weak_model and weak_model.name != main_model.name:
803
+ models_items.append(f"{self._strip_provider(weak_model.name)} (weak)")
804
+ if self.edit_format == "architect":
805
+ models_items.append(f"{self._strip_provider(main_model.editor_model.name)} (editor)")
789
806
 
790
- output = f"{prefix}: {main_model.name} with {self.edit_format} edit format"
807
+ sections["Models"] = {"items": models_items}
791
808
 
792
- # Check for thinking token budget
809
+ # --- SETTINGS ---
810
+ settings_items = []
811
+
812
+ # Edit format
813
+ settings_items.append(f"{self.edit_format} (edit format)")
814
+
815
+ # Thinking tokens
793
816
  thinking_tokens = main_model.get_thinking_tokens()
794
817
  if thinking_tokens:
795
- output += f", {thinking_tokens} think tokens"
818
+ settings_items.append(f"{thinking_tokens} think tokens")
796
819
 
797
- # Check for reasoning effort
820
+ # Reasoning effort
798
821
  reasoning_effort = main_model.get_reasoning_effort()
799
822
  if reasoning_effort:
800
- output += f", reasoning {reasoning_effort}"
823
+ settings_items.append(f"reasoning {reasoning_effort}")
801
824
 
825
+ # Prompt cache
802
826
  if self.add_cache_headers or main_model.caches_by_default:
803
- output += ", prompt cache"
804
- if main_model.info.get("supports_assistant_prefill"):
805
- output += ", infinite output"
806
- if self.copy_paste_mode:
807
- output += ", copy/paste mode"
827
+ settings_items.append("prompt cache")
808
828
 
809
- lines.append(output)
829
+ # Infinite output
830
+ if main_model.info.get("supports_assistant_prefill"):
831
+ settings_items.append("infinite output")
810
832
 
811
- if self.edit_format == "architect":
812
- output = (
813
- f"Editor model: {main_model.editor_model.name} with"
814
- f" {main_model.editor_edit_format} edit format"
815
- )
816
- lines.append(output)
833
+ # Copy/paste mode
834
+ if self.copy_paste_mode:
835
+ settings_items.append("copy/paste mode")
817
836
 
818
- if weak_model is not main_model:
819
- output = f"Weak model: {weak_model.name}"
820
- lines.append(output)
837
+ if settings_items:
838
+ sections["Settings"] = {"items": settings_items}
821
839
 
822
- if agent_model is not main_model:
823
- output = f"Agent model: {agent_model.name}"
824
- lines.append(output)
840
+ # --- ENVIRONMENT ---
841
+ env_items = []
842
+ repo_map_tokens = None # Track for later warning check
825
843
 
826
- # Repo
827
844
  if self.repo:
828
845
  rel_repo_dir = self.repo.get_rel_repo_dir()
829
846
  num_files = len(self.repo.get_tracked_files())
830
-
831
- lines.append(f"Git repo: {rel_repo_dir} with {num_files:,} files")
847
+ env_items.append(f"{rel_repo_dir} ({num_files:,} files)")
832
848
  if num_files > 1000:
833
- lines.append(
849
+ env_items.append(
834
850
  "Warning: For large repos, consider using --subtree-only and .cecli_ignore"
835
851
  )
836
- lines.append(f"See: {urls.large_repos}")
852
+ env_items.append(f"See: {urls.large_repos}")
837
853
  else:
838
- lines.append("Git repo: none")
854
+ env_items.append("no git repo")
839
855
 
840
- # Repo-map
841
856
  if self.repo_map:
842
857
  map_tokens = self.repo_map.max_map_tokens
843
858
  if map_tokens > 0:
844
859
  refresh = self.repo_map.refresh
845
- lines.append(f"Repo-map: using {map_tokens} tokens, {refresh} refresh")
846
- max_map_tokens = self.get_active_model().get_repo_map_tokens() * 2
847
- if map_tokens > max_map_tokens:
848
- lines.append(
849
- f"Warning: map-tokens > {max_map_tokens} is not recommended. Too much"
850
- " irrelevant code can confuse LLMs."
851
- )
860
+ env_items.append(f"map ({map_tokens} tokens, {refresh} refresh)")
861
+ repo_map_tokens = map_tokens
852
862
  else:
853
- lines.append("Repo-map: disabled because map_tokens == 0")
863
+ env_items.append("repo-map disabled")
854
864
  else:
855
- lines.append("Repo-map: disabled")
865
+ env_items.append("repo-map disabled")
856
866
 
867
+ sections["Environment"] = {"items": env_items}
868
+ # --- CAPABILITIES ---
869
+ capabilities = {}
870
+
871
+ # Sub-agents
872
+ try:
873
+ from cecli.helpers.agents.service import AgentService
874
+
875
+ registry = AgentService.get_registry()
876
+ if registry:
877
+ capabilities["Subagents"] = sorted(registry.keys())
878
+ except Exception:
879
+ pass
880
+
881
+ # Skills
882
+ if hasattr(self, "skills_manager") and self.skills_manager:
883
+ try:
884
+ skills = self.skills_manager.find_skills()
885
+ if skills:
886
+ capabilities["Skills"] = [s.name for s in skills]
887
+ except Exception:
888
+ pass
889
+
890
+ # MCP Servers
857
891
  if self.mcp_tools:
858
892
  mcp_servers = []
859
893
  for server_name, server_tools in self.mcp_tools:
860
- # Filter servers per instance configuration
861
894
  if (
862
895
  self.registered_servers["included"]
863
896
  and server_name not in self.registered_servers["included"]
@@ -866,17 +899,49 @@ class Coder(metaclass=UsageMeta):
866
899
  if server_name in self.registered_servers["excluded"]:
867
900
  continue
868
901
  mcp_servers.append(server_name)
869
-
870
902
  if mcp_servers:
871
- lines.append(f"MCP servers configured: {', '.join(mcp_servers)}")
903
+ capabilities["Servers"] = mcp_servers
904
+
905
+ if capabilities:
906
+ # sections["Extensions"] = {"subsections": capabilities}
907
+ sections["Environment"]["subsections"] = capabilities
872
908
 
909
+ # --- RENDER ---
910
+ lines = []
911
+
912
+ # Version line (CLI only; TUI has its own banner)
913
+ if not self.args.tui:
914
+ lines.append(f"cecli v{__version__}")
915
+
916
+ for name, section in sections.items():
917
+ if "items" in section:
918
+ lines.append(f"{name:15s}" + " • ".join(section["items"]))
919
+ if "subsections" in section:
920
+ last_key = next(reversed(section["subsections"]))
921
+ # lines.append(name)
922
+ for sub_name, sub_items in section["subsections"].items():
923
+ connector = "└─" if sub_name == last_key else "├─"
924
+ lines.append(f" {connector} {sub_name:10} {' • '.join(sub_items)}")
925
+
926
+ # Repo-map max_tokens warning
927
+ if repo_map_tokens is not None:
928
+ max_map_tokens = self.get_active_model().get_repo_map_tokens() * 2
929
+ if repo_map_tokens > max_map_tokens:
930
+ lines.append(
931
+ f"Warning: map-tokens > {max_map_tokens} is not recommended. Too much"
932
+ " irrelevant code can confuse LLMs."
933
+ )
934
+
935
+ # Read-only stubs
873
936
  for fname in self.abs_read_only_stubs_fnames:
874
937
  rel_fname = self.get_rel_fname(fname)
875
938
  lines.append(f"Added {rel_fname} to the chat (read-only stub).")
876
939
 
940
+ # Restored conversation
877
941
  if ConversationService.get_manager(self).get_messages_dict(MessageTag.DONE):
878
942
  lines.append("Restored previous conversation history.")
879
943
 
944
+ # Multiline mode
880
945
  if self.io.multiline_mode and not self.args.tui:
881
946
  lines.append("Multiline mode: Enabled. Enter inserts newline, Alt-Enter submits text")
882
947
 
@@ -1043,7 +1108,7 @@ class Coder(metaclass=UsageMeta):
1043
1108
 
1044
1109
  # Add message about showing definitions instead of full content
1045
1110
  # self.io.tool_output(
1046
- # f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
1111
+ # f" '{relative_fname}' is very large ({file_tokens} tokens). "
1047
1112
  # "Use /context-management to toggle truncation off if needed."
1048
1113
  # )
1049
1114
 
@@ -1111,7 +1176,7 @@ class Coder(metaclass=UsageMeta):
1111
1176
 
1112
1177
  # Add message about showing definitions instead of full content
1113
1178
  # self.io.tool_output(
1114
- # f"⚠️ '{relative_fname}' is very large ({file_tokens} tokens). "
1179
+ # f" '{relative_fname}' is very large ({file_tokens} tokens). "
1115
1180
  # "Use /context-management to toggle truncation off if needed."
1116
1181
  # )
1117
1182
 
@@ -1643,6 +1708,7 @@ class Coder(metaclass=UsageMeta):
1643
1708
 
1644
1709
  async def generate(self, user_message, preproc):
1645
1710
  await asyncio.sleep(0.1)
1711
+ self.interrupt_event.clear()
1646
1712
 
1647
1713
  try:
1648
1714
  if self.enable_context_compaction:
@@ -2402,6 +2468,39 @@ class Coder(metaclass=UsageMeta):
2402
2468
  async for chunk in self.send(messages, tools=self.get_tool_list()):
2403
2469
  yield chunk
2404
2470
  break
2471
+ except EmptyResponseError:
2472
+ self.io.tool_warning(self.empty_llm_tool_warning())
2473
+
2474
+ retry_on_empty = False
2475
+ retries_config = self.get_active_model().retries
2476
+ if isinstance(retries_config, str):
2477
+ try:
2478
+ retries_config = json.loads(retries_config)
2479
+ except json.JSONDecodeError:
2480
+ self.io.tool_warning(
2481
+ f"Could not parse retries config: {retries_config}"
2482
+ )
2483
+ retries_config = {}
2484
+ if isinstance(retries_config, dict):
2485
+ retry_on_empty = retries_config.get("retry_on_empty", False)
2486
+
2487
+ if not retry_on_empty:
2488
+ break
2489
+
2490
+ retry_delay *= 2
2491
+ if retry_delay > RETRY_TIMEOUT:
2492
+ self.io.tool_error("Retry timeout exceeded on empty response.")
2493
+ break
2494
+
2495
+ self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
2496
+
2497
+ _res, interrupted_sleep = await coroutines.interruptible(
2498
+ asyncio.sleep(retry_delay), self.interrupt_event
2499
+ )
2500
+ if interrupted_sleep:
2501
+ interrupted = True
2502
+ break
2503
+ continue
2405
2504
  except litellm_ex.exceptions_tuple() as err:
2406
2505
  ex_info = litellm_ex.get_ex_info(err)
2407
2506
 
@@ -2462,7 +2561,9 @@ class Coder(metaclass=UsageMeta):
2462
2561
  return
2463
2562
  finally:
2464
2563
  if self.mdstream:
2465
- content_to_show = self.live_incremental_response(True)
2564
+ content_to_show = (
2565
+ "" if self.tui and self.tui() else self.live_incremental_response(True)
2566
+ )
2466
2567
  self.stream_wrapper(content_to_show, final=True)
2467
2568
  self.mdstream = None
2468
2569
 
@@ -3252,6 +3353,7 @@ class Coder(metaclass=UsageMeta):
3252
3353
  self.interrupt_event.clear()
3253
3354
  self.got_reasoning_content = False
3254
3355
  self.ended_reasoning_content = False
3356
+ self.empty_response = False
3255
3357
 
3256
3358
  self._streaming_buffer_length = 0
3257
3359
  self.io.reset_streaming_response()
@@ -3302,6 +3404,9 @@ class Coder(metaclass=UsageMeta):
3302
3404
  else:
3303
3405
  await self.show_send_output(completion)
3304
3406
 
3407
+ if self.empty_response:
3408
+ raise EmptyResponseError
3409
+
3305
3410
  response, func_err, content_err = self.consolidate_chunks()
3306
3411
 
3307
3412
  if response:
@@ -3382,7 +3487,8 @@ class Coder(metaclass=UsageMeta):
3382
3487
  and not len(self.partial_response_tool_calls)
3383
3488
  and not len(self.partial_response_reasoning_content)
3384
3489
  ):
3385
- self.io.tool_warning(self.empty_llm_tool_warning())
3490
+ self.empty_response = True
3491
+ return
3386
3492
 
3387
3493
  self.io.assistant_output(show_resp, pretty=self.show_pretty())
3388
3494
 
@@ -3480,24 +3586,13 @@ class Coder(metaclass=UsageMeta):
3480
3586
  except AttributeError:
3481
3587
  reasoning_content = None
3482
3588
 
3483
- if reasoning_content:
3484
- if nested.getter(self.args, "show_thinking"):
3485
- if not self.got_reasoning_content:
3486
- text += f"<{REASONING_TAG}>\n\n"
3487
- text += reasoning_content
3488
- self.got_reasoning_content = True
3489
- received_content = True
3490
- self.token_profiler.on_token()
3491
- self.io.update_spinner_suffix(reasoning_content)
3492
- self.partial_response_reasoning_content += reasoning_content
3493
-
3494
3589
  try:
3495
3590
  content = chunk.choices[0].delta.content
3496
3591
  if content:
3497
3592
  if self.got_reasoning_content and not self.ended_reasoning_content:
3498
3593
  text += f"\n\n</{self.reasoning_tag_name}>\n\n"
3499
- self.ended_reasoning_content = True
3500
3594
 
3595
+ self.ended_reasoning_content = True
3501
3596
  text += content
3502
3597
  received_content = True
3503
3598
  self.token_profiler.on_token()
@@ -3505,6 +3600,22 @@ class Coder(metaclass=UsageMeta):
3505
3600
  except AttributeError:
3506
3601
  pass
3507
3602
 
3603
+ if reasoning_content:
3604
+ if (
3605
+ nested.getter(self.args, "show_thinking")
3606
+ and not self.ended_reasoning_content
3607
+ ):
3608
+ if not self.got_reasoning_content:
3609
+ text += f"<{REASONING_TAG}>\n\n"
3610
+
3611
+ text += reasoning_content
3612
+ self.got_reasoning_content = True
3613
+ received_content = True
3614
+
3615
+ self.token_profiler.on_token()
3616
+ self.io.update_spinner_suffix(reasoning_content)
3617
+ self.partial_response_reasoning_content += reasoning_content
3618
+
3508
3619
  self.partial_response_content += text
3509
3620
 
3510
3621
  chunk_index += 1
@@ -3531,6 +3642,16 @@ class Coder(metaclass=UsageMeta):
3531
3642
  except (asyncio.CancelledError, KeyboardInterrupt):
3532
3643
  raise KeyboardInterrupt
3533
3644
 
3645
+ if (
3646
+ self.show_pretty()
3647
+ and nested.getter(self.args, "show_thinking")
3648
+ and self.got_reasoning_content
3649
+ and not self.ended_reasoning_content
3650
+ ):
3651
+ self.partial_response_content += f"\n\n</{self.reasoning_tag_name}>\n\n"
3652
+ content_to_show = self.live_incremental_response(False)
3653
+ self.stream_wrapper(content_to_show, final=False)
3654
+
3534
3655
  # The Part Doing the Heavy Lifting Now
3535
3656
  self.consolidate_chunks()
3536
3657
 
@@ -3539,7 +3660,8 @@ class Coder(metaclass=UsageMeta):
3539
3660
  return
3540
3661
 
3541
3662
  if not received_content and len(self.partial_response_tool_calls) == 0:
3542
- self.io.tool_warning(self.empty_llm_tool_warning())
3663
+ self.empty_response = True
3664
+ return
3543
3665
 
3544
3666
  def consolidate_chunks(self):
3545
3667
  if self.partial_response_consolidated:
@@ -3553,6 +3675,11 @@ class Coder(metaclass=UsageMeta):
3553
3675
  func_err = None
3554
3676
  content_err = None
3555
3677
 
3678
+ last_chunk = self.partial_response_chunks[len(self.partial_response_chunks) - 1]
3679
+ if last_chunk:
3680
+ if getattr(last_chunk, "usage", None):
3681
+ response.usage = last_chunk.usage
3682
+
3556
3683
  # Collect provider-specific fields from chunks to preserve them
3557
3684
  # We need to track both by ID (primary) and index (fallback) since
3558
3685
  # early chunks might not have IDs established yet
@@ -3744,6 +3871,7 @@ class Coder(metaclass=UsageMeta):
3744
3871
  cache_hit_tokens = (
3745
3872
  getattr(completion.usage, "prompt_cache_hit_tokens", 0)
3746
3873
  or getattr(completion.usage, "cache_read_input_tokens", 0)
3874
+ or nested.getter(completion.usage, "prompt_tokens_details.cached_tokens", 0)
3747
3875
  or 0
3748
3876
  )
3749
3877
  cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0) or 0
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  import json
3
2
  import re
4
3
  import sys
@@ -7,6 +6,7 @@ from pathlib import Path
7
6
  from cecli.commands.utils.registry import CommandRegistry
8
7
  from cecli.helpers import nested, plugin_manager
9
8
  from cecli.helpers.file_searcher import handle_core_files
9
+ from cecli.helpers.threading import ThreadSafeEvent
10
10
  from cecli.repo import ANY_GIT_ERROR
11
11
 
12
12
 
@@ -94,7 +94,7 @@ class Commands:
94
94
  self.custom_commands = nested.getter(customizations, "command-paths", [])
95
95
  self._load_custom_commands(self.custom_commands)
96
96
 
97
- self.cmd_running_event = asyncio.Event()
97
+ self.cmd_running_event = ThreadSafeEvent()
98
98
  self.cmd_running_event.set()
99
99
  self.last_command_show_notification = True
100
100