cecli-dev 0.100.3__tar.gz → 0.100.4rc2__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 (666) hide show
  1. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/PKG-INFO +3 -1
  2. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/_version.py +3 -3
  4. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/base_coder.py +18 -33
  5. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/utils/helpers.py +22 -5
  6. cecli_dev-0.100.4rc2/cecli/helpers/file_system/__init__.py +3 -0
  7. cecli_dev-0.100.4rc2/cecli/helpers/file_system/builders.py +172 -0
  8. cecli_dev-0.100.4rc2/cecli/helpers/file_system/ignore.py +80 -0
  9. cecli_dev-0.100.4rc2/cecli/helpers/file_system/ngram_index.py +157 -0
  10. cecli_dev-0.100.4rc2/cecli/helpers/file_system/service.py +320 -0
  11. cecli_dev-0.100.4rc2/cecli/helpers/file_system/trie_index.py +125 -0
  12. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/io_proxy.py +2 -0
  13. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/responses.py +10 -9
  14. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/io.py +1 -0
  15. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/models.py +3 -0
  16. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/repo.py +48 -0
  17. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/read_range.py +37 -13
  18. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/app.py +77 -17
  19. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/PKG-INFO +3 -1
  20. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/SOURCES.txt +6 -0
  21. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/requires.txt +2 -0
  22. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/common-constraints.txt +4 -0
  23. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements.in +4 -0
  24. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements.txt +8 -0
  25. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_coder.py +43 -6
  26. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_models.py +7 -0
  27. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.dockerignore +0 -0
  28. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.flake8 +0 -0
  29. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.gitattributes +0 -0
  30. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  31. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/check_pypi_version.yml +0 -0
  32. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/docker-build-test.yml +0 -0
  33. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/docker-release.yml +0 -0
  34. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/issues.yml +0 -0
  35. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/pages.yml +0 -0
  36. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/pre-commit.yml +0 -0
  37. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/release.yml +0 -0
  38. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/ubuntu-tests.yml +0 -0
  39. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/windows-tests.yml +0 -0
  40. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.github/workflows/windows_check_pypi_version.yml +0 -0
  41. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.gitignore +0 -0
  42. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/.pre-commit-config.yaml +0 -0
  43. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/CHANGELOG.md +0 -0
  44. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/CNAME +0 -0
  45. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/CONTRIBUTING.md +0 -0
  46. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/HISTORY.md +0 -0
  47. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/LICENSE.txt +0 -0
  48. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/MANIFEST.in +0 -0
  49. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/README.md +0 -0
  50. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/Dockerfile +0 -0
  51. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/README.md +0 -0
  52. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/__init__.py +0 -0
  53. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/benchmark.py +0 -0
  54. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/benchmark_classic.py +0 -0
  55. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/clone-exercism.sh +0 -0
  56. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/cpp-test.sh +0 -0
  57. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/docker.sh +0 -0
  58. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/docker_build.sh +0 -0
  59. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/install-docker-ubuntu.sh +0 -0
  60. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/npm-test.sh +0 -0
  61. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/over_time.py +0 -0
  62. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/plot.sh +0 -0
  63. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/plots.py +0 -0
  64. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/problem_stats.py +0 -0
  65. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/prompts.py +0 -0
  66. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/refactor_tools.py +0 -0
  67. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/rsync.sh +0 -0
  68. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/rungrid.py +0 -0
  69. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/swe-bench-lite.txt +0 -0
  70. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/swe-bench.txt +0 -0
  71. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/swe_bench.py +0 -0
  72. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/test_benchmark.py +0 -0
  73. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/variations.1.sh +0 -0
  74. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/variations.2.sh +0 -0
  75. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/variations.3.sh +0 -0
  76. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/benchmark/variations.4.sh +0 -0
  77. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/__main__.py +0 -0
  78. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/args.py +0 -0
  79. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/args_formatter.py +0 -0
  80. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/change_tracker.py +0 -0
  81. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/__init__.py +0 -0
  82. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/agent_coder.py +0 -0
  83. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/architect_coder.py +0 -0
  84. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/ask_coder.py +0 -0
  85. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/chat_chunks.py +0 -0
  86. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/context_coder.py +0 -0
  87. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/copypaste_coder.py +0 -0
  88. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editblock_coder.py +0 -0
  89. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editblock_fenced_coder.py +0 -0
  90. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editblock_func_coder.py +0 -0
  91. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  92. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editor_editblock_coder.py +0 -0
  93. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/editor_whole_coder.py +0 -0
  94. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/hashline_coder.py +0 -0
  95. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/help_coder.py +0 -0
  96. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/patch_coder.py +0 -0
  97. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/search_replace.py +0 -0
  98. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/shell.py +0 -0
  99. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/single_wholefile_func_coder.py +0 -0
  100. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/sub_agent_coder.py +0 -0
  101. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/udiff_coder.py +0 -0
  102. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/udiff_simple.py +0 -0
  103. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/wholefile_coder.py +0 -0
  104. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/coders/wholefile_func_coder.py +0 -0
  105. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/__init__.py +0 -0
  106. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/add.py +0 -0
  107. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/agent.py +0 -0
  108. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/agent_model.py +0 -0
  109. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/architect.py +0 -0
  110. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/ask.py +0 -0
  111. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/chat_mode.py +0 -0
  112. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/clear.py +0 -0
  113. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/code.py +0 -0
  114. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/command_prefix.py +0 -0
  115. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/commit.py +0 -0
  116. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/compact.py +0 -0
  117. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/context.py +0 -0
  118. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/context_blocks.py +0 -0
  119. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/context_management.py +0 -0
  120. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/copy.py +0 -0
  121. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/copy_context.py +0 -0
  122. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/core.py +0 -0
  123. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/diff.py +0 -0
  124. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/drop.py +0 -0
  125. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/editor.py +0 -0
  126. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/editor_model.py +0 -0
  127. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/exclude_skill.py +0 -0
  128. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/exit.py +0 -0
  129. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/git.py +0 -0
  130. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/hashline.py +0 -0
  131. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/help.py +0 -0
  132. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/history_search.py +0 -0
  133. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/hooks.py +0 -0
  134. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/include_skill.py +0 -0
  135. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/lint.py +0 -0
  136. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/list_sessions.py +0 -0
  137. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/list_skills.py +0 -0
  138. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/load.py +0 -0
  139. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/load_hook.py +0 -0
  140. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/load_mcp.py +0 -0
  141. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/load_session.py +0 -0
  142. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/load_skill.py +0 -0
  143. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/ls.py +0 -0
  144. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/map.py +0 -0
  145. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/map_refresh.py +0 -0
  146. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/merge.py +0 -0
  147. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/model.py +0 -0
  148. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/models.py +0 -0
  149. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/multiline_mode.py +0 -0
  150. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/paste.py +0 -0
  151. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/quit.py +0 -0
  152. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/read_only.py +0 -0
  153. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/read_only_stub.py +0 -0
  154. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/reap_agent.py +0 -0
  155. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/reasoning_effort.py +0 -0
  156. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/remove_hook.py +0 -0
  157. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/remove_mcp.py +0 -0
  158. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/remove_skill.py +0 -0
  159. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/report.py +0 -0
  160. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/reset.py +0 -0
  161. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/rules.py +0 -0
  162. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/run.py +0 -0
  163. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/save.py +0 -0
  164. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/save_session.py +0 -0
  165. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/settings.py +0 -0
  166. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/spawn_agent.py +0 -0
  167. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/switch_agent.py +0 -0
  168. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/terminal_data/linux.keytab +0 -0
  169. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/terminal_setup.py +0 -0
  170. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/test.py +0 -0
  171. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/think_tokens.py +0 -0
  172. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/tokens.py +0 -0
  173. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/undo.py +0 -0
  174. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/utils/__init__.py +0 -0
  175. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/utils/base_command.py +0 -0
  176. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/utils/registry.py +0 -0
  177. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/utils/save_load_manager.py +0 -0
  178. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/voice.py +0 -0
  179. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/weak_model.py +0 -0
  180. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/web.py +0 -0
  181. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/commands/workspace.py +0 -0
  182. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/deprecated_args.py +0 -0
  183. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/diffs.py +0 -0
  184. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/dump.py +0 -0
  185. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/editor.py +0 -0
  186. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/exceptions.py +0 -0
  187. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/format_settings.py +0 -0
  188. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/help.py +0 -0
  189. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/help_pats.py +0 -0
  190. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/__init__.py +0 -0
  191. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/agents/__init__.py +0 -0
  192. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/agents/config.py +0 -0
  193. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/agents/service.py +0 -0
  194. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/background_commands.py +0 -0
  195. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/command_parser.py +0 -0
  196. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/__init__.py +0 -0
  197. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/base_message.py +0 -0
  198. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/files.py +0 -0
  199. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/integration.py +0 -0
  200. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/manager.py +0 -0
  201. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/service.py +0 -0
  202. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/tags.py +0 -0
  203. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/conversation/utils.py +0 -0
  204. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/copypaste.py +0 -0
  205. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/coroutines.py +0 -0
  206. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/crypto.py +0 -0
  207. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/file_searcher.py +0 -0
  208. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/__init__.py +0 -0
  209. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/dump.py +0 -0
  210. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  211. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/main.py +0 -0
  212. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/parsers.py +0 -0
  213. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/grep_ast/tsl.py +0 -0
  214. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/hashline.py +0 -0
  215. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/hashpos/__init__.py +0 -0
  216. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/hashpos/hashpos.py +0 -0
  217. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/leak_detect.py +0 -0
  218. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/model_providers.py +0 -0
  219. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/monorepo/__init__.py +0 -0
  220. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/monorepo/config.py +0 -0
  221. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/monorepo/project.py +0 -0
  222. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/monorepo/workspace.py +0 -0
  223. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/monorepo/worktree.py +0 -0
  224. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/nested.py +0 -0
  225. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/observations/__init__.py +0 -0
  226. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/observations/service.py +0 -0
  227. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/plugin_manager.py +0 -0
  228. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/profiler.py +0 -0
  229. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/requests.py +0 -0
  230. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/similarity.py +0 -0
  231. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/helpers/skills.py +0 -0
  232. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/history.py +0 -0
  233. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/__init__.py +0 -0
  234. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/base.py +0 -0
  235. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/integration.py +0 -0
  236. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/manager.py +0 -0
  237. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/registry.py +0 -0
  238. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/service.py +0 -0
  239. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/hooks/types.py +0 -0
  240. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/interruptible_input.py +0 -0
  241. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/linter.py +0 -0
  242. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/llm.py +0 -0
  243. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/main.py +0 -0
  244. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mcp/__init__.py +0 -0
  245. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mcp/manager.py +0 -0
  246. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mcp/oauth.py +0 -0
  247. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mcp/server.py +0 -0
  248. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mcp/utils.py +0 -0
  249. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/mdstream.py +0 -0
  250. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/onboarding.py +0 -0
  251. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/__init__.py +0 -0
  252. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/agent.yml +0 -0
  253. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/architect.yml +0 -0
  254. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/ask.yml +0 -0
  255. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/base.yml +0 -0
  256. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/context.yml +0 -0
  257. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/copypaste.yml +0 -0
  258. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editblock.yml +0 -0
  259. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editblock_fenced.yml +0 -0
  260. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editblock_func.yml +0 -0
  261. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editor_diff_fenced.yml +0 -0
  262. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editor_editblock.yml +0 -0
  263. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/editor_whole.yml +0 -0
  264. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/hashline.yml +0 -0
  265. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/help.yml +0 -0
  266. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/patch.yml +0 -0
  267. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/single_wholefile_func.yml +0 -0
  268. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/subagent.yml +0 -0
  269. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/udiff.yml +0 -0
  270. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/udiff_simple.yml +0 -0
  271. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/utils/__init__.py +0 -0
  272. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/utils/registry.py +0 -0
  273. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/utils/system.py +0 -0
  274. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/wholefile.yml +0 -0
  275. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/prompts/wholefile_func.yml +0 -0
  276. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  277. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  278. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  279. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  280. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  281. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  282. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  283. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  284. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  285. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  286. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  287. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  288. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  289. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  290. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  291. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  292. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  293. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  294. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  295. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  296. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  297. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  298. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  299. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  300. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  301. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  302. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  303. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  304. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  305. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  306. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  307. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  308. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/README.md +0 -0
  309. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  310. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  311. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  312. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  313. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  314. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  315. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  316. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  317. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  318. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  319. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  320. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  321. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  322. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  323. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  324. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  325. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  326. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  327. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  328. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  329. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  330. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  331. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  332. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  333. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  334. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  335. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  336. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/reasoning_tags.py +0 -0
  337. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/repomap.py +0 -0
  338. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/report.py +0 -0
  339. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/resources/__init__.py +0 -0
  340. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/resources/model-metadata.json +0 -0
  341. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/resources/model-settings.yml +0 -0
  342. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/resources/providers.json +0 -0
  343. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/run_cmd.py +0 -0
  344. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/scrape.py +0 -0
  345. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/sendchat.py +0 -0
  346. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/sessions.py +0 -0
  347. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/special.py +0 -0
  348. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/__init__.py +0 -0
  349. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/_yield.py +0 -0
  350. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/command.py +0 -0
  351. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/command_interactive.py +0 -0
  352. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/context_manager.py +0 -0
  353. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/delegate.py +0 -0
  354. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/edit_text.py +0 -0
  355. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/explore_code.py +0 -0
  356. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_branch.py +0 -0
  357. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_diff.py +0 -0
  358. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_log.py +0 -0
  359. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_remote.py +0 -0
  360. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_show.py +0 -0
  361. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/git_status.py +0 -0
  362. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/grep.py +0 -0
  363. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/load_skill.py +0 -0
  364. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/ls.py +0 -0
  365. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/remove_skill.py +0 -0
  366. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/thinking.py +0 -0
  367. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/undo_change.py +0 -0
  368. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/update_todo_list.py +0 -0
  369. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/utils/base_tool.py +0 -0
  370. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/utils/helpers.py +0 -0
  371. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/utils/output.py +0 -0
  372. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tools/utils/registry.py +0 -0
  373. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/__init__.py +0 -0
  374. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/io.py +0 -0
  375. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/styles.tcss +0 -0
  376. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/__init__.py +0 -0
  377. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/completion_bar.py +0 -0
  378. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/file_list.py +0 -0
  379. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/footer.py +0 -0
  380. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/input_area.py +0 -0
  381. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/input_container.py +0 -0
  382. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/key_hints.py +0 -0
  383. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/output.py +0 -0
  384. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/status_bar.py +0 -0
  385. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/widgets/subagent_pills.py +0 -0
  386. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/tui/worker.py +0 -0
  387. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/urls.py +0 -0
  388. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/utils.py +0 -0
  389. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/versioncheck.py +0 -0
  390. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/voice.py +0 -0
  391. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/waiting.py +0 -0
  392. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/watch.py +0 -0
  393. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/watch_prompts.py +0 -0
  394. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/Gemfile +0 -0
  395. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/blame.md +0 -0
  396. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/get-started.md +0 -0
  397. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/help-tip.md +0 -0
  398. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/help.md +0 -0
  399. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/install.md +0 -0
  400. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/keys.md +0 -0
  401. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/model-warnings.md +0 -0
  402. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/multi-line.md +0 -0
  403. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/python-m-aider.md +0 -0
  404. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/recording.css +0 -0
  405. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/recording.md +0 -0
  406. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_includes/works-best.md +0 -0
  407. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_features.scss +0 -0
  408. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_footer.scss +0 -0
  409. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_hero.scss +0 -0
  410. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_info.scss +0 -0
  411. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_layout.scss +0 -0
  412. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_reset.scss +0 -0
  413. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_testimonials.scss +0 -0
  414. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_typography.scss +0 -0
  415. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/_variables.scss +0 -0
  416. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/custom/custom.scss +0 -0
  417. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/_sass/global-overrides.scss +0 -0
  418. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/adv-model-settings.md +0 -0
  419. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/agent-mode.md +0 -0
  420. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/aider_conf.md +0 -0
  421. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/api-keys.md +0 -0
  422. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/custom-commands.md +0 -0
  423. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  424. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/dotenv.md +0 -0
  425. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/editor.md +0 -0
  426. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/hooks.md +0 -0
  427. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/mcp.md +0 -0
  428. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/model-aliases.md +0 -0
  429. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/options.md +0 -0
  430. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/reasoning.md +0 -0
  431. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/security.md +0 -0
  432. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/skills.md +0 -0
  433. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/subagents.md +0 -0
  434. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/tui.md +0 -0
  435. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config/workspaces.md +0 -0
  436. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/config.md +0 -0
  437. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/faq.md +0 -0
  438. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/git.md +0 -0
  439. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/index.md +0 -0
  440. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/install/docker.md +0 -0
  441. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/install/optional.md +0 -0
  442. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/install.md +0 -0
  443. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/languages.md +0 -0
  444. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  445. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/legal/privacy.md +0 -0
  446. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/anthropic.md +0 -0
  447. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/azure.md +0 -0
  448. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/bedrock.md +0 -0
  449. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/cohere.md +0 -0
  450. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/deepseek.md +0 -0
  451. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/gemini.md +0 -0
  452. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/github.md +0 -0
  453. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/groq.md +0 -0
  454. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/lm-studio.md +0 -0
  455. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/ollama.md +0 -0
  456. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/openai-compat.md +0 -0
  457. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/openai.md +0 -0
  458. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/openrouter.md +0 -0
  459. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/other.md +0 -0
  460. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/vertex.md +0 -0
  461. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/warnings.md +0 -0
  462. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms/xai.md +0 -0
  463. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/llms.md +0 -0
  464. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/more/analytics.md +0 -0
  465. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/more/edit-formats.md +0 -0
  466. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/more/infinite-output.md +0 -0
  467. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/more-info.md +0 -0
  468. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/repomap.md +0 -0
  469. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/scripting.md +0 -0
  470. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  471. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  472. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/imports.md +0 -0
  473. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  474. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/support.md +0 -0
  475. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  476. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  477. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/troubleshooting.md +0 -0
  478. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/commands.md +0 -0
  479. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/conventions.md +0 -0
  480. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/copypaste.md +0 -0
  481. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/images-urls.md +0 -0
  482. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/lint-test.md +0 -0
  483. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/modes.md +0 -0
  484. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/not-code.md +0 -0
  485. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/notifications.md +0 -0
  486. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/sessions.md +0 -0
  487. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/tips.md +0 -0
  488. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/voice.md +0 -0
  489. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage/watch.md +0 -0
  490. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/docs/usage.md +0 -0
  491. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli/website/share/index.md +0 -0
  492. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/dependency_links.txt +0 -0
  493. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/entry_points.txt +0 -0
  494. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/cecli_dev.egg-info/top_level.txt +0 -0
  495. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/docker/Dockerfile +0 -0
  496. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  497. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/pyproject.toml +0 -0
  498. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/pytest.ini +0 -0
  499. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-dev.in +0 -0
  500. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-dev.txt +0 -0
  501. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-help.in +0 -0
  502. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-help.txt +0 -0
  503. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-playwright.in +0 -0
  504. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/requirements-playwright.txt +0 -0
  505. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/requirements/tree-sitter.in +0 -0
  506. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/30k-image.py +0 -0
  507. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/Dockerfile.jekyll +0 -0
  508. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/__init__.py +0 -0
  509. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/blame.py +0 -0
  510. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/clean_metadata.py +0 -0
  511. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/cost_analyzer.py +0 -0
  512. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/cost_calculator.py +0 -0
  513. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/dl_icons.py +0 -0
  514. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/filter-chat-mode.js +0 -0
  515. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/generate_providers.py +0 -0
  516. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/get_contributor_list.js +0 -0
  517. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/get_hashline.py +0 -0
  518. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/history_prompts.py +0 -0
  519. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/homepage.py +0 -0
  520. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/issues.py +0 -0
  521. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/jekyll_build.sh +0 -0
  522. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/jekyll_run.sh +0 -0
  523. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/logo_svg.py +0 -0
  524. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/pip-compile.sh +0 -0
  525. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/recording_audio.py +0 -0
  526. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/redact-cast.py +0 -0
  527. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/rename_to_cecli.py +0 -0
  528. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/tmux_record.sh +0 -0
  529. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/tsl_pack_langs.py +0 -0
  530. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/update-blame.sh +0 -0
  531. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/update-docs.sh +0 -0
  532. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/update-history.py +0 -0
  533. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/versionbump.py +0 -0
  534. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/scripts/yank-old-versions.py +0 -0
  535. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/setup.cfg +0 -0
  536. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/shim.pyproject.toml +0 -0
  537. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/__init__.py +0 -0
  538. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/__init__.py +0 -0
  539. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/conftest.py +0 -0
  540. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_aws_credentials.py +0 -0
  541. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_background_commands.py +0 -0
  542. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_commands.py +0 -0
  543. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_custom_commands.py +0 -0
  544. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_deprecated.py +0 -0
  545. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_editblock.py +0 -0
  546. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_editor.py +0 -0
  547. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_exceptions.py +0 -0
  548. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_find_or_blocks.py +0 -0
  549. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_hashline.py +0 -0
  550. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_history.py +0 -0
  551. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_io.py +0 -0
  552. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_linter.py +0 -0
  553. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_main.py +0 -0
  554. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_model_info_manager.py +0 -0
  555. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_model_provider_manager.py +0 -0
  556. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_onboarding.py +0 -0
  557. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_plugin_manager.py +0 -0
  558. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_prompts.py +0 -0
  559. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_reasoning.py +0 -0
  560. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_repo.py +0 -0
  561. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_repomap.py +0 -0
  562. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_run_cmd.py +0 -0
  563. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_sanity_check_repo.py +0 -0
  564. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_scripting.py +0 -0
  565. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_sendchat.py +0 -0
  566. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_session_args.py +0 -0
  567. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_session_crypto.py +0 -0
  568. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_sessions.py +0 -0
  569. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_sessions_manager.py +0 -0
  570. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_skills.py +0 -0
  571. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_special.py +0 -0
  572. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_ssl_verification.py +0 -0
  573. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_udiff.py +0 -0
  574. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_urls.py +0 -0
  575. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_voice.py +0 -0
  576. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_watch.py +0 -0
  577. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/basic/test_wholefile.py +0 -0
  578. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/coders/test_coder_switching.py +0 -0
  579. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/coders/test_copypaste_coder.py +0 -0
  580. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/commands/test_compaction.py +0 -0
  581. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/commands/test_switch_agent.py +0 -0
  582. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/conftest.py +0 -0
  583. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/conversations/test_conversation_integration.py +0 -0
  584. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/conversations/test_conversation_system.py +0 -0
  585. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  586. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/chat-history.md +0 -0
  587. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/arduino/test.ino +0 -0
  588. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/bash/test.sh +0 -0
  589. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/c/test.c +0 -0
  590. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/chatito/test.chatito +0 -0
  591. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/clojure/test.clj +0 -0
  592. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  593. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/cpp/test.cpp +0 -0
  594. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/csharp/test.cs +0 -0
  595. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/d/test.d +0 -0
  596. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/dart/test.dart +0 -0
  597. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/elisp/test.el +0 -0
  598. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/elixir/test.ex +0 -0
  599. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/elm/test.elm +0 -0
  600. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/gleam/test.gleam +0 -0
  601. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/go/test.go +0 -0
  602. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/haskell/test.hs +0 -0
  603. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/hcl/test.tf +0 -0
  604. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/java/test.java +0 -0
  605. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/javascript/test.js +0 -0
  606. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/kotlin/test.kt +0 -0
  607. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/lua/test.lua +0 -0
  608. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/matlab/test.m +0 -0
  609. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/ocaml/test.ml +0 -0
  610. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  611. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/php/test.php +0 -0
  612. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/pony/test.pony +0 -0
  613. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/properties/test.properties +0 -0
  614. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/python/test.py +0 -0
  615. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/ql/test.ql +0 -0
  616. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/r/test.r +0 -0
  617. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/racket/test.rkt +0 -0
  618. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/ruby/test.rb +0 -0
  619. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/rust/test.rs +0 -0
  620. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/scala/test.scala +0 -0
  621. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/solidity/test.sol +0 -0
  622. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/swift/test.swift +0 -0
  623. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/tsx/test.tsx +0 -0
  624. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/typescript/test.ts +0 -0
  625. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/udev/test.rules +0 -0
  626. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/languages/zig/test.zig +0 -0
  627. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/sample-code-base/sample.js +0 -0
  628. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/sample-code-base/sample.py +0 -0
  629. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  630. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/watch.js +0 -0
  631. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/watch.lisp +0 -0
  632. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/watch.py +0 -0
  633. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/fixtures/watch_question.js +0 -0
  634. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/help/test_help.py +0 -0
  635. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/monorepo/test_config.py +0 -0
  636. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/monorepo/test_config_active.py +0 -0
  637. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  638. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  639. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/monorepo/test_workspace.py +0 -0
  640. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/helpers/observations/test_observation_service.py +0 -0
  641. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/hooks/__init__.py +0 -0
  642. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/hooks/test_base.py +0 -0
  643. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/hooks/test_manager.py +0 -0
  644. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/hooks/test_registry.py +0 -0
  645. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/mcp/__init__.py +0 -0
  646. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/mcp/test_manager.py +0 -0
  647. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/scrape/test_playwright_disable.py +0 -0
  648. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/scrape/test_scrape.py +0 -0
  649. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/__init__.py +0 -0
  650. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/conftest.py +0 -0
  651. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_commands.py +0 -0
  652. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_config.py +0 -0
  653. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_delegate.py +0 -0
  654. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_finished.py +0 -0
  655. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_io_proxy.py +0 -0
  656. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_service.py +0 -0
  657. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/subagents/test_sub_agent_coder.py +0 -0
  658. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_extractions.py +0 -0
  659. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_get_lines.py +0 -0
  660. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_git_branch.py +0 -0
  661. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_git_diff.py +0 -0
  662. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_grep.py +0 -0
  663. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_insert_block.py +0 -0
  664. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_registry.py +0 -0
  665. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tools/test_tool_arguments.py +0 -0
  666. {cecli_dev-0.100.3 → cecli_dev-0.100.4rc2}/tests/tui/test_app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.100.3
3
+ Version: 0.100.4rc2
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
@@ -53,6 +53,8 @@ Requires-Dist: truststore
53
53
  Requires-Dist: xxhash>=3.6.0
54
54
  Requires-Dist: py-cymbal>=0.1.24
55
55
  Requires-Dist: cryptography>=42.0.0
56
+ Requires-Dist: marisa-trie>=1.0
57
+ Requires-Dist: rapidfuzz>=3.0
56
58
  Requires-Dist: rustworkx>=0.15.0
57
59
  Requires-Dist: scipy>=1.15.3
58
60
  Requires-Dist: importlib-metadata>=7.2.1
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.100.2.dev"
3
+ __version__ = "0.100.4.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.100.3'
22
- __version_tuple__ = version_tuple = (0, 100, 3)
21
+ __version__ = version = '0.100.4rc2'
22
+ __version_tuple__ = version_tuple = (0, 100, 4, 'rc2')
23
23
 
24
- __commit_id__ = commit_id = 'ge53c2cd27'
24
+ __commit_id__ = commit_id = 'gc1c8e3e88'
@@ -42,6 +42,7 @@ from cecli.commands import Commands, SwitchCoderSignal
42
42
  from cecli.exceptions import LiteLLMExceptions
43
43
  from cecli.helpers import command_parser, coroutines, nested, responses
44
44
  from cecli.helpers.conversation import ConversationService, MessageTag
45
+ from cecli.helpers.file_system import FileSystemService
45
46
  from cecli.helpers.io_proxy import IOProxy
46
47
  from cecli.helpers.observations.service import ObservationService
47
48
  from cecli.helpers.profiler import TokenProfiler
@@ -547,7 +548,6 @@ class Coder(metaclass=UsageMeta):
547
548
 
548
549
  self.data_cache = {
549
550
  "repo": {"last_key": "", "read_only_count": None},
550
- "relative_files": None,
551
551
  }
552
552
 
553
553
  self.repo = repo
@@ -594,6 +594,12 @@ class Coder(metaclass=UsageMeta):
594
594
  if not self.repo:
595
595
  self.root = utils.find_common_root(self.abs_fnames)
596
596
 
597
+ # Initialize the FileSystemService singleton for all agents
598
+ FileSystemService.get_instance(
599
+ root=self.root if hasattr(self, "root") else ".",
600
+ repo=self.repo if hasattr(self, "repo") else None,
601
+ )
602
+
597
603
  if read_only_fnames:
598
604
  self.abs_read_only_fnames = set()
599
605
  for fname in read_only_fnames:
@@ -3226,7 +3232,7 @@ class Coder(metaclass=UsageMeta):
3226
3232
  group = ConfirmGroup(new_mentions)
3227
3233
  for rel_fname in sorted(new_mentions):
3228
3234
  message = "Add file to the chat?"
3229
- if self.args.tui:
3235
+ if self.args and self.args.tui:
3230
3236
  message = f"Add file to the chat? ({rel_fname})"
3231
3237
 
3232
3238
  if await self.io.confirm_ask(
@@ -3909,37 +3915,16 @@ class Coder(metaclass=UsageMeta):
3909
3915
  return
3910
3916
 
3911
3917
  def get_all_relative_files(self):
3912
- if self.repo_map and self.repo:
3913
- try:
3914
- staged_files_hash = hash(
3915
- str([item.a_path for item in self.repo.repo.index.diff("HEAD")])
3916
- )
3917
- if (
3918
- staged_files_hash == self.data_cache["repo"]["last_key"]
3919
- and self.data_cache["relative_files"]
3920
- ):
3921
- return self.data_cache["relative_files"]
3922
- except ANY_GIT_ERROR as err:
3923
- # Handle git errors gracefully - fall back to getting tracked files
3924
- if self.verbose:
3925
- self.io.tool_warning(f"Git error while checking staged files: {err}")
3926
- # Continue to get tracked files normally
3927
-
3928
- if self.repo:
3929
- if hasattr(self.repo, "workspace_path") and self.repo.workspace_path:
3930
- files = self.repo.get_workspace_files()
3931
- elif not self.repo.cecli_ignore_file or not self.repo.cecli_ignore_file.is_file():
3932
- files = self.repo.get_tracked_files()
3933
- else:
3934
- files = self.repo.get_non_ignored_files_from_root()
3935
- else:
3936
- files = self.get_inchat_relative_files()
3937
- # This is quite slow in large repos
3938
- # files = [fname for fname in files if self.is_file_safe(fname)]
3939
-
3940
- self.data_cache["relative_files"] = sorted(set(files))
3941
-
3942
- return self.data_cache["relative_files"]
3918
+ """Get all files known to the file service singleton."""
3919
+ fs = FileSystemService.get_instance()
3920
+ if fs.trie:
3921
+ # Auto-rebuild if the repository state has changed
3922
+ # (e.g., new commits, staged files, or HEAD change)
3923
+ if fs.needs_rebuild():
3924
+ fs.rebuild()
3925
+ files = fs.list_all()
3926
+ return files
3927
+ return self.get_inchat_relative_files()
3943
3928
 
3944
3929
  def get_all_abs_files(self):
3945
3930
  files = self.get_all_relative_files()
@@ -2,6 +2,8 @@ import os
2
2
  from pathlib import Path
3
3
  from typing import List
4
4
 
5
+ from cecli.helpers.file_system import FileSystemService
6
+
5
7
 
6
8
  class CommandError(Exception):
7
9
  """Custom exception for command-specific errors."""
@@ -136,6 +138,9 @@ def get_file_completions(
136
138
  This function provides unified file completion logic that can be used by
137
139
  multiple commands (add, read-only, read-only-stub, etc.).
138
140
 
141
+ Uses FileSystemService when available for efficient trie/trigram lookups,
142
+ with fallback to legacy behavior.
143
+
139
144
  Args:
140
145
  coder: Coder instance
141
146
  args: Command arguments to complete
@@ -153,6 +158,10 @@ def get_file_completions(
153
158
 
154
159
  root = Path(coder.root) if hasattr(coder, "root") else Path.cwd()
155
160
 
161
+ # Try using FileSystemService for efficient lookups
162
+ fs = FileSystemService.get_instance()
163
+ fs_available = fs.trie is not None or fs.ngram is not None
164
+
156
165
  if completion_type == "glob":
157
166
  # Handle glob pattern completion
158
167
  if not args.strip():
@@ -166,6 +175,7 @@ def get_file_completions(
166
175
 
167
176
  elif completion_type == "directory":
168
177
  # Handle directory-based prefix matching (like read-only commands)
178
+ # Fallback: iterate filesystem directory
169
179
  if "/" in args:
170
180
  # Has directory component
171
181
  dir_part, file_part = args.rsplit("/", 1)
@@ -199,12 +209,19 @@ def get_file_completions(
199
209
 
200
210
  else: # "all" completion type
201
211
  # Get all available files
202
- if filter_in_chat:
203
- files = set(coder.get_all_relative_files())
204
- files = files - set(coder.get_inchat_relative_files())
205
- completions = list(files)
212
+ if fs_available and fs.trie:
213
+ all_files = fs.list_all()
214
+ if filter_in_chat:
215
+ inchat = set(coder.get_inchat_relative_files())
216
+ all_files = [f for f in all_files if f not in inchat]
217
+ completions = all_files
206
218
  else:
207
- completions = coder.get_all_relative_files()
219
+ if filter_in_chat:
220
+ files = set(coder.get_all_relative_files())
221
+ files = files - set(coder.get_inchat_relative_files())
222
+ completions = list(files)
223
+ else:
224
+ completions = coder.get_all_relative_files()
208
225
 
209
226
  # Quote filenames with spaces
210
227
  completions = [quote_filename(fn) for fn in completions]
@@ -0,0 +1,3 @@
1
+ from .service import FileSystemService
2
+
3
+ __all__ = ["FileSystemService"]
@@ -0,0 +1,172 @@
1
+ """
2
+ Construction strategies for FileSystemService.
3
+
4
+ - GitBuilder: uses git ls-files (respects .gitignore)
5
+ - ScandirBuilder: uses os.walk with ignore filtering
6
+ """
7
+
8
+ import hashlib
9
+ import os
10
+ import subprocess
11
+ from pathlib import Path
12
+
13
+ from .ignore import FileIgnoreFilter
14
+
15
+
16
+ class GitBuilder:
17
+ """Build file list from git repository."""
18
+
19
+ @staticmethod
20
+ def collect(root: str) -> list[str]:
21
+ """
22
+ Collect all tracked files relative to root.
23
+
24
+ Uses ``git ls-files -z`` for null-delimited, encoding-safe output.
25
+ Respects .gitignore naturally (git's built-in behavior).
26
+
27
+ Args:
28
+ root: Root directory of the git repository
29
+
30
+ Returns:
31
+ Sorted list of root-relative paths
32
+ """
33
+ try:
34
+ result = subprocess.check_output(
35
+ ["git", "ls-files", "-z"],
36
+ cwd=root,
37
+ text=True,
38
+ )
39
+ paths = [p for p in result.split("\0") if p]
40
+ return sorted(paths)
41
+ except subprocess.CalledProcessError:
42
+ return []
43
+ except FileNotFoundError:
44
+ return []
45
+ return sorted(paths)
46
+
47
+ @staticmethod
48
+ def staged_only(root: str) -> list[str]:
49
+ """
50
+ Get only staged files (currently staged but not committed).
51
+
52
+ Args:
53
+ root: Root directory of the git repository
54
+
55
+ Returns:
56
+ List of staged file paths relative to root
57
+ """
58
+ result = subprocess.check_output(
59
+ ["git", "diff", "--cached", "--name-only", "-z"],
60
+ cwd=root,
61
+ text=True,
62
+ )
63
+ return [p for p in result.split("\0") if p]
64
+
65
+ @staticmethod
66
+ def get_head_sha(root: str) -> str:
67
+ """
68
+ Get current HEAD SHA for cache invalidation.
69
+
70
+ Args:
71
+ root: Root directory of the git repository
72
+
73
+ Returns:
74
+ HEAD commit SHA string, or empty string on failure
75
+ """
76
+ try:
77
+ return subprocess.check_output(
78
+ ["git", "rev-parse", "HEAD"],
79
+ cwd=root,
80
+ text=True,
81
+ stderr=subprocess.DEVNULL,
82
+ ).strip()
83
+ except subprocess.CalledProcessError:
84
+ return ""
85
+
86
+ @staticmethod
87
+ def get_cache_key(root: str) -> str:
88
+ """
89
+ Generate a cache key combining HEAD SHA and staged file paths.
90
+
91
+ Combines the current HEAD commit hash with the list of staged
92
+ (but not yet committed) files so that new files appear in the
93
+ index even before they are committed.
94
+
95
+ Args:
96
+ root: Root directory of the git repository
97
+
98
+ Returns:
99
+ SHA-256 hex digest as cache key
100
+ """
101
+ sha = GitBuilder.get_head_sha(root)
102
+ staged = GitBuilder.staged_only(root)
103
+ combined = sha + "|" + "".join(sorted(staged))
104
+ return hashlib.sha256(combined.encode()).hexdigest()
105
+
106
+
107
+ class ScandirBuilder:
108
+ """Build file list by walking filesystem."""
109
+
110
+ @staticmethod
111
+ def collect(
112
+ root: str,
113
+ ignore_filter: FileIgnoreFilter | None = None,
114
+ ) -> list[str]:
115
+ """
116
+ Walk filesystem collecting files relative to root.
117
+
118
+ Prunes ignored directories during walk (never descends into them),
119
+ avoiding wasted I/O on subtrees like ``node_modules/``.
120
+
121
+ Args:
122
+ root: Root directory to scan
123
+ ignore_filter: Optional ignore rules for filtering
124
+
125
+ Returns:
126
+ Sorted list of root-relative paths (POSIX-style)
127
+ """
128
+ paths = []
129
+ root_path = Path(root).resolve()
130
+
131
+ for dirpath, dirnames, filenames in os.walk(root_path):
132
+ rel_dir = os.path.relpath(dirpath, root)
133
+
134
+ # Prune ignored directories in-place (os.walk obeys this)
135
+ if ignore_filter:
136
+ dirnames[:] = [
137
+ d
138
+ for d in dirnames
139
+ if not ignore_filter.is_dir_ignored(os.path.join(rel_dir, d))
140
+ ]
141
+
142
+ for filename in filenames:
143
+ rel_path = os.path.join(rel_dir, filename) if rel_dir != "." else filename
144
+ if ignore_filter and ignore_filter.is_file_ignored(rel_path):
145
+ continue
146
+ # Normalize to POSIX-style paths
147
+ paths.append(rel_path.replace(os.sep, "/"))
148
+
149
+ return sorted(paths)
150
+
151
+ @staticmethod
152
+ def get_cache_key(root: str) -> str:
153
+ """
154
+ Generate a cache key from directory mtime.
155
+
156
+ Hashes the mtimes of all immediate children under root to detect
157
+ filesystem changes. A more robust approach would hash mtimes of
158
+ all nested entries, but this provides a good trade-off for speed.
159
+
160
+ Args:
161
+ root: Root directory to scan
162
+
163
+ Returns:
164
+ SHA-256 hex digest as cache key
165
+ """
166
+ mtimes = []
167
+ for entry in os.scandir(root):
168
+ try:
169
+ mtimes.append(str(entry.stat().st_mtime))
170
+ except OSError:
171
+ continue
172
+ return hashlib.sha256("|".join(sorted(mtimes)).encode()).hexdigest()
@@ -0,0 +1,80 @@
1
+ """
2
+ File ignore rules for non-git mode.
3
+
4
+ In git mode, .gitignore is handled by git ls-files natively.
5
+ In scandir mode, we need our own ignore logic.
6
+ """
7
+
8
+ from pathlib import Path
9
+
10
+ import pathspec
11
+
12
+ # Directories to always ignore (common noise sources)
13
+ DEFAULT_IGNORE_DIRS = frozenset(
14
+ {
15
+ "node_modules",
16
+ ".git",
17
+ "__pycache__",
18
+ ".venv",
19
+ "venv",
20
+ "env",
21
+ ".tox",
22
+ ".eggs",
23
+ "eggs",
24
+ ".mypy_cache",
25
+ ".pytest_cache",
26
+ ".ruff_cache",
27
+ ".hypothesis",
28
+ "build",
29
+ "dist",
30
+ ".next",
31
+ "target",
32
+ ".gradle",
33
+ }
34
+ )
35
+
36
+ # File patterns to always ignore
37
+ DEFAULT_IGNORE_PATTERNS = frozenset(
38
+ {
39
+ "*.pyc",
40
+ "*.pyo",
41
+ "*.pyd",
42
+ "*.so",
43
+ "*.dylib",
44
+ "*.dll",
45
+ ".DS_Store",
46
+ "Thumbs.db",
47
+ "*.egg-info/",
48
+ }
49
+ )
50
+
51
+
52
+ class FileIgnoreFilter:
53
+ """
54
+ Combined ignore filter that checks:
55
+ 1. .cecli.ignore file (if present)
56
+ 2. Common default patterns
57
+ """
58
+
59
+ def __init__(self, cecli_ignore_path: str | None = None):
60
+ self.cecli_ignore_spec = None
61
+ if cecli_ignore_path and Path(cecli_ignore_path).is_file():
62
+ with open(cecli_ignore_path) as f:
63
+ self.cecli_ignore_spec = pathspec.PathSpec.from_lines(
64
+ pathspec.patterns.GitWildMatchPattern, f
65
+ )
66
+
67
+ def is_dir_ignored(self, rel_dir: str) -> bool:
68
+ """Check if a directory should be ignored during filesystem walk."""
69
+ dirname = Path(rel_dir).name
70
+ if dirname in DEFAULT_IGNORE_DIRS:
71
+ return True
72
+ if self.cecli_ignore_spec and self.cecli_ignore_spec.match_file(rel_dir):
73
+ return True
74
+ return False
75
+
76
+ def is_file_ignored(self, rel_path: str) -> bool:
77
+ """Check if a file should be ignored."""
78
+ if self.cecli_ignore_spec and self.cecli_ignore_spec.match_file(rel_path):
79
+ return True
80
+ return False
@@ -0,0 +1,157 @@
1
+ """
2
+ RapidFuzz-based fuzzy file path matching engine.
3
+
4
+ All searches run against the trie index's path list (via list_all())
5
+ to avoid duplicating the full file list in memory. Falls back to an
6
+ internally stored list when no trie reference is available.
7
+ """
8
+
9
+ from rapidfuzz import fuzz, process
10
+
11
+ # Threshold presets for different use cases (0-1 scale, converted to 0-100 internally)
12
+ THRESHOLD_MENTION_DETECTION: float = 0.5
13
+ THRESHOLD_FUZZY_SEARCH: float = 0.3
14
+ THRESHOLD_BASENAME_SEARCH: float = 0.6
15
+
16
+
17
+ class TrigramIndex:
18
+ """
19
+ RapidFuzz-based fuzzy file path matcher.
20
+
21
+ Searches against a trie index's path list to avoid duplicating
22
+ the full file list in memory. Falls back to an internally stored
23
+ list when no trie reference is available (e.g., after serialization).
24
+ """
25
+
26
+ def __init__(
27
+ self,
28
+ items: list[str] | None = None,
29
+ trie_index=None,
30
+ ):
31
+ """
32
+ Initialize the trigram index.
33
+
34
+ Args:
35
+ items: Initial list of file paths to index (fallback)
36
+ trie_index: A TrieIndex whose list_all() provides the path list
37
+ """
38
+ self._items = items
39
+ self._trie_index = trie_index
40
+
41
+ def _get_items(self) -> list[str]:
42
+ """Resolve the path list from the trie or fall back to stored items."""
43
+ if self._trie_index is not None:
44
+ return self._trie_index.list_all()
45
+ return self._items or []
46
+
47
+ def build(self, items: list[str]) -> None:
48
+ """
49
+ Build or rebuild the index from a list of items.
50
+
51
+ Stores the full list for rapidfuzz to search against.
52
+ Detaches any trie reference.
53
+
54
+ Args:
55
+ items: Full list of file paths to index
56
+ """
57
+ self._items = items
58
+ self._trie_index = None
59
+
60
+ def search(
61
+ self,
62
+ query: str,
63
+ threshold: float = THRESHOLD_FUZZY_SEARCH,
64
+ max_results: int = 20,
65
+ ) -> list[str]:
66
+ """
67
+ Fuzzy search for items matching a query string.
68
+
69
+ Uses rapidfuzz.process.extract() with WRatio scorer for
70
+ fast C++-backed fuzzy matching against the trie's path list.
71
+
72
+ Args:
73
+ query: Search string
74
+ threshold: Minimum similarity score (0.0-1.0)
75
+ max_results: Maximum number of results to return
76
+
77
+ Returns:
78
+ List of matching items, sorted by relevance
79
+ """
80
+ items = self._get_items()
81
+
82
+ if not items or not query:
83
+ return []
84
+ score_cutoff = int(threshold * 100)
85
+ results = process.extract(
86
+ query,
87
+ items,
88
+ scorer=fuzz.WRatio,
89
+ limit=max_results,
90
+ score_cutoff=score_cutoff,
91
+ )
92
+ return [match for match, score, _ in results]
93
+
94
+ def search_with_scores(
95
+ self,
96
+ query: str,
97
+ threshold: float = THRESHOLD_FUZZY_SEARCH,
98
+ max_results: int = 20,
99
+ ) -> list[tuple[str, float]]:
100
+ """
101
+ Fuzzy search returning items with their similarity scores.
102
+
103
+ Args:
104
+ query: Search string
105
+ threshold: Minimum similarity score (0.0-1.0)
106
+ max_results: Maximum number of results to return
107
+
108
+ Returns:
109
+ List of (item, score) tuples, sorted by score descending
110
+ """
111
+ items = self._get_items()
112
+ if not items or not query:
113
+ return []
114
+ score_cutoff = int(threshold * 100)
115
+ results = process.extract(
116
+ query,
117
+ items,
118
+ scorer=fuzz.WRatio,
119
+ limit=max_results,
120
+ score_cutoff=score_cutoff,
121
+ )
122
+ return [(match, score / 100.0) for match, score, _ in results]
123
+
124
+ def count(self) -> int:
125
+ """Return the number of items in the index."""
126
+ return len(self._get_items())
127
+
128
+ def clear(self) -> None:
129
+ """Clear the index."""
130
+ self._items = None
131
+ self._trie_index = None
132
+
133
+ @property
134
+ def ngram(self):
135
+ """Backward-compatibility shim — always returns None."""
136
+ return True
137
+
138
+ @property
139
+ def configuration(self) -> dict:
140
+ """Return the current configuration parameters."""
141
+ return {
142
+ "engine": "rapidfuzz",
143
+ "scorer": "fuzz.WRatio",
144
+ }
145
+
146
+ # --- Pickle support ---
147
+
148
+ def __getstate__(self):
149
+ """Resolve items before serialization so the trie ref is not pickled."""
150
+ state = self.__dict__.copy()
151
+ state["_items"] = self._get_items()
152
+ state["_trie_index"] = None
153
+ return state
154
+
155
+ def __setstate__(self, state):
156
+ """Restore from pickled state."""
157
+ self.__dict__.update(state)