cecli-dev 0.99.8__tar.gz → 0.99.10__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 (624) hide show
  1. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/agent_coder.py +31 -11
  5. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/base_coder.py +95 -53
  6. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/__init__.py +9 -0
  7. cecli_dev-0.99.10/cecli/commands/exclude_skill.py +72 -0
  8. cecli_dev-0.99.10/cecli/commands/include_skill.py +72 -0
  9. cecli_dev-0.99.10/cecli/commands/list_skills.py +51 -0
  10. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_mcp.py +41 -21
  11. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_session.py +1 -1
  12. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_skill.py +0 -1
  13. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_mcp.py +40 -19
  14. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_skill.py +0 -1
  15. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/helpers.py +2 -2
  16. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/files.py +20 -14
  17. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/integration.py +52 -11
  18. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/manager.py +28 -0
  19. cecli_dev-0.99.10/cecli/helpers/coroutines.py +45 -0
  20. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashpos/hashpos.py +50 -8
  21. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/skills.py +281 -0
  22. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/io.py +2 -0
  23. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/main.py +4 -1
  24. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/models.py +10 -2
  25. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/agent.yml +5 -2
  26. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/repo.py +23 -1
  27. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/sessions.py +95 -3
  28. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/__init__.py +2 -2
  29. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/command.py +9 -0
  30. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/context_manager.py +15 -15
  31. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/edit_text.py +10 -10
  32. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/grep.py +2 -1
  33. cecli_dev-0.99.8/cecli/tools/get_lines.py → cecli_dev-0.99.10/cecli/tools/read_range.py +96 -68
  34. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/base_tool.py +2 -1
  35. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/helpers.py +5 -5
  36. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/app.py +10 -1
  37. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/PKG-INFO +1 -1
  38. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/SOURCES.txt +6 -2
  39. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sessions.py +112 -1
  40. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_get_lines.py +7 -5
  41. cecli_dev-0.99.10/tests/tui/test_app.py +37 -0
  42. cecli_dev-0.99.8/cecli/helpers/coroutines.py +0 -8
  43. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.dockerignore +0 -0
  44. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.flake8 +0 -0
  45. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.gitattributes +0 -0
  46. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  47. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/check_pypi_version.yml +0 -0
  48. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/docker-build-test.yml +0 -0
  49. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/docker-release.yml +0 -0
  50. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/issues.yml +0 -0
  51. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/pages.yml +0 -0
  52. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/pre-commit.yml +0 -0
  53. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/release.yml +0 -0
  54. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/ubuntu-tests.yml +0 -0
  55. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/windows-tests.yml +0 -0
  56. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/windows_check_pypi_version.yml +0 -0
  57. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.gitignore +0 -0
  58. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.pre-commit-config.yaml +0 -0
  59. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CHANGELOG.md +0 -0
  60. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CNAME +0 -0
  61. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CONTRIBUTING.md +0 -0
  62. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/HISTORY.md +0 -0
  63. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/LICENSE.txt +0 -0
  64. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/MANIFEST.in +0 -0
  65. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/README.md +0 -0
  66. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/Dockerfile +0 -0
  67. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/README.md +0 -0
  68. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/__init__.py +0 -0
  69. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/benchmark.py +0 -0
  70. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/benchmark_classic.py +0 -0
  71. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/clone-exercism.sh +0 -0
  72. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/cpp-test.sh +0 -0
  73. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/docker.sh +0 -0
  74. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/docker_build.sh +0 -0
  75. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/install-docker-ubuntu.sh +0 -0
  76. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/npm-test.sh +0 -0
  77. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/over_time.py +0 -0
  78. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/plot.sh +0 -0
  79. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/plots.py +0 -0
  80. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/problem_stats.py +0 -0
  81. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/prompts.py +0 -0
  82. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/refactor_tools.py +0 -0
  83. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/rsync.sh +0 -0
  84. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/rungrid.py +0 -0
  85. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe-bench-lite.txt +0 -0
  86. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe-bench.txt +0 -0
  87. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe_bench.py +0 -0
  88. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/test_benchmark.py +0 -0
  89. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.1.sh +0 -0
  90. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.2.sh +0 -0
  91. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.3.sh +0 -0
  92. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.4.sh +0 -0
  93. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/__main__.py +0 -0
  94. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/args.py +0 -0
  95. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/args_formatter.py +0 -0
  96. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/change_tracker.py +0 -0
  97. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/__init__.py +0 -0
  98. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/architect_coder.py +0 -0
  99. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/ask_coder.py +0 -0
  100. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/chat_chunks.py +0 -0
  101. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/context_coder.py +0 -0
  102. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/copypaste_coder.py +0 -0
  103. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_coder.py +0 -0
  104. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_fenced_coder.py +0 -0
  105. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_func_coder.py +0 -0
  106. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  107. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_editblock_coder.py +0 -0
  108. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_whole_coder.py +0 -0
  109. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/hashline_coder.py +0 -0
  110. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/help_coder.py +0 -0
  111. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/patch_coder.py +0 -0
  112. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/search_replace.py +0 -0
  113. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/shell.py +0 -0
  114. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/single_wholefile_func_coder.py +0 -0
  115. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/udiff_coder.py +0 -0
  116. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/udiff_simple.py +0 -0
  117. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/wholefile_coder.py +0 -0
  118. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/wholefile_func_coder.py +0 -0
  119. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/add.py +0 -0
  120. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/agent.py +0 -0
  121. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/agent_model.py +0 -0
  122. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/architect.py +0 -0
  123. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/ask.py +0 -0
  124. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/chat_mode.py +0 -0
  125. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/clear.py +0 -0
  126. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/code.py +0 -0
  127. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/command_prefix.py +0 -0
  128. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/commit.py +0 -0
  129. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/compact.py +0 -0
  130. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context.py +0 -0
  131. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context_blocks.py +0 -0
  132. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context_management.py +0 -0
  133. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/copy.py +0 -0
  134. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/copy_context.py +0 -0
  135. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/core.py +0 -0
  136. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/diff.py +0 -0
  137. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/drop.py +0 -0
  138. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/editor.py +0 -0
  139. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/editor_model.py +0 -0
  140. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/exit.py +0 -0
  141. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/git.py +0 -0
  142. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/hashline.py +0 -0
  143. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/help.py +0 -0
  144. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/history_search.py +0 -0
  145. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/hooks.py +0 -0
  146. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/lint.py +0 -0
  147. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/list_sessions.py +0 -0
  148. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load.py +0 -0
  149. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_hook.py +0 -0
  150. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/ls.py +0 -0
  151. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/map.py +0 -0
  152. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/map_refresh.py +0 -0
  153. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/model.py +0 -0
  154. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/models.py +0 -0
  155. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/multiline_mode.py +0 -0
  156. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/paste.py +0 -0
  157. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/quit.py +0 -0
  158. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/read_only.py +0 -0
  159. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/read_only_stub.py +0 -0
  160. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/reasoning_effort.py +0 -0
  161. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_hook.py +0 -0
  162. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/report.py +0 -0
  163. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/reset.py +0 -0
  164. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/rules.py +0 -0
  165. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/run.py +0 -0
  166. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/save.py +0 -0
  167. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/save_session.py +0 -0
  168. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/settings.py +0 -0
  169. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/terminal_data/linux.keytab +0 -0
  170. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/terminal_setup.py +0 -0
  171. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/test.py +0 -0
  172. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/think_tokens.py +0 -0
  173. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/tokens.py +0 -0
  174. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/undo.py +0 -0
  175. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/__init__.py +0 -0
  176. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/base_command.py +0 -0
  177. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/registry.py +0 -0
  178. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/save_load_manager.py +0 -0
  179. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/voice.py +0 -0
  180. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/weak_model.py +0 -0
  181. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/web.py +0 -0
  182. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/workspace.py +0 -0
  183. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/deprecated_args.py +0 -0
  184. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/diffs.py +0 -0
  185. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/dump.py +0 -0
  186. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/editor.py +0 -0
  187. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/exceptions.py +0 -0
  188. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/format_settings.py +0 -0
  189. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/help.py +0 -0
  190. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/help_pats.py +0 -0
  191. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/__init__.py +0 -0
  192. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/background_commands.py +0 -0
  193. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/command_parser.py +0 -0
  194. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/__init__.py +0 -0
  195. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/base_message.py +0 -0
  196. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/service.py +0 -0
  197. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/tags.py +0 -0
  198. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/utils.py +0 -0
  199. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/copypaste.py +0 -0
  200. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/file_searcher.py +0 -0
  201. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/__init__.py +0 -0
  202. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/dump.py +0 -0
  203. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  204. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/main.py +0 -0
  205. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/parsers.py +0 -0
  206. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/tsl.py +0 -0
  207. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashline.py +0 -0
  208. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashpos/__init__.py +0 -0
  209. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/leak_detect.py +0 -0
  210. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/model_providers.py +0 -0
  211. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/__init__.py +0 -0
  212. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/config.py +0 -0
  213. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/project.py +0 -0
  214. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/workspace.py +0 -0
  215. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/worktree.py +0 -0
  216. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/nested.py +0 -0
  217. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/observations/__init__.py +0 -0
  218. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/observations/manager.py +0 -0
  219. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/plugin_manager.py +0 -0
  220. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/profiler.py +0 -0
  221. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/requests.py +0 -0
  222. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/responses.py +0 -0
  223. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/similarity.py +0 -0
  224. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/history.py +0 -0
  225. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/__init__.py +0 -0
  226. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/base.py +0 -0
  227. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/integration.py +0 -0
  228. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/manager.py +0 -0
  229. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/registry.py +0 -0
  230. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/types.py +0 -0
  231. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/interruptible_input.py +0 -0
  232. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/linter.py +0 -0
  233. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/llm.py +0 -0
  234. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/__init__.py +0 -0
  235. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/manager.py +0 -0
  236. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/oauth.py +0 -0
  237. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/server.py +0 -0
  238. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/utils.py +0 -0
  239. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mdstream.py +0 -0
  240. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/onboarding.py +0 -0
  241. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/__init__.py +0 -0
  242. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/architect.yml +0 -0
  243. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/ask.yml +0 -0
  244. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/base.yml +0 -0
  245. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/context.yml +0 -0
  246. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/copypaste.yml +0 -0
  247. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock.yml +0 -0
  248. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock_fenced.yml +0 -0
  249. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock_func.yml +0 -0
  250. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_diff_fenced.yml +0 -0
  251. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_editblock.yml +0 -0
  252. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_whole.yml +0 -0
  253. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/hashline.yml +0 -0
  254. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/help.yml +0 -0
  255. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/patch.yml +0 -0
  256. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/single_wholefile_func.yml +0 -0
  257. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/udiff.yml +0 -0
  258. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/udiff_simple.yml +0 -0
  259. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/__init__.py +0 -0
  260. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/registry.py +0 -0
  261. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/system.py +0 -0
  262. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/wholefile.yml +0 -0
  263. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/wholefile_func.yml +0 -0
  264. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  265. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  266. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  267. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  268. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  269. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  270. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  271. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  272. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  273. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  274. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  275. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  276. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  277. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  278. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  279. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  280. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  281. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  282. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  283. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  284. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  285. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  286. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  287. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  288. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  289. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  290. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  291. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  292. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  293. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  294. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  295. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/README.md +0 -0
  296. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  297. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  298. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  299. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  300. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  301. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  302. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  303. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  304. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  305. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  306. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  307. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  308. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  309. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  310. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  311. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  312. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  313. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  314. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  315. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  316. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  317. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  318. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  319. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  320. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  321. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  322. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/reasoning_tags.py +0 -0
  323. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/repomap.py +0 -0
  324. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/report.py +0 -0
  325. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/__init__.py +0 -0
  326. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/model-metadata.json +0 -0
  327. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/model-settings.yml +0 -0
  328. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/providers.json +0 -0
  329. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/run_cmd.py +0 -0
  330. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/scrape.py +0 -0
  331. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/sendchat.py +0 -0
  332. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/special.py +0 -0
  333. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/command_interactive.py +0 -0
  334. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/explore_code.py +0 -0
  335. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/finished.py +0 -0
  336. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_branch.py +0 -0
  337. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_diff.py +0 -0
  338. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_log.py +0 -0
  339. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_remote.py +0 -0
  340. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_show.py +0 -0
  341. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_status.py +0 -0
  342. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/load_skill.py +0 -0
  343. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/ls.py +0 -0
  344. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/remove_skill.py +0 -0
  345. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/thinking.py +0 -0
  346. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/undo_change.py +0 -0
  347. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/update_todo_list.py +0 -0
  348. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/output.py +0 -0
  349. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/registry.py +0 -0
  350. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/__init__.py +0 -0
  351. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/io.py +0 -0
  352. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/styles.tcss +0 -0
  353. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/__init__.py +0 -0
  354. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/completion_bar.py +0 -0
  355. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/file_list.py +0 -0
  356. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/footer.py +0 -0
  357. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/input_area.py +0 -0
  358. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/input_container.py +0 -0
  359. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/key_hints.py +0 -0
  360. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/output.py +0 -0
  361. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/status_bar.py +0 -0
  362. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/worker.py +0 -0
  363. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/urls.py +0 -0
  364. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/utils.py +0 -0
  365. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/versioncheck.py +0 -0
  366. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/voice.py +0 -0
  367. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/waiting.py +0 -0
  368. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/watch.py +0 -0
  369. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/watch_prompts.py +0 -0
  370. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/Gemfile +0 -0
  371. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/blame.md +0 -0
  372. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/get-started.md +0 -0
  373. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/help-tip.md +0 -0
  374. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/help.md +0 -0
  375. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/install.md +0 -0
  376. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/keys.md +0 -0
  377. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/model-warnings.md +0 -0
  378. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/multi-line.md +0 -0
  379. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/python-m-aider.md +0 -0
  380. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/recording.css +0 -0
  381. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/recording.md +0 -0
  382. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/works-best.md +0 -0
  383. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_features.scss +0 -0
  384. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_footer.scss +0 -0
  385. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_hero.scss +0 -0
  386. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_info.scss +0 -0
  387. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_layout.scss +0 -0
  388. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_reset.scss +0 -0
  389. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_testimonials.scss +0 -0
  390. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_typography.scss +0 -0
  391. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_variables.scss +0 -0
  392. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/custom/custom.scss +0 -0
  393. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/global-overrides.scss +0 -0
  394. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/adv-model-settings.md +0 -0
  395. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/agent-mode.md +0 -0
  396. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/aider_conf.md +0 -0
  397. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/api-keys.md +0 -0
  398. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-commands.md +0 -0
  399. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  400. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/dotenv.md +0 -0
  401. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/editor.md +0 -0
  402. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/hooks.md +0 -0
  403. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/mcp.md +0 -0
  404. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/model-aliases.md +0 -0
  405. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/options.md +0 -0
  406. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/reasoning.md +0 -0
  407. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/security.md +0 -0
  408. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/skills.md +0 -0
  409. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/tui.md +0 -0
  410. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/workspaces.md +0 -0
  411. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config.md +0 -0
  412. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/faq.md +0 -0
  413. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/git.md +0 -0
  414. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/index.md +0 -0
  415. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install/docker.md +0 -0
  416. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install/optional.md +0 -0
  417. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install.md +0 -0
  418. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/languages.md +0 -0
  419. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  420. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/legal/privacy.md +0 -0
  421. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/anthropic.md +0 -0
  422. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/azure.md +0 -0
  423. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/bedrock.md +0 -0
  424. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/cohere.md +0 -0
  425. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/deepseek.md +0 -0
  426. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/gemini.md +0 -0
  427. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/github.md +0 -0
  428. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/groq.md +0 -0
  429. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/lm-studio.md +0 -0
  430. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/ollama.md +0 -0
  431. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai-compat.md +0 -0
  432. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai.md +0 -0
  433. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openrouter.md +0 -0
  434. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/other.md +0 -0
  435. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/vertex.md +0 -0
  436. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/warnings.md +0 -0
  437. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/xai.md +0 -0
  438. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms.md +0 -0
  439. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/analytics.md +0 -0
  440. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/edit-formats.md +0 -0
  441. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/infinite-output.md +0 -0
  442. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more-info.md +0 -0
  443. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/repomap.md +0 -0
  444. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/scripting.md +0 -0
  445. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  446. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  447. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/imports.md +0 -0
  448. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  449. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/support.md +0 -0
  450. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  451. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  452. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting.md +0 -0
  453. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/commands.md +0 -0
  454. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/conventions.md +0 -0
  455. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/copypaste.md +0 -0
  456. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/images-urls.md +0 -0
  457. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/lint-test.md +0 -0
  458. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/modes.md +0 -0
  459. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/not-code.md +0 -0
  460. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/notifications.md +0 -0
  461. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/sessions.md +0 -0
  462. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/tips.md +0 -0
  463. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/voice.md +0 -0
  464. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/watch.md +0 -0
  465. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage.md +0 -0
  466. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/share/index.md +0 -0
  467. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/dependency_links.txt +0 -0
  468. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/entry_points.txt +0 -0
  469. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/requires.txt +0 -0
  470. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/top_level.txt +0 -0
  471. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/docker/Dockerfile +0 -0
  472. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  473. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/pyproject.toml +0 -0
  474. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/pytest.ini +0 -0
  475. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/common-constraints.txt +0 -0
  476. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-dev.in +0 -0
  477. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-dev.txt +0 -0
  478. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-help.in +0 -0
  479. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-help.txt +0 -0
  480. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-playwright.in +0 -0
  481. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-playwright.txt +0 -0
  482. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements.in +0 -0
  483. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/tree-sitter.in +0 -0
  484. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements.txt +0 -0
  485. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/30k-image.py +0 -0
  486. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/Dockerfile.jekyll +0 -0
  487. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/__init__.py +0 -0
  488. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/blame.py +0 -0
  489. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/clean_metadata.py +0 -0
  490. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/cost_analyzer.py +0 -0
  491. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/dl_icons.py +0 -0
  492. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/filter-chat-mode.js +0 -0
  493. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/generate_providers.py +0 -0
  494. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/get_contributor_list.js +0 -0
  495. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/get_hashline.py +0 -0
  496. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/history_prompts.py +0 -0
  497. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/homepage.py +0 -0
  498. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/issues.py +0 -0
  499. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/jekyll_build.sh +0 -0
  500. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/jekyll_run.sh +0 -0
  501. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/logo_svg.py +0 -0
  502. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/pip-compile.sh +0 -0
  503. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/recording_audio.py +0 -0
  504. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/redact-cast.py +0 -0
  505. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/rename_to_cecli.py +0 -0
  506. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/tmux_record.sh +0 -0
  507. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/tsl_pack_langs.py +0 -0
  508. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-blame.sh +0 -0
  509. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-docs.sh +0 -0
  510. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-history.py +0 -0
  511. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/versionbump.py +0 -0
  512. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/yank-old-versions.py +0 -0
  513. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/setup.cfg +0 -0
  514. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/shim.pyproject.toml +0 -0
  515. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/__init__.py +0 -0
  516. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/__init__.py +0 -0
  517. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_aws_credentials.py +0 -0
  518. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_background_commands.py +0 -0
  519. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_coder.py +0 -0
  520. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_commands.py +0 -0
  521. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_custom_commands.py +0 -0
  522. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_deprecated.py +0 -0
  523. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_editblock.py +0 -0
  524. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_editor.py +0 -0
  525. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_exceptions.py +0 -0
  526. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_find_or_blocks.py +0 -0
  527. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_hashline.py +0 -0
  528. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_history.py +0 -0
  529. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_io.py +0 -0
  530. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_linter.py +0 -0
  531. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_main.py +0 -0
  532. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_model_info_manager.py +0 -0
  533. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_model_provider_manager.py +0 -0
  534. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_models.py +0 -0
  535. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_onboarding.py +0 -0
  536. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_plugin_manager.py +0 -0
  537. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_prompts.py +0 -0
  538. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_reasoning.py +0 -0
  539. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_repo.py +0 -0
  540. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_repomap.py +0 -0
  541. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_run_cmd.py +0 -0
  542. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sanity_check_repo.py +0 -0
  543. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_scripting.py +0 -0
  544. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sendchat.py +0 -0
  545. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_skills.py +0 -0
  546. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_special.py +0 -0
  547. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_ssl_verification.py +0 -0
  548. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_udiff.py +0 -0
  549. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_urls.py +0 -0
  550. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_voice.py +0 -0
  551. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_watch.py +0 -0
  552. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_wholefile.py +0 -0
  553. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/coders/test_copypaste_coder.py +0 -0
  554. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conftest.py +0 -0
  555. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conversations/test_conversation_integration.py +0 -0
  556. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conversations/test_conversation_system.py +0 -0
  557. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  558. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/chat-history.md +0 -0
  559. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/arduino/test.ino +0 -0
  560. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/c/test.c +0 -0
  561. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/chatito/test.chatito +0 -0
  562. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/clojure/test.clj +0 -0
  563. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  564. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/cpp/test.cpp +0 -0
  565. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/csharp/test.cs +0 -0
  566. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/d/test.d +0 -0
  567. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/dart/test.dart +0 -0
  568. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elisp/test.el +0 -0
  569. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elixir/test.ex +0 -0
  570. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elm/test.elm +0 -0
  571. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/gleam/test.gleam +0 -0
  572. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/go/test.go +0 -0
  573. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/haskell/test.hs +0 -0
  574. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/hcl/test.tf +0 -0
  575. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/java/test.java +0 -0
  576. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/javascript/test.js +0 -0
  577. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/kotlin/test.kt +0 -0
  578. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/lua/test.lua +0 -0
  579. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/matlab/test.m +0 -0
  580. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml/test.ml +0 -0
  581. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  582. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/php/test.php +0 -0
  583. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/pony/test.pony +0 -0
  584. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/properties/test.properties +0 -0
  585. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/python/test.py +0 -0
  586. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ql/test.ql +0 -0
  587. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/r/test.r +0 -0
  588. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/racket/test.rkt +0 -0
  589. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ruby/test.rb +0 -0
  590. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/rust/test.rs +0 -0
  591. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/scala/test.scala +0 -0
  592. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/solidity/test.sol +0 -0
  593. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/swift/test.swift +0 -0
  594. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/tsx/test.tsx +0 -0
  595. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/typescript/test.ts +0 -0
  596. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/udev/test.rules +0 -0
  597. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/zig/test.zig +0 -0
  598. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.js +0 -0
  599. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.py +0 -0
  600. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  601. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.js +0 -0
  602. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.lisp +0 -0
  603. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.py +0 -0
  604. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch_question.js +0 -0
  605. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/help/test_help.py +0 -0
  606. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config.py +0 -0
  607. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config_active.py +0 -0
  608. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  609. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  610. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_workspace.py +0 -0
  611. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/observations/test_observation_manager.py +0 -0
  612. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/__init__.py +0 -0
  613. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_base.py +0 -0
  614. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_manager.py +0 -0
  615. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_registry.py +0 -0
  616. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/mcp/__init__.py +0 -0
  617. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/mcp/test_manager.py +0 -0
  618. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/scrape/test_playwright_disable.py +0 -0
  619. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/scrape/test_scrape.py +0 -0
  620. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_git_branch.py +0 -0
  621. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_git_diff.py +0 -0
  622. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_grep.py +0 -0
  623. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_insert_block.py +0 -0
  624. {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.8
3
+ Version: 0.99.10
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.99.7.dev"
3
+ __version__ = "0.99.10.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.99.8'
22
- __version_tuple__ = version_tuple = (0, 99, 8)
21
+ __version__ = version = '0.99.10'
22
+ __version_tuple__ = version_tuple = (0, 99, 10)
23
23
 
24
- __commit_id__ = commit_id = 'g2e022d0e6'
24
+ __commit_id__ = commit_id = 'gdd5ec67da'
@@ -31,6 +31,8 @@ from cecli.utils import copy_tool_call, tool_call_to_dict
31
31
 
32
32
  from .base_coder import Coder
33
33
 
34
+ from cecli.helpers.coroutines import interruptible # isort:skip
35
+
34
36
 
35
37
  class AgentCoder(Coder):
36
38
  """Mode where the LLM autonomously manages which files are in context."""
@@ -42,6 +44,9 @@ class AgentCoder(Coder):
42
44
  stop_on_empty = False
43
45
 
44
46
  def __init__(self, *args, **kwargs):
47
+ if kwargs.get("uuid", None):
48
+ self.uuid = kwargs.get("uuid")
49
+
45
50
  self.recently_removed = {}
46
51
  self.tool_usage_history = []
47
52
  self.loaded_custom_tools = []
@@ -55,7 +60,7 @@ class AgentCoder(Coder):
55
60
  "commandinteractive",
56
61
  "explorecode",
57
62
  "ls",
58
- "getlines",
63
+ "readrange",
59
64
  "grep",
60
65
  "thinking",
61
66
  "updatetodolist",
@@ -301,8 +306,23 @@ class AgentCoder(Coder):
301
306
  else:
302
307
  all_results_content.append(f"Error: Unknown tool name '{tool_name}'")
303
308
  if tasks:
304
- task_results = await asyncio.gather(*tasks)
305
- all_results_content.extend(str(res) for res in task_results)
309
+
310
+ async def gather_and_await():
311
+ return await asyncio.gather(*tasks, return_exceptions=True)
312
+
313
+ task_results, interrupted = await interruptible(
314
+ gather_and_await(), self.interrupt_event
315
+ )
316
+
317
+ if interrupted:
318
+ self.io.tool_warning("Tool execution interrupted.")
319
+ all_results_content.append("Tool execution interrupted by user.")
320
+ elif task_results:
321
+ for res in task_results:
322
+ if isinstance(res, Exception):
323
+ all_results_content.append(f"Error in tool execution: {res}")
324
+ else:
325
+ all_results_content.append(str(res))
306
326
 
307
327
  if not await HookIntegration.call_post_tool_hooks(
308
328
  self, tool_name, args_string, "\n\n".join(all_results_content)
@@ -393,7 +413,11 @@ class AgentCoder(Coder):
393
413
  """)
394
414
  return f"Error executing tool call {tool_name}: {e}"
395
415
 
396
- return await _exec_async()
416
+ result, interrupted = await interruptible(_exec_async(), self.interrupt_event)
417
+
418
+ if interrupted:
419
+ return "Tool execution interrupted by user."
420
+ return result
397
421
 
398
422
  def _calculate_context_block_tokens(self, force=False):
399
423
  """
@@ -618,9 +642,7 @@ class AgentCoder(Coder):
618
642
  total_file_tokens += tokens
619
643
  editable_tokens += tokens
620
644
  size_indicator = (
621
- "🔴 Large"
622
- if tokens > 5000
623
- else "🟡 Medium" if tokens > 1000 else "🟢 Small"
645
+ "Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
624
646
  )
625
647
  editable_files.append(
626
648
  f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
@@ -642,9 +664,7 @@ class AgentCoder(Coder):
642
664
  total_file_tokens += tokens
643
665
  readonly_tokens += tokens
644
666
  size_indicator = (
645
- "🔴 Large"
646
- if tokens > 5000
647
- else "🟡 Medium" if tokens > 1000 else "🟢 Small"
667
+ "Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
648
668
  )
649
669
  readonly_files.append(
650
670
  f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
@@ -999,7 +1019,7 @@ I will proceed based on the tool results and updated context.""")
999
1019
  context_parts.append("\n\n")
1000
1020
  context_parts.append("## File Editing Tools Disabled")
1001
1021
  context_parts.append(
1002
- "File editing tools are currently disabled.Use `GetLines` to determine the"
1022
+ "File editing tools are currently disabled.Use `ReadRange` to determine the"
1003
1023
  " current hashline prefixes needed to perform an edit and activate them when you"
1004
1024
  " are ready to edit a file."
1005
1025
  )
@@ -139,6 +139,12 @@ class Coder:
139
139
  partial_response_tool_calls = []
140
140
  commit_before_message = []
141
141
  message_cost = 0.0
142
+ total_tokens_sent = 0
143
+ total_tokens_received = 0
144
+ total_cached_tokens = 0
145
+ message_tokens_sent = 0
146
+ message_tokens_received = 0
147
+ message_cached_tokens = 0
142
148
  add_cache_headers = False
143
149
  cache_warming_thread = None
144
150
  num_cache_warming_pings = 0
@@ -227,6 +233,7 @@ class Coder:
227
233
  ignore_mentions=from_coder.ignore_mentions,
228
234
  total_tokens_sent=from_coder.total_tokens_sent,
229
235
  total_tokens_received=from_coder.total_tokens_received,
236
+ total_cached_tokens=from_coder.total_cached_tokens,
230
237
  file_watcher=from_coder.file_watcher,
231
238
  mcp_manager=from_coder.mcp_manager,
232
239
  uuid=from_coder.uuid,
@@ -316,6 +323,7 @@ class Coder:
316
323
  ignore_mentions=None,
317
324
  total_tokens_sent=0,
318
325
  total_tokens_received=0,
326
+ total_cached_tokens=0,
319
327
  file_watcher=None,
320
328
  auto_copy_context=False,
321
329
  auto_accept_architect=True,
@@ -331,6 +339,7 @@ class Coder:
331
339
  ):
332
340
  # initialize from args.map_cache_dir
333
341
  self.interrupt_event = asyncio.Event()
342
+ self.coroutines = coroutines
334
343
  self.uuid = generate_unique_id()
335
344
  if uuid:
336
345
  self.uuid = uuid
@@ -388,8 +397,10 @@ class Coder:
388
397
  self.total_cost = total_cost
389
398
  self.total_tokens_sent = total_tokens_sent
390
399
  self.total_tokens_received = total_tokens_received
400
+ self.total_cached_tokens = total_cached_tokens
391
401
  self.message_tokens_sent = 0
392
402
  self.message_tokens_received = 0
403
+ self.message_cached_tokens = 0
393
404
 
394
405
  self.token_profiler = TokenProfiler(
395
406
  enable_printing=nested.getter(self.args, "show_speed", False)
@@ -1370,11 +1381,6 @@ class Coder:
1370
1381
  except (SwitchCoderSignal, SystemExit):
1371
1382
  # Re-raise SwitchCoder to be handled by outer try block
1372
1383
  raise
1373
- except KeyboardInterrupt:
1374
- # Handle keyboard interrupt gracefully
1375
- self.io.set_placeholder("")
1376
- self.io.stop_spinner()
1377
- self.keyboard_interrupt()
1378
1384
  finally:
1379
1385
  # Signal tasks to stop
1380
1386
  self.input_running = False
@@ -1454,10 +1460,6 @@ class Coder:
1454
1460
 
1455
1461
  await asyncio.sleep(0.1) # Small yield to prevent tight loop
1456
1462
 
1457
- except KeyboardInterrupt:
1458
- self.io.set_placeholder("")
1459
- self.keyboard_interrupt()
1460
- await self.io.stop_task_streams()
1461
1463
  except (SwitchCoderSignal, SystemExit):
1462
1464
  raise
1463
1465
  except Exception as e:
@@ -1738,8 +1740,7 @@ class Coder:
1738
1740
  # Ensure cursor is visible on exit
1739
1741
  Console().show_cursor(True)
1740
1742
 
1741
- self.io.tool_warning("\n\n^C KeyboardInterrupt")
1742
-
1743
+ self.io.tool_warning("^C KeyboardInterrupt")
1743
1744
  self.interrupt_event.set()
1744
1745
  self.last_keyboard_interrupt = time.time()
1745
1746
 
@@ -2178,6 +2179,8 @@ class Coder:
2178
2179
  # Notify IO that LLM processing is starting
2179
2180
  self.io.llm_started()
2180
2181
 
2182
+ ConversationService.get_manager(self).flush_queue()
2183
+
2181
2184
  if inp:
2182
2185
  # Make sure current coder actually has control of conversation system
2183
2186
  ConversationService.get_chunks(self).initialize_conversation_system()
@@ -2260,9 +2263,16 @@ class Coder:
2260
2263
  self.io.tool_error(err_msg)
2261
2264
 
2262
2265
  self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
2263
- await asyncio.sleep(retry_delay)
2266
+
2267
+ _res, interrupted_sleep = await coroutines.interruptible(
2268
+ asyncio.sleep(retry_delay), self.interrupt_event
2269
+ )
2270
+ if interrupted_sleep:
2271
+ interrupted = True
2272
+ break
2273
+
2264
2274
  continue
2265
- except KeyboardInterrupt:
2275
+ except (KeyboardInterrupt, asyncio.CancelledError):
2266
2276
  interrupted = True
2267
2277
  break
2268
2278
  except FinishReasonLength:
@@ -2627,11 +2637,19 @@ class Coder:
2627
2637
  all_results_content.append("Tool Request Aborted.")
2628
2638
  continue
2629
2639
 
2630
- call_result = await experimental_mcp_client.call_openai_tool(
2631
- session=session,
2632
- openai_tool=new_tool_call,
2640
+ async def do_tool_call():
2641
+ return await experimental_mcp_client.call_openai_tool(
2642
+ session=session,
2643
+ openai_tool=new_tool_call,
2644
+ )
2645
+
2646
+ call_result, interrupted = await coroutines.interruptible(
2647
+ do_tool_call(), self.interrupt_event
2633
2648
  )
2634
2649
 
2650
+ if interrupted:
2651
+ raise KeyboardInterrupt("Tool call interrupted")
2652
+
2635
2653
  content_parts = []
2636
2654
  if call_result.content:
2637
2655
  for item in call_result.content:
@@ -2676,6 +2694,9 @@ class Coder:
2676
2694
  }
2677
2695
  )
2678
2696
 
2697
+ except KeyboardInterrupt:
2698
+ self.io.tool_warning(f"Tool call {tool_call.function.name} interrupted.")
2699
+ raise
2679
2700
  except Exception as e:
2680
2701
  tool_error = f"Error executing tool call {tool_call.function.name}: \n{e}"
2681
2702
  self.io.tool_warning(
@@ -2692,6 +2713,9 @@ class Coder:
2692
2713
  tool_responses.append(
2693
2714
  {"role": "tool", "tool_call_id": tool_call.id, "content": connection_error}
2694
2715
  )
2716
+ except asyncio.CancelledError:
2717
+ # Re-raise CancelledError to ensure the task cancellation propagates
2718
+ raise
2695
2719
  except Exception as e:
2696
2720
  connection_error = f"Could not connect to server {server.name}\n{e}"
2697
2721
  self.io.tool_warning(connection_error)
@@ -2726,7 +2750,15 @@ class Coder:
2726
2750
  return False
2727
2751
 
2728
2752
  # 5. Execute tools
2729
- tool_responses_by_server = await self._execute_tool_groups(tool_groups)
2753
+ self.interrupt_event.clear()
2754
+
2755
+ tool_responses_by_server, interrupted = await coroutines.interruptible(
2756
+ self._execute_tool_groups(tool_groups), self.interrupt_event
2757
+ )
2758
+
2759
+ if interrupted:
2760
+ self.io.tool_warning("Tool execution interrupted.")
2761
+ return False
2730
2762
 
2731
2763
  # 6. Add responses to conversation (re-prefixing if necessary)
2732
2764
  tool_responses = []
@@ -3038,33 +3070,22 @@ class Coder:
3038
3070
  self.token_profiler.start()
3039
3071
 
3040
3072
  try:
3041
- completion_task = asyncio.create_task(
3042
- model.send_completion(
3043
- messages,
3044
- functions,
3045
- self.stream,
3046
- self.temperature,
3047
- # This could include any tools, but for now it is just MCP tools
3048
- tools=tools,
3049
- override_kwargs=self.model_kwargs.copy(),
3050
- )
3073
+ completion_coro = model.send_completion(
3074
+ messages,
3075
+ functions,
3076
+ self.stream,
3077
+ self.temperature,
3078
+ # This could include any tools, but for now it is just MCP tools
3079
+ tools=tools,
3080
+ override_kwargs=self.model_kwargs.copy(),
3081
+ interrupt_event=self.interrupt_event,
3051
3082
  )
3052
- interrupt_task = asyncio.create_task(self.interrupt_event.wait())
3053
3083
 
3054
- done, pending = await asyncio.wait(
3055
- {completion_task, interrupt_task},
3056
- return_when=asyncio.FIRST_COMPLETED,
3084
+ (hash_object, completion), interrupted = await coroutines.interruptible(
3085
+ completion_coro, self.interrupt_event
3057
3086
  )
3058
-
3059
- if interrupt_task in done:
3060
- completion_task.cancel()
3061
- try:
3062
- await completion_task
3063
- except asyncio.CancelledError:
3064
- pass
3087
+ if interrupted:
3065
3088
  raise KeyboardInterrupt
3066
-
3067
- hash_object, completion = completion_task.result()
3068
3089
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3069
3090
 
3070
3091
  if not isinstance(completion, ModelResponse):
@@ -3087,7 +3108,7 @@ class Coder:
3087
3108
  self.token_profiler.on_error()
3088
3109
  self.calculate_and_show_tokens_and_cost(messages, completion)
3089
3110
  raise
3090
- except KeyboardInterrupt as kbi:
3111
+ except (KeyboardInterrupt, asyncio.CancelledError) as kbi:
3091
3112
  self.keyboard_interrupt()
3092
3113
  raise kbi
3093
3114
  finally:
@@ -3496,10 +3517,13 @@ class Coder:
3496
3517
  if completion and hasattr(completion, "usage") and completion.usage is not None:
3497
3518
  prompt_tokens = completion.usage.prompt_tokens
3498
3519
  completion_tokens = completion.usage.completion_tokens
3499
- cache_hit_tokens = getattr(completion.usage, "prompt_cache_hit_tokens", 0) or getattr(
3500
- completion.usage, "cache_read_input_tokens", 0
3520
+ cache_hit_tokens = (
3521
+ getattr(completion.usage, "prompt_cache_hit_tokens", 0)
3522
+ or getattr(completion.usage, "cache_read_input_tokens", 0)
3523
+ or 0
3501
3524
  )
3502
- cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0)
3525
+ cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0) or 0
3526
+ self.message_cached_tokens += cache_hit_tokens
3503
3527
 
3504
3528
  if hasattr(completion.usage, "cache_read_input_tokens") or hasattr(
3505
3529
  completion.usage, "cache_creation_input_tokens"
@@ -3532,8 +3556,22 @@ class Coder:
3532
3556
  tokens_report, self.message_tokens_sent, self.message_tokens_received
3533
3557
  )
3534
3558
 
3559
+ total_combined_tokens = (
3560
+ self.total_tokens_sent
3561
+ + self.total_tokens_received
3562
+ + self.message_tokens_sent
3563
+ + self.message_tokens_received
3564
+ )
3565
+ total_combined_cached = self.total_cached_tokens + self.message_cached_tokens
3566
+
3567
+ total_stats = f"{format_tokens(total_combined_tokens)}"
3568
+ if total_combined_cached:
3569
+ total_stats += f"/{format_tokens(total_combined_cached)}"
3570
+
3571
+ total_stats += " ↑↓"
3572
+
3535
3573
  if not self.get_active_model().info.get("input_cost_per_token"):
3536
- self.usage_report = tokens_report
3574
+ self.usage_report = tokens_report + "\n" + total_stats
3537
3575
  return
3538
3576
 
3539
3577
  try:
@@ -3550,11 +3588,8 @@ class Coder:
3550
3588
  self.total_cost += cost
3551
3589
  self.message_cost += cost
3552
3590
 
3553
- total_combined_tokens = (
3554
- self.total_tokens_sent + self.total_tokens_received + prompt_tokens + completion_tokens
3555
- )
3556
3591
  cost_report = (
3557
- f"${self.format_cost(self.message_cost)} • {format_tokens(total_combined_tokens)} ↑↓"
3592
+ f"${self.format_cost(self.message_cost)} • {total_stats}"
3558
3593
  f" ${self.format_cost(self.total_cost)}"
3559
3594
  )
3560
3595
 
@@ -3612,6 +3647,7 @@ class Coder:
3612
3647
 
3613
3648
  self.total_tokens_sent += self.message_tokens_sent
3614
3649
  self.total_tokens_received += self.message_tokens_received
3650
+ self.total_cached_tokens += self.message_cached_tokens
3615
3651
 
3616
3652
  if self.tui and self.tui():
3617
3653
  self.tui().update_cost(self.usage_report.replace("\n", " "))
@@ -3622,6 +3658,7 @@ class Coder:
3622
3658
  self.message_cost = 0.0
3623
3659
  self.message_tokens_sent = 0
3624
3660
  self.message_tokens_received = 0
3661
+ self.message_cached_tokens = 0
3625
3662
 
3626
3663
  def get_multi_response_content_in_progress(self, final=False):
3627
3664
  cur = self.multi_response_content or ""
@@ -3723,7 +3760,7 @@ class Coder:
3723
3760
  self.check_for_dirty_commit(path)
3724
3761
  return True
3725
3762
 
3726
- if self.repo and self.repo.git_ignored_file(path):
3763
+ if self.repo and self.repo.git_ignored_file(path) and not self.add_gitignore_files:
3727
3764
  self.io.tool_warning(f"Skipping edits to {path} that matches gitignore spec.")
3728
3765
  return
3729
3766
 
@@ -3742,7 +3779,8 @@ class Coder:
3742
3779
  # actually already part of the repo.
3743
3780
  # But let's only add if we need to, just to be safe.
3744
3781
  if need_to_add:
3745
- self.repo.repo.git.add(full_path)
3782
+ if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
3783
+ self.repo.repo.git.add(full_path)
3746
3784
 
3747
3785
  self.abs_fnames.add(full_path)
3748
3786
  self.check_added_files()
@@ -3756,7 +3794,8 @@ class Coder:
3756
3794
  return
3757
3795
 
3758
3796
  if need_to_add:
3759
- self.repo.repo.git.add(full_path)
3797
+ if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
3798
+ self.repo.repo.git.add(full_path)
3760
3799
 
3761
3800
  self.abs_fnames.add(full_path)
3762
3801
  self.check_added_files()
@@ -4003,7 +4042,10 @@ class Coder:
4003
4042
  return edits
4004
4043
 
4005
4044
  def local_agent_folder(self, path):
4006
- os.makedirs(f".cecli/agents/{GLOBAL_DATE}/{self.uuid}", exist_ok=True)
4045
+ os.makedirs(
4046
+ self.abs_root_path(f".cecli/agents/{GLOBAL_DATE}/{self.uuid}"),
4047
+ exist_ok=True,
4048
+ )
4007
4049
 
4008
4050
  stripped = path.lstrip("/")
4009
4051
  return f".cecli/agents/{GLOBAL_DATE}/{self.uuid}/{stripped}"
@@ -25,14 +25,17 @@ from .diff import DiffCommand
25
25
  from .drop import DropCommand
26
26
  from .editor import EditCommand, EditorCommand
27
27
  from .editor_model import EditorModelCommand
28
+ from .exclude_skill import ExcludeSkillCommand
28
29
  from .exit import ExitCommand
29
30
  from .git import GitCommand
30
31
  from .hashline import HashlineCommand
31
32
  from .help import HelpCommand
32
33
  from .history_search import HistorySearchCommand
33
34
  from .hooks import HooksCommand
35
+ from .include_skill import IncludeSkillCommand
34
36
  from .lint import LintCommand
35
37
  from .list_sessions import ListSessionsCommand
38
+ from .list_skills import ListSkillsCommand
36
39
  from .load import LoadCommand
37
40
  from .load_hook import LoadHookCommand
38
41
  from .load_mcp import LoadMcpCommand
@@ -102,14 +105,17 @@ CommandRegistry.register(DropCommand)
102
105
  CommandRegistry.register(EditCommand)
103
106
  CommandRegistry.register(EditorCommand)
104
107
  CommandRegistry.register(EditorModelCommand)
108
+ CommandRegistry.register(ExcludeSkillCommand)
105
109
  CommandRegistry.register(ExitCommand)
106
110
  CommandRegistry.register(GitCommand)
107
111
  CommandRegistry.register(HashlineCommand)
108
112
  CommandRegistry.register(HelpCommand)
109
113
  CommandRegistry.register(HistorySearchCommand)
110
114
  CommandRegistry.register(HooksCommand)
115
+ CommandRegistry.register(IncludeSkillCommand)
111
116
  CommandRegistry.register(LintCommand)
112
117
  CommandRegistry.register(ListSessionsCommand)
118
+ CommandRegistry.register(ListSkillsCommand)
113
119
  CommandRegistry.register(LoadCommand)
114
120
  CommandRegistry.register(LoadHookCommand)
115
121
  CommandRegistry.register(LoadMcpCommand)
@@ -172,6 +178,7 @@ __all__ = [
172
178
  "EditCommand",
173
179
  "EditorCommand",
174
180
  "EditorModelCommand",
181
+ "ExcludeSkillCommand",
175
182
  "ExitCommand",
176
183
  "expand_subdir",
177
184
  "format_command_result",
@@ -182,8 +189,10 @@ __all__ = [
182
189
  "HelpCommand",
183
190
  "HistorySearchCommand",
184
191
  "HookCommand",
192
+ "IncludeSkillCommand",
185
193
  "LintCommand",
186
194
  "ListSessionsCommand",
195
+ "ListSkillsCommand",
187
196
  "LoadCommand",
188
197
  "LoadHookCommand",
189
198
  "LoadMcpCommand",
@@ -0,0 +1,72 @@
1
+ from typing import List
2
+
3
+ from cecli.commands.utils.base_command import BaseCommand
4
+ from cecli.commands.utils.helpers import format_command_result
5
+
6
+
7
+ class ExcludeSkillCommand(BaseCommand):
8
+ NORM_NAME = "exclude-skill"
9
+ DESCRIPTION = "Exclude a skill by name (agent mode only)"
10
+
11
+ @classmethod
12
+ async def execute(cls, io, coder, args, **kwargs):
13
+ """Execute the exclude-skill command with given parameters."""
14
+ if not args.strip():
15
+ io.tool_output("Usage: /exclude-skill <skill-name>")
16
+ return format_command_result(io, "exclude-skill", "Usage: /exclude-skill <skill-name>")
17
+
18
+ skill_names = args.strip().split()
19
+
20
+ # Check if we're in agent mode
21
+ if not hasattr(coder, "edit_format") or coder.edit_format != "agent":
22
+ io.tool_output("Skill exclusion is only available in agent mode.")
23
+ return format_command_result(
24
+ io, "exclude-skill", "Skill exclusion is only available in agent mode"
25
+ )
26
+
27
+ # Check if skills_manager is available
28
+ if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
29
+ io.tool_output("Skills manager is not initialized. Skills may not be configured.")
30
+ # Check if skills directories are configured
31
+ if hasattr(coder, "skills_directory_paths") and not coder.skills_directory_paths:
32
+ io.tool_output(
33
+ "No skills directories configured. Use --skills-paths to configure skill"
34
+ " directories."
35
+ )
36
+ return format_command_result(io, "exclude-skill", "Skills manager is not initialized")
37
+
38
+ results = []
39
+ for skill_name in skill_names:
40
+ # Use the instance method on skills_manager
41
+ result = coder.skills_manager.exclude_skill(skill_name)
42
+ results.append(result)
43
+
44
+ return format_command_result(io, "exclude-skill", "\n".join(results))
45
+
46
+ @classmethod
47
+ def get_completions(cls, io, coder, args) -> List[str]:
48
+ """Get completion options for exclude-skill command."""
49
+ if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
50
+ return []
51
+
52
+ try:
53
+ skills = coder.skills_manager.find_skills()
54
+ return [skill.name for skill in skills]
55
+ except Exception:
56
+ return []
57
+
58
+ @classmethod
59
+ def get_help(cls) -> str:
60
+ """Get help text for the exclude-skill command."""
61
+ help_text = super().get_help()
62
+ help_text += "\nUsage:\n"
63
+ help_text += " /exclude-skill <skill-name>... # Exclude one or more skills by name\n"
64
+ help_text += "\nExamples:\n"
65
+ help_text += " /exclude-skill pdf # Exclude (blacklist) the PDF skill\n"
66
+ help_text += " /exclude-skill web pdf # Exclude both web and PDF skills\n"
67
+ help_text += (
68
+ "\nThis command excludes one or more skills by name, adding them to the blacklist. "
69
+ "Skills are only available in agent mode.\n"
70
+ )
71
+ help_text += "Excluded skills will be hidden from discovery and unavailable for loading.\n"
72
+ return help_text
@@ -0,0 +1,72 @@
1
+ from typing import List
2
+
3
+ from cecli.commands.utils.base_command import BaseCommand
4
+ from cecli.commands.utils.helpers import format_command_result
5
+
6
+
7
+ class IncludeSkillCommand(BaseCommand):
8
+ NORM_NAME = "include-skill"
9
+ DESCRIPTION = "Include a skill by name (agent mode only)"
10
+
11
+ @classmethod
12
+ async def execute(cls, io, coder, args, **kwargs):
13
+ """Execute the include-skill command with given parameters."""
14
+ if not args.strip():
15
+ io.tool_output("Usage: /include-skill <skill-name>")
16
+ return format_command_result(io, "include-skill", "Usage: /include-skill <skill-name>")
17
+
18
+ skill_names = args.strip().split()
19
+
20
+ # Check if we're in agent mode
21
+ if not hasattr(coder, "edit_format") or coder.edit_format != "agent":
22
+ io.tool_output("Skill inclusion is only available in agent mode.")
23
+ return format_command_result(
24
+ io, "include-skill", "Skill inclusion is only available in agent mode"
25
+ )
26
+
27
+ # Check if skills_manager is available
28
+ if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
29
+ io.tool_output("Skills manager is not initialized. Skills may not be configured.")
30
+ # Check if skills directories are configured
31
+ if hasattr(coder, "skills_directory_paths") and not coder.skills_directory_paths:
32
+ io.tool_output(
33
+ "No skills directories configured. Use --skills-paths to configure skill"
34
+ " directories."
35
+ )
36
+ return format_command_result(io, "include-skill", "Skills manager is not initialized")
37
+
38
+ results = []
39
+ for skill_name in skill_names:
40
+ # Use the instance method on skills_manager
41
+ result = coder.skills_manager.include_skill(skill_name)
42
+ results.append(result)
43
+
44
+ return format_command_result(io, "include-skill", "\n".join(results))
45
+
46
+ @classmethod
47
+ def get_completions(cls, io, coder, args) -> List[str]:
48
+ """Get completion options for include-skill command."""
49
+ if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
50
+ return []
51
+
52
+ try:
53
+ skills = coder.skills_manager.find_skills()
54
+ return [skill.name for skill in skills]
55
+ except Exception:
56
+ return []
57
+
58
+ @classmethod
59
+ def get_help(cls) -> str:
60
+ """Get help text for the include-skill command."""
61
+ help_text = super().get_help()
62
+ help_text += "\nUsage:\n"
63
+ help_text += " /include-skill <skill-name>... # Include one or more skills by name\n"
64
+ help_text += "\nExamples:\n"
65
+ help_text += " /include-skill pdf # Include (whitelist) the PDF skill\n"
66
+ help_text += " /include-skill web pdf # Include both web and PDF skills\n"
67
+ help_text += (
68
+ "\nThis command includes one or more skills by name, adding them to the whitelist. "
69
+ "Skills are only available in agent mode.\n"
70
+ )
71
+ help_text += "When a skill is included, only whitelisted skills will be discoverable.\n"
72
+ return help_text