cecli-dev 1.5.0rc2__tar.gz → 1.5.0rc3__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 (845) hide show
  1. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/PKG-INFO +1 -1
  2. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/_version.py +3 -3
  3. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/args.py +12 -0
  4. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/base_coder.py +230 -52
  5. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/voice.py +35 -26
  6. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/service.py +4 -0
  7. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/background_commands.py +9 -6
  8. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/integration.py +5 -19
  9. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/config.py +1 -1
  10. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/responses.py +5 -0
  11. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/observations/service.py +20 -6
  12. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/history.py +2 -2
  13. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/helpers.py +2 -1
  14. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/models.py +19 -10
  15. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/repo.py +7 -7
  16. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/model-metadata.json +6097 -738
  17. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/sessions.py +3 -0
  18. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/_yield.py +4 -4
  19. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/command.py +38 -44
  20. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/resource_manager.py +97 -7
  21. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/app.py +43 -27
  22. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/input_container.py +0 -1
  23. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/voice.py +137 -61
  24. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/PKG-INFO +1 -1
  25. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/SOURCES.txt +4 -0
  26. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/scm_file_list.json +4 -0
  27. cecli_dev-1.5.0rc3/cecli_dev.egg-info/scm_version.json +8 -0
  28. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_background_commands.py +80 -24
  29. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_coder.py +3 -3
  30. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_history.py +4 -2
  31. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_reasoning.py +1 -1
  32. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_repo.py +6 -6
  33. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_sendchat.py +4 -3
  34. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_spinner.py +2 -2
  35. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_voice.py +177 -0
  36. cecli_dev-1.5.0rc3/tests/coders/test_rate_limit.py +125 -0
  37. cecli_dev-1.5.0rc3/tests/commands/test_voice.py +194 -0
  38. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/observations/test_observation_service.py +3 -0
  39. cecli_dev-1.5.0rc3/tests/tools/test_command_timeout_paging.py +192 -0
  40. cecli_dev-1.5.0rc3/tests/tools/test_resource_manager_paging.py +315 -0
  41. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tui/test_app.py +116 -0
  42. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_retry_backoff.py +3 -3
  43. cecli_dev-1.5.0rc2/cecli_dev.egg-info/scm_version.json +0 -8
  44. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.dockerignore +0 -0
  45. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.flake8 +0 -0
  46. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.gitattributes +0 -0
  47. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  48. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/check_pypi_version.yml +0 -0
  49. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/docker-build-test.yml +0 -0
  50. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/docker-release.yml +0 -0
  51. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/issues.yml +0 -0
  52. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/pages.yml +0 -0
  53. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/pre-commit.yml +0 -0
  54. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/release.yml +0 -0
  55. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/ubuntu-tests.yml +0 -0
  56. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/windows-tests.yml +0 -0
  57. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.github/workflows/windows_check_pypi_version.yml +0 -0
  58. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.gitignore +0 -0
  59. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/.pre-commit-config.yaml +0 -0
  60. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/CHANGELOG.md +0 -0
  61. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/CNAME +0 -0
  62. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/CONTRIBUTING.md +0 -0
  63. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/HISTORY.md +0 -0
  64. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/LICENSE.txt +0 -0
  65. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/MANIFEST.in +0 -0
  66. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/README.md +0 -0
  67. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/Dockerfile +0 -0
  68. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/README.md +0 -0
  69. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/__init__.py +0 -0
  70. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/benchmark.py +0 -0
  71. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/benchmark_classic.py +0 -0
  72. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/clone-exercism.sh +0 -0
  73. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/cpp-test.sh +0 -0
  74. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/docker.sh +0 -0
  75. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/docker_build.sh +0 -0
  76. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/install-docker-ubuntu.sh +0 -0
  77. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/npm-test.sh +0 -0
  78. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/over_time.py +0 -0
  79. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/plot.sh +0 -0
  80. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/plots.py +0 -0
  81. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/problem_stats.py +0 -0
  82. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/prompts.py +0 -0
  83. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/refactor_tools.py +0 -0
  84. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/rsync.sh +0 -0
  85. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/rungrid.py +0 -0
  86. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/swe-bench-lite.txt +0 -0
  87. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/swe-bench.txt +0 -0
  88. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/swe_bench.py +0 -0
  89. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/test_benchmark.py +0 -0
  90. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/variations.1.sh +0 -0
  91. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/variations.2.sh +0 -0
  92. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/variations.3.sh +0 -0
  93. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/benchmark/variations.4.sh +0 -0
  94. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/__init__.py +0 -0
  95. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/__main__.py +0 -0
  96. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/args_formatter.py +0 -0
  97. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/change_tracker.py +0 -0
  98. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/__init__.py +0 -0
  99. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/agent_coder.py +0 -0
  100. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/architect_coder.py +0 -0
  101. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/ask_coder.py +0 -0
  102. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/chat_chunks.py +0 -0
  103. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/context_coder.py +0 -0
  104. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/copypaste_coder.py +0 -0
  105. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editblock_coder.py +0 -0
  106. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editblock_fenced_coder.py +0 -0
  107. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editblock_func_coder.py +0 -0
  108. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  109. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editor_editblock_coder.py +0 -0
  110. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/editor_whole_coder.py +0 -0
  111. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/hashline_coder.py +0 -0
  112. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/help_coder.py +0 -0
  113. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/patch_coder.py +0 -0
  114. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/search_replace.py +0 -0
  115. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/shell.py +0 -0
  116. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/single_wholefile_func_coder.py +0 -0
  117. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/sub_agent_coder.py +0 -0
  118. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/udiff_coder.py +0 -0
  119. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/udiff_simple.py +0 -0
  120. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/wholefile_coder.py +0 -0
  121. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/coders/wholefile_func_coder.py +0 -0
  122. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/__init__.py +0 -0
  123. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/add.py +0 -0
  124. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/agent.py +0 -0
  125. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/agent_model.py +0 -0
  126. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/agent_tree.py +0 -0
  127. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/architect.py +0 -0
  128. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/ask.py +0 -0
  129. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/auto_memory.py +0 -0
  130. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/chat_mode.py +0 -0
  131. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/clear.py +0 -0
  132. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/code.py +0 -0
  133. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/command_prefix.py +0 -0
  134. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/commit.py +0 -0
  135. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/compact.py +0 -0
  136. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/context.py +0 -0
  137. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/context_blocks.py +0 -0
  138. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/context_management.py +0 -0
  139. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/copy.py +0 -0
  140. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/copy_context.py +0 -0
  141. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/core.py +0 -0
  142. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/diff.py +0 -0
  143. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/drop.py +0 -0
  144. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/editor.py +0 -0
  145. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/editor_model.py +0 -0
  146. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/exclude_skill.py +0 -0
  147. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/exit.py +0 -0
  148. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/git.py +0 -0
  149. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/hashline.py +0 -0
  150. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/help.py +0 -0
  151. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/history_search.py +0 -0
  152. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/hooks.py +0 -0
  153. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/hot_reload.py +0 -0
  154. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/import_skill.py +0 -0
  155. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/include_skill.py +0 -0
  156. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/lint.py +0 -0
  157. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/list_mcp.py +0 -0
  158. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/list_queue.py +0 -0
  159. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/list_sessions.py +0 -0
  160. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/list_skills.py +0 -0
  161. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/load.py +0 -0
  162. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/load_hook.py +0 -0
  163. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/load_mcp.py +0 -0
  164. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/load_session.py +0 -0
  165. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/load_skill.py +0 -0
  166. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/ls.py +0 -0
  167. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/map.py +0 -0
  168. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/map_refresh.py +0 -0
  169. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/merge.py +0 -0
  170. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/model.py +0 -0
  171. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/models.py +0 -0
  172. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/multiline_mode.py +0 -0
  173. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/paste.py +0 -0
  174. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/queue.py +0 -0
  175. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/quit.py +0 -0
  176. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/read_only.py +0 -0
  177. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/read_only_stub.py +0 -0
  178. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/reap_agent.py +0 -0
  179. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/reasoning_effort.py +0 -0
  180. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/remove_hook.py +0 -0
  181. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/remove_mcp.py +0 -0
  182. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/remove_memory.py +0 -0
  183. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/remove_queue.py +0 -0
  184. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/remove_skill.py +0 -0
  185. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/report.py +0 -0
  186. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/reset.py +0 -0
  187. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/rules.py +0 -0
  188. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/run.py +0 -0
  189. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/save.py +0 -0
  190. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/save_session.py +0 -0
  191. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/search_memory.py +0 -0
  192. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/settings.py +0 -0
  193. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/spawn_agent.py +0 -0
  194. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/switch_agent.py +0 -0
  195. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/terminal_data/linux.keytab +0 -0
  196. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/terminal_setup.py +0 -0
  197. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/test.py +0 -0
  198. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/think_tokens.py +0 -0
  199. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/tokens.py +0 -0
  200. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/undo.py +0 -0
  201. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/utils/__init__.py +0 -0
  202. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/utils/base_command.py +0 -0
  203. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/utils/helpers.py +0 -0
  204. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/utils/registry.py +0 -0
  205. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/utils/save_load_manager.py +0 -0
  206. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/weak_model.py +0 -0
  207. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/web.py +0 -0
  208. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/commands/workspace.py +0 -0
  209. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/decoding.py +0 -0
  210. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/deprecated_args.py +0 -0
  211. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/diffs.py +0 -0
  212. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/dump.py +0 -0
  213. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/editor.py +0 -0
  214. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/exceptions.py +0 -0
  215. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/format_settings.py +0 -0
  216. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/help.py +0 -0
  217. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/help_pats.py +0 -0
  218. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/__init__.py +0 -0
  219. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/__init__.py +0 -0
  220. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/config.py +0 -0
  221. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/defaults/__init__.py +0 -0
  222. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/defaults/memorizer.md +0 -0
  223. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/agents/defaults/worker.md +0 -0
  224. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/command_parser.py +0 -0
  225. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/command_queue.py +0 -0
  226. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/config_utils.py +0 -0
  227. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/__init__.py +0 -0
  228. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/base_message.py +0 -0
  229. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/files.py +0 -0
  230. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/manager.py +0 -0
  231. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/service.py +0 -0
  232. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/tags.py +0 -0
  233. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/conversation/utils.py +0 -0
  234. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/copypaste.py +0 -0
  235. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/coroutines.py +0 -0
  236. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/crypto.py +0 -0
  237. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/extensions/__init__.py +0 -0
  238. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/extensions/skills_importer.py +0 -0
  239. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_searcher.py +0 -0
  240. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/__init__.py +0 -0
  241. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/builders.py +0 -0
  242. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/ignore.py +0 -0
  243. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/ngram_index.py +0 -0
  244. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/service.py +0 -0
  245. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/file_system/trie_index.py +0 -0
  246. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/__init__.py +0 -0
  247. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/dump.py +0 -0
  248. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  249. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/main.py +0 -0
  250. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/parsers.py +0 -0
  251. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/grep_ast/tsl.py +0 -0
  252. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/hashline.py +0 -0
  253. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/hashpos/__init__.py +0 -0
  254. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/hashpos/hashpos.py +0 -0
  255. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  256. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/hashpos/transformations.py +0 -0
  257. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/io_proxy.py +0 -0
  258. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/leak_detect.py +0 -0
  259. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/__init__.py +0 -0
  260. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/aws_sigv4.py +0 -0
  261. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/__init__.py +0 -0
  262. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/bedrock.py +0 -0
  263. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/chat.py +0 -0
  264. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/gemini.py +0 -0
  265. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/domains/messages.py +0 -0
  266. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/formatters/__init__.py +0 -0
  267. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/formatters/reasoning.py +0 -0
  268. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/formatters/thinking.py +0 -0
  269. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/identifiers.py +0 -0
  270. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/litellm_compat.py +0 -0
  271. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/pipeline.py +0 -0
  272. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/__init__.py +0 -0
  273. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/anthropic.py +0 -0
  274. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/azure.py +0 -0
  275. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/base.py +0 -0
  276. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/bedrock.py +0 -0
  277. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
  278. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/deepseek.py +0 -0
  279. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/gemini.py +0 -0
  280. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/github_copilot.py +0 -0
  281. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/meta.py +0 -0
  282. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/openai.py +0 -0
  283. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/providers/openrouter.py +0 -0
  284. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/runtime.py +0 -0
  285. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/types.py +0 -0
  286. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/llms/utils.py +0 -0
  287. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/lock_detect.py +0 -0
  288. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/loop_detect.py +0 -0
  289. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/memory/__init__.py +0 -0
  290. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/memory/db.py +0 -0
  291. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/memory/utils.py +0 -0
  292. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/memory_control.py +0 -0
  293. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/__init__.py +0 -0
  294. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/agent.py +0 -0
  295. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/api.py +0 -0
  296. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/formatters/__init__.py +0 -0
  297. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
  298. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/formatters/thinking.py +0 -0
  299. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/identifiers.py +0 -0
  300. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/llm.py +0 -0
  301. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/pipeline.py +0 -0
  302. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/registry.py +0 -0
  303. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_config/utils.py +0 -0
  304. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/model_providers.py +0 -0
  305. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/nested.py +0 -0
  306. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/observations/__init__.py +0 -0
  307. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/__init__.py +0 -0
  308. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/agent_proxy.py +0 -0
  309. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/environment.py +0 -0
  310. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/region_resolver.py +0 -0
  311. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/safe_methods.py +0 -0
  312. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/security.py +0 -0
  313. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/service.py +0 -0
  314. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/orchestration/tool_proxy.py +0 -0
  315. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/plugin_manager.py +0 -0
  316. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/profiler.py +0 -0
  317. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/queues.py +0 -0
  318. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/requests.py +0 -0
  319. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/responses.py +0 -0
  320. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/__init__.py +0 -0
  321. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/acp/__init__.py +0 -0
  322. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/acp/bridge.py +0 -0
  323. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/acp/models.py +0 -0
  324. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/acp/protocol.py +0 -0
  325. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/signals.py +0 -0
  326. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/server/ws_server.py +0 -0
  327. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/similarity.py +0 -0
  328. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/skills.py +0 -0
  329. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/threading.py +0 -0
  330. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/workspaces/__init__.py +0 -0
  331. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/workspaces/config.py +0 -0
  332. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/workspaces/paths.py +0 -0
  333. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/workspaces/subagents.py +0 -0
  334. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/helpers/workspaces/workspace.py +0 -0
  335. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/__init__.py +0 -0
  336. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/base.py +0 -0
  337. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/integration.py +0 -0
  338. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/manager.py +0 -0
  339. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/registry.py +0 -0
  340. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/service.py +0 -0
  341. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/hooks/types.py +0 -0
  342. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/http.py +0 -0
  343. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/interruptible_input.py +0 -0
  344. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/io.py +0 -0
  345. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/linter.py +0 -0
  346. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/llm.py +0 -0
  347. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/main.py +0 -0
  348. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mcp/__init__.py +0 -0
  349. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mcp/manager.py +0 -0
  350. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mcp/oauth.py +0 -0
  351. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mcp/server.py +0 -0
  352. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mcp/utils.py +0 -0
  353. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/mdstream.py +0 -0
  354. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/onboarding.py +0 -0
  355. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/__init__.py +0 -0
  356. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/agent.yml +0 -0
  357. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/architect.yml +0 -0
  358. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/ask.yml +0 -0
  359. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/base.yml +0 -0
  360. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/context.yml +0 -0
  361. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/copypaste.yml +0 -0
  362. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editblock.yml +0 -0
  363. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editblock_fenced.yml +0 -0
  364. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editblock_func.yml +0 -0
  365. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editor_diff_fenced.yml +0 -0
  366. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editor_editblock.yml +0 -0
  367. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/editor_whole.yml +0 -0
  368. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/hashline.yml +0 -0
  369. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/help.yml +0 -0
  370. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/patch.yml +0 -0
  371. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/single_wholefile_func.yml +0 -0
  372. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/subagent.yml +0 -0
  373. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/udiff.yml +0 -0
  374. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/udiff_simple.yml +0 -0
  375. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/utils/__init__.py +0 -0
  376. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/utils/registry.py +0 -0
  377. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/utils/system.py +0 -0
  378. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/wholefile.yml +0 -0
  379. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/prompts/wholefile_func.yml +0 -0
  380. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  381. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  382. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  383. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  384. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  385. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  386. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  387. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  388. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  389. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  390. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  391. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  392. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  393. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  394. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  395. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  396. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  397. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  398. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  399. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  400. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  401. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  402. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  403. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  404. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  405. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  406. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  407. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  408. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  409. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  410. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  411. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  412. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/README.md +0 -0
  413. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  414. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  415. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  416. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  417. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  418. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  419. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  420. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  421. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  422. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  423. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  424. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  425. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  426. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  427. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  428. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  429. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  430. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  431. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  432. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  433. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  434. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  435. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  436. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  437. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  438. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  439. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  440. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/reasoning_tags.py +0 -0
  441. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/repomap.py +0 -0
  442. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/report.py +0 -0
  443. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/__init__.py +0 -0
  444. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/model-metadata.ext.json +0 -0
  445. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/model-settings-condensed.yml +0 -0
  446. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/model-settings.yml +0 -0
  447. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/resources/providers.json +0 -0
  448. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/run_cmd.py +0 -0
  449. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/scrape.py +0 -0
  450. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/sendchat.py +0 -0
  451. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/signals.py +0 -0
  452. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/special.py +0 -0
  453. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/__init__.py +0 -0
  454. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/broadcast.py +0 -0
  455. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/delegate.py +0 -0
  456. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/edit_file.py +0 -0
  457. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/explore_code.py +0 -0
  458. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_branch.py +0 -0
  459. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_diff.py +0 -0
  460. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_log.py +0 -0
  461. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_remote.py +0 -0
  462. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_show.py +0 -0
  463. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/git_status.py +0 -0
  464. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/grep.py +0 -0
  465. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/ls.py +0 -0
  466. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/orchestrate.py +0 -0
  467. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/read_file.py +0 -0
  468. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/replace_facts.py +0 -0
  469. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/search_facts.py +0 -0
  470. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/thinking.py +0 -0
  471. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/undo_change.py +0 -0
  472. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/update_todo_list.py +0 -0
  473. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/__init__.py +0 -0
  474. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/base_tool.py +0 -0
  475. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/helpers.py +0 -0
  476. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/output.py +0 -0
  477. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/registry.py +0 -0
  478. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/utils/responses.py +0 -0
  479. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/validations/__init__.py +0 -0
  480. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tools/validations/validations.py +0 -0
  481. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/__init__.py +0 -0
  482. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/io.py +0 -0
  483. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/styles.tcss +0 -0
  484. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/__init__.py +0 -0
  485. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/completion_bar.py +0 -0
  486. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/file_list.py +0 -0
  487. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/footer.py +0 -0
  488. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/input_area.py +0 -0
  489. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/key_hints.py +0 -0
  490. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/output.py +0 -0
  491. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/output_alt.bak +0 -0
  492. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/selectable_log.py +0 -0
  493. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/status_bar.py +0 -0
  494. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/widgets/subagent_pills.py +0 -0
  495. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/tui/worker.py +0 -0
  496. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/urls.py +0 -0
  497. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/utils.py +0 -0
  498. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/versioncheck.py +0 -0
  499. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/waiting.py +0 -0
  500. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/watch.py +0 -0
  501. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/watch_prompts.py +0 -0
  502. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/blame.md +0 -0
  503. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/get-started.md +0 -0
  504. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/help-tip.md +0 -0
  505. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/help.md +0 -0
  506. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/install.md +0 -0
  507. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/keys.md +0 -0
  508. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/model-warnings.md +0 -0
  509. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/multi-line.md +0 -0
  510. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/python-m-aider.md +0 -0
  511. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/recording.css +0 -0
  512. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/recording.md +0 -0
  513. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_includes/works-best.md +0 -0
  514. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_features.scss +0 -0
  515. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_footer.scss +0 -0
  516. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_hero.scss +0 -0
  517. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_info.scss +0 -0
  518. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_layout.scss +0 -0
  519. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_reset.scss +0 -0
  520. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_testimonials.scss +0 -0
  521. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_typography.scss +0 -0
  522. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/_variables.scss +0 -0
  523. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/custom/custom.scss +0 -0
  524. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/_sass/global-overrides.scss +0 -0
  525. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docmd.config.json +0 -0
  526. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
  527. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/adv-model-settings.md +0 -0
  528. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/agent-mode.md +0 -0
  529. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/api-keys.md +0 -0
  530. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/api.md +0 -0
  531. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/conf.md +0 -0
  532. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/custom-commands.md +0 -0
  533. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  534. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/dotenv.md +0 -0
  535. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/editor.md +0 -0
  536. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/hooks.md +0 -0
  537. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/mcp.md +0 -0
  538. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/model-aliases.md +0 -0
  539. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/model-configuration.md +0 -0
  540. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/model-providers.md +0 -0
  541. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/options.md +0 -0
  542. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/persistent-memory.md +0 -0
  543. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/reasoning.md +0 -0
  544. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/retries.md +0 -0
  545. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/security.md +0 -0
  546. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/skills.md +0 -0
  547. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/subagents.md +0 -0
  548. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/tui.md +0 -0
  549. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config/workspaces.md +0 -0
  550. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/config.md +0 -0
  551. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/git.md +0 -0
  552. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/index.md +0 -0
  553. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/install/docker.md +0 -0
  554. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/install.md +0 -0
  555. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/languages.md +0 -0
  556. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  557. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/legal/privacy.md +0 -0
  558. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/anthropic.md +0 -0
  559. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/azure.md +0 -0
  560. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/bedrock.md +0 -0
  561. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/cohere.md +0 -0
  562. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/deepseek.md +0 -0
  563. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/gemini.md +0 -0
  564. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/github.md +0 -0
  565. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/groq.md +0 -0
  566. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/lm-studio.md +0 -0
  567. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/ollama.md +0 -0
  568. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/openai-compat.md +0 -0
  569. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/openai.md +0 -0
  570. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/opencode-go.md +0 -0
  571. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/openrouter.md +0 -0
  572. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/other.md +0 -0
  573. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/vertex.md +0 -0
  574. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/warnings.md +0 -0
  575. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms/xai.md +0 -0
  576. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/llms.md +0 -0
  577. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/more/analytics.md +0 -0
  578. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/more/edit-formats.md +0 -0
  579. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/more/infinite-output.md +0 -0
  580. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/more-info.md +0 -0
  581. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/repomap.md +0 -0
  582. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/scripting.md +0 -0
  583. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  584. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  585. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/imports.md +0 -0
  586. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  587. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/support.md +0 -0
  588. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  589. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  590. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/troubleshooting.md +0 -0
  591. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/commands.md +0 -0
  592. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/conventions.md +0 -0
  593. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/copypaste.md +0 -0
  594. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/images-urls.md +0 -0
  595. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/lint-test.md +0 -0
  596. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/modes.md +0 -0
  597. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/not-code.md +0 -0
  598. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/notifications.md +0 -0
  599. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/optional.md +0 -0
  600. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/sessions.md +0 -0
  601. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/tips.md +0 -0
  602. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/voice.md +0 -0
  603. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage/watch.md +0 -0
  604. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/docs/usage.md +0 -0
  605. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/package-lock.json +0 -0
  606. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/package.json +0 -0
  607. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli/website/share/index.md +0 -0
  608. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/dependency_links.txt +0 -0
  609. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/entry_points.txt +0 -0
  610. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/requires.txt +0 -0
  611. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/cecli_dev.egg-info/top_level.txt +0 -0
  612. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/docker/Dockerfile +0 -0
  613. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  614. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/pyproject.toml +0 -0
  615. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/pytest.ini +0 -0
  616. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/common-constraints.txt +0 -0
  617. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-dev.in +0 -0
  618. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-dev.txt +0 -0
  619. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-help.in +0 -0
  620. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-help.txt +0 -0
  621. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-playwright.in +0 -0
  622. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements-playwright.txt +0 -0
  623. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/requirements.in +0 -0
  624. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements/tree-sitter.in +0 -0
  625. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/requirements.txt +0 -0
  626. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/30k-image.py +0 -0
  627. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/__init__.py +0 -0
  628. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/blame.py +0 -0
  629. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/clean_metadata.py +0 -0
  630. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/compare-message-history.py +0 -0
  631. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/condense_model_settings.py +0 -0
  632. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/cost_analyzer.py +0 -0
  633. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/cost_calculator.py +0 -0
  634. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/dl_icons.py +0 -0
  635. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/docmd_build.sh +0 -0
  636. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/filter-chat-mode.js +0 -0
  637. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/generate_providers.py +0 -0
  638. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/get_contributor_list.js +0 -0
  639. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/get_hashline.py +0 -0
  640. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/history_prompts.py +0 -0
  641. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/homepage.py +0 -0
  642. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/issues.py +0 -0
  643. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/logo_svg.py +0 -0
  644. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/optimize_tokens.sh +0 -0
  645. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/pip-compile.sh +0 -0
  646. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/recording_audio.py +0 -0
  647. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/redact-cast.py +0 -0
  648. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/rename_to_cecli.py +0 -0
  649. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/tmux_record.sh +0 -0
  650. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/tsl_pack_langs.py +0 -0
  651. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/update-blame.sh +0 -0
  652. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/update-docs.sh +0 -0
  653. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/update-history.py +0 -0
  654. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/versionbump.py +0 -0
  655. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/scripts/yank-old-versions.py +0 -0
  656. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/setup.cfg +0 -0
  657. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/shim.pyproject.toml +0 -0
  658. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/__init__.py +0 -0
  659. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/__init__.py +0 -0
  660. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/conftest.py +0 -0
  661. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_agent_config_merge.py +0 -0
  662. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_aws_credentials.py +0 -0
  663. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_commands.py +0 -0
  664. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_custom_commands.py +0 -0
  665. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_deprecated.py +0 -0
  666. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_editblock.py +0 -0
  667. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_editor.py +0 -0
  668. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_exceptions.py +0 -0
  669. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_file_system_service.py +0 -0
  670. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_find_or_blocks.py +0 -0
  671. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_hashline.py +0 -0
  672. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_hashline_closure.py +0 -0
  673. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_io.py +0 -0
  674. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_linter.py +0 -0
  675. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_main.py +0 -0
  676. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_model_info_manager.py +0 -0
  677. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_model_provider_manager.py +0 -0
  678. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_models.py +0 -0
  679. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_onboarding.py +0 -0
  680. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_plugin_manager.py +0 -0
  681. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_prompts.py +0 -0
  682. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_repomap.py +0 -0
  683. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_run_cmd.py +0 -0
  684. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_sanity_check_repo.py +0 -0
  685. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_scripting.py +0 -0
  686. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_select_selector.py +0 -0
  687. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_session_args.py +0 -0
  688. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_session_crypto.py +0 -0
  689. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_sessions.py +0 -0
  690. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_sessions_manager.py +0 -0
  691. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_skills.py +0 -0
  692. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_special.py +0 -0
  693. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_ssl_verification.py +0 -0
  694. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_udiff.py +0 -0
  695. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_urls.py +0 -0
  696. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_watch.py +0 -0
  697. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/basic/test_wholefile.py +0 -0
  698. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/coders/test_coder_switching.py +0 -0
  699. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/coders/test_copypaste_coder.py +0 -0
  700. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/coders/test_tool_call_consolidation.py +0 -0
  701. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_auto_memory.py +0 -0
  702. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_compaction.py +0 -0
  703. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_remove_memory.py +0 -0
  704. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_search_memory.py +0 -0
  705. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_switch_agent.py +0 -0
  706. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/commands/test_workspace.py +0 -0
  707. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/conftest.py +0 -0
  708. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/conversations/test_conversation_integration.py +0 -0
  709. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/conversations/test_conversation_system.py +0 -0
  710. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  711. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/chat-history.md +0 -0
  712. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/arduino/test.ino +0 -0
  713. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/bash/test.sh +0 -0
  714. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/c/test.c +0 -0
  715. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/chatito/test.chatito +0 -0
  716. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/clojure/test.clj +0 -0
  717. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  718. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/cpp/test.cpp +0 -0
  719. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/csharp/test.cs +0 -0
  720. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/d/test.d +0 -0
  721. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/dart/test.dart +0 -0
  722. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/elisp/test.el +0 -0
  723. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/elixir/test.ex +0 -0
  724. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/elm/test.elm +0 -0
  725. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/gleam/test.gleam +0 -0
  726. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/go/test.go +0 -0
  727. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/haskell/test.hs +0 -0
  728. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/hcl/test.tf +0 -0
  729. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/java/test.java +0 -0
  730. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/javascript/test.js +0 -0
  731. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/kotlin/test.kt +0 -0
  732. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/lua/test.lua +0 -0
  733. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/matlab/test.m +0 -0
  734. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/ocaml/test.ml +0 -0
  735. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  736. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/php/test.php +0 -0
  737. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/pony/test.pony +0 -0
  738. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/properties/test.properties +0 -0
  739. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/python/test.py +0 -0
  740. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/ql/test.ql +0 -0
  741. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/r/test.r +0 -0
  742. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/racket/test.rkt +0 -0
  743. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/ruby/test.rb +0 -0
  744. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/rust/test.rs +0 -0
  745. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/scala/test.scala +0 -0
  746. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/solidity/test.sol +0 -0
  747. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/swift/test.swift +0 -0
  748. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/tsx/test.tsx +0 -0
  749. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/typescript/test.ts +0 -0
  750. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/udev/test.rules +0 -0
  751. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/languages/zig/test.zig +0 -0
  752. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/sample-code-base/sample.js +0 -0
  753. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/sample-code-base/sample.py +0 -0
  754. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  755. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/watch.js +0 -0
  756. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/watch.lisp +0 -0
  757. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/watch.py +0 -0
  758. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/fixtures/watch_question.js +0 -0
  759. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/help/test_help.py +0 -0
  760. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/server/acp/__init__.py +0 -0
  761. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/server/acp/test_bridge.py +0 -0
  762. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/server/acp/test_dispatch.py +0 -0
  763. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/server/acp/test_models.py +0 -0
  764. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/server/acp/test_protocol.py +0 -0
  765. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_api_base.py +0 -0
  766. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_aws_sigv4.py +0 -0
  767. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_cache_control.py +0 -0
  768. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_gemini_auth.py +0 -0
  769. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
  770. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_hyperscalers.py +0 -0
  771. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_messages_stream.py +0 -0
  772. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_messages_wire.py +0 -0
  773. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_providers_json.py +0 -0
  774. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_reasoning_config.py +0 -0
  775. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_reasoning_extract.py +0 -0
  776. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_llms_vision.py +0 -0
  777. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_loop_detect.py +0 -0
  778. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_memory_control.py +0 -0
  779. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_model_config.py +0 -0
  780. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_orchestration.py +0 -0
  781. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/test_skills_importer.py +0 -0
  782. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/workspaces/conftest.py +0 -0
  783. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/workspaces/test_config.py +0 -0
  784. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/workspaces/test_paths.py +0 -0
  785. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/workspaces/test_subagents.py +0 -0
  786. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/helpers/workspaces/test_workspace_manager.py +0 -0
  787. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/hooks/__init__.py +0 -0
  788. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/hooks/test_base.py +0 -0
  789. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/hooks/test_manager.py +0 -0
  790. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/hooks/test_registry.py +0 -0
  791. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/integration/test_agent_mcp_management.py +0 -0
  792. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/integration/test_config_loading.py +0 -0
  793. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/integration/test_mcp_management.py +0 -0
  794. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/__init__.py +0 -0
  795. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/conftest.py +0 -0
  796. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/mock_server.py +0 -0
  797. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_concurrency.py +0 -0
  798. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_config.py +0 -0
  799. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_integration.py +0 -0
  800. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_logging.py +0 -0
  801. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_resilience.py +0 -0
  802. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_keepalive_unit.py +0 -0
  803. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_manager.py +0 -0
  804. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_manager_retry.py +0 -0
  805. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_server_name_normalization.py +0 -0
  806. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/mcp/test_server_sdk_compat.py +0 -0
  807. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/scrape/test_playwright_disable.py +0 -0
  808. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/scrape/test_scrape.py +0 -0
  809. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/__init__.py +0 -0
  810. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/conftest.py +0 -0
  811. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_commands.py +0 -0
  812. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_config.py +0 -0
  813. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_delegate.py +0 -0
  814. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_finished.py +0 -0
  815. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_io_proxy.py +0 -0
  816. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_service.py +0 -0
  817. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/subagents/test_sub_agent_coder.py +0 -0
  818. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/test_requests.py +0 -0
  819. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_command_format_output.py +0 -0
  820. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_edit_file_format_output.py +0 -0
  821. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_extractions.py +0 -0
  822. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_get_lines.py +0 -0
  823. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_git_branch.py +0 -0
  824. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_git_diff.py +0 -0
  825. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_grep.py +0 -0
  826. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_insert_block.py +0 -0
  827. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_read_range_execute.py +0 -0
  828. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_registry.py +0 -0
  829. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_remove_mcp_tool.py +0 -0
  830. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_tool_arguments.py +0 -0
  831. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  832. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tools/validations.py +0 -0
  833. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/tui/test_completion_bar.py +0 -0
  834. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/conftest.py +0 -0
  835. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_deep_merge.py +0 -0
  836. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_edge_cases.py +0 -0
  837. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_load_mcp.py +0 -0
  838. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_performance.py +0 -0
  839. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_queues.py +0 -0
  840. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_remove_mcp.py +0 -0
  841. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_shallow_merge.py +0 -0
  842. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_signals.py +0 -0
  843. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  844. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
  845. {cecli_dev-1.5.0rc2 → cecli_dev-1.5.0rc3}/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.0rc2
3
+ Version: 1.5.0rc3
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.0rc2'
22
- __version_tuple__ = version_tuple = (1, 5, 0, 'rc2')
21
+ __version__ = version = '1.5.0rc3'
22
+ __version_tuple__ = version_tuple = (1, 5, 0, 'rc3')
23
23
 
24
- __commit_id__ = commit_id = 'g12134c928'
24
+ __commit_id__ = commit_id = 'g3717269c6'
@@ -578,6 +578,18 @@ def get_parser(default_config_files, git_root):
578
578
  help="Number of times to ping at 5min intervals to keep prompt cache warm (default: 0)",
579
579
  )
580
580
 
581
+ ##########
582
+ group = parser.add_argument_group("Rate limiting")
583
+ group.add_argument(
584
+ "--tokens-per-minute",
585
+ type=int,
586
+ default=1000000,
587
+ help=(
588
+ "Set the maximum tokens sent per minute before rate limiting sleeps are"
589
+ " inserted before LLM API calls (default: 1000000, use 0 to disable)"
590
+ ),
591
+ )
592
+
581
593
  ##########
582
594
  group = parser.add_argument_group("Repomap settings")
583
595
  group.add_argument(
@@ -74,6 +74,9 @@ from ..prompts.utils.registry import PromptObject, PromptRegistry
74
74
 
75
75
  GLOBAL_DATE = date.today().isoformat()
76
76
 
77
+ # Default per-minute token budget used for rate limiting when not configured.
78
+ DEFAULT_TOKENS_PER_MINUTE = 1000000
79
+
77
80
 
78
81
  class UnknownEditFormat(ValueError):
79
82
  def __init__(self, edit_format, valid_formats):
@@ -119,6 +122,8 @@ class UsageMeta(type):
119
122
  _total_tokens_sent = 0
120
123
  _total_tokens_received = 0
121
124
  _total_cached_tokens = 0
125
+ _token_usage_buffer = {}
126
+ _token_usage_window = 60.0
122
127
 
123
128
  @property
124
129
  def total_cost(cls):
@@ -152,6 +157,47 @@ class UsageMeta(type):
152
157
  def total_cached_tokens(cls, value):
153
158
  UsageMeta._total_cached_tokens = value
154
159
 
160
+ @classmethod
161
+ def _purge_token_usage(cls, model, now=None):
162
+ """Drop a model's token-usage entries older than the rolling window."""
163
+ if now is None:
164
+ now = time.time()
165
+ cutoff = now - UsageMeta._token_usage_window
166
+ entries = UsageMeta._token_usage_buffer.get(model, [])
167
+ UsageMeta._token_usage_buffer[model] = [
168
+ (tokens, ts) for tokens, ts in entries if ts >= cutoff
169
+ ]
170
+
171
+ @classmethod
172
+ def _record_token_usage(cls, model, delta, now=None):
173
+ """Record a model's request prompt-token usage as (tokens, timestamp)."""
174
+ if delta <= 0 or model is None:
175
+ return
176
+ if now is None:
177
+ now = time.time()
178
+ UsageMeta._token_usage_buffer.setdefault(model, []).append((delta, now))
179
+ UsageMeta._purge_token_usage(model, now)
180
+
181
+ @classmethod
182
+ def _get_token_usage_stats(cls, model, now=None):
183
+ """Return a model's (tokens_last_minute, max_single_request, requests_per_minute)."""
184
+ if now is None:
185
+ now = time.time()
186
+ UsageMeta._purge_token_usage(model, now)
187
+ buffer = UsageMeta._token_usage_buffer.get(model, [])
188
+ tokens_last_minute = sum(tokens for tokens, _ in buffer)
189
+ max_single_request = max((tokens for tokens, _ in buffer), default=0)
190
+ requests_per_minute = len(buffer)
191
+ return tokens_last_minute, max_single_request, requests_per_minute
192
+
193
+ @classmethod
194
+ def _reset_token_usage(cls, model=None):
195
+ """Clear the rolling token-usage buffer for one model, or all when model is None."""
196
+ if model is None:
197
+ UsageMeta._token_usage_buffer = {}
198
+ else:
199
+ UsageMeta._token_usage_buffer.pop(model, None)
200
+
155
201
 
156
202
  class Coder(metaclass=UsageMeta):
157
203
 
@@ -188,6 +234,10 @@ class Coder(metaclass=UsageMeta):
188
234
  def total_cached_tokens(self, value):
189
235
  type(self).total_cached_tokens = value
190
236
 
237
+ def _reset_token_usage(self):
238
+ """Clear rolling token usage after restoring a saved session."""
239
+ UsageMeta._reset_token_usage()
240
+
191
241
  abs_fnames = None
192
242
  abs_read_only_fnames = None
193
243
  abs_read_only_stubs_fnames = None
@@ -315,7 +365,7 @@ class Coder(metaclass=UsageMeta):
315
365
  read_only_stubs_fnames=list(
316
366
  from_coder.abs_read_only_stubs_fnames
317
367
  ), # Copy read-only stubs
318
- rules_fnames=list(from_coder.abs_rules_fnames), # Copy read-only stubs
368
+ rules_fnames=list(from_coder.abs_rules_fnames), # Copy rules files
319
369
  done_messages=[],
320
370
  cur_messages=[],
321
371
  coder_commit_hashes=from_coder.coder_commit_hashes,
@@ -2293,6 +2343,7 @@ class Coder(metaclass=UsageMeta):
2293
2343
 
2294
2344
  asyncio.create_task(invoke_memorizer(self, additional_context=text))
2295
2345
 
2346
+ await self._rate_limit_sleep()
2296
2347
  if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
2297
2348
  await summarize_and_update(done_messages, MessageTag.DONE)
2298
2349
 
@@ -3756,6 +3807,7 @@ class Coder(metaclass=UsageMeta):
3756
3807
 
3757
3808
  while True:
3758
3809
  try:
3810
+ await self._rate_limit_sleep(model)
3759
3811
  completion_coro = model.send_completion(
3760
3812
  messages,
3761
3813
  functions,
@@ -3764,6 +3816,7 @@ class Coder(metaclass=UsageMeta):
3764
3816
  tools=tools,
3765
3817
  override_kwargs=self.model_kwargs.copy(),
3766
3818
  interrupt_event=self.interrupt_event,
3819
+ uuid=self.uuid,
3767
3820
  )
3768
3821
 
3769
3822
  try:
@@ -3830,7 +3883,7 @@ class Coder(metaclass=UsageMeta):
3830
3883
  if response:
3831
3884
  completion = response
3832
3885
  # Calculate costs for successful responses
3833
- self.calculate_and_show_tokens_and_cost(messages, completion)
3886
+ self.calculate_and_show_tokens_and_cost(messages, completion, model=model)
3834
3887
 
3835
3888
  except litellm_ex.exceptions_tuple() as err:
3836
3889
  self.error_code = 1
@@ -3838,7 +3891,7 @@ class Coder(metaclass=UsageMeta):
3838
3891
  if ex_info.name == "ContextWindowExceededError":
3839
3892
  # Still calculate costs for context window errors
3840
3893
  self.token_profiler.on_error()
3841
- self.calculate_and_show_tokens_and_cost(messages, completion)
3894
+ self.calculate_and_show_tokens_and_cost(messages, completion, model=model)
3842
3895
  raise
3843
3896
  except (KeyboardInterrupt, asyncio.CancelledError) as kbi:
3844
3897
  self.error_code = 130 # apparently standard?
@@ -4431,56 +4484,55 @@ class Coder(metaclass=UsageMeta):
4431
4484
  self.reasoning_tag_name,
4432
4485
  )
4433
4486
 
4434
- def calculate_and_show_tokens_and_cost(self, messages, completion=None):
4487
+ def calculate_and_show_tokens_and_cost(self, messages, completion=None, model=None):
4488
+ active_model = model or self.get_active_model()
4435
4489
  prompt_tokens = 0
4436
4490
  completion_tokens = 0
4437
4491
  cache_hit_tokens = 0
4438
4492
  cache_write_tokens = 0
4493
+ usage = nested.getter(completion, "usage") if completion else None
4439
4494
 
4440
4495
  if (
4441
- completion
4442
- and nested.getter(completion, "usage.prompt_tokens") is not None
4443
- and nested.getter(completion, "usage.completion_tokens") is not None
4496
+ usage is not None
4497
+ and nested.getter(usage, ["prompt_tokens", "input_tokens"]) is not None
4498
+ and nested.getter(usage, ["completion_tokens", "output_tokens"]) is not None
4444
4499
  ):
4445
4500
  prompt_tokens = (
4446
- nested.getter(completion.usage, "prompt_tokens", 0)
4447
- or nested.getter(completion.usage, "prompt_eval_count", 0)
4448
- or 0
4501
+ nested.getter(usage, ["prompt_tokens", "input_tokens", "prompt_eval_count"], 0) or 0
4449
4502
  )
4450
4503
  completion_tokens = (
4451
- nested.getter(completion.usage, "completion_tokens", 0)
4452
- or nested.getter(completion.usage, "eval_count", 0)
4453
- or 0
4504
+ nested.getter(usage, ["completion_tokens", "output_tokens", "eval_count"], 0) or 0
4454
4505
  )
4455
4506
  cache_hit_tokens = (
4456
- getattr(completion.usage, "prompt_cache_hit_tokens", 0)
4457
- or getattr(completion.usage, "cache_read_input_tokens", 0)
4458
- or nested.getter(completion.usage, "prompt_tokens_details.cached_tokens", 0)
4507
+ nested.getter(
4508
+ usage,
4509
+ [
4510
+ "prompt_cache_hit_tokens",
4511
+ "cache_read_input_tokens",
4512
+ "input_tokens_details.cached_tokens",
4513
+ "prompt_tokens_details.cached_tokens",
4514
+ ],
4515
+ 0,
4516
+ )
4459
4517
  or 0
4460
4518
  )
4461
- cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0) or 0
4519
+ cache_write_tokens = nested.getter(usage, "cache_creation_input_tokens", 0) or 0
4462
4520
  self.message_cached_tokens += cache_hit_tokens
4463
-
4464
- # ``prompt_tokens`` is normalized to the full input (including any
4465
- # cache read/write) for anthropic usage, so no separate add here.
4466
4521
  self.message_tokens_sent += prompt_tokens
4467
-
4468
4522
  else:
4469
- prompt_tokens = self.get_active_model().token_count(messages)
4470
- completion_tokens = self.get_active_model().token_count(self.partial_response_content)
4523
+ prompt_tokens = active_model.token_count(messages)
4524
+ completion_tokens = active_model.token_count(self.partial_response_content)
4471
4525
  self.message_tokens_sent += prompt_tokens
4472
4526
 
4473
4527
  self.message_tokens_received += completion_tokens
4528
+ UsageMeta._record_token_usage(active_model.name, prompt_tokens)
4474
4529
 
4475
- # Build tokens string as "{prompt} CH {hit_rate:.1f}% ↑ {completion} ↓"
4476
4530
  if prompt_tokens > 0:
4477
4531
  hit_rate = round(cache_hit_tokens / prompt_tokens * 100, 1) if cache_hit_tokens else 0.0
4478
4532
  else:
4479
4533
  hit_rate = 0.0
4480
4534
  tokens_str = f"{format_tokens(prompt_tokens)} ◇ {hit_rate:.1f}%"
4481
-
4482
4535
  tokens_report = f"{tokens_str} ↑ {format_tokens(completion_tokens)} ↓"
4483
-
4484
4536
  tokens_report = self.token_profiler.add_to_usage_report(
4485
4537
  tokens_report, self.message_tokens_sent, self.message_tokens_received
4486
4538
  )
@@ -4503,36 +4555,31 @@ class Coder(metaclass=UsageMeta):
4503
4555
  total_hit_rate = 0.0
4504
4556
 
4505
4557
  total_stats = f"{format_tokens(total_combined_tokens)} ◇ {total_hit_rate:.1f}% ↑↓"
4506
-
4507
- if not self.get_active_model().info.get("input_cost_per_token"):
4558
+ if not active_model.info.get("input_cost_per_token"):
4508
4559
  self.usage_report = tokens_report + " " + total_stats
4509
4560
  return
4510
4561
 
4511
4562
  try:
4512
- # Try and use litellm's built in cost calculator. Seems to work for non-streaming only?
4513
4563
  cost = litellm.completion_cost(completion_response=completion)
4514
4564
  except Exception:
4515
4565
  cost = 0
4516
4566
 
4517
4567
  if not cost:
4518
4568
  cost = self.compute_costs_from_tokens(
4519
- prompt_tokens, completion_tokens, cache_write_tokens, cache_hit_tokens
4569
+ prompt_tokens,
4570
+ completion_tokens,
4571
+ cache_write_tokens,
4572
+ cache_hit_tokens,
4573
+ model=active_model,
4520
4574
  )
4521
4575
 
4522
4576
  self.total_cost += cost
4523
4577
  self.message_cost += cost
4524
-
4525
4578
  cost_report = (
4526
4579
  f"${self.format_cost(self.message_cost)} • {total_stats}"
4527
4580
  f" ${self.format_cost(self.total_cost)}"
4528
4581
  )
4529
-
4530
- if cache_hit_tokens and cache_write_tokens:
4531
- sep = " "
4532
- else:
4533
- sep = " "
4534
-
4535
- self.usage_report = tokens_report + sep + cost_report
4582
+ self.usage_report = tokens_report + " " + cost_report
4536
4583
 
4537
4584
  def format_cost(self, value):
4538
4585
  if value == 0:
@@ -4544,31 +4591,24 @@ class Coder(metaclass=UsageMeta):
4544
4591
  return f"{value:.{max(2, 2 - int(math.log10(magnitude)))}f}"
4545
4592
 
4546
4593
  def compute_costs_from_tokens(
4547
- self, prompt_tokens, completion_tokens, cache_write_tokens, cache_hit_tokens
4594
+ self, prompt_tokens, completion_tokens, cache_write_tokens, cache_hit_tokens, model=None
4548
4595
  ):
4549
4596
  cost = 0
4597
+ active_model = model or self.get_active_model()
4598
+ info = getattr(active_model, "info", {}) or {}
4550
4599
 
4551
- input_cost_per_token = self.get_active_model().info.get("input_cost_per_token") or 0
4552
- output_cost_per_token = self.get_active_model().info.get("output_cost_per_token") or 0
4600
+ input_cost_per_token = info.get("input_cost_per_token") or 0
4601
+ output_cost_per_token = info.get("output_cost_per_token") or 0
4553
4602
  input_cost_per_token_cache_hit = (
4554
- self.get_active_model().info.get("input_cost_per_token_cache_hit")
4555
- or self.get_active_model().info.get("cache_read_input_token_cost")
4603
+ info.get("input_cost_per_token_cache_hit")
4604
+ or info.get("cache_read_input_token_cost")
4556
4605
  or 0
4557
4606
  )
4558
4607
 
4559
- # deepseek
4560
- # prompt_cache_hit_tokens + prompt_cache_miss_tokens
4561
- # == prompt_tokens == total tokens that were sent
4562
- #
4563
- # Anthropic
4564
- # cache_creation_input_tokens + cache_read_input_tokens + prompt
4565
- # == total tokens that were
4566
-
4567
4608
  if input_cost_per_token_cache_hit:
4568
4609
  cost += cache_hit_tokens * input_cost_per_token_cache_hit
4569
4610
  cost += (prompt_tokens - cache_hit_tokens) * input_cost_per_token
4570
4611
  else:
4571
- # hard code the anthropic adjustments, no-ops for other models since cache_x_tokens==0
4572
4612
  cost += cache_write_tokens * input_cost_per_token * 1.25
4573
4613
  cost += cache_hit_tokens * input_cost_per_token * 0.10
4574
4614
  cost += (prompt_tokens - cache_hit_tokens) * input_cost_per_token
@@ -4576,6 +4616,144 @@ class Coder(metaclass=UsageMeta):
4576
4616
  cost += completion_tokens * output_cost_per_token
4577
4617
  return cost
4578
4618
 
4619
+ def record_background_usage_and_cost(self, messages, completion=None, model=None):
4620
+ """Account for token usage and cost of a background model call."""
4621
+ active_model = model or self.get_active_model()
4622
+ prompt_tokens = 0
4623
+ completion_tokens = 0
4624
+ cache_hit_tokens = 0
4625
+ cache_write_tokens = 0
4626
+ usage = nested.getter(completion, "usage") if completion else None
4627
+
4628
+ if usage is not None:
4629
+ prompt_tokens = (
4630
+ nested.getter(usage, ["prompt_tokens", "input_tokens", "prompt_eval_count"], 0) or 0
4631
+ )
4632
+ completion_tokens = (
4633
+ nested.getter(usage, ["completion_tokens", "output_tokens", "eval_count"], 0) or 0
4634
+ )
4635
+ cache_hit_tokens = (
4636
+ nested.getter(
4637
+ usage,
4638
+ [
4639
+ "prompt_cache_hit_tokens",
4640
+ "cache_read_input_tokens",
4641
+ "input_tokens_details.cached_tokens",
4642
+ "prompt_tokens_details.cached_tokens",
4643
+ ],
4644
+ 0,
4645
+ )
4646
+ or 0
4647
+ )
4648
+ cache_write_tokens = nested.getter(usage, "cache_creation_input_tokens", 0) or 0
4649
+ elif active_model is not None:
4650
+ prompt_tokens = active_model.token_count(messages) or 0
4651
+
4652
+ model_name = getattr(active_model, "name", None)
4653
+ UsageMeta._record_token_usage(model_name, prompt_tokens)
4654
+ self.total_tokens_sent += prompt_tokens
4655
+ self.total_tokens_received += completion_tokens
4656
+ self.total_cached_tokens += cache_hit_tokens
4657
+
4658
+ info = getattr(active_model, "info", {}) or {}
4659
+ if not info.get("input_cost_per_token"):
4660
+ return
4661
+
4662
+ try:
4663
+ cost = litellm.completion_cost(completion_response=completion)
4664
+ except Exception:
4665
+ cost = 0
4666
+
4667
+ if not cost:
4668
+ cost = self.compute_costs_from_tokens(
4669
+ prompt_tokens,
4670
+ completion_tokens,
4671
+ cache_write_tokens,
4672
+ cache_hit_tokens,
4673
+ model=active_model,
4674
+ )
4675
+
4676
+ self.total_cost += cost
4677
+
4678
+ def calculate_dynamic_sleep(self, model=None):
4679
+ """Compute how long to sleep before the next LLM API call to stay under the configured per-minute token limit.
4680
+
4681
+ Uses the rolling token-usage buffer (last 60s) to estimate:
4682
+
4683
+ * ``used_last_min`` - prompt tokens already consumed in the window
4684
+ * ``max_request`` - largest single request observed in the window
4685
+ * ``requests_per_min`` - request rate observed in the window
4686
+
4687
+ Returns a sleep duration (seconds) that is ``0`` when the current
4688
+ trajectory stays within 90% of ``tokens_per_minute`` both over the next
4689
+ 15 seconds and, if sustained, over a full minute. Otherwise it returns a
4690
+ pause rounded up to the nearest 0.25s interval.
4691
+ """
4692
+ limit = nested.getter(
4693
+ getattr(self, "args", None), "tokens_per_minute", DEFAULT_TOKENS_PER_MINUTE
4694
+ )
4695
+ if not isinstance(limit, (int, float)):
4696
+ limit = DEFAULT_TOKENS_PER_MINUTE
4697
+ if limit <= 0:
4698
+ return 0.0
4699
+
4700
+ active_model = model or getattr(self, "main_model", None)
4701
+ if active_model is None:
4702
+ get_active_model = getattr(self, "get_active_model", None)
4703
+ if callable(get_active_model):
4704
+ active_model = get_active_model()
4705
+
4706
+ model_name = getattr(active_model, "name", None)
4707
+ if not model_name:
4708
+ return 0.0
4709
+
4710
+ budget = limit * 0.9
4711
+ used_last_min, max_request, requests_per_min = UsageMeta._get_token_usage_stats(model_name)
4712
+
4713
+ if max_request <= 0 or requests_per_min <= 0:
4714
+ # No recent usage to throttle.
4715
+ return 0.0
4716
+
4717
+ # Tokens we would consume in the next 15 seconds at the current rate.
4718
+ projected_15s = max_request * (requests_per_min / 60.0) * 15.0
4719
+
4720
+ # If the current trajectory stays within budget (both over the next 15s
4721
+ # and if sustained for a full minute) there is nothing to do.
4722
+ if (used_last_min + projected_15s) <= budget and (max_request * requests_per_min) <= budget:
4723
+ return 0.0
4724
+
4725
+ # Slow the request rate so a sustained minute at max_request size fits
4726
+ # the budget.
4727
+ sustainable_rpm = budget / max_request
4728
+ sustainable_interval = 60.0 / sustainable_rpm if sustainable_rpm > 0 else 60.0
4729
+ current_interval = 60.0 / requests_per_min
4730
+ sleep = max(0.0, sustainable_interval - current_interval)
4731
+
4732
+ # If the next 15 seconds (plus what we've already used) would breach the
4733
+ # budget, wait for the rolling window to drain enough to absorb it.
4734
+ overshoot = (used_last_min + projected_15s) - budget
4735
+ if overshoot > 0:
4736
+ drain = 60.0 * (overshoot / max(used_last_min, 1.0))
4737
+ sleep = max(sleep, drain)
4738
+
4739
+ # Cap at one full window; round up to the nearest 0.25s.
4740
+ sleep = min(sleep, UsageMeta._token_usage_window)
4741
+ return math.ceil(sleep / 0.25) * 0.25
4742
+
4743
+ async def _rate_limit_sleep(self, model=None):
4744
+ """Sleep (if needed) before an LLM API call to respect the per-minute token limit.
4745
+
4746
+ Best-effort: an interrupt simply skips the pause and is handled at the
4747
+ next interruptible API point.
4748
+ """
4749
+ delay = self.calculate_dynamic_sleep(model=model)
4750
+ if delay <= 0:
4751
+ return
4752
+
4753
+ _, interrupted = await coroutines.interruptible(asyncio.sleep(delay), self.interrupt_event)
4754
+ if interrupted:
4755
+ return
4756
+
4579
4757
  def show_usage_report(self):
4580
4758
  if not self.usage_report:
4581
4759
  return
@@ -11,27 +11,31 @@ class VoiceCommand(BaseCommand):
11
11
 
12
12
  @classmethod
13
13
  async def execute(cls, io, coder, args, **kwargs):
14
- """Execute the voice command with given parameters."""
15
- # Get voice parameters from kwargs or coder.
14
+ """Record inline in the CLI, or toggle background recording in the TUI."""
15
+ tui = coder.tui() if coder.tui else None
16
+ stop_queue = kwargs.get("stop_queue")
17
+
18
+ if tui is not None and stop_queue is None:
19
+ tui.call_from_thread(tui.action_start_voice)
20
+ return ""
21
+
16
22
  voice_language = kwargs.get("voice_language") or getattr(coder, "voice_language", None)
17
23
  voice_format = kwargs.get("voice_format") or getattr(coder, "voice_format", None)
18
24
  voice_input_device = kwargs.get("voice_input_device") or getattr(
19
25
  coder, "voice_input_device", None
20
26
  )
21
27
 
22
- # Resolve the Moonshine model language: an explicit voice-language
23
- # setting, then the detected user/chat language, finally English.
24
28
  detected_language = None
25
29
  get_user_language = getattr(coder, "get_user_language", None)
30
+
26
31
  if get_user_language:
27
32
  detected_language = get_user_language()
28
33
 
29
34
  resolved_language = voice.resolve_moonshine_language(voice_language, detected_language)
30
-
31
- # Get voice instance from kwargs or create new one.
32
35
  voice_instance = kwargs.get("voice_instance")
36
+ owns_voice = voice_instance is None
33
37
 
34
- if not voice_instance:
38
+ if owns_voice:
35
39
  try:
36
40
  import moonshine_voice # noqa: F401
37
41
  except ImportError:
@@ -51,50 +55,50 @@ class VoiceCommand(BaseCommand):
51
55
  return format_command_result(io, "voice", "Sound device error")
52
56
 
53
57
  def on_text(partial):
54
- # Stream partial transcripts into the input field as they are generated.
55
- if coder.tui and coder.tui():
56
- coder.tui().set_input_value(partial)
57
- coder.tui().refresh()
58
+ if tui is not None:
59
+ tui.set_input_value(partial)
60
+ tui.refresh()
58
61
  else:
59
62
  io.placeholder = partial
60
63
 
61
64
  def on_status(message):
62
- # Surface worker status messages (recording/transcribing) in the TUI.
63
- if coder.tui and coder.tui():
64
- if "Recording..." in str(message) or "Transcribing..." in str(message):
65
- io.update_spinner((message or "").strip())
65
+ if tui is not None:
66
+ if "⬤ recording" in str(message) or "⬤ Transcribing" in str(message):
67
+ tui.set_voice_hint((message or "").strip())
66
68
  else:
67
69
  io.tool_output((message or "").strip())
68
70
  else:
69
71
  io.tool_output(message or "")
70
72
 
71
- stop_binding = None
72
- if coder.tui and coder.tui():
73
- try:
74
- stop_binding = coder.tui().get_keys_for("submit")
75
- except Exception:
76
- stop_binding = None
73
+ stop_binding = tui.get_keys_for("voice") if tui is not None else None
77
74
 
78
75
  try:
79
- io.update_spinner("Recording...")
76
+ if tui is not None:
77
+ tui.set_voice_hint("⬤ recording")
78
+ else:
79
+ io.update_spinner("⬤ recording")
80
80
  text = await voice_instance.record_and_transcribe(
81
81
  None,
82
82
  language=resolved_language,
83
83
  on_text=on_text,
84
84
  on_status=on_status,
85
85
  stop_binding=stop_binding,
86
+ stop_queue=stop_queue,
86
87
  )
87
88
  except Exception as err:
88
89
  io.tool_error(f"Unable to transcribe: {err}")
89
90
  return format_command_result(io, "voice", f"Transcription error: {err}")
91
+ finally:
92
+ if owns_voice:
93
+ voice_instance.close()
90
94
 
91
95
  if text:
92
96
  io.placeholder = text
93
97
 
94
- if coder.tui and coder.tui():
95
- coder.tui().set_input_value(text)
96
- coder.tui().refresh()
97
- return "" # For the TUI the result is already in the input field!
98
+ if tui is not None:
99
+ tui.set_input_value(text)
100
+ tui.refresh()
101
+ return ""
98
102
 
99
103
  return format_command_result(io, "voice", "Voice recorded and transcribed")
100
104
 
@@ -114,6 +118,11 @@ class VoiceCommand(BaseCommand):
114
118
  " using the Moonshine on-device model. The language is resolved from your"
115
119
  " /voice-language setting, falling back to your chat language, then English.\n"
116
120
  )
121
+ help_text += (
122
+ "\nIn the TUI, use the voice shortcut (Ctrl+R by default) to start and stop"
123
+ " background recording. /voice also toggles recording. Outside the TUI,"
124
+ " press Enter to stop.\n"
125
+ )
117
126
  help_text += "Requirements:\n"
118
127
  help_text += " - moonshine-voice, sounddevice, and soundfile Python packages\n"
119
128
  help_text += " - PortAudio library installed (for sounddevice)\n"
@@ -617,6 +617,10 @@ class AgentService:
617
617
  parent_uuid=parent_coder.uuid,
618
618
  map_tokens=0,
619
619
  init_metadata={"agent_config": agent_config},
620
+ # Sub-agents start with an empty file context; rules are inherited.
621
+ fnames=[],
622
+ read_only_fnames=[],
623
+ read_only_stubs_fnames=[],
620
624
  )
621
625
  if configured_root:
622
626
  kwargs["root"] = configured_root
@@ -43,14 +43,17 @@ class CircularBuffer:
43
43
  self.total_added = 0 # Track total characters added for new output detection
44
44
 
45
45
  def append(self, text: str) -> None:
46
- """
47
- Add text to buffer, removing oldest content if exceeds max size.
46
+ """Append text, retaining only the newest ``max_size`` characters.
48
47
 
49
- Args:
50
- text: Text to append to buffer
48
+ Store individual characters so the deque limit measures characters, not
49
+ output chunks. Slice oversized inputs before extending to avoid processing
50
+ characters that would immediately be evicted. Track all received characters
51
+ in ``total_added`` so incremental read positions survive eviction.
51
52
  """
52
53
  with self.lock:
53
- self.buffer.append(text)
54
+ if self.max_size:
55
+ self.buffer.extend(text[-self.max_size :])
56
+
54
57
  self.total_added += len(text)
55
58
 
56
59
  def get_all(self, clear: bool = False) -> str:
@@ -100,7 +103,7 @@ class CircularBuffer:
100
103
  def size(self) -> int:
101
104
  """Get current buffer size in characters."""
102
105
  with self.lock:
103
- return sum(len(chunk) for chunk in self.buffer)
106
+ return len(self.buffer)
104
107
 
105
108
 
106
109
  class InputBuffer: