cecli-dev 0.100.11rc2__tar.gz → 0.100.11rc4__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 (688) hide show
  1. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/PKG-INFO +1 -1
  2. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/_version.py +3 -3
  3. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/args.py +3 -8
  4. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/__init__.py +20 -0
  5. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/base_coder.py +8 -25
  6. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/copypaste_coder.py +1 -1
  7. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/core.py +15 -1
  8. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/hashline.py +101 -128
  9. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/skills.py +14 -1
  10. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/repo.py +12 -5
  11. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/edit_text.py +74 -27
  12. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/PKG-INFO +1 -1
  13. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/scm_version.json +2 -2
  14. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_hashline_closure.py +132 -44
  15. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/scrape/test_scrape.py +4 -1
  16. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.dockerignore +0 -0
  17. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.flake8 +0 -0
  18. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.gitattributes +0 -0
  19. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  20. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/check_pypi_version.yml +0 -0
  21. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/docker-build-test.yml +0 -0
  22. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/docker-release.yml +0 -0
  23. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/issues.yml +0 -0
  24. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/pages.yml +0 -0
  25. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/pre-commit.yml +0 -0
  26. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/release.yml +0 -0
  27. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/ubuntu-tests.yml +0 -0
  28. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/windows-tests.yml +0 -0
  29. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.github/workflows/windows_check_pypi_version.yml +0 -0
  30. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.gitignore +0 -0
  31. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/.pre-commit-config.yaml +0 -0
  32. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/CHANGELOG.md +0 -0
  33. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/CNAME +0 -0
  34. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/CONTRIBUTING.md +0 -0
  35. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/HISTORY.md +0 -0
  36. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/LICENSE.txt +0 -0
  37. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/MANIFEST.in +0 -0
  38. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/README.md +0 -0
  39. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/Dockerfile +0 -0
  40. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/README.md +0 -0
  41. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/__init__.py +0 -0
  42. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/benchmark.py +0 -0
  43. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/benchmark_classic.py +0 -0
  44. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/clone-exercism.sh +0 -0
  45. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/cpp-test.sh +0 -0
  46. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/docker.sh +0 -0
  47. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/docker_build.sh +0 -0
  48. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/install-docker-ubuntu.sh +0 -0
  49. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/npm-test.sh +0 -0
  50. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/over_time.py +0 -0
  51. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/plot.sh +0 -0
  52. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/plots.py +0 -0
  53. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/problem_stats.py +0 -0
  54. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/prompts.py +0 -0
  55. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/refactor_tools.py +0 -0
  56. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/rsync.sh +0 -0
  57. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/rungrid.py +0 -0
  58. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/swe-bench-lite.txt +0 -0
  59. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/swe-bench.txt +0 -0
  60. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/swe_bench.py +0 -0
  61. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/test_benchmark.py +0 -0
  62. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/variations.1.sh +0 -0
  63. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/variations.2.sh +0 -0
  64. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/variations.3.sh +0 -0
  65. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/benchmark/variations.4.sh +0 -0
  66. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/__init__.py +0 -0
  67. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/__main__.py +0 -0
  68. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/args_formatter.py +0 -0
  69. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/change_tracker.py +0 -0
  70. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/agent_coder.py +0 -0
  71. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/architect_coder.py +0 -0
  72. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/ask_coder.py +0 -0
  73. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/chat_chunks.py +0 -0
  74. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/context_coder.py +0 -0
  75. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editblock_coder.py +0 -0
  76. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editblock_fenced_coder.py +0 -0
  77. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editblock_func_coder.py +0 -0
  78. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  79. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editor_editblock_coder.py +0 -0
  80. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/editor_whole_coder.py +0 -0
  81. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/hashline_coder.py +0 -0
  82. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/help_coder.py +0 -0
  83. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/patch_coder.py +0 -0
  84. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/search_replace.py +0 -0
  85. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/shell.py +0 -0
  86. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/single_wholefile_func_coder.py +0 -0
  87. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/sub_agent_coder.py +0 -0
  88. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/udiff_coder.py +0 -0
  89. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/udiff_simple.py +0 -0
  90. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/wholefile_coder.py +0 -0
  91. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/coders/wholefile_func_coder.py +0 -0
  92. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/__init__.py +0 -0
  93. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/add.py +0 -0
  94. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/agent.py +0 -0
  95. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/agent_model.py +0 -0
  96. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/architect.py +0 -0
  97. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/ask.py +0 -0
  98. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/chat_mode.py +0 -0
  99. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/clear.py +0 -0
  100. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/code.py +0 -0
  101. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/command_prefix.py +0 -0
  102. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/commit.py +0 -0
  103. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/compact.py +0 -0
  104. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/context.py +0 -0
  105. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/context_blocks.py +0 -0
  106. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/context_management.py +0 -0
  107. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/copy.py +0 -0
  108. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/copy_context.py +0 -0
  109. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/diff.py +0 -0
  110. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/drop.py +0 -0
  111. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/editor.py +0 -0
  112. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/editor_model.py +0 -0
  113. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/exclude_skill.py +0 -0
  114. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/exit.py +0 -0
  115. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/git.py +0 -0
  116. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/hashline.py +0 -0
  117. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/help.py +0 -0
  118. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/history_search.py +0 -0
  119. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/hooks.py +0 -0
  120. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/hot_reload.py +0 -0
  121. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/include_skill.py +0 -0
  122. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/lint.py +0 -0
  123. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/list_mcp.py +0 -0
  124. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/list_sessions.py +0 -0
  125. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/list_skills.py +0 -0
  126. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/load.py +0 -0
  127. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/load_hook.py +0 -0
  128. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/load_mcp.py +0 -0
  129. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/load_session.py +0 -0
  130. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/load_skill.py +0 -0
  131. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/ls.py +0 -0
  132. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/map.py +0 -0
  133. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/map_refresh.py +0 -0
  134. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/merge.py +0 -0
  135. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/model.py +0 -0
  136. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/models.py +0 -0
  137. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/multiline_mode.py +0 -0
  138. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/paste.py +0 -0
  139. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/quit.py +0 -0
  140. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/read_only.py +0 -0
  141. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/read_only_stub.py +0 -0
  142. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/reap_agent.py +0 -0
  143. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/reasoning_effort.py +0 -0
  144. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/remove_hook.py +0 -0
  145. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/remove_mcp.py +0 -0
  146. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/remove_skill.py +0 -0
  147. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/report.py +0 -0
  148. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/reset.py +0 -0
  149. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/rules.py +0 -0
  150. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/run.py +0 -0
  151. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/save.py +0 -0
  152. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/save_session.py +0 -0
  153. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/settings.py +0 -0
  154. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/spawn_agent.py +0 -0
  155. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/switch_agent.py +0 -0
  156. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/terminal_data/linux.keytab +0 -0
  157. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/terminal_setup.py +0 -0
  158. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/test.py +0 -0
  159. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/think_tokens.py +0 -0
  160. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/tokens.py +0 -0
  161. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/undo.py +0 -0
  162. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/utils/__init__.py +0 -0
  163. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/utils/base_command.py +0 -0
  164. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/utils/helpers.py +0 -0
  165. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/utils/registry.py +0 -0
  166. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/utils/save_load_manager.py +0 -0
  167. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/voice.py +0 -0
  168. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/weak_model.py +0 -0
  169. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/web.py +0 -0
  170. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/commands/workspace.py +0 -0
  171. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/deprecated_args.py +0 -0
  172. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/diffs.py +0 -0
  173. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/dump.py +0 -0
  174. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/editor.py +0 -0
  175. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/exceptions.py +0 -0
  176. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/format_settings.py +0 -0
  177. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/help.py +0 -0
  178. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/help_pats.py +0 -0
  179. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/__init__.py +0 -0
  180. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/agents/__init__.py +0 -0
  181. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/agents/config.py +0 -0
  182. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/agents/service.py +0 -0
  183. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/background_commands.py +0 -0
  184. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/command_parser.py +0 -0
  185. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/__init__.py +0 -0
  186. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/base_message.py +0 -0
  187. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/files.py +0 -0
  188. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/integration.py +0 -0
  189. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/manager.py +0 -0
  190. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/service.py +0 -0
  191. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/tags.py +0 -0
  192. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/conversation/utils.py +0 -0
  193. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/copypaste.py +0 -0
  194. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/coroutines.py +0 -0
  195. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/crypto.py +0 -0
  196. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_searcher.py +0 -0
  197. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/__init__.py +0 -0
  198. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/builders.py +0 -0
  199. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/ignore.py +0 -0
  200. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/ngram_index.py +0 -0
  201. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/service.py +0 -0
  202. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/file_system/trie_index.py +0 -0
  203. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/__init__.py +0 -0
  204. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/dump.py +0 -0
  205. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  206. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/main.py +0 -0
  207. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/parsers.py +0 -0
  208. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/grep_ast/tsl.py +0 -0
  209. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/hashpos/__init__.py +0 -0
  210. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/hashpos/hashpos.py +0 -0
  211. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  212. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/io_proxy.py +0 -0
  213. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/leak_detect.py +0 -0
  214. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/model_providers.py +0 -0
  215. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/__init__.py +0 -0
  216. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/config.py +0 -0
  217. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/local_workspace.py +0 -0
  218. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/project.py +0 -0
  219. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/workspace.py +0 -0
  220. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/monorepo/worktree.py +0 -0
  221. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/nested.py +0 -0
  222. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/observations/__init__.py +0 -0
  223. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/observations/service.py +0 -0
  224. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/plugin_manager.py +0 -0
  225. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/profiler.py +0 -0
  226. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/requests.py +0 -0
  227. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/responses.py +0 -0
  228. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/similarity.py +0 -0
  229. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/helpers/threading.py +0 -0
  230. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/history.py +0 -0
  231. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/__init__.py +0 -0
  232. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/base.py +0 -0
  233. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/integration.py +0 -0
  234. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/manager.py +0 -0
  235. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/registry.py +0 -0
  236. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/service.py +0 -0
  237. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/hooks/types.py +0 -0
  238. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/interruptible_input.py +0 -0
  239. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/io.py +0 -0
  240. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/linter.py +0 -0
  241. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/llm.py +0 -0
  242. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/main.py +0 -0
  243. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mcp/__init__.py +0 -0
  244. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mcp/manager.py +0 -0
  245. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mcp/oauth.py +0 -0
  246. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mcp/server.py +0 -0
  247. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mcp/utils.py +0 -0
  248. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/mdstream.py +0 -0
  249. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/models.py +0 -0
  250. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/onboarding.py +0 -0
  251. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/__init__.py +0 -0
  252. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/agent.yml +0 -0
  253. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/architect.yml +0 -0
  254. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/ask.yml +0 -0
  255. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/base.yml +0 -0
  256. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/context.yml +0 -0
  257. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/copypaste.yml +0 -0
  258. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editblock.yml +0 -0
  259. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editblock_fenced.yml +0 -0
  260. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editblock_func.yml +0 -0
  261. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editor_diff_fenced.yml +0 -0
  262. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editor_editblock.yml +0 -0
  263. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/editor_whole.yml +0 -0
  264. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/hashline.yml +0 -0
  265. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/help.yml +0 -0
  266. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/patch.yml +0 -0
  267. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/single_wholefile_func.yml +0 -0
  268. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/subagent.yml +0 -0
  269. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/udiff.yml +0 -0
  270. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/udiff_simple.yml +0 -0
  271. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/utils/__init__.py +0 -0
  272. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/utils/registry.py +0 -0
  273. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/utils/system.py +0 -0
  274. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/wholefile.yml +0 -0
  275. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/prompts/wholefile_func.yml +0 -0
  276. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  277. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  278. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  279. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  280. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  281. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  282. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  283. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  284. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  285. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  286. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  287. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  288. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  289. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  290. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  291. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  292. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  293. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  294. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  295. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  296. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  297. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  298. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  299. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  300. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  301. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  302. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  303. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  304. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  305. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  306. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  307. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  308. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/README.md +0 -0
  309. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  310. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  311. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  312. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  313. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  314. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  315. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  316. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  317. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  318. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  319. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  320. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  321. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  322. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  323. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  324. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  325. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  326. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  327. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  328. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  329. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  330. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  331. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  332. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  333. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  334. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  335. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  336. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/reasoning_tags.py +0 -0
  337. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/repomap.py +0 -0
  338. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/report.py +0 -0
  339. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/resources/__init__.py +0 -0
  340. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/resources/model-metadata.json +0 -0
  341. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/resources/model-settings.yml +0 -0
  342. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/resources/providers.json +0 -0
  343. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/run_cmd.py +0 -0
  344. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/scrape.py +0 -0
  345. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/sendchat.py +0 -0
  346. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/sessions.py +0 -0
  347. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/special.py +0 -0
  348. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/__init__.py +0 -0
  349. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/_yield.py +0 -0
  350. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/command.py +0 -0
  351. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/command_interactive.py +0 -0
  352. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/delegate.py +0 -0
  353. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/explore_code.py +0 -0
  354. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_branch.py +0 -0
  355. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_diff.py +0 -0
  356. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_log.py +0 -0
  357. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_remote.py +0 -0
  358. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_show.py +0 -0
  359. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/git_status.py +0 -0
  360. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/grep.py +0 -0
  361. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/ls.py +0 -0
  362. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/read_range.py +0 -0
  363. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/resource_manager.py +0 -0
  364. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/thinking.py +0 -0
  365. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/undo_change.py +0 -0
  366. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/update_todo_list.py +0 -0
  367. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/utils/__init__.py +0 -0
  368. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/utils/base_tool.py +0 -0
  369. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/utils/helpers.py +0 -0
  370. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/utils/output.py +0 -0
  371. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/utils/registry.py +0 -0
  372. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/validations/__init__.py +0 -0
  373. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tools/validations/validations.py +0 -0
  374. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/__init__.py +0 -0
  375. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/app.py +0 -0
  376. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/io.py +0 -0
  377. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/styles.tcss +0 -0
  378. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/__init__.py +0 -0
  379. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/completion_bar.py +0 -0
  380. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/file_list.py +0 -0
  381. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/footer.py +0 -0
  382. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/input_area.py +0 -0
  383. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/input_container.py +0 -0
  384. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/key_hints.py +0 -0
  385. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/output.py +0 -0
  386. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/status_bar.py +0 -0
  387. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/widgets/subagent_pills.py +0 -0
  388. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/tui/worker.py +0 -0
  389. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/urls.py +0 -0
  390. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/utils.py +0 -0
  391. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/versioncheck.py +0 -0
  392. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/voice.py +0 -0
  393. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/waiting.py +0 -0
  394. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/watch.py +0 -0
  395. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/watch_prompts.py +0 -0
  396. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/Gemfile +0 -0
  397. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/blame.md +0 -0
  398. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/get-started.md +0 -0
  399. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/help-tip.md +0 -0
  400. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/help.md +0 -0
  401. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/install.md +0 -0
  402. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/keys.md +0 -0
  403. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/model-warnings.md +0 -0
  404. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/multi-line.md +0 -0
  405. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/python-m-aider.md +0 -0
  406. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/recording.css +0 -0
  407. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/recording.md +0 -0
  408. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_includes/works-best.md +0 -0
  409. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_features.scss +0 -0
  410. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_footer.scss +0 -0
  411. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_hero.scss +0 -0
  412. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_info.scss +0 -0
  413. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_layout.scss +0 -0
  414. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_reset.scss +0 -0
  415. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_testimonials.scss +0 -0
  416. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_typography.scss +0 -0
  417. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/_variables.scss +0 -0
  418. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/custom/custom.scss +0 -0
  419. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/_sass/global-overrides.scss +0 -0
  420. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/adv-model-settings.md +0 -0
  421. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/agent-mode.md +0 -0
  422. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/api-keys.md +0 -0
  423. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/conf.md +0 -0
  424. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/custom-commands.md +0 -0
  425. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  426. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/dotenv.md +0 -0
  427. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/editor.md +0 -0
  428. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/hooks.md +0 -0
  429. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/mcp.md +0 -0
  430. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/model-aliases.md +0 -0
  431. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/model-configuration.md +0 -0
  432. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/options.md +0 -0
  433. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/reasoning.md +0 -0
  434. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/security.md +0 -0
  435. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/skills.md +0 -0
  436. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/subagents.md +0 -0
  437. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/tui.md +0 -0
  438. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config/workspaces.md +0 -0
  439. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/config.md +0 -0
  440. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/git.md +0 -0
  441. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/index.md +0 -0
  442. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/install/docker.md +0 -0
  443. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/install.md +0 -0
  444. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/languages.md +0 -0
  445. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  446. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/legal/privacy.md +0 -0
  447. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/anthropic.md +0 -0
  448. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/azure.md +0 -0
  449. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/bedrock.md +0 -0
  450. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/cohere.md +0 -0
  451. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/deepseek.md +0 -0
  452. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/gemini.md +0 -0
  453. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/github.md +0 -0
  454. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/groq.md +0 -0
  455. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/lm-studio.md +0 -0
  456. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/ollama.md +0 -0
  457. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/openai-compat.md +0 -0
  458. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/openai.md +0 -0
  459. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/openrouter.md +0 -0
  460. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/other.md +0 -0
  461. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/vertex.md +0 -0
  462. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/warnings.md +0 -0
  463. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms/xai.md +0 -0
  464. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/llms.md +0 -0
  465. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/more/analytics.md +0 -0
  466. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/more/edit-formats.md +0 -0
  467. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/more/infinite-output.md +0 -0
  468. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/more-info.md +0 -0
  469. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/repomap.md +0 -0
  470. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/scripting.md +0 -0
  471. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  472. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  473. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/imports.md +0 -0
  474. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  475. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/support.md +0 -0
  476. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  477. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  478. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/troubleshooting.md +0 -0
  479. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/commands.md +0 -0
  480. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/conventions.md +0 -0
  481. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/copypaste.md +0 -0
  482. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/images-urls.md +0 -0
  483. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/lint-test.md +0 -0
  484. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/modes.md +0 -0
  485. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/not-code.md +0 -0
  486. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/notifications.md +0 -0
  487. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/optional.md +0 -0
  488. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/sessions.md +0 -0
  489. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/tips.md +0 -0
  490. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/voice.md +0 -0
  491. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage/watch.md +0 -0
  492. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/docs/usage.md +0 -0
  493. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli/website/share/index.md +0 -0
  494. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/SOURCES.txt +0 -0
  495. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/dependency_links.txt +0 -0
  496. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/entry_points.txt +0 -0
  497. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/requires.txt +0 -0
  498. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/scm_file_list.json +0 -0
  499. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/cecli_dev.egg-info/top_level.txt +0 -0
  500. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/docker/Dockerfile +0 -0
  501. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  502. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/pyproject.toml +0 -0
  503. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/pytest.ini +0 -0
  504. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/common-constraints.txt +0 -0
  505. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-dev.in +0 -0
  506. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-dev.txt +0 -0
  507. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-help.in +0 -0
  508. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-help.txt +0 -0
  509. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-playwright.in +0 -0
  510. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements-playwright.txt +0 -0
  511. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/requirements.in +0 -0
  512. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements/tree-sitter.in +0 -0
  513. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/requirements.txt +0 -0
  514. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/30k-image.py +0 -0
  515. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/Dockerfile.jekyll +0 -0
  516. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/__init__.py +0 -0
  517. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/blame.py +0 -0
  518. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/clean_metadata.py +0 -0
  519. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/compare-message-history.py +0 -0
  520. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/cost_analyzer.py +0 -0
  521. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/cost_calculator.py +0 -0
  522. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/dl_icons.py +0 -0
  523. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/filter-chat-mode.js +0 -0
  524. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/generate_providers.py +0 -0
  525. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/get_contributor_list.js +0 -0
  526. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/get_hashline.py +0 -0
  527. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/history_prompts.py +0 -0
  528. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/homepage.py +0 -0
  529. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/issues.py +0 -0
  530. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/jekyll_build.sh +0 -0
  531. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/jekyll_run.sh +0 -0
  532. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/logo_svg.py +0 -0
  533. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/pip-compile.sh +0 -0
  534. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/recording_audio.py +0 -0
  535. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/redact-cast.py +0 -0
  536. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/rename_to_cecli.py +0 -0
  537. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/tmux_record.sh +0 -0
  538. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/tsl_pack_langs.py +0 -0
  539. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/update-blame.sh +0 -0
  540. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/update-docs.sh +0 -0
  541. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/update-history.py +0 -0
  542. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/versionbump.py +0 -0
  543. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/scripts/yank-old-versions.py +0 -0
  544. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/setup.cfg +0 -0
  545. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/shim.pyproject.toml +0 -0
  546. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/__init__.py +0 -0
  547. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/__init__.py +0 -0
  548. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/conftest.py +0 -0
  549. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_aws_credentials.py +0 -0
  550. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_background_commands.py +0 -0
  551. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_coder.py +0 -0
  552. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_commands.py +0 -0
  553. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_custom_commands.py +0 -0
  554. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_deprecated.py +0 -0
  555. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_editblock.py +0 -0
  556. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_editor.py +0 -0
  557. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_exceptions.py +0 -0
  558. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_find_or_blocks.py +0 -0
  559. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_hashline.py +0 -0
  560. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_history.py +0 -0
  561. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_io.py +0 -0
  562. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_linter.py +0 -0
  563. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_main.py +0 -0
  564. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_model_info_manager.py +0 -0
  565. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_model_provider_manager.py +0 -0
  566. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_models.py +0 -0
  567. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_onboarding.py +0 -0
  568. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_plugin_manager.py +0 -0
  569. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_prompts.py +0 -0
  570. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_reasoning.py +0 -0
  571. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_repo.py +0 -0
  572. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_repomap.py +0 -0
  573. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_run_cmd.py +0 -0
  574. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_sanity_check_repo.py +0 -0
  575. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_scripting.py +0 -0
  576. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_sendchat.py +0 -0
  577. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_session_args.py +0 -0
  578. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_session_crypto.py +0 -0
  579. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_sessions.py +0 -0
  580. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_sessions_manager.py +0 -0
  581. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_skills.py +0 -0
  582. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_special.py +0 -0
  583. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_ssl_verification.py +0 -0
  584. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_udiff.py +0 -0
  585. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_urls.py +0 -0
  586. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_voice.py +0 -0
  587. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_watch.py +0 -0
  588. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/basic/test_wholefile.py +0 -0
  589. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/coders/test_coder_switching.py +0 -0
  590. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/coders/test_copypaste_coder.py +0 -0
  591. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/commands/test_compaction.py +0 -0
  592. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/commands/test_switch_agent.py +0 -0
  593. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/conftest.py +0 -0
  594. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/conversations/test_conversation_integration.py +0 -0
  595. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/conversations/test_conversation_system.py +0 -0
  596. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  597. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/chat-history.md +0 -0
  598. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/arduino/test.ino +0 -0
  599. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/bash/test.sh +0 -0
  600. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/c/test.c +0 -0
  601. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/chatito/test.chatito +0 -0
  602. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/clojure/test.clj +0 -0
  603. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  604. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/cpp/test.cpp +0 -0
  605. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/csharp/test.cs +0 -0
  606. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/d/test.d +0 -0
  607. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/dart/test.dart +0 -0
  608. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/elisp/test.el +0 -0
  609. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/elixir/test.ex +0 -0
  610. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/elm/test.elm +0 -0
  611. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/gleam/test.gleam +0 -0
  612. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/go/test.go +0 -0
  613. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/haskell/test.hs +0 -0
  614. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/hcl/test.tf +0 -0
  615. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/java/test.java +0 -0
  616. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/javascript/test.js +0 -0
  617. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/kotlin/test.kt +0 -0
  618. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/lua/test.lua +0 -0
  619. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/matlab/test.m +0 -0
  620. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/ocaml/test.ml +0 -0
  621. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  622. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/php/test.php +0 -0
  623. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/pony/test.pony +0 -0
  624. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/properties/test.properties +0 -0
  625. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/python/test.py +0 -0
  626. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/ql/test.ql +0 -0
  627. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/r/test.r +0 -0
  628. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/racket/test.rkt +0 -0
  629. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/ruby/test.rb +0 -0
  630. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/rust/test.rs +0 -0
  631. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/scala/test.scala +0 -0
  632. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/solidity/test.sol +0 -0
  633. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/swift/test.swift +0 -0
  634. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/tsx/test.tsx +0 -0
  635. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/typescript/test.ts +0 -0
  636. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/udev/test.rules +0 -0
  637. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/languages/zig/test.zig +0 -0
  638. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/sample-code-base/sample.js +0 -0
  639. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/sample-code-base/sample.py +0 -0
  640. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  641. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/watch.js +0 -0
  642. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/watch.lisp +0 -0
  643. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/watch.py +0 -0
  644. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/fixtures/watch_question.js +0 -0
  645. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/help/test_help.py +0 -0
  646. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  647. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_config.py +0 -0
  648. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_config_active.py +0 -0
  649. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  650. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  651. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  652. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/monorepo/test_workspace.py +0 -0
  653. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/helpers/observations/test_observation_service.py +0 -0
  654. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/hooks/__init__.py +0 -0
  655. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/hooks/test_base.py +0 -0
  656. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/hooks/test_manager.py +0 -0
  657. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/hooks/test_registry.py +0 -0
  658. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/integration/test_agent_mcp_management.py +0 -0
  659. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/integration/test_mcp_management.py +0 -0
  660. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/mcp/__init__.py +0 -0
  661. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/mcp/test_manager.py +0 -0
  662. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/scrape/test_playwright_disable.py +0 -0
  663. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/__init__.py +0 -0
  664. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/conftest.py +0 -0
  665. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_commands.py +0 -0
  666. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_config.py +0 -0
  667. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_delegate.py +0 -0
  668. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_finished.py +0 -0
  669. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_io_proxy.py +0 -0
  670. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_service.py +0 -0
  671. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/subagents/test_sub_agent_coder.py +0 -0
  672. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_extractions.py +0 -0
  673. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_get_lines.py +0 -0
  674. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_git_branch.py +0 -0
  675. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_git_diff.py +0 -0
  676. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_grep.py +0 -0
  677. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_insert_block.py +0 -0
  678. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_read_range_execute.py +0 -0
  679. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_registry.py +0 -0
  680. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_remove_mcp_tool.py +0 -0
  681. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_tool_arguments.py +0 -0
  682. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  683. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tools/validations.py +0 -0
  684. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/tui/test_app.py +0 -0
  685. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/unit/test_load_mcp.py +0 -0
  686. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/unit/test_remove_mcp.py +0 -0
  687. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  688. {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc4}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.100.11rc2
3
+ Version: 0.100.11rc4
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.100.11rc2'
22
- __version_tuple__ = version_tuple = (0, 100, 11, 'rc2')
21
+ __version__ = version = '0.100.11rc4'
22
+ __version_tuple__ = version_tuple = (0, 100, 11, 'rc4')
23
23
 
24
- __commit_id__ = commit_id = 'ge6afc3ffc'
24
+ __commit_id__ = commit_id = 'g7cf5b1173'
@@ -43,15 +43,10 @@ def get_parser(default_config_files, git_root):
43
43
  # List of valid edit formats for argparse validation & shtab completion.
44
44
  # Dynamically gather them from the registered coder classes so the list
45
45
  # stays in sync if new formats are added.
46
- from cecli import coders as _cecli_coders
46
+ from cecli.coders import EDIT_FORMAT_MAP
47
+
48
+ edit_format_choices = sorted(EDIT_FORMAT_MAP.keys())
47
49
 
48
- edit_format_choices = sorted(
49
- {
50
- c.edit_format
51
- for c in _cecli_coders.__all__
52
- if hasattr(c, "edit_format") and c.edit_format is not None
53
- }
54
- )
55
50
  group = parser.add_argument_group("Main model")
56
51
  group.add_argument(
57
52
  "files", metavar="FILE", nargs="*", help="files to edit with an LLM (optional)"
@@ -44,6 +44,26 @@ _MODULE_MAP = {
44
44
  }
45
45
 
46
46
 
47
+ EDIT_FORMAT_MAP = {
48
+ "help": "HelpCoder",
49
+ "ask": "AskCoder",
50
+ "diff": "EditBlockCoder",
51
+ "diff-fenced": "EditBlockFencedCoder",
52
+ "whole": "WholeFileCoder",
53
+ "patch": "PatchCoder",
54
+ "udiff": "UnifiedDiffCoder",
55
+ "udiff-simple": "UnifiedDiffSimpleCoder",
56
+ "architect": "ArchitectCoder",
57
+ "editor-diff": "EditorEditBlockCoder",
58
+ "editor-whole": "EditorWholeFileCoder",
59
+ "editor-diff-fenced": "EditorDiffFencedCoder",
60
+ "context": "ContextCoder",
61
+ "agent": "AgentCoder",
62
+ "hashline": "HashLineCoder",
63
+ "subagent": "SubAgentCoder",
64
+ }
65
+
66
+
47
67
  def __getattr__(name):
48
68
  if name in _MODULE_MAP:
49
69
  import importlib
@@ -105,28 +105,6 @@ all_fences = [
105
105
  wrap_fence("sourcecode"),
106
106
  ]
107
107
 
108
- # Map of edit_format values to coder class names.
109
- # Used by Coder.create() to find the right coder class by edit_format
110
- # without importing all coder modules.
111
- EDIT_FORMAT_MAP = {
112
- "help": "HelpCoder",
113
- "ask": "AskCoder",
114
- "diff": "EditBlockCoder",
115
- "diff-fenced": "EditBlockFencedCoder",
116
- "whole": "WholeFileCoder",
117
- "patch": "PatchCoder",
118
- "udiff": "UnifiedDiffCoder",
119
- "udiff-simple": "UnifiedDiffSimpleCoder",
120
- "architect": "ArchitectCoder",
121
- "editor-diff": "EditorEditBlockCoder",
122
- "editor-whole": "EditorWholeFileCoder",
123
- "editor-diff-fenced": "EditorDiffFencedCoder",
124
- "context": "ContextCoder",
125
- "agent": "AgentCoder",
126
- "hashline": "HashLineCoder",
127
- "subagent": "SubAgentCoder",
128
- }
129
-
130
108
 
131
109
  class UsageMeta(type):
132
110
  """Metaclass that provides shared accumulator properties across all Coder subclasses.
@@ -336,6 +314,7 @@ class Coder(metaclass=UsageMeta):
336
314
  uuid=from_coder.uuid,
337
315
  parent_uuid=from_coder.parent_uuid,
338
316
  repo=from_coder.repo,
317
+ summarizer=from_coder.summarizer,
339
318
  )
340
319
  use_kwargs.update(update) # override to complete the switch
341
320
  use_kwargs.update(kwargs) # override passed kwargs
@@ -351,7 +330,7 @@ class Coder(metaclass=UsageMeta):
351
330
  res = coders.CopyPasteCoder(main_model, io, args=args, **kwargs)
352
331
 
353
332
  if not res:
354
- coder_name = EDIT_FORMAT_MAP.get(edit_format)
333
+ coder_name = coders.EDIT_FORMAT_MAP.get(edit_format)
355
334
  if coder_name:
356
335
  coder_cls = getattr(coders, coder_name)
357
336
  res = coder_cls(main_model, io, args=args, **kwargs)
@@ -373,10 +352,14 @@ class Coder(metaclass=UsageMeta):
373
352
 
374
353
  await res.initialize_mcp_tools()
375
354
 
376
- res.original_kwargs = dict(kwargs)
355
+ # Store only small/primitive kwargs to avoid retaining large object references.
356
+ # Large objects (repo, mcp_manager, commands, summarizer, file_watcher, etc.)
357
+ # are either overridden during clone() or accessible from instance attributes.
358
+ _LARGE_KWARGS = {"repo", "mcp_manager", "commands", "summarizer", "file_watcher"}
359
+ res.original_kwargs = {k: v for k, v in kwargs.items() if k not in _LARGE_KWARGS}
377
360
  return res
378
361
 
379
- valid_formats = list(EDIT_FORMAT_MAP.keys())
362
+ valid_formats = list(coders.EDIT_FORMAT_MAP.keys())
380
363
  raise UnknownEditFormat(edit_format, valid_formats)
381
364
 
382
365
  async def clone(self, **kwargs):
@@ -80,7 +80,7 @@ class CopyPasteCoder(Coder):
80
80
  target_coder_class = None
81
81
  if coders is not None and selected_edit_format:
82
82
  # Use EDIT_FORMAT_MAP from base_coder to find the right coder class by edit_format
83
- from cecli.coders.base_coder import EDIT_FORMAT_MAP
83
+ from cecli.coders import EDIT_FORMAT_MAP
84
84
 
85
85
  coder_name = EDIT_FORMAT_MAP.get(selected_edit_format)
86
86
  if coder_name:
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import re
3
3
  import sys
4
+ import weakref
4
5
  from pathlib import Path
5
6
 
6
7
  from cecli.commands.utils.registry import CommandRegistry
@@ -55,6 +56,18 @@ class ReloadProgramSignal(BaseException):
55
56
  class Commands:
56
57
  scraper = None
57
58
 
59
+ def _get_coder(self):
60
+ """Return coder via weak reference, or None if collected."""
61
+ if self._coder_ref is not None:
62
+ return self._coder_ref()
63
+ return None
64
+
65
+ def _set_coder(self, value):
66
+ """Store coder as weakref to break circular reference chains."""
67
+ self._coder_ref = weakref.ref(value) if value is not None else None
68
+
69
+ coder = property(_get_coder, _set_coder)
70
+
58
71
  def clone(self):
59
72
  cloned = Commands(
60
73
  self.io,
@@ -87,7 +100,8 @@ class Commands:
87
100
  original_read_only_fnames=None,
88
101
  ):
89
102
  self.io = io
90
- self.coder = coder
103
+ # Use weak ref to avoid circular reference chains
104
+ self._coder_ref = weakref.ref(coder) if coder else None
91
105
  self.parser = parser
92
106
  self.args = args
93
107
  self.verbose = verbose
@@ -1427,109 +1427,89 @@ def _apply_closure_safeguard(
1427
1427
  original_content: str,
1428
1428
  resolved_ops: list,
1429
1429
  file_path: str = None,
1430
- ) -> list:
1430
+ ) -> tuple[list, list]:
1431
1431
  """
1432
- Use tree-sitter to heal edit boundaries by simulating edits and checking syntax.
1433
-
1434
- For each replace/delete operation, this simulates applying the edit with
1435
- the replacement text, parses the resulting code with tree-sitter, and
1436
- checks if the result is syntactically valid (no ERROR/MISSING nodes).
1437
-
1438
- If the edit produces invalid syntax (e.g., missing closing braces),
1439
- it progressively expands/contracts the start and end boundaries by a
1440
- step and re-tests until the resulting code parses correctly or the
1441
- maximum number of expansion steps is exhausted.
1442
-
1443
- This prevents the common LLM edit error of "eating" outer scope
1444
- closing braces, parentheses, or brackets by finding the nearest
1445
- syntactically valid edit boundary.
1446
-
1447
- Args:
1448
- original_content: Original source code (without hashlines)
1449
- resolved_ops: List of resolved operation dicts with start_idx/end_idx
1450
- file_path: File path to determine tree-sitter language
1432
+ Use tree-sitter to heal edit boundaries by simulating edits and scoring by AST health.
1433
+ Evicts edits that strictly increase the number of syntax errors.
1451
1434
 
1452
1435
  Returns:
1453
- Modified resolved_ops with healed boundaries
1436
+ tuple: (safe_resolved_ops, rejected_ops)
1437
+ - safe_resolved_ops: Operations with healed boundaries
1438
+ - rejected_ops: List of dicts with {"index": int, "error": str} for evicted operations
1454
1439
  """
1455
-
1456
- def is_syntactically_valid(source_bytes: bytes, parser) -> bool:
1457
- try:
1458
- tree = parser.parse(source_bytes)
1459
- return not tree.root_node.has_error
1460
- except Exception:
1461
- return False
1462
-
1463
- def apply_edit(
1464
- source_lines: list[str],
1465
- start: int,
1466
- end: int,
1467
- replacement: list[str],
1468
- ) -> bytes:
1469
- """Applies the edit and returns the new source code as bytes."""
1470
- new_lines = source_lines[:start] + replacement + source_lines[end + 1 :]
1471
- return "\n".join(new_lines).encode("utf-8")
1472
-
1473
- def count_closures(source_bytes: bytes) -> int:
1474
- """Counts the total number of brackets, braces, and parenthesis."""
1475
- return sum(source_bytes.count(b) for b in b"{}[]()")
1476
-
1477
- def get_indentation(line: str) -> int:
1478
- """Helper to safely calculate the leading whitespace of a line."""
1479
- return len(line) - len(line.lstrip(" \t"))
1480
-
1481
1440
  if not resolved_ops or not file_path:
1482
- return resolved_ops
1441
+ return resolved_ops, []
1483
1442
 
1484
- # Determine language from file path
1485
1443
  from cecli.helpers.grep_ast.parsers import filename_to_lang
1486
1444
  from cecli.helpers.grep_ast.tsl import get_language, get_parser
1487
1445
 
1488
1446
  lang = filename_to_lang(file_path)
1489
1447
  if not lang:
1490
- return resolved_ops
1448
+ return resolved_ops, []
1491
1449
 
1492
- # Set up tree-sitter parser
1493
1450
  try:
1494
1451
  language = get_language(lang) # noqa
1495
1452
  parser = get_parser(lang)
1496
1453
  except Exception:
1497
- # Can't determine language, skip safeguard
1498
- return resolved_ops
1454
+ return resolved_ops, []
1499
1455
 
1500
1456
  source_lines = original_content.splitlines()
1457
+ source_bytes = original_content.encode("utf-8")
1458
+
1459
+ def apply_edit(
1460
+ lines: list[str],
1461
+ start: int,
1462
+ end: int,
1463
+ replacement: list[str],
1464
+ ) -> bytes:
1465
+ """Applies the edit and returns the new source code as bytes."""
1466
+ new_lines = lines[:start] + replacement + lines[end + 1 :]
1467
+ return "\n".join(new_lines).encode("utf-8")
1468
+
1469
+ def count_ast_errors(node) -> int:
1470
+ """
1471
+ Recursively counts MISSING or ERROR nodes in the AST.
1472
+ """
1473
+ errors = 0
1474
+ if node.is_missing or node.type == "ERROR":
1475
+ errors += 1
1476
+ for child in node.children:
1477
+ errors += count_ast_errors(child)
1478
+ return errors
1479
+
1480
+ # Establish the baseline syntax health of the original file
1481
+ base_tree = parser.parse(source_bytes)
1482
+ baseline_error_count = count_ast_errors(base_tree.root_node)
1483
+
1484
+ safe_resolved_ops = []
1485
+ rejected_ops = []
1501
1486
 
1502
1487
  for resolved in resolved_ops:
1503
1488
  op = resolved["op"]
1504
1489
  if op["operation"] not in {"replace", "insert", "delete"}:
1490
+ safe_resolved_ops.append(resolved)
1505
1491
  continue
1506
1492
 
1507
1493
  llm_start = resolved["start_idx"]
1508
1494
  llm_end = resolved["end_idx"]
1509
1495
 
1510
- # Clamp to valid bounds
1511
1496
  if llm_start < 0 or llm_start >= len(source_lines):
1497
+ safe_resolved_ops.append(resolved)
1512
1498
  continue
1513
1499
  if llm_end < llm_start:
1500
+ safe_resolved_ops.append(resolved)
1514
1501
  continue
1515
1502
 
1516
- # Get replacement text
1517
1503
  replacement_text = op.get("text", "") or ""
1518
1504
  if op["operation"] == "delete":
1519
1505
  replacement_text = ""
1520
1506
  repl_lines = replacement_text.splitlines()
1521
1507
 
1522
- # Clamp end to valid range
1523
1508
  llm_end = min(llm_end, len(source_lines) - 1)
1524
1509
 
1525
- # --- THE HEALING LOOP ---
1526
- # Generate all combinations of offsets in {-2, -1, 0, 1, 2} for both
1527
- # start and end, then filter to syntactically valid edits and rank
1528
- # by cumulative movement (abs(start_shift) + abs(end_shift)) as a
1529
- # primary criterion to bias toward minimal range perturbation.
1530
-
1531
1510
  offsets = [0, 1, -1, 2, -2]
1532
1511
  all_candidates = []
1512
+
1533
1513
  for start_shift in offsets:
1534
1514
  for end_shift in offsets:
1535
1515
  candidate_start = max(0, llm_start - start_shift)
@@ -1538,7 +1518,6 @@ def _apply_closure_safeguard(
1538
1518
  if candidate_end < candidate_start:
1539
1519
  continue
1540
1520
 
1541
- # Skip candidates that overlap with other operations' ranges
1542
1521
  overlaps = False
1543
1522
  for other_op in resolved_ops:
1544
1523
  if other_op is resolved:
@@ -1552,87 +1531,52 @@ def _apply_closure_safeguard(
1552
1531
  if overlaps:
1553
1532
  continue
1554
1533
 
1555
- # Skip candidates that would create duplicate adjacent content at edit boundaries
1556
1534
  if _would_create_duplicate_content(
1557
1535
  source_lines, candidate_start, candidate_end, repl_lines
1558
1536
  ):
1559
1537
  continue
1560
1538
 
1561
- test_source = apply_edit(
1539
+ test_source_bytes = apply_edit(
1562
1540
  source_lines,
1563
1541
  candidate_start,
1564
1542
  candidate_end,
1565
1543
  repl_lines,
1566
1544
  )
1567
1545
 
1568
- if is_syntactically_valid(test_source, parser):
1569
- # Determine properties for tiebreaking
1570
- is_partial = (start_shift == 0) ^ (end_shift == 0) # XOR: exactly one is zero
1571
- is_downward = start_shift <= 0 # Negative/zero shift = moving down
1572
- is_both = start_shift == end_shift # Whole range expansion/contraction
1573
- closures = count_closures(test_source)
1574
- start_line_match = source_lines[candidate_start] == source_lines[llm_start]
1575
- end_line_match = source_lines[candidate_end] == source_lines[llm_end]
1576
- cumulative_movement = abs(start_shift) + abs(end_shift)
1577
-
1578
- # --- INDENTATION SCORING ---
1579
- indent_score = 0
1580
- if repl_lines:
1581
- # Safely grab the first and last non-empty replacement lines
1582
- first_repl = next((line for line in repl_lines if line.strip()), "")
1583
- last_repl = next(
1584
- (line for line in reversed(repl_lines) if line.strip()), ""
1585
- )
1586
-
1587
- # Check Start Boundary Match
1588
- if first_repl and candidate_start < len(source_lines):
1589
- source_start_line = source_lines[candidate_start]
1590
- if source_start_line.strip() and get_indentation(
1591
- first_repl
1592
- ) == get_indentation(source_start_line):
1593
- indent_score += 1
1594
-
1595
- # Check End Boundary Match
1596
- if last_repl and candidate_end < len(source_lines):
1597
- source_end_line = source_lines[candidate_end]
1598
- if source_end_line.strip() and get_indentation(
1599
- last_repl
1600
- ) == get_indentation(source_end_line):
1601
- indent_score += 1
1602
-
1603
- all_candidates.append(
1604
- {
1605
- "start_idx": candidate_start,
1606
- "end_idx": candidate_end,
1607
- "start_line_match": start_line_match,
1608
- "end_line_match": end_line_match,
1609
- "source_len": len(test_source),
1610
- "is_partial": is_partial,
1611
- "is_downward": is_downward,
1612
- "is_both": is_both,
1613
- "closure_count": closures,
1614
- "indent_score": indent_score,
1615
- "cumulative_movement": cumulative_movement,
1616
- "offsets": (start_shift, end_shift),
1617
- }
1618
- )
1546
+ # Parse the candidate to get structural truth
1547
+ edited_tree = parser.parse(test_source_bytes)
1548
+ ast_error_count = count_ast_errors(edited_tree.root_node)
1549
+
1550
+ is_partial = (start_shift == 0) ^ (end_shift == 0)
1551
+ is_downward = start_shift <= 0
1552
+ is_both = start_shift == end_shift
1553
+ start_line_match = source_lines[candidate_start] == source_lines[llm_start]
1554
+ end_line_match = source_lines[candidate_end] == source_lines[llm_end]
1555
+ cumulative_movement = abs(start_shift) + abs(end_shift)
1556
+
1557
+ all_candidates.append(
1558
+ {
1559
+ "start_idx": candidate_start,
1560
+ "end_idx": candidate_end,
1561
+ "ast_error_count": ast_error_count,
1562
+ "start_line_match": start_line_match,
1563
+ "end_line_match": end_line_match,
1564
+ "cumulative_movement": cumulative_movement,
1565
+ "is_partial": is_partial,
1566
+ "is_downward": is_downward,
1567
+ "is_both": is_both,
1568
+ }
1569
+ )
1619
1570
 
1620
1571
  if all_candidates:
1621
- # Sort using the new hierarchy:
1622
- # 1. Cumulative movement (ascending less movement is better)
1623
- # 2. Fewest total closures (minimize structural pollution)
1624
- # 3. Indentation Score (Descending: 2 is better than 0)
1625
- # 4. Longest source (preserve more file content)
1626
- # 5. Partial expansions over full range shifts
1627
- # 6. Downward changes over upward changes
1572
+ # 1. AST Health is the absolute highest priority.
1573
+ # 2. Cumulative movement acts as the tie-breaker for equally valid ASTs.
1628
1574
  all_candidates.sort(
1629
1575
  key=lambda r: (
1576
+ r["ast_error_count"], # Ascending: fewer syntax errors wins
1630
1577
  not r["start_line_match"], # Descending: True first
1631
1578
  not r["end_line_match"], # Descending: True first
1632
1579
  r["cumulative_movement"], # Ascending: smaller is better
1633
- -r["indent_score"], # Descending: larger score is better (2 > 1 > 0)
1634
- -r["source_len"], # Descending: larger is better
1635
- r["closure_count"], # Ascending: smaller is better
1636
1580
  not r["is_partial"], # Booleans: False comes before True
1637
1581
  not r["is_downward"], # Booleans: False comes before True
1638
1582
  r["is_both"], # Booleans: False comes before True
@@ -1640,10 +1584,30 @@ def _apply_closure_safeguard(
1640
1584
  )
1641
1585
 
1642
1586
  best = all_candidates[0]
1587
+
1588
+ # EVICTION GATE: If the absolute best boundary still introduces NEW
1589
+ # syntax errors compared to the original file, discard the edit entirely.
1590
+ if best["ast_error_count"] > baseline_error_count:
1591
+
1592
+ rejected_ops.append(
1593
+ {
1594
+ "index": resolved["index"],
1595
+ "error": (
1596
+ f"Edit introduces new syntax error(s) (baseline: {baseline_error_count}, "
1597
+ f"after edit: {best['ast_error_count']}) and none of the "
1598
+ f"{len(all_candidates)} candidate boundary adjustments could resolve it"
1599
+ ),
1600
+ "operation": op,
1601
+ }
1602
+ )
1603
+ continue
1604
+
1643
1605
  resolved["start_idx"] = best["start_idx"]
1644
1606
  resolved["end_idx"] = best["end_idx"]
1645
1607
 
1646
- return resolved_ops
1608
+ safe_resolved_ops.append(resolved)
1609
+
1610
+ return safe_resolved_ops, rejected_ops
1647
1611
 
1648
1612
 
1649
1613
  def apply_hashline_operations(
@@ -1794,7 +1758,16 @@ def apply_hashline_operations(
1794
1758
 
1795
1759
  if file_path:
1796
1760
  # Apply tree-sitter based closure safeguard to snap boundaries to AST nodes
1797
- resolved_ops = _apply_closure_safeguard(original_content, resolved_ops, file_path)
1761
+ safe_ops, rejected_ops = _apply_closure_safeguard(original_content, resolved_ops, file_path)
1762
+ resolved_ops = safe_ops
1763
+ for rejected in rejected_ops:
1764
+ failed_ops.append(
1765
+ {
1766
+ "index": rejected["index"],
1767
+ "error": rejected["error"],
1768
+ "operation": rejected["operation"],
1769
+ }
1770
+ )
1798
1771
 
1799
1772
  # Fix edit boundaries where replacement content duplicates adjacent lines
1800
1773
  source_lines = original_content.splitlines()
@@ -6,6 +6,7 @@ according to the Skills specification.
6
6
  """
7
7
 
8
8
  import re
9
+ import weakref
9
10
  from dataclasses import dataclass, field
10
11
  from pathlib import Path
11
12
  from typing import Any, Dict, List, Optional
@@ -69,7 +70,7 @@ class SkillsManager:
69
70
  self.include_list = set(include_list) if include_list else None
70
71
  self.exclude_list = set(exclude_list) if exclude_list else set()
71
72
  self.git_root = Path(git_root).expanduser().resolve() if git_root else None
72
- self.coder = coder # Weak reference to coder instance
73
+ self._coder_ref = weakref.ref(coder) if coder else None # Weak reference to coder instance
73
74
 
74
75
  # Cache for loaded skills
75
76
  self._skills_cache: Dict[str, SkillContent] = {}
@@ -105,6 +106,18 @@ class SkillsManager:
105
106
 
106
107
  # Save initial state from config
107
108
 
109
+ def _get_coder(self):
110
+ """Return coder via weak reference, or None if collected."""
111
+ if self._coder_ref is not None:
112
+ return self._coder_ref()
113
+ return None
114
+
115
+ def _set_coder(self, value):
116
+ """Store coder as weakref to break circular reference chains."""
117
+ self._coder_ref = weakref.ref(value) if value is not None else None
118
+
119
+ coder = property(_get_coder, _set_coder)
120
+
108
121
  def _save_state(self):
109
122
  """Save current mutable state to the global skill state store.
110
123
 
@@ -1,5 +1,6 @@
1
1
  import contextlib
2
2
  import os
3
+ import sys
3
4
  import time
4
5
  from pathlib import Path, PurePosixPath
5
6
 
@@ -84,7 +85,9 @@ class GitRepo:
84
85
  self.models = models
85
86
 
86
87
  self.normalized_path = {}
87
- self.tree_files = {}
88
+ # Single-entry file cache: (commit_sha, interned_set_of_paths)
89
+ # Using a single entry (not per-commit dict) limits unbounded memory growth
90
+ self._tree_cache = None
88
91
 
89
92
  self.attribute_author = attribute_author
90
93
  self.attribute_committer = attribute_committer
@@ -602,8 +605,8 @@ class GitRepo:
602
605
 
603
606
  files = set()
604
607
  if commit:
605
- if commit in self.tree_files:
606
- files = self.tree_files[commit]
608
+ if self._tree_cache is not None and self._tree_cache[0] == commit.hexsha:
609
+ files = self._tree_cache[1]
607
610
  else:
608
611
  try:
609
612
  iterator = commit.tree.traverse()
@@ -612,7 +615,8 @@ class GitRepo:
612
615
  try:
613
616
  blob = next(iterator)
614
617
  if blob.type == "blob": # blob is a file
615
- files.add(blob.path)
618
+ # Use sys.intern() to deduplicate path strings in memory
619
+ files.add(sys.intern(blob.path))
616
620
  except IndexError:
617
621
  # Handle potential index error during tree traversal
618
622
  # without relying on potentially unassigned 'blob'
@@ -629,7 +633,10 @@ class GitRepo:
629
633
  self.io.tool_output("Is your git repo corrupted?")
630
634
  return []
631
635
  files = set(self.normalize_path(path) for path in files)
632
- self.tree_files[commit] = set(files)
636
+ # Use single-entry cache (not per-commit dict) to limit memory growth
637
+ # Store only the SHA string (not the Commit object) to avoid retaining
638
+ # the entire git object graph (tree, blobs, parent commits, etc.)
639
+ self._tree_cache = (commit.hexsha, files)
633
640
 
634
641
  # Add staged files
635
642
  index = self.repo.index