cecli-dev 0.99.0__tar.gz → 0.99.2__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 (613) hide show
  1. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/agent_coder.py +29 -22
  5. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/base_coder.py +31 -8
  6. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/background_commands.py +175 -15
  7. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/monorepo/project.py +1 -0
  8. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/monorepo/workspace.py +11 -0
  9. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/skills.py +33 -1
  10. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/io.py +25 -13
  11. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/main.py +1 -1
  12. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/agent.yml +12 -13
  13. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/base.yml +1 -1
  14. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/repo.py +117 -11
  15. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/resources/model-metadata.json +1343 -195
  16. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/command.py +79 -18
  17. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/command_interactive.py +3 -0
  18. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/delete_text.py +4 -2
  19. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/finished.py +1 -0
  20. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/insert_text.py +4 -8
  21. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/replace_text.py +4 -2
  22. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/show_context.py +19 -8
  23. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/utils/base_tool.py +8 -5
  24. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/agent-mode.md +1 -0
  25. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/skills.md +113 -6
  26. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/workspaces.md +6 -3
  27. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/PKG-INFO +1 -1
  28. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/SOURCES.txt +1 -0
  29. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_io.py +4 -0
  30. cecli_dev-0.99.2/tests/helpers/monorepo/test_ignore_logic.py +103 -0
  31. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/tools/test_show_context.py +20 -0
  32. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.dockerignore +0 -0
  33. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.flake8 +0 -0
  34. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.gitattributes +0 -0
  35. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  36. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/check_pypi_version.yml +0 -0
  37. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/docker-build-test.yml +0 -0
  38. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/docker-release.yml +0 -0
  39. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/issues.yml +0 -0
  40. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/pages.yml +0 -0
  41. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/pre-commit.yml +0 -0
  42. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/release.yml +0 -0
  43. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/ubuntu-tests.yml +0 -0
  44. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/windows-tests.yml +0 -0
  45. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.github/workflows/windows_check_pypi_version.yml +0 -0
  46. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.gitignore +0 -0
  47. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/.pre-commit-config.yaml +0 -0
  48. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/CHANGELOG.md +0 -0
  49. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/CNAME +0 -0
  50. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/CONTRIBUTING.md +0 -0
  51. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/HISTORY.md +0 -0
  52. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/LICENSE.txt +0 -0
  53. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/MANIFEST.in +0 -0
  54. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/README.md +0 -0
  55. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/Dockerfile +0 -0
  56. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/README.md +0 -0
  57. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/__init__.py +0 -0
  58. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/benchmark.py +0 -0
  59. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/benchmark_classic.py +0 -0
  60. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/clone-exercism.sh +0 -0
  61. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/cpp-test.sh +0 -0
  62. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/docker.sh +0 -0
  63. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/docker_build.sh +0 -0
  64. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/install-docker-ubuntu.sh +0 -0
  65. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/npm-test.sh +0 -0
  66. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/over_time.py +0 -0
  67. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/plot.sh +0 -0
  68. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/plots.py +0 -0
  69. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/problem_stats.py +0 -0
  70. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/prompts.py +0 -0
  71. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/refactor_tools.py +0 -0
  72. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/rsync.sh +0 -0
  73. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/rungrid.py +0 -0
  74. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/swe-bench-lite.txt +0 -0
  75. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/swe-bench.txt +0 -0
  76. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/swe_bench.py +0 -0
  77. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/test_benchmark.py +0 -0
  78. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/variations.1.sh +0 -0
  79. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/variations.2.sh +0 -0
  80. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/variations.3.sh +0 -0
  81. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/benchmark/variations.4.sh +0 -0
  82. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/__main__.py +0 -0
  83. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/args.py +0 -0
  84. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/args_formatter.py +0 -0
  85. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/change_tracker.py +0 -0
  86. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/__init__.py +0 -0
  87. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/architect_coder.py +0 -0
  88. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/ask_coder.py +0 -0
  89. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/chat_chunks.py +0 -0
  90. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/context_coder.py +0 -0
  91. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/copypaste_coder.py +0 -0
  92. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editblock_coder.py +0 -0
  93. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editblock_fenced_coder.py +0 -0
  94. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editblock_func_coder.py +0 -0
  95. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  96. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editor_editblock_coder.py +0 -0
  97. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/editor_whole_coder.py +0 -0
  98. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/hashline_coder.py +0 -0
  99. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/help_coder.py +0 -0
  100. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/patch_coder.py +0 -0
  101. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/search_replace.py +0 -0
  102. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/shell.py +0 -0
  103. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/single_wholefile_func_coder.py +0 -0
  104. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/udiff_coder.py +0 -0
  105. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/udiff_simple.py +0 -0
  106. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/wholefile_coder.py +0 -0
  107. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/coders/wholefile_func_coder.py +0 -0
  108. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/__init__.py +0 -0
  109. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/add.py +0 -0
  110. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/agent.py +0 -0
  111. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/agent_model.py +0 -0
  112. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/architect.py +0 -0
  113. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/ask.py +0 -0
  114. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/chat_mode.py +0 -0
  115. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/clear.py +0 -0
  116. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/code.py +0 -0
  117. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/command_prefix.py +0 -0
  118. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/commit.py +0 -0
  119. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/compact.py +0 -0
  120. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/context.py +0 -0
  121. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/context_blocks.py +0 -0
  122. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/context_management.py +0 -0
  123. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/copy.py +0 -0
  124. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/copy_context.py +0 -0
  125. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/core.py +0 -0
  126. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/diff.py +0 -0
  127. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/drop.py +0 -0
  128. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/editor.py +0 -0
  129. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/editor_model.py +0 -0
  130. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/exit.py +0 -0
  131. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/git.py +0 -0
  132. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/hashline.py +0 -0
  133. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/help.py +0 -0
  134. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/history_search.py +0 -0
  135. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/hooks.py +0 -0
  136. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/lint.py +0 -0
  137. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/list_sessions.py +0 -0
  138. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/load.py +0 -0
  139. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/load_hook.py +0 -0
  140. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/load_mcp.py +0 -0
  141. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/load_session.py +0 -0
  142. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/load_skill.py +0 -0
  143. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/ls.py +0 -0
  144. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/map.py +0 -0
  145. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/map_refresh.py +0 -0
  146. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/model.py +0 -0
  147. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/models.py +0 -0
  148. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/multiline_mode.py +0 -0
  149. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/paste.py +0 -0
  150. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/quit.py +0 -0
  151. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/read_only.py +0 -0
  152. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/read_only_stub.py +0 -0
  153. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/reasoning_effort.py +0 -0
  154. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/remove_hook.py +0 -0
  155. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/remove_mcp.py +0 -0
  156. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/remove_skill.py +0 -0
  157. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/report.py +0 -0
  158. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/reset.py +0 -0
  159. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/rules.py +0 -0
  160. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/run.py +0 -0
  161. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/save.py +0 -0
  162. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/save_session.py +0 -0
  163. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/settings.py +0 -0
  164. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/terminal_data/linux.keytab +0 -0
  165. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/terminal_setup.py +0 -0
  166. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/test.py +0 -0
  167. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/think_tokens.py +0 -0
  168. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/tokens.py +0 -0
  169. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/undo.py +0 -0
  170. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/utils/__init__.py +0 -0
  171. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/utils/base_command.py +0 -0
  172. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/utils/helpers.py +0 -0
  173. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/utils/registry.py +0 -0
  174. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/utils/save_load_manager.py +0 -0
  175. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/voice.py +0 -0
  176. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/weak_model.py +0 -0
  177. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/web.py +0 -0
  178. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/commands/workspace.py +0 -0
  179. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/deprecated_args.py +0 -0
  180. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/diffs.py +0 -0
  181. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/dump.py +0 -0
  182. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/editor.py +0 -0
  183. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/exceptions.py +0 -0
  184. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/format_settings.py +0 -0
  185. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/help.py +0 -0
  186. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/help_pats.py +0 -0
  187. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/__init__.py +0 -0
  188. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/command_parser.py +0 -0
  189. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/__init__.py +0 -0
  190. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/base_message.py +0 -0
  191. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/files.py +0 -0
  192. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/integration.py +0 -0
  193. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/manager.py +0 -0
  194. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/service.py +0 -0
  195. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/tags.py +0 -0
  196. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/conversation/utils.py +0 -0
  197. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/copypaste.py +0 -0
  198. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/coroutines.py +0 -0
  199. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/file_searcher.py +0 -0
  200. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/hashline.py +0 -0
  201. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/hashpos/__init__.py +0 -0
  202. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/hashpos/hashpos.py +0 -0
  203. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/model_providers.py +0 -0
  204. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/monorepo/__init__.py +0 -0
  205. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/monorepo/config.py +0 -0
  206. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/monorepo/worktree.py +0 -0
  207. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/nested.py +0 -0
  208. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/plugin_manager.py +0 -0
  209. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/profiler.py +0 -0
  210. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/requests.py +0 -0
  211. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/responses.py +0 -0
  212. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/helpers/similarity.py +0 -0
  213. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/history.py +0 -0
  214. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/__init__.py +0 -0
  215. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/base.py +0 -0
  216. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/integration.py +0 -0
  217. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/manager.py +0 -0
  218. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/registry.py +0 -0
  219. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/hooks/types.py +0 -0
  220. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/interruptible_input.py +0 -0
  221. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/linter.py +0 -0
  222. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/llm.py +0 -0
  223. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mcp/__init__.py +0 -0
  224. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mcp/manager.py +0 -0
  225. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mcp/oauth.py +0 -0
  226. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mcp/server.py +0 -0
  227. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mcp/utils.py +0 -0
  228. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/mdstream.py +0 -0
  229. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/models.py +0 -0
  230. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/onboarding.py +0 -0
  231. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/__init__.py +0 -0
  232. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/architect.yml +0 -0
  233. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/ask.yml +0 -0
  234. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/context.yml +0 -0
  235. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/copypaste.yml +0 -0
  236. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editblock.yml +0 -0
  237. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editblock_fenced.yml +0 -0
  238. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editblock_func.yml +0 -0
  239. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editor_diff_fenced.yml +0 -0
  240. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editor_editblock.yml +0 -0
  241. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/editor_whole.yml +0 -0
  242. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/hashline.yml +0 -0
  243. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/help.yml +0 -0
  244. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/patch.yml +0 -0
  245. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/single_wholefile_func.yml +0 -0
  246. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/udiff.yml +0 -0
  247. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/udiff_simple.yml +0 -0
  248. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/utils/__init__.py +0 -0
  249. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/utils/registry.py +0 -0
  250. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/utils/system.py +0 -0
  251. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/wholefile.yml +0 -0
  252. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/prompts/wholefile_func.yml +0 -0
  253. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  254. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  255. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  256. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  257. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  258. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  259. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  260. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  261. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  262. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  263. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  264. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  265. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  266. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  267. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  268. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  269. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  270. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  271. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  272. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  273. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  274. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  275. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  276. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  277. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  278. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  279. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  280. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  281. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  282. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  283. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  284. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/README.md +0 -0
  285. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  286. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  287. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  288. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  289. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  290. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  291. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  292. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  293. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  294. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  295. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  296. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  297. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  298. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  299. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  300. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  301. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  302. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  303. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  304. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  305. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  306. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  307. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  308. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  309. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  310. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  311. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/reasoning_tags.py +0 -0
  312. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/repomap.py +0 -0
  313. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/report.py +0 -0
  314. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/resources/__init__.py +0 -0
  315. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/resources/model-settings.yml +0 -0
  316. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/resources/providers.json +0 -0
  317. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/run_cmd.py +0 -0
  318. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/scrape.py +0 -0
  319. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/sendchat.py +0 -0
  320. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/sessions.py +0 -0
  321. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/special.py +0 -0
  322. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/__init__.py +0 -0
  323. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/context_manager.py +0 -0
  324. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_branch.py +0 -0
  325. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_diff.py +0 -0
  326. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_log.py +0 -0
  327. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_remote.py +0 -0
  328. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_show.py +0 -0
  329. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/git_status.py +0 -0
  330. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/grep.py +0 -0
  331. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/list_changes.py +0 -0
  332. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/load_skill.py +0 -0
  333. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/ls.py +0 -0
  334. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/remove_skill.py +0 -0
  335. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/thinking.py +0 -0
  336. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/undo_change.py +0 -0
  337. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/update_todo_list.py +0 -0
  338. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/utils/helpers.py +0 -0
  339. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/utils/output.py +0 -0
  340. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/utils/registry.py +0 -0
  341. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/view_files_matching.py +0 -0
  342. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tools/view_files_with_symbol.py +0 -0
  343. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/__init__.py +0 -0
  344. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/app.py +0 -0
  345. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/io.py +0 -0
  346. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/styles.tcss +0 -0
  347. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/__init__.py +0 -0
  348. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/completion_bar.py +0 -0
  349. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/file_list.py +0 -0
  350. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/footer.py +0 -0
  351. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/input_area.py +0 -0
  352. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/input_container.py +0 -0
  353. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/key_hints.py +0 -0
  354. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/output.py +0 -0
  355. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/widgets/status_bar.py +0 -0
  356. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/tui/worker.py +0 -0
  357. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/urls.py +0 -0
  358. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/utils.py +0 -0
  359. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/versioncheck.py +0 -0
  360. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/voice.py +0 -0
  361. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/waiting.py +0 -0
  362. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/watch.py +0 -0
  363. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/watch_prompts.py +0 -0
  364. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/Gemfile +0 -0
  365. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/blame.md +0 -0
  366. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/get-started.md +0 -0
  367. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/help-tip.md +0 -0
  368. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/help.md +0 -0
  369. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/install.md +0 -0
  370. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/keys.md +0 -0
  371. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/model-warnings.md +0 -0
  372. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/multi-line.md +0 -0
  373. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/python-m-aider.md +0 -0
  374. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/recording.css +0 -0
  375. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/recording.md +0 -0
  376. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_includes/works-best.md +0 -0
  377. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_features.scss +0 -0
  378. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_footer.scss +0 -0
  379. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_hero.scss +0 -0
  380. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_info.scss +0 -0
  381. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_layout.scss +0 -0
  382. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_reset.scss +0 -0
  383. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_testimonials.scss +0 -0
  384. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_typography.scss +0 -0
  385. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/_variables.scss +0 -0
  386. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/custom/custom.scss +0 -0
  387. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/_sass/global-overrides.scss +0 -0
  388. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/adv-model-settings.md +0 -0
  389. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/aider_conf.md +0 -0
  390. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/api-keys.md +0 -0
  391. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-commands.md +0 -0
  392. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  393. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/dotenv.md +0 -0
  394. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/editor.md +0 -0
  395. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/hooks.md +0 -0
  396. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/mcp.md +0 -0
  397. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/model-aliases.md +0 -0
  398. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/options.md +0 -0
  399. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/reasoning.md +0 -0
  400. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/security.md +0 -0
  401. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config/tui.md +0 -0
  402. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/config.md +0 -0
  403. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/faq.md +0 -0
  404. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/git.md +0 -0
  405. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/index.md +0 -0
  406. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/install/docker.md +0 -0
  407. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/install/optional.md +0 -0
  408. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/install.md +0 -0
  409. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/languages.md +0 -0
  410. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  411. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/legal/privacy.md +0 -0
  412. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/anthropic.md +0 -0
  413. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/azure.md +0 -0
  414. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/bedrock.md +0 -0
  415. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/cohere.md +0 -0
  416. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/deepseek.md +0 -0
  417. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/gemini.md +0 -0
  418. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/github.md +0 -0
  419. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/groq.md +0 -0
  420. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/lm-studio.md +0 -0
  421. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/ollama.md +0 -0
  422. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai-compat.md +0 -0
  423. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai.md +0 -0
  424. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/openrouter.md +0 -0
  425. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/other.md +0 -0
  426. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/vertex.md +0 -0
  427. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/warnings.md +0 -0
  428. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms/xai.md +0 -0
  429. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/llms.md +0 -0
  430. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/more/analytics.md +0 -0
  431. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/more/edit-formats.md +0 -0
  432. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/more/infinite-output.md +0 -0
  433. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/more-info.md +0 -0
  434. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/repomap.md +0 -0
  435. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/scripting.md +0 -0
  436. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  437. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  438. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/imports.md +0 -0
  439. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  440. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/support.md +0 -0
  441. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  442. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  443. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting.md +0 -0
  444. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/commands.md +0 -0
  445. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/conventions.md +0 -0
  446. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/copypaste.md +0 -0
  447. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/images-urls.md +0 -0
  448. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/lint-test.md +0 -0
  449. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/modes.md +0 -0
  450. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/not-code.md +0 -0
  451. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/notifications.md +0 -0
  452. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/sessions.md +0 -0
  453. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/tips.md +0 -0
  454. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/voice.md +0 -0
  455. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage/watch.md +0 -0
  456. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/docs/usage.md +0 -0
  457. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli/website/share/index.md +0 -0
  458. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/dependency_links.txt +0 -0
  459. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/entry_points.txt +0 -0
  460. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/requires.txt +0 -0
  461. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/cecli_dev.egg-info/top_level.txt +0 -0
  462. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/docker/Dockerfile +0 -0
  463. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  464. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/pyproject.toml +0 -0
  465. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/pytest.ini +0 -0
  466. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/common-constraints.txt +0 -0
  467. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-dev.in +0 -0
  468. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-dev.txt +0 -0
  469. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-help.in +0 -0
  470. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-help.txt +0 -0
  471. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-playwright.in +0 -0
  472. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements-playwright.txt +0 -0
  473. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/requirements.in +0 -0
  474. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements/tree-sitter.in +0 -0
  475. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/requirements.txt +0 -0
  476. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/30k-image.py +0 -0
  477. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/Dockerfile.jekyll +0 -0
  478. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/__init__.py +0 -0
  479. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/blame.py +0 -0
  480. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/clean_metadata.py +0 -0
  481. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/cost_analyzer.py +0 -0
  482. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/dl_icons.py +0 -0
  483. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/filter-chat-mode.js +0 -0
  484. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/generate_providers.py +0 -0
  485. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/get_contributor_list.js +0 -0
  486. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/get_hashline.py +0 -0
  487. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/history_prompts.py +0 -0
  488. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/homepage.py +0 -0
  489. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/issues.py +0 -0
  490. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/jekyll_build.sh +0 -0
  491. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/jekyll_run.sh +0 -0
  492. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/logo_svg.py +0 -0
  493. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/pip-compile.sh +0 -0
  494. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/recording_audio.py +0 -0
  495. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/redact-cast.py +0 -0
  496. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/rename_to_cecli.py +0 -0
  497. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/tmux_record.sh +0 -0
  498. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/tsl_pack_langs.py +0 -0
  499. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/update-blame.sh +0 -0
  500. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/update-docs.sh +0 -0
  501. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/update-history.py +0 -0
  502. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/versionbump.py +0 -0
  503. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/scripts/yank-old-versions.py +0 -0
  504. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/setup.cfg +0 -0
  505. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/shim.pyproject.toml +0 -0
  506. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/__init__.py +0 -0
  507. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/__init__.py +0 -0
  508. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_aws_credentials.py +0 -0
  509. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_background_commands.py +0 -0
  510. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_coder.py +0 -0
  511. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_commands.py +0 -0
  512. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_custom_commands.py +0 -0
  513. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_deprecated.py +0 -0
  514. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_editblock.py +0 -0
  515. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_editor.py +0 -0
  516. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_exceptions.py +0 -0
  517. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_find_or_blocks.py +0 -0
  518. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_hashline.py +0 -0
  519. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_history.py +0 -0
  520. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_linter.py +0 -0
  521. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_main.py +0 -0
  522. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_model_info_manager.py +0 -0
  523. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_model_provider_manager.py +0 -0
  524. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_models.py +0 -0
  525. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_onboarding.py +0 -0
  526. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_plugin_manager.py +0 -0
  527. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_prompts.py +0 -0
  528. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_reasoning.py +0 -0
  529. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_repo.py +0 -0
  530. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_repomap.py +0 -0
  531. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_run_cmd.py +0 -0
  532. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_sanity_check_repo.py +0 -0
  533. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_scripting.py +0 -0
  534. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_sendchat.py +0 -0
  535. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_sessions.py +0 -0
  536. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_skills.py +0 -0
  537. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_special.py +0 -0
  538. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_ssl_verification.py +0 -0
  539. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_udiff.py +0 -0
  540. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_urls.py +0 -0
  541. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_voice.py +0 -0
  542. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_watch.py +0 -0
  543. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/basic/test_wholefile.py +0 -0
  544. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/coders/test_copypaste_coder.py +0 -0
  545. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/conftest.py +0 -0
  546. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/conversations/test_conversation_integration.py +0 -0
  547. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/conversations/test_conversation_system.py +0 -0
  548. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  549. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/chat-history.md +0 -0
  550. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/arduino/test.ino +0 -0
  551. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/c/test.c +0 -0
  552. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/chatito/test.chatito +0 -0
  553. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/clojure/test.clj +0 -0
  554. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  555. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/cpp/test.cpp +0 -0
  556. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/csharp/test.cs +0 -0
  557. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/d/test.d +0 -0
  558. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/dart/test.dart +0 -0
  559. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/elisp/test.el +0 -0
  560. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/elixir/test.ex +0 -0
  561. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/elm/test.elm +0 -0
  562. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/gleam/test.gleam +0 -0
  563. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/go/test.go +0 -0
  564. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/haskell/test.hs +0 -0
  565. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/hcl/test.tf +0 -0
  566. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/java/test.java +0 -0
  567. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/javascript/test.js +0 -0
  568. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/kotlin/test.kt +0 -0
  569. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/lua/test.lua +0 -0
  570. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/matlab/test.m +0 -0
  571. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml/test.ml +0 -0
  572. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  573. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/php/test.php +0 -0
  574. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/pony/test.pony +0 -0
  575. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/properties/test.properties +0 -0
  576. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/python/test.py +0 -0
  577. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/ql/test.ql +0 -0
  578. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/r/test.r +0 -0
  579. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/racket/test.rkt +0 -0
  580. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/ruby/test.rb +0 -0
  581. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/rust/test.rs +0 -0
  582. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/scala/test.scala +0 -0
  583. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/solidity/test.sol +0 -0
  584. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/swift/test.swift +0 -0
  585. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/tsx/test.tsx +0 -0
  586. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/typescript/test.ts +0 -0
  587. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/udev/test.rules +0 -0
  588. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/languages/zig/test.zig +0 -0
  589. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.js +0 -0
  590. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.py +0 -0
  591. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  592. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/watch.js +0 -0
  593. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/watch.lisp +0 -0
  594. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/watch.py +0 -0
  595. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/fixtures/watch_question.js +0 -0
  596. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/help/test_help.py +0 -0
  597. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config.py +0 -0
  598. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config_active.py +0 -0
  599. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  600. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_workspace.py +0 -0
  601. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/hooks/__init__.py +0 -0
  602. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/hooks/test_base.py +0 -0
  603. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/hooks/test_manager.py +0 -0
  604. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/hooks/test_registry.py +0 -0
  605. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/mcp/__init__.py +0 -0
  606. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/mcp/test_manager.py +0 -0
  607. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/scrape/test_playwright_disable.py +0 -0
  608. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/scrape/test_scrape.py +0 -0
  609. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/tools/test_git_branch.py +0 -0
  610. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/tools/test_git_diff.py +0 -0
  611. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/tools/test_grep.py +0 -0
  612. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/tests/tools/test_insert_block.py +0 -0
  613. {cecli_dev-0.99.0 → cecli_dev-0.99.2}/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.0
3
+ Version: 0.99.2
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.0.dev"
3
+ __version__ = "0.99.2.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.0'
22
- __version_tuple__ = version_tuple = (0, 99, 0)
21
+ __version__ = version = '0.99.2'
22
+ __version_tuple__ = version_tuple = (0, 99, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g12b89af88'
24
+ __commit_id__ = commit_id = 'g7361036c0'
@@ -95,7 +95,7 @@ class AgentCoder(Coder):
95
95
  super().__init__(*args, **kwargs)
96
96
 
97
97
  def _setup_agent(self):
98
- os.makedirs(".cecli/workspace", exist_ok=True)
98
+ os.makedirs(".cecli/temp", exist_ok=True)
99
99
 
100
100
  def _get_agent_config(self):
101
101
  """
@@ -1009,37 +1009,44 @@ I will proceed based on the tool results and updated context.""")
1009
1009
  repetition_warning = None
1010
1010
 
1011
1011
  if repetitive_tools:
1012
+ default_temp = (
1013
+ float(self.get_active_model().use_temperature)
1014
+ if isinstance(self.get_active_model().use_temperature, (int, float, str))
1015
+ else 1
1016
+ )
1017
+ default_fp = 0
1018
+
1012
1019
  if not self.model_kwargs:
1013
1020
  self.model_kwargs = {
1014
- "temperature": (
1015
- 1
1016
- if isinstance(self.get_active_model().use_temperature, bool)
1017
- else float(self.get_active_model().use_temperature)
1018
- ) + 0.1,
1019
- "frequency_penalty": 0.2,
1020
- "presence_penalty": 0.1,
1021
+ "temperature": default_temp + 0.1,
1022
+ "frequency_penalty": default_fp + 0.2,
1023
+ # "presence_penalty": 0.1,
1021
1024
  }
1022
1025
  else:
1023
- temperature = nested.getter(self.model_kwargs, "temperature")
1024
- freq_penalty = nested.getter(self.model_kwargs, "frequency_penalty")
1025
- if temperature and freq_penalty:
1026
- self.model_kwargs["temperature"] = min(temperature + 0.1, 2)
1027
- self.model_kwargs["frequency_penalty"] = min(freq_penalty + 0.1, 1)
1026
+ temperature = nested.getter(self.model_kwargs, "temperature", default_temp)
1027
+ freq_penalty = nested.getter(self.model_kwargs, "frequency_penalty", default_fp)
1028
+
1029
+ self.model_kwargs["temperature"] = temperature + 0.1
1030
+ self.model_kwargs["frequency_penalty"] = freq_penalty + 0.1
1028
1031
 
1029
1032
  if random.random() < 0.2:
1030
- self.model_kwargs["temperature"] = min(
1031
- (
1032
- 1
1033
- if isinstance(self.get_active_model().use_temperature, bool)
1034
- else float(self.get_active_model().use_temperature)
1035
- ),
1036
- max(temperature - 0.15, 1),
1033
+ self.model_kwargs["temperature"] = max(
1034
+ default_temp,
1035
+ temperature - 0.15,
1036
+ )
1037
+ self.model_kwargs["frequency_penalty"] = max(
1038
+ default_fp,
1039
+ freq_penalty - 0.15,
1037
1040
  )
1038
- self.model_kwargs["frequency_penalty"] = min(0, max(freq_penalty - 0.15, 0))
1039
1041
 
1040
1042
  self.model_kwargs["temperature"] = max(
1041
- 0, min(nested.getter(self.model_kwargs, "temperature", 1), 1)
1043
+ 0, min(nested.getter(self.model_kwargs, "temperature", default_temp), 1)
1042
1044
  )
1045
+
1046
+ self.model_kwargs["frequency_penalty"] = max(
1047
+ 0, min(nested.getter(self.model_kwargs, "frequency_penalty", default_fp), 1)
1048
+ )
1049
+
1043
1050
  # One twentieth of the time, just straight reset the randomness
1044
1051
  if random.random() < 0.05:
1045
1052
  self.model_kwargs = {}
@@ -229,6 +229,7 @@ class Coder:
229
229
  file_watcher=from_coder.file_watcher,
230
230
  mcp_manager=from_coder.mcp_manager,
231
231
  uuid=from_coder.uuid,
232
+ repo=from_coder.repo,
232
233
  )
233
234
  use_kwargs.update(update) # override to complete the switch
234
235
  use_kwargs.update(kwargs) # override passed kwargs
@@ -328,6 +329,7 @@ class Coder:
328
329
  uuid="",
329
330
  ):
330
331
  # initialize from args.map_cache_dir
332
+ self.interrupt_event = asyncio.Event()
331
333
  self.uuid = generate_unique_id()
332
334
  if uuid:
333
335
  self.uuid = uuid
@@ -1735,6 +1737,7 @@ class Coder:
1735
1737
 
1736
1738
  self.io.tool_warning("\n\n^C KeyboardInterrupt")
1737
1739
 
1740
+ self.interrupt_event.set()
1738
1741
  self.last_keyboard_interrupt = time.time()
1739
1742
 
1740
1743
  # Old summarization system removed - using context compaction logic instead
@@ -2768,6 +2771,7 @@ class Coder:
2768
2771
 
2769
2772
  def _print_tool_call_info(self, server_tool_calls):
2770
2773
  """Print information about an MCP tool call."""
2774
+ self.io.ring_bell()
2771
2775
  # self.io.tool_output("Preparing to run MCP tools", bold=False)
2772
2776
 
2773
2777
  for server, tool_calls in server_tool_calls.items():
@@ -3039,6 +3043,7 @@ class Coder:
3039
3043
  return prompts.added_files.format(fnames=", ".join(added_fnames))
3040
3044
 
3041
3045
  async def send(self, messages, model=None, functions=None, tools=None):
3046
+ self.interrupt_event.clear()
3042
3047
  self.got_reasoning_content = False
3043
3048
  self.ended_reasoning_content = False
3044
3049
 
@@ -3058,15 +3063,33 @@ class Coder:
3058
3063
  self.token_profiler.start()
3059
3064
 
3060
3065
  try:
3061
- hash_object, completion = await model.send_completion(
3062
- messages,
3063
- functions,
3064
- self.stream,
3065
- self.temperature,
3066
- # This could include any tools, but for now it is just MCP tools
3067
- tools=tools,
3068
- override_kwargs=self.model_kwargs,
3066
+ completion_task = asyncio.create_task(
3067
+ model.send_completion(
3068
+ messages,
3069
+ functions,
3070
+ self.stream,
3071
+ self.temperature,
3072
+ # This could include any tools, but for now it is just MCP tools
3073
+ tools=tools,
3074
+ override_kwargs=self.model_kwargs.copy(),
3075
+ )
3076
+ )
3077
+ interrupt_task = asyncio.create_task(self.interrupt_event.wait())
3078
+
3079
+ done, pending = await asyncio.wait(
3080
+ {completion_task, interrupt_task},
3081
+ return_when=asyncio.FIRST_COMPLETED,
3069
3082
  )
3083
+
3084
+ if interrupt_task in done:
3085
+ completion_task.cancel()
3086
+ try:
3087
+ await completion_task
3088
+ except asyncio.CancelledError:
3089
+ pass
3090
+ raise KeyboardInterrupt
3091
+
3092
+ hash_object, completion = completion_task.result()
3070
3093
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3071
3094
 
3072
3095
  if not isinstance(completion, ModelResponse):
@@ -5,11 +5,22 @@ Provides a static BackgroundCommandManager class for running shell commands
5
5
  in the background and capturing their output for injection into chat streams.
6
6
  """
7
7
 
8
+ import codecs
9
+ import os
10
+ import platform
8
11
  import subprocess
9
12
  import threading
10
13
  from collections import deque
11
14
  from typing import Dict, Optional, Tuple
12
15
 
16
+ try:
17
+ import pty
18
+ import termios
19
+
20
+ HAS_PTY = True
21
+ except ImportError:
22
+ HAS_PTY = False
23
+
13
24
 
14
25
  class CircularBuffer:
15
26
  """
@@ -89,14 +100,48 @@ class CircularBuffer:
89
100
  return sum(len(chunk) for chunk in self.buffer)
90
101
 
91
102
 
103
+ class InputBuffer:
104
+ """
105
+ Thread-safe buffer for queuing input to be sent to a process.
106
+ """
107
+
108
+ def __init__(self):
109
+ self.queue = deque()
110
+ self.lock = threading.Lock()
111
+
112
+ def append(self, text: str) -> None:
113
+ """Add text to the input queue."""
114
+ with self.lock:
115
+ self.queue.append(text)
116
+
117
+ def pop_all(self) -> str:
118
+ """Get and clear all queued input."""
119
+ with self.lock:
120
+ result = "".join(self.queue)
121
+ self.queue.clear()
122
+ return result
123
+
124
+ def has_input(self) -> bool:
125
+ """Check if there is queued input."""
126
+ with self.lock:
127
+ return len(self.queue) > 0
128
+
129
+
92
130
  class BackgroundProcess:
93
131
  """
94
132
  Represents a background process with output capture.
95
133
  """
96
134
 
97
135
  def __init__(
98
- self, command: str, process: subprocess.Popen, buffer: CircularBuffer, persist: bool = False
136
+ self,
137
+ command: str,
138
+ process: subprocess.Popen,
139
+ buffer: CircularBuffer,
140
+ persist: bool = False,
141
+ input_buffer: Optional[InputBuffer] = None,
142
+ master_fd: Optional[int] = None,
99
143
  ):
144
+ self.master_fd = master_fd
100
145
  """
101
146
  Initialize background process wrapper.
102
147
 
@@ -116,7 +161,11 @@ class BackgroundProcess:
116
161
  self.start_time = time.time()
117
162
  self.end_time = None
118
163
  self.persist = persist
164
+ self.input_buffer = input_buffer or InputBuffer()
165
+ self.writer_thread = None
166
+ self._stop_event = threading.Event()
119
167
  self._start_output_reader()
168
+ self._start_input_writer()
120
169
 
121
170
  def _start_output_reader(self) -> None:
122
171
  """Start thread to read process output."""
@@ -128,15 +177,25 @@ class BackgroundProcess:
128
177
  # we're in a separate thread and the buffer will capture
129
178
  # output as soon as it's available
130
179
 
131
- # Read stdout
132
- for line in iter(self.process.stdout.readline, ""):
133
- if line:
134
- self.buffer.append(line)
180
+ if self.master_fd is not None:
181
+ while not self._stop_event.is_set():
182
+ try:
183
+ data = os.read(self.master_fd, 4096).decode(errors="replace")
184
+ if not data:
185
+ break
186
+ self.buffer.append(data)
187
+ except (OSError, EOFError):
188
+ break
189
+ else:
190
+ # Read stdout
191
+ for line in iter(self.process.stdout.readline, ""):
192
+ if line:
193
+ self.buffer.append(line)
135
194
 
136
- # Read stderr
137
- for line in iter(self.process.stderr.readline, ""):
138
- if line:
139
- self.buffer.append(line)
195
+ # Read stderr
196
+ for line in iter(self.process.stderr.readline, ""):
197
+ if line:
198
+ self.buffer.append(line)
140
199
 
141
200
  except Exception as e:
142
201
  self.buffer.append(f"\n[Error reading process output: {str(e)}]\n")
@@ -144,6 +203,45 @@ class BackgroundProcess:
144
203
  self.reader_thread = threading.Thread(target=reader, daemon=True)
145
204
  self.reader_thread.start()
146
205
 
206
+ def _start_input_writer(self) -> None:
207
+ """Start thread to write input to process stdin."""
208
+
209
+ def writer():
210
+ try:
211
+ while not self._stop_event.is_set() and self.is_alive():
212
+ if self.input_buffer.has_input():
213
+ text = self.input_buffer.pop_all()
214
+ if text:
215
+ if self.master_fd is not None:
216
+ os.write(self.master_fd, text.encode("latin-1"))
217
+ else:
218
+ try:
219
+ # Try to write to the binary buffer for lossless propagation
220
+ self.process.stdin.buffer.write(text.encode("latin-1"))
221
+ self.process.stdin.buffer.flush()
222
+ except (AttributeError, ValueError):
223
+ # Fallback to text mode if buffer is not available
224
+ self.process.stdin.write(text)
225
+ self.process.stdin.flush()
226
+ import time
227
+
228
+ time.sleep(0.1)
229
+ except (BrokenPipeError, OSError):
230
+ pass
231
+ except Exception as e:
232
+ self.buffer.append(f"\n[Error writing to process input: {str(e)}]\n")
233
+ finally:
234
+ try:
235
+ if self.master_fd is not None:
236
+ os.close(self.master_fd)
237
+ else:
238
+ self.process.stdin.close()
239
+ except Exception:
240
+ pass
241
+
242
+ self.writer_thread = threading.Thread(target=writer, daemon=True)
243
+ self.writer_thread.start()
244
+
147
245
  def get_output(self, clear: bool = False) -> str:
148
246
  """
149
247
  Get current output buffer.
@@ -171,6 +269,11 @@ class BackgroundProcess:
171
269
  """Check if process is running."""
172
270
  return self.process.poll() is None
173
271
 
272
+ def send_input(self, text: str) -> None:
273
+ """Queue input to be sent to the process."""
274
+ if self.input_buffer:
275
+ self.input_buffer.append(text)
276
+
174
277
  def stop(self, timeout: float = 5.0) -> Tuple[bool, str, Optional[int]]:
175
278
  """
176
279
  Stop the process gracefully.
@@ -184,6 +287,9 @@ class BackgroundProcess:
184
287
  import time
185
288
 
186
289
  try:
290
+ # Signal threads to stop
291
+ self._stop_event.set()
292
+
187
293
  # Try SIGTERM first
188
294
  self.process.terminate()
189
295
  self.process.wait(timeout=timeout)
@@ -192,7 +298,6 @@ class BackgroundProcess:
192
298
  output = self.get_output(clear=True)
193
299
  exit_code = self.process.returncode
194
300
  self.end_time = time.time()
195
-
196
301
  return True, output, exit_code
197
302
 
198
303
  except subprocess.TimeoutExpired:
@@ -262,6 +367,8 @@ class BackgroundCommandManager:
262
367
  existing_process: Optional[subprocess.Popen] = None,
263
368
  existing_buffer: Optional[CircularBuffer] = None,
264
369
  persist: bool = False,
370
+ existing_input_buffer: Optional[InputBuffer] = None,
371
+ use_pty: bool = False,
265
372
  ) -> str:
266
373
  """
267
374
  Start a command in background.
@@ -283,7 +390,29 @@ class BackgroundCommandManager:
283
390
  buffer = existing_buffer or CircularBuffer(max_size=max_buffer_size)
284
391
 
285
392
  # Use existing process or start new one
286
- if existing_process:
393
+ master_fd = None
394
+ if use_pty and HAS_PTY and platform.system() != "Windows":
395
+ master_fd, slave_fd = pty.openpty()
396
+
397
+ # Disable echo on the slave PTY
398
+ attr = termios.tcgetattr(slave_fd)
399
+ attr[3] = attr[3] & ~termios.ECHO
400
+ termios.tcsetattr(slave_fd, termios.TCSANOW, attr)
401
+
402
+ process = subprocess.Popen(
403
+ command,
404
+ shell=True,
405
+ stdout=slave_fd,
406
+ stderr=slave_fd,
407
+ stdin=slave_fd,
408
+ cwd=cwd,
409
+ close_fds=True,
410
+ text=True,
411
+ bufsize=1,
412
+ universal_newlines=True,
413
+ )
414
+ os.close(slave_fd)
415
+ elif existing_process:
287
416
  process = existing_process
288
417
  else:
289
418
  process = subprocess.Popen(
@@ -291,15 +420,22 @@ class BackgroundCommandManager:
291
420
  shell=True,
292
421
  stdout=subprocess.PIPE,
293
422
  stderr=subprocess.PIPE,
294
- stdin=subprocess.DEVNULL, # No stdin for background commands
423
+ stdin=subprocess.PIPE,
295
424
  cwd=cwd,
296
- text=True, # Use text mode for easier handling
297
- bufsize=1, # Line buffered
425
+ text=True,
426
+ bufsize=1,
298
427
  universal_newlines=True,
299
428
  )
300
429
 
301
430
  # Create background process wrapper
302
- bg_process = BackgroundProcess(command, process, buffer, persist=persist)
431
+ bg_process = BackgroundProcess(
432
+ command,
433
+ process,
434
+ buffer,
435
+ persist=persist,
436
+ input_buffer=existing_input_buffer,
437
+ master_fd=master_fd,
438
+ )
303
439
 
304
440
  # Generate unique key and store
305
441
  command_key = cls._generate_command_key(command)
@@ -367,6 +503,30 @@ class BackgroundCommandManager:
367
503
  return f"[Error] No background command found with key: {command_key}"
368
504
  return bg_process.get_new_output()
369
505
 
506
+ @classmethod
507
+ def send_command_input(cls, command_key: str, text: str) -> bool:
508
+ """
509
+ Send input to a background command.
510
+
511
+ Args:
512
+ command_key: Command key returned by start_background_command
513
+ text: Text to send to the command's stdin
514
+
515
+ Returns:
516
+ True if input was queued, False if command not found
517
+ """
518
+ with cls._lock:
519
+ bg_process = cls._background_commands.get(command_key)
520
+ if not bg_process:
521
+ return False
522
+ # Decode escape sequences (like \x1b) if present in the string
523
+ try:
524
+ text = codecs.decode(text, "unicode_escape")
525
+ except Exception:
526
+ pass
527
+ bg_process.send_input(text)
528
+ return True
529
+
370
530
  @classmethod
371
531
  def get_all_command_outputs(cls, clear: bool = False) -> Dict[str, str]:
372
532
  """
@@ -11,6 +11,7 @@ class Project:
11
11
  self.config = config
12
12
  self.name = config["name"]
13
13
  self.repo_url = config["repo"]
14
+ self.ignore_file = config.get("ignore")
14
15
  self.base_path = workspace_path / self.name
15
16
  self.main_path = self.base_path / "main"
16
17
 
@@ -24,6 +24,17 @@ class WorkspaceManager:
24
24
  project = Project(self.path, proj_cfg)
25
25
  project.initialize()
26
26
 
27
+ # Copy ignore files to workspace root
28
+ for proj_cfg in projects_config:
29
+ ignore_file = proj_cfg.get("ignore")
30
+ if ignore_file:
31
+ ignore_path = Path(ignore_file).expanduser()
32
+ if ignore_path.exists():
33
+ import shutil
34
+
35
+ dest_path = self.path / f"{proj_cfg['name']}.ignore"
36
+ shutil.copy2(ignore_path, dest_path)
37
+
27
38
  # Write metadata
28
39
  import json
29
40
 
@@ -35,6 +35,7 @@ class SkillContent:
35
35
  references: Dict[str, Path] = field(default_factory=dict)
36
36
  scripts: Dict[str, Path] = field(default_factory=dict)
37
37
  assets: Dict[str, Path] = field(default_factory=dict)
38
+ evals: Dict[str, Path] = field(default_factory=dict)
38
39
 
39
40
 
40
41
  class SkillsManager:
@@ -227,6 +228,9 @@ class SkillsManager:
227
228
  # Load assets
228
229
  assets = self._load_assets(skill_dir)
229
230
 
231
+ # Load evals
232
+ evals = self._load_evals(skill_dir)
233
+
230
234
  return SkillContent(
231
235
  metadata=metadata,
232
236
  frontmatter=frontmatter,
@@ -234,6 +238,7 @@ class SkillsManager:
234
238
  references=references,
235
239
  scripts=scripts,
236
240
  assets=assets,
241
+ evals=evals,
237
242
  )
238
243
 
239
244
  def _load_references(self, skill_dir: Path) -> Dict[str, Path]:
@@ -286,6 +291,23 @@ class SkillsManager:
286
291
 
287
292
  return assets
288
293
 
294
+ def _load_evals(self, skill_dir: Path) -> Dict[str, Path]:
295
+ """Load eval files from the evals/ directory."""
296
+ evals = {}
297
+ evals_dir = skill_dir / "evals"
298
+
299
+ if evals_dir.exists():
300
+ for eval_file in evals_dir.glob("**/*"):
301
+ if eval_file.is_file():
302
+ try:
303
+ # Use relative path as key, store the Path object
304
+ rel_path = eval_file.relative_to(evals_dir)
305
+ evals[str(rel_path)] = eval_file
306
+ except Exception:
307
+ continue
308
+
309
+ return evals
310
+
289
311
  def get_skill_summary(self, skill_name: str) -> Optional[str]:
290
312
  """
291
313
  Get a summary of a skill for display purposes.
@@ -315,9 +337,11 @@ class SkillsManager:
315
337
  ref_count = len(skill.references)
316
338
  script_count = len(skill.scripts)
317
339
  asset_count = len(skill.assets)
340
+ eval_count = len(skill.evals)
318
341
 
319
342
  summary += (
320
- f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets\n"
343
+ f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets,"
344
+ f" {eval_count} evals\n"
321
345
  )
322
346
 
323
347
  return summary
@@ -540,6 +564,14 @@ class SkillsManager:
540
564
  result += f"- **{asset_name}**: `{asset_path}`\n"
541
565
  result += "\n"
542
566
 
567
+ # Add evals file paths
568
+ if skill_content.evals:
569
+ result += f"#### Evals ({len(skill_content.evals)} file(s))\n\n"
570
+ result += "Available eval files:\n\n"
571
+ for eval_name, eval_path in skill_content.evals.items():
572
+ result += f"- **{eval_name}**: `{eval_path}`\n"
573
+ result += "\n"
574
+
543
575
  result += "---\n\n"
544
576
 
545
577
  result += "</context>"
@@ -758,6 +758,11 @@ class InputOutput:
758
758
  print()
759
759
 
760
760
  def interrupt_input(self):
761
+ if self.coder:
762
+ coder = self.coder()
763
+ if coder and hasattr(coder, "interrupt_event"):
764
+ coder.interrupt_event.set()
765
+
761
766
  if self.prompt_session and self.prompt_session.app:
762
767
  # Store any partial input before interrupting
763
768
  self.placeholder = self.prompt_session.app.current_buffer.text
@@ -1301,6 +1306,7 @@ class InputOutput:
1301
1306
  self.user_input(f"{question} - {res}", log_only=False)
1302
1307
  else:
1303
1308
  # Ring the bell if needed
1309
+ self.notify_user_input_required()
1304
1310
  self.ring_bell()
1305
1311
  self.start_spinner("Awaiting Confirmation...", False)
1306
1312
 
@@ -1708,22 +1714,28 @@ class InputOutput:
1708
1714
 
1709
1715
  return None # Unknown system
1710
1716
 
1717
+ def _send_notification(self):
1718
+ if self.notifications_command:
1719
+ try:
1720
+ result = subprocess.run(self.notifications_command, shell=True, capture_output=True)
1721
+ if result.returncode != 0 and result.stderr:
1722
+ error_msg = result.stderr.decode("utf-8", errors="replace")
1723
+ self.tool_warning(f"Failed to run notifications command: {error_msg}")
1724
+ except Exception as e:
1725
+ self.tool_warning(f"Failed to run notifications command: {e}")
1726
+ else:
1727
+ print("\a", end="", flush=True) # Ring the bell
1728
+
1729
+ def notify_user_input_required(self):
1730
+ """Send a notification that user input is required."""
1731
+ if self.notifications:
1732
+ self._send_notification()
1733
+
1711
1734
  def ring_bell(self):
1712
1735
  """Ring the terminal bell if needed and clear the flag"""
1713
1736
  if self.bell_on_next_input and self.notifications:
1714
- if self.notifications_command:
1715
- try:
1716
- result = subprocess.run(
1717
- self.notifications_command, shell=True, capture_output=True
1718
- )
1719
- if result.returncode != 0 and result.stderr:
1720
- error_msg = result.stderr.decode("utf-8", errors="replace")
1721
- self.tool_warning(f"Failed to run notifications command: {error_msg}")
1722
- except Exception as e:
1723
- self.tool_warning(f"Failed to run notifications command: {e}")
1724
- else:
1725
- print("\a", end="", flush=True) # Ring the bell
1726
- self.bell_on_next_input = False # Clear the flag
1737
+ self._send_notification()
1738
+ self.bell_on_next_input = False
1727
1739
 
1728
1740
  def toggle_multiline_mode(self):
1729
1741
  """Toggle between normal and multiline input modes"""
@@ -610,7 +610,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
610
610
  if hasattr(args, "hooks") and args.hooks is not None:
611
611
  args.hooks = convert_yaml_to_json_string(args.hooks)
612
612
  if hasattr(args, "workspaces") and args.workspaces is not None:
613
- args.hooks = convert_yaml_to_json_string(args.workspaces)
613
+ args.workspaces = convert_yaml_to_json_string(args.workspaces)
614
614
 
615
615
  # Interpolate environment variables in all string arguments
616
616
  for key, value in vars(args).items():