cecli-dev 0.99.9__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.9 → cecli_dev-0.99.10}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/agent_coder.py +29 -5
  5. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/base_coder.py +84 -49
  6. {cecli_dev-0.99.9 → 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.9 → cecli_dev-0.99.10}/cecli/commands/load_mcp.py +41 -21
  11. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/load_skill.py +0 -1
  12. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/remove_mcp.py +40 -19
  13. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/remove_skill.py +0 -1
  14. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/utils/helpers.py +2 -2
  15. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/files.py +20 -14
  16. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/integration.py +49 -8
  17. cecli_dev-0.99.10/cecli/helpers/coroutines.py +45 -0
  18. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/hashpos/hashpos.py +50 -8
  19. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/skills.py +281 -0
  20. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/io.py +2 -0
  21. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/main.py +3 -0
  22. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/models.py +10 -2
  23. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/sessions.py +12 -0
  24. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/__init__.py +2 -2
  25. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/command.py +9 -0
  26. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/context_manager.py +15 -15
  27. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/edit_text.py +1 -1
  28. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/grep.py +2 -1
  29. cecli_dev-0.99.9/cecli/tools/get_lines.py → cecli_dev-0.99.10/cecli/tools/read_range.py +24 -8
  30. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/utils/base_tool.py +2 -1
  31. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/app.py +4 -1
  32. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/PKG-INFO +1 -1
  33. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/SOURCES.txt +4 -1
  34. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_get_lines.py +7 -5
  35. cecli_dev-0.99.9/cecli/helpers/coroutines.py +0 -8
  36. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.dockerignore +0 -0
  37. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.flake8 +0 -0
  38. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.gitattributes +0 -0
  39. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  40. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/check_pypi_version.yml +0 -0
  41. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/docker-build-test.yml +0 -0
  42. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/docker-release.yml +0 -0
  43. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/issues.yml +0 -0
  44. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/pages.yml +0 -0
  45. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/pre-commit.yml +0 -0
  46. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/release.yml +0 -0
  47. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/ubuntu-tests.yml +0 -0
  48. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/windows-tests.yml +0 -0
  49. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.github/workflows/windows_check_pypi_version.yml +0 -0
  50. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.gitignore +0 -0
  51. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/.pre-commit-config.yaml +0 -0
  52. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/CHANGELOG.md +0 -0
  53. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/CNAME +0 -0
  54. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/CONTRIBUTING.md +0 -0
  55. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/HISTORY.md +0 -0
  56. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/LICENSE.txt +0 -0
  57. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/MANIFEST.in +0 -0
  58. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/README.md +0 -0
  59. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/Dockerfile +0 -0
  60. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/README.md +0 -0
  61. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/__init__.py +0 -0
  62. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/benchmark.py +0 -0
  63. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/benchmark_classic.py +0 -0
  64. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/clone-exercism.sh +0 -0
  65. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/cpp-test.sh +0 -0
  66. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/docker.sh +0 -0
  67. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/docker_build.sh +0 -0
  68. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/install-docker-ubuntu.sh +0 -0
  69. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/npm-test.sh +0 -0
  70. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/over_time.py +0 -0
  71. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/plot.sh +0 -0
  72. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/plots.py +0 -0
  73. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/problem_stats.py +0 -0
  74. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/prompts.py +0 -0
  75. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/refactor_tools.py +0 -0
  76. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/rsync.sh +0 -0
  77. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/rungrid.py +0 -0
  78. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/swe-bench-lite.txt +0 -0
  79. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/swe-bench.txt +0 -0
  80. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/swe_bench.py +0 -0
  81. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/test_benchmark.py +0 -0
  82. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/variations.1.sh +0 -0
  83. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/variations.2.sh +0 -0
  84. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/variations.3.sh +0 -0
  85. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/benchmark/variations.4.sh +0 -0
  86. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/__main__.py +0 -0
  87. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/args.py +0 -0
  88. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/args_formatter.py +0 -0
  89. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/change_tracker.py +0 -0
  90. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/__init__.py +0 -0
  91. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/architect_coder.py +0 -0
  92. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/ask_coder.py +0 -0
  93. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/chat_chunks.py +0 -0
  94. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/context_coder.py +0 -0
  95. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/copypaste_coder.py +0 -0
  96. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editblock_coder.py +0 -0
  97. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editblock_fenced_coder.py +0 -0
  98. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editblock_func_coder.py +0 -0
  99. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  100. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editor_editblock_coder.py +0 -0
  101. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/editor_whole_coder.py +0 -0
  102. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/hashline_coder.py +0 -0
  103. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/help_coder.py +0 -0
  104. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/patch_coder.py +0 -0
  105. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/search_replace.py +0 -0
  106. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/shell.py +0 -0
  107. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/single_wholefile_func_coder.py +0 -0
  108. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/udiff_coder.py +0 -0
  109. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/udiff_simple.py +0 -0
  110. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/wholefile_coder.py +0 -0
  111. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/coders/wholefile_func_coder.py +0 -0
  112. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/add.py +0 -0
  113. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/agent.py +0 -0
  114. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/agent_model.py +0 -0
  115. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/architect.py +0 -0
  116. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/ask.py +0 -0
  117. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/chat_mode.py +0 -0
  118. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/clear.py +0 -0
  119. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/code.py +0 -0
  120. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/command_prefix.py +0 -0
  121. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/commit.py +0 -0
  122. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/compact.py +0 -0
  123. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/context.py +0 -0
  124. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/context_blocks.py +0 -0
  125. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/context_management.py +0 -0
  126. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/copy.py +0 -0
  127. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/copy_context.py +0 -0
  128. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/core.py +0 -0
  129. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/diff.py +0 -0
  130. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/drop.py +0 -0
  131. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/editor.py +0 -0
  132. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/editor_model.py +0 -0
  133. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/exit.py +0 -0
  134. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/git.py +0 -0
  135. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/hashline.py +0 -0
  136. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/help.py +0 -0
  137. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/history_search.py +0 -0
  138. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/hooks.py +0 -0
  139. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/lint.py +0 -0
  140. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/list_sessions.py +0 -0
  141. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/load.py +0 -0
  142. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/load_hook.py +0 -0
  143. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/load_session.py +0 -0
  144. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/ls.py +0 -0
  145. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/map.py +0 -0
  146. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/map_refresh.py +0 -0
  147. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/model.py +0 -0
  148. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/models.py +0 -0
  149. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/multiline_mode.py +0 -0
  150. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/paste.py +0 -0
  151. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/quit.py +0 -0
  152. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/read_only.py +0 -0
  153. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/read_only_stub.py +0 -0
  154. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/reasoning_effort.py +0 -0
  155. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/remove_hook.py +0 -0
  156. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/report.py +0 -0
  157. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/reset.py +0 -0
  158. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/rules.py +0 -0
  159. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/run.py +0 -0
  160. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/save.py +0 -0
  161. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/save_session.py +0 -0
  162. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/settings.py +0 -0
  163. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/terminal_data/linux.keytab +0 -0
  164. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/terminal_setup.py +0 -0
  165. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/test.py +0 -0
  166. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/think_tokens.py +0 -0
  167. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/tokens.py +0 -0
  168. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/undo.py +0 -0
  169. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/utils/__init__.py +0 -0
  170. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/utils/base_command.py +0 -0
  171. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/utils/registry.py +0 -0
  172. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/utils/save_load_manager.py +0 -0
  173. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/voice.py +0 -0
  174. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/weak_model.py +0 -0
  175. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/web.py +0 -0
  176. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/commands/workspace.py +0 -0
  177. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/deprecated_args.py +0 -0
  178. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/diffs.py +0 -0
  179. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/dump.py +0 -0
  180. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/editor.py +0 -0
  181. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/exceptions.py +0 -0
  182. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/format_settings.py +0 -0
  183. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/help.py +0 -0
  184. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/help_pats.py +0 -0
  185. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/__init__.py +0 -0
  186. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/background_commands.py +0 -0
  187. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/command_parser.py +0 -0
  188. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/__init__.py +0 -0
  189. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/base_message.py +0 -0
  190. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/manager.py +0 -0
  191. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/service.py +0 -0
  192. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/tags.py +0 -0
  193. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/conversation/utils.py +0 -0
  194. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/copypaste.py +0 -0
  195. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/file_searcher.py +0 -0
  196. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/__init__.py +0 -0
  197. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/dump.py +0 -0
  198. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  199. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/main.py +0 -0
  200. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/parsers.py +0 -0
  201. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/tsl.py +0 -0
  202. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/hashline.py +0 -0
  203. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/hashpos/__init__.py +0 -0
  204. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/leak_detect.py +0 -0
  205. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/model_providers.py +0 -0
  206. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/monorepo/__init__.py +0 -0
  207. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/monorepo/config.py +0 -0
  208. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/monorepo/project.py +0 -0
  209. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/monorepo/workspace.py +0 -0
  210. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/monorepo/worktree.py +0 -0
  211. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/nested.py +0 -0
  212. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/observations/__init__.py +0 -0
  213. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/observations/manager.py +0 -0
  214. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/plugin_manager.py +0 -0
  215. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/profiler.py +0 -0
  216. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/requests.py +0 -0
  217. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/responses.py +0 -0
  218. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/helpers/similarity.py +0 -0
  219. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/history.py +0 -0
  220. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/__init__.py +0 -0
  221. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/base.py +0 -0
  222. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/integration.py +0 -0
  223. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/manager.py +0 -0
  224. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/registry.py +0 -0
  225. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/hooks/types.py +0 -0
  226. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/interruptible_input.py +0 -0
  227. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/linter.py +0 -0
  228. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/llm.py +0 -0
  229. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mcp/__init__.py +0 -0
  230. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mcp/manager.py +0 -0
  231. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mcp/oauth.py +0 -0
  232. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mcp/server.py +0 -0
  233. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mcp/utils.py +0 -0
  234. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/mdstream.py +0 -0
  235. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/onboarding.py +0 -0
  236. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/__init__.py +0 -0
  237. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/agent.yml +0 -0
  238. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/architect.yml +0 -0
  239. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/ask.yml +0 -0
  240. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/base.yml +0 -0
  241. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/context.yml +0 -0
  242. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/copypaste.yml +0 -0
  243. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editblock.yml +0 -0
  244. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editblock_fenced.yml +0 -0
  245. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editblock_func.yml +0 -0
  246. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editor_diff_fenced.yml +0 -0
  247. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editor_editblock.yml +0 -0
  248. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/editor_whole.yml +0 -0
  249. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/hashline.yml +0 -0
  250. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/help.yml +0 -0
  251. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/patch.yml +0 -0
  252. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/single_wholefile_func.yml +0 -0
  253. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/udiff.yml +0 -0
  254. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/udiff_simple.yml +0 -0
  255. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/utils/__init__.py +0 -0
  256. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/utils/registry.py +0 -0
  257. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/utils/system.py +0 -0
  258. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/wholefile.yml +0 -0
  259. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/prompts/wholefile_func.yml +0 -0
  260. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  261. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  262. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  263. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  264. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  265. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  266. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  267. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  268. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  269. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  270. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  271. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  272. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  273. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  274. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  275. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  276. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  277. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  278. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  279. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  280. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  281. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  282. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  283. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  284. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  285. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  286. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  287. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  288. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  289. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  290. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  291. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/README.md +0 -0
  292. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  293. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  294. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  295. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  296. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  297. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  298. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  299. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  300. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  301. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  302. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  303. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  304. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  305. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  306. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  307. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  308. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  309. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  310. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  311. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  312. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  313. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  314. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  315. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  316. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  317. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  318. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/reasoning_tags.py +0 -0
  319. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/repo.py +0 -0
  320. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/repomap.py +0 -0
  321. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/report.py +0 -0
  322. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/resources/__init__.py +0 -0
  323. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/resources/model-metadata.json +0 -0
  324. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/resources/model-settings.yml +0 -0
  325. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/resources/providers.json +0 -0
  326. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/run_cmd.py +0 -0
  327. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/scrape.py +0 -0
  328. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/sendchat.py +0 -0
  329. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/special.py +0 -0
  330. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/command_interactive.py +0 -0
  331. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/explore_code.py +0 -0
  332. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/finished.py +0 -0
  333. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_branch.py +0 -0
  334. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_diff.py +0 -0
  335. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_log.py +0 -0
  336. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_remote.py +0 -0
  337. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_show.py +0 -0
  338. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/git_status.py +0 -0
  339. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/load_skill.py +0 -0
  340. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/ls.py +0 -0
  341. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/remove_skill.py +0 -0
  342. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/thinking.py +0 -0
  343. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/undo_change.py +0 -0
  344. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/update_todo_list.py +0 -0
  345. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/utils/helpers.py +0 -0
  346. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/utils/output.py +0 -0
  347. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tools/utils/registry.py +0 -0
  348. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/__init__.py +0 -0
  349. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/io.py +0 -0
  350. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/styles.tcss +0 -0
  351. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/__init__.py +0 -0
  352. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/completion_bar.py +0 -0
  353. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/file_list.py +0 -0
  354. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/footer.py +0 -0
  355. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/input_area.py +0 -0
  356. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/input_container.py +0 -0
  357. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/key_hints.py +0 -0
  358. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/output.py +0 -0
  359. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/widgets/status_bar.py +0 -0
  360. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/tui/worker.py +0 -0
  361. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/urls.py +0 -0
  362. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/utils.py +0 -0
  363. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/versioncheck.py +0 -0
  364. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/voice.py +0 -0
  365. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/waiting.py +0 -0
  366. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/watch.py +0 -0
  367. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/watch_prompts.py +0 -0
  368. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/Gemfile +0 -0
  369. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/blame.md +0 -0
  370. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/get-started.md +0 -0
  371. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/help-tip.md +0 -0
  372. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/help.md +0 -0
  373. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/install.md +0 -0
  374. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/keys.md +0 -0
  375. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/model-warnings.md +0 -0
  376. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/multi-line.md +0 -0
  377. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/python-m-aider.md +0 -0
  378. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/recording.css +0 -0
  379. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/recording.md +0 -0
  380. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_includes/works-best.md +0 -0
  381. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_features.scss +0 -0
  382. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_footer.scss +0 -0
  383. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_hero.scss +0 -0
  384. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_info.scss +0 -0
  385. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_layout.scss +0 -0
  386. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_reset.scss +0 -0
  387. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_testimonials.scss +0 -0
  388. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_typography.scss +0 -0
  389. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/_variables.scss +0 -0
  390. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/custom/custom.scss +0 -0
  391. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/_sass/global-overrides.scss +0 -0
  392. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/adv-model-settings.md +0 -0
  393. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/agent-mode.md +0 -0
  394. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/aider_conf.md +0 -0
  395. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/api-keys.md +0 -0
  396. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-commands.md +0 -0
  397. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  398. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/dotenv.md +0 -0
  399. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/editor.md +0 -0
  400. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/hooks.md +0 -0
  401. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/mcp.md +0 -0
  402. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/model-aliases.md +0 -0
  403. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/options.md +0 -0
  404. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/reasoning.md +0 -0
  405. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/security.md +0 -0
  406. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/skills.md +0 -0
  407. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/tui.md +0 -0
  408. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config/workspaces.md +0 -0
  409. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/config.md +0 -0
  410. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/faq.md +0 -0
  411. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/git.md +0 -0
  412. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/index.md +0 -0
  413. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/install/docker.md +0 -0
  414. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/install/optional.md +0 -0
  415. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/install.md +0 -0
  416. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/languages.md +0 -0
  417. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  418. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/legal/privacy.md +0 -0
  419. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/anthropic.md +0 -0
  420. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/azure.md +0 -0
  421. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/bedrock.md +0 -0
  422. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/cohere.md +0 -0
  423. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/deepseek.md +0 -0
  424. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/gemini.md +0 -0
  425. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/github.md +0 -0
  426. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/groq.md +0 -0
  427. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/lm-studio.md +0 -0
  428. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/ollama.md +0 -0
  429. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai-compat.md +0 -0
  430. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai.md +0 -0
  431. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/openrouter.md +0 -0
  432. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/other.md +0 -0
  433. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/vertex.md +0 -0
  434. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/warnings.md +0 -0
  435. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms/xai.md +0 -0
  436. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/llms.md +0 -0
  437. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/more/analytics.md +0 -0
  438. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/more/edit-formats.md +0 -0
  439. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/more/infinite-output.md +0 -0
  440. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/more-info.md +0 -0
  441. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/repomap.md +0 -0
  442. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/scripting.md +0 -0
  443. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  444. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  445. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/imports.md +0 -0
  446. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  447. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/support.md +0 -0
  448. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  449. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  450. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting.md +0 -0
  451. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/commands.md +0 -0
  452. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/conventions.md +0 -0
  453. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/copypaste.md +0 -0
  454. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/images-urls.md +0 -0
  455. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/lint-test.md +0 -0
  456. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/modes.md +0 -0
  457. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/not-code.md +0 -0
  458. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/notifications.md +0 -0
  459. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/sessions.md +0 -0
  460. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/tips.md +0 -0
  461. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/voice.md +0 -0
  462. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage/watch.md +0 -0
  463. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/docs/usage.md +0 -0
  464. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli/website/share/index.md +0 -0
  465. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/dependency_links.txt +0 -0
  466. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/entry_points.txt +0 -0
  467. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/requires.txt +0 -0
  468. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/cecli_dev.egg-info/top_level.txt +0 -0
  469. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/docker/Dockerfile +0 -0
  470. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  471. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/pyproject.toml +0 -0
  472. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/pytest.ini +0 -0
  473. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/common-constraints.txt +0 -0
  474. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-dev.in +0 -0
  475. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-dev.txt +0 -0
  476. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-help.in +0 -0
  477. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-help.txt +0 -0
  478. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-playwright.in +0 -0
  479. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements-playwright.txt +0 -0
  480. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/requirements.in +0 -0
  481. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements/tree-sitter.in +0 -0
  482. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/requirements.txt +0 -0
  483. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/30k-image.py +0 -0
  484. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/Dockerfile.jekyll +0 -0
  485. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/__init__.py +0 -0
  486. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/blame.py +0 -0
  487. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/clean_metadata.py +0 -0
  488. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/cost_analyzer.py +0 -0
  489. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/dl_icons.py +0 -0
  490. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/filter-chat-mode.js +0 -0
  491. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/generate_providers.py +0 -0
  492. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/get_contributor_list.js +0 -0
  493. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/get_hashline.py +0 -0
  494. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/history_prompts.py +0 -0
  495. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/homepage.py +0 -0
  496. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/issues.py +0 -0
  497. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/jekyll_build.sh +0 -0
  498. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/jekyll_run.sh +0 -0
  499. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/logo_svg.py +0 -0
  500. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/pip-compile.sh +0 -0
  501. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/recording_audio.py +0 -0
  502. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/redact-cast.py +0 -0
  503. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/rename_to_cecli.py +0 -0
  504. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/tmux_record.sh +0 -0
  505. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/tsl_pack_langs.py +0 -0
  506. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/update-blame.sh +0 -0
  507. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/update-docs.sh +0 -0
  508. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/update-history.py +0 -0
  509. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/versionbump.py +0 -0
  510. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/scripts/yank-old-versions.py +0 -0
  511. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/setup.cfg +0 -0
  512. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/shim.pyproject.toml +0 -0
  513. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/__init__.py +0 -0
  514. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/__init__.py +0 -0
  515. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_aws_credentials.py +0 -0
  516. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_background_commands.py +0 -0
  517. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_coder.py +0 -0
  518. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_commands.py +0 -0
  519. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_custom_commands.py +0 -0
  520. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_deprecated.py +0 -0
  521. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_editblock.py +0 -0
  522. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_editor.py +0 -0
  523. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_exceptions.py +0 -0
  524. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_find_or_blocks.py +0 -0
  525. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_hashline.py +0 -0
  526. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_history.py +0 -0
  527. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_io.py +0 -0
  528. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_linter.py +0 -0
  529. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_main.py +0 -0
  530. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_model_info_manager.py +0 -0
  531. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_model_provider_manager.py +0 -0
  532. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_models.py +0 -0
  533. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_onboarding.py +0 -0
  534. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_plugin_manager.py +0 -0
  535. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_prompts.py +0 -0
  536. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_reasoning.py +0 -0
  537. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_repo.py +0 -0
  538. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_repomap.py +0 -0
  539. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_run_cmd.py +0 -0
  540. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_sanity_check_repo.py +0 -0
  541. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_scripting.py +0 -0
  542. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_sendchat.py +0 -0
  543. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_sessions.py +0 -0
  544. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_skills.py +0 -0
  545. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_special.py +0 -0
  546. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_ssl_verification.py +0 -0
  547. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_udiff.py +0 -0
  548. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_urls.py +0 -0
  549. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_voice.py +0 -0
  550. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_watch.py +0 -0
  551. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/basic/test_wholefile.py +0 -0
  552. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/coders/test_copypaste_coder.py +0 -0
  553. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/conftest.py +0 -0
  554. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/conversations/test_conversation_integration.py +0 -0
  555. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/conversations/test_conversation_system.py +0 -0
  556. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  557. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/chat-history.md +0 -0
  558. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/arduino/test.ino +0 -0
  559. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/c/test.c +0 -0
  560. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/chatito/test.chatito +0 -0
  561. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/clojure/test.clj +0 -0
  562. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  563. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/cpp/test.cpp +0 -0
  564. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/csharp/test.cs +0 -0
  565. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/d/test.d +0 -0
  566. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/dart/test.dart +0 -0
  567. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/elisp/test.el +0 -0
  568. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/elixir/test.ex +0 -0
  569. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/elm/test.elm +0 -0
  570. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/gleam/test.gleam +0 -0
  571. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/go/test.go +0 -0
  572. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/haskell/test.hs +0 -0
  573. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/hcl/test.tf +0 -0
  574. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/java/test.java +0 -0
  575. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/javascript/test.js +0 -0
  576. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/kotlin/test.kt +0 -0
  577. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/lua/test.lua +0 -0
  578. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/matlab/test.m +0 -0
  579. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml/test.ml +0 -0
  580. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  581. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/php/test.php +0 -0
  582. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/pony/test.pony +0 -0
  583. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/properties/test.properties +0 -0
  584. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/python/test.py +0 -0
  585. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/ql/test.ql +0 -0
  586. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/r/test.r +0 -0
  587. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/racket/test.rkt +0 -0
  588. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/ruby/test.rb +0 -0
  589. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/rust/test.rs +0 -0
  590. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/scala/test.scala +0 -0
  591. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/solidity/test.sol +0 -0
  592. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/swift/test.swift +0 -0
  593. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/tsx/test.tsx +0 -0
  594. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/typescript/test.ts +0 -0
  595. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/udev/test.rules +0 -0
  596. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/languages/zig/test.zig +0 -0
  597. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.js +0 -0
  598. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.py +0 -0
  599. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  600. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/watch.js +0 -0
  601. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/watch.lisp +0 -0
  602. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/watch.py +0 -0
  603. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/fixtures/watch_question.js +0 -0
  604. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/help/test_help.py +0 -0
  605. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config.py +0 -0
  606. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config_active.py +0 -0
  607. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  608. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  609. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_workspace.py +0 -0
  610. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/helpers/observations/test_observation_manager.py +0 -0
  611. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/hooks/__init__.py +0 -0
  612. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/hooks/test_base.py +0 -0
  613. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/hooks/test_manager.py +0 -0
  614. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/hooks/test_registry.py +0 -0
  615. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/mcp/__init__.py +0 -0
  616. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/mcp/test_manager.py +0 -0
  617. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/scrape/test_playwright_disable.py +0 -0
  618. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/scrape/test_scrape.py +0 -0
  619. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_git_branch.py +0 -0
  620. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_git_diff.py +0 -0
  621. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_grep.py +0 -0
  622. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_insert_block.py +0 -0
  623. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tools/test_registry.py +0 -0
  624. {cecli_dev-0.99.9 → cecli_dev-0.99.10}/tests/tui/test_app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.9
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.9.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.9'
22
- __version_tuple__ = version_tuple = (0, 99, 9)
21
+ __version__ = version = '0.99.10'
22
+ __version_tuple__ = version_tuple = (0, 99, 10)
23
23
 
24
- __commit_id__ = commit_id = 'g7edfde9ea'
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
  """
@@ -995,7 +1019,7 @@ I will proceed based on the tool results and updated context.""")
995
1019
  context_parts.append("\n\n")
996
1020
  context_parts.append("## File Editing Tools Disabled")
997
1021
  context_parts.append(
998
- "File editing tools are currently disabled.Use `GetLines` to determine the"
1022
+ "File editing tools are currently disabled.Use `ReadRange` to determine the"
999
1023
  " current hashline prefixes needed to perform an edit and activate them when you"
1000
1024
  " are ready to edit a file."
1001
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
 
@@ -2262,9 +2263,16 @@ class Coder:
2262
2263
  self.io.tool_error(err_msg)
2263
2264
 
2264
2265
  self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
2265
- 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
+
2266
2274
  continue
2267
- except KeyboardInterrupt:
2275
+ except (KeyboardInterrupt, asyncio.CancelledError):
2268
2276
  interrupted = True
2269
2277
  break
2270
2278
  except FinishReasonLength:
@@ -2629,11 +2637,19 @@ class Coder:
2629
2637
  all_results_content.append("Tool Request Aborted.")
2630
2638
  continue
2631
2639
 
2632
- call_result = await experimental_mcp_client.call_openai_tool(
2633
- session=session,
2634
- 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
2635
2648
  )
2636
2649
 
2650
+ if interrupted:
2651
+ raise KeyboardInterrupt("Tool call interrupted")
2652
+
2637
2653
  content_parts = []
2638
2654
  if call_result.content:
2639
2655
  for item in call_result.content:
@@ -2678,6 +2694,9 @@ class Coder:
2678
2694
  }
2679
2695
  )
2680
2696
 
2697
+ except KeyboardInterrupt:
2698
+ self.io.tool_warning(f"Tool call {tool_call.function.name} interrupted.")
2699
+ raise
2681
2700
  except Exception as e:
2682
2701
  tool_error = f"Error executing tool call {tool_call.function.name}: \n{e}"
2683
2702
  self.io.tool_warning(
@@ -2694,6 +2713,9 @@ class Coder:
2694
2713
  tool_responses.append(
2695
2714
  {"role": "tool", "tool_call_id": tool_call.id, "content": connection_error}
2696
2715
  )
2716
+ except asyncio.CancelledError:
2717
+ # Re-raise CancelledError to ensure the task cancellation propagates
2718
+ raise
2697
2719
  except Exception as e:
2698
2720
  connection_error = f"Could not connect to server {server.name}\n{e}"
2699
2721
  self.io.tool_warning(connection_error)
@@ -2728,7 +2750,15 @@ class Coder:
2728
2750
  return False
2729
2751
 
2730
2752
  # 5. Execute tools
2731
- 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
2732
2762
 
2733
2763
  # 6. Add responses to conversation (re-prefixing if necessary)
2734
2764
  tool_responses = []
@@ -3040,33 +3070,22 @@ class Coder:
3040
3070
  self.token_profiler.start()
3041
3071
 
3042
3072
  try:
3043
- completion_task = asyncio.create_task(
3044
- model.send_completion(
3045
- messages,
3046
- functions,
3047
- self.stream,
3048
- self.temperature,
3049
- # This could include any tools, but for now it is just MCP tools
3050
- tools=tools,
3051
- override_kwargs=self.model_kwargs.copy(),
3052
- )
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,
3053
3082
  )
3054
- interrupt_task = asyncio.create_task(self.interrupt_event.wait())
3055
3083
 
3056
- done, pending = await asyncio.wait(
3057
- {completion_task, interrupt_task},
3058
- return_when=asyncio.FIRST_COMPLETED,
3084
+ (hash_object, completion), interrupted = await coroutines.interruptible(
3085
+ completion_coro, self.interrupt_event
3059
3086
  )
3060
-
3061
- if interrupt_task in done:
3062
- completion_task.cancel()
3063
- try:
3064
- await completion_task
3065
- except asyncio.CancelledError:
3066
- pass
3087
+ if interrupted:
3067
3088
  raise KeyboardInterrupt
3068
-
3069
- hash_object, completion = completion_task.result()
3070
3089
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3071
3090
 
3072
3091
  if not isinstance(completion, ModelResponse):
@@ -3089,7 +3108,7 @@ class Coder:
3089
3108
  self.token_profiler.on_error()
3090
3109
  self.calculate_and_show_tokens_and_cost(messages, completion)
3091
3110
  raise
3092
- except KeyboardInterrupt as kbi:
3111
+ except (KeyboardInterrupt, asyncio.CancelledError) as kbi:
3093
3112
  self.keyboard_interrupt()
3094
3113
  raise kbi
3095
3114
  finally:
@@ -3498,10 +3517,13 @@ class Coder:
3498
3517
  if completion and hasattr(completion, "usage") and completion.usage is not None:
3499
3518
  prompt_tokens = completion.usage.prompt_tokens
3500
3519
  completion_tokens = completion.usage.completion_tokens
3501
- cache_hit_tokens = getattr(completion.usage, "prompt_cache_hit_tokens", 0) or getattr(
3502
- 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
3503
3524
  )
3504
- 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
3505
3527
 
3506
3528
  if hasattr(completion.usage, "cache_read_input_tokens") or hasattr(
3507
3529
  completion.usage, "cache_creation_input_tokens"
@@ -3534,8 +3556,22 @@ class Coder:
3534
3556
  tokens_report, self.message_tokens_sent, self.message_tokens_received
3535
3557
  )
3536
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
+
3537
3573
  if not self.get_active_model().info.get("input_cost_per_token"):
3538
- self.usage_report = tokens_report
3574
+ self.usage_report = tokens_report + "\n" + total_stats
3539
3575
  return
3540
3576
 
3541
3577
  try:
@@ -3552,11 +3588,8 @@ class Coder:
3552
3588
  self.total_cost += cost
3553
3589
  self.message_cost += cost
3554
3590
 
3555
- total_combined_tokens = (
3556
- self.total_tokens_sent + self.total_tokens_received + prompt_tokens + completion_tokens
3557
- )
3558
3591
  cost_report = (
3559
- f"${self.format_cost(self.message_cost)} • {format_tokens(total_combined_tokens)} ↑↓"
3592
+ f"${self.format_cost(self.message_cost)} • {total_stats}"
3560
3593
  f" ${self.format_cost(self.total_cost)}"
3561
3594
  )
3562
3595
 
@@ -3614,6 +3647,7 @@ class Coder:
3614
3647
 
3615
3648
  self.total_tokens_sent += self.message_tokens_sent
3616
3649
  self.total_tokens_received += self.message_tokens_received
3650
+ self.total_cached_tokens += self.message_cached_tokens
3617
3651
 
3618
3652
  if self.tui and self.tui():
3619
3653
  self.tui().update_cost(self.usage_report.replace("\n", " "))
@@ -3624,6 +3658,7 @@ class Coder:
3624
3658
  self.message_cost = 0.0
3625
3659
  self.message_tokens_sent = 0
3626
3660
  self.message_tokens_received = 0
3661
+ self.message_cached_tokens = 0
3627
3662
 
3628
3663
  def get_multi_response_content_in_progress(self, final=False):
3629
3664
  cur = self.multi_response_content or ""
@@ -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
@@ -0,0 +1,51 @@
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 ListSkillsCommand(BaseCommand):
8
+ NORM_NAME = "list-skills"
9
+ DESCRIPTION = "List all available skills with their states and file paths"
10
+
11
+ @classmethod
12
+ async def execute(cls, io, coder, args, **kwargs):
13
+ """Execute the list-skills command with given parameters."""
14
+ # Check if skills_manager is available
15
+ if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
16
+ io.tool_output("Skills manager is not initialized. Skills may not be configured.")
17
+ if hasattr(coder, "skills_directory_paths") and not coder.skills_directory_paths:
18
+ io.tool_output(
19
+ "No skills directories configured. Use --skills-paths to configure skill"
20
+ " directories."
21
+ )
22
+ return format_command_result(io, "list-skills", "Skills manager is not initialized")
23
+
24
+ try:
25
+ formatted = coder.skills_manager.get_skills_list_formatted()
26
+ return format_command_result(io, "list-skills", formatted)
27
+ except Exception as e:
28
+ error_msg = f"Error listing skills: {e}"
29
+ return format_command_result(io, "list-skills", error_msg)
30
+
31
+ @classmethod
32
+ def get_completions(cls, io, coder, args) -> List[str]:
33
+ """Get completion options for list-skills command."""
34
+ return []
35
+
36
+ @classmethod
37
+ def get_help(cls) -> str:
38
+ """Get help text for the list-skills command."""
39
+ help_text = super().get_help()
40
+ help_text += "\nUsage:\n"
41
+ help_text += " /list-skills # List all available skills with their states and paths\n"
42
+ help_text += "\nExamples:\n"
43
+ help_text += (
44
+ " /list-skills # Shows a table of all skills, their include/exclude/visible status,\n"
45
+ )
46
+ help_text += " # whether they are loaded, and their directory paths\n"
47
+ help_text += "\n"
48
+ help_text += "This command lists all skills found in the configured skill directories,\n"
49
+ help_text += "displaying their current status (included/excluded/visible),\n"
50
+ help_text += "whether they are loaded into context, and their file system paths.\n"
51
+ return help_text