cecli-dev 1.0.0rc3__tar.gz → 1.0.0rc5__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 (718) hide show
  1. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/ubuntu-tests.yml +3 -0
  2. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/windows-tests.yml +3 -0
  3. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/PKG-INFO +2 -1
  4. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/_version.py +3 -3
  5. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/agent_coder.py +1 -2
  6. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/__init__.py +3 -0
  7. cecli_dev-1.0.0rc5/cecli/commands/agent_tree.py +95 -0
  8. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/agents/service.py +1 -1
  9. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/hashline.py +239 -9
  10. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/hashpos/hashpos.py +92 -101
  11. cecli_dev-1.0.0rc5/cecli/helpers/hashpos/transformations.py +476 -0
  12. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/nested.py +14 -1
  13. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/agent_proxy.py +556 -0
  14. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/environment.py +566 -0
  15. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/region_resolver.py +473 -0
  16. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/safe_methods.py +750 -0
  17. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/security.py +182 -0
  18. cecli_dev-1.0.0rc5/cecli/helpers/orchestration/tool_proxy.py +274 -0
  19. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/helpers.py +1 -1
  20. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/io.py +3 -3
  21. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mcp/server.py +2 -0
  22. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/models.py +1 -0
  23. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/agent.yml +18 -10
  24. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/subagent.yml +18 -10
  25. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/__init__.py +0 -2
  26. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/command.py +93 -2
  27. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/delegate.py +80 -25
  28. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/edit_file.py +104 -37
  29. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/explore_code.py +55 -11
  30. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/grep.py +68 -22
  31. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/orchestrate.py +5 -2
  32. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/read_file.py +262 -170
  33. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/resource_manager.py +2 -1
  34. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/base_tool.py +23 -4
  35. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/responses.py +26 -12
  36. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/validations/validations.py +1 -1
  37. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/PKG-INFO +2 -1
  38. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/SOURCES.txt +6 -1
  39. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/requires.txt +1 -0
  40. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/scm_file_list.json +835 -830
  41. cecli_dev-1.0.0rc5/cecli_dev.egg-info/scm_version.json +8 -0
  42. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/common-constraints.txt +2 -0
  43. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements.in +3 -0
  44. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements.txt +4 -0
  45. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/test_orchestration.py +694 -31
  46. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_grep.py +4 -3
  47. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_insert_block.py +2 -2
  48. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_read_range_execute.py +2 -4
  49. cecli_dev-1.0.0rc3/cecli/helpers/orchestration/environment.py +0 -616
  50. cecli_dev-1.0.0rc3/cecli/helpers/orchestration/security.py +0 -101
  51. cecli_dev-1.0.0rc3/cecli/tools/command_interactive.py +0 -181
  52. cecli_dev-1.0.0rc3/cecli_dev.egg-info/scm_version.json +0 -8
  53. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.dockerignore +0 -0
  54. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.flake8 +0 -0
  55. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.gitattributes +0 -0
  56. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  57. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/check_pypi_version.yml +0 -0
  58. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/docker-build-test.yml +0 -0
  59. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/docker-release.yml +0 -0
  60. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/issues.yml +0 -0
  61. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/pages.yml +0 -0
  62. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/pre-commit.yml +0 -0
  63. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/release.yml +0 -0
  64. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.github/workflows/windows_check_pypi_version.yml +0 -0
  65. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.gitignore +0 -0
  66. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/.pre-commit-config.yaml +0 -0
  67. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/CHANGELOG.md +0 -0
  68. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/CNAME +0 -0
  69. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/CONTRIBUTING.md +0 -0
  70. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/HISTORY.md +0 -0
  71. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/LICENSE.txt +0 -0
  72. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/MANIFEST.in +0 -0
  73. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/README.md +0 -0
  74. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/Dockerfile +0 -0
  75. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/README.md +0 -0
  76. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/__init__.py +0 -0
  77. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/benchmark.py +0 -0
  78. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/benchmark_classic.py +0 -0
  79. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/clone-exercism.sh +0 -0
  80. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/cpp-test.sh +0 -0
  81. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/docker.sh +0 -0
  82. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/docker_build.sh +0 -0
  83. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/install-docker-ubuntu.sh +0 -0
  84. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/npm-test.sh +0 -0
  85. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/over_time.py +0 -0
  86. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/plot.sh +0 -0
  87. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/plots.py +0 -0
  88. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/problem_stats.py +0 -0
  89. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/prompts.py +0 -0
  90. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/refactor_tools.py +0 -0
  91. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/rsync.sh +0 -0
  92. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/rungrid.py +0 -0
  93. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/swe-bench-lite.txt +0 -0
  94. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/swe-bench.txt +0 -0
  95. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/swe_bench.py +0 -0
  96. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/test_benchmark.py +0 -0
  97. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/variations.1.sh +0 -0
  98. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/variations.2.sh +0 -0
  99. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/variations.3.sh +0 -0
  100. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/benchmark/variations.4.sh +0 -0
  101. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/__init__.py +0 -0
  102. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/__main__.py +0 -0
  103. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/args.py +0 -0
  104. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/args_formatter.py +0 -0
  105. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/change_tracker.py +0 -0
  106. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/__init__.py +0 -0
  107. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/architect_coder.py +0 -0
  108. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/ask_coder.py +0 -0
  109. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/base_coder.py +0 -0
  110. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/chat_chunks.py +0 -0
  111. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/context_coder.py +0 -0
  112. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/copypaste_coder.py +0 -0
  113. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editblock_coder.py +0 -0
  114. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editblock_fenced_coder.py +0 -0
  115. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editblock_func_coder.py +0 -0
  116. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  117. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editor_editblock_coder.py +0 -0
  118. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/editor_whole_coder.py +0 -0
  119. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/hashline_coder.py +0 -0
  120. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/help_coder.py +0 -0
  121. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/patch_coder.py +0 -0
  122. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/search_replace.py +0 -0
  123. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/shell.py +0 -0
  124. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/single_wholefile_func_coder.py +0 -0
  125. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/sub_agent_coder.py +0 -0
  126. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/udiff_coder.py +0 -0
  127. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/udiff_simple.py +0 -0
  128. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/wholefile_coder.py +0 -0
  129. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/coders/wholefile_func_coder.py +0 -0
  130. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/add.py +0 -0
  131. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/agent.py +0 -0
  132. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/agent_model.py +0 -0
  133. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/architect.py +0 -0
  134. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/ask.py +0 -0
  135. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/chat_mode.py +0 -0
  136. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/clear.py +0 -0
  137. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/code.py +0 -0
  138. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/command_prefix.py +0 -0
  139. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/commit.py +0 -0
  140. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/compact.py +0 -0
  141. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/context.py +0 -0
  142. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/context_blocks.py +0 -0
  143. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/context_management.py +0 -0
  144. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/copy.py +0 -0
  145. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/copy_context.py +0 -0
  146. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/core.py +0 -0
  147. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/diff.py +0 -0
  148. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/drop.py +0 -0
  149. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/editor.py +0 -0
  150. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/editor_model.py +0 -0
  151. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/exclude_skill.py +0 -0
  152. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/exit.py +0 -0
  153. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/git.py +0 -0
  154. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/hashline.py +0 -0
  155. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/help.py +0 -0
  156. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/history_search.py +0 -0
  157. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/hooks.py +0 -0
  158. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/hot_reload.py +0 -0
  159. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/include_skill.py +0 -0
  160. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/lint.py +0 -0
  161. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/list_mcp.py +0 -0
  162. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/list_sessions.py +0 -0
  163. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/list_skills.py +0 -0
  164. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/load.py +0 -0
  165. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/load_hook.py +0 -0
  166. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/load_mcp.py +0 -0
  167. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/load_session.py +0 -0
  168. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/load_skill.py +0 -0
  169. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/ls.py +0 -0
  170. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/map.py +0 -0
  171. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/map_refresh.py +0 -0
  172. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/merge.py +0 -0
  173. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/model.py +0 -0
  174. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/models.py +0 -0
  175. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/multiline_mode.py +0 -0
  176. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/paste.py +0 -0
  177. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/quit.py +0 -0
  178. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/read_only.py +0 -0
  179. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/read_only_stub.py +0 -0
  180. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/reap_agent.py +0 -0
  181. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/reasoning_effort.py +0 -0
  182. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/remove_hook.py +0 -0
  183. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/remove_mcp.py +0 -0
  184. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/remove_skill.py +0 -0
  185. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/report.py +0 -0
  186. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/reset.py +0 -0
  187. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/rules.py +0 -0
  188. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/run.py +0 -0
  189. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/save.py +0 -0
  190. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/save_session.py +0 -0
  191. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/settings.py +0 -0
  192. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/spawn_agent.py +0 -0
  193. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/switch_agent.py +0 -0
  194. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/terminal_data/linux.keytab +0 -0
  195. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/terminal_setup.py +0 -0
  196. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/test.py +0 -0
  197. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/think_tokens.py +0 -0
  198. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/tokens.py +0 -0
  199. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/undo.py +0 -0
  200. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/utils/__init__.py +0 -0
  201. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/utils/base_command.py +0 -0
  202. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/utils/helpers.py +0 -0
  203. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/utils/registry.py +0 -0
  204. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/utils/save_load_manager.py +0 -0
  205. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/voice.py +0 -0
  206. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/weak_model.py +0 -0
  207. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/web.py +0 -0
  208. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/commands/workspace.py +0 -0
  209. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/deprecated_args.py +0 -0
  210. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/diffs.py +0 -0
  211. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/dump.py +0 -0
  212. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/editor.py +0 -0
  213. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/exceptions.py +0 -0
  214. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/format_settings.py +0 -0
  215. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/help.py +0 -0
  216. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/help_pats.py +0 -0
  217. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/__init__.py +0 -0
  218. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/agents/__init__.py +0 -0
  219. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/agents/config.py +0 -0
  220. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/background_commands.py +0 -0
  221. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/command_parser.py +0 -0
  222. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/__init__.py +0 -0
  223. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/base_message.py +0 -0
  224. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/files.py +0 -0
  225. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/integration.py +0 -0
  226. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/manager.py +0 -0
  227. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/service.py +0 -0
  228. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/tags.py +0 -0
  229. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/conversation/utils.py +0 -0
  230. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/copypaste.py +0 -0
  231. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/coroutines.py +0 -0
  232. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/crypto.py +0 -0
  233. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_searcher.py +0 -0
  234. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/__init__.py +0 -0
  235. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/builders.py +0 -0
  236. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/ignore.py +0 -0
  237. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/ngram_index.py +0 -0
  238. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/service.py +0 -0
  239. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/file_system/trie_index.py +0 -0
  240. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/__init__.py +0 -0
  241. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/dump.py +0 -0
  242. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  243. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/main.py +0 -0
  244. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/parsers.py +0 -0
  245. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/grep_ast/tsl.py +0 -0
  246. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/hashpos/__init__.py +0 -0
  247. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  248. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/io_proxy.py +0 -0
  249. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/leak_detect.py +0 -0
  250. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/model_providers.py +0 -0
  251. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/__init__.py +0 -0
  252. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/config.py +0 -0
  253. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/local_workspace.py +0 -0
  254. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/project.py +0 -0
  255. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/workspace.py +0 -0
  256. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/monorepo/worktree.py +0 -0
  257. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/observations/__init__.py +0 -0
  258. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/observations/service.py +0 -0
  259. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/orchestration/__init__.py +0 -0
  260. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/orchestration/service.py +0 -0
  261. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/plugin_manager.py +0 -0
  262. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/profiler.py +0 -0
  263. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/requests.py +0 -0
  264. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/responses.py +0 -0
  265. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/similarity.py +0 -0
  266. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/skills.py +0 -0
  267. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/helpers/threading.py +0 -0
  268. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/history.py +0 -0
  269. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/__init__.py +0 -0
  270. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/base.py +0 -0
  271. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/integration.py +0 -0
  272. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/manager.py +0 -0
  273. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/registry.py +0 -0
  274. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/service.py +0 -0
  275. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/hooks/types.py +0 -0
  276. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/interruptible_input.py +0 -0
  277. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/linter.py +0 -0
  278. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/llm.py +0 -0
  279. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/main.py +0 -0
  280. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mcp/__init__.py +0 -0
  281. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mcp/manager.py +0 -0
  282. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mcp/oauth.py +0 -0
  283. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mcp/utils.py +0 -0
  284. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/mdstream.py +0 -0
  285. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/onboarding.py +0 -0
  286. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/__init__.py +0 -0
  287. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/architect.yml +0 -0
  288. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/ask.yml +0 -0
  289. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/base.yml +0 -0
  290. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/context.yml +0 -0
  291. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/copypaste.yml +0 -0
  292. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editblock.yml +0 -0
  293. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editblock_fenced.yml +0 -0
  294. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editblock_func.yml +0 -0
  295. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editor_diff_fenced.yml +0 -0
  296. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editor_editblock.yml +0 -0
  297. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/editor_whole.yml +0 -0
  298. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/hashline.yml +0 -0
  299. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/help.yml +0 -0
  300. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/patch.yml +0 -0
  301. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/single_wholefile_func.yml +0 -0
  302. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/udiff.yml +0 -0
  303. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/udiff_simple.yml +0 -0
  304. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/utils/__init__.py +0 -0
  305. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/utils/registry.py +0 -0
  306. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/utils/system.py +0 -0
  307. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/wholefile.yml +0 -0
  308. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/prompts/wholefile_func.yml +0 -0
  309. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  310. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  311. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  312. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  313. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  314. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  315. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  316. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  317. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  318. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  319. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  320. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  321. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  322. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  323. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  324. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  325. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  326. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  327. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  328. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  329. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  330. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  331. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  332. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  333. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  334. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  335. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  336. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  337. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  338. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  339. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  340. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  341. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/README.md +0 -0
  342. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  343. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  344. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  345. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  346. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  347. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  348. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  349. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  350. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  351. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  352. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  353. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  354. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  355. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  356. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  357. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  358. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  359. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  360. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  361. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  362. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  363. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  364. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  365. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  366. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  367. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  368. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  369. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/reasoning_tags.py +0 -0
  370. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/repo.py +0 -0
  371. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/repomap.py +0 -0
  372. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/report.py +0 -0
  373. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/resources/__init__.py +0 -0
  374. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/resources/model-metadata.json +0 -0
  375. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/resources/model-settings.yml +0 -0
  376. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/resources/providers.json +0 -0
  377. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/run_cmd.py +0 -0
  378. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/scrape.py +0 -0
  379. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/sendchat.py +0 -0
  380. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/sessions.py +0 -0
  381. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/signals.py +0 -0
  382. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/special.py +0 -0
  383. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/_yield.py +0 -0
  384. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_branch.py +0 -0
  385. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_diff.py +0 -0
  386. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_log.py +0 -0
  387. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_remote.py +0 -0
  388. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_show.py +0 -0
  389. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/git_status.py +0 -0
  390. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/ls.py +0 -0
  391. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/thinking.py +0 -0
  392. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/undo_change.py +0 -0
  393. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/update_todo_list.py +0 -0
  394. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/__init__.py +0 -0
  395. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/helpers.py +0 -0
  396. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/output.py +0 -0
  397. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/utils/registry.py +0 -0
  398. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tools/validations/__init__.py +0 -0
  399. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/__init__.py +0 -0
  400. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/app.py +0 -0
  401. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/io.py +0 -0
  402. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/styles.tcss +0 -0
  403. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/__init__.py +0 -0
  404. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/completion_bar.py +0 -0
  405. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/file_list.py +0 -0
  406. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/footer.py +0 -0
  407. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/input_area.py +0 -0
  408. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/input_container.py +0 -0
  409. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/key_hints.py +0 -0
  410. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/output.py +0 -0
  411. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/status_bar.py +0 -0
  412. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/widgets/subagent_pills.py +0 -0
  413. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/tui/worker.py +0 -0
  414. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/urls.py +0 -0
  415. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/utils.py +0 -0
  416. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/versioncheck.py +0 -0
  417. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/voice.py +0 -0
  418. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/waiting.py +0 -0
  419. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/watch.py +0 -0
  420. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/watch_prompts.py +0 -0
  421. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/Gemfile +0 -0
  422. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/blame.md +0 -0
  423. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/get-started.md +0 -0
  424. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/help-tip.md +0 -0
  425. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/help.md +0 -0
  426. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/install.md +0 -0
  427. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/keys.md +0 -0
  428. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/model-warnings.md +0 -0
  429. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/multi-line.md +0 -0
  430. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/python-m-aider.md +0 -0
  431. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/recording.css +0 -0
  432. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/recording.md +0 -0
  433. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_includes/works-best.md +0 -0
  434. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_features.scss +0 -0
  435. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_footer.scss +0 -0
  436. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_hero.scss +0 -0
  437. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_info.scss +0 -0
  438. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_layout.scss +0 -0
  439. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_reset.scss +0 -0
  440. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_testimonials.scss +0 -0
  441. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_typography.scss +0 -0
  442. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/_variables.scss +0 -0
  443. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/custom/custom.scss +0 -0
  444. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/_sass/global-overrides.scss +0 -0
  445. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/adv-model-settings.md +0 -0
  446. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/agent-mode.md +0 -0
  447. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/api-keys.md +0 -0
  448. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/conf.md +0 -0
  449. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/custom-commands.md +0 -0
  450. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  451. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/dotenv.md +0 -0
  452. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/editor.md +0 -0
  453. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/hooks.md +0 -0
  454. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/mcp.md +0 -0
  455. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/model-aliases.md +0 -0
  456. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/model-configuration.md +0 -0
  457. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/model-providers.md +0 -0
  458. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/options.md +0 -0
  459. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/reasoning.md +0 -0
  460. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/retries.md +0 -0
  461. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/security.md +0 -0
  462. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/skills.md +0 -0
  463. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/subagents.md +0 -0
  464. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/tui.md +0 -0
  465. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config/workspaces.md +0 -0
  466. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/config.md +0 -0
  467. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/git.md +0 -0
  468. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/index.md +0 -0
  469. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/install/docker.md +0 -0
  470. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/install.md +0 -0
  471. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/languages.md +0 -0
  472. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  473. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/legal/privacy.md +0 -0
  474. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/anthropic.md +0 -0
  475. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/azure.md +0 -0
  476. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/bedrock.md +0 -0
  477. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/cohere.md +0 -0
  478. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/deepseek.md +0 -0
  479. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/gemini.md +0 -0
  480. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/github.md +0 -0
  481. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/groq.md +0 -0
  482. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/lm-studio.md +0 -0
  483. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/ollama.md +0 -0
  484. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/openai-compat.md +0 -0
  485. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/openai.md +0 -0
  486. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/openrouter.md +0 -0
  487. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/other.md +0 -0
  488. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/vertex.md +0 -0
  489. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/warnings.md +0 -0
  490. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms/xai.md +0 -0
  491. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/llms.md +0 -0
  492. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/more/analytics.md +0 -0
  493. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/more/edit-formats.md +0 -0
  494. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/more/infinite-output.md +0 -0
  495. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/more-info.md +0 -0
  496. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/repomap.md +0 -0
  497. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/scripting.md +0 -0
  498. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  499. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  500. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/imports.md +0 -0
  501. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  502. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/support.md +0 -0
  503. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  504. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  505. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/troubleshooting.md +0 -0
  506. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/commands.md +0 -0
  507. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/conventions.md +0 -0
  508. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/copypaste.md +0 -0
  509. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/images-urls.md +0 -0
  510. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/lint-test.md +0 -0
  511. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/modes.md +0 -0
  512. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/not-code.md +0 -0
  513. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/notifications.md +0 -0
  514. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/optional.md +0 -0
  515. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/sessions.md +0 -0
  516. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/tips.md +0 -0
  517. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/voice.md +0 -0
  518. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage/watch.md +0 -0
  519. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/docs/usage.md +0 -0
  520. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli/website/share/index.md +0 -0
  521. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/dependency_links.txt +0 -0
  522. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/entry_points.txt +0 -0
  523. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/cecli_dev.egg-info/top_level.txt +0 -0
  524. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/docker/Dockerfile +0 -0
  525. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  526. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/pyproject.toml +0 -0
  527. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/pytest.ini +0 -0
  528. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-dev.in +0 -0
  529. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-dev.txt +0 -0
  530. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-help.in +0 -0
  531. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-help.txt +0 -0
  532. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-playwright.in +0 -0
  533. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/requirements-playwright.txt +0 -0
  534. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/requirements/tree-sitter.in +0 -0
  535. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/30k-image.py +0 -0
  536. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/Dockerfile.jekyll +0 -0
  537. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/__init__.py +0 -0
  538. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/blame.py +0 -0
  539. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/clean_metadata.py +0 -0
  540. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/compare-message-history.py +0 -0
  541. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/cost_analyzer.py +0 -0
  542. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/cost_calculator.py +0 -0
  543. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/dl_icons.py +0 -0
  544. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/filter-chat-mode.js +0 -0
  545. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/generate_providers.py +0 -0
  546. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/get_contributor_list.js +0 -0
  547. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/get_hashline.py +0 -0
  548. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/history_prompts.py +0 -0
  549. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/homepage.py +0 -0
  550. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/issues.py +0 -0
  551. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/jekyll_build.sh +0 -0
  552. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/jekyll_run.sh +0 -0
  553. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/logo_svg.py +0 -0
  554. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/optimize_tokens.sh +0 -0
  555. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/pip-compile.sh +0 -0
  556. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/recording_audio.py +0 -0
  557. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/redact-cast.py +0 -0
  558. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/rename_to_cecli.py +0 -0
  559. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/tmux_record.sh +0 -0
  560. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/tsl_pack_langs.py +0 -0
  561. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/update-blame.sh +0 -0
  562. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/update-docs.sh +0 -0
  563. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/update-history.py +0 -0
  564. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/versionbump.py +0 -0
  565. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/scripts/yank-old-versions.py +0 -0
  566. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/setup.cfg +0 -0
  567. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/shim.pyproject.toml +0 -0
  568. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/__init__.py +0 -0
  569. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/__init__.py +0 -0
  570. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/conftest.py +0 -0
  571. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_aws_credentials.py +0 -0
  572. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_background_commands.py +0 -0
  573. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_coder.py +0 -0
  574. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_commands.py +0 -0
  575. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_custom_commands.py +0 -0
  576. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_deprecated.py +0 -0
  577. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_editblock.py +0 -0
  578. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_editor.py +0 -0
  579. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_exceptions.py +0 -0
  580. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_find_or_blocks.py +0 -0
  581. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_hashline.py +0 -0
  582. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_hashline_closure.py +0 -0
  583. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_history.py +0 -0
  584. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_io.py +0 -0
  585. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_linter.py +0 -0
  586. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_main.py +0 -0
  587. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_model_info_manager.py +0 -0
  588. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_model_provider_manager.py +0 -0
  589. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_models.py +0 -0
  590. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_onboarding.py +0 -0
  591. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_plugin_manager.py +0 -0
  592. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_prompts.py +0 -0
  593. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_reasoning.py +0 -0
  594. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_repo.py +0 -0
  595. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_repomap.py +0 -0
  596. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_run_cmd.py +0 -0
  597. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_sanity_check_repo.py +0 -0
  598. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_scripting.py +0 -0
  599. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_sendchat.py +0 -0
  600. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_session_args.py +0 -0
  601. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_session_crypto.py +0 -0
  602. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_sessions.py +0 -0
  603. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_sessions_manager.py +0 -0
  604. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_skills.py +0 -0
  605. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_special.py +0 -0
  606. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_ssl_verification.py +0 -0
  607. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_udiff.py +0 -0
  608. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_urls.py +0 -0
  609. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_voice.py +0 -0
  610. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_watch.py +0 -0
  611. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/basic/test_wholefile.py +0 -0
  612. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/coders/test_coder_switching.py +0 -0
  613. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/coders/test_copypaste_coder.py +0 -0
  614. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/commands/test_compaction.py +0 -0
  615. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/commands/test_switch_agent.py +0 -0
  616. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/conftest.py +0 -0
  617. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/conversations/test_conversation_integration.py +0 -0
  618. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/conversations/test_conversation_system.py +0 -0
  619. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  620. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/chat-history.md +0 -0
  621. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/arduino/test.ino +0 -0
  622. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/bash/test.sh +0 -0
  623. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/c/test.c +0 -0
  624. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/chatito/test.chatito +0 -0
  625. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/clojure/test.clj +0 -0
  626. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  627. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/cpp/test.cpp +0 -0
  628. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/csharp/test.cs +0 -0
  629. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/d/test.d +0 -0
  630. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/dart/test.dart +0 -0
  631. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/elisp/test.el +0 -0
  632. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/elixir/test.ex +0 -0
  633. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/elm/test.elm +0 -0
  634. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/gleam/test.gleam +0 -0
  635. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/go/test.go +0 -0
  636. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/haskell/test.hs +0 -0
  637. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/hcl/test.tf +0 -0
  638. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/java/test.java +0 -0
  639. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/javascript/test.js +0 -0
  640. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/kotlin/test.kt +0 -0
  641. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/lua/test.lua +0 -0
  642. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/matlab/test.m +0 -0
  643. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/ocaml/test.ml +0 -0
  644. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  645. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/php/test.php +0 -0
  646. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/pony/test.pony +0 -0
  647. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/properties/test.properties +0 -0
  648. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/python/test.py +0 -0
  649. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/ql/test.ql +0 -0
  650. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/r/test.r +0 -0
  651. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/racket/test.rkt +0 -0
  652. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/ruby/test.rb +0 -0
  653. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/rust/test.rs +0 -0
  654. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/scala/test.scala +0 -0
  655. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/solidity/test.sol +0 -0
  656. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/swift/test.swift +0 -0
  657. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/tsx/test.tsx +0 -0
  658. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/typescript/test.ts +0 -0
  659. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/udev/test.rules +0 -0
  660. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/languages/zig/test.zig +0 -0
  661. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/sample-code-base/sample.js +0 -0
  662. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/sample-code-base/sample.py +0 -0
  663. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  664. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/watch.js +0 -0
  665. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/watch.lisp +0 -0
  666. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/watch.py +0 -0
  667. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/fixtures/watch_question.js +0 -0
  668. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/help/test_help.py +0 -0
  669. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  670. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_config.py +0 -0
  671. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_config_active.py +0 -0
  672. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  673. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  674. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  675. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/monorepo/test_workspace.py +0 -0
  676. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/helpers/observations/test_observation_service.py +0 -0
  677. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/hooks/__init__.py +0 -0
  678. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/hooks/test_base.py +0 -0
  679. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/hooks/test_manager.py +0 -0
  680. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/hooks/test_registry.py +0 -0
  681. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/integration/test_agent_mcp_management.py +0 -0
  682. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/integration/test_mcp_management.py +0 -0
  683. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/__init__.py +0 -0
  684. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/conftest.py +0 -0
  685. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/mock_server.py +0 -0
  686. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_concurrency.py +0 -0
  687. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_config.py +0 -0
  688. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_integration.py +0 -0
  689. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_logging.py +0 -0
  690. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_resilience.py +0 -0
  691. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_keepalive_unit.py +0 -0
  692. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/mcp/test_manager.py +0 -0
  693. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/scrape/test_playwright_disable.py +0 -0
  694. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/scrape/test_scrape.py +0 -0
  695. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/__init__.py +0 -0
  696. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/conftest.py +0 -0
  697. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_commands.py +0 -0
  698. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_config.py +0 -0
  699. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_delegate.py +0 -0
  700. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_finished.py +0 -0
  701. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_io_proxy.py +0 -0
  702. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_service.py +0 -0
  703. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/subagents/test_sub_agent_coder.py +0 -0
  704. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/test_requests.py +0 -0
  705. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_extractions.py +0 -0
  706. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_get_lines.py +0 -0
  707. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_git_branch.py +0 -0
  708. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_git_diff.py +0 -0
  709. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_registry.py +0 -0
  710. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_remove_mcp_tool.py +0 -0
  711. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_tool_arguments.py +0 -0
  712. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  713. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tools/validations.py +0 -0
  714. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/tui/test_app.py +0 -0
  715. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/unit/test_load_mcp.py +0 -0
  716. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/unit/test_remove_mcp.py +0 -0
  717. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  718. {cecli_dev-1.0.0rc3 → cecli_dev-1.0.0rc5}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
@@ -55,6 +55,8 @@ jobs:
55
55
  -r requirements/requirements-help.in \
56
56
  -r requirements/requirements-playwright.in \
57
57
  ".[help,playwright]"
58
+ env:
59
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
58
60
 
59
61
  - name: Configure Git for tests
60
62
  run: |
@@ -67,3 +69,4 @@ jobs:
67
69
  pytest
68
70
  env:
69
71
  CECLI_TUI: "false"
72
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
@@ -43,6 +43,8 @@ jobs:
43
43
  python -m pip install --upgrade pip
44
44
  pip install uv
45
45
  uv pip install --system pytest pytest-asyncio pytest-mock -r requirements/requirements.in -r requirements/requirements-help.in -r requirements/requirements-playwright.in '.[help,playwright]'
46
+ env:
47
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
46
48
 
47
49
  - name: Configure Git for tests
48
50
  run: |
@@ -55,3 +57,4 @@ jobs:
55
57
  pytest
56
58
  env:
57
59
  CECLI_TUI: "false"
60
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 1.0.0rc3
3
+ Version: 1.0.0rc5
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
@@ -59,6 +59,7 @@ Requires-Dist: rapidfuzz>=3.0
59
59
  Requires-Dist: ngram>=4.0.3
60
60
  Requires-Dist: rustworkx>=0.15.0
61
61
  Requires-Dist: scipy>=1.15.3
62
+ Requires-Dist: orjson>=3.11.6
62
63
  Requires-Dist: importlib-metadata>=7.2.1
63
64
  Requires-Dist: tomli>=2.3.0; python_version <= "3.10"
64
65
  Requires-Dist: tree-sitter==0.23.2; python_version < "3.10"
@@ -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 = '1.0.0rc3'
22
- __version_tuple__ = version_tuple = (1, 0, 0, 'rc3')
21
+ __version__ = version = '1.0.0rc5'
22
+ __version_tuple__ = version_tuple = (1, 0, 0, 'rc5')
23
23
 
24
- __commit_id__ = commit_id = 'gf45ddde4f'
24
+ __commit_id__ = commit_id = 'g5575d3301'
@@ -62,7 +62,6 @@ class AgentCoder(Coder):
62
62
  self.max_tool_vector_history = 20
63
63
  self.read_tools = {
64
64
  "command",
65
- "commandinteractive",
66
65
  "explorecode",
67
66
  "ls",
68
67
  "readfile",
@@ -72,7 +71,6 @@ class AgentCoder(Coder):
72
71
  }
73
72
  self.write_tools = {
74
73
  "command",
75
- "commandinteractive",
76
74
  "editfile",
77
75
  "undochange",
78
76
  }
@@ -83,6 +81,7 @@ class AgentCoder(Coder):
83
81
  self.change_tracker = ChangeTracker()
84
82
  self.args = kwargs.get("args")
85
83
  self.files_added_in_exploration = set()
84
+ self.file_read_cache = set()
86
85
  self.tool_call_count = 0
87
86
  self.turn_count = 0
88
87
  self.max_reflections = 15
@@ -10,6 +10,7 @@ from cecli.signals import ReloadProgramSignal, SwitchCoderSignal
10
10
  from .add import AddCommand
11
11
  from .agent import AgentCommand
12
12
  from .agent_model import AgentModelCommand
13
+ from .agent_tree import AgentTreeCommand
13
14
  from .architect import ArchitectCommand
14
15
  from .ask import AskCommand
15
16
  from .clear import ClearCommand
@@ -96,6 +97,7 @@ from .workspace import WorkspaceCommand
96
97
  CommandRegistry.register(AddCommand)
97
98
  CommandRegistry.register(AgentCommand)
98
99
  CommandRegistry.register(AgentModelCommand)
100
+ CommandRegistry.register(AgentTreeCommand)
99
101
  CommandRegistry.register(ArchitectCommand)
100
102
  CommandRegistry.register(AskCommand)
101
103
  CommandRegistry.register(ClearCommand)
@@ -171,6 +173,7 @@ __all__ = [
171
173
  "AddCommand",
172
174
  "AgentCommand",
173
175
  "AgentModelCommand",
176
+ "AgentTreeCommand",
174
177
  "ArchitectCommand",
175
178
  "AskCommand",
176
179
  "BaseCommand",
@@ -0,0 +1,95 @@
1
+ from typing import List
2
+
3
+ from cecli.commands.utils.base_command import BaseCommand
4
+ from cecli.helpers.agents.service import AgentService, SubAgentInfo, SubAgentStatus
5
+
6
+
7
+ class TreeNode:
8
+ """A node in the agent hierarchy tree."""
9
+
10
+ def __init__(self, agent_info: SubAgentInfo):
11
+ self.agent_info = agent_info
12
+ self.children: List[TreeNode] = []
13
+
14
+ def add_child(self, child_node: "TreeNode"):
15
+ self.children.append(child_node)
16
+
17
+
18
+ class AgentTreeCommand(BaseCommand):
19
+ """Command to display the hierarchy of active agents."""
20
+
21
+ NORM_NAME = "agent-tree"
22
+ DESCRIPTION = "Display the hierarchy of active agents."
23
+
24
+ @classmethod
25
+ async def execute(cls, io, coder, args, **kwargs):
26
+ """Execute the /agent-tree command."""
27
+ agent_service = AgentService.get_instance(coder)
28
+ if not agent_service:
29
+ io.tool_output("Agent service not available.")
30
+ return
31
+
32
+ # Collect all agents: primary coder + sub-agents from sub_agents dict
33
+ all_infos: List[SubAgentInfo] = []
34
+
35
+ # Primary agent as a synthetic SubAgentInfo
36
+ primary_coder = agent_service.coder
37
+ primary_info = SubAgentInfo(
38
+ name="primary",
39
+ coder=primary_coder,
40
+ parent_uuid=str(primary_coder.parent_uuid or ""),
41
+ status=SubAgentStatus.RUNNING,
42
+ )
43
+ all_infos.append(primary_info)
44
+
45
+ # Sub-agents from the service's sub_agents dict
46
+ for info in agent_service.sub_agents.values():
47
+ if info and info.coder:
48
+ all_infos.append(info)
49
+
50
+ if len(all_infos) <= 1:
51
+ io.tool_output("No active sub-agents found.")
52
+ return
53
+
54
+ root_nodes = cls._build_tree(all_infos)
55
+ tree_output = cls._render_tree(root_nodes)
56
+ io.tool_output(tree_output)
57
+
58
+ @classmethod
59
+ def _build_tree(cls, all_agents: List[SubAgentInfo]) -> List[TreeNode]:
60
+ """Build the agent tree from a flat list of agents."""
61
+ nodes = {str(agent.coder.uuid): TreeNode(agent) for agent in all_agents}
62
+ root_nodes = []
63
+
64
+ for agent in all_agents:
65
+ parent_uuid = str(agent.coder.parent_uuid)
66
+ if parent_uuid and parent_uuid in nodes:
67
+ parent_node = nodes[parent_uuid]
68
+ child_node = nodes[str(agent.coder.uuid)]
69
+ parent_node.add_child(child_node)
70
+ else:
71
+ root_nodes.append(nodes[str(agent.coder.uuid)])
72
+
73
+ return root_nodes
74
+
75
+ @classmethod
76
+ def _render_tree(cls, nodes: List[TreeNode]) -> str:
77
+ """Render the agent tree to a string."""
78
+ output = []
79
+
80
+ def render_node(node: TreeNode, prefix: str = "", is_last: bool = True):
81
+ connector = "└── " if is_last else "├── "
82
+ output.append(
83
+ f"{prefix}{connector}{node.agent_info.name}"
84
+ f" ({node.agent_info.status.value})"
85
+ f" - {str(node.agent_info.coder.uuid)}"
86
+ )
87
+
88
+ child_prefix = prefix + (" " if is_last else "│ ")
89
+ for i, child in enumerate(node.children):
90
+ render_node(child, child_prefix, i == len(node.children) - 1)
91
+
92
+ for i, node in enumerate(nodes):
93
+ render_node(node, is_last=i == len(nodes) - 1)
94
+
95
+ return "\n".join(output)
@@ -575,7 +575,7 @@ class AgentService:
575
575
 
576
576
  Args:
577
577
 
578
- .. note::
578
+ .. note:
579
579
 
580
580
  **Ordering dependency with mark_sub_agent_finished()**
581
581
 
@@ -3,7 +3,11 @@ import json
3
3
  import re
4
4
  from collections import Counter
5
5
 
6
- from cecli.helpers.hashpos.hashpos import HashPos
6
+ from cecli.helpers.hashpos.hashpos import ( # noqa
7
+ HASH_DELIMITER,
8
+ UNIQUE_HASH_DELIMITER,
9
+ HashPos,
10
+ )
7
11
 
8
12
  HASHLINE_PREFIX_RE = HashPos.HASH_PREFIX_RE
9
13
 
@@ -72,14 +76,14 @@ def strip_hashline(text: str) -> str:
72
76
  return HashPos.strip_prefix(text)
73
77
 
74
78
 
75
- def normalize_hashline(hashline_str: str) -> str:
79
+ def normalize_hashline(hashline_str: str, throw=True) -> str:
76
80
  """
77
81
  Normalize a hashline string to the content id hash fragment.
78
82
  """
79
83
  if hashline_str in ("@000", "000@"):
80
84
  return hashline_str
81
85
  try:
82
- return HashPos.normalize(hashpos_str=hashline_str)
86
+ return HashPos.normalize(hashpos_str=hashline_str, throw=throw)
83
87
  except ValueError as e:
84
88
  raise ContentHashError(str(e))
85
89
 
@@ -275,6 +279,7 @@ def resolve_content_to_hashline_ids(
275
279
  original_content: str,
276
280
  start_value: str,
277
281
  end_value: str = None,
282
+ start_hint_line: int | None = None,
278
283
  ) -> tuple:
279
284
  """
280
285
  Resolve potential line content values to proper hashline content IDs.
@@ -295,6 +300,8 @@ def resolve_content_to_hashline_ids(
295
300
  original_content: Original file content (without hash prefixes)
296
301
  start_value: The start_line value from the edit
297
302
  end_value: The end_line value from the edit (optional)
303
+ start_hint_line: 0-based line number hint used to disambiguate
304
+ non-unique start_value matches (optional)
298
305
 
299
306
  Returns:
300
307
  tuple: (resolved_start, resolved_end) with hash IDs or original values
@@ -331,8 +338,11 @@ def resolve_content_to_hashline_ids(
331
338
 
332
339
  def _resolve_to_hash_id(lines, idx, hp):
333
340
  """Generate a hash ID for the line at the given index."""
334
- hash_id = hp.generate_public_id(lines[idx], idx)
335
- return hash_id + "::"
341
+ line_text = lines[idx]
342
+ # Compute the occurrence number (1-based) of this line instance
343
+ occurrence = 1 + sum(1 for i in range(idx) if lines[i] == line_text)
344
+ hash_id = hp.generate_public_id(line_text, idx, occurrence)
345
+ return HashPos.get_wrapped_id(hash_id)
336
346
 
337
347
  lines = original_content.splitlines()
338
348
  hp = HashPos(original_content)
@@ -354,6 +364,13 @@ def resolve_content_to_hashline_ids(
354
364
  if len(containing_indices) == 1:
355
365
  resolved_start_idx = containing_indices[0]
356
366
  resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
367
+ elif len(containing_indices) > 1 and start_hint_line is not None:
368
+ # Multiple matches - pick closest to hint line
369
+ resolved_start_idx = min(
370
+ containing_indices,
371
+ key=lambda idx: abs(idx - start_hint_line),
372
+ )
373
+ resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
357
374
  elif start_value is not None and _looks_like_content_id(start_value):
358
375
  # Already a content ID - try to resolve it to find the line position
359
376
  # for proximity matching with end_value
@@ -363,7 +380,22 @@ def resolve_content_to_hashline_ids(
363
380
  if candidates:
364
381
  resolved_start_idx = candidates[0]
365
382
  except (ContentHashError, ValueError):
366
- pass
383
+ # The value looks like a content ID but normalized to UNIQUE_HASH_DELIMITER which can't
384
+ # be spatially resolved. Fall back: strip the UNIQUE_HASH_DELIMITER prefix and treat the
385
+ # remaining content as line content to match.
386
+ content = HashPos.strip_prefix(start_value)
387
+ if content != start_value and content.strip():
388
+ containing_indices = _find_substring_matches(lines, content)
389
+ if len(containing_indices) == 1:
390
+ resolved_start_idx = containing_indices[0]
391
+ resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
392
+ elif len(containing_indices) > 1 and start_hint_line is not None:
393
+ # Multiple matches - pick closest to hint line
394
+ resolved_start_idx = min(
395
+ containing_indices,
396
+ key=lambda idx: abs(idx - start_hint_line),
397
+ )
398
+ resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
367
399
 
368
400
  # Resolve end_value based on proximity to start position
369
401
  resolved_end = end_value
@@ -389,6 +421,30 @@ def resolve_content_to_hashline_ids(
389
421
  key=lambda idx: abs(idx - resolved_start_idx),
390
422
  )
391
423
  resolved_end = _resolve_to_hash_id(lines, closest_idx, hp)
424
+ elif end_value is not None and _looks_like_content_id(end_value):
425
+ # Already a content ID - try to resolve it
426
+ try:
427
+ normalized = normalize_hashline(end_value)
428
+ candidates = hp.resolve_to_lines(normalized)
429
+ if candidates and resolved_start_idx is not None:
430
+ # Pick candidate closest to start position
431
+ resolved_end = _resolve_to_hash_id(lines, candidates[0], hp)
432
+ except (ContentHashError, ValueError):
433
+ # The value looks like a content ID but normalized to UNIQUE_HASH_DELIMITER which can't
434
+ # be spatially resolved. Fall back: strip the UNIQUE_HASH_DELIMITER prefix and treat the
435
+ # remaining content as line content to match.
436
+ content = HashPos.strip_prefix(end_value)
437
+ if content != end_value and content.strip():
438
+ containing_indices = _find_substring_matches(lines, content)
439
+ if len(containing_indices) == 1:
440
+ idx = containing_indices[0]
441
+ resolved_end = _resolve_to_hash_id(lines, idx, hp)
442
+ elif len(containing_indices) > 1 and resolved_start_idx is not None:
443
+ closest_idx = min(
444
+ containing_indices,
445
+ key=lambda idx: abs(idx - resolved_start_idx),
446
+ )
447
+ resolved_end = _resolve_to_hash_id(lines, closest_idx, hp)
392
448
 
393
449
  return resolved_start, resolved_end
394
450
 
@@ -1705,6 +1761,152 @@ def _apply_closure_safeguard(
1705
1761
  return safe_resolved_ops, rejected_ops
1706
1762
 
1707
1763
 
1764
+ def _try_resolve_as_unique_line(
1765
+ hp: HashPos,
1766
+ value: str,
1767
+ ) -> str | None:
1768
+ """
1769
+ Try to resolve a value by matching it against unique lines in the source content.
1770
+
1771
+ If the value (after stripping) matches exactly one line in the source
1772
+ AND that line appears only once (unique), returns a tilde-wrapped hash ID
1773
+ that can be resolved to line indices by the HashPos engine.
1774
+
1775
+ This serves as a preliminary resolution step that can salvage operations
1776
+ whose hash references could not be normalized, by checking if the value
1777
+ corresponds to unique line content in the file.
1778
+
1779
+ Args:
1780
+ hp: HashPos instance for the source content
1781
+ value: The value to resolve (typically line content rather than a hash)
1782
+
1783
+ Returns:
1784
+ A tilde-wrapped hash ID if resolution succeeds, None otherwise
1785
+ """
1786
+ if not hp or not value:
1787
+ return None
1788
+
1789
+ value_stripped = value.strip()
1790
+ if not value_stripped:
1791
+ return None
1792
+
1793
+ # Find all lines that exactly match this value
1794
+ matching_lines = []
1795
+ for i, line in enumerate(hp.lines):
1796
+ if line.strip() == value_stripped:
1797
+ matching_lines.append((i, line))
1798
+
1799
+ # Only resolve if it matches exactly one unique line
1800
+ if len(matching_lines) == 1:
1801
+ idx, matched_line = matching_lines[0]
1802
+ # Verify the line is actually unique in the source (appears only once)
1803
+ if hp.line_counts.get(matched_line, 0) == 1:
1804
+ hash_id = hp.generate_public_id(matched_line, idx, 1)
1805
+ return HashPos.get_wrapped_id(hash_id)
1806
+
1807
+ return None
1808
+
1809
+
1810
+ def _raise_clear_hash_error(hp, op, key):
1811
+ """Raise a ContentHashError with a clear message explaining why a value couldn't be resolved.
1812
+
1813
+ Checks if the value matches line content in the file and provides specific guidance
1814
+ about how to fix the reference (use hashed ID prefix, check for duplicates, etc.).
1815
+ """
1816
+ value = op.get(key, "")
1817
+ value_stripped = value.strip() if value else ""
1818
+
1819
+ if not hp or not value_stripped:
1820
+ raise ContentHashError(
1821
+ f"Could not resolve '{value}' as a content ID. "
1822
+ "Use a hashed ID prefix (e.g., `~XXXX~`) to target the line."
1823
+ )
1824
+
1825
+ # Count how many lines contain this value as a substring
1826
+ matching_count = 0
1827
+ for line in hp.lines:
1828
+ if value_stripped in line:
1829
+ matching_count += 1
1830
+
1831
+ if matching_count > 1:
1832
+ raise ContentHashError(
1833
+ f"Line '{value_stripped}' appears {matching_count} times in the file. "
1834
+ "Use the hashed ID prefix (e.g., `~XXXX~`) to disambiguate "
1835
+ "which occurrence to target."
1836
+ )
1837
+ elif matching_count == 1:
1838
+ raise ContentHashError(
1839
+ f"Line '{value_stripped}' was found once in the file but could not be "
1840
+ "resolved as a unique content ID. Use the hashed ID prefix (e.g., `~XXXX~`) "
1841
+ "to target it precisely."
1842
+ )
1843
+ else:
1844
+ raise ContentHashError(
1845
+ f"Line '{value_stripped}' was not found in the file. "
1846
+ "Use the exact line content or a hashed ID prefix (e.g., `~XXXX~`) "
1847
+ "to target the desired line."
1848
+ )
1849
+
1850
+
1851
+ def _detect_overlapping_ranges(resolved_ops):
1852
+ """Check resolved operations for genuinely overlapping ranges.
1853
+
1854
+ Detects operations where ranges overlap in a way that can't be resolved
1855
+ by simple deduplication (same-start) or containment. These non-trivial
1856
+ overlaps (e.g., a delete range partially overlapping a replace range)
1857
+ are flagged and returned as failed operations with a clear message.
1858
+ The overlapping operations' indices are also returned so the caller
1859
+ can exclude them from `resolved_ops`.
1860
+
1861
+ Returns a tuple of (failed_ops, indices_to_remove).
1862
+ - failed_ops: list of failed operation dicts with overlap errors
1863
+ - indices_to_remove: set of operation indices to remove from resolved_ops
1864
+ """
1865
+ if len(resolved_ops) < 2:
1866
+ return [], set()
1867
+
1868
+ failed_ops = []
1869
+ indices_to_remove = set()
1870
+ for i in range(len(resolved_ops)):
1871
+ a = resolved_ops[i]
1872
+ a_start = a["start_idx"]
1873
+ a_end = a["end_idx"]
1874
+
1875
+ for j in range(i + 1, len(resolved_ops)):
1876
+ b = resolved_ops[j]
1877
+ b_start = b["start_idx"]
1878
+ b_end = b["end_idx"]
1879
+
1880
+ # Skip trivial cases handled elsewhere:
1881
+ # 1. Same start line - handled by _deduplicate_ranges
1882
+ if a_start == b_start:
1883
+ continue
1884
+
1885
+ # 2. One range fully contained within the other - handled by _merged_contained_ranges
1886
+ if (a_start <= b_start and b_end <= a_end) or (b_start <= a_start and a_end <= b_end):
1887
+ continue
1888
+
1889
+ # Check if ranges genuinely overlap (not just adjacent/contiguous)
1890
+ # Two ranges [a_start, a_end] and [b_start, b_end] overlap if
1891
+ # a_start <= b_end and b_start <= a_end
1892
+ if a_start <= b_end and b_start <= a_end:
1893
+ op_a = a["op"]
1894
+ op_b = b["op"]
1895
+ error_msg = (
1896
+ f"Operation {a['index'] + 1} ({op_a['operation']}, lines "
1897
+ f"{a_start}-{a_end}) overlaps with operation {b['index'] + 1} "
1898
+ f"({op_b['operation']}, lines {b_start}-{b_end}). "
1899
+ "Edits with overlapping ranges are not supported. "
1900
+ "Combine them into a single edit or use non-overlapping ranges."
1901
+ )
1902
+ failed_ops.append({"index": a["index"], "error": error_msg, "operation": op_a})
1903
+ failed_ops.append({"index": b["index"], "error": error_msg, "operation": op_b})
1904
+ indices_to_remove.add(i)
1905
+ indices_to_remove.add(j)
1906
+
1907
+ return failed_ops, indices_to_remove
1908
+
1909
+
1708
1910
  def apply_hashline_operations(
1709
1911
  original_content: str,
1710
1912
  operations: list,
@@ -1730,15 +1932,35 @@ def apply_hashline_operations(
1730
1932
  # Normalize hashline inputs in operations
1731
1933
  normalized_operations = []
1732
1934
  failed_ops = []
1935
+ # Create a single HashPos instance for preliminary resolution and content hashing
1936
+ hp = HashPos(original_content) if original_content else HashPos("")
1733
1937
  # Loop through each operation to normalize hashline strings
1734
1938
  for i, op in enumerate(operations):
1735
1939
  try:
1736
1940
  normalized_op = op.copy()
1737
1941
  # Normalize start line hash to ensure consistent format
1738
- normalized_op["start_line_hash"] = normalize_hashline(op["start_line_hash"])
1942
+ try:
1943
+ normalized_op["start_line_hash"] = normalize_hashline(op["start_line_hash"])
1944
+ except (ContentHashError, ValueError):
1945
+ # Preliminary resolution: check if the value matches a unique line
1946
+ resolved = _try_resolve_as_unique_line(hp, op["start_line_hash"])
1947
+ if resolved is not None:
1948
+ normalized_op["start_line_hash"] = resolved
1949
+ else:
1950
+ _raise_clear_hash_error(hp, op, "start_line_hash")
1951
+
1739
1952
  if "end_line_hash" in op:
1740
1953
  # Normalize end line hash if present
1741
- normalized_op["end_line_hash"] = normalize_hashline(op["end_line_hash"])
1954
+ try:
1955
+ normalized_op["end_line_hash"] = normalize_hashline(op["end_line_hash"])
1956
+ except (ContentHashError, ValueError):
1957
+ # Preliminary resolution: check if the value matches a unique line
1958
+ resolved = _try_resolve_as_unique_line(hp, op["end_line_hash"])
1959
+ if resolved is not None:
1960
+ normalized_op["end_line_hash"] = resolved
1961
+ else:
1962
+ _raise_clear_hash_error(hp, op, "end_line_hash")
1963
+
1742
1964
  normalized_operations.append(normalized_op)
1743
1965
  except Exception as e:
1744
1966
  failed_ops.append({"index": i, "error": str(e), "operation": op})
@@ -1755,7 +1977,7 @@ def apply_hashline_operations(
1755
1977
 
1756
1978
  # Apply hashline to original content once
1757
1979
  # This converts content to hashed lines for line tracking
1758
- hashed_content = hashline(original_content)
1980
+ hashed_content = hp.format_content()
1759
1981
  hashed_lines = hashed_content.splitlines(keepends=True)
1760
1982
 
1761
1983
  # Resolve all operations to indices first
@@ -1833,6 +2055,14 @@ def apply_hashline_operations(
1833
2055
  except Exception as e:
1834
2056
  failed_ops.append({"index": i, "error": str(e), "operation": op})
1835
2057
 
2058
+ # Check for overlapping ranges among resolved operations
2059
+ overlap_failures, overlap_indices = _detect_overlapping_ranges(resolved_ops)
2060
+ for overlap_failure in overlap_failures:
2061
+ failed_ops.append(overlap_failure)
2062
+ # Remove overlapping operations from resolved_ops so they don't get applied
2063
+ if overlap_indices:
2064
+ resolved_ops = [op for i, op in enumerate(resolved_ops) if i not in overlap_indices]
2065
+
1836
2066
  # Honor cancellations: remove operations that are cancelled by later cancel operations
1837
2067
  resolved_ops = _honor_cancellations(resolved_ops)
1838
2068
  # Deduplicate: if multiple operations start on the same line, keep only the latest one