cecli-dev 1.5.1__tar.gz → 1.6.0__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 (865) hide show
  1. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/PKG-INFO +1 -1
  2. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/_version.py +3 -3
  3. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/agent_coder.py +63 -15
  4. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/base_coder.py +9 -2
  5. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_sessions.py +1 -1
  6. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_session.py +6 -3
  7. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/save_session.py +6 -2
  8. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/tokens.py +151 -43
  9. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/background_commands.py +123 -4
  10. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/integration.py +73 -7
  11. cecli_dev-1.6.0/cecli/helpers/coroutines.py +184 -0
  12. cecli_dev-1.6.0/cecli/helpers/lock_detect.py +137 -0
  13. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/agent.py +9 -2
  14. cecli_dev-1.6.0/cecli/helpers/sessions/__init__.py +20 -0
  15. cecli_dev-1.6.0/cecli/helpers/sessions/layout.py +112 -0
  16. cecli_dev-1.6.0/cecli/helpers/sessions/manager.py +325 -0
  17. cecli_dev-1.6.0/cecli/helpers/sessions/payload.py +287 -0
  18. cecli_dev-1.6.0/cecli/helpers/sessions/storage.py +245 -0
  19. cecli_dev-1.6.0/cecli/helpers/sessions/subagents.py +152 -0
  20. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/main.py +1 -1
  21. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/manager.py +83 -32
  22. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/oauth.py +74 -18
  23. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/server.py +54 -8
  24. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/models.py +6 -4
  25. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/repo.py +48 -13
  26. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/command.py +195 -41
  27. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/app.py +41 -0
  28. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/input_area.py +5 -0
  29. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/worker.py +210 -19
  30. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/mcp.md +31 -0
  31. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/tui.md +6 -2
  32. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/PKG-INFO +1 -1
  33. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/SOURCES.txt +7 -1
  34. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/scm_file_list.json +7 -1
  35. cecli_dev-1.6.0/cecli_dev.egg-info/scm_version.json +8 -0
  36. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_background_commands.py +167 -0
  37. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_commands.py +119 -0
  38. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_models.py +12 -0
  39. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sessions.py +1 -1
  40. cecli_dev-1.6.0/tests/basic/test_sessions_manager.py +473 -0
  41. cecli_dev-1.6.0/tests/conversations/test_background_command_injection.py +170 -0
  42. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_model_config.py +17 -0
  43. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_manager_retry.py +46 -4
  44. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_command_timeout_paging.py +46 -58
  45. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_resource_manager_paging.py +17 -7
  46. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tui/test_app.py +86 -0
  47. cecli_dev-1.5.1/cecli/helpers/coroutines.py +0 -111
  48. cecli_dev-1.5.1/cecli/helpers/lock_detect.py +0 -61
  49. cecli_dev-1.5.1/cecli/sessions.py +0 -505
  50. cecli_dev-1.5.1/cecli_dev.egg-info/scm_version.json +0 -8
  51. cecli_dev-1.5.1/tests/basic/test_sessions_manager.py +0 -219
  52. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.dockerignore +0 -0
  53. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.flake8 +0 -0
  54. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.gitattributes +0 -0
  55. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  56. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/check_pypi_version.yml +0 -0
  57. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/docker-build-test.yml +0 -0
  58. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/docker-release.yml +0 -0
  59. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/issues.yml +0 -0
  60. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/pages.yml +0 -0
  61. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/pre-commit.yml +0 -0
  62. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/release.yml +0 -0
  63. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/ubuntu-tests.yml +0 -0
  64. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/windows-tests.yml +0 -0
  65. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/windows_check_pypi_version.yml +0 -0
  66. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.gitignore +0 -0
  67. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.pre-commit-config.yaml +0 -0
  68. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CHANGELOG.md +0 -0
  69. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CNAME +0 -0
  70. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CONTRIBUTING.md +0 -0
  71. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/HISTORY.md +0 -0
  72. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/LICENSE.txt +0 -0
  73. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/MANIFEST.in +0 -0
  74. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/README.md +0 -0
  75. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/Dockerfile +0 -0
  76. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/README.md +0 -0
  77. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/__init__.py +0 -0
  78. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/benchmark.py +0 -0
  79. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/benchmark_classic.py +0 -0
  80. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/clone-exercism.sh +0 -0
  81. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/cpp-test.sh +0 -0
  82. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/docker.sh +0 -0
  83. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/docker_build.sh +0 -0
  84. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/install-docker-ubuntu.sh +0 -0
  85. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/npm-test.sh +0 -0
  86. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/over_time.py +0 -0
  87. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/plot.sh +0 -0
  88. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/plots.py +0 -0
  89. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/problem_stats.py +0 -0
  90. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/prompts.py +0 -0
  91. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/refactor_tools.py +0 -0
  92. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/rsync.sh +0 -0
  93. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/rungrid.py +0 -0
  94. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe-bench-lite.txt +0 -0
  95. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe-bench.txt +0 -0
  96. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe_bench.py +0 -0
  97. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/test_benchmark.py +0 -0
  98. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.1.sh +0 -0
  99. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.2.sh +0 -0
  100. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.3.sh +0 -0
  101. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.4.sh +0 -0
  102. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/__init__.py +0 -0
  103. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/__main__.py +0 -0
  104. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/args.py +0 -0
  105. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/args_formatter.py +0 -0
  106. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/change_tracker.py +0 -0
  107. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/__init__.py +0 -0
  108. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/architect_coder.py +0 -0
  109. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/ask_coder.py +0 -0
  110. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/chat_chunks.py +0 -0
  111. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/context_coder.py +0 -0
  112. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/copypaste_coder.py +0 -0
  113. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_coder.py +0 -0
  114. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_fenced_coder.py +0 -0
  115. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_func_coder.py +0 -0
  116. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  117. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_editblock_coder.py +0 -0
  118. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_whole_coder.py +0 -0
  119. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/hashline_coder.py +0 -0
  120. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/help_coder.py +0 -0
  121. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/patch_coder.py +0 -0
  122. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/search_replace.py +0 -0
  123. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/shell.py +0 -0
  124. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/single_wholefile_func_coder.py +0 -0
  125. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/sub_agent_coder.py +0 -0
  126. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/udiff_coder.py +0 -0
  127. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/udiff_simple.py +0 -0
  128. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/wholefile_coder.py +0 -0
  129. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/wholefile_func_coder.py +0 -0
  130. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/__init__.py +0 -0
  131. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/add.py +0 -0
  132. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent.py +0 -0
  133. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent_model.py +0 -0
  134. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent_tree.py +0 -0
  135. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/architect.py +0 -0
  136. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/ask.py +0 -0
  137. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/auto_memory.py +0 -0
  138. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/chat_mode.py +0 -0
  139. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/clear.py +0 -0
  140. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/code.py +0 -0
  141. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/command_prefix.py +0 -0
  142. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/commit.py +0 -0
  143. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/compact.py +0 -0
  144. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context.py +0 -0
  145. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context_blocks.py +0 -0
  146. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context_management.py +0 -0
  147. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/copy.py +0 -0
  148. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/copy_context.py +0 -0
  149. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/core.py +0 -0
  150. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/diff.py +0 -0
  151. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/drop.py +0 -0
  152. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/editor.py +0 -0
  153. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/editor_model.py +0 -0
  154. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/exclude_skill.py +0 -0
  155. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/exit.py +0 -0
  156. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/git.py +0 -0
  157. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hashline.py +0 -0
  158. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/help.py +0 -0
  159. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/history_search.py +0 -0
  160. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hooks.py +0 -0
  161. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hot_reload.py +0 -0
  162. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/import_skill.py +0 -0
  163. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/include_skill.py +0 -0
  164. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/insert_queue.py +0 -0
  165. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/lint.py +0 -0
  166. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_mcp.py +0 -0
  167. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_queue.py +0 -0
  168. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_skills.py +0 -0
  169. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load.py +0 -0
  170. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_hook.py +0 -0
  171. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_mcp.py +0 -0
  172. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_skill.py +0 -0
  173. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/ls.py +0 -0
  174. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/map.py +0 -0
  175. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/map_refresh.py +0 -0
  176. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/merge.py +0 -0
  177. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/model.py +0 -0
  178. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/models.py +0 -0
  179. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/multiline_mode.py +0 -0
  180. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/paste.py +0 -0
  181. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/queue.py +0 -0
  182. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/quit.py +0 -0
  183. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/read_only.py +0 -0
  184. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/read_only_stub.py +0 -0
  185. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reap_agent.py +0 -0
  186. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reasoning_effort.py +0 -0
  187. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_hook.py +0 -0
  188. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_mcp.py +0 -0
  189. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_memory.py +0 -0
  190. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_queue.py +0 -0
  191. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_skill.py +0 -0
  192. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/report.py +0 -0
  193. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reset.py +0 -0
  194. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/rules.py +0 -0
  195. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/run.py +0 -0
  196. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/save.py +0 -0
  197. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/search_memory.py +0 -0
  198. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/settings.py +0 -0
  199. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/spawn_agent.py +0 -0
  200. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/switch_agent.py +0 -0
  201. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/terminal_data/linux.keytab +0 -0
  202. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/terminal_setup.py +0 -0
  203. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/test.py +0 -0
  204. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/think_tokens.py +0 -0
  205. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/undo.py +0 -0
  206. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/__init__.py +0 -0
  207. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/base_command.py +0 -0
  208. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/helpers.py +0 -0
  209. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/registry.py +0 -0
  210. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/save_load_manager.py +0 -0
  211. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/voice.py +0 -0
  212. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/weak_model.py +0 -0
  213. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/web.py +0 -0
  214. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/workspace.py +0 -0
  215. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/decoding.py +0 -0
  216. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/deprecated_args.py +0 -0
  217. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/diffs.py +0 -0
  218. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/dump.py +0 -0
  219. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/editor.py +0 -0
  220. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/exceptions.py +0 -0
  221. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/format_settings.py +0 -0
  222. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/help.py +0 -0
  223. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/help_pats.py +0 -0
  224. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/__init__.py +0 -0
  225. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/__init__.py +0 -0
  226. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/config.py +0 -0
  227. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/__init__.py +0 -0
  228. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/memorizer.md +0 -0
  229. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/worker.md +0 -0
  230. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/service.py +0 -0
  231. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/command_parser.py +0 -0
  232. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/command_queue.py +0 -0
  233. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/config_utils.py +0 -0
  234. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/__init__.py +0 -0
  235. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/base_message.py +0 -0
  236. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/files.py +0 -0
  237. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/manager.py +0 -0
  238. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/service.py +0 -0
  239. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/tags.py +0 -0
  240. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/utils.py +0 -0
  241. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/copypaste.py +0 -0
  242. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/crypto.py +0 -0
  243. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/extensions/__init__.py +0 -0
  244. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/extensions/skills_importer.py +0 -0
  245. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_searcher.py +0 -0
  246. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/__init__.py +0 -0
  247. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/builders.py +0 -0
  248. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/ignore.py +0 -0
  249. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/ngram_index.py +0 -0
  250. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/service.py +0 -0
  251. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/trie_index.py +0 -0
  252. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/__init__.py +0 -0
  253. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/dump.py +0 -0
  254. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  255. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/main.py +0 -0
  256. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/parsers.py +0 -0
  257. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/tsl.py +0 -0
  258. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashline.py +0 -0
  259. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/__init__.py +0 -0
  260. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/hashpos.py +0 -0
  261. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  262. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/transformations.py +0 -0
  263. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/io_proxy.py +0 -0
  264. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/leak_detect.py +0 -0
  265. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/__init__.py +0 -0
  266. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/aws_sigv4.py +0 -0
  267. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/config.py +0 -0
  268. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/__init__.py +0 -0
  269. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/bedrock.py +0 -0
  270. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/chat.py +0 -0
  271. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/gemini.py +0 -0
  272. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/messages.py +0 -0
  273. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/responses.py +0 -0
  274. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/__init__.py +0 -0
  275. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/reasoning.py +0 -0
  276. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/thinking.py +0 -0
  277. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/identifiers.py +0 -0
  278. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/litellm_compat.py +0 -0
  279. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/pipeline.py +0 -0
  280. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/__init__.py +0 -0
  281. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/anthropic.py +0 -0
  282. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/azure.py +0 -0
  283. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/base.py +0 -0
  284. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/bedrock.py +0 -0
  285. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
  286. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/deepseek.py +0 -0
  287. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/gemini.py +0 -0
  288. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/github_copilot.py +0 -0
  289. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/meta.py +0 -0
  290. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/mistral.py +0 -0
  291. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/openai.py +0 -0
  292. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/openrouter.py +0 -0
  293. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/runtime.py +0 -0
  294. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/types.py +0 -0
  295. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/utils.py +0 -0
  296. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/loop_detect.py +0 -0
  297. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/__init__.py +0 -0
  298. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/db.py +0 -0
  299. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/utils.py +0 -0
  300. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory_control.py +0 -0
  301. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/__init__.py +0 -0
  302. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/api.py +0 -0
  303. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/__init__.py +0 -0
  304. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
  305. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/thinking.py +0 -0
  306. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/identifiers.py +0 -0
  307. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/llm.py +0 -0
  308. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/pipeline.py +0 -0
  309. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/registry.py +0 -0
  310. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/utils.py +0 -0
  311. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_providers.py +0 -0
  312. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/nested.py +0 -0
  313. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/observations/__init__.py +0 -0
  314. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/observations/service.py +0 -0
  315. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/__init__.py +0 -0
  316. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/app.py +0 -0
  317. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/providers.py +0 -0
  318. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/__init__.py +0 -0
  319. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  320. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/environment.py +0 -0
  321. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/region_resolver.py +0 -0
  322. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/safe_methods.py +0 -0
  323. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/security.py +0 -0
  324. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/service.py +0 -0
  325. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  326. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/plugin_manager.py +0 -0
  327. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/profiler.py +0 -0
  328. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/queues.py +0 -0
  329. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/requests.py +0 -0
  330. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/responses.py +0 -0
  331. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/__init__.py +0 -0
  332. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/__init__.py +0 -0
  333. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/bridge.py +0 -0
  334. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/models.py +0 -0
  335. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/protocol.py +0 -0
  336. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/signals.py +0 -0
  337. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/ws_server.py +0 -0
  338. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/similarity.py +0 -0
  339. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/skills.py +0 -0
  340. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/threading.py +0 -0
  341. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/__init__.py +0 -0
  342. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/config.py +0 -0
  343. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/paths.py +0 -0
  344. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/subagents.py +0 -0
  345. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/workspace.py +0 -0
  346. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/history.py +0 -0
  347. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/__init__.py +0 -0
  348. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/base.py +0 -0
  349. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/helpers.py +0 -0
  350. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/integration.py +0 -0
  351. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/manager.py +0 -0
  352. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/registry.py +0 -0
  353. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/service.py +0 -0
  354. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/types.py +0 -0
  355. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/http.py +0 -0
  356. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/interruptible_input.py +0 -0
  357. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/io.py +0 -0
  358. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/linter.py +0 -0
  359. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/llm.py +0 -0
  360. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/__init__.py +0 -0
  361. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/utils.py +0 -0
  362. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mdstream.py +0 -0
  363. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/onboarding.py +0 -0
  364. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/__init__.py +0 -0
  365. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/agent.yml +0 -0
  366. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/architect.yml +0 -0
  367. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/ask.yml +0 -0
  368. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/base.yml +0 -0
  369. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/context.yml +0 -0
  370. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/copypaste.yml +0 -0
  371. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock.yml +0 -0
  372. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock_fenced.yml +0 -0
  373. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock_func.yml +0 -0
  374. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_diff_fenced.yml +0 -0
  375. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_editblock.yml +0 -0
  376. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_whole.yml +0 -0
  377. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/hashline.yml +0 -0
  378. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/help.yml +0 -0
  379. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/patch.yml +0 -0
  380. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/single_wholefile_func.yml +0 -0
  381. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/subagent.yml +0 -0
  382. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/udiff.yml +0 -0
  383. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/udiff_simple.yml +0 -0
  384. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/__init__.py +0 -0
  385. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/registry.py +0 -0
  386. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/system.py +0 -0
  387. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/wholefile.yml +0 -0
  388. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/wholefile_func.yml +0 -0
  389. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  390. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  391. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  392. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  393. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  394. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  395. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  396. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  397. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  398. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  399. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  400. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  401. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  402. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  403. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  404. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  405. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  406. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  407. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  408. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  409. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  410. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  411. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  412. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  413. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  414. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  415. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  416. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  417. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  418. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  419. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  420. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  421. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/README.md +0 -0
  422. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  423. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  424. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  425. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  426. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  427. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  428. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  429. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  430. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  431. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  432. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  433. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  434. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  435. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  436. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  437. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  438. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  439. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  440. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  441. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  442. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  443. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  444. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  445. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  446. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  447. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  448. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  449. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/reasoning_tags.py +0 -0
  450. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/repomap.py +0 -0
  451. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/report.py +0 -0
  452. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/__init__.py +0 -0
  453. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-metadata.ext.json +0 -0
  454. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-metadata.json +0 -0
  455. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-settings-condensed.yml +0 -0
  456. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-settings.yml +0 -0
  457. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/providers.json +0 -0
  458. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/run_cmd.py +0 -0
  459. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/scrape.py +0 -0
  460. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/sendchat.py +0 -0
  461. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/signals.py +0 -0
  462. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/special.py +0 -0
  463. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tests/test_queue_commands.py +0 -0
  464. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/__init__.py +0 -0
  465. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/_yield.py +0 -0
  466. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/broadcast.py +0 -0
  467. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/delegate.py +0 -0
  468. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/edit_file.py +0 -0
  469. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/explore_code.py +0 -0
  470. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_branch.py +0 -0
  471. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_diff.py +0 -0
  472. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_log.py +0 -0
  473. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_remote.py +0 -0
  474. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_show.py +0 -0
  475. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_status.py +0 -0
  476. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/grep.py +0 -0
  477. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/ls.py +0 -0
  478. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/orchestrate.py +0 -0
  479. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/read_file.py +0 -0
  480. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/replace_facts.py +0 -0
  481. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/resource_manager.py +0 -0
  482. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/search_facts.py +0 -0
  483. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/thinking.py +0 -0
  484. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/undo_change.py +0 -0
  485. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/update_todo_list.py +0 -0
  486. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/__init__.py +0 -0
  487. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/base_tool.py +0 -0
  488. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/helpers.py +0 -0
  489. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/output.py +0 -0
  490. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/registry.py +0 -0
  491. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/responses.py +0 -0
  492. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/validations/__init__.py +0 -0
  493. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/validations/validations.py +0 -0
  494. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/__init__.py +0 -0
  495. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/io.py +0 -0
  496. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/styles.tcss +0 -0
  497. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/__init__.py +0 -0
  498. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/completion_bar.py +0 -0
  499. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/file_list.py +0 -0
  500. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/footer.py +0 -0
  501. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/input_container.py +0 -0
  502. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/key_hints.py +0 -0
  503. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/output.py +0 -0
  504. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/output_alt.bak +0 -0
  505. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/selectable_log.py +0 -0
  506. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/status_bar.py +0 -0
  507. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/subagent_pills.py +0 -0
  508. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/urls.py +0 -0
  509. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/utils.py +0 -0
  510. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/versioncheck.py +0 -0
  511. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/voice.py +0 -0
  512. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/waiting.py +0 -0
  513. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/watch.py +0 -0
  514. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/watch_prompts.py +0 -0
  515. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/blame.md +0 -0
  516. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/get-started.md +0 -0
  517. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/help-tip.md +0 -0
  518. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/help.md +0 -0
  519. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/install.md +0 -0
  520. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/keys.md +0 -0
  521. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/model-warnings.md +0 -0
  522. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/multi-line.md +0 -0
  523. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/python-m-aider.md +0 -0
  524. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/recording.css +0 -0
  525. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/recording.md +0 -0
  526. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/works-best.md +0 -0
  527. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_features.scss +0 -0
  528. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_footer.scss +0 -0
  529. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_hero.scss +0 -0
  530. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_info.scss +0 -0
  531. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_layout.scss +0 -0
  532. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_reset.scss +0 -0
  533. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_testimonials.scss +0 -0
  534. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_typography.scss +0 -0
  535. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_variables.scss +0 -0
  536. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/custom/custom.scss +0 -0
  537. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/global-overrides.scss +0 -0
  538. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docmd.config.json +0 -0
  539. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
  540. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/adv-model-settings.md +0 -0
  541. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/agent-mode.md +0 -0
  542. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/api-keys.md +0 -0
  543. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/api.md +0 -0
  544. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/conf.md +0 -0
  545. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/custom-commands.md +0 -0
  546. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  547. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/dotenv.md +0 -0
  548. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/editor.md +0 -0
  549. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/hooks.md +0 -0
  550. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-aliases.md +0 -0
  551. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-configuration.md +0 -0
  552. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-providers.md +0 -0
  553. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/options.md +0 -0
  554. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/persistent-memory.md +0 -0
  555. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/reasoning.md +0 -0
  556. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/retries.md +0 -0
  557. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/security.md +0 -0
  558. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/skills.md +0 -0
  559. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/subagents.md +0 -0
  560. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/workspaces.md +0 -0
  561. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config.md +0 -0
  562. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/git.md +0 -0
  563. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/index.md +0 -0
  564. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/install/docker.md +0 -0
  565. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/install.md +0 -0
  566. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/languages.md +0 -0
  567. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  568. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/legal/privacy.md +0 -0
  569. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/anthropic.md +0 -0
  570. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/azure.md +0 -0
  571. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/bedrock.md +0 -0
  572. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/cohere.md +0 -0
  573. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/deepseek.md +0 -0
  574. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/gemini.md +0 -0
  575. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/github.md +0 -0
  576. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/groq.md +0 -0
  577. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/lm-studio.md +0 -0
  578. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/ollama.md +0 -0
  579. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openai-compat.md +0 -0
  580. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openai.md +0 -0
  581. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/opencode-go.md +0 -0
  582. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openrouter.md +0 -0
  583. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/other.md +0 -0
  584. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/vertex.md +0 -0
  585. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/warnings.md +0 -0
  586. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/xai.md +0 -0
  587. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms.md +0 -0
  588. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/analytics.md +0 -0
  589. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/edit-formats.md +0 -0
  590. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/infinite-output.md +0 -0
  591. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more-info.md +0 -0
  592. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/repomap.md +0 -0
  593. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/scripting.md +0 -0
  594. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  595. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  596. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/imports.md +0 -0
  597. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  598. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/support.md +0 -0
  599. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  600. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  601. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting.md +0 -0
  602. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/commands.md +0 -0
  603. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/conventions.md +0 -0
  604. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/copypaste.md +0 -0
  605. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/images-urls.md +0 -0
  606. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/lint-test.md +0 -0
  607. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/modes.md +0 -0
  608. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/not-code.md +0 -0
  609. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/notifications.md +0 -0
  610. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/optional.md +0 -0
  611. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/sessions.md +0 -0
  612. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/tips.md +0 -0
  613. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/voice.md +0 -0
  614. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/watch.md +0 -0
  615. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage.md +0 -0
  616. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/package-lock.json +0 -0
  617. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/package.json +0 -0
  618. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/share/index.md +0 -0
  619. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/dependency_links.txt +0 -0
  620. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/entry_points.txt +0 -0
  621. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/requires.txt +0 -0
  622. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/top_level.txt +0 -0
  623. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/docker/Dockerfile +0 -0
  624. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  625. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/pyproject.toml +0 -0
  626. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/pytest.ini +0 -0
  627. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/common-constraints.txt +0 -0
  628. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-dev.in +0 -0
  629. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-dev.txt +0 -0
  630. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-help.in +0 -0
  631. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-help.txt +0 -0
  632. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-playwright.in +0 -0
  633. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-playwright.txt +0 -0
  634. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements.in +0 -0
  635. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/tree-sitter.in +0 -0
  636. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements.txt +0 -0
  637. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/30k-image.py +0 -0
  638. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/__init__.py +0 -0
  639. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/blame.py +0 -0
  640. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/clean_metadata.py +0 -0
  641. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/compare-message-history.py +0 -0
  642. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/condense_model_settings.py +0 -0
  643. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/cost_analyzer.py +0 -0
  644. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/cost_calculator.py +0 -0
  645. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/dl_icons.py +0 -0
  646. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/docmd_build.sh +0 -0
  647. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/filter-chat-mode.js +0 -0
  648. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/generate_providers.py +0 -0
  649. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/get_contributor_list.js +0 -0
  650. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/get_hashline.py +0 -0
  651. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/history_prompts.py +0 -0
  652. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/homepage.py +0 -0
  653. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/issues.py +0 -0
  654. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/logo_svg.py +0 -0
  655. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/optimize_tokens.sh +0 -0
  656. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/pip-compile.sh +0 -0
  657. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/recording_audio.py +0 -0
  658. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/redact-cast.py +0 -0
  659. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/rename_to_cecli.py +0 -0
  660. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/tmux_record.sh +0 -0
  661. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/tsl_pack_langs.py +0 -0
  662. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-blame.sh +0 -0
  663. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-docs.sh +0 -0
  664. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-history.py +0 -0
  665. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/versionbump.py +0 -0
  666. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/yank-old-versions.py +0 -0
  667. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/setup.cfg +0 -0
  668. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/shim.pyproject.toml +0 -0
  669. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/__init__.py +0 -0
  670. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/__init__.py +0 -0
  671. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/conftest.py +0 -0
  672. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_agent_config_merge.py +0 -0
  673. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_aws_credentials.py +0 -0
  674. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_coder.py +0 -0
  675. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_custom_commands.py +0 -0
  676. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_deprecated.py +0 -0
  677. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_editblock.py +0 -0
  678. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_editor.py +0 -0
  679. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_exceptions.py +0 -0
  680. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_file_system_service.py +0 -0
  681. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_find_or_blocks.py +0 -0
  682. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_hashline.py +0 -0
  683. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_hashline_closure.py +0 -0
  684. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_history.py +0 -0
  685. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_io.py +0 -0
  686. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_linter.py +0 -0
  687. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_main.py +0 -0
  688. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_model_info_manager.py +0 -0
  689. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_model_provider_manager.py +0 -0
  690. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_onboarding.py +0 -0
  691. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_plugin_manager.py +0 -0
  692. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_prompts.py +0 -0
  693. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_reasoning.py +0 -0
  694. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_repo.py +0 -0
  695. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_repomap.py +0 -0
  696. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_run_cmd.py +0 -0
  697. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sanity_check_repo.py +0 -0
  698. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_scripting.py +0 -0
  699. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_select_selector.py +0 -0
  700. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sendchat.py +0 -0
  701. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_session_args.py +0 -0
  702. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_session_crypto.py +0 -0
  703. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_skills.py +0 -0
  704. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_special.py +0 -0
  705. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_spinner.py +0 -0
  706. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_ssl_verification.py +0 -0
  707. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_udiff.py +0 -0
  708. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_urls.py +0 -0
  709. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_voice.py +0 -0
  710. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_watch.py +0 -0
  711. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_wholefile.py +0 -0
  712. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_coder_switching.py +0 -0
  713. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_copypaste_coder.py +0 -0
  714. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_rate_limit.py +0 -0
  715. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_tool_call_consolidation.py +0 -0
  716. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_auto_memory.py +0 -0
  717. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_compaction.py +0 -0
  718. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_remove_memory.py +0 -0
  719. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_search_memory.py +0 -0
  720. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_switch_agent.py +0 -0
  721. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_voice.py +0 -0
  722. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_workspace.py +0 -0
  723. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conftest.py +0 -0
  724. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conversations/test_conversation_integration.py +0 -0
  725. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conversations/test_conversation_system.py +0 -0
  726. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  727. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/chat-history.md +0 -0
  728. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/arduino/test.ino +0 -0
  729. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/bash/test.sh +0 -0
  730. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/c/test.c +0 -0
  731. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/chatito/test.chatito +0 -0
  732. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/clojure/test.clj +0 -0
  733. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  734. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/cpp/test.cpp +0 -0
  735. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/csharp/test.cs +0 -0
  736. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/d/test.d +0 -0
  737. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/dart/test.dart +0 -0
  738. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elisp/test.el +0 -0
  739. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elixir/test.ex +0 -0
  740. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elm/test.elm +0 -0
  741. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/gleam/test.gleam +0 -0
  742. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/go/test.go +0 -0
  743. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/haskell/test.hs +0 -0
  744. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/hcl/test.tf +0 -0
  745. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/java/test.java +0 -0
  746. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/javascript/test.js +0 -0
  747. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/kotlin/test.kt +0 -0
  748. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/lua/test.lua +0 -0
  749. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/matlab/test.m +0 -0
  750. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ocaml/test.ml +0 -0
  751. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  752. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/php/test.php +0 -0
  753. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/pony/test.pony +0 -0
  754. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/properties/test.properties +0 -0
  755. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/python/test.py +0 -0
  756. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ql/test.ql +0 -0
  757. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/r/test.r +0 -0
  758. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/racket/test.rkt +0 -0
  759. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ruby/test.rb +0 -0
  760. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/rust/test.rs +0 -0
  761. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/scala/test.scala +0 -0
  762. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/solidity/test.sol +0 -0
  763. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/swift/test.swift +0 -0
  764. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/tsx/test.tsx +0 -0
  765. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/typescript/test.ts +0 -0
  766. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/udev/test.rules +0 -0
  767. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/zig/test.zig +0 -0
  768. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base/sample.js +0 -0
  769. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base/sample.py +0 -0
  770. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  771. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.js +0 -0
  772. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.lisp +0 -0
  773. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.py +0 -0
  774. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch_question.js +0 -0
  775. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/help/test_help.py +0 -0
  776. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/observations/test_observation_service.py +0 -0
  777. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/__init__.py +0 -0
  778. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_bridge.py +0 -0
  779. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_dispatch.py +0 -0
  780. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_models.py +0 -0
  781. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_protocol.py +0 -0
  782. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_api_base.py +0 -0
  783. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_aws_sigv4.py +0 -0
  784. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_cache_control.py +0 -0
  785. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_gemini_auth.py +0 -0
  786. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
  787. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_hyperscalers.py +0 -0
  788. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_messages_stream.py +0 -0
  789. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_messages_wire.py +0 -0
  790. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_mistral_adapter.py +0 -0
  791. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_mistral_provider.py +0 -0
  792. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_providers_json.py +0 -0
  793. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_config.py +0 -0
  794. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_extract.py +0 -0
  795. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_summaries.py +0 -0
  796. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_vision.py +0 -0
  797. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_loop_detect.py +0 -0
  798. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_memory_control.py +0 -0
  799. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_onboarding.py +0 -0
  800. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_orchestration.py +0 -0
  801. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_skills_importer.py +0 -0
  802. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/conftest.py +0 -0
  803. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_config.py +0 -0
  804. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_paths.py +0 -0
  805. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_subagents.py +0 -0
  806. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_workspace_manager.py +0 -0
  807. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/__init__.py +0 -0
  808. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_base.py +0 -0
  809. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_manager.py +0 -0
  810. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_registry.py +0 -0
  811. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_agent_mcp_management.py +0 -0
  812. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_config_loading.py +0 -0
  813. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_mcp_management.py +0 -0
  814. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/__init__.py +0 -0
  815. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/conftest.py +0 -0
  816. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/mock_server.py +0 -0
  817. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_concurrency.py +0 -0
  818. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_config.py +0 -0
  819. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_integration.py +0 -0
  820. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_logging.py +0 -0
  821. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_resilience.py +0 -0
  822. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_unit.py +0 -0
  823. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_manager.py +0 -0
  824. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_server_name_normalization.py +0 -0
  825. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_server_sdk_compat.py +0 -0
  826. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/scrape/test_playwright_disable.py +0 -0
  827. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/scrape/test_scrape.py +0 -0
  828. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/__init__.py +0 -0
  829. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/conftest.py +0 -0
  830. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_commands.py +0 -0
  831. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_config.py +0 -0
  832. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_delegate.py +0 -0
  833. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_finished.py +0 -0
  834. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_io_proxy.py +0 -0
  835. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_service.py +0 -0
  836. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_sub_agent_coder.py +0 -0
  837. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/test_requests.py +0 -0
  838. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_command_format_output.py +0 -0
  839. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_edit_file_format_output.py +0 -0
  840. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_extractions.py +0 -0
  841. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_get_lines.py +0 -0
  842. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_git_branch.py +0 -0
  843. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_git_diff.py +0 -0
  844. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_grep.py +0 -0
  845. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_insert_block.py +0 -0
  846. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_read_range_execute.py +0 -0
  847. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_registry.py +0 -0
  848. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_remove_mcp_tool.py +0 -0
  849. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_tool_arguments.py +0 -0
  850. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  851. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/validations.py +0 -0
  852. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tui/test_completion_bar.py +0 -0
  853. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/conftest.py +0 -0
  854. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_deep_merge.py +0 -0
  855. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_edge_cases.py +0 -0
  856. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_load_mcp.py +0 -0
  857. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_performance.py +0 -0
  858. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_queues.py +0 -0
  859. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_remove_mcp.py +0 -0
  860. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_retry_backoff.py +0 -0
  861. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_shallow_merge.py +0 -0
  862. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_signals.py +0 -0
  863. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  864. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
  865. {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_ws_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 1.5.1
3
+ Version: 1.6.0
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 = '1.5.1'
22
- __version_tuple__ = version_tuple = (1, 5, 1)
21
+ __version__ = version = '1.6.0'
22
+ __version_tuple__ = version_tuple = (1, 6, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g17d4bc7df'
24
+ __commit_id__ = commit_id = 'gab974c9a6'
@@ -652,6 +652,10 @@ class AgentCoder(Coder):
652
652
  # Add post-message context blocks (priority 250 - between CUR and REMINDER)
653
653
  ConversationService.get_chunks(self).add_post_message_context_blocks()
654
654
 
655
+ # Background command output is debounced independently so it is not
656
+ # re-dumped every turn as its contents mutate slightly
657
+ ConversationService.get_chunks(self).add_background_command_output()
658
+
655
659
  # Add sub-agent states context block (same priority as post-message blocks)
656
660
  ConversationService.get_chunks(self).add_sub_agent_states()
657
661
 
@@ -935,7 +939,11 @@ class AgentCoder(Coder):
935
939
  lint_coro = self.lint_edited(edited, show_output=False)
936
940
  lint_errors, interrupted = await interruptible(lint_coro, self.interrupt_event)
937
941
  if interrupted:
938
- raise KeyboardInterrupt("Interrupted during linting")
942
+ # Abort the turn with CancelledError, which the linear run loop
943
+ # handles by re-prompting for input. KeyboardInterrupt is a
944
+ # BaseException that would escape the worker's event loop and
945
+ # leave it unable to accept further prompts.
946
+ raise asyncio.CancelledError("Interrupted during linting")
939
947
 
940
948
  has_errors = False
941
949
 
@@ -1074,7 +1082,10 @@ class AgentCoder(Coder):
1074
1082
  sleep_coro = asyncio.sleep(command_timeout / 2)
1075
1083
  _res, interrupted = await interruptible(sleep_coro, self.interrupt_event)
1076
1084
  if interrupted:
1077
- raise KeyboardInterrupt("Interrupted while waiting for background commands")
1085
+ # Use CancelledError (not KeyboardInterrupt) so the interrupt
1086
+ # stays inside the worker loop and re-prompts, matching the
1087
+ # lint interrupt path above.
1088
+ raise asyncio.CancelledError("Interrupted while waiting for background commands")
1078
1089
  return True
1079
1090
 
1080
1091
  # Check for recently finished commands that need reflection
@@ -1845,25 +1856,44 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
1845
1856
  """
1846
1857
  Get background command output to append after the main message.
1847
1858
 
1848
- Returns:
1849
- String containing formatted background command output, or empty string if none
1859
+ Emits a roster of active commands (keeping command keys in context)
1860
+ plus any new incremental output. Output that has been paged to disk is
1861
+ advertised by command key and read on demand through ``ResourceManager``
1862
+ paging.
1850
1863
  """
1851
- # Get output from all running background commands
1852
- bg_outputs = BackgroundCommandManager.get_all_command_outputs(clear=True)
1864
+ command_info = BackgroundCommandManager.list_background_commands()
1853
1865
 
1854
- if not bg_outputs:
1866
+ if not command_info:
1855
1867
  return ""
1856
1868
 
1857
- # Get command info to show actual command strings
1858
- command_info = BackgroundCommandManager.list_background_commands()
1869
+ new_outputs = {}
1870
+ for command_key in command_info:
1871
+ output = BackgroundCommandManager.get_new_command_output(command_key)
1872
+ if output.strip():
1873
+ new_outputs[command_key] = output
1859
1874
 
1860
- # Create formatted output for background commands
1861
1875
  output = "--- Background Commands Output ---\n"
1862
- for command_key, cmd_output in bg_outputs.items():
1863
- if cmd_output.strip(): # Only add if there's output
1864
- # Get the actual command string if available
1865
- command_str = command_info.get(command_key, {}).get("command", command_key)
1866
- output += f"\n[bg: {command_str}]\n{cmd_output}\n"
1876
+ output += "Commands:\n"
1877
+
1878
+ paged_keys = []
1879
+ for command_key, info in sorted(command_info.items()):
1880
+ status = "running" if info.get("running", False) else "finished"
1881
+ pages = info.get("pages", 0)
1882
+ page_note = f"pages 1-{pages}" if pages else "no pages yet"
1883
+ output += (
1884
+ f"- {command_key} [{status}] `{info.get('command', command_key)}`"
1885
+ f" — {info.get('total_chars', 0):,} chars, {page_note}\n"
1886
+ )
1887
+ if pages:
1888
+ paged_keys.append(command_key)
1889
+
1890
+ for command_key, cmd_output in new_outputs.items():
1891
+ output += f"\nNew output ({command_key}):\n{cmd_output}\n"
1892
+
1893
+ if paged_keys:
1894
+ output += "\nPaged output is available via `ResourceManager` (up to 3 pages):\n"
1895
+ for command_key in paged_keys:
1896
+ output += f'{{"paging": [{{"target": "{command_key}", "page": 1}}]}}\n'
1867
1897
 
1868
1898
  # Clean up stale (finished) background commands after reading their output
1869
1899
  for command_key, info in command_info.items():
@@ -1872,6 +1902,24 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
1872
1902
 
1873
1903
  return output
1874
1904
 
1905
+ def get_background_command_state(self):
1906
+ """
1907
+ Return a lightweight status snapshot of tracked background commands.
1908
+
1909
+ Maps each command key to its running state and page count so the
1910
+ injection layer can detect finish and page-flush transitions cheaply
1911
+ without consuming any output.
1912
+ """
1913
+ command_info = BackgroundCommandManager.list_background_commands()
1914
+
1915
+ return {
1916
+ key: {
1917
+ "running": bool(info.get("running", False)),
1918
+ "pages": info.get("pages", 0),
1919
+ }
1920
+ for key, info in command_info.items()
1921
+ }
1922
+
1875
1923
  def get_git_status(self):
1876
1924
  """
1877
1925
  Generate a git status context block for repository information.
@@ -46,6 +46,7 @@ from cecli.helpers.loop_detect import LoopDetectedError, LoopDetector
46
46
  from cecli.helpers.memory_control import trim_memory
47
47
  from cecli.helpers.observations.service import ObservationService
48
48
  from cecli.helpers.profiler import TokenProfiler
49
+ from cecli.helpers.sessions import SessionManager
49
50
  from cecli.helpers.threading import ThreadSafeEvent
50
51
  from cecli.history import ChatSummary
51
52
  from cecli.hooks import HookIntegration
@@ -64,7 +65,6 @@ from cecli.repo import ANY_GIT_ERROR, GitRepoProxy
64
65
  from cecli.repomap import RepoMap
65
66
  from cecli.report import update_error_prefix
66
67
  from cecli.run_cmd import run_cmd_async
67
- from cecli.sessions import SessionManager
68
68
  from cecli.tools.utils.output import print_tool_response
69
69
  from cecli.tools.utils.registry import ToolRegistry
70
70
  from cecli.utils import copy_tool_call, format_tokens, is_image_file
@@ -1999,7 +1999,13 @@ class Coder(metaclass=UsageMeta):
1999
1999
  if self.commands.is_run_command(inp):
2000
2000
  self.commands.cmd_running_event.clear() # Command is running
2001
2001
 
2002
- return await self.commands.run(inp, coder=self, **run_kwargs)
2002
+ try:
2003
+ return await self.commands.run(inp, coder=self, **run_kwargs)
2004
+ finally:
2005
+ # Dispatch can return early (unknown/ambiguous command) or
2006
+ # raise without ever running a command; the gate must still be
2007
+ # reopened or the input/output loops park forever.
2008
+ self.commands.cmd_running_event.set()
2003
2009
 
2004
2010
  await self.check_for_file_mentions(inp)
2005
2011
  inp = await self.check_for_urls(inp)
@@ -5228,6 +5234,7 @@ class Coder(metaclass=UsageMeta):
5228
5234
  session_manager.save_session,
5229
5235
  getattr(self.args, "auto_save_session_name", "auto-save"),
5230
5236
  False,
5237
+ True,
5231
5238
  )
5232
5239
  except Exception:
5233
5240
  # Don't show errors for auto-save to avoid interrupting the user experience
@@ -11,7 +11,7 @@ class ListSessionsCommand(BaseCommand):
11
11
  @classmethod
12
12
  async def execute(cls, io, coder, args, **kwargs):
13
13
  """Execute the list-sessions command with given parameters."""
14
- from cecli import sessions
14
+ from cecli.helpers import sessions
15
15
 
16
16
  session_manager = sessions.SessionManager(coder, io)
17
17
  sessions_list = session_manager.list_sessions()
@@ -15,7 +15,7 @@ class LoadSessionCommand(BaseCommand):
15
15
  io.tool_output("Usage: /load-session <session-name>")
16
16
  return format_command_result(io, "load-session", "No session name provided")
17
17
 
18
- from cecli import sessions
18
+ from cecli.helpers import sessions
19
19
 
20
20
  session_manager = sessions.SessionManager(coder, io)
21
21
  await session_manager.load_session(args.strip())
@@ -26,7 +26,7 @@ class LoadSessionCommand(BaseCommand):
26
26
  def get_completions(cls, io, coder, args) -> List[str]:
27
27
  """Get completion options for load-session command."""
28
28
  # Return available session names for completion
29
- from cecli import sessions
29
+ from cecli.helpers import sessions
30
30
 
31
31
  session_manager = sessions.SessionManager(coder, io)
32
32
  sessions_list = session_manager.list_sessions()
@@ -41,7 +41,10 @@ class LoadSessionCommand(BaseCommand):
41
41
  help_text += "\nExamples:\n"
42
42
  help_text += " /load-session my-feature # Load session 'my-feature'\n"
43
43
  help_text += " /load-session bug-fix # Load session 'bug-fix'\n"
44
- help_text += "\nSessions are loaded from the .cecli/sessions/ directory.\n"
44
+ help_text += (
45
+ "\nSessions are loaded from the .cecli/sessions/ directory. Loading a session"
46
+ " also restores any sub-agents saved with it.\n"
47
+ )
45
48
  help_text += (
46
49
  "Use /list-sessions to see saved sessions and /save-session to save a session.\n"
47
50
  )
@@ -15,7 +15,7 @@ class SaveSessionCommand(BaseCommand):
15
15
  io.tool_error("Please provide a session name to save.")
16
16
  return format_command_result(io, "save-session", "No session name provided")
17
17
 
18
- from cecli import sessions
18
+ from cecli.helpers import sessions
19
19
 
20
20
  session_manager = sessions.SessionManager(coder, io)
21
21
  session_manager.save_session(args.strip())
@@ -26,7 +26,7 @@ class SaveSessionCommand(BaseCommand):
26
26
  def get_completions(cls, io, coder, args) -> List[str]:
27
27
  """Get completion options for save-session command."""
28
28
  # Return existing session names for completion to prevent accidental overwrites
29
- from cecli import sessions
29
+ from cecli.helpers import sessions
30
30
 
31
31
  session_manager = sessions.SessionManager(coder, io)
32
32
  sessions_list = session_manager.list_sessions()
@@ -42,6 +42,10 @@ class SaveSessionCommand(BaseCommand):
42
42
  help_text += " /save-session my-feature # Save session as 'my-feature'\n"
43
43
  help_text += " /save-session bug-fix # Save session as 'bug-fix'\n"
44
44
  help_text += "\nSessions are saved in the .cecli/sessions/ directory as JSON files.\n"
45
+ help_text += (
46
+ "When the session has sub-agents it is saved as a folder holding the primary"
47
+ " and each sub-agent payload.\n"
48
+ )
45
49
  help_text += "Use /list-sessions to see saved sessions and /load-session to load them.\n"
46
50
  help_text += (
47
51
  "\nNote: Existing session names will be shown for tab completion to help prevent"
@@ -1,4 +1,5 @@
1
- from typing import List
1
+ import json
2
+ from typing import Any, Dict, List, Optional
2
3
 
3
4
  from cecli.commands.utils.base_command import BaseCommand
4
5
  from cecli.commands.utils.helpers import format_command_result
@@ -9,6 +10,140 @@ class TokensCommand(BaseCommand):
9
10
  NORM_NAME = "tokens"
10
11
  DESCRIPTION = "Report on the number of tokens used by the current chat context"
11
12
 
13
+ @classmethod
14
+ def _extract_file_name(cls, msg: Dict[str, Any]) -> Optional[str]:
15
+ """Extract file name from a message dictionary."""
16
+ if not isinstance(msg, dict):
17
+ return None
18
+
19
+ # Check explicit image_file metadata first
20
+ fname = msg.get("image_file")
21
+ if fname:
22
+ return fname
23
+
24
+ content = msg.get("content")
25
+ if isinstance(content, str):
26
+ if content.startswith(("Original File Contents For", "Current File Contents For")):
27
+ lines = content.split("\n", 3)
28
+ if len(lines) > 1:
29
+ return lines[1].strip()
30
+ elif content.startswith("Image file: "):
31
+ return content[len("Image file: ") :].strip()
32
+ elif isinstance(content, list):
33
+ for part in content:
34
+ if isinstance(part, dict):
35
+ if part.get("image_file"):
36
+ return part.get("image_file")
37
+ text = part.get("text")
38
+ if isinstance(text, str):
39
+ if text.startswith(
40
+ ("Original File Contents For", "Current File Contents For")
41
+ ):
42
+ lines = text.split("\n", 3)
43
+ if len(lines) > 1:
44
+ return lines[1].strip()
45
+ elif text.startswith("Image file: "):
46
+ return text[len("Image file: ") :].strip()
47
+ elif isinstance(part, str):
48
+ if part.startswith(("Original File Contents For", "Current File Contents For")):
49
+ lines = part.split("\n", 3)
50
+ if len(lines) > 1:
51
+ return lines[1].strip()
52
+ elif part.startswith("Image file: "):
53
+ return part[len("Image file: ") :].strip()
54
+
55
+ return None
56
+
57
+ @staticmethod
58
+ def binary_token_count(data_url: str, bytes_per_pixel: float = 1.0) -> int:
59
+ """Estimate OpenAI vision tokens for a base64 media data URL.
60
+
61
+ Assumes a 4:3 aspect ratio and 1 byte per pixel, which is a reasonable middle
62
+ ground for binary media when the true dimensions are unknown. The tile cost is
63
+ inflated by 1.33 and floored to keep the estimate on the pessimistic side.
64
+ """
65
+ import math
66
+
67
+ b64_data = data_url.split(",", 1)[1] if "," in data_url else data_url
68
+ padding = b64_data.count("=")
69
+ rough_bytes = max(0, (len(b64_data) * 3 // 4) - padding)
70
+ total_pixels = rough_bytes / bytes_per_pixel
71
+ height = math.sqrt((3 / 4) * total_pixels)
72
+ width = (4 / 3) * height
73
+
74
+ if max(width, height) > 2048:
75
+ scale = 2048 / max(width, height)
76
+ width *= scale
77
+ height *= scale
78
+
79
+ if min(width, height) > 768:
80
+ scale = 768 / min(width, height)
81
+ width *= scale
82
+ height *= scale
83
+
84
+ tiles = math.ceil(width / 512) * math.ceil(height / 512)
85
+
86
+ return math.floor((85 + (170 * tiles)) * 1.33)
87
+
88
+ @classmethod
89
+ def _extract_key_paths(cls, obj: Any, prefix: str = "") -> List[str]:
90
+ """Return the dot-separated paths of every leaf in a nested structure.
91
+
92
+ List indices are included as numeric segments, e.g. "0.image_url.url".
93
+ """
94
+ if isinstance(obj, dict):
95
+ items = obj.items()
96
+ elif isinstance(obj, list):
97
+ items = enumerate(obj)
98
+ else:
99
+ return [prefix] if prefix else []
100
+
101
+ paths = []
102
+ for key, value in items:
103
+ path = f"{prefix}.{key}" if prefix else str(key)
104
+ paths.extend(cls._extract_key_paths(value, path))
105
+
106
+ return paths
107
+
108
+ @classmethod
109
+ def _get_path_value(cls, obj: Any, path: str) -> Any:
110
+ """Resolve a dot-separated path produced by _extract_key_paths."""
111
+ for part in path.split("."):
112
+ obj = obj[int(part)] if isinstance(obj, list) else obj[part]
113
+
114
+ return obj
115
+
116
+ @classmethod
117
+ def _count_value_tokens(cls, coder, key: str, value: Any) -> int:
118
+ """Count tokens for an extracted value, estimating data URLs as binary media."""
119
+ if key == "url" and isinstance(value, str) and value.startswith("data:"):
120
+ return cls.binary_token_count(value)
121
+
122
+ return coder.main_model.token_count(value)
123
+
124
+ @classmethod
125
+ def _count_message_tokens(cls, coder, msg: Dict[str, Any]) -> int:
126
+ """Count tokens for a message, estimating binary data URLs instead of raw base64."""
127
+ content = msg.get("content") if isinstance(msg, dict) else None
128
+
129
+ if not isinstance(content, (list, dict)):
130
+ return coder.main_model.token_count([msg])
131
+
132
+ total = 0
133
+
134
+ for path in cls._extract_key_paths(content):
135
+ key = path.rsplit(".", 1)[-1]
136
+
137
+ if not key.isdigit() and key not in ("text", "content", "url"):
138
+ continue
139
+
140
+ value = cls._get_path_value(content, path)
141
+
142
+ if isinstance(value, str):
143
+ total += cls._count_value_tokens(coder, key, value)
144
+
145
+ return total
146
+
12
147
  @classmethod
13
148
  async def execute(cls, io, coder, args, **kwargs):
14
149
  res = []
@@ -55,6 +190,13 @@ class TokensCommand(BaseCommand):
55
190
 
56
191
  res.append((system_tokens, "system messages", ""))
57
192
 
193
+ # tool definitions
194
+ tool_list = coder.get_tool_list()
195
+
196
+ if tool_list:
197
+ tokens_tools = coder.main_model.token_count(json.dumps(tool_list))
198
+ res.append((tokens_tools, "tool schemas", ""))
199
+
58
200
  # chat history
59
201
  msgs_done = ConversationService.get_manager(coder).get_messages_dict(tag=MessageTag.DONE)
60
202
  msgs_cur = ConversationService.get_manager(coder).get_messages_dict(tag=MessageTag.CUR)
@@ -123,27 +265,10 @@ class TokensCommand(BaseCommand):
123
265
  # Group messages by file (each file has user and assistant messages)
124
266
  file_tokens = {}
125
267
  for msg in readonly_msgs:
126
- # Extract file name from message content
127
- content = msg.get("content", "")
128
- if content.startswith("Original File Contents For"):
129
- # Extract file path from "File Contents {path}:"
130
- lines = content.split("\n", 3)
131
- if lines:
132
- file_line = lines[1]
133
- fname = file_line.strip()
134
- # Calculate tokens for this message
135
- tokens = coder.main_model.token_count([msg])
136
- if fname not in file_tokens:
137
- file_tokens[fname] = 0
138
- file_tokens[fname] += tokens
139
- elif "image_file" in msg:
140
- # Handle image files
141
- fname = msg.get("image_file")
142
- if fname:
143
- tokens = coder.main_model.token_count([msg])
144
- if fname not in file_tokens:
145
- file_tokens[fname] = 0
146
- file_tokens[fname] += tokens
268
+ fname = cls._extract_file_name(msg)
269
+ if fname:
270
+ tokens = cls._count_message_tokens(coder, msg)
271
+ file_tokens[fname] = file_tokens.get(fname, 0) + tokens
147
272
 
148
273
  # Add to results
149
274
  for fname, tokens in file_tokens.items():
@@ -158,27 +283,10 @@ class TokensCommand(BaseCommand):
158
283
  msgs = ConversationService.get_manager(coder).get_messages_dict(tag=tag)
159
284
  if msgs:
160
285
  for msg in msgs:
161
- # Extract file name from message content
162
- content = msg.get("content", "")
163
- if content.startswith("Original File Contents For"):
164
- # Extract file path from "File Contents {path}:"
165
- lines = content.split("\n", 3)
166
- if lines:
167
- file_line = lines[1]
168
- fname = file_line.strip()
169
- # Calculate tokens for this message
170
- tokens = coder.main_model.token_count([msg])
171
- if fname not in editable_file_tokens:
172
- editable_file_tokens[fname] = 0
173
- editable_file_tokens[fname] += tokens
174
- elif "image_file" in msg:
175
- # Handle image files
176
- fname = msg.get("image_file")
177
- if fname:
178
- tokens = coder.main_model.token_count([msg])
179
- if fname not in editable_file_tokens:
180
- editable_file_tokens[fname] = 0
181
- editable_file_tokens[fname] += tokens
286
+ fname = cls._extract_file_name(msg)
287
+ if fname:
288
+ tokens = cls._count_message_tokens(coder, msg)
289
+ editable_file_tokens[fname] = editable_file_tokens.get(fname, 0) + tokens
182
290
 
183
291
  # Add editable files to results
184
292
  for fname, tokens in editable_file_tokens.items():
@@ -106,6 +106,110 @@ class CircularBuffer:
106
106
  return len(self.buffer)
107
107
 
108
108
 
109
+ class PagedOutputBuffer:
110
+ """
111
+ Thread-safe output window that spills full pages to disk.
112
+
113
+ Output accumulates in memory until it reaches ``page_size`` characters.
114
+ Full pages are written to ``pages_dir`` as ``{n}.txt`` and dropped from
115
+ memory, so the in-memory window never grows beyond ``page_size``. Unlike
116
+ ``CircularBuffer``, ``total_added`` is a monotonic stream offset that is
117
+ never reset, so incremental readers can resume after content has been
118
+ flushed; anything older than the in-memory window lives on disk.
119
+ """
120
+
121
+ def __init__(self, page_size: int = 4096, pages_dir: Optional[str] = None):
122
+ self.page_size = max(1, int(page_size))
123
+ self.pages_dir = pages_dir
124
+ self.buffer = deque()
125
+ self.lock = threading.Lock()
126
+ self.total_added = 0
127
+ self.window_start = 0
128
+ self.page_count = 0
129
+
130
+ def append(self, text: str) -> None:
131
+ """Append text, spilling full pages to disk once the window fills."""
132
+ if not text:
133
+ return
134
+
135
+ with self.lock:
136
+ self.buffer.extend(text)
137
+ self.total_added += len(text)
138
+
139
+ if self.total_added - self.window_start >= self.page_size:
140
+ self._spill_locked()
141
+
142
+ def get_all(self, clear: bool = False) -> str:
143
+ """Return the in-memory window (content not yet flushed to disk)."""
144
+ with self.lock:
145
+ result = "".join(self.buffer)
146
+
147
+ if clear:
148
+ self.buffer.clear()
149
+ self.window_start = self.total_added
150
+
151
+ return result
152
+
153
+ def get_new_output(self, last_read_position: int) -> Tuple[str, int]:
154
+ """Return window content past ``last_read_position`` and the new offset.
155
+
156
+ Content older than the window has already been paged to disk, so the
157
+ read position is clamped forward to the window start rather than
158
+ replaying bytes that are only available as pages.
159
+ """
160
+ with self.lock:
161
+ if last_read_position >= self.total_added:
162
+ return "", self.total_added
163
+
164
+ start = max(last_read_position, self.window_start)
165
+ new_output = "".join(self.buffer)[start - self.window_start :]
166
+
167
+ return new_output, self.total_added
168
+
169
+ def clear(self) -> None:
170
+ """Drop the in-memory window; flushed pages are unaffected."""
171
+ with self.lock:
172
+ self.buffer.clear()
173
+ self.window_start = self.total_added
174
+
175
+ def size(self) -> int:
176
+ """Get current buffer size in characters."""
177
+ with self.lock:
178
+ return len(self.buffer)
179
+
180
+ def _spill_locked(self) -> None:
181
+ content = "".join(self.buffer)
182
+
183
+ if not self.pages_dir:
184
+ # Without a page directory, retain only the newest page in memory.
185
+ if len(content) > self.page_size:
186
+ dropped = len(content) - self.page_size
187
+ content = content[dropped:]
188
+ self.window_start += dropped
189
+ self.buffer = deque(content)
190
+
191
+ return
192
+
193
+ while len(content) >= self.page_size:
194
+ page = content[: self.page_size]
195
+ content = content[self.page_size :]
196
+ self.page_count += 1
197
+ self._write_page_locked(self.page_count, page)
198
+ self.window_start += self.page_size
199
+
200
+ self.buffer = deque(content)
201
+
202
+ def _write_page_locked(self, page_number: int, content: str) -> None:
203
+ os.makedirs(self.pages_dir, exist_ok=True)
204
+ abs_path = os.path.join(self.pages_dir, f"{page_number}.txt")
205
+ tmp_path = f"{abs_path}.tmp"
206
+
207
+ with safe_open(tmp_path, "w") as page_file:
208
+ page_file.write(content)
209
+
210
+ os.replace(tmp_path, abs_path)
211
+
212
+
109
213
  class InputBuffer:
110
214
  """
111
215
  Thread-safe buffer for queuing input to be sent to a process.
@@ -442,6 +546,9 @@ class BackgroundCommandManager:
442
546
  existing_input_buffer: Optional[InputBuffer] = None,
443
547
  use_pty: bool = False,
444
548
  master_fd: Optional[int] = None,
549
+ command_key: Optional[str] = None,
550
+ page_size: Optional[int] = None,
551
+ pages_dir: Optional[str] = None,
445
552
  ) -> str:
446
553
  """
447
554
  Start a command in background.
@@ -452,15 +559,23 @@ class BackgroundCommandManager:
452
559
  cwd: Working directory for command
453
560
  max_buffer_size: Maximum buffer size for output
454
561
  existing_process: Optional existing subprocess.Popen to register
455
- existing_buffer: Optional existing CircularBuffer to use
562
+ existing_buffer: Optional existing buffer to use (CircularBuffer or PagedOutputBuffer)
456
563
  persist: If True, output buffer won't be cleared when read
564
+ command_key: Optional pre-generated command key; generated when omitted
565
+ page_size: Characters per page when paging output to disk
566
+ pages_dir: Directory where full output pages are written
457
567
 
458
568
  Returns:
459
569
  Command key for future reference
460
570
  """
461
571
  try:
462
- # Use existing buffer or create new one
463
- buffer = existing_buffer or CircularBuffer(max_size=max_buffer_size)
572
+ # Use existing buffer or create a paged/circular one
573
+ if existing_buffer is not None:
574
+ buffer = existing_buffer
575
+ elif page_size and pages_dir:
576
+ buffer = PagedOutputBuffer(page_size=page_size, pages_dir=pages_dir)
577
+ else:
578
+ buffer = CircularBuffer(max_size=max_buffer_size)
464
579
 
465
580
  # Use existing process or start new one
466
581
  # Use provided master_fd (e.g., from _execute_with_timeout) or default to None
@@ -523,7 +638,7 @@ class BackgroundCommandManager:
523
638
  )
524
639
 
525
640
  # Generate unique key and store
526
- command_key = cls._generate_command_key(command)
641
+ command_key = command_key or cls._generate_command_key(command)
527
642
 
528
643
  with cls._lock:
529
644
  cls._background_commands[command_key] = bg_process
@@ -691,6 +806,10 @@ class BackgroundCommandManager:
691
806
  "command": bg_process.command,
692
807
  "running": bg_process.is_alive(),
693
808
  "buffer_size": bg_process.buffer.size(),
809
+ "pages": getattr(bg_process.buffer, "page_count", 0),
810
+ "total_chars": getattr(
811
+ bg_process.buffer, "total_added", bg_process.buffer.size()
812
+ ),
694
813
  "start_time": bg_process.start_time,
695
814
  "end_time": bg_process.end_time,
696
815
  "duration": (