cecli-dev 0.99.0__tar.gz → 0.99.1__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 (612) hide show
  1. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/agent_coder.py +27 -20
  5. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/base_coder.py +1 -1
  6. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/background_commands.py +175 -15
  7. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/repo.py +16 -3
  8. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/command.py +79 -18
  9. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/command_interactive.py +3 -0
  10. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/delete_text.py +4 -2
  11. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/finished.py +1 -0
  12. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/insert_text.py +4 -8
  13. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/replace_text.py +4 -2
  14. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/show_context.py +19 -8
  15. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/utils/base_tool.py +5 -4
  16. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/workspaces.md +5 -3
  17. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/PKG-INFO +1 -1
  18. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_io.py +4 -0
  19. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/tools/test_show_context.py +20 -0
  20. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.dockerignore +0 -0
  21. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.flake8 +0 -0
  22. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.gitattributes +0 -0
  23. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  24. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/check_pypi_version.yml +0 -0
  25. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/docker-build-test.yml +0 -0
  26. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/docker-release.yml +0 -0
  27. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/issues.yml +0 -0
  28. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/pages.yml +0 -0
  29. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/pre-commit.yml +0 -0
  30. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/release.yml +0 -0
  31. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/ubuntu-tests.yml +0 -0
  32. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/windows-tests.yml +0 -0
  33. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.github/workflows/windows_check_pypi_version.yml +0 -0
  34. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.gitignore +0 -0
  35. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/.pre-commit-config.yaml +0 -0
  36. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/CHANGELOG.md +0 -0
  37. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/CNAME +0 -0
  38. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/CONTRIBUTING.md +0 -0
  39. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/HISTORY.md +0 -0
  40. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/LICENSE.txt +0 -0
  41. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/MANIFEST.in +0 -0
  42. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/README.md +0 -0
  43. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/Dockerfile +0 -0
  44. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/README.md +0 -0
  45. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/__init__.py +0 -0
  46. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/benchmark.py +0 -0
  47. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/benchmark_classic.py +0 -0
  48. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/clone-exercism.sh +0 -0
  49. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/cpp-test.sh +0 -0
  50. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/docker.sh +0 -0
  51. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/docker_build.sh +0 -0
  52. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/install-docker-ubuntu.sh +0 -0
  53. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/npm-test.sh +0 -0
  54. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/over_time.py +0 -0
  55. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/plot.sh +0 -0
  56. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/plots.py +0 -0
  57. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/problem_stats.py +0 -0
  58. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/prompts.py +0 -0
  59. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/refactor_tools.py +0 -0
  60. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/rsync.sh +0 -0
  61. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/rungrid.py +0 -0
  62. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/swe-bench-lite.txt +0 -0
  63. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/swe-bench.txt +0 -0
  64. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/swe_bench.py +0 -0
  65. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/test_benchmark.py +0 -0
  66. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/variations.1.sh +0 -0
  67. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/variations.2.sh +0 -0
  68. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/variations.3.sh +0 -0
  69. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/benchmark/variations.4.sh +0 -0
  70. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/__main__.py +0 -0
  71. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/args.py +0 -0
  72. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/args_formatter.py +0 -0
  73. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/change_tracker.py +0 -0
  74. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/__init__.py +0 -0
  75. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/architect_coder.py +0 -0
  76. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/ask_coder.py +0 -0
  77. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/chat_chunks.py +0 -0
  78. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/context_coder.py +0 -0
  79. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/copypaste_coder.py +0 -0
  80. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editblock_coder.py +0 -0
  81. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editblock_fenced_coder.py +0 -0
  82. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editblock_func_coder.py +0 -0
  83. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  84. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editor_editblock_coder.py +0 -0
  85. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/editor_whole_coder.py +0 -0
  86. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/hashline_coder.py +0 -0
  87. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/help_coder.py +0 -0
  88. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/patch_coder.py +0 -0
  89. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/search_replace.py +0 -0
  90. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/shell.py +0 -0
  91. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/single_wholefile_func_coder.py +0 -0
  92. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/udiff_coder.py +0 -0
  93. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/udiff_simple.py +0 -0
  94. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/wholefile_coder.py +0 -0
  95. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/coders/wholefile_func_coder.py +0 -0
  96. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/__init__.py +0 -0
  97. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/add.py +0 -0
  98. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/agent.py +0 -0
  99. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/agent_model.py +0 -0
  100. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/architect.py +0 -0
  101. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/ask.py +0 -0
  102. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/chat_mode.py +0 -0
  103. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/clear.py +0 -0
  104. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/code.py +0 -0
  105. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/command_prefix.py +0 -0
  106. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/commit.py +0 -0
  107. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/compact.py +0 -0
  108. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/context.py +0 -0
  109. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/context_blocks.py +0 -0
  110. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/context_management.py +0 -0
  111. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/copy.py +0 -0
  112. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/copy_context.py +0 -0
  113. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/core.py +0 -0
  114. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/diff.py +0 -0
  115. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/drop.py +0 -0
  116. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/editor.py +0 -0
  117. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/editor_model.py +0 -0
  118. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/exit.py +0 -0
  119. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/git.py +0 -0
  120. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/hashline.py +0 -0
  121. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/help.py +0 -0
  122. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/history_search.py +0 -0
  123. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/hooks.py +0 -0
  124. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/lint.py +0 -0
  125. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/list_sessions.py +0 -0
  126. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/load.py +0 -0
  127. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/load_hook.py +0 -0
  128. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/load_mcp.py +0 -0
  129. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/load_session.py +0 -0
  130. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/load_skill.py +0 -0
  131. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/ls.py +0 -0
  132. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/map.py +0 -0
  133. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/map_refresh.py +0 -0
  134. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/model.py +0 -0
  135. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/models.py +0 -0
  136. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/multiline_mode.py +0 -0
  137. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/paste.py +0 -0
  138. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/quit.py +0 -0
  139. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/read_only.py +0 -0
  140. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/read_only_stub.py +0 -0
  141. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/reasoning_effort.py +0 -0
  142. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/remove_hook.py +0 -0
  143. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/remove_mcp.py +0 -0
  144. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/remove_skill.py +0 -0
  145. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/report.py +0 -0
  146. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/reset.py +0 -0
  147. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/rules.py +0 -0
  148. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/run.py +0 -0
  149. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/save.py +0 -0
  150. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/save_session.py +0 -0
  151. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/settings.py +0 -0
  152. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/terminal_data/linux.keytab +0 -0
  153. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/terminal_setup.py +0 -0
  154. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/test.py +0 -0
  155. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/think_tokens.py +0 -0
  156. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/tokens.py +0 -0
  157. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/undo.py +0 -0
  158. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/utils/__init__.py +0 -0
  159. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/utils/base_command.py +0 -0
  160. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/utils/helpers.py +0 -0
  161. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/utils/registry.py +0 -0
  162. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/utils/save_load_manager.py +0 -0
  163. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/voice.py +0 -0
  164. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/weak_model.py +0 -0
  165. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/web.py +0 -0
  166. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/commands/workspace.py +0 -0
  167. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/deprecated_args.py +0 -0
  168. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/diffs.py +0 -0
  169. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/dump.py +0 -0
  170. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/editor.py +0 -0
  171. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/exceptions.py +0 -0
  172. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/format_settings.py +0 -0
  173. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/help.py +0 -0
  174. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/help_pats.py +0 -0
  175. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/__init__.py +0 -0
  176. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/command_parser.py +0 -0
  177. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/__init__.py +0 -0
  178. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/base_message.py +0 -0
  179. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/files.py +0 -0
  180. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/integration.py +0 -0
  181. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/manager.py +0 -0
  182. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/service.py +0 -0
  183. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/tags.py +0 -0
  184. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/conversation/utils.py +0 -0
  185. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/copypaste.py +0 -0
  186. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/coroutines.py +0 -0
  187. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/file_searcher.py +0 -0
  188. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/hashline.py +0 -0
  189. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/hashpos/__init__.py +0 -0
  190. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/hashpos/hashpos.py +0 -0
  191. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/model_providers.py +0 -0
  192. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/monorepo/__init__.py +0 -0
  193. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/monorepo/config.py +0 -0
  194. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/monorepo/project.py +0 -0
  195. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/monorepo/workspace.py +0 -0
  196. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/monorepo/worktree.py +0 -0
  197. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/nested.py +0 -0
  198. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/plugin_manager.py +0 -0
  199. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/profiler.py +0 -0
  200. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/requests.py +0 -0
  201. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/responses.py +0 -0
  202. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/similarity.py +0 -0
  203. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/helpers/skills.py +0 -0
  204. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/history.py +0 -0
  205. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/__init__.py +0 -0
  206. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/base.py +0 -0
  207. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/integration.py +0 -0
  208. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/manager.py +0 -0
  209. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/registry.py +0 -0
  210. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/hooks/types.py +0 -0
  211. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/interruptible_input.py +0 -0
  212. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/io.py +0 -0
  213. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/linter.py +0 -0
  214. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/llm.py +0 -0
  215. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/main.py +0 -0
  216. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mcp/__init__.py +0 -0
  217. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mcp/manager.py +0 -0
  218. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mcp/oauth.py +0 -0
  219. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mcp/server.py +0 -0
  220. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mcp/utils.py +0 -0
  221. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/mdstream.py +0 -0
  222. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/models.py +0 -0
  223. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/onboarding.py +0 -0
  224. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/__init__.py +0 -0
  225. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/agent.yml +0 -0
  226. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/architect.yml +0 -0
  227. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/ask.yml +0 -0
  228. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/base.yml +0 -0
  229. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/context.yml +0 -0
  230. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/copypaste.yml +0 -0
  231. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editblock.yml +0 -0
  232. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editblock_fenced.yml +0 -0
  233. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editblock_func.yml +0 -0
  234. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editor_diff_fenced.yml +0 -0
  235. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editor_editblock.yml +0 -0
  236. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/editor_whole.yml +0 -0
  237. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/hashline.yml +0 -0
  238. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/help.yml +0 -0
  239. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/patch.yml +0 -0
  240. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/single_wholefile_func.yml +0 -0
  241. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/udiff.yml +0 -0
  242. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/udiff_simple.yml +0 -0
  243. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/utils/__init__.py +0 -0
  244. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/utils/registry.py +0 -0
  245. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/utils/system.py +0 -0
  246. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/wholefile.yml +0 -0
  247. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/prompts/wholefile_func.yml +0 -0
  248. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  249. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  250. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  251. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  252. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  253. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  254. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  255. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  256. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  257. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  258. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  259. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  260. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  261. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  262. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  263. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  264. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  265. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  266. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  267. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  268. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  269. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  270. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  271. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  272. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  273. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  274. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  275. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  276. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  277. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  278. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  279. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/README.md +0 -0
  280. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  281. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  282. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  283. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  284. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  285. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  286. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  287. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  288. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  289. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  290. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  291. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  292. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  293. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  294. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  295. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  296. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  297. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  298. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  299. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  300. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  301. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  302. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  303. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  304. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  305. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  306. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/reasoning_tags.py +0 -0
  307. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/repomap.py +0 -0
  308. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/report.py +0 -0
  309. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/resources/__init__.py +0 -0
  310. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/resources/model-metadata.json +0 -0
  311. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/resources/model-settings.yml +0 -0
  312. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/resources/providers.json +0 -0
  313. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/run_cmd.py +0 -0
  314. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/scrape.py +0 -0
  315. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/sendchat.py +0 -0
  316. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/sessions.py +0 -0
  317. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/special.py +0 -0
  318. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/__init__.py +0 -0
  319. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/context_manager.py +0 -0
  320. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_branch.py +0 -0
  321. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_diff.py +0 -0
  322. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_log.py +0 -0
  323. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_remote.py +0 -0
  324. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_show.py +0 -0
  325. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/git_status.py +0 -0
  326. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/grep.py +0 -0
  327. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/list_changes.py +0 -0
  328. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/load_skill.py +0 -0
  329. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/ls.py +0 -0
  330. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/remove_skill.py +0 -0
  331. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/thinking.py +0 -0
  332. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/undo_change.py +0 -0
  333. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/update_todo_list.py +0 -0
  334. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/utils/helpers.py +0 -0
  335. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/utils/output.py +0 -0
  336. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/utils/registry.py +0 -0
  337. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/view_files_matching.py +0 -0
  338. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tools/view_files_with_symbol.py +0 -0
  339. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/__init__.py +0 -0
  340. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/app.py +0 -0
  341. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/io.py +0 -0
  342. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/styles.tcss +0 -0
  343. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/__init__.py +0 -0
  344. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/completion_bar.py +0 -0
  345. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/file_list.py +0 -0
  346. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/footer.py +0 -0
  347. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/input_area.py +0 -0
  348. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/input_container.py +0 -0
  349. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/key_hints.py +0 -0
  350. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/output.py +0 -0
  351. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/widgets/status_bar.py +0 -0
  352. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/tui/worker.py +0 -0
  353. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/urls.py +0 -0
  354. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/utils.py +0 -0
  355. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/versioncheck.py +0 -0
  356. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/voice.py +0 -0
  357. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/waiting.py +0 -0
  358. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/watch.py +0 -0
  359. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/watch_prompts.py +0 -0
  360. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/Gemfile +0 -0
  361. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/blame.md +0 -0
  362. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/get-started.md +0 -0
  363. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/help-tip.md +0 -0
  364. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/help.md +0 -0
  365. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/install.md +0 -0
  366. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/keys.md +0 -0
  367. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/model-warnings.md +0 -0
  368. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/multi-line.md +0 -0
  369. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/python-m-aider.md +0 -0
  370. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/recording.css +0 -0
  371. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/recording.md +0 -0
  372. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_includes/works-best.md +0 -0
  373. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_features.scss +0 -0
  374. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_footer.scss +0 -0
  375. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_hero.scss +0 -0
  376. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_info.scss +0 -0
  377. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_layout.scss +0 -0
  378. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_reset.scss +0 -0
  379. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_testimonials.scss +0 -0
  380. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_typography.scss +0 -0
  381. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/_variables.scss +0 -0
  382. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/custom/custom.scss +0 -0
  383. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/_sass/global-overrides.scss +0 -0
  384. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/adv-model-settings.md +0 -0
  385. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/agent-mode.md +0 -0
  386. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/aider_conf.md +0 -0
  387. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/api-keys.md +0 -0
  388. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/custom-commands.md +0 -0
  389. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  390. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/dotenv.md +0 -0
  391. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/editor.md +0 -0
  392. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/hooks.md +0 -0
  393. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/mcp.md +0 -0
  394. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/model-aliases.md +0 -0
  395. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/options.md +0 -0
  396. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/reasoning.md +0 -0
  397. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/security.md +0 -0
  398. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/skills.md +0 -0
  399. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config/tui.md +0 -0
  400. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/config.md +0 -0
  401. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/faq.md +0 -0
  402. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/git.md +0 -0
  403. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/index.md +0 -0
  404. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/install/docker.md +0 -0
  405. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/install/optional.md +0 -0
  406. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/install.md +0 -0
  407. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/languages.md +0 -0
  408. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  409. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/legal/privacy.md +0 -0
  410. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/anthropic.md +0 -0
  411. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/azure.md +0 -0
  412. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/bedrock.md +0 -0
  413. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/cohere.md +0 -0
  414. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/deepseek.md +0 -0
  415. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/gemini.md +0 -0
  416. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/github.md +0 -0
  417. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/groq.md +0 -0
  418. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/lm-studio.md +0 -0
  419. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/ollama.md +0 -0
  420. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/openai-compat.md +0 -0
  421. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/openai.md +0 -0
  422. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/openrouter.md +0 -0
  423. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/other.md +0 -0
  424. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/vertex.md +0 -0
  425. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/warnings.md +0 -0
  426. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms/xai.md +0 -0
  427. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/llms.md +0 -0
  428. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/more/analytics.md +0 -0
  429. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/more/edit-formats.md +0 -0
  430. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/more/infinite-output.md +0 -0
  431. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/more-info.md +0 -0
  432. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/repomap.md +0 -0
  433. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/scripting.md +0 -0
  434. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  435. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  436. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/imports.md +0 -0
  437. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  438. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/support.md +0 -0
  439. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  440. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  441. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/troubleshooting.md +0 -0
  442. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/commands.md +0 -0
  443. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/conventions.md +0 -0
  444. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/copypaste.md +0 -0
  445. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/images-urls.md +0 -0
  446. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/lint-test.md +0 -0
  447. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/modes.md +0 -0
  448. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/not-code.md +0 -0
  449. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/notifications.md +0 -0
  450. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/sessions.md +0 -0
  451. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/tips.md +0 -0
  452. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/voice.md +0 -0
  453. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage/watch.md +0 -0
  454. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/docs/usage.md +0 -0
  455. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli/website/share/index.md +0 -0
  456. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/SOURCES.txt +0 -0
  457. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/dependency_links.txt +0 -0
  458. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/entry_points.txt +0 -0
  459. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/requires.txt +0 -0
  460. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/cecli_dev.egg-info/top_level.txt +0 -0
  461. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/docker/Dockerfile +0 -0
  462. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  463. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/pyproject.toml +0 -0
  464. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/pytest.ini +0 -0
  465. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/common-constraints.txt +0 -0
  466. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-dev.in +0 -0
  467. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-dev.txt +0 -0
  468. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-help.in +0 -0
  469. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-help.txt +0 -0
  470. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-playwright.in +0 -0
  471. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements-playwright.txt +0 -0
  472. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/requirements.in +0 -0
  473. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements/tree-sitter.in +0 -0
  474. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/requirements.txt +0 -0
  475. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/30k-image.py +0 -0
  476. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/Dockerfile.jekyll +0 -0
  477. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/__init__.py +0 -0
  478. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/blame.py +0 -0
  479. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/clean_metadata.py +0 -0
  480. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/cost_analyzer.py +0 -0
  481. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/dl_icons.py +0 -0
  482. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/filter-chat-mode.js +0 -0
  483. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/generate_providers.py +0 -0
  484. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/get_contributor_list.js +0 -0
  485. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/get_hashline.py +0 -0
  486. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/history_prompts.py +0 -0
  487. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/homepage.py +0 -0
  488. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/issues.py +0 -0
  489. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/jekyll_build.sh +0 -0
  490. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/jekyll_run.sh +0 -0
  491. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/logo_svg.py +0 -0
  492. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/pip-compile.sh +0 -0
  493. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/recording_audio.py +0 -0
  494. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/redact-cast.py +0 -0
  495. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/rename_to_cecli.py +0 -0
  496. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/tmux_record.sh +0 -0
  497. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/tsl_pack_langs.py +0 -0
  498. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/update-blame.sh +0 -0
  499. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/update-docs.sh +0 -0
  500. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/update-history.py +0 -0
  501. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/versionbump.py +0 -0
  502. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/scripts/yank-old-versions.py +0 -0
  503. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/setup.cfg +0 -0
  504. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/shim.pyproject.toml +0 -0
  505. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/__init__.py +0 -0
  506. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/__init__.py +0 -0
  507. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_aws_credentials.py +0 -0
  508. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_background_commands.py +0 -0
  509. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_coder.py +0 -0
  510. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_commands.py +0 -0
  511. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_custom_commands.py +0 -0
  512. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_deprecated.py +0 -0
  513. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_editblock.py +0 -0
  514. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_editor.py +0 -0
  515. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_exceptions.py +0 -0
  516. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_find_or_blocks.py +0 -0
  517. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_hashline.py +0 -0
  518. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_history.py +0 -0
  519. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_linter.py +0 -0
  520. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_main.py +0 -0
  521. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_model_info_manager.py +0 -0
  522. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_model_provider_manager.py +0 -0
  523. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_models.py +0 -0
  524. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_onboarding.py +0 -0
  525. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_plugin_manager.py +0 -0
  526. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_prompts.py +0 -0
  527. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_reasoning.py +0 -0
  528. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_repo.py +0 -0
  529. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_repomap.py +0 -0
  530. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_run_cmd.py +0 -0
  531. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_sanity_check_repo.py +0 -0
  532. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_scripting.py +0 -0
  533. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_sendchat.py +0 -0
  534. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_sessions.py +0 -0
  535. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_skills.py +0 -0
  536. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_special.py +0 -0
  537. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_ssl_verification.py +0 -0
  538. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_udiff.py +0 -0
  539. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_urls.py +0 -0
  540. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_voice.py +0 -0
  541. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_watch.py +0 -0
  542. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/basic/test_wholefile.py +0 -0
  543. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/coders/test_copypaste_coder.py +0 -0
  544. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/conftest.py +0 -0
  545. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/conversations/test_conversation_integration.py +0 -0
  546. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/conversations/test_conversation_system.py +0 -0
  547. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  548. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/chat-history.md +0 -0
  549. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/arduino/test.ino +0 -0
  550. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/c/test.c +0 -0
  551. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/chatito/test.chatito +0 -0
  552. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/clojure/test.clj +0 -0
  553. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  554. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/cpp/test.cpp +0 -0
  555. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/csharp/test.cs +0 -0
  556. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/d/test.d +0 -0
  557. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/dart/test.dart +0 -0
  558. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/elisp/test.el +0 -0
  559. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/elixir/test.ex +0 -0
  560. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/elm/test.elm +0 -0
  561. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/gleam/test.gleam +0 -0
  562. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/go/test.go +0 -0
  563. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/haskell/test.hs +0 -0
  564. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/hcl/test.tf +0 -0
  565. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/java/test.java +0 -0
  566. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/javascript/test.js +0 -0
  567. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/kotlin/test.kt +0 -0
  568. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/lua/test.lua +0 -0
  569. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/matlab/test.m +0 -0
  570. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/ocaml/test.ml +0 -0
  571. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  572. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/php/test.php +0 -0
  573. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/pony/test.pony +0 -0
  574. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/properties/test.properties +0 -0
  575. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/python/test.py +0 -0
  576. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/ql/test.ql +0 -0
  577. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/r/test.r +0 -0
  578. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/racket/test.rkt +0 -0
  579. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/ruby/test.rb +0 -0
  580. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/rust/test.rs +0 -0
  581. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/scala/test.scala +0 -0
  582. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/solidity/test.sol +0 -0
  583. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/swift/test.swift +0 -0
  584. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/tsx/test.tsx +0 -0
  585. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/typescript/test.ts +0 -0
  586. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/udev/test.rules +0 -0
  587. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/languages/zig/test.zig +0 -0
  588. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/sample-code-base/sample.js +0 -0
  589. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/sample-code-base/sample.py +0 -0
  590. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  591. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/watch.js +0 -0
  592. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/watch.lisp +0 -0
  593. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/watch.py +0 -0
  594. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/fixtures/watch_question.js +0 -0
  595. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/help/test_help.py +0 -0
  596. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/helpers/monorepo/test_config.py +0 -0
  597. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/helpers/monorepo/test_config_active.py +0 -0
  598. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  599. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/helpers/monorepo/test_workspace.py +0 -0
  600. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/hooks/__init__.py +0 -0
  601. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/hooks/test_base.py +0 -0
  602. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/hooks/test_manager.py +0 -0
  603. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/hooks/test_registry.py +0 -0
  604. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/mcp/__init__.py +0 -0
  605. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/mcp/test_manager.py +0 -0
  606. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/scrape/test_playwright_disable.py +0 -0
  607. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/scrape/test_scrape.py +0 -0
  608. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/tools/test_git_branch.py +0 -0
  609. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/tools/test_git_diff.py +0 -0
  610. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/tools/test_grep.py +0 -0
  611. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/tests/tools/test_insert_block.py +0 -0
  612. {cecli_dev-0.99.0 → cecli_dev-0.99.1}/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.1
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.1.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.1'
22
+ __version_tuple__ = version_tuple = (0, 99, 1)
23
23
 
24
- __commit_id__ = commit_id = 'g12b89af88'
24
+ __commit_id__ = commit_id = 'g587390916'
@@ -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,
1021
+ "temperature": default_temp + 0.1,
1022
+ "frequency_penalty": default_fp + 0.2,
1020
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 = {}
@@ -3065,7 +3065,7 @@ class Coder:
3065
3065
  self.temperature,
3066
3066
  # This could include any tools, but for now it is just MCP tools
3067
3067
  tools=tools,
3068
- override_kwargs=self.model_kwargs,
3068
+ override_kwargs=self.model_kwargs.copy(),
3069
3069
  )
3070
3070
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3071
3071
 
@@ -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
  """
@@ -128,9 +128,8 @@ class GitRepo:
128
128
  self.io.tool_error("Files are in different git repos.")
129
129
  raise FileNotFoundError
130
130
 
131
- # https://github.com/gitpython-developers/GitPython/issues/427
132
- self.repo = git.Repo(repo_paths.pop(), odbt=git.GitCmdObjectDB)
133
- self.root = utils.safe_abs_path(self.repo.working_tree_dir)
131
+ self._init_repo_path = repo_paths.pop()
132
+ self.init_repo()
134
133
 
135
134
  if cecli_ignore_file:
136
135
  self.cecli_ignore_file = Path(cecli_ignore_file)
@@ -140,6 +139,18 @@ class GitRepo:
140
139
  if self.workspace_path:
141
140
  self.io.tool_output(f"Working in workspace: {self.workspace_path.name}")
142
141
 
142
+ def init_repo(self):
143
+ if not self.repo:
144
+ self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
145
+ self.root = utils.safe_abs_path(self.repo.working_tree_dir)
146
+
147
+ try:
148
+ commit = self.repo.head.commit
149
+ return commit
150
+ except ANY_GIT_ERROR:
151
+ self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
152
+ self.root = utils.safe_abs_path(self.repo.working_tree_dir)
153
+
143
154
  def _detect_workspace_path(self, start_path: str):
144
155
  """Check if current directory is within a workspace"""
145
156
  current = Path(start_path).resolve()
@@ -478,6 +489,8 @@ class GitRepo:
478
489
  if not self.repo:
479
490
  return []
480
491
 
492
+ self.init_repo()
493
+
481
494
  try:
482
495
  commit = self.repo.head.commit
483
496
  except ValueError:
@@ -17,42 +17,99 @@ class Tool(BaseTool):
17
17
  "parameters": {
18
18
  "type": "object",
19
19
  "properties": {
20
- "command_string": {
20
+ "command": {
21
21
  "type": "string",
22
- "description": "The shell command to execute.",
22
+ "description": (
23
+ "The shell command to execute. To send stdin to an existing background"
24
+ " command, use the format 'command_key::{key}'."
25
+ ),
23
26
  },
24
27
  "background": {
25
28
  "type": "boolean",
26
29
  "description": "Run command in background (non-blocking).",
27
30
  "default": False,
28
31
  },
29
- "stop_background": {
32
+ "stop": {
33
+ "type": "boolean",
34
+ "description": (
35
+ "If true, stop the background command specified in the 'command'"
36
+ " parameter (format 'command_key::{key}')."
37
+ ),
38
+ "default": False,
39
+ },
40
+ "pty": {
41
+ "type": "boolean",
42
+ "description": (
43
+ "Run the command in a pseudo-terminal (PTY). Useful for interactive"
44
+ " programs like 'vi' or 'top'."
45
+ ),
46
+ "default": False,
47
+ },
48
+ "stdin": {
30
49
  "type": "string",
31
- "description": "Command string to stop if running in background.",
50
+ "description": (
51
+ "Input to send to the command's stdin. Supports escape sequences like"
52
+ " \\n, \\r, \\t, and hex escapes like \\x1b."
53
+ ),
32
54
  },
33
55
  },
34
- "required": ["command_string"],
56
+ "required": ["command"],
35
57
  },
36
58
  },
37
59
  }
38
60
 
61
+ @staticmethod
62
+ def _parse_command_key(command):
63
+ """Extract command key from command string if it follows the pattern."""
64
+ if command and command.startswith("command_key::"):
65
+ return command.split("::", 1)[1].strip()
66
+ return None
67
+
39
68
  @classmethod
40
- async def execute(cls, coder, command_string, background=False, stop_background=None, **kwargs):
69
+ async def execute(
70
+ cls, coder, command, background=False, stop=None, stdin=None, pty=False, **kwargs
71
+ ):
41
72
  """
42
73
  Execute a shell command, optionally in background.
43
74
  Commands run with timeout based on agent_config['command_timeout'] (default: 30 seconds).
44
75
  """
76
+ command_key = cls._parse_command_key(command)
77
+
45
78
  # Handle stopping background commands
46
- if stop_background:
47
- return await cls._stop_background_command(coder, stop_background)
79
+ if stop:
80
+ if not command_key:
81
+ return (
82
+ "Error: 'command' in format 'command_key::{key}' is required when 'stop' is"
83
+ " true."
84
+ )
85
+ return await cls._stop_background_command(coder, command_key)
86
+
87
+ # Handle sending stdin to an existing background command
88
+ if stdin:
89
+ if not command_key:
90
+ return (
91
+ "Error: 'command' in format 'command_key::{key}' is required when using"
92
+ " 'stdin'."
93
+ )
94
+
95
+ cls.clear_invocation_cache()
96
+
97
+ success = BackgroundCommandManager.send_command_input(command_key, stdin)
98
+ if success:
99
+ return f"Sent input to background command {command_key}: {stdin}"
100
+ else:
101
+ return f"Error: Background command {command_key} not found or not running."
102
+
103
+ if not command:
104
+ return "Error: 'command' must be provided."
48
105
 
49
106
  # Check for implicit background (trailing & on Linux)
50
- if not background and command_string.strip().endswith("&"):
107
+ if not background and command.strip().endswith("&"):
51
108
  background = True
52
- command_string = command_string.strip()[:-1].strip()
109
+ command = command.strip()[:-1].strip()
53
110
 
54
111
  # Get user confirmation
55
- confirmed = await cls._get_confirmation(coder, command_string, background)
112
+ confirmed = await cls._get_confirmation(coder, command, background)
56
113
  if not confirmed:
57
114
  return "Command execution skipped by user."
58
115
 
@@ -62,11 +119,11 @@ class Tool(BaseTool):
62
119
  timeout = coder.agent_config.get("command_timeout", 30)
63
120
 
64
121
  if background:
65
- return await cls._execute_background(coder, command_string)
122
+ return await cls._execute_background(coder, command, use_pty=pty)
66
123
  elif timeout > 0:
67
- return await cls._execute_with_timeout(coder, command_string, timeout)
124
+ return await cls._execute_with_timeout(coder, command, timeout, use_pty=pty)
68
125
  else:
69
- return await cls._execute_foreground(coder, command_string)
126
+ return await cls._execute_foreground(coder, command)
70
127
 
71
128
  @classmethod
72
129
  async def _get_confirmation(cls, coder, command_string, background):
@@ -90,7 +147,7 @@ class Tool(BaseTool):
90
147
  )
91
148
 
92
149
  @classmethod
93
- async def _execute_background(cls, coder, command_string):
150
+ async def _execute_background(cls, coder, command_string, use_pty=False):
94
151
  """
95
152
  Execute command in background.
96
153
  """
@@ -98,7 +155,11 @@ class Tool(BaseTool):
98
155
 
99
156
  # Use static manager to start background command
100
157
  command_key = BackgroundCommandManager.start_background_command(
101
- command_string, verbose=coder.verbose, cwd=coder.root, max_buffer_size=4096
158
+ command_string,
159
+ verbose=coder.verbose,
160
+ cwd=coder.root,
161
+ max_buffer_size=4096,
162
+ use_pty=use_pty,
102
163
  )
103
164
 
104
165
  return (
@@ -108,7 +169,7 @@ class Tool(BaseTool):
108
169
  )
109
170
 
110
171
  @classmethod
111
- async def _execute_with_timeout(cls, coder, command_string, timeout):
172
+ async def _execute_with_timeout(cls, coder, command_string, timeout, use_pty=False):
112
173
  """
113
174
  Execute command with timeout. If timeout elapses, move to background.
114
175
 
@@ -136,7 +197,7 @@ class Tool(BaseTool):
136
197
  executable=shell if platform.system() != "Windows" else None,
137
198
  stdout=subprocess.PIPE,
138
199
  stderr=subprocess.PIPE,
139
- stdin=subprocess.DEVNULL,
200
+ stdin=subprocess.PIPE,
140
201
  cwd=coder.root,
141
202
  text=True,
142
203
  bufsize=1,
@@ -7,6 +7,7 @@ from cecli.tools.utils.base_tool import BaseTool
7
7
 
8
8
  class Tool(BaseTool):
9
9
  NORM_NAME = "commandinteractive"
10
+ TRACK_INVOCATIONS = False
10
11
  SCHEMA = {
11
12
  "type": "function",
12
13
  "function": {
@@ -92,6 +93,8 @@ class Tool(BaseTool):
92
93
  " large_file_token_threshold)"
93
94
  )
94
95
 
96
+ cls.clear_invocation_cache()
97
+
95
98
  if exit_status == 0:
96
99
  return (
97
100
  "Interactive command finished successfully (exit code 0)."
@@ -64,8 +64,6 @@ class Tool(BaseTool):
64
64
  raise ToolError(
65
65
  "Please call `ShowContext` first to make sure edits are appropriately scoped"
66
66
  )
67
- else:
68
- coder.edit_allowed = False
69
67
 
70
68
  tool_name = "DeleteText"
71
69
  try:
@@ -120,6 +118,8 @@ class Tool(BaseTool):
120
118
  )
121
119
 
122
120
  coder.files_edited_by_tools.add(rel_path)
121
+ cls.clear_invocation_cache()
122
+
123
123
  # 5. Format and return result
124
124
  success_message = f"Deleted lines {start_line} to {end_line} in {file_path}"
125
125
  return format_tool_result(
@@ -131,7 +131,9 @@ class Tool(BaseTool):
131
131
 
132
132
  except ToolError as e:
133
133
  # Handle errors raised by utility functions (expected errors)
134
+ coder.edit_allowed = False
134
135
  return handle_tool_error(coder, tool_name, e, add_traceback=False)
135
136
  except Exception as e:
136
137
  # Handle unexpected errors
138
+ coder.edit_allowed = False
137
139
  return handle_tool_error(coder, tool_name, e)
@@ -26,6 +26,7 @@ class Tool(BaseTool):
26
26
 
27
27
  This gives the LLM explicit control over when it can stop looping
28
28
  """
29
+ cls.clear_invocation_cache()
29
30
 
30
31
  if coder:
31
32
  coder.agent_finished = True